|
@@ -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) {
|
|
|
|
|
|
List<AccuracyPassRate> accuracyPassRates = new ArrayList<>();
|
|
|
-
|
|
|
List<ForecastPowerShortTermStation> forecastPowerShortTermStationList = forecastPowerShortTermStationService.findByForecastTimeBetween(startTime, endTime);
|
|
|
-
|
|
|
-
|
|
|
Map<Integer, List<ForecastPowerShortTermStation>> agoListMap = forecastPowerShortTermStationList.stream().collect(Collectors.groupingBy(ForecastPowerShortTermStation::getForecastHowLongAgo, Collectors.toList()));
|
|
|
|
|
|
//d1-10
|
|
@@ -49,7 +46,6 @@ public class CalculateForecastPowerShortTermStationImpl implements CalculateInte
|
|
|
String stationCode = electricField.getStationCode();
|
|
|
// 场站类型
|
|
|
String electricType = electricField.getElectricFieldTypeEnum();
|
|
|
-
|
|
|
AccuracyPassRate accuracyPassRate = new AccuracyPassRate();
|
|
|
accuracyPassRate.setTime(startTime);
|
|
|
accuracyPassRate.setDataSources(DataSourcesEnum.E1);
|
|
@@ -85,8 +81,6 @@ public class CalculateForecastPowerShortTermStationImpl implements CalculateInte
|
|
|
calculationInfo.setForecastTheoryValue(forecastPowerShortTermStation.getFpValue());
|
|
|
calculationInfo.setForecastCapacity(cap);
|
|
|
calculationInfo.setForecastSuCapacity(cap);
|
|
|
-
|
|
|
-
|
|
|
//实际
|
|
|
calculationInfo.setCapacity(cap);
|
|
|
calculationInfo.setOpenCapacity(cap);
|
|
@@ -102,7 +96,6 @@ public class CalculateForecastPowerShortTermStationImpl implements CalculateInte
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
if (calculationInfoList == null || calculationInfoList.size() == 0) {
|
|
|
accuracyPassRate.setAccuracy("无可用数据计算");
|
|
|
} else {
|
|
@@ -129,78 +122,28 @@ public class CalculateForecastPowerShortTermStationImpl implements CalculateInte
|
|
|
}
|
|
|
}
|
|
|
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) {
|
|
|
Date finalTime = new Date(stepTime);
|
|
|
|
|
|
if (dateForecastListMap.containsKey(finalTime) && datePowerListMap.containsKey(finalTime)) {
|
|
|
-
|
|
|
- ForecastPowerShortTermStation forecastPowerShortTermStation = dateForecastListMap.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 {
|
|
|
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);
|
|
|
}
|