Browse Source

准确率计算经会议讨论结果调整单点偏差的计算方式

tl 6 months ago
parent
commit
e8f61c98e2

+ 8 - 1
cpp-admin/src/main/java/com/cpp/web/service/accuracy/CalcAccuracy.java

@@ -7,6 +7,7 @@ import com.cpp.web.domain.station.PowerStationStatusData;
 import com.cpp.web.service.station.*;
 import com.cpp.web.service.station.*;
 import com.cpp.web.utils.DateTimeUtil;
 import com.cpp.web.utils.DateTimeUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.util.*;
 import java.util.*;
@@ -16,6 +17,7 @@ import java.util.*;
  */
  */
 @Service
 @Service
 @RequiredArgsConstructor
 @RequiredArgsConstructor
+@Slf4j
 public class CalcAccuracy {
 public class CalcAccuracy {
 
 
     public final AccuracyPassRateService accuracyPassRateService;
     public final AccuracyPassRateService accuracyPassRateService;
@@ -28,6 +30,7 @@ public class CalcAccuracy {
      * 执行准确率计算
      * 执行准确率计算
      */
      */
     public void calculate() {
     public void calculate() {
+        log.info("-----------------开始执行准确率计算任务----------------------");
         //获取前一天的数据
         //获取前一天的数据
         Long day = 86400000L;
         Long day = 86400000L;
         Long now = System.currentTimeMillis();
         Long now = System.currentTimeMillis();
@@ -57,6 +60,7 @@ public class CalcAccuracy {
         if (accuracyPassRateList.size() > 0) {
         if (accuracyPassRateList.size() > 0) {
             accuracyPassRateService.saveBatch(accuracyPassRateList);
             accuracyPassRateService.saveBatch(accuracyPassRateList);
         }
         }
+        log.info("-----------------结束执行准确率计算任务----------------------");
     }
     }
 
 
 
 
@@ -67,7 +71,10 @@ public class CalcAccuracy {
      * @param stringList
      * @param stringList
      * @return
      * @return
      */
      */
-    public Boolean listHasIntersection(List<String> strings, List<String> stringList) {
+    public Boolean listHasIntersection(
+            List<String> strings,
+            List<String> stringList
+    ) {
         for (String string : strings) {
         for (String string : strings) {
             for (String s : stringList) {
             for (String s : stringList) {
                 if (string.equals(s)) {
                 if (string.equals(s)) {

+ 10 - 17
cpp-admin/src/main/java/com/cpp/web/service/accuracy/impl/CalculateForecastPowerShortTermCloudImpl.java

@@ -6,7 +6,6 @@ import com.cpp.web.domain.cloud.ForecastPowerShortTermCloud;
 import com.cpp.web.domain.enums.DataSourcesEnum;
 import com.cpp.web.domain.enums.DataSourcesEnum;
 import com.cpp.web.domain.enums.ForecastTypeEnum;
 import com.cpp.web.domain.enums.ForecastTypeEnum;
 import com.cpp.web.domain.station.ElectricField;
 import com.cpp.web.domain.station.ElectricField;
-import com.cpp.web.domain.station.ForecastPowerShortTermStation;
 import com.cpp.web.domain.station.PowerStationStatusData;
 import com.cpp.web.domain.station.PowerStationStatusData;
 import com.cpp.web.service.accuracy.CalculateInterface;
 import com.cpp.web.service.accuracy.CalculateInterface;
 import com.cpp.web.service.cloud.ForecastPowerShortTermCloudService;
 import com.cpp.web.service.cloud.ForecastPowerShortTermCloudService;
@@ -131,38 +130,32 @@ public class CalculateForecastPowerShortTermCloudImpl implements CalculateInterf
                                 if (resultMap.get(CalculateResult.DATA_TAG) != null) {
                                 if (resultMap.get(CalculateResult.DATA_TAG) != null) {
                                     accuracyPassRate.setAccuracy(String.valueOf(resultMap.get(CalculateResult.DATA_TAG)));
                                     accuracyPassRate.setAccuracy(String.valueOf(resultMap.get(CalculateResult.DATA_TAG)));
                                 }
                                 }
-                                accuracyPassRate.setAccuracy(String.valueOf(resultMap.get(CalculateResult.MSG_TAG)));
                             }
                             }
 
 
                         }
                         }
                         if (formulaTypes.contains("POINT_SHORT_ACCURACY")) {//单点偏差计算
                         if (formulaTypes.contains("POINT_SHORT_ACCURACY")) {//单点偏差计算
-
-                            BigDecimal sum = BigDecimal.ZERO;
-                            Boolean b = false;
-
+                            List<BigDecimal> values = new ArrayList<>();
                             for (long stepTime = startTime.getTime(); stepTime <= endTime.getTime(); stepTime += 900000L) {
                             for (long stepTime = startTime.getTime(); stepTime <= endTime.getTime(); stepTime += 900000L) {
                                 Date finalTime = new Date(stepTime);
                                 Date finalTime = new Date(stepTime);
 
 
                                 if (dateForecastListMap.containsKey(finalTime) && datePowerListMap.containsKey(finalTime)) {
                                 if (dateForecastListMap.containsKey(finalTime) && datePowerListMap.containsKey(finalTime)) {
-
-                                    ForecastPowerShortTermCloud forecastPowerShortTermCloud = dateForecastListMap.get(finalTime).get(0);
                                     PowerStationStatusData powerStationStatusData = datePowerListMap.get(finalTime).get(0);
                                     PowerStationStatusData powerStationStatusData = datePowerListMap.get(finalTime).get(0);
-
-
-                                    BigDecimal subtractAbs = powerStationStatusData.getRealValue().subtract(forecastPowerShortTermCloud.getFpValue()).abs();
-                                    BigDecimal value = subtractAbs.divide(electricField.getCapacity(), 4, BigDecimal.ROUND_DOWN);
-                                    sum = sum.add(value);
-                                    b = true;
+                                    if (!powerStationStatusData.getPowerRationing().equals(1)) {
+                                        ForecastPowerShortTermCloud forecastPowerShortTermCloud = dateForecastListMap.get(finalTime).get(0);
+                                        BigDecimal subtractAbs = powerStationStatusData.getRealValue().subtract(forecastPowerShortTermCloud.getFpValue()).abs();
+                                        BigDecimal value = subtractAbs.divide(electricField.getCapacity(), 4, BigDecimal.ROUND_DOWN);
+                                        values.add(value);
+                                    }
                                 }
                                 }
 
 
                             }
                             }
 
 
-                            if (b) {
-                                accuracyPassRate.setDeviationSum(sum.doubleValue()*100 + "%");
+                            if (values.size() > 0) {
+                                Double value = values.stream().mapToDouble(v -> v.doubleValue()).average().getAsDouble();
+                                accuracyPassRate.setDeviationSum(String.format("%.2f", value * 100) + "%");
                             } else {
                             } else {
                                 accuracyPassRate.setDeviationSum("无可用数据计算");
                                 accuracyPassRate.setDeviationSum("无可用数据计算");
                             }
                             }
-
                         }
                         }
                         accuracyPassRates.add(accuracyPassRate);
                         accuracyPassRates.add(accuracyPassRate);
                     }
                     }

+ 10 - 19
cpp-admin/src/main/java/com/cpp/web/service/accuracy/impl/CalculateForecastPowerShortTermRegulationImpl.java

@@ -31,9 +31,7 @@ public class CalculateForecastPowerShortTermRegulationImpl implements CalculateI
     public List<AccuracyPassRate> calc(Date startTime,Date endTime,List<PowerStationStatusData> powerStationStatusDataList, List<ElectricField> electricFieldList, List<String> formulaTypes, String province){
     public List<AccuracyPassRate> calc(Date startTime,Date endTime,List<PowerStationStatusData> powerStationStatusDataList, List<ElectricField> electricFieldList, List<String> formulaTypes, String province){
 
 
         List<AccuracyPassRate> accuracyPassRates = new ArrayList<>();
         List<AccuracyPassRate> accuracyPassRates = new ArrayList<>();
-
         List<ForecastPowerShortTermRegulation> forecastPowerShortTermStationList = forecastPowerShortTermRegulationService.findByForecastTimeBetweenAndHowLongAgo(startTime, endTime, 1);
         List<ForecastPowerShortTermRegulation> forecastPowerShortTermStationList = forecastPowerShortTermRegulationService.findByForecastTimeBetweenAndHowLongAgo(startTime, endTime, 1);
-
         Map<Integer, List<ForecastPowerShortTermRegulation>> agoListMap = forecastPowerShortTermStationList.stream().collect(Collectors.groupingBy(ForecastPowerShortTermRegulation::getForecastHowLongAgo, Collectors.toList()));
         Map<Integer, List<ForecastPowerShortTermRegulation>> agoListMap = forecastPowerShortTermStationList.stream().collect(Collectors.groupingBy(ForecastPowerShortTermRegulation::getForecastHowLongAgo, Collectors.toList()));
 
 
         for (int ago = 1; ago < 11; ago++) {
         for (int ago = 1; ago < 11; ago++) {
@@ -81,8 +79,6 @@ public class CalculateForecastPowerShortTermRegulationImpl implements CalculateI
                                     calculationInfo.setForecastTheoryValue(forecastPowerShortTermRegulation.getFpValue());
                                     calculationInfo.setForecastTheoryValue(forecastPowerShortTermRegulation.getFpValue());
                                     calculationInfo.setForecastCapacity(cap);
                                     calculationInfo.setForecastCapacity(cap);
                                     calculationInfo.setForecastSuCapacity(cap);
                                     calculationInfo.setForecastSuCapacity(cap);
-
-
                                     //实际
                                     //实际
                                     calculationInfo.setCapacity(cap);
                                     calculationInfo.setCapacity(cap);
                                     calculationInfo.setOpenCapacity(cap);
                                     calculationInfo.setOpenCapacity(cap);
@@ -126,33 +122,28 @@ public class CalculateForecastPowerShortTermRegulationImpl implements CalculateI
                         }
                         }
                     }
                     }
                     if (formulaTypes.contains("POINT_SHORT_ACCURACY")) {//单点偏差计算
                     if (formulaTypes.contains("POINT_SHORT_ACCURACY")) {//单点偏差计算
-
-                        BigDecimal sum = BigDecimal.ZERO;
-                        Boolean b = false;
-
+                        List<BigDecimal> values = new ArrayList<>();
                         for (long stepTime = startTime.getTime(); stepTime <= endTime.getTime(); stepTime += 900000L) {
                         for (long stepTime = startTime.getTime(); stepTime <= endTime.getTime(); stepTime += 900000L) {
                             Date finalTime = new Date(stepTime);
                             Date finalTime = new Date(stepTime);
 
 
                             if (dateForecastListMap.containsKey(finalTime) && datePowerListMap.containsKey(finalTime)) {
                             if (dateForecastListMap.containsKey(finalTime) && datePowerListMap.containsKey(finalTime)) {
-
-                                ForecastPowerShortTermRegulation forecastPowerShortTermRegulation = dateForecastListMap.get(finalTime).get(0);
                                 PowerStationStatusData powerStationStatusData = datePowerListMap.get(finalTime).get(0);
                                 PowerStationStatusData powerStationStatusData = datePowerListMap.get(finalTime).get(0);
-
-
-                                BigDecimal subtractAbs = powerStationStatusData.getRealValue().subtract(forecastPowerShortTermRegulation.getFpValue()).abs();
-                                BigDecimal value = subtractAbs.divide(electricField.getCapacity(), 4, BigDecimal.ROUND_DOWN);
-                                sum = sum.add(value);
-                                b = true;
+                                if (!powerStationStatusData.getPowerRationing().equals(1)) {
+                                    ForecastPowerShortTermRegulation forecastPowerShortTermRegulation = dateForecastListMap.get(finalTime).get(0);
+                                    BigDecimal subtractAbs = powerStationStatusData.getRealValue().subtract(forecastPowerShortTermRegulation.getFpValue()).abs();
+                                    BigDecimal value = subtractAbs.divide(electricField.getCapacity(), 4, BigDecimal.ROUND_DOWN);
+                                    values.add(value);
+                                }
                             }
                             }
 
 
                         }
                         }
 
 
-                        if (b) {
-                            accuracyPassRate.setDeviationSum(sum.doubleValue()*100 + "%");
+                        if (values.size() > 0) {
+                            Double value = values.stream().mapToDouble(v -> v.doubleValue()).average().getAsDouble();
+                            accuracyPassRate.setDeviationSum(String.format("%.2f", value * 100) + "%");
                         } else {
                         } else {
                             accuracyPassRate.setDeviationSum("无可用数据计算");
                             accuracyPassRate.setDeviationSum("无可用数据计算");
                         }
                         }
-
                     }
                     }
 
 
                     accuracyPassRates.add(accuracyPassRate);
                     accuracyPassRates.add(accuracyPassRate);

+ 10 - 67
cpp-admin/src/main/java/com/cpp/web/service/accuracy/impl/CalculateForecastPowerShortTermStationImpl.java

@@ -33,10 +33,7 @@ public class CalculateForecastPowerShortTermStationImpl implements CalculateInte
     public List<AccuracyPassRate> calc(Date startTime, Date endTime, List<PowerStationStatusData> powerStationStatusDataList, List<ElectricField> electricFieldList, List<String> formulaTypes, String province) {
     public List<AccuracyPassRate> calc(Date startTime, Date endTime, List<PowerStationStatusData> powerStationStatusDataList, List<ElectricField> electricFieldList, List<String> formulaTypes, String province) {
 
 
         List<AccuracyPassRate> accuracyPassRates = new ArrayList<>();
         List<AccuracyPassRate> accuracyPassRates = new ArrayList<>();
-
         List<ForecastPowerShortTermStation> forecastPowerShortTermStationList = forecastPowerShortTermStationService.findByForecastTimeBetween(startTime, endTime);
         List<ForecastPowerShortTermStation> forecastPowerShortTermStationList = forecastPowerShortTermStationService.findByForecastTimeBetween(startTime, endTime);
-
-
         Map<Integer, List<ForecastPowerShortTermStation>> agoListMap = forecastPowerShortTermStationList.stream().collect(Collectors.groupingBy(ForecastPowerShortTermStation::getForecastHowLongAgo, Collectors.toList()));
         Map<Integer, List<ForecastPowerShortTermStation>> agoListMap = forecastPowerShortTermStationList.stream().collect(Collectors.groupingBy(ForecastPowerShortTermStation::getForecastHowLongAgo, Collectors.toList()));
 
 
         //d1-10
         //d1-10
@@ -49,7 +46,6 @@ public class CalculateForecastPowerShortTermStationImpl implements CalculateInte
                     String stationCode = electricField.getStationCode();
                     String stationCode = electricField.getStationCode();
                     // 场站类型
                     // 场站类型
                     String electricType = electricField.getElectricFieldTypeEnum();
                     String electricType = electricField.getElectricFieldTypeEnum();
-
                     AccuracyPassRate accuracyPassRate = new AccuracyPassRate();
                     AccuracyPassRate accuracyPassRate = new AccuracyPassRate();
                     accuracyPassRate.setTime(startTime);
                     accuracyPassRate.setTime(startTime);
                     accuracyPassRate.setDataSources(DataSourcesEnum.E1);
                     accuracyPassRate.setDataSources(DataSourcesEnum.E1);
@@ -85,8 +81,6 @@ public class CalculateForecastPowerShortTermStationImpl implements CalculateInte
                                     calculationInfo.setForecastTheoryValue(forecastPowerShortTermStation.getFpValue());
                                     calculationInfo.setForecastTheoryValue(forecastPowerShortTermStation.getFpValue());
                                     calculationInfo.setForecastCapacity(cap);
                                     calculationInfo.setForecastCapacity(cap);
                                     calculationInfo.setForecastSuCapacity(cap);
                                     calculationInfo.setForecastSuCapacity(cap);
-
-
                                     //实际
                                     //实际
                                     calculationInfo.setCapacity(cap);
                                     calculationInfo.setCapacity(cap);
                                     calculationInfo.setOpenCapacity(cap);
                                     calculationInfo.setOpenCapacity(cap);
@@ -102,7 +96,6 @@ public class CalculateForecastPowerShortTermStationImpl implements CalculateInte
                             }
                             }
                         }
                         }
 
 
-
                         if (calculationInfoList == null || calculationInfoList.size() == 0) {
                         if (calculationInfoList == null || calculationInfoList.size() == 0) {
                             accuracyPassRate.setAccuracy("无可用数据计算");
                             accuracyPassRate.setAccuracy("无可用数据计算");
                         } else {
                         } else {
@@ -129,78 +122,28 @@ public class CalculateForecastPowerShortTermStationImpl implements CalculateInte
                         }
                         }
                     }
                     }
                     if (formulaTypes.contains("POINT_SHORT_ACCURACY")) {//单点偏差计算
                     if (formulaTypes.contains("POINT_SHORT_ACCURACY")) {//单点偏差计算
-
-                        BigDecimal sum = BigDecimal.ZERO;
-                        Boolean b = false;
-
+                        List<BigDecimal> values = new ArrayList<>();
                         for (long stepTime = startTime.getTime(); stepTime <= endTime.getTime(); stepTime += 900000L) {
                         for (long stepTime = startTime.getTime(); stepTime <= endTime.getTime(); stepTime += 900000L) {
                             Date finalTime = new Date(stepTime);
                             Date finalTime = new Date(stepTime);
 
 
                             if (dateForecastListMap.containsKey(finalTime) && datePowerListMap.containsKey(finalTime)) {
                             if (dateForecastListMap.containsKey(finalTime) && datePowerListMap.containsKey(finalTime)) {
-
-                                ForecastPowerShortTermStation forecastPowerShortTermStation = dateForecastListMap.get(finalTime).get(0);
                                 PowerStationStatusData powerStationStatusData = datePowerListMap.get(finalTime).get(0);
                                 PowerStationStatusData powerStationStatusData = datePowerListMap.get(finalTime).get(0);
-
-
-                                BigDecimal subtractAbs = powerStationStatusData.getRealValue().subtract(forecastPowerShortTermStation.getFpValue()).abs();
-                                BigDecimal value = subtractAbs.divide(electricField.getCapacity(), 4, BigDecimal.ROUND_DOWN);
-                                sum = sum.add(value);
-                                b = true;
+                                if (!powerStationStatusData.getPowerRationing().equals(1)) {
+                                    ForecastPowerShortTermStation forecastPowerShortTermStation = dateForecastListMap.get(finalTime).get(0);
+                                    BigDecimal subtractAbs = powerStationStatusData.getRealValue().subtract(forecastPowerShortTermStation.getFpValue()).abs();
+                                    BigDecimal value = subtractAbs.divide(electricField.getCapacity(), 4, BigDecimal.ROUND_DOWN);
+                                    values.add(value);
+                                }
                             }
                             }
 
 
                         }
                         }
 
 
-                        if (b) {
-                            accuracyPassRate.setDeviationSum(sum.doubleValue()*100 + "%");
+                        if (values.size() > 0) {
+                            Double value = values.stream().mapToDouble(v -> v.doubleValue()).average().getAsDouble();
+                            accuracyPassRate.setDeviationSum(String.format("%.2f", value * 100) + "%");
                         } else {
                         } else {
                             accuracyPassRate.setDeviationSum("无可用数据计算");
                             accuracyPassRate.setDeviationSum("无可用数据计算");
                         }
                         }
-
-//                        Boolean b = false;
-//                        BigDecimal yibai = BigDecimal.valueOf(100);
-//                        BigDecimal mkh = electricField.getCapacity().multiply(new BigDecimal(0.03));
-//                        for (long stepTime = startTime.getTime(); stepTime <= endTime.getTime(); stepTime += 900000L) {
-//
-//                            Date finalTime = new Date(stepTime);
-//
-//                            if (dateForecastListMap.containsKey(finalTime) && datePowerListMap.containsKey(finalTime)) {
-//                                PowerStationStatusData powerStationStatusData = datePowerListMap.get(finalTime).get(0);
-//
-//                                //限电时不参与考核,抛去
-//                                if (!powerStationStatusData.getPowerRationing().equals(1)) {
-//
-//                                    ForecastPowerShortTermStation forecastPowerShortTermStation = dateForecastListMap.get(finalTime).get(0);
-//
-//                                    BigDecimal pr = powerStationStatusData.getRealValue();
-//                                    BigDecimal pn = forecastPowerShortTermStation.getFpValue();
-//
-//                                    //预测功率0,实际功率<=容量的3% 不予考核 反之误差为100%
-//                                    if (pn.compareTo(BigDecimal.ZERO) == 0) {
-//                                        if (pr.compareTo(mkh) >= 0) {
-//                                            sum.add(yibai);
-//                                        }
-//                                        continue;
-//                                    }
-//
-//                                    //实际功率为0,预测功率<=容量的3% 不予考核 反之误差为100%
-//                                    if (pr.compareTo(BigDecimal.ZERO) == 0) {
-//                                        if (pn.compareTo(mkh) >= 0) {
-//                                            sum.add(yibai);
-//                                        }
-//                                        continue;
-//                                    }
-//
-//                                    BigDecimal subtract = pr.subtract(pn);
-//                                    sum = sum.add(subtract.divide(pn,2,BigDecimal.ROUND_DOWN));
-//
-//                                    b = true;
-//                                }
-//
-//                            }
-//                    }
-
-
-
                     }
                     }
                     accuracyPassRates.add(accuracyPassRate);
                     accuracyPassRates.add(accuracyPassRate);
                 }
                 }

+ 4 - 4
cpp-ui/src/views/statistics/stationAccuracy/index.vue

@@ -125,7 +125,7 @@ export default {
           field: "accuracy"
           field: "accuracy"
         },
         },
         {
         {
-          label: "单点偏差率累加(cap*%)",
+          label: "单点平均偏差(cap*%)",
           field: "deviationSum"
           field: "deviationSum"
         }
         }
       ],
       ],
@@ -419,7 +419,7 @@ export default {
         backgroundColor: 'transparent',
         backgroundColor: 'transparent',
         title: {
         title: {
           top: 20,
           top: 20,
-          text: '单点偏差率累加(cap*%)',
+          text: '单点平均偏差(cap*%)',
           textStyle: {
           textStyle: {
             fontWeight: 'normal',
             fontWeight: 'normal',
             fontSize: 16,
             fontSize: 16,
@@ -442,7 +442,7 @@ export default {
           itemWidth: 14,
           itemWidth: 14,
           itemHeight: 5,
           itemHeight: 5,
           itemGap: 13,
           itemGap: 13,
-          data: ["单点偏差率累加(cap*%)"],
+          data: ["单点平均偏差(cap*%)"],
           right: '4%',
           right: '4%',
           textStyle: {
           textStyle: {
             fontSize: 12,
             fontSize: 12,
@@ -509,7 +509,7 @@ export default {
         }],
         }],
         series: [
         series: [
           {
           {
-            name: '单点偏差率累加(cap*%)',
+            name: '单点平均偏差(cap*%)',
             type: 'line',
             type: 'line',
             smooth: false,
             smooth: false,
             symbol: 'circle',
             symbol: 'circle',