Browse Source

生产数据统计中当日预测发电量获取方式修改

xusl 7 months ago
parent
commit
36b4e9b21f

+ 47 - 22
cpp-admin/src/main/java/com/cpp/web/controller/largeScreen/LargeScreenController.java

@@ -69,10 +69,7 @@ public class LargeScreenController {
         BigDecimal wsSum = BigDecimal.ZERO;
         int wsSumCount = 0;
         int fzdSumCount = 0;
-        // 实际发电量总和
-        BigDecimal realGeneratingSum = BigDecimal.ZERO;
-        // 预测发电量总和
-        BigDecimal forecastGenerating = BigDecimal.ZERO;
+
         for (ElectricField electricField:electricFieldList){
             PowerStationStatusData powerStationStatusData = LatestDataUtil.getData(electricField.getStationCode(), PowerStationStatusData.class);
             if (ElectricFieldTypeEnum.E1.name().equals(electricField.getElectricFieldTypeEnum())){
@@ -99,8 +96,6 @@ public class LargeScreenController {
                     fdOpenCapacitySum = fdOpenCapacitySum.add(powerStationStatusData.getOpenCapacity());
                 }
             }
-
-            // 计算实际发电量和预测发电量
         }
         // 封装首页场站数据统计
         ElectricFieldDataTotalDto electricFieldDataTotalDto = new ElectricFieldDataTotalDto();
@@ -118,7 +113,7 @@ public class LargeScreenController {
         electricFieldDataTotalDto.setWsAvg(wsAvg);
         Map bizDataMap = new HashMap();
         bizDataMap.put("electricFieldDataTotalDto",electricFieldDataTotalDto);
-
+        // 计算生成数据
         ProductionDataTotalDto productionDataTotalDto = calGenerating();
         bizDataMap.put("productionDataTotalDto",productionDataTotalDto);
         // 获取预测发电量
@@ -343,23 +338,53 @@ public class LargeScreenController {
                 theoryPowerSum = theoryPowerSum.add(powerStationStatusData.getTheoryValue());
             }
         }
-        // 获取中心侧预测的当日所有短期预测功率,前提判断上个月哪个预测准确率更准确用哪个模型
-//        List<ForecastGeneratingDataDto> forecastGeneratingDataDtoList = calForecastGenerating();
-
-
-
-        Date dayEndTimeFor15 = DateTimeUtil.getMomentTimeFor15Minute(System.currentTimeMillis());
-        QueryWrapper<ForecastPowerShortTermRegulation> forecastPowerShortTermRegulationQueryWrapper = new QueryWrapper<>();
-        forecastPowerShortTermRegulationQueryWrapper.between("time", dayStartTime, dayEndTimeFor15);
-        List<ForecastPowerShortTermRegulation> forecastPowerShortTermRegulationList = forecastPowerShortTermRegulationService.list(forecastPowerShortTermRegulationQueryWrapper);
-        // 计算短期预测发电量
-        BigDecimal forecastGeneratingSum = BigDecimal.ZERO;
-        for (ForecastPowerShortTermRegulation forecastPowerShortTermRegulation : forecastPowerShortTermRegulationList) {
-            if (forecastPowerShortTermRegulation.getFpValue()!=null){
-                // 发电量(万kWh) = 预测值 * 0.25 * 0.1
-                forecastGeneratingSum = forecastGeneratingSum.add(forecastPowerShortTermRegulation.getFpValue().multiply(new BigDecimal("0.25")).multiply(new BigDecimal("0.1")).setScale(2, RoundingMode.HALF_UP));
+        // 获取中心侧预测的当日所有短期预测功率
+        int counts = -4;
+        // 定义日期格式
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+        // 定义开始日期和结束日期(使用Calendar对象)
+        Calendar yesterdayDate = Calendar.getInstance();
+        //得到前一天
+        yesterdayDate.add(Calendar.DATE, -1);
+        //得到前三天天
+        Calendar endDate = Calendar.getInstance();
+        endDate.add(Calendar.DAY_OF_MONTH, counts);
+        List<DayPowerGeneration> dayPowerGenerationList = new ArrayList<>();
+        for (; !yesterdayDate.before(endDate); yesterdayDate.add(Calendar.DATE, -1)) {
+            QueryWrapper<DayPowerGeneration> generationWrapper = new QueryWrapper<>();
+            generationWrapper.eq("gen_date", formatter.format(yesterdayDate.getTime()));
+            generationWrapper.eq("prediction_data_source", "云端下发");
+            dayPowerGenerationList = dayPowerGenerationService.list(generationWrapper);
+            if (!dayPowerGenerationList.isEmpty()){
+                // 查出数据,并且有今日的预测数据,就退出当前循环。
+                dayPowerGenerationList = dayPowerGenerationList.stream().filter(f -> f.getTime().equals(formatter.format(new Date()))).collect(Collectors.toList());
+                if (dayPowerGenerationList.size()>0){
+                    break;
+                }
             }
+            else{
+                // 否则,日期往前推一天,再查
+            }
+        }
+        // 累加中心侧预测发电量
+        BigDecimal forecastGeneratingSum = BigDecimal.ZERO;
+        for (DayPowerGeneration dayPowerGeneration:dayPowerGenerationList){
+            forecastGeneratingSum = forecastGeneratingSum.add(dayPowerGeneration.getForecastPowerGeneration());
         }
+
+
+//        Date dayEndTimeFor15 = DateTimeUtil.getMomentTimeFor15Minute(System.currentTimeMillis());
+//        QueryWrapper<ForecastPowerShortTermRegulation> forecastPowerShortTermRegulationQueryWrapper = new QueryWrapper<>();
+//        forecastPowerShortTermRegulationQueryWrapper.between("time", dayStartTime, dayEndTimeFor15);
+//        List<ForecastPowerShortTermRegulation> forecastPowerShortTermRegulationList = forecastPowerShortTermRegulationService.list(forecastPowerShortTermRegulationQueryWrapper);
+//        // 计算短期预测发电量
+//        BigDecimal forecastGeneratingSum = BigDecimal.ZERO;
+//        for (ForecastPowerShortTermRegulation forecastPowerShortTermRegulation : forecastPowerShortTermRegulationList) {
+//            if (forecastPowerShortTermRegulation.getFpValue()!=null){
+//                // 发电量(万kWh) = 预测值 * 0.25 * 0.1
+//                forecastGeneratingSum = forecastGeneratingSum.add(forecastPowerShortTermRegulation.getFpValue().multiply(new BigDecimal("0.25")).multiply(new BigDecimal("0.1")).setScale(2, RoundingMode.HALF_UP));
+//            }
+//        }
         ProductionDataTotalDto productionDataTotalDto = new ProductionDataTotalDto();
         productionDataTotalDto.setRealGeneratingSum(realGeneratingSum);
         productionDataTotalDto.setForecastGeneratingSum(forecastGeneratingSum);