xusl 1 سال پیش
والد
کامیت
90b2fa469d

+ 41 - 9
ipfcst/ipfcst-common/ipfcst-common-data/src/main/java/com/jiayue/ipfcst/common/data/service/BaseService.java

@@ -5,15 +5,9 @@ import com.jiayue.ipfcst.common.core.exception.BusinessException;
 import com.jiayue.ipfcst.common.core.util.NumberUtils;
 import com.jiayue.ipfcst.common.data.constant.enums.AlarmStatusEnum;
 import com.jiayue.ipfcst.common.data.constant.enums.AlarmTypeEnum;
-import com.jiayue.ipfcst.common.data.entity.ElectricField;
-import com.jiayue.ipfcst.common.data.entity.OverhaulPlan;
-import com.jiayue.ipfcst.common.data.entity.SysAlarm;
-import com.jiayue.ipfcst.common.data.entity.SysParameter;
+import com.jiayue.ipfcst.common.data.entity.*;
 import com.jiayue.ipfcst.common.data.job.BaseJob;
-import com.jiayue.ipfcst.common.data.repository.ElectricFieldRepository;
-import com.jiayue.ipfcst.common.data.repository.OverhaulPlanRepository;
-import com.jiayue.ipfcst.common.data.repository.SysAlarmRepository;
-import com.jiayue.ipfcst.common.data.repository.SysParameterRepository;
+import com.jiayue.ipfcst.common.data.repository.*;
 import com.sun.istack.internal.NotNull;
 import lombok.NonNull;
 import lombok.extern.slf4j.Slf4j;
@@ -46,12 +40,17 @@ public class BaseService {
 	private ElectricFieldRepository electricFieldRepository;
 
 	private OverhaulPlanRepository overhaulPlanRepository;
-
+	private OverhaulPlanOneRepository overhaulPlanOneRepository;
 	private SysAlarmRepository sysAlarmRepository;
 
 	private Scheduler scheduler;
 
 	@Autowired
+	public void setOverhaulPlanOneRepository(OverhaulPlanOneRepository overhaulPlanOneRepository) {
+		this.overhaulPlanOneRepository = overhaulPlanOneRepository;
+	}
+
+	@Autowired
 	public void setOverhaulPlanRepository(OverhaulPlanRepository overhaulPlanRepository) {
 		this.overhaulPlanRepository = overhaulPlanRepository;
 	}
@@ -140,6 +139,39 @@ public class BaseService {
 	}
 
 	/**
+	 * 查询开机容量
+	 *
+	 * @param startTime 开始时间
+	 * @param endTime   结束时间
+	 * @return 开始时间-结束时间段内,以开始时间作为第一个时刻标记时间,15分为一个时刻长度,返回开机容量Map集合 key为对应时刻标记时间
+	 */
+	public Map<Long, BigDecimal> queryOpenCapacityOne(Long startTime, Long endTime, BigDecimal capacity) throws BusinessException {
+		// 查询检修计划
+		List<OverhaulPlanOne> overhaulPlans = this.overhaulPlanOneRepository.findByEndTimeGreaterThanEqualAndStartTimeLessThanEqualAndStatus(startTime, endTime,1);
+
+		Map<Long, BigDecimal> resultMap = new HashMap<>();
+		BigDecimal openCapacity;
+		Date tempTime = new Date(startTime);
+		while (!tempTime.after(new Date(endTime))) {
+			resultMap.put(tempTime.getTime(), capacity);
+			for (OverhaulPlanOne overhaulPlan : overhaulPlans) {
+				// 当查询时间在检修时间范围内,修正开机容量
+				Date oStartTime = new Date(overhaulPlan.getStartTime());
+				Date oEndTime1 = new Date(overhaulPlan.getEndTime());
+				if (!tempTime.before(oStartTime) && !tempTime.after(oEndTime1)) {
+					openCapacity = NumberUtils.subtract(capacity, overhaulPlan.getOverhaulCapactity(), 2);
+					// 当同一时间段有多条检修纪录时,取检修容量最大值也就是开机容量最小值
+					if (resultMap.get(tempTime.getTime()).compareTo(openCapacity) > 0) {
+						resultMap.put(tempTime.getTime(), openCapacity);
+					}
+				}
+			}
+			tempTime = DateUtil.offsetMinute(tempTime, 15);
+		}
+		return resultMap;
+	}
+
+	/**
 	 * 创建或更新定时任务
 	 *
 	 * @param t                    定时任务执行类

+ 6 - 2
ipfcst/ipfcst-console/src/main/java/com/jiayue/ipfcst/console/service/ForecastPowerShortTermOneService.java

@@ -106,10 +106,12 @@ public class ForecastPowerShortTermOneService extends BaseService {
 
     // 查询场站信息
     ElectricField electricFieldInfo = electricFieldService.get();
+    electricFieldInfo.setElectricFieldTypeEnum(ElectricFieldTypeEnum.E2);
+    electricFieldInfo.setCapacity(new BigDecimal(electricFieldInfo.getBackupF()));
     // 查询预测时间点对应的开机容量
     Map<Long, BigDecimal> openCapacityMap = null;
     try {
-      openCapacityMap = super.queryOpenCapacity(startTime, endTime, electricFieldInfo.getCapacity());
+      openCapacityMap = super.queryOpenCapacityOne(startTime, endTime, electricFieldInfo.getCapacity());
     } catch (BusinessException e) {
       log.error("预测数据生成获取开机容量出错:" + CommonUtil.printStackTraceToString(e));
     }
@@ -317,10 +319,12 @@ public class ForecastPowerShortTermOneService extends BaseService {
     log.info("开始获取短期预测功率" + DateFormatUtils.format(startTime, "yyyy-MM-dd HH:mm:ss") + " 至 " + DateFormatUtils.format(endTime, "yyyy-MM-dd HH:mm:ss"));
     // 查询场站信息
     ElectricField electricFieldInfo = electricFieldService.get();
+    electricFieldInfo.setElectricFieldTypeEnum(ElectricFieldTypeEnum.E2);
+    electricFieldInfo.setCapacity(new BigDecimal(electricFieldInfo.getBackupF()));
     // 查询预测时间点对应的开机容量
     Map<Long, BigDecimal> openCapacityMap = null;
     try {
-      openCapacityMap = super.queryOpenCapacity(startTime, endTime, electricFieldInfo.getCapacity());
+      openCapacityMap = super.queryOpenCapacityOne(startTime, endTime, electricFieldInfo.getCapacity());
     } catch (BusinessException e) {
       log.error("预测数据生成获取开机容量出错:" + CommonUtil.printStackTraceToString(e));
     }

+ 4 - 0
ipfcst/ipfcst-console/src/main/java/com/jiayue/ipfcst/console/service/ForecastPowerShortTermService.java

@@ -108,6 +108,8 @@ public class ForecastPowerShortTermService extends BaseService {
 
     // 查询场站信息
     ElectricField electricFieldInfo = electricFieldService.get();
+    electricFieldInfo.setElectricFieldTypeEnum(ElectricFieldTypeEnum.E1);
+    electricFieldInfo.setCapacity(new BigDecimal(electricFieldInfo.getBackupE()));
     // 查询预测时间点对应的开机容量
     Map<Long, BigDecimal> openCapacityMap = null;
     try {
@@ -319,6 +321,8 @@ public class ForecastPowerShortTermService extends BaseService {
     log.info("开始获取短期预测功率" + DateFormatUtils.format(startTime, "yyyy-MM-dd HH:mm:ss") + " 至 " + DateFormatUtils.format(endTime, "yyyy-MM-dd HH:mm:ss"));
     // 查询场站信息
     ElectricField electricFieldInfo = electricFieldService.get();
+    electricFieldInfo.setElectricFieldTypeEnum(ElectricFieldTypeEnum.E1);
+    electricFieldInfo.setCapacity(new BigDecimal(electricFieldInfo.getBackupE()));
     // 查询预测时间点对应的开机容量
     Map<Long, BigDecimal> openCapacityMap = null;
     try {

+ 64 - 60
ipfcst/ipfcst-console/src/main/java/com/jiayue/ipfcst/console/service/ForecastPowerUltraShortTermOneService.java

@@ -41,7 +41,7 @@ public class ForecastPowerUltraShortTermOneService extends BaseService {
   @Autowired
   SysParameterService sysParameterService;
   @Autowired
-  PowerStationStatusDataRepository powerStationStatusDataRepository;
+  PowerStationStatusDataOneRepository powerStationStatusDataOneRepository;
   @Autowired
   ForecastPowerUltraShortTermOneRepository forecastPowerUltraShortTermOneRepository;
   @Autowired
@@ -101,10 +101,12 @@ public class ForecastPowerUltraShortTermOneService extends BaseService {
 
     // 查询场站信息
     ElectricField electricFieldInfo = electricFieldService.get();
+    electricFieldInfo.setElectricFieldTypeEnum(ElectricFieldTypeEnum.E2);
+    electricFieldInfo.setCapacity(new BigDecimal(electricFieldInfo.getBackupF()));
     // 查询预测时间点对应的开机容量
     Map<Long, BigDecimal> openCapacityMap = null;
     try {
-      openCapacityMap = super.queryOpenCapacity(startTime, endTime, electricFieldInfo.getCapacity());
+      openCapacityMap = super.queryOpenCapacityOne(startTime, endTime, electricFieldInfo.getCapacity());
     } catch (BusinessException e) {
       log.error("预测数据生成获取开机容量出错:" + CommonUtil.printStackTraceToString(e));
     }
@@ -251,12 +253,12 @@ public class ForecastPowerUltraShortTermOneService extends BaseService {
         log.error("超短期数据用实际功率替换生成时刻步长错误", e);
         pre5Time = DateMomentUtil.getDayStartTime(systemDate.getTime());
       }
-      List<PowerStationStatusData> realPowerList = powerStationStatusDataRepository.findByTimeBetween(new Date(pre5Time), new Date(pre5Time + 5 * 60 * 1000));
+      List<PowerStationStatusDataOne> realPowerList = powerStationStatusDataOneRepository.findByTimeBetween(new Date(pre5Time), new Date(pre5Time + 5 * 60 * 1000));
       if (realPowerList.size() > 0) {
         // 按时间降序排列
-        realPowerList.sort(Comparator.comparing(PowerStationStatusData::getTime).reversed());
+        realPowerList.sort(Comparator.comparing(PowerStationStatusDataOne::getTime).reversed());
         // 获取最后一条最新的实际功率
-        PowerStationStatusData realPower = realPowerList.get(0);
+        PowerStationStatusDataOne realPower = realPowerList.get(0);
         // 将实际功率替换到对应的超短期点位上
         ForecastPowerUltraShortTermOneHis d = forecastPowerUltraShortTermHiss.get(replacePoint - 1);
         if (realPower.getRealValue().compareTo(new BigDecimal(0)) != -1) {
@@ -267,59 +269,59 @@ public class ForecastPowerUltraShortTermOneService extends BaseService {
 
     //-----------------------------------------------------开始进行人工干预数值的判断----------------------------------------------------
     //-----------------------------------------------------点位判断开始----------------------------------------------------
-    List<ManualInterventionData> manualInterventionDataList = manualInterventionService.queryManualIntervention(startTime, endTime, "1");
-    manualInterventionDataList.sort(Comparator.comparing(ManualInterventionData::getInterveneTime));
-    Map<Long, BigDecimal> mMap = new HashMap<>();
-    int flag = 0;
-    if (manualInterventionDataList.size() > 0) {
-      for (ManualInterventionData manualInterventionData : manualInterventionDataList) {
-        mMap.put(manualInterventionData.getInterveneTime(), manualInterventionData.getInterveneData());
-      }
-      for (ForecastPowerUltraShortTermOneHis forecastPowerUltraShortTermHis1 : forecastPowerUltraShortTermHiss) {
-        BigDecimal ma = mMap.get(forecastPowerUltraShortTermHis1.getForecastTime());
-        if (ma != null) {
-          forecastPowerUltraShortTermHis1.setAbleValue(ma.setScale(2, BigDecimal.ROUND_HALF_UP));
-          forecastPowerUltraShortTermHis1.setTheoryValue(ma.setScale(2, BigDecimal.ROUND_HALF_UP));
-          forecastPowerUltraShortTermHis1.setGenDate(new Date(monentTime));
-          forecastPowerUltraShortTermHis1.setPredictionModelEnum(PredictionModelEnum.E6);
-          forecastPowerUltraShortTermHiss.set(flag, forecastPowerUltraShortTermHis1);
-        }
-        flag++;
-      }
-    }
+//    List<ManualInterventionData> manualInterventionDataList = manualInterventionService.queryManualIntervention(startTime, endTime, "1");
+//    manualInterventionDataList.sort(Comparator.comparing(ManualInterventionData::getInterveneTime));
+//    Map<Long, BigDecimal> mMap = new HashMap<>();
+//    int flag = 0;
+//    if (manualInterventionDataList.size() > 0) {
+//      for (ManualInterventionData manualInterventionData : manualInterventionDataList) {
+//        mMap.put(manualInterventionData.getInterveneTime(), manualInterventionData.getInterveneData());
+//      }
+//      for (ForecastPowerUltraShortTermOneHis forecastPowerUltraShortTermHis1 : forecastPowerUltraShortTermHiss) {
+//        BigDecimal ma = mMap.get(forecastPowerUltraShortTermHis1.getForecastTime());
+//        if (ma != null) {
+//          forecastPowerUltraShortTermHis1.setAbleValue(ma.setScale(2, BigDecimal.ROUND_HALF_UP));
+//          forecastPowerUltraShortTermHis1.setTheoryValue(ma.setScale(2, BigDecimal.ROUND_HALF_UP));
+//          forecastPowerUltraShortTermHis1.setGenDate(new Date(monentTime));
+//          forecastPowerUltraShortTermHis1.setPredictionModelEnum(PredictionModelEnum.E6);
+//          forecastPowerUltraShortTermHiss.set(flag, forecastPowerUltraShortTermHis1);
+//        }
+//        flag++;
+//      }
+//    }
     //-----------------------------------------------------点位判断结束----------------------------------------------------
     //-----------------------------------------------------系数判断开始----------------------------------------------------
     //获取今日凌晨00:00
-    long mStartTime = DateUtil.beginOfDay(DateTime.now()).getTime();
-    long mEndTime = mStartTime + 24*60*60*1000l - 1000;
-    List<ManualInterventionRatioData> manualInterventionRatioDataList = manualInterventionRatioService.queryManualInterventionRatio(mStartTime, mEndTime, "1");
-
-    //如果有人工干预系数设置记录
-    if(manualInterventionRatioDataList.size() > 0){
-      //循环所有记录
-      for(ManualInterventionRatioData manualInterventionRatioData :manualInterventionRatioDataList){
-        for (Long tempTime = manualInterventionRatioData.getInterveneStartTime(); tempTime <= manualInterventionRatioData.getInterveneEndTime(); tempTime = tempTime + 15 * 60 * 1000L) {
-          //循环所有超短期的值
-          int mrflag = 0;
-          for (ForecastPowerUltraShortTermOneHis forecastPowerUltraShortTermHis1 : forecastPowerUltraShortTermHiss) {
-            //如果该时间设置了系数则数值*系数
-            if(forecastPowerUltraShortTermHis1.getForecastTime().equals(tempTime)){
-              BigDecimal ableValue = forecastPowerUltraShortTermHis1.getAbleValue().multiply(new BigDecimal(manualInterventionRatioData.getRatio().toString())).setScale(2, BigDecimal.ROUND_HALF_UP);
-              //如果计算后的数据大于装机容量 则ableValue=装机容量
-              if((ableValue).compareTo(new BigDecimal(electricFieldInfo.getCapacity().toString())) > 0){
-                ableValue = new BigDecimal(electricFieldInfo.getCapacity().toString());
-              }
-              forecastPowerUltraShortTermHis1.setAbleValue(ableValue);
-              forecastPowerUltraShortTermHis1.setTheoryValue(ableValue);
-              forecastPowerUltraShortTermHis1.setGenDate(new Date(monentTime));
-              forecastPowerUltraShortTermHis1.setPredictionModelEnum(PredictionModelEnum.E10);
-              forecastPowerUltraShortTermHiss.set(mrflag, forecastPowerUltraShortTermHis1);
-            }
-            mrflag++;
-          }
-        }
-      }
-    }
+//    long mStartTime = DateUtil.beginOfDay(DateTime.now()).getTime();
+//    long mEndTime = mStartTime + 24*60*60*1000l - 1000;
+//    List<ManualInterventionRatioData> manualInterventionRatioDataList = manualInterventionRatioService.queryManualInterventionRatio(mStartTime, mEndTime, "1");
+//
+//    //如果有人工干预系数设置记录
+//    if(manualInterventionRatioDataList.size() > 0){
+//      //循环所有记录
+//      for(ManualInterventionRatioData manualInterventionRatioData :manualInterventionRatioDataList){
+//        for (Long tempTime = manualInterventionRatioData.getInterveneStartTime(); tempTime <= manualInterventionRatioData.getInterveneEndTime(); tempTime = tempTime + 15 * 60 * 1000L) {
+//          //循环所有超短期的值
+//          int mrflag = 0;
+//          for (ForecastPowerUltraShortTermOneHis forecastPowerUltraShortTermHis1 : forecastPowerUltraShortTermHiss) {
+//            //如果该时间设置了系数则数值*系数
+//            if(forecastPowerUltraShortTermHis1.getForecastTime().equals(tempTime)){
+//              BigDecimal ableValue = forecastPowerUltraShortTermHis1.getAbleValue().multiply(new BigDecimal(manualInterventionRatioData.getRatio().toString())).setScale(2, BigDecimal.ROUND_HALF_UP);
+//              //如果计算后的数据大于装机容量 则ableValue=装机容量
+//              if((ableValue).compareTo(new BigDecimal(electricFieldInfo.getCapacity().toString())) > 0){
+//                ableValue = new BigDecimal(electricFieldInfo.getCapacity().toString());
+//              }
+//              forecastPowerUltraShortTermHis1.setAbleValue(ableValue);
+//              forecastPowerUltraShortTermHis1.setTheoryValue(ableValue);
+//              forecastPowerUltraShortTermHis1.setGenDate(new Date(monentTime));
+//              forecastPowerUltraShortTermHis1.setPredictionModelEnum(PredictionModelEnum.E10);
+//              forecastPowerUltraShortTermHiss.set(mrflag, forecastPowerUltraShortTermHis1);
+//            }
+//            mrflag++;
+//          }
+//        }
+//      }
+//    }
     //-----------------------------------------------------系数判断结束----------------------------------------------------
 
 
@@ -393,9 +395,11 @@ public class ForecastPowerUltraShortTermOneService extends BaseService {
         forecastPowerShortTermList.stream().collect(Collectors.groupingBy(ForecastPowerShortTermOne::getForecastTime));
       // 查询场站信息
       ElectricField electricField = this.getElectricField();
+      electricField.setElectricFieldTypeEnum(ElectricFieldTypeEnum.E2);
+      electricField.setCapacity(new BigDecimal(electricField.getBackupF()));
       Map<Long, BigDecimal> openCapacityMap = null;
       try {
-        openCapacityMap = super.queryOpenCapacity(startTime, endTime, electricField.getCapacity());
+        openCapacityMap = super.queryOpenCapacityOne(startTime, endTime, electricField.getCapacity());
       } catch (BusinessException e) {
         log.error("预测数据生成获取开机容量出错:" + CommonUtil.printStackTraceToString(e));
       }
@@ -454,8 +458,8 @@ public class ForecastPowerUltraShortTermOneService extends BaseService {
     Date currentTime = new Date(System.currentTimeMillis());
     Date startTime = DateUtils.addMinutes(currentTime, -10);
     Date endTime = DateUtils.addMinutes(currentTime, 1);
-    List<PowerStationStatusData> powerStationStatusDataList = this.powerStationStatusDataRepository.findByTimeBetween(startTime, endTime);
-    List<PowerStationStatusData> filterList = powerStationStatusDataList.stream().filter(t -> t.getAbleValue().compareTo(new BigDecimal("-1")) == 1).collect(Collectors.toList());
+    List<PowerStationStatusDataOne> powerStationStatusDataList = this.powerStationStatusDataOneRepository.findByTimeBetween(startTime, endTime);
+    List<PowerStationStatusDataOne> filterList = powerStationStatusDataList.stream().filter(t -> t.getAbleValue().compareTo(new BigDecimal("-1")) == 1).collect(Collectors.toList());
     String coe = super.getSysParameter("CDQ_COE", "1.05");
 
     Long monentTime = 0L;
@@ -476,14 +480,14 @@ public class ForecastPowerUltraShortTermOneService extends BaseService {
         }
         else{
           // 当前时间没有对应的短期,用实际功率最近的一个替换
-          filterList.sort(Comparator.comparing(PowerStationStatusData::getTime).reversed());
+          filterList.sort(Comparator.comparing(PowerStationStatusDataOne::getTime).reversed());
           currentForecastPowerValue = filterList.get(0).getAbleValue();
         }
       } catch (Exception e) {
         e.printStackTrace();
       }
 
-      BigDecimal sumAbleValue = filterList.stream().map(PowerStationStatusData::getAbleValue)
+      BigDecimal sumAbleValue = filterList.stream().map(PowerStationStatusDataOne::getAbleValue)
         .reduce(BigDecimal.ZERO, BigDecimal::add);
       BigDecimal averageAbleValue = sumAbleValue.divide(new BigDecimal(filterList.size()), 2, BigDecimal.ROUND_HALF_UP);
       //可用-短期差值

+ 4 - 0
ipfcst/ipfcst-console/src/main/java/com/jiayue/ipfcst/console/service/ForecastPowerUltraShortTermService.java

@@ -102,6 +102,8 @@ public class ForecastPowerUltraShortTermService extends BaseService {
 
     // 查询场站信息
     ElectricField electricFieldInfo = electricFieldService.get();
+    electricFieldInfo.setElectricFieldTypeEnum(ElectricFieldTypeEnum.E1);
+    electricFieldInfo.setCapacity(new BigDecimal(electricFieldInfo.getBackupE()));
     // 查询预测时间点对应的开机容量
     Map<Long, BigDecimal> openCapacityMap = null;
     try {
@@ -394,6 +396,8 @@ public class ForecastPowerUltraShortTermService extends BaseService {
         forecastPowerShortTermList.stream().collect(Collectors.groupingBy(ForecastPowerShortTerm::getForecastTime));
       // 查询场站信息
       ElectricField electricField = this.getElectricField();
+      electricField.setElectricFieldTypeEnum(ElectricFieldTypeEnum.E1);
+      electricField.setCapacity(new BigDecimal(electricField.getBackupE()));
       Map<Long, BigDecimal> openCapacityMap = null;
       try {
         openCapacityMap = super.queryOpenCapacity(startTime, endTime, electricField.getCapacity());