Browse Source

风向转变时,修改过低风速

songhaodong 2 years ago
parent
commit
b82749b272

+ 179 - 12
ipfcst/ipfcst-console/src/main/java/com/jiayue/ipfcst/fileupload/job/UploadFileMatoushanJob.java

@@ -84,14 +84,13 @@ public class UploadFileMatoushanJob extends BaseService {
     log.info("时间 【" + DateTimeUtil.dateToStrLong(new Date()) + "】 马头山短期文件生成开始");
     //1.读取配置
     readExcelForParams();
-    //2.查询nwp数据
+    //2.修改nwp数据
+    moldRepair();
+    //3.查询nwp数据
     List<Nwp> listTemperature = getNwpDatas();
-    //3.计算短期预测
+    //4.计算短期预测
     caculateDqs(listTemperature);
-
-
     log.info("时间 【" + DateTimeUtil.dateToStrLong(new Date()) + "】 马头山短期文件生成完成");
-
   }
   /**
    * 读取excel中配置参数
@@ -421,6 +420,7 @@ public class UploadFileMatoushanJob extends BaseService {
   public List<ForecastPowerShortTerm> modifyShorterData(List<ForecastPowerShortTerm> forecastPowerShortTermList){
     List<ModifyShorterData> modifyShorterDataList = modifyShorterDataRepository.findByStartTimeAfter(new Date());
     DecimalFormat decimalFormat=new DecimalFormat(".00");
+    log.info("执行修改短期系数方法开始,系统时间:"+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
     for(ModifyShorterData m: modifyShorterDataList){
       Date startTime = m.getStartTime();
       Date endTime = m.getEndTime();
@@ -435,6 +435,7 @@ public class UploadFileMatoushanJob extends BaseService {
         }
       }
     }
+    log.info("执行修改短期系数方法结束,系统时间:"+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
     return modifyMinPower(forecastPowerShortTermList);
   }
 
@@ -446,6 +447,7 @@ public class UploadFileMatoushanJob extends BaseService {
    */
   public List<ForecastPowerShortTerm> modifyMinPower(List<ForecastPowerShortTerm> forecastPowerShortTermList) {
     DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    log.info("执行根据时间段修改最小值开始,系统时间:"+ dateFormat.format(new Date()));
     for (ForecastPowerShortTerm f : forecastPowerShortTermList) {
       // 获取当前预测时间
       String pDate = dateFormat.format(f.getForecastTime());
@@ -485,6 +487,7 @@ public class UploadFileMatoushanJob extends BaseService {
         f.setFpValue(new BigDecimal(2));
       }
     }
+    log.info("执行根据时间段修改最小值结束" + dateFormat.format(new Date()));
     return forecastPowerShortTermList;
   }
 
@@ -531,6 +534,7 @@ public class UploadFileMatoushanJob extends BaseService {
     IcingShutdown icingShutdown = new IcingShutdown();
     IcingShutdown icingShutdownM = new IcingShutdown();
 
+    log.info("执行结冰停机方法开始,系统时间:"+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
     for(Nwp nwp: nwpData){
       // 判断是否结冰
       if(nwp.getT().compareTo(down_the_temperature) < 1 && nwp.getTpr().compareTo(tpr_threshold) > 0){
@@ -580,7 +584,7 @@ public class UploadFileMatoushanJob extends BaseService {
     } catch (BusinessException e) {
       log.info("获取参数错误:" + e);
     }
-
+    log.info("执行结冰停机方法结束,系统时间:"+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
     return icingShutdowns;
   }
 
@@ -614,7 +618,7 @@ public class UploadFileMatoushanJob extends BaseService {
 
     Integer ifOfCount = 0;
     Integer ifOfCountM = 0;
-
+    log.info("执行解冻开机方法开始,系统时间:"+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
     // 停机台数大于0
     if(Integer.parseInt(shut_down_number) > 0) {
       for (int i = 0; i < nwpData.size(); i++) {
@@ -656,10 +660,7 @@ public class UploadFileMatoushanJob extends BaseService {
         }
       }
     }
-
-    if(Integer.parseInt(shut_down_number) > 0){
-
-    }
+    log.info("执行解冻开机方法结束,系统时间:"+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
 
     return icingShutdowns;
   }
@@ -721,7 +722,6 @@ public class UploadFileMatoushanJob extends BaseService {
 
   }
 
-
   /**
    * 判断风向
    *
@@ -749,6 +749,173 @@ public class UploadFileMatoushanJob extends BaseService {
   }
 
   /**
+   * 修改nwp风速
+   */
+  public void moldRepair(){
+    log.info("执行修改nwp风速:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+    List<Nwp> listTemperature = getNwpDatas();
+    List<Nwp> nwpList = new ArrayList<>();
+    for (Nwp nwp : listTemperature) {
+      //层高
+      String windHeight = super.getSysParameter("WIND_HEIGHT", "30");
+      //风速
+      BigDecimal heightWs = getHeightWs(nwp, windHeight);
+      //查询增加的系数 默认1.2
+      String wd_change_coefficient = super.getSysParameter("WD_CHANGE_COEFFICIENT", "1.2");
+      BigDecimal coefficient = new BigDecimal(wd_change_coefficient);
+      //最低风速阈值
+      String minimum_ws = super.getSysParameter("MINIMUM_WS", "1");
+      BigDecimal minimumWs = new BigDecimal(minimum_ws);
+      //判断当前点比前15分钟的风向是否有改变
+      Boolean eq = wdChange(nwp,windHeight);
+      if (eq == false) {
+        //判断风速的值是否在最小区间
+        if (heightWs.compareTo(BigDecimal.ZERO) == 0 || heightWs.compareTo(minimumWs) == -1) {
+          //设置修改之后的nwp风速数据
+          setHeightWs(nwp, windHeight, coefficient);
+          nwpList.add(nwp);
+        }
+      }
+    }
+    nwpService.saveAll(nwpList);
+    log.info("执行修改nwp风速结束 系统时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+  }
+
+
+  /**
+   * 判断风向是否发生改变
+   */
+  public Boolean wdChange(Nwp nwp,String fieldName) {
+    //获取当前nwp数据的时间
+    Long preEndTime = nwp.getPreTime() ;
+    //获取上15分钟的nwp数据的时间
+    Long preStartTime = preEndTime - 60000 * 15;
+
+    List<Nwp> nwpData = nwpRepository.findByPreTimeBetween(preStartTime, preEndTime);
+    List<BigDecimal> heightWd = getHeightWd(nwpData, fieldName);
+
+    //获取上15分钟风向数据
+    BigDecimal wdFirst = heightWd.get(0);
+    String firstWd = decideWind(wdFirst);
+    //获取当前nwp数据的风向
+    BigDecimal wdLast = heightWd.get(nwpData.size() - 1);
+    String lastWd = decideWind(wdLast);
+
+    return firstWd.equals(lastWd);
+  }
+
+  /**
+   * 根据层高获取风速
+   * @param nwp
+   * @param fieldName
+   * @return
+   */
+  public BigDecimal getHeightWs(Nwp nwp, String fieldName) {
+    BigDecimal ws = BigDecimal.ZERO;
+    switch (fieldName) {
+      case "10":
+        ws = nwp.getWs10();
+        break;
+      case "30":
+        ws = nwp.getWs30();
+        break;
+      case "50":
+        ws = nwp.getWs50();
+        break;
+      case "70":
+        ws = nwp.getWs70();
+        break;
+      case "80":
+        ws = nwp.getWs80();
+        break;
+      case "90":
+        ws = nwp.getWs90();
+        break;
+      case "100":
+        ws = nwp.getWs100();
+        break;
+      case "170":
+        ws = nwp.getWs170();
+        break;
+    }
+    return ws;
+  }
+
+  /**
+   * 根据层高获取风向集合
+   * @param nwp
+   * @param fieldName
+   * @return
+   */
+  public List<BigDecimal> getHeightWd(List<Nwp> nwp, String fieldName) {
+    List<BigDecimal> nwpList = new ArrayList<>();
+    switch (fieldName) {
+      case "10":
+        nwpList = nwp.stream().map(Nwp::getWd10).collect(Collectors.toList());
+        break;
+      case "30":
+        nwpList = nwp.stream().map(Nwp::getWd30).collect(Collectors.toList());
+        break;
+      case "50":
+        nwpList = nwp.stream().map(Nwp::getWd50).collect(Collectors.toList());
+        break;
+      case "70":
+        nwpList = nwp.stream().map(Nwp::getWd70).collect(Collectors.toList());
+        break;
+      case "80":
+        nwpList = nwp.stream().map(Nwp::getWd80).collect(Collectors.toList());
+        break;
+      case "90":
+        nwpList = nwp.stream().map(Nwp::getWd90).collect(Collectors.toList());
+        break;
+      case "100":
+        nwpList = nwp.stream().map(Nwp::getWd100).collect(Collectors.toList());
+        break;
+      case "170":
+        nwpList = nwp.stream().map(Nwp::getWd170).collect(Collectors.toList());
+        break;
+    }
+    return nwpList;
+  }
+
+  /**
+   * 根据层高设置风速
+   *
+   * @param nwp
+   * @param fieldName
+   * @param speed
+   */
+  public void setHeightWs(Nwp nwp, String fieldName, BigDecimal speed) {
+    switch (fieldName) {
+      case "10":
+        nwp.setWs10(speed);
+        break;
+      case "30":
+        nwp.setWs30(speed);
+        break;
+      case "50":
+        nwp.setWs50(speed);
+        break;
+      case "70":
+        nwp.setWs70(speed);
+        break;
+      case "80":
+        nwp.setWs80(speed);
+        break;
+      case "90":
+        nwp.setWs90(speed);
+        break;
+      case "100":
+        nwp.setWs100(speed);
+        break;
+      case "170":
+        nwp.setWs170(speed);
+        break;
+    }
+  }
+
+
+  /**
    * 今日凌晨 毫秒
    *
    * @return