Ver código fonte

站端数据全部使用调控后表中数据(计划让站端无论是否执行调控操作都上传R开头的dq和cdq)

tl 6 meses atrás
pai
commit
3b68b199af

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

@@ -71,14 +71,14 @@ public class LargeScreenController {
                 }
             }
             // 超短期
-            ForecastPowerUltraShortTermStation forecastPowerUltraShortTermStation = LatestDataUtil.getData(electricField.getStationCode(), ForecastPowerUltraShortTermStation.class);
-            if (forecastPowerUltraShortTermStation!=null){
-                cdqSum = cdqSum.add(forecastPowerUltraShortTermStation.getFpValue());
+            ForecastPowerUltraShortTermRegulation forecastPowerUltraShortTermRegulation = LatestDataUtil.getData(electricField.getStationCode(), ForecastPowerUltraShortTermRegulation.class);
+            if (forecastPowerUltraShortTermRegulation!=null){
+                cdqSum = cdqSum.add(forecastPowerUltraShortTermRegulation.getFpValue());
             }
             // 短期
-            ForecastPowerShortTermStation forecastPowerShortTermStation = LatestDataUtil.getData(electricField.getStationCode(), ForecastPowerShortTermStation.class);
-            if (forecastPowerShortTermStation!=null){
-                dqSum = dqSum.add(forecastPowerShortTermStation.getFpValue());
+            ForecastPowerShortTermRegulation forecastPowerShortTermRegulation = LatestDataUtil.getData(electricField.getStationCode(), ForecastPowerShortTermRegulation.class);
+            if (forecastPowerShortTermRegulation!=null){
+                dqSum = dqSum.add(forecastPowerShortTermRegulation.getFpValue());
             }
             // 获取气象站或者测风塔
             if (ElectricFieldTypeEnum.E1.name().equals(electricField.getElectricFieldTypeEnum())){

+ 129 - 6
cpp-admin/src/main/java/com/cpp/web/service/accuracy/impl/CalculateForecastPowerUltraShortTermCloudImpl.java

@@ -1,26 +1,149 @@
 package com.cpp.web.service.accuracy.impl;
 
+import com.cpp.common.utils.spring.SpringUtils;
+import com.cpp.system.service.ISysConfigService;
 import com.cpp.web.domain.accuracy.AccuracyPassRate;
+import com.cpp.web.domain.cloud.ForecastPowerUltraShortTermCloud;
+import com.cpp.web.domain.enums.DataSourcesEnum;
+import com.cpp.web.domain.enums.ForecastTypeEnum;
 import com.cpp.web.domain.station.ElectricField;
+import com.cpp.web.domain.station.ForecastPowerUltraShortTermStation;
 import com.cpp.web.domain.station.PowerStationStatusData;
 import com.cpp.web.service.accuracy.CalculateInterface;
+import com.cpp.web.service.cloud.ForecastPowerUltraShortTermCloudService;
+import com.cpp.web.service.station.ForecastPowerUltraShortTermStationService;
+import com.syjy.calculate.entity.CalculateRequest;
+import com.syjy.calculate.entity.CalculateResult;
 import com.syjy.calculate.entity.CalculationFormula;
+import com.syjy.calculate.entity.CalculationInfo;
+import com.syjy.calculate.service.AccuracyPassRateCalculateService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
 
-import java.util.Date;
-import java.util.List;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 计算中心测超短期预测分析结果
  */
+@RequiredArgsConstructor
+@Service
 public class CalculateForecastPowerUltraShortTermCloudImpl implements CalculateInterface {
+    private final ISysConfigService sysConfigService;
+    private final ForecastPowerUltraShortTermCloudService forecastPowerUltraShortTermCloudService;
 
     @Override
-    public List<AccuracyPassRate> calc(Date startTime,Date endTime,List<PowerStationStatusData> powerStationStatusDataList, List<ElectricField> electricFieldList, List<String> formulaTypes, String province){
-        return null;
+    public List<AccuracyPassRate> calc(Date startTime, Date endTime, List<PowerStationStatusData> powerStationStatusDataList, List<ElectricField> electricFieldList, List<String> formulaTypes, String province) {
+
+        List<AccuracyPassRate> accuracyPassRates = new ArrayList<>();
+        String cdq_ac_point = sysConfigService.selectConfigByKey("cdq_ac_point");
+        int ago = 1;
+        try {
+            ago = Integer.parseInt(cdq_ac_point);
+        } catch (Exception e) {
+//            e.printStackTrace();
+        }
+
+
+        List<ForecastPowerUltraShortTermCloud> forecastPowerUltraShortTermCloudList = forecastPowerUltraShortTermCloudService.findByForecastTimeBetweenAndHowLongAgo(startTime, endTime, ago);
+
+        for (ElectricField electricField : electricFieldList) {
+            // 获取装机容量
+            BigDecimal capacity = electricField.getCapacity();
+            // 获取场站编码
+            String stationCode = electricField.getStationCode();
+            // 场站类型
+            String electricType = electricField.getElectricFieldTypeEnum();
+
+            AccuracyPassRate accuracyPassRate = new AccuracyPassRate();
+            accuracyPassRate.setTime(startTime);
+            accuracyPassRate.setDataSources(DataSourcesEnum.E2);
+            accuracyPassRate.setForecastType(ForecastTypeEnum.cdq);
+            accuracyPassRate.setStationCode(stationCode);
+            accuracyPassRate.setForecastHowLongAgo(ago);
+
+
+            // 获取实际功率
+            Map<Date, List<ForecastPowerUltraShortTermCloud>> dateForecastListMap = forecastPowerUltraShortTermCloudList.stream().filter(p -> p.getStationCode().equals(stationCode)).collect(Collectors.groupingBy(ForecastPowerUltraShortTermCloud::getTime, Collectors.toList()));
+            // 短期预测功率
+            Map<Date, List<PowerStationStatusData>> datePowerListMap = powerStationStatusDataList.stream().filter(f -> f.getStationCode().equals(stationCode)).collect(Collectors.groupingBy(PowerStationStatusData::getTime, Collectors.toList()));
+            //解析中目前不带 开机和装机容量,无法计算准确率,先用场站容量代替
+            BigDecimal cap = electricField.getCapacity();
+
+            if (formulaTypes.contains("POINT_ULTRA_SHORT_ACCURACY")) {
+                List<CalculationInfo> calculationInfoList = new ArrayList<>();
+                // 从开始时间,每隔15分钟,一直循环到当前时间
+                for (long stepTime = startTime.getTime(); stepTime <= endTime.getTime(); stepTime += 900000L) {
+                    Date finalTime = new Date(stepTime);
+                    // 组装数据
+                    CalculationInfo calculationInfo = new CalculationInfo();
+                    // 如果短期预测功率不为空且站场功率不为空
+                    if (dateForecastListMap.containsKey(finalTime) && datePowerListMap.containsKey(finalTime)) {
+
+                        PowerStationStatusData powerStationStatusData = datePowerListMap.get(finalTime).get(0);
+
+                        //限电时不参与考核,抛去
+                        if (!powerStationStatusData.getPowerRationing().equals(1)) {
+                            //实际
+                            calculationInfo.setCapacity(cap);
+                            calculationInfo.setOpenCapacity(cap);
+                            calculationInfo.setRealValue(powerStationStatusData.getRealValue());
+                            calculationInfo.setAbleValue(powerStationStatusData.getAbleValue());
+                            calculationInfo.setTheoryValue(powerStationStatusData.getTheoryValue());
+
+
+                            ForecastPowerUltraShortTermCloud forecastPowerUltraShortTermStation = dateForecastListMap.get(finalTime).get(0);
+                            // 短期预测功率
+                            calculationInfo.setTime(stepTime);
+                            calculationInfo.setForecastAbleValue(forecastPowerUltraShortTermStation.getFpValue());
+                            calculationInfo.setForecastTheoryValue(forecastPowerUltraShortTermStation.getFpValue());
+                            calculationInfo.setForecastCapacity(cap);
+                            calculationInfo.setForecastSuCapacity(cap);
+                        }
+                    }
+
+                    // 预测功率或实际功率为空的时候,不放入result中
+                    if (calculationInfo.getRealValue() != null && calculationInfo.getAbleValue() != null && calculationInfo.getForecastAbleValue() != null) {
+                        calculationInfoList.add(calculationInfo);
+                    }
+                }
+
+
+                if (calculationInfoList == null || calculationInfoList.size() == 0) {
+                    accuracyPassRate.setAccuracy("无可用数据计算");
+                    accuracyPassRates.add(accuracyPassRate);
+                    continue;
+                }
+                // 获取计算基础数据
+                CalculateRequest calculateRequest = new CalculateRequest();
+                calculateRequest.setCalculationInfoList(calculationInfoList);
+                calculateRequest.setElectricCapacity(capacity);
+                calculateRequest.setProvince(province);
+                calculateRequest.setStationCode(stationCode);
+                calculateRequest.setFormulaType("POINT_ULTRA_SHORT_ACCURACY");
+                calculateRequest.setElectricType(electricType);
+                calculateRequest.setSign(electricField.getStationCode());
+                calculateRequest.setStationStatus("无");
+                calculateRequest.setStationCode(electricField.getStationCode());
+                CalculateResult resultMap = SpringUtils.getBean(AccuracyPassRateCalculateService.class).calculate(calculateRequest);
+                // 如果计算成功,从结果中获取value
+                if (String.valueOf(resultMap.get(CalculateResult.CODE_TAG)).
+                        equals(CalculateResult.Type.SUCCESS.value())) {
+                    accuracyPassRate.setAccuracy(String.valueOf(resultMap.get(CalculateResult.DATA_TAG)));
+                } else {
+                    accuracyPassRate.setAccuracy(String.valueOf(resultMap.get(CalculateResult.MSG_TAG)));
+                }
+
+                accuracyPassRates.add(accuracyPassRate);
+            }
+
+        }
+        return accuracyPassRates;
     }
 
-    @Override
+    //    @Override
     public List<String> calculationTypes() {
-        return null;
+        return Arrays.asList("POINT_ULTRA_SHORT_ACCURACY");
     }
 }

+ 129 - 7
cpp-admin/src/main/java/com/cpp/web/service/accuracy/impl/CalculateForecastPowerUltraShortTermRegulationImpl.java

@@ -1,26 +1,148 @@
 package com.cpp.web.service.accuracy.impl;
 
+import com.cpp.common.utils.spring.SpringUtils;
+import com.cpp.system.service.ISysConfigService;
 import com.cpp.web.domain.accuracy.AccuracyPassRate;
+import com.cpp.web.domain.enums.DataSourcesEnum;
+import com.cpp.web.domain.enums.ForecastTypeEnum;
 import com.cpp.web.domain.station.ElectricField;
+import com.cpp.web.domain.station.ForecastPowerUltraShortTermRegulation;
+import com.cpp.web.domain.station.ForecastPowerUltraShortTermStation;
 import com.cpp.web.domain.station.PowerStationStatusData;
 import com.cpp.web.service.accuracy.CalculateInterface;
+import com.cpp.web.service.station.ForecastPowerUltraShortTermRegulationService;
+import com.cpp.web.service.station.impl.ForecastPowerUltraShortTermRegulationServiceImpl;
+import com.syjy.calculate.entity.CalculateRequest;
+import com.syjy.calculate.entity.CalculateResult;
 import com.syjy.calculate.entity.CalculationFormula;
+import com.syjy.calculate.entity.CalculationInfo;
+import com.syjy.calculate.service.AccuracyPassRateCalculateService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
 
-import java.util.Date;
-import java.util.List;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 计算调控后超短期预测分析结果
  */
+@RequiredArgsConstructor
+@Service
 public class CalculateForecastPowerUltraShortTermRegulationImpl implements CalculateInterface {
-
+    private final ISysConfigService sysConfigService;
+    private final ForecastPowerUltraShortTermRegulationService forecastPowerUltraShortTermRegulationService;
     @Override
-    public List<AccuracyPassRate> calc(Date startTime,Date endTime,List<PowerStationStatusData> powerStationStatusDataList, List<ElectricField> electricFieldList, List<String> formulaTypes, String province){
-        return null;
+    public List<AccuracyPassRate> calc(Date startTime, Date endTime, List<PowerStationStatusData> powerStationStatusDataList, List<ElectricField> electricFieldList, List<String> formulaTypes, String province) {
+
+        List<AccuracyPassRate> accuracyPassRates = new ArrayList<>();
+        String cdq_ac_point = sysConfigService.selectConfigByKey("cdq_ac_point");
+        int ago = 1;
+        try {
+            ago = Integer.parseInt(cdq_ac_point);
+        } catch (Exception e) {
+//            e.printStackTrace();
+        }
+
+
+        List<ForecastPowerUltraShortTermRegulation> forecastPowerUltraShortTermRegulationList = forecastPowerUltraShortTermRegulationService.findByForecastTimeBetweenAndHowLongAgo(startTime, endTime, ago);
+
+        for (ElectricField electricField : electricFieldList) {
+            // 获取装机容量
+            BigDecimal capacity = electricField.getCapacity();
+            // 获取场站编码
+            String stationCode = electricField.getStationCode();
+            // 场站类型
+            String electricType = electricField.getElectricFieldTypeEnum();
+
+            AccuracyPassRate accuracyPassRate = new AccuracyPassRate();
+            accuracyPassRate.setTime(startTime);
+            accuracyPassRate.setDataSources(DataSourcesEnum.E4);
+            accuracyPassRate.setForecastType(ForecastTypeEnum.cdq);
+            accuracyPassRate.setStationCode(stationCode);
+            accuracyPassRate.setForecastHowLongAgo(ago);
+
+
+            // 获取实际功率
+            Map<Date, List<ForecastPowerUltraShortTermRegulation>> dateForecastListMap = forecastPowerUltraShortTermRegulationList.stream().filter(p -> p.getStationCode().equals(stationCode)).collect(Collectors.groupingBy(ForecastPowerUltraShortTermRegulation::getTime, Collectors.toList()));
+            // 短期预测功率
+            Map<Date, List<PowerStationStatusData>> datePowerListMap = powerStationStatusDataList.stream().filter(f -> f.getStationCode().equals(stationCode)).collect(Collectors.groupingBy(PowerStationStatusData::getTime, Collectors.toList()));
+            //解析中目前不带 开机和装机容量,无法计算准确率,先用场站容量代替
+            BigDecimal cap = electricField.getCapacity();
+
+            if (formulaTypes.contains("POINT_ULTRA_SHORT_ACCURACY")) {
+                List<CalculationInfo> calculationInfoList = new ArrayList<>();
+                // 从开始时间,每隔15分钟,一直循环到当前时间
+                for (long stepTime = startTime.getTime(); stepTime <= endTime.getTime(); stepTime += 900000L) {
+                    Date finalTime = new Date(stepTime);
+                    // 组装数据
+                    CalculationInfo calculationInfo = new CalculationInfo();
+                    // 如果短期预测功率不为空且站场功率不为空
+                    if (dateForecastListMap.containsKey(finalTime) && datePowerListMap.containsKey(finalTime)) {
+
+                        PowerStationStatusData powerStationStatusData = datePowerListMap.get(finalTime).get(0);
+
+                        //限电时不参与考核,抛去
+                        if (!powerStationStatusData.getPowerRationing().equals(1)) {
+                            //实际
+                            calculationInfo.setCapacity(cap);
+                            calculationInfo.setOpenCapacity(cap);
+                            calculationInfo.setRealValue(powerStationStatusData.getRealValue());
+                            calculationInfo.setAbleValue(powerStationStatusData.getAbleValue());
+                            calculationInfo.setTheoryValue(powerStationStatusData.getTheoryValue());
+
+
+                            ForecastPowerUltraShortTermRegulation forecastPowerUltraShortTermRegulation = dateForecastListMap.get(finalTime).get(0);
+                            // 短期预测功率
+                            calculationInfo.setTime(stepTime);
+                            calculationInfo.setForecastAbleValue(forecastPowerUltraShortTermRegulation.getFpValue());
+                            calculationInfo.setForecastTheoryValue(forecastPowerUltraShortTermRegulation.getFpValue());
+                            calculationInfo.setForecastCapacity(cap);
+                            calculationInfo.setForecastSuCapacity(cap);
+                        }
+                    }
+
+                    // 预测功率或实际功率为空的时候,不放入result中
+                    if (calculationInfo.getRealValue() != null && calculationInfo.getAbleValue() != null && calculationInfo.getForecastAbleValue() != null) {
+                        calculationInfoList.add(calculationInfo);
+                    }
+                }
+
+
+                if (calculationInfoList == null || calculationInfoList.size() == 0) {
+                    accuracyPassRate.setAccuracy("无可用数据计算");
+                    accuracyPassRates.add(accuracyPassRate);
+                    continue;
+                }
+                // 获取计算基础数据
+                CalculateRequest calculateRequest = new CalculateRequest();
+                calculateRequest.setCalculationInfoList(calculationInfoList);
+                calculateRequest.setElectricCapacity(capacity);
+                calculateRequest.setProvince(province);
+                calculateRequest.setStationCode(stationCode);
+                calculateRequest.setFormulaType("POINT_ULTRA_SHORT_ACCURACY");
+                calculateRequest.setElectricType(electricType);
+                calculateRequest.setSign(electricField.getStationCode());
+                calculateRequest.setStationStatus("无");
+                calculateRequest.setStationCode(electricField.getStationCode());
+                CalculateResult resultMap = SpringUtils.getBean(AccuracyPassRateCalculateService.class).calculate(calculateRequest);
+                // 如果计算成功,从结果中获取value
+                if (String.valueOf(resultMap.get(CalculateResult.CODE_TAG)).
+                        equals(CalculateResult.Type.SUCCESS.value())) {
+                    accuracyPassRate.setAccuracy(String.valueOf(resultMap.get(CalculateResult.DATA_TAG)));
+                } else {
+                    accuracyPassRate.setAccuracy(String.valueOf(resultMap.get(CalculateResult.MSG_TAG)));
+                }
+
+                accuracyPassRates.add(accuracyPassRate);
+            }
+
+        }
+        return accuracyPassRates;
     }
 
-    @Override
+    //    @Override
     public List<String> calculationTypes() {
-        return null;
+        return Arrays.asList("POINT_ULTRA_SHORT_ACCURACY");
     }
 }

+ 1 - 0
cpp-admin/src/main/java/com/cpp/web/service/cloud/ForecastPowerUltraShortTermCloudService.java

@@ -24,4 +24,5 @@ public interface ForecastPowerUltraShortTermCloudService extends IService<Foreca
      */
     List<ForecastPowerUltraShortTermCloud> findByStationCodeAndStartTimeAndEndTime(String stationCode, Date startTime, Date endTime);
 
+    List<ForecastPowerUltraShortTermCloud> findByForecastTimeBetweenAndHowLongAgo(Date startTime, Date endTime, int ago);
 }

+ 11 - 0
cpp-admin/src/main/java/com/cpp/web/service/cloud/impl/ForecastPowerUltraShortTermCloudServiceImpl.java

@@ -30,4 +30,15 @@ public class ForecastPowerUltraShortTermCloudServiceImpl extends ServiceImpl<For
         }
         return baseMapper.selectList(wrapper);
     }
+
+    @Override
+    public List<ForecastPowerUltraShortTermCloud> findByForecastTimeBetweenAndHowLongAgo(Date startTime, Date endTime, int ago) {
+        QueryWrapper<ForecastPowerUltraShortTermCloud> wrapper = new QueryWrapper<>();
+        if (startTime != null && !startTime.equals("") && endTime != null && !endTime.equals("")) {
+            wrapper.between("forecast_time", startTime, endTime);
+        }
+        wrapper.eq("forecast_how_long_ago", ago);
+
+        return baseMapper.selectList(wrapper);
+    }
 }

+ 10 - 10
cpp-admin/src/main/java/com/cpp/web/service/datafactory/DataStore.java

@@ -33,23 +33,23 @@ public class DataStore {
         Object o = this.map.get(stationCode + clazz.getName());
         if (o!=null){
             Date date = null;
-            if (ForecastPowerShortTermStation.class.equals(clazz)) {
-                List<ForecastPowerShortTermStation> forecastPowerShortTermStationList = ((List<ForecastPowerShortTermStation>) o);
+            if (ForecastPowerShortTermRegulation.class.equals(clazz)) {
+                List<ForecastPowerShortTermRegulation> forecastPowerShortTermRegulationList = ((List<ForecastPowerShortTermRegulation>) o);
                 date = DateTimeUtil.getMomentTimeFor15Minute(System.currentTimeMillis());
                 Date finalDate1 = date;
-                List<ForecastPowerShortTermStation> forecastPowerShortTermStations = forecastPowerShortTermStationList.stream().filter(f -> f.getTime().equals(finalDate1)).collect(Collectors.toList());
-                if (forecastPowerShortTermStations.size() > 0) {
-                    return (T) forecastPowerShortTermStations.get(0);
+                List<ForecastPowerShortTermRegulation> forecastPowerShortTermRegulations = forecastPowerShortTermRegulationList.stream().filter(f -> f.getTime().equals(finalDate1)).collect(Collectors.toList());
+                if (forecastPowerShortTermRegulations.size() > 0) {
+                    return (T) forecastPowerShortTermRegulations.get(0);
                 } else {
                     return null;
                 }
-            } else if (ForecastPowerUltraShortTermStation.class.equals(clazz)) {
-                List<ForecastPowerUltraShortTermStation> forecastPowerUltraShortTermStationList = ((List<ForecastPowerUltraShortTermStation>) o);
+            } else if (ForecastPowerUltraShortTermRegulation.class.equals(clazz)) {
+                List<ForecastPowerUltraShortTermRegulation> forecastPowerUltraShortTermRegulationList = ((List<ForecastPowerUltraShortTermRegulation>) o);
                 date = DateTimeUtil.getMomentTimeFor15Minute(System.currentTimeMillis());
                 Date finalDate = date;
-                List<ForecastPowerUltraShortTermStation> forecastPowerUltraShortTermStations = forecastPowerUltraShortTermStationList.stream().filter(f -> f.getTime().equals(finalDate)).collect(Collectors.toList());
-                if (forecastPowerUltraShortTermStations.size() > 0) {
-                    return (T) forecastPowerUltraShortTermStations.get(0);
+                List<ForecastPowerUltraShortTermRegulation> forecastPowerUltraShortTermRegulations = forecastPowerUltraShortTermRegulationList.stream().filter(f -> f.getTime().equals(finalDate)).collect(Collectors.toList());
+                if (forecastPowerUltraShortTermRegulations.size() > 0) {
+                    return (T) forecastPowerUltraShortTermRegulations.get(0);
                 } else {
                     return null;
                 }

+ 0 - 30
cpp-admin/src/main/java/com/cpp/web/service/datafactory/impl/ParsingCdqServiceImpl.java

@@ -43,8 +43,6 @@ import java.util.stream.Collectors;
 @Transactional
 public class ParsingCdqServiceImpl extends ServiceImpl<ParsingCdqMapper, ParsingCdq> implements ParsingCdqService, ParsingInterface {
 
-    private final ISysConfigService configService;
-
     private final ForecastPowerUltraShortTermStationService forecastPowerUltraShortTermStationService;
 
     private List<ParsingCdq> parsingCdqs = new ArrayList<>();
@@ -93,7 +91,6 @@ public class ParsingCdqServiceImpl extends ServiceImpl<ParsingCdqMapper, Parsing
                                     forecastPowerUltraShortTermStationList.add(forecastPowerUltraShortTermStation);
                                     time = new Date(time.getTime() + 900000L);//递增15分钟
                                 }
-                                scheduleAddCache(forecastPowerUltraShortTermStationList,stationCode);
                                 forecastPowerUltraShortTermStationService.saveBatch(forecastPowerUltraShortTermStationList);
                                 log.info("解析CDQ文件:{} 成功! O(∩_∩)O", file.getName());
                                 parsingResultDto.setStatus("success");
@@ -214,33 +211,6 @@ public class ParsingCdqServiceImpl extends ServiceImpl<ParsingCdqMapper, Parsing
         return ((int) ((time.getTime() - baseTime.getTime()) / 900000L)) + 1;
     }
 
-    private final ScheduledHelper scheduledHelper = new ScheduledHelper();
-
-    public void scheduleAddCache(List<ForecastPowerUltraShortTermStation> forecastPowerUltraShortTermStationList, String stationCode) {
-
-        int ago = 1;
-        try {
-            String cdqHowLongAgo = configService.selectConfigByKey("cdqHowLongAgo");
-            ago = Integer.parseInt(cdqHowLongAgo);
-        } catch (Exception e) {
-
-        }
-
-        Date date = DateTimeUtil.getMomentTimeFor15Minute(System.currentTimeMillis());
-
-        Date startTime = new Date(date.getTime() + ago * 15 * 60000L);
-        //未来四小时
-        Date endTime = new Date(startTime.getTime() + 4 * 60 * 60000L);
 
-        List<ForecastPowerUltraShortTermStation> forecastPowerUltraShortTermStations = forecastPowerUltraShortTermStationList.stream().filter(f->f.getTime().getTime() >= startTime.getTime() && f.getTime().getTime() < endTime.getTime()).collect(Collectors.toList());
-        if (forecastPowerUltraShortTermStations.size() >= 16) {
-            scheduledHelper.scheduleTaskAtFixedDate(startTime, new Runnable() {
-                @Override
-                public void run() {
-                    DataStore.getInstance().setData(forecastPowerUltraShortTermStationList, stationCode);
-                }
-            });
-        }
-    }
 
 }

+ 0 - 31
cpp-admin/src/main/java/com/cpp/web/service/datafactory/impl/ParsingDqServiceImpl.java

@@ -45,9 +45,6 @@ import java.util.stream.Collectors;
 @Transactional
 public class ParsingDqServiceImpl extends ServiceImpl<ParsingDqMapper, ParsingDq> implements ParsingDqService, ParsingInterface {
 
-
-    private final ISysConfigService configService;
-
     private List<ParsingDq> parsingDqs = new ArrayList<>();
 
     private final ForecastPowerShortTermStationService forecastPowerShortTermStationService;
@@ -109,7 +106,6 @@ public class ParsingDqServiceImpl extends ServiceImpl<ParsingDqMapper, ParsingDq
                                     }
                                 }
 
-                                scheduleAddCache(forecastPowerShortTermStationList, stationCode);
                                 forecastPowerShortTermStationService.saveBatch(forecastPowerShortTermStationList);
                                 log.info("解析短期文件:{} 成功! O(∩_∩)O", file.getName());
                                 parsingResultDto.setStatus("success");
@@ -246,32 +242,5 @@ public class ParsingDqServiceImpl extends ServiceImpl<ParsingDqMapper, ParsingDq
         return ((int) ((time.getTime() - baseTime.getTime()) / 86400000L)) + 1;
     }
 
-    private final ScheduledHelper scheduledHelper = new ScheduledHelper();
-
-    public void scheduleAddCache(List<ForecastPowerShortTermStation> forecastPowerShortTermStationList, String stationCode) {
-
-        int ago = 1;
-        try {
-            String dqHowLongAgo = configService.selectConfigByKey("dqHowLongAgo");
-            ago = Integer.parseInt(dqHowLongAgo);
-        } catch (Exception e) {
-
-        }
-
-        Long dAdd = System.currentTimeMillis() + ago * 86400000L;
-        Date startTime = DateTimeUtil.getDayStartTime(dAdd);
-        Date endTime = DateTimeUtil.getDayLastTime(dAdd);
 
-
-        List<ForecastPowerShortTermStation> forecastPowerShortTermStations = forecastPowerShortTermStationList.stream().filter(f -> f.getTime().getTime() >= startTime.getTime() && f.getTime().getTime() < endTime.getTime()).collect(Collectors.toList());
-        if (forecastPowerShortTermStations.size() >= 96) {
-            scheduledHelper.scheduleTaskAtFixedDate(startTime, new Runnable() {
-                @Override
-                public void run() {
-                    DataStore.getInstance().setData(forecastPowerShortTermStationList, stationCode);
-                }
-            });
-        }
-
-    }
 }

+ 48 - 10
cpp-admin/src/main/java/com/cpp/web/service/datafactory/impl/ParsingRcdqServiceImpl.java

@@ -1,14 +1,20 @@
 package com.cpp.web.service.datafactory.impl;
 
+import com.cpp.system.service.ISysConfigService;
 import com.cpp.web.domain.datafactory.BaseParsing;
 import com.cpp.web.domain.datafactory.ParsingCdq;
 import com.cpp.web.domain.datafactory.dto.ParsingConfParam;
 import com.cpp.web.domain.datafactory.dto.ParsingResultDto;
 import com.cpp.web.domain.datafactory.enums.FileTypeEnum;
+import com.cpp.web.domain.station.ForecastPowerUltraShortTermRegulation;
 import com.cpp.web.domain.station.ForecastPowerUltraShortTermStation;
+import com.cpp.web.service.datafactory.DataStore;
 import com.cpp.web.service.datafactory.ParsingCdqService;
 import com.cpp.web.service.datafactory.ParsingInterface;
+import com.cpp.web.service.datafactory.ScheduledHelper;
+import com.cpp.web.service.station.ForecastPowerUltraShortTermRegulationService;
 import com.cpp.web.service.station.ForecastPowerUltraShortTermStationService;
+import com.cpp.web.utils.DateTimeUtil;
 import com.cpp.web.utils.ParsingFieldUtil;
 import com.cpp.web.utils.ParsingFileUtil;
 import com.cpp.web.utils.ParsingUtil;
@@ -23,6 +29,7 @@ import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 超短期解析业务层实现类
@@ -35,8 +42,9 @@ import java.util.List;
 @Slf4j
 @Transactional
 public class ParsingRcdqServiceImpl implements ParsingInterface {
+    private final ISysConfigService configService;
 
-    private final ForecastPowerUltraShortTermStationService forecastPowerUltraShortTermStationService;
+    private final ForecastPowerUltraShortTermRegulationService forecastPowerUltraShortTermRegulationService;
 
     private final ParsingCdqService parsingCdqService;
 
@@ -60,7 +68,7 @@ public class ParsingRcdqServiceImpl implements ParsingInterface {
         parsingResultDto.setFileType(FileTypeEnum.cdq.name());
 
         try {
-            List<ForecastPowerUltraShortTermStation> forecastPowerUltraShortTermStationList = new ArrayList();
+            List<ForecastPowerUltraShortTermRegulation> forecastPowerUltraShortTermRegulationList = new ArrayList();
 
             if (!this.parsingCdqs.isEmpty()) {
                 ParsingCdq parsingCdq = this.parsingCdqs.get(0);
@@ -75,16 +83,17 @@ public class ParsingRcdqServiceImpl implements ParsingInterface {
                             if (fpValues.size() > 0) {
                                 BigDecimal openCapacity = parsingValue(parsingCdq.getOpenCapacity(), fileContent);
                                 for (BigDecimal fpValue : fpValues) {
-                                    ForecastPowerUltraShortTermStation forecastPowerUltraShortTermStation = new ForecastPowerUltraShortTermStation();
-                                    forecastPowerUltraShortTermStation.setStationCode(stationCode);
-                                    forecastPowerUltraShortTermStation.setFpValue(fpValue);
-                                    forecastPowerUltraShortTermStation.setTime(time);
-                                    forecastPowerUltraShortTermStation.setForecastHowLongAgo(calcHowLongAgo(forecastTime, time));
-                                    forecastPowerUltraShortTermStation.setOpenCapacity(openCapacity);
-                                    forecastPowerUltraShortTermStationList.add(forecastPowerUltraShortTermStation);
+                                    ForecastPowerUltraShortTermRegulation forecastPowerUltraShortTermRegulation = new ForecastPowerUltraShortTermRegulation();
+                                    forecastPowerUltraShortTermRegulation.setStationCode(stationCode);
+                                    forecastPowerUltraShortTermRegulation.setFpValue(fpValue);
+                                    forecastPowerUltraShortTermRegulation.setTime(time);
+                                    forecastPowerUltraShortTermRegulation.setForecastHowLongAgo(calcHowLongAgo(forecastTime, time));
+                                    forecastPowerUltraShortTermRegulation.setOpenCapacity(openCapacity);
+                                    forecastPowerUltraShortTermRegulationList.add(forecastPowerUltraShortTermRegulation);
                                     time = new Date(time.getTime() + 900000L);//递增15分钟
                                 }
-                                forecastPowerUltraShortTermStationService.saveBatch(forecastPowerUltraShortTermStationList);
+                                scheduleAddCache(forecastPowerUltraShortTermRegulationList,stationCode);
+                                forecastPowerUltraShortTermRegulationService.saveBatch(forecastPowerUltraShortTermRegulationList);
                                 log.info("解析 调控后CDQ文件:{} 成功! O(∩_∩)O", file.getName());
                                 parsingResultDto.setStatus("success");
                             } else {
@@ -205,4 +214,33 @@ public class ParsingRcdqServiceImpl implements ParsingInterface {
         return ((int) ((time.getTime() - baseTime.getTime()) / 900000L)) + 1;
     }
 
+
+    private final ScheduledHelper scheduledHelper = new ScheduledHelper();
+
+    public void scheduleAddCache(List<ForecastPowerUltraShortTermRegulation> forecastPowerUltraShortTermRegulationList, String stationCode) {
+
+        int ago = 1;
+        try {
+            String cdqHowLongAgo = configService.selectConfigByKey("cdqHowLongAgo");
+            ago = Integer.parseInt(cdqHowLongAgo);
+        } catch (Exception e) {
+
+        }
+
+        Date date = DateTimeUtil.getMomentTimeFor15Minute(System.currentTimeMillis());
+
+        Date startTime = new Date(date.getTime() + ago * 15 * 60000L);
+        //未来四小时
+        Date endTime = new Date(startTime.getTime() + 4 * 60 * 60000L);
+
+        List<ForecastPowerUltraShortTermRegulation> forecastPowerUltraShortTermRegulations = forecastPowerUltraShortTermRegulationList.stream().filter(f->f.getTime().getTime() >= startTime.getTime() && f.getTime().getTime() < endTime.getTime()).collect(Collectors.toList());
+        if (forecastPowerUltraShortTermRegulations.size() >= 16) {
+            scheduledHelper.scheduleTaskAtFixedDate(startTime, new Runnable() {
+                @Override
+                public void run() {
+                    DataStore.getInstance().setData(forecastPowerUltraShortTermRegulationList, stationCode);
+                }
+            });
+        }
+    }
 }

+ 38 - 0
cpp-admin/src/main/java/com/cpp/web/service/datafactory/impl/ParsingRdqServiceImpl.java

@@ -1,14 +1,19 @@
 package com.cpp.web.service.datafactory.impl;
 
+import com.cpp.system.service.ISysConfigService;
 import com.cpp.web.domain.datafactory.BaseParsing;
 import com.cpp.web.domain.datafactory.ParsingDq;
 import com.cpp.web.domain.datafactory.dto.ParsingConfParam;
 import com.cpp.web.domain.datafactory.dto.ParsingResultDto;
 import com.cpp.web.domain.datafactory.enums.FileTypeEnum;
 import com.cpp.web.domain.station.ForecastPowerShortTermRegulation;
+import com.cpp.web.domain.station.ForecastPowerShortTermStation;
+import com.cpp.web.service.datafactory.DataStore;
 import com.cpp.web.service.datafactory.ParsingDqService;
 import com.cpp.web.service.datafactory.ParsingInterface;
+import com.cpp.web.service.datafactory.ScheduledHelper;
 import com.cpp.web.service.station.ForecastPowerShortTermRegulationService;
+import com.cpp.web.utils.DateTimeUtil;
 import com.cpp.web.utils.ParsingFieldUtil;
 import com.cpp.web.utils.ParsingFileUtil;
 import com.cpp.web.utils.ParsingUtil;
@@ -23,6 +28,7 @@ import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 调控后短期解析业务层实现类 开头r代表调控后
@@ -35,6 +41,7 @@ import java.util.List;
 @AllArgsConstructor
 @Transactional
 public class ParsingRdqServiceImpl implements ParsingInterface {
+    private final ISysConfigService configService;
 
     private final ForecastPowerShortTermRegulationService forecastPowerShortTermRegulationService;
 
@@ -96,6 +103,7 @@ public class ParsingRdqServiceImpl implements ParsingInterface {
                                     }
                                 }
 
+                                scheduleAddCache(forecastPowerShortTermRegulationList,stationCode);
                                 forecastPowerShortTermRegulationService.saveBatch(forecastPowerShortTermRegulationList);
                                 log.info("解析 调控后DQ文件:{} 成功! O(∩_∩)O", file.getName());
                                 parsingResultDto.setStatus("success");
@@ -231,4 +239,34 @@ public class ParsingRdqServiceImpl implements ParsingInterface {
     public Integer calcHowLongAgo(Date baseTime, Date time) {
         return ((int) (time.getTime() - baseTime.getTime() % 86400000L)) + 1;
     }
+
+
+    private final ScheduledHelper scheduledHelper = new ScheduledHelper();
+
+    public void scheduleAddCache(List<ForecastPowerShortTermRegulation> forecastPowerShortTermRegulationList, String stationCode) {
+
+        int ago = 1;
+        try {
+            String dqHowLongAgo = configService.selectConfigByKey("dqHowLongAgo");
+            ago = Integer.parseInt(dqHowLongAgo);
+        } catch (Exception e) {
+
+        }
+
+        Long dAdd = System.currentTimeMillis() + ago * 86400000L;
+        Date startTime = DateTimeUtil.getDayStartTime(dAdd);
+        Date endTime = DateTimeUtil.getDayLastTime(dAdd);
+
+
+        List<ForecastPowerShortTermRegulation> forecastPowerShortTermRegulations = forecastPowerShortTermRegulationList.stream().filter(f -> f.getTime().getTime() >= startTime.getTime() && f.getTime().getTime() < endTime.getTime()).collect(Collectors.toList());
+        if (forecastPowerShortTermRegulations.size() >= 96) {
+            scheduledHelper.scheduleTaskAtFixedDate(startTime, new Runnable() {
+                @Override
+                public void run() {
+                    DataStore.getInstance().setData(forecastPowerShortTermRegulationList, stationCode);
+                }
+            });
+        }
+
+    }
 }

+ 3 - 3
cpp-admin/src/main/java/com/cpp/web/service/station/impl/PowerStationStatusDataServiceImpl.java

@@ -536,7 +536,7 @@ public class PowerStationStatusDataServiceImpl extends ServiceImpl<PowerStationS
         map.put("tableData", new ArrayList<Map<String, Object>>());
 
         Map<String, Map<Date, List<ForecastPowerShortTermCloud>>> forecastPowerShortTermCloudModelTimeMap = forecastPowerShortTermCloudService.findByForecastTimeBetweenAndHowLongAgoAndStationCode(startTime, endTime, forecastHowLongAgo, stationCode).stream().collect(Collectors.groupingBy(ForecastPowerShortTermCloud::getForecastModel, Collectors.groupingBy(ForecastPowerShortTermCloud::getTime, Collectors.toList())));
-        Map<Date, List<ForecastPowerShortTermStation>> forecastPowerShortTermStationTimeMap = forecastPowerShortTermStationService.findByForecastTimeBetweenAndForecastHowLongAgoAndStationCode(startTime, endTime, forecastHowLongAgo, stationCode).stream().collect(Collectors.groupingBy(ForecastPowerShortTermStation::getTime, Collectors.toList()));
+        Map<Date, List<ForecastPowerShortTermRegulation>> forecastPowerShortTermRegulationTimeMap = forecastPowerShortTermRegulationService.findByForecastTimeBetweenAndForecastHowLongAgoAndStationCode(startTime.getTime(), endTime.getTime(), forecastHowLongAgo, stationCode).stream().collect(Collectors.groupingBy(ForecastPowerShortTermRegulation::getTime, Collectors.toList()));
 
         Map<Date, List<PowerStationStatusData>> powerStationStatusDataTimeMap = findByTimeBetweenAndStationCode(startTime, endTime, stationCode).stream().collect(Collectors.groupingBy(PowerStationStatusData::getTime, Collectors.toList()));
 
@@ -583,8 +583,8 @@ public class PowerStationStatusDataServiceImpl extends ServiceImpl<PowerStationS
                 dataMap.put("wsHubHeight", windTowerStatusData.getWsHubHeight());
             }
 
-            ForecastPowerShortTermStation forecastPowerShortTermStation = Optional.ofNullable(forecastPowerShortTermStationTimeMap.containsKey(time) ? forecastPowerShortTermStationTimeMap.get(time).get(0) : null).orElse(new ForecastPowerShortTermStation());
-            dataMap.put("fpValue", forecastPowerShortTermStation.getFpValue());
+            ForecastPowerShortTermRegulation forecastPowerShortTermRegulation = Optional.ofNullable(forecastPowerShortTermRegulationTimeMap.containsKey(time) ? forecastPowerShortTermRegulationTimeMap.get(time).get(0) : null).orElse(new ForecastPowerShortTermRegulation());
+            dataMap.put("fpValue", forecastPowerShortTermRegulation.getFpValue());
 
 
             for (Map.Entry<String, String> stringStringEntry : forecastModelMap.entrySet()) {

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

@@ -229,7 +229,7 @@ export default {
         "startTime": startTime,
         "endTime": endTime,
         "forecastType": this.forecastType,
-        "dataSources": 'E1',
+        "dataSources": 'E4',
         "forecastModel": '',
         "ago": this.ago
       }