Browse Source

修改湖北准确率风光统计

xusl 1 năm trước cách đây
mục cha
commit
1e962f7609

+ 170 - 83
ipfcst/ipfcst-console/src/main/java/com/jiayue/ipfcst/calculate/service/AccuarcyPassRateCalculateServiceE42.java

@@ -1,10 +1,8 @@
 package com.jiayue.ipfcst.calculate.service;
 
+import com.jiayue.ipfcst.common.data.constant.enums.ElectricFieldTypeEnum;
 import com.jiayue.ipfcst.common.data.entity.*;
-import com.jiayue.ipfcst.common.data.repository.AccuracyPassRateRepository;
-import com.jiayue.ipfcst.common.data.repository.ForecastPowerShortTermHisRepository;
-import com.jiayue.ipfcst.common.data.repository.ForecastPowerUltraShortTermHisRepository;
-import com.jiayue.ipfcst.common.data.repository.PowerStationStatusDataRepository;
+import com.jiayue.ipfcst.common.data.repository.*;
 import com.jiayue.ipfcst.console.service.SysParameterService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -26,18 +24,26 @@ import java.util.stream.Collectors;
 @Slf4j
 public class AccuarcyPassRateCalculateServiceE42 implements IAccuracyPassRateCalculate {
   private final PowerStationStatusDataRepository powerStationStatusDataRepository;
+  private final PowerStationStatusDataOneRepository powerStationStatusDataOneRepository;
   private final ForecastPowerUltraShortTermHisRepository forecastPowerUltraShortTermHisRepository;
+  private final ForecastPowerUltraShortTermOneHisRepository forecastPowerUltraShortTermOneHisRepository;
   private final ForecastPowerShortTermHisRepository forecastPowerShortTermHisRepository;
+  private final ForecastPowerShortTermOneHisRepository forecastPowerShortTermOneHisRepository;
   private final SysParameterService sysParameterService;
   private final AccuracyPassRateRepository accuracyPassRateRepository;
+  private final AccuracyPassRateOneRepository accuracyPassRateOneRepository;
 
   @Autowired
-  public AccuarcyPassRateCalculateServiceE42(PowerStationStatusDataRepository powerStationStatusDataRepository, ForecastPowerUltraShortTermHisRepository forecastPowerUltraShortTermHisRepository, ForecastPowerShortTermHisRepository forecastPowerShortTermHisRepository, SysParameterService sysParameterService, AccuracyPassRateRepository accuracyPassRateRepository) {
+  public AccuarcyPassRateCalculateServiceE42(PowerStationStatusDataRepository powerStationStatusDataRepository, PowerStationStatusDataOneRepository powerStationStatusDataOneRepository, ForecastPowerUltraShortTermHisRepository forecastPowerUltraShortTermHisRepository, ForecastPowerUltraShortTermOneHisRepository forecastPowerUltraShortTermOneHisRepository, ForecastPowerShortTermHisRepository forecastPowerShortTermHisRepository, ForecastPowerShortTermOneHisRepository forecastPowerShortTermOneHisRepository, SysParameterService sysParameterService, AccuracyPassRateRepository accuracyPassRateRepository, AccuracyPassRateOneRepository accuracyPassRateOneRepository) {
     this.powerStationStatusDataRepository = powerStationStatusDataRepository;
+    this.powerStationStatusDataOneRepository = powerStationStatusDataOneRepository;
     this.forecastPowerUltraShortTermHisRepository = forecastPowerUltraShortTermHisRepository;
+    this.forecastPowerUltraShortTermOneHisRepository = forecastPowerUltraShortTermOneHisRepository;
     this.forecastPowerShortTermHisRepository = forecastPowerShortTermHisRepository;
+    this.forecastPowerShortTermOneHisRepository = forecastPowerShortTermOneHisRepository;
     this.sysParameterService = sysParameterService;
     this.accuracyPassRateRepository = accuracyPassRateRepository;
+    this.accuracyPassRateOneRepository = accuracyPassRateOneRepository;
   }
 
   @Override
@@ -46,93 +52,174 @@ public class AccuarcyPassRateCalculateServiceE42 implements IAccuracyPassRateCal
     long startTime = queryTime[0];
     long endTime = queryTime[1];
     long moment15 = 900000L;
-    BigDecimal cap = electricField.getCapacity();
-    AccuracyPassRate accuracyPassRate = new AccuracyPassRate();
-    accuracyPassRate.setTime(endTime);
-    BigDecimal accuarcyDq;
-    BigDecimal accuarcyCdq;
-    String eType = electricField.getElectricFieldTypeEnum().name();
-
-    List<PowerStationStatusData> pList = powerStationStatusDataRepository.findByTimeBetween(new Date(startTime), new Date(endTime));
-    List<PowerStationStatusData> psList = IAccuracyPassRateCalculate.filterData(pList);
-    /************** ***********************************计算短期准确率-start*****************************************************/
-    String sysParameter = this.sysParameterService.getSysParameter("ACCURACY_DQ_HOWLONGAGO", "1");
-    int howLongAgoForDq = Integer.parseInt(sysParameter);
-    List<ForecastPowerShortTermHis> fList = forecastPowerShortTermHisRepository.findByForecastTimeBetweenAndForecastHowLongAgo(startTime, endTime, howLongAgoForDq);
-    List<Map<String, BigDecimal>> dataDq = new ArrayList<>();
-    for (long stepTime = startTime; stepTime <= endTime; stepTime = stepTime + moment15) {
-      long finalTime = stepTime;
-      List<ForecastPowerShortTermHis> fFilter = fList.stream().filter(f -> f.getForecastTime() == finalTime).collect(Collectors.toList());
-      List<PowerStationStatusData> pFilter = psList.stream().filter(p -> p.getTime().getTime() == finalTime).collect(Collectors.toList());
-      if (fFilter != null && fFilter.size() > 0 && pFilter != null && pFilter.size() > 0) {
-        Map<String, BigDecimal> map = new HashMap<>();
-        map.put("sj", pFilter.get(0).getAbleValue());
-        map.put("yc", fFilter.get(0).getAbleValue());
-        dataDq.add(map);
-      }
-    }
-    if (dataDq != null && dataDq.size() > 0) {
-      try {
-        if (eType.equals("E1")) {
-          //光场站
-          accuarcyDq = CalculateMethod.calculateC2(dataDq, cap);
+
+    for (int i=0;i<2;i++){
+      if (i==0){
+        // 光伏
+        electricField.setCapacity(new BigDecimal(electricField.getBackupE()));
+        electricField.setElectricFieldTypeEnum(ElectricFieldTypeEnum.E1);
+        BigDecimal cap = electricField.getCapacity();
+        AccuracyPassRate accuracyPassRate = new AccuracyPassRate();
+        accuracyPassRate.setTime(endTime);
+        BigDecimal accuarcyDq;
+        BigDecimal accuarcyCdq;
+        String eType = electricField.getElectricFieldTypeEnum().name();
+
+        List<PowerStationStatusData> pList = powerStationStatusDataRepository.findByTimeBetween(new Date(startTime), new Date(endTime));
+        List<PowerStationStatusData> psList = IAccuracyPassRateCalculate.filterData(pList);
+        /************** ***********************************计算短期准确率-start*****************************************************/
+        String sysParameter = this.sysParameterService.getSysParameter("ACCURACY_DQ_HOWLONGAGO", "1");
+        int howLongAgoForDq = Integer.parseInt(sysParameter);
+        List<ForecastPowerShortTermHis> fList = forecastPowerShortTermHisRepository.findByForecastTimeBetweenAndForecastHowLongAgo(startTime, endTime, howLongAgoForDq);
+        List<Map<String, BigDecimal>> dataDq = new ArrayList<>();
+        for (long stepTime = startTime; stepTime <= endTime; stepTime = stepTime + moment15) {
+          long finalTime = stepTime;
+          List<ForecastPowerShortTermHis> fFilter = fList.stream().filter(f -> f.getForecastTime() == finalTime).collect(Collectors.toList());
+          List<PowerStationStatusData> pFilter = psList.stream().filter(p -> p.getTime().getTime() == finalTime).collect(Collectors.toList());
+          if (fFilter != null && fFilter.size() > 0 && pFilter != null && pFilter.size() > 0) {
+            Map<String, BigDecimal> map = new HashMap<>();
+            map.put("sj", pFilter.get(0).getAbleValue());
+            map.put("yc", fFilter.get(0).getAbleValue());
+            dataDq.add(map);
+          }
+        }
+        if (dataDq != null && dataDq.size() > 0) {
+          try {
+            //光场站
+            accuarcyDq = CalculateMethod.calculateC2(dataDq, cap);
+            accuracyPassRate.setShortTermAccuracy(accuarcyDq.toString() + "%");
+          } catch (Exception e) {
+            e.printStackTrace();
+            log.error("光伏计算短期准确率错误");
+          }
+
         } else {
-          //风场站
-          accuarcyDq = CalculateMethod.calculateC1(dataDq, cap);
+          accuracyPassRate.setShortTermAccuracy("无可用数据计算");
         }
-        accuracyPassRate.setShortTermAccuracy(accuarcyDq.toString() + "%");
-      } catch (Exception e) {
-        e.printStackTrace();
-        log.error("计算短期准确率错误");
-      }
+        /************** ***********************************计算短期准确率-end*******************************************************/
+
+        /************** ***********************************计算超短期准确率-start****************************************************/
+        // 获取超短期计算准确率获取第几个点
+        String sysParameterCdq = this.sysParameterService.getSysParameter("ACCURACY_CDQ_HOWLONGAGO", "16");
+        int howLongAgoForCdq = Integer.parseInt(sysParameterCdq);
+        List<ForecastPowerUltraShortTermHis> uList = forecastPowerUltraShortTermHisRepository.findByForecastTimeBetweenAndForecastHowLongAgo(startTime, endTime, howLongAgoForCdq);
+        List<Map<String, BigDecimal>> dataCdq = new ArrayList<>();
+        for (long stepTime = startTime; stepTime <= endTime; stepTime = stepTime + moment15) {
+          long finalTime = stepTime;
+          List<ForecastPowerUltraShortTermHis> fFilter = uList.stream().filter(f -> f.getForecastTime() == finalTime).collect(Collectors.toList());
+          List<PowerStationStatusData> pFilter = psList.stream().filter(p -> p.getTime().getTime() == finalTime).collect(Collectors.toList());
+          if (fFilter != null && fFilter.size() > 0 && pFilter != null && pFilter.size() > 0) {
+            Map<String, BigDecimal> map = new HashMap<>();
+            map.put("sj", pFilter.get(0).getAbleValue());
+            map.put("yc", fFilter.get(0).getAbleValue());
+            dataCdq.add(map);
+          }
+        }
+        if (dataCdq != null && dataCdq.size() > 0) {
+          try {
+            //光场站
+            accuarcyCdq = CalculateMethod.calculateC2(dataCdq, cap);
+            accuracyPassRate.setUltraShortTermAccuracy(accuarcyCdq.toString() + "%");
+          } catch (Exception e) {
+            e.printStackTrace();
+            log.error("光伏计算超短期准确率错误");
+          }
 
-    } else {
-      accuracyPassRate.setShortTermAccuracy("无可用数据计算");
-    }
-    /************** ***********************************计算短期准确率-end*******************************************************/
-
-    /************** ***********************************计算超短期准确率-start****************************************************/
-    // 获取超短期计算准确率获取第几个点
-    String sysParameterCdq = this.sysParameterService.getSysParameter("ACCURACY_CDQ_HOWLONGAGO", "16");
-    int howLongAgoForCdq = Integer.parseInt(sysParameterCdq);
-    List<ForecastPowerUltraShortTermHis> uList = forecastPowerUltraShortTermHisRepository.findByForecastTimeBetweenAndForecastHowLongAgo(startTime, endTime, howLongAgoForCdq);
-    List<Map<String, BigDecimal>> dataCdq = new ArrayList<>();
-    for (long stepTime = startTime; stepTime <= endTime; stepTime = stepTime + moment15) {
-      long finalTime = stepTime;
-      List<ForecastPowerUltraShortTermHis> fFilter = uList.stream().filter(f -> f.getForecastTime() == finalTime).collect(Collectors.toList());
-      List<PowerStationStatusData> pFilter = psList.stream().filter(p -> p.getTime().getTime() == finalTime).collect(Collectors.toList());
-      if (fFilter != null && fFilter.size() > 0 && pFilter != null && pFilter.size() > 0) {
-        Map<String, BigDecimal> map = new HashMap<>();
-        map.put("sj", pFilter.get(0).getAbleValue());
-        map.put("yc", fFilter.get(0).getAbleValue());
-        dataCdq.add(map);
-      }
-    }
-    if (dataCdq != null && dataCdq.size() > 0) {
-      try {
-        if (eType.equals("E1")) {
-          //光场站
-          accuarcyCdq = CalculateMethod.calculateC2(dataCdq, cap);
         } else {
-          //风场站
-          accuarcyCdq = CalculateMethod.calculateC1(dataCdq, cap);
+          accuracyPassRate.setUltraShortTermAccuracy("无可用数据计算");
         }
-        accuracyPassRate.setUltraShortTermAccuracy(accuarcyCdq.toString() + "%");
-      } catch (Exception e) {
-        e.printStackTrace();
-        log.error("计算超短期准确率错误");
+        /************** ***********************************计算超短期准确率-end******************************************************/
+
+        //湖北lqw
+        accuracyPassRate.setUltraShortTermPassRate("100%");
+        accuracyPassRate.setShortTermPassRate("100%");
+
+        this.accuracyPassRateRepository.save(accuracyPassRate);
       }
+      else{
+        // 风电
+        electricField.setCapacity(new BigDecimal(electricField.getBackupF()));
+        electricField.setElectricFieldTypeEnum(ElectricFieldTypeEnum.E2);
+        BigDecimal cap = electricField.getCapacity();
+        AccuracyPassRateOne accuracyPassRateOne = new AccuracyPassRateOne();
+        accuracyPassRateOne.setTime(endTime);
+        BigDecimal accuarcyDq;
+        BigDecimal accuarcyCdq;
+        String eType = electricField.getElectricFieldTypeEnum().name();
 
-    } else {
-      accuracyPassRate.setUltraShortTermAccuracy("无可用数据计算");
-    }
-    /************** ***********************************计算超短期准确率-end******************************************************/
+        List<PowerStationStatusDataOne> pList = powerStationStatusDataOneRepository.findByTimeBetween(new Date(startTime), new Date(endTime));
+        List<PowerStationStatusDataOne> psList = IAccuracyPassRateCalculate.filterDataOne(pList);
+        /************** ***********************************计算短期准确率-start*****************************************************/
+        String sysParameter = this.sysParameterService.getSysParameter("ACCURACY_DQ_HOWLONGAGO", "1");
+        int howLongAgoForDq = Integer.parseInt(sysParameter);
+        List<ForecastPowerShortTermOneHis> fList = forecastPowerShortTermOneHisRepository.findByForecastTimeBetweenAndForecastHowLongAgo(startTime, endTime, howLongAgoForDq);
+        List<Map<String, BigDecimal>> dataDq = new ArrayList<>();
+        for (long stepTime = startTime; stepTime <= endTime; stepTime = stepTime + moment15) {
+          long finalTime = stepTime;
+          List<ForecastPowerShortTermOneHis> fFilter = fList.stream().filter(f -> f.getForecastTime() == finalTime).collect(Collectors.toList());
+          List<PowerStationStatusDataOne> pFilter = psList.stream().filter(p -> p.getTime().getTime() == finalTime).collect(Collectors.toList());
+          if (fFilter != null && fFilter.size() > 0 && pFilter != null && pFilter.size() > 0) {
+            Map<String, BigDecimal> map = new HashMap<>();
+            map.put("sj", pFilter.get(0).getAbleValue());
+            map.put("yc", fFilter.get(0).getAbleValue());
+            dataDq.add(map);
+          }
+        }
+        if (dataDq != null && dataDq.size() > 0) {
+          try {
+            //风电站
+            accuarcyDq = CalculateMethod.calculateC1(dataDq, cap);
+            accuracyPassRateOne.setShortTermAccuracy(accuarcyDq.toString() + "%");
+          } catch (Exception e) {
+            e.printStackTrace();
+            log.error("风电计算短期准确率错误");
+          }
 
-    //湖北lqw
-    accuracyPassRate.setUltraShortTermPassRate("100%");
-    accuracyPassRate.setShortTermPassRate("100%");
+        } else {
+          accuracyPassRateOne.setShortTermAccuracy("无可用数据计算");
+        }
+        /************** ***********************************计算短期准确率-end*******************************************************/
 
-    this.accuracyPassRateRepository.save(accuracyPassRate);
+        /************** ***********************************计算超短期准确率-start****************************************************/
+        // 获取超短期计算准确率获取第几个点
+        String sysParameterCdq = this.sysParameterService.getSysParameter("ACCURACY_CDQ_HOWLONGAGO", "16");
+        int howLongAgoForCdq = Integer.parseInt(sysParameterCdq);
+        List<ForecastPowerUltraShortTermOneHis> uList = forecastPowerUltraShortTermOneHisRepository.findByForecastTimeBetweenAndForecastHowLongAgo(startTime, endTime, howLongAgoForCdq);
+        List<Map<String, BigDecimal>> dataCdq = new ArrayList<>();
+        for (long stepTime = startTime; stepTime <= endTime; stepTime = stepTime + moment15) {
+          long finalTime = stepTime;
+          List<ForecastPowerUltraShortTermOneHis> fFilter = uList.stream().filter(f -> f.getForecastTime() == finalTime).collect(Collectors.toList());
+          List<PowerStationStatusDataOne> pFilter = psList.stream().filter(p -> p.getTime().getTime() == finalTime).collect(Collectors.toList());
+          if (fFilter != null && fFilter.size() > 0 && pFilter != null && pFilter.size() > 0) {
+            Map<String, BigDecimal> map = new HashMap<>();
+            map.put("sj", pFilter.get(0).getAbleValue());
+            map.put("yc", fFilter.get(0).getAbleValue());
+            dataCdq.add(map);
+          }
+        }
+        if (dataCdq != null && dataCdq.size() > 0) {
+          try {
+            //风场站
+            accuarcyCdq = CalculateMethod.calculateC1(dataCdq, cap);
+            accuracyPassRateOne.setUltraShortTermAccuracy(accuarcyCdq.toString() + "%");
+          } catch (Exception e) {
+            e.printStackTrace();
+            log.error("风电计算超短期准确率错误");
+          }
+
+        } else {
+          accuracyPassRateOne.setUltraShortTermAccuracy("无可用数据计算");
+        }
+        /************** ***********************************计算超短期准确率-end******************************************************/
+
+        //湖北lqw
+        accuracyPassRateOne.setUltraShortTermPassRate("100%");
+        accuracyPassRateOne.setShortTermPassRate("100%");
+
+        this.accuracyPassRateOneRepository.save(accuracyPassRateOne);
+
+      }
+    }
   }
 
 }

+ 21 - 0
ipfcst/ipfcst-console/src/main/java/com/jiayue/ipfcst/calculate/service/IAccuracyPassRateCalculate.java

@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import com.jiayue.ipfcst.common.data.entity.ElectricField;
 import com.jiayue.ipfcst.common.data.entity.PowerStationStatusData;
+import com.jiayue.ipfcst.common.data.entity.PowerStationStatusDataOne;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
@@ -52,6 +53,26 @@ public interface IAccuracyPassRateCalculate {
   }
 
   /**
+   * 过滤实际功率小于0 的数据
+   *
+   * @param datas 过滤前的集合
+   * @return 过滤后的集合
+   */
+  static List<PowerStationStatusDataOne> filterDataOne(List<PowerStationStatusDataOne> datas){
+    List<PowerStationStatusDataOne> result = new ArrayList<>();
+    if(datas!=null &&datas.size()>0){
+      float zero = ZERO.floatValue();
+      for(PowerStationStatusDataOne p :datas){
+        float ableValue = p.getAbleValue().floatValue();
+        if(ableValue>=zero){
+          result.add(p);
+        }
+      }
+    }
+    return result;
+  }
+
+  /**
    * 获取查询时间
    * 范围 00:00 - 23:45
    * @return 00:00 至  当前时间15分钟时间节点

+ 10 - 0
ipfcst/pom.xml

@@ -68,6 +68,16 @@
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger-ui</artifactId>
+            <version>2.9.2</version>
+        </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger2</artifactId>
+            <version>2.9.2</version>
+        </dependency>
     </dependencies>
 
     <dependencyManagement>