|
@@ -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) {
|