浏览代码

首页功率曲线对比

xusl 7 月之前
父节点
当前提交
872cac4271

+ 174 - 196
cpp-admin/src/main/java/com/cpp/web/controller/largeScreen/LargeScreenController.java

@@ -68,7 +68,7 @@ public class LargeScreenController {
     NwpCloudService nwpCloudService;
 
     @GetMapping("/getBizData")
-    public R getBizData(String weatherType) {
+    public R getBizData(String forecastDay,String forecastType) {
         // 获取所有场站
         List<ElectricField> electricFieldList = electricFieldService.list();
         // 首页左上角场站数据统计
@@ -137,190 +137,11 @@ public class LargeScreenController {
 
 
 
-
-
-        // 定义首页实际功率、可用、理论总和
-        BigDecimal realSum = BigDecimal.ZERO;
-        BigDecimal ableSum = BigDecimal.ZERO;
-        BigDecimal theorySum = BigDecimal.ZERO;
-        BigDecimal cdqSum = BigDecimal.ZERO;
-        BigDecimal dqSum = BigDecimal.ZERO;
-
-
-        // 限电场站数定义
-        int xdCount = 0;
-        // 获取每个场站的实时功率、可用、理论、超短期、短期
-        for (ElectricField electricField:electricFieldList){
-            // 实时功率、可用、理论、限电
-            PowerStationStatusData powerStationStatusData = LatestDataUtil.getData(electricField.getStationCode(), PowerStationStatusData.class);
-            if (powerStationStatusData!=null){
-                realSum = realSum.add(powerStationStatusData.getRealValue());
-                ableSum = ableSum.add(powerStationStatusData.getAbleValue());
-                theorySum = theorySum.add(powerStationStatusData.getTheoryValue());
-                if (powerStationStatusData.getPowerRationing().intValue()==1){
-                    xdCount++;
-                }
-            }
-            // 超短期
-            ForecastPowerUltraShortTermRegulation forecastPowerUltraShortTermRegulation = LatestDataUtil.getData(electricField.getStationCode(), ForecastPowerUltraShortTermRegulation.class);
-            if (forecastPowerUltraShortTermRegulation!=null){
-                cdqSum = cdqSum.add(forecastPowerUltraShortTermRegulation.getFpValue());
-            }
-            // 短期
-            ForecastPowerShortTermRegulation forecastPowerShortTermRegulation = LatestDataUtil.getData(electricField.getStationCode(), ForecastPowerShortTermRegulation.class);
-            if (forecastPowerShortTermRegulation!=null){
-                dqSum = dqSum.add(forecastPowerShortTermRegulation.getFpValue());
-            }
-            // 获取气象站或者测风塔
-            if (ElectricFieldTypeEnum.E1.name().equals(electricField.getElectricFieldTypeEnum())){
-                WeatherStationStatusData weatherStationStatusData = LatestDataUtil.getData(electricField.getStationCode(), WeatherStationStatusData.class);
-                if (weatherStationStatusData!=null){
-                    fzdSum = fzdSum.add(weatherStationStatusData.getGlobalR());
-                    fzdSumCount++;
-                }
-            }
-            else{
-                WindTowerStatusData windTowerStatusData = LatestDataUtil.getData(electricField.getStationCode(), WindTowerStatusData.class);
-                if (windTowerStatusData!=null){
-                    wsSum = wsSum.add(windTowerStatusData.getWsHubHeight());
-                    wsSumCount++;
-                }
-            }
-        }
-
-        // 定义总和map
-        Map sumMap = new HashMap();
-        sumMap.put("realSum",realSum);
-        sumMap.put("ableSum",ableSum);
-        sumMap.put("theorySum",theorySum);
-        bizDataMap.put("sumMap",sumMap);
-        Map envDataMap = new HashMap();
-
-        envDataMap.put("wsAvg",wsAvg);
-
-        envDataMap.put("fzdAvg",fzdAvg);
-
-
-
-        Date dayStartTime = DateTimeUtil.getDayStartTime(System.currentTimeMillis());
-        Date dayEndTime = DateTimeUtil.getDayLastTime(System.currentTimeMillis());
-        // 首页实际、可用、理论曲线图数组
-        List<Object> realList = new ArrayList<>();
-        List<Object> ableList = new ArrayList<>();
-        List<Object> theoryList = new ArrayList<>();
-        List<Object> cdqList = new ArrayList<>();
-        List<Object> dqList = new ArrayList<>();
-
-        // 查询实际功率、可用、理论
-        Date currentTime5 = DateTimeUtil.getMomentTimeFor5Minute(System.currentTimeMillis());
-        List<PowerStationStatusData> powerStationStatusDataList = powerStationStatusDataService.findByTimeBetween(dayStartTime,dayEndTime);
-        // 按场时间分组
-        Map<Long, List<PowerStationStatusData>> powerStationStatusDataGroup = powerStationStatusDataList.stream().collect(Collectors.groupingBy(s->s.getTime().getTime()));
-
-        // 获取超短期
-        String cdqHowLongAgo = configService.selectConfigByKey("cdqHowLongAgo");
-        QueryWrapper cdqysWrapper = new QueryWrapper<>();
-        cdqysWrapper.eq("forecast_how_long_ago", Integer.parseInt(cdqHowLongAgo));
-        cdqysWrapper.between("time", dayStartTime, dayEndTime);
-        List<ForecastPowerUltraShortTermRegulation> forecastPowerUltraShortTermStationList = forecastPowerUltraShortTermRegulationService.list(cdqysWrapper);
-        // 按场时间分组
-        Map<Long, List<ForecastPowerUltraShortTermRegulation>> utraShortTermStationDataGroup = forecastPowerUltraShortTermStationList.stream().collect(Collectors.groupingBy(s->s.getTime().getTime()));
-
-        // 获取短期上报
-        String dqHowLongAgo = configService.selectConfigByKey("dqHowLongAgo");
-        QueryWrapper dqsbWrapper = new QueryWrapper<>();
-        dqsbWrapper.eq("forecast_how_long_ago", Integer.parseInt(dqHowLongAgo));
-        dqsbWrapper.between("time", dayStartTime, dayEndTime);
-        List<ForecastPowerShortTermRegulation> forecastPowerShortTermRegulationList = forecastPowerShortTermRegulationService.list(dqsbWrapper);
-        // 按场时间分组
-        Map<Long, List<ForecastPowerShortTermRegulation>> shortTermDataGroup = forecastPowerShortTermRegulationList.stream().collect(Collectors.groupingBy(s->s.getTime().getTime()));
-
-        Long momentTime = 15 * 60 * 1000L;
-        for (Long tempTime = dayStartTime.getTime(); tempTime <= dayEndTime.getTime(); tempTime = tempTime + momentTime) {
-            // 统计实际功率、可用、理论曲线
-            if (powerStationStatusDataGroup.get(tempTime)!=null){
-                // 对每个时间点的所有场站数据进行求和
-                List<PowerStationStatusData> everyDataList = powerStationStatusDataGroup.get(tempTime);
-                BigDecimal tempRealSum = BigDecimal.ZERO;
-                BigDecimal tempAbleSum = BigDecimal.ZERO;
-                BigDecimal tempTheorySum = BigDecimal.ZERO;
-                for (PowerStationStatusData powerStationStatusData:everyDataList){
-                    BigDecimal realValue = powerStationStatusData.getRealValue();
-                    tempRealSum = tempRealSum.add(realValue);
-                    BigDecimal ableValue = powerStationStatusData.getAbleValue();
-                    tempAbleSum = tempAbleSum.add(ableValue);
-                    BigDecimal theoryValue = powerStationStatusData.getTheoryValue();
-                    tempTheorySum = tempTheorySum.add(theoryValue);
-                }
-                realList.add(tempRealSum);
-                ableList.add(tempAbleSum);
-                theoryList.add(tempTheorySum);
-            }
-            else{
-                realList.add(null);
-                ableList.add(null);
-                theoryList.add(null);
-            }
-            // 统计超短期曲线
-            if (utraShortTermStationDataGroup.get(tempTime)!=null){
-                // 对每个时间点的所有场站数据进行求和
-                List<ForecastPowerUltraShortTermRegulation> everyDataList = utraShortTermStationDataGroup.get(tempTime);
-                BigDecimal tempCdqSum = BigDecimal.ZERO;
-                for (ForecastPowerUltraShortTermRegulation forecastPowerUltraShortTermStation:everyDataList){
-                    BigDecimal cdqValue = forecastPowerUltraShortTermStation.getFpValue();
-                    tempCdqSum = tempCdqSum.add(cdqValue);
-                }
-                cdqList.add(tempCdqSum);
-            }
-            else{
-                cdqList.add(null);
-            }
-            // 统计短期上报曲线
-            if (shortTermDataGroup.get(tempTime)!=null){
-                // 对每个时间点的所有场站数据进行求和
-                List<ForecastPowerShortTermRegulation> everyDataList = shortTermDataGroup.get(tempTime);
-                BigDecimal tempDqSum = BigDecimal.ZERO;
-                for (ForecastPowerShortTermRegulation forecastPowerShortTermRegulation:everyDataList){
-                    BigDecimal dqValue = forecastPowerShortTermRegulation.getFpValue();
-                    tempDqSum = tempDqSum.add(dqValue);
-                }
-                dqList.add(tempDqSum);
-            }
-            else{
-                dqList.add(null);
-            }
-        }
-        // 定义曲线map
-        Map curveMap = new HashMap();
-        curveMap.put("realList",realList);
-        curveMap.put("ableList",ableList);
-        curveMap.put("theoryList",theoryList);
-        sumMap.put("cdqSum",cdqSum);
-        curveMap.put("cdqList",cdqList);
-        sumMap.put("dqSum",dqSum);
-        curveMap.put("dqList",dqList);
+        //////////////// 获取首页预测对比数据 ///////////////
+        Map<String,List> curveMap = getForecastContrast(forecastDay,forecastType);
         bizDataMap.put("curveMap",curveMap);
 
-        // 定义限电图map
-        Map xdMap = new HashMap();
-        // 总场站数
-        xdMap.put("zczs",electricFieldList.size());
-        // 限电场站数
-        xdMap.put("xdczs",xdCount);
-        // 限电比
-        if (electricFieldList.size()==0){
-            xdMap.put("xdbl","0");
-        }
-        else{
-            xdMap.put("xdbl",new BigDecimal(xdCount).divide(new BigDecimal(electricFieldList.size()).multiply(new BigDecimal("100")),2, BigDecimal.ROUND_HALF_UP));
-        }
-        // 总场站容量
-        BigDecimal totalCapacity = BigDecimal.ZERO;
-        for (ElectricField electricField : electricFieldList) {
-            totalCapacity = totalCapacity.add(electricField.getCapacity());
-        }
-        xdMap.put("totalCapacity",totalCapacity);
-        bizDataMap.put("xdMap",xdMap);
+
 
 
         return R.ok(bizDataMap);
@@ -436,20 +257,29 @@ public class LargeScreenController {
 
         // 统计每天里所有电站发电量总和
         if (shortTermDataGroup!=null){
-            List<Map.Entry<String, List<DayPowerGeneration>>> sortedGrouped = new ArrayList<>(shortTermDataGroup.entrySet());
-            sortedGrouped.sort(Map.Entry.comparingByKey());
-            sortedGrouped.forEach(entry->{
-                List<DayPowerGeneration> dayPowerGenerations = entry.getValue();
-                BigDecimal sum = BigDecimal.ZERO;
-                for (DayPowerGeneration dayPowerGeneration:dayPowerGenerations){
-                    sum = sum.add(dayPowerGeneration.getForecastPowerGeneration());
+            // 第二天
+            Calendar nextDate = Calendar.getInstance();
+            nextDate.add(Calendar.DAY_OF_MONTH, 1);
+            Calendar end10Date = Calendar.getInstance();
+            end10Date.add(Calendar.DAY_OF_MONTH, 10);
+            for (; nextDate.before(end10Date); nextDate.add(Calendar.DATE, 1)) {
+                String dateFormat = DateUtil.format(nextDate.getTime(),"yyyy-MM-dd");
+                xDataList.add(dateFormat.substring(5));
+                if (shortTermDataGroup.get(dateFormat)!=null){
+                    List<DayPowerGeneration> dayPowerGenerations = shortTermDataGroup.get(dateFormat);
+                    BigDecimal sum = BigDecimal.ZERO;
+                    for (DayPowerGeneration dayPowerGeneration:dayPowerGenerations){
+                        sum = sum.add(dayPowerGeneration.getForecastPowerGeneration());
+                    }
+                    pDataList.add(sum);
                 }
-                // 封装每天发电总量
-                xDataList.add(entry.getKey().substring(5));
-                pDataList.add(sum);
-                forecastGeneratingMap.put("xData",xDataList);
-                forecastGeneratingMap.put("pData",pDataList);
-            });
+                else{
+                    pDataList.add(BigDecimal.ZERO);
+                }
+
+            }
+            forecastGeneratingMap.put("xData",xDataList);
+            forecastGeneratingMap.put("pData",pDataList);
         }
         return forecastGeneratingMap;
     }
@@ -654,4 +484,152 @@ public class LargeScreenController {
         }
         return R.ok(forecastWeatherDataMap);
     }
+
+    /**
+     * 首页功率曲线对比
+     * @param forecastDay
+     * @param forecastType
+     * @return
+     */
+    @GetMapping("/forecastContrast")
+    public R forecastContrast(String forecastDay,String forecastType) {
+        Map<String,List> map = getForecastContrast(forecastDay,forecastType);
+        return R.ok(map);
+    }
+
+    /**
+     * 获取预测对比数据公共方法
+     * @param forecastDay
+     * @param forecastType
+     */
+    private Map<String,List> getForecastContrast(String forecastDay,String forecastType){
+        Date dayStartTime = DateTimeUtil.getDayStartTime(System.currentTimeMillis());
+        Date dayEndTime = null;
+        if ("day".equals(forecastDay)){
+            // 当日
+            dayEndTime = DateTimeUtil.getDayLastTime(System.currentTimeMillis());
+        }
+        else{
+            // 包含当天的才是10天
+            dayEndTime = DateUtil.offsetDay(new Date(), 9);
+        }
+
+        QueryWrapper wrapper = new QueryWrapper<>();
+        if ("wind".equals(forecastType)){
+            // 过滤出风场站
+            wrapper.eq("electric_field_type_enum", "E2");
+        }
+        else{
+            // 过滤出光场站
+            wrapper.eq("electric_field_type_enum", "E1");
+        }
+        List<ElectricField> list = electricFieldService.list(wrapper);
+        // 遍历获取场站nwp数据
+        List<String> stationCodeList = new ArrayList<>();
+        for (ElectricField electricField:list){
+            stationCodeList.add(electricField.getStationCode());
+        }
+
+        // 首页实际、可用、理论曲线图数组
+        List<Object> realList = new ArrayList<>();
+        List<Object> ableList = new ArrayList<>();
+        List<Object> theoryList = new ArrayList<>();
+        List<Object> cdqList = new ArrayList<>();
+        List<Object> dqList = new ArrayList<>();
+
+        if (!stationCodeList.isEmpty()){
+            // 查询实际功率、可用、理论
+            QueryWrapper<PowerStationStatusData> realQueryWrapper = new QueryWrapper<>();
+            realQueryWrapper.between("time",dayStartTime,dayEndTime);
+            realQueryWrapper.in("station_code", stationCodeList);
+            List<PowerStationStatusData> powerStationStatusDataList = powerStationStatusDataService.list(realQueryWrapper);
+            // 按场时间分组
+            Map<Long, List<PowerStationStatusData>> powerStationStatusDataGroup = powerStationStatusDataList.stream().collect(Collectors.groupingBy(s->s.getTime().getTime()));
+            // 获取超短期
+            String cdqHowLongAgo = configService.selectConfigByKey("cdqHowLongAgo");
+            QueryWrapper cdqysWrapper = new QueryWrapper<>();
+            cdqysWrapper.eq("forecast_how_long_ago", Integer.parseInt(cdqHowLongAgo));
+            cdqysWrapper.between("time", dayStartTime, dayEndTime);
+            cdqysWrapper.in("station_code", stationCodeList);
+            List<ForecastPowerUltraShortTermRegulation> forecastPowerUltraShortTermStationList = forecastPowerUltraShortTermRegulationService.list(cdqysWrapper);
+            // 按场时间分组
+            Map<Long, List<ForecastPowerUltraShortTermRegulation>> utraShortTermStationDataGroup = forecastPowerUltraShortTermStationList.stream().collect(Collectors.groupingBy(s->s.getTime().getTime()));
+
+            // 获取短期上报
+            String dqHowLongAgo = configService.selectConfigByKey("dqHowLongAgo");
+            QueryWrapper dqsbWrapper = new QueryWrapper<>();
+            dqsbWrapper.eq("forecast_how_long_ago", Integer.parseInt(dqHowLongAgo));
+            dqsbWrapper.between("time", dayStartTime, dayEndTime);
+            dqsbWrapper.in("station_code", stationCodeList);
+            List<ForecastPowerShortTermRegulation> forecastPowerShortTermRegulationList = forecastPowerShortTermRegulationService.list(dqsbWrapper);
+            // 按场时间分组
+            Map<Long, List<ForecastPowerShortTermRegulation>> shortTermDataGroup = forecastPowerShortTermRegulationList.stream().collect(Collectors.groupingBy(s->s.getTime().getTime()));
+
+            Long momentTime = 15 * 60 * 1000L;
+            for (Long tempTime = dayStartTime.getTime(); tempTime <= dayEndTime.getTime(); tempTime = tempTime + momentTime) {
+                // 统计实际功率、可用、理论曲线
+                if (powerStationStatusDataGroup.get(tempTime)!=null){
+                    // 对每个时间点的所有场站数据进行求和
+                    List<PowerStationStatusData> everyDataList = powerStationStatusDataGroup.get(tempTime);
+                    BigDecimal tempRealSum = BigDecimal.ZERO;
+                    BigDecimal tempAbleSum = BigDecimal.ZERO;
+                    BigDecimal tempTheorySum = BigDecimal.ZERO;
+                    for (PowerStationStatusData powerStationStatusData:everyDataList){
+                        BigDecimal realValue = powerStationStatusData.getRealValue();
+                        tempRealSum = tempRealSum.add(realValue);
+                        BigDecimal ableValue = powerStationStatusData.getAbleValue();
+                        tempAbleSum = tempAbleSum.add(ableValue);
+                        BigDecimal theoryValue = powerStationStatusData.getTheoryValue();
+                        tempTheorySum = tempTheorySum.add(theoryValue);
+                    }
+                    realList.add(tempRealSum);
+                    ableList.add(tempAbleSum);
+                    theoryList.add(tempTheorySum);
+                }
+                else{
+                    realList.add(null);
+                    ableList.add(null);
+                    theoryList.add(null);
+                }
+                // 统计超短期曲线
+                if (utraShortTermStationDataGroup.get(tempTime)!=null){
+                    // 对每个时间点的所有场站数据进行求和
+                    List<ForecastPowerUltraShortTermRegulation> everyDataList = utraShortTermStationDataGroup.get(tempTime);
+                    BigDecimal tempCdqSum = BigDecimal.ZERO;
+                    for (ForecastPowerUltraShortTermRegulation forecastPowerUltraShortTermStation:everyDataList){
+                        BigDecimal cdqValue = forecastPowerUltraShortTermStation.getFpValue();
+                        tempCdqSum = tempCdqSum.add(cdqValue);
+                    }
+                    cdqList.add(tempCdqSum);
+                }
+                else{
+                    cdqList.add(null);
+                }
+                // 统计短期上报曲线
+                if (shortTermDataGroup.get(tempTime)!=null){
+                    // 对每个时间点的所有场站数据进行求和
+                    List<ForecastPowerShortTermRegulation> everyDataList = shortTermDataGroup.get(tempTime);
+                    BigDecimal tempDqSum = BigDecimal.ZERO;
+                    for (ForecastPowerShortTermRegulation forecastPowerShortTermRegulation:everyDataList){
+                        BigDecimal dqValue = forecastPowerShortTermRegulation.getFpValue();
+                        tempDqSum = tempDqSum.add(dqValue);
+                    }
+                    dqList.add(tempDqSum);
+                }
+                else{
+                    dqList.add(null);
+                }
+            }
+        }
+
+        // 定义曲线map
+        Map<String,List> curveMap = new HashMap();
+        curveMap.put("realList",realList);
+        curveMap.put("ableList",ableList);
+        curveMap.put("theoryList",theoryList);
+        curveMap.put("cdqList",cdqList);
+        curveMap.put("dqList",dqList);
+
+        return curveMap;
+    }
 }

+ 31 - 0
cpp-ui/src/views/largeScreen/components/center-bottom.vue

@@ -139,11 +139,13 @@ export default {
       const activeItem = document.querySelector('.btu-checked.forecastLine')
       sessionStorage.setItem('screen-forecast-day',id)
       this.checkedClass(id, activeItem)
+      this.getForecastContrast()
     },
     changeForecastLineType(id) {
       const activeItem = document.querySelector('.btu-checked.forecastLineType')
       sessionStorage.setItem('screen-forecast-type',id)
       this.checkedClass(id, activeItem)
+      this.getForecastContrast()
     },
     checkedClass(id, activeItem) {
       let clickItem = document.getElementById(id)
@@ -158,6 +160,35 @@ export default {
         this.lineChart.resize();
       }
     },
+    getForecastContrast(){
+      let forecastType
+      if(sessionStorage.getItem('screen-forecast-type')){
+        forecastType = sessionStorage.getItem('screen-forecast-type')
+      }else{
+        forecastType = 'wind'
+      }
+      let forecastDay
+      if(sessionStorage.getItem('screen-forecast-day')){
+        forecastDay = sessionStorage.getItem('screen-forecast-day')
+      }else{
+        forecastDay = 'day'
+      }
+      let queryParams = {
+        "forecastType": forecastType,
+        "forecastDay": forecastDay
+      }
+      this.$axios({url: '/largeScreenController/forecastContrast', method: 'get',params: queryParams}).then(response => {
+        this.chartData = {
+          realList: response.data.realList,
+            ableList: response.data.ableList,
+          theoryList: response.data.theoryList,
+          cdqList: response.data.cdqList,
+          dqList: response.data.dqList
+        }
+        this.setOptions(this.chartData)
+      }).catch(err => {
+      })
+    }
   }
 }
 </script>

+ 1 - 1
cpp-ui/src/views/largeScreen/components/right-bottom.vue

@@ -105,7 +105,7 @@ export default {
       option.xAxis.data = xData
       option.series[0].data = pData
       // 柱状图宽度
-      option.series[0].barWidth= '40%'
+      option.series[0].barWidth= '30%'
       this.fullChart.setOption(option, true)
     },
     chartsResize(){

+ 0 - 2
cpp-ui/src/views/largeScreen/components/right-middle.vue

@@ -394,8 +394,6 @@ export default {
         this.fullChart.setOption(option, true)
       }).catch(err => {
       })
-      console.log(option)
-
     },
     /**
      * 切换气象预测按钮

+ 0 - 4
cpp-ui/src/views/largeScreen/index.vue

@@ -583,13 +583,9 @@ export default {
           realPowerSum: productionDataTotalDto.realPowerSum,
           theoryPowerSum: productionDataTotalDto.theoryPowerSum,
         }
-
         this.rightBottomParams = response.data.forecastGeneratingMap
-
-
         this.rightMiddleParams = response.data.forecastNwpMap
 
-
         // this.digitalDisk[0].num = this.formatNumber(sumMap.realSum) + ''
         // this.digitalDisk[1].num = this.formatNumber(sumMap.ableSum) + ''
         // this.digitalDisk[2].num = this.formatNumber(sumMap.theorySum) + ''