Browse Source

分析报告增加单位修改倍率

王波 20 hours ago
parent
commit
1cd699da34

+ 107 - 44
runeconomy-xk/src/main/java/com/gyee/runeconomy/service/EarlyWarning/ReportService.java

@@ -14,10 +14,6 @@ import org.springframework.stereotype.Service;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.DecimalFormat;
-import java.time.LocalDate;
-import java.time.YearMonth;
-import java.time.format.DateTimeFormatter;
-import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -57,6 +53,9 @@ public class ReportService {
             sbrl = rl.get(0).getPowerProduction();
         }
         List<TurbineInfoDay> turbineList = turbineInfoDayService.getTurbineList(wtid, timeRange[0], timeRange[1]);
+        List<TurbineInfoDay> cturbineList = turbineInfoDayService.getTurbineList(wtid, timeRange[0], timeRange[1]);
+        formatTurbineList(turbineList);
+        twoTurbineList(cturbineList);
         List<TurbineInfoDay> tqturbineList = turbineInfoDayService.getTurbineList(wtid, qntime[0], qntime[1]);
 
         List<IndicatorData> result = new ArrayList<>();
@@ -64,78 +63,111 @@ public class ReportService {
 
         // 计算值
         double currentPower = sumRounded(turbineList, t -> t.getRfdl());
+        currentPower = DoubleUtils.getRoundingNum((currentPower / 1000) ,2);
         double lastYearPower = sumRounded(tqturbineList, t -> t.getRfdl());
+        lastYearPower = DoubleUtils.getRoundingNum((lastYearPower / 1000) ,2);
+
         double currentTheoryPower = sumRounded(turbineList, t -> t.getLlfdl());
+        currentTheoryPower = DoubleUtils.getRoundingNum((currentTheoryPower / 1000) ,2);
         double lastYearTheoryPower = sumRounded(tqturbineList, t -> t.getLlfdl());
+        lastYearTheoryPower = DoubleUtils.getRoundingNum((lastYearTheoryPower / 1000) ,2);
+
         double currentWindSpeed = averageRounded(turbineList, t -> t.getPjfs());
         double lastYearWindSpeed = averageRounded(tqturbineList, t -> t.getPjfs());
-        double currentUtilization = DoubleUtils.getRoundingNum(currentPower / sbrl, 0);
-        double lastYearUtilization = DoubleUtils.getRoundingNum(lastYearPower / sbrl, 0);
-        int jhyxsj = daysInMonth * 24;
-        int tqjhyxsj = qnInMonth * 24;
+
+        // 将万千瓦时转换为千瓦时
+        double powerInKWh = currentPower * 10000;
+        double lastpowerInKWh = lastYearPower * 10000;
+        double currentUtilization = DoubleUtils.getRoundingNum(powerInKWh / sbrl, 0);
+        double lastYearUtilization = DoubleUtils.getRoundingNum(lastpowerInKWh / sbrl, 0);
+
+        int jhyxsj = daysInMonth * 24 * 60;
+        int tqjhyxsj = qnInMonth * 24 * 60;
+
         double yxsj = sumRounded(turbineList, t -> t.getYxMin());
         double tqyxsj = sumRounded(tqturbineList, t -> t.getYxMin());
-        double currentEquipmentUtilization = (yxsj / jhyxsj * 100);
+
+        double currentEquipmentUtilization = ((yxsj / jhyxsj) * 100);
         currentEquipmentUtilization = new BigDecimal(currentEquipmentUtilization).setScale(2, RoundingMode.HALF_UP).doubleValue();
-        double lastYearEquipmentUtilization = (tqyxsj / tqjhyxsj * 100);
+        double lastYearEquipmentUtilization = (tqyxsj / tqjhyxsj * 1);
         lastYearEquipmentUtilization = new BigDecimal(lastYearEquipmentUtilization).setScale(2, RoundingMode.HALF_UP).doubleValue();
-        double jxsj = sumRounded(turbineList, t -> t.getJxMin()); // 假设正确字段
+
+        double jxsj = sumRounded(turbineList, t -> t.getJxMin());
         double tqjxsj = sumRounded(tqturbineList, t -> t.getJxMin());
-        double currentEfficiencyCoefficient = (yxsj + jxsj) / jhyxsj * 100;
+
+        double currentEfficiencyCoefficient = ((yxsj + jxsj) / jhyxsj) * 100;
         currentEfficiencyCoefficient = new BigDecimal(currentEfficiencyCoefficient).setScale(2, RoundingMode.HALF_UP).doubleValue();
-        double lastYearEfficiencyCoefficient = (tqyxsj + tqjxsj) / tqjhyxsj * 100;
+        double lastYearEfficiencyCoefficient = (tqyxsj + tqjxsj) / tqjhyxsj * 1;
         lastYearEfficiencyCoefficient = new BigDecimal(lastYearEfficiencyCoefficient).setScale(2, RoundingMode.HALF_UP).doubleValue();
+
         double currentSmallWindSpeed = averageRounded(turbineList, t -> t.getXfqrfs());
         double lastYearSmallWindSpeed = averageRounded(tqturbineList, t -> t.getXfqrfs());
+
         double currentRunningWindHours = sumRounded(turbineList, t -> t.getYxfss());
         double lastYearRunningWindHours = sumRounded(tqturbineList, t -> t.getYxfss());
+
         double currentFaultLossPower = sumRounded(turbineList, t -> t.getGzss());
+        currentFaultLossPower = DoubleUtils.getRoundingNum((currentFaultLossPower / 1000) ,2);
         double lastYearFaultLossPower = sumRounded(tqturbineList, t -> t.getGzss());
+        lastYearFaultLossPower = DoubleUtils.getRoundingNum((lastYearFaultLossPower / 1000) ,2);
+
         double currentDispatchLossPower = sumRounded(turbineList, t -> t.getXdss());
-        currentDispatchLossPower = new BigDecimal(currentDispatchLossPower).setScale(2, RoundingMode.HALF_UP).doubleValue();
+//        currentDispatchLossPower = new BigDecimal(currentDispatchLossPower).setScale(2, RoundingMode.HALF_UP).doubleValue();
+        currentDispatchLossPower = new BigDecimal(currentDispatchLossPower).divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_UP)  // 除以1000,并保留2位小数
+                .doubleValue();
+
         double lastYearDispatchLossPower = sumRounded(tqturbineList, t -> t.getXdss());
-        lastYearDispatchLossPower = new BigDecimal(lastYearDispatchLossPower).setScale(2, RoundingMode.HALF_UP).doubleValue();
+        lastYearDispatchLossPower = new BigDecimal(lastYearDispatchLossPower).divide(BigDecimal.valueOf(1000),2, RoundingMode.HALF_UP).doubleValue();
+
         double currentPlannedMaintenanceLossPower = sumRounded(turbineList, t -> t.getJhjxss());
-        currentPlannedMaintenanceLossPower = new BigDecimal(currentPlannedMaintenanceLossPower).setScale(2, RoundingMode.HALF_UP).doubleValue();
+        currentPlannedMaintenanceLossPower = new BigDecimal(currentPlannedMaintenanceLossPower).divide(BigDecimal.valueOf(1000),2, RoundingMode.HALF_UP).doubleValue();
         double lastYearPlannedMaintenanceLossPower = sumRounded(tqturbineList, t -> t.getJhjxss());
-        lastYearPlannedMaintenanceLossPower = new BigDecimal(lastYearPlannedMaintenanceLossPower).setScale(2, RoundingMode.HALF_UP).doubleValue();
+        lastYearPlannedMaintenanceLossPower = new BigDecimal(lastYearPlannedMaintenanceLossPower).divide(BigDecimal.valueOf(1000),2, RoundingMode.HALF_UP).doubleValue();
+
         double currentPerformanceLossPower = sumRounded(turbineList, t -> t.getXnss());
-        currentPerformanceLossPower = new BigDecimal(currentPerformanceLossPower).setScale(2, RoundingMode.HALF_UP).doubleValue();
+        currentPerformanceLossPower = new BigDecimal(currentPerformanceLossPower).divide(BigDecimal.valueOf(1000),2, RoundingMode.HALF_UP).doubleValue();
         double lastYearPerformanceLossPower = sumRounded(tqturbineList, t -> t.getXnss());
-        lastYearPerformanceLossPower = new BigDecimal(lastYearPerformanceLossPower).setScale(2, RoundingMode.HALF_UP).doubleValue();
+        lastYearPerformanceLossPower = new BigDecimal(lastYearPerformanceLossPower).divide(BigDecimal.valueOf(1000),2, RoundingMode.HALF_UP).doubleValue();
+
         double currentFaultDowntime = sumRounded(turbineList, t -> t.getGzMin());
+        currentFaultDowntime = DoubleUtils.getRoundingNum((currentFaultDowntime / 60),2);
         double lastYearFaultDowntime = sumRounded(tqturbineList, t -> t.getGzMin());
-        double currentMaintenanceDowntime = jxsj;
-        double lastYearMaintenanceDowntime = tqjxsj;
-        double currentGridConnectionTime = yxsj;
-        double lastYearGridConnectionTime = tqyxsj;
+        lastYearFaultDowntime = DoubleUtils.getRoundingNum(lastYearFaultDowntime / 60,2);
+        double currentMaintenanceDowntime = DoubleUtils.getRoundingNum((jxsj / 60),2);
+        double lastYearMaintenanceDowntime = DoubleUtils.getRoundingNum((tqjxsj / 60),2);
+        double currentGridConnectionTime = DoubleUtils.getRoundingNum((yxsj / 60),2);
+        double lastYearGridConnectionTime = DoubleUtils.getRoundingNum((tqyxsj / 60),2);
         double currentStandbyTime = sumRounded(turbineList, t -> t.getDjMin());
+        currentStandbyTime = DoubleUtils.getRoundingNum((currentStandbyTime / 60),2);
         double lastYearStandbyTime = sumRounded(tqturbineList, t -> t.getDjMin());
+        lastYearStandbyTime = DoubleUtils.getRoundingNum((lastYearStandbyTime / 60),2);
         double currentCommFailureTime = sumRounded(turbineList, t -> t.getTjMin());
+        currentCommFailureTime = DoubleUtils.getRoundingNum((currentCommFailureTime / 60),2);
         double lastYearCommFailureTime = sumRounded(tqturbineList, t -> t.getTjMin());
+        lastYearCommFailureTime = DoubleUtils.getRoundingNum((lastYearCommFailureTime / 60),2);
         double currentCalmWindFrequency = sumRounded(turbineList, t -> t.getJfpl());
         double lastYearCalmWindFrequency = sumRounded(tqturbineList, t -> t.getJfpl());
 
         // 使用方法来简化添加数据
-        result.add(createIndicatorData("实际发电量", currentPower, lastYearPower));
-        result.add(createIndicatorData("理论发电量", currentTheoryPower, lastYearTheoryPower));
-        result.add(createIndicatorData("平均风速", currentWindSpeed, lastYearWindSpeed));
-        result.add(createIndicatorData("利用小时", currentUtilization, lastYearUtilization));
-        result.add(createIndicatorData("设备可利用率", currentEquipmentUtilization, lastYearEquipmentUtilization));
-        result.add(createIndicatorData("等效可用系数", currentEfficiencyCoefficient, lastYearEfficiencyCoefficient));
-        result.add(createIndicatorData("小风切入风速", currentSmallWindSpeed, lastYearSmallWindSpeed));
+        result.add(createIndicatorData("实际发电量(万kwh)", currentPower, lastYearPower));
+        result.add(createIndicatorData("理论发电量(万kwh)", currentTheoryPower, lastYearTheoryPower));
+        result.add(createIndicatorData("平均风速(m/s)", currentWindSpeed, lastYearWindSpeed));
+        result.add(createIndicatorData("利用小时(h)", currentUtilization, lastYearUtilization));
+        result.add(createIndicatorData("设备可利用率(%)", currentEquipmentUtilization, lastYearEquipmentUtilization));
+        result.add(createIndicatorData("等效可用系数(%)", currentEfficiencyCoefficient, lastYearEfficiencyCoefficient));
+        result.add(createIndicatorData("小风切入风速(m/s)", currentSmallWindSpeed, lastYearSmallWindSpeed));
 //        result.add(createIndicatorData("小风切入合格率", currentSmallWindRate, lastYearSmallWindRate));
-        result.add(createIndicatorData("有效风时数", currentRunningWindHours, lastYearRunningWindHours));
-        result.add(createIndicatorData("故障损失电量", currentFaultLossPower, lastYearFaultLossPower));
-        result.add(createIndicatorData("调度限电损失电量", currentDispatchLossPower, lastYearDispatchLossPower));
-        result.add(createIndicatorData("计划检修损失电量", currentPlannedMaintenanceLossPower, lastYearPlannedMaintenanceLossPower));
-        result.add(createIndicatorData("性能未达标损失电量", currentPerformanceLossPower, lastYearPerformanceLossPower));
-        result.add(createIndicatorData("故障停运时间", currentFaultDowntime, lastYearFaultDowntime));
-        result.add(createIndicatorData("检修停运时间", currentMaintenanceDowntime, lastYearMaintenanceDowntime));
-        result.add(createIndicatorData("并网时间", currentGridConnectionTime, lastYearGridConnectionTime));
-        result.add(createIndicatorData("待机时间", currentStandbyTime, lastYearStandbyTime));
-        result.add(createIndicatorData("通讯中断时间", currentCommFailureTime, lastYearCommFailureTime));
-        result.add(createIndicatorData("静风频率", currentCalmWindFrequency, lastYearCalmWindFrequency));
+        result.add(createIndicatorData("有效风时数(h)", currentRunningWindHours, lastYearRunningWindHours));
+        result.add(createIndicatorData("故障损失电量(万kwh)", currentFaultLossPower, lastYearFaultLossPower));
+        result.add(createIndicatorData("调度限电损失电量(万kwh)", currentDispatchLossPower, lastYearDispatchLossPower));
+        result.add(createIndicatorData("计划检修损失电量(万kwh)", currentPlannedMaintenanceLossPower, lastYearPlannedMaintenanceLossPower));
+        result.add(createIndicatorData("性能未达标损失电量(万kwh)", currentPerformanceLossPower, lastYearPerformanceLossPower));
+        result.add(createIndicatorData("故障停运时间(h)", currentFaultDowntime, lastYearFaultDowntime));
+        result.add(createIndicatorData("检修停运时间(h)", currentMaintenanceDowntime, lastYearMaintenanceDowntime));
+        result.add(createIndicatorData("并网时间(h)", currentGridConnectionTime, lastYearGridConnectionTime));
+        result.add(createIndicatorData("待机时间(h)", currentStandbyTime, lastYearStandbyTime));
+        result.add(createIndicatorData("通讯中断时间(h)", currentCommFailureTime, lastYearCommFailureTime));
+        result.add(createIndicatorData("静风频率(%)", currentCalmWindFrequency, lastYearCalmWindFrequency));
         map.put("lb", result);
 
         double fdlzzl = DoubleUtils.getRoundingNum(calculateGrowthRate(currentPower, lastYearPower),2);//发电量增长率
@@ -152,8 +184,8 @@ public class ReportService {
                 "理论发电量" + currentTheoryPower + "万kwh,实际发电量与理论发电量相差" + dlxc + "万kwh。";
         map.put("wz1", wz1);
         map.put("wz2", wz2);
-        turbineList.sort(Comparator.comparing(TurbineInfoDay::getRecordDate));
-        map.put("tb", turbineList);
+        cturbineList.sort(Comparator.comparing(TurbineInfoDay::getRecordDate));
+        map.put("tb", cturbineList);
 
         return map;
     }
@@ -177,7 +209,38 @@ public class ReportService {
         );
     }
 
-    // 定义辅助方法
+    //保留两位小数
+    private void formatTurbineList(List<TurbineInfoDay> turbineList) {
+        for (TurbineInfoDay turbine : turbineList) {
+            if (turbine.getRfdl() != null) {
+                BigDecimal bd = BigDecimal.valueOf(turbine.getRfdl())
+                        .setScale(2, RoundingMode.HALF_UP);
+                turbine.setRfdl(bd.doubleValue());
+            }
+            if (turbine.getPjfs() != null) {
+                BigDecimal bd = BigDecimal.valueOf(turbine.getPjfs())
+                        .setScale(2, RoundingMode.HALF_UP);
+                turbine.setPjfs(bd.doubleValue());
+            }
+        }
+    }
+    //保留两位小数并且将日发电量换算为万千瓦时
+    private void twoTurbineList(List<TurbineInfoDay> turbineList) {
+        for (TurbineInfoDay turbine : turbineList) {
+            if (turbine.getRfdl() != null) {
+                BigDecimal bd = BigDecimal.valueOf(turbine.getRfdl())
+                        .divide(BigDecimal.valueOf(1000),2, RoundingMode.HALF_UP);
+                turbine.setRfdl(bd.doubleValue());
+            }
+            if (turbine.getPjfs() != null) {
+                BigDecimal bd = BigDecimal.valueOf(turbine.getPjfs())
+                        .setScale(2, RoundingMode.HALF_UP);
+                turbine.setPjfs(bd.doubleValue());
+            }
+        }
+    }
+
+    // 定义辅助方法-保留两位小数
     private double sumRounded(List<TurbineInfoDay> list, Function<TurbineInfoDay, Double> getter) {
         BigDecimal sum = BigDecimal.ZERO;
         for (TurbineInfoDay t : list) {