Преглед на файлове

恶劣天气等功能添加

songhaodong преди 3 години
родител
ревизия
0247f83f39
променени са 15 файла, в които са добавени 420 реда и са изтрити 38 реда
  1. 2 2
      ipfcst/ipfcst-common/ipfcst-common-data/src/main/java/com/jiayue/ipfcst/common/data/entity/CutOutSpeedSpecifyInfo.java
  2. 4 1
      ipfcst/ipfcst-common/ipfcst-common-data/src/main/java/com/jiayue/ipfcst/common/data/entity/FanUnitInfo.java
  3. 19 0
      ipfcst/ipfcst-common/ipfcst-common-data/src/main/java/com/jiayue/ipfcst/common/data/entity/IcingShutdown.java
  4. 28 0
      ipfcst/ipfcst-common/ipfcst-common-data/src/main/java/com/jiayue/ipfcst/common/data/entity/ModifyShorterData.java
  5. 6 0
      ipfcst/ipfcst-common/ipfcst-common-data/src/main/java/com/jiayue/ipfcst/common/data/entity/Nwp.java
  6. 1 1
      ipfcst/ipfcst-common/ipfcst-common-data/src/main/java/com/jiayue/ipfcst/common/data/entity/WindSpeedPointInfo.java
  7. 16 0
      ipfcst/ipfcst-common/ipfcst-common-data/src/main/java/com/jiayue/ipfcst/common/data/repository/ModifyShorterDataRepository.java
  8. 2 0
      ipfcst/ipfcst-console/src/main/resources/sql/t_init_job_class.sql
  9. 1 1
      ipfcst/ipfcst-reportquery/src/main/frontend/views/realTimeQuery/nwp/chartsWind/index.vue
  10. 42 0
      ipfcst/ipfcst-reportquery/src/main/java/com/jiayue/ipfcst/controller/ModifyShorterDataController.java
  11. 27 0
      ipfcst/ipfcst-reportquery/src/main/java/com/jiayue/ipfcst/cronJob/WestWindUpJob.java
  12. 101 0
      ipfcst/ipfcst-reportquery/src/main/java/com/jiayue/ipfcst/service/ModifyShorterDataService.java
  13. 10 12
      ipfcst/ipfcst-reportquery/src/main/java/com/jiayue/ipfcst/service/NwpService.java
  14. 150 0
      ipfcst/ipfcst-reportquery/src/main/java/com/jiayue/ipfcst/service/WindSpeedLawService.java
  15. 11 21
      ipfcst/ipfcst-reportquery/src/main/java/com/jiayue/ipfcst/service/WindSpeedPointInfoService.java

+ 2 - 2
ipfcst/ipfcst-common/ipfcst-common-data/src/main/java/com/jiayue/ipfcst/common/data/entity/CutOutSpeedSpecifyInfo.java

@@ -19,7 +19,7 @@ public class CutOutSpeedSpecifyInfo {
      */
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "id")
-    private int id;
+    private Integer id;
     //发电风速下限
     @Column
     private float lowerWindSpeedLimit;
@@ -31,6 +31,6 @@ public class CutOutSpeedSpecifyInfo {
     private float powerGeneration;
     //所属机组
     @Column
-    private int UnitBelongs;
+    private Integer fanId;
 
 }

+ 4 - 1
ipfcst/ipfcst-common/ipfcst-common-data/src/main/java/com/jiayue/ipfcst/common/data/entity/FanUnitInfo.java

@@ -21,7 +21,10 @@ public class FanUnitInfo {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "id")
     @Column
-    private int id;
+    private Integer id;
+    // 机组编号
+    @Column
+    private Integer fanId;
     //机组品牌名称
     @Column
     private String fanName;

+ 19 - 0
ipfcst/ipfcst-common/ipfcst-common-data/src/main/java/com/jiayue/ipfcst/common/data/entity/IcingShutdown.java

@@ -0,0 +1,19 @@
+package com.jiayue.ipfcst.common.data.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author shd
+ * @since 2022-07-05
+ */
+@Getter
+@Setter
+public class IcingShutdown {
+    // 停机开始时间
+    private long startTime;
+    // 停机结束时间
+    private long endTime;
+    // 停机个数
+    private Integer shutDownNumber;
+}

+ 28 - 0
ipfcst/ipfcst-common/ipfcst-common-data/src/main/java/com/jiayue/ipfcst/common/data/entity/ModifyShorterData.java

@@ -0,0 +1,28 @@
+package com.jiayue.ipfcst.common.data.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import javax.persistence.*;
+import java.util.Date;
+
+/**
+ * @author shd
+ * @since 2022-06-15
+ */
+@Data
+@Entity
+public class ModifyShorterData {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "id")
+    private Integer id;
+    @Column
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
+    private Date startTime;
+    @Column
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
+    private Date endTime;
+    @Column
+    private Float modulus;
+
+}

+ 6 - 0
ipfcst/ipfcst-common/ipfcst-common-data/src/main/java/com/jiayue/ipfcst/common/data/entity/Nwp.java

@@ -203,4 +203,10 @@ public class Nwp implements Serializable {
     @Digits(integer = 10, fraction = 2)
     private BigDecimal wd170 = new BigDecimal(-99);
 
+    /**
+     * 总降水强度
+     */
+    @Column
+    @Digits(integer = 10, fraction = 4)
+    private BigDecimal tpr = new BigDecimal(-99);
 }

+ 1 - 1
ipfcst/ipfcst-common/ipfcst-common-data/src/main/java/com/jiayue/ipfcst/common/data/entity/WindSpeedPointInfo.java

@@ -17,7 +17,7 @@ public class WindSpeedPointInfo {
     //ID
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "id")
-    private int id;
+    private Integer id;
     //风机编号
     @Column
     private String fanNumber;

+ 16 - 0
ipfcst/ipfcst-common/ipfcst-common-data/src/main/java/com/jiayue/ipfcst/common/data/repository/ModifyShorterDataRepository.java

@@ -0,0 +1,16 @@
+package com.jiayue.ipfcst.common.data.repository;
+
+import com.jiayue.ipfcst.common.data.entity.ModifyShorterData;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author shd
+ * @since 2022-06-15
+ */
+public interface ModifyShorterDataRepository extends JpaRepository<ModifyShorterData, Integer>, JpaSpecificationExecutor<ModifyShorterData> {
+    List<ModifyShorterData> findByStartTimeAfter(Date date);
+}

+ 2 - 0
ipfcst/ipfcst-console/src/main/resources/sql/t_init_job_class.sql

@@ -255,3 +255,5 @@ INSERT INTO t_init_job_class  (C_JOB_CLASS_NAME, C_JOB_CLASS_PATH, C_JOB_CLASS_T
 
 INSERT INTO t_init_job_class  (C_JOB_CLASS_NAME, C_JOB_CLASS_PATH, C_JOB_CLASS_TYPE, C_STATION_CODE) select '冀北短期', 'com.jiayue.ipfcst.fileupload.job.UploadFileE206Job', 'fileCreate', '' from dual where not exists (select C_JOB_CLASS_NAME from t_init_job_class where C_JOB_CLASS_NAME = '冀北短期') ;
 INSERT INTO t_init_job_class  (C_JOB_CLASS_NAME, C_JOB_CLASS_PATH, C_JOB_CLASS_TYPE, C_STATION_CODE) select '冀北气象', 'com.jiayue.ipfcst.fileupload.job.UploadFileE207Job', 'fileCreate', '' from dual where not exists (select C_JOB_CLASS_NAME from t_init_job_class where C_JOB_CLASS_NAME = '冀北气象') ;
+
+INSERT INTO t_init_job_class  (C_JOB_CLASS_NAME, C_JOB_CLASS_PATH, C_JOB_CLASS_TYPE, C_STATION_CODE) select '西南风增强', 'com.jiayue.ipfcst.fileupload.job.WestWindUpJob', 'dataCreate', '' from dual where not exists (select C_JOB_CLASS_NAME from t_init_job_class where C_JOB_CLASS_NAME = '西南风增强') ;

+ 1 - 1
ipfcst/ipfcst-reportquery/src/main/frontend/views/realTimeQuery/nwp/chartsWind/index.vue

@@ -74,7 +74,7 @@
         let wdInst100 = windTowerStatusDataDatas.wdInst100Integers;
         let wdInst170 = windTowerStatusDataDatas.wdInst170Integers;
         //风向 16方位
-        let nameList = ['N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW'];
+        let nameList = ["北", "北北东", "北东", "东北东", "东", "东南东", "南东", "南南东", "南", "南南西", "南西", "西南西", "西", "西北西", "北西", "北北西"]
         //数据
         const wd10s = [];
         const wd30s = [];

+ 42 - 0
ipfcst/ipfcst-reportquery/src/main/java/com/jiayue/ipfcst/controller/ModifyShorterDataController.java

@@ -0,0 +1,42 @@
+package com.jiayue.ipfcst.controller;
+
+import com.jiayue.ipfcst.common.core.web.vo.ResponseVO;
+import com.jiayue.ipfcst.common.data.entity.ModifyShorterData;
+import com.jiayue.ipfcst.service.ModifyShorterDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author shd
+ * @since 2022-06-15
+ */
+@RestController
+@RequestMapping("/modifyShorterData")
+public class ModifyShorterDataController {
+  @Autowired
+  private ModifyShorterDataService modifyShorterDataService;
+
+  @PostMapping
+  public ResponseVO add(@RequestBody ModifyShorterData modifyShorterData){
+    modifyShorterDataService.add(modifyShorterData);
+    return ResponseVO.success(1);
+  }
+
+  @DeleteMapping
+  public ResponseVO delete(@RequestBody ModifyShorterData modifyShorterData){
+    modifyShorterDataService.delete(modifyShorterData);
+    return ResponseVO.success(1);
+  }
+
+  @PutMapping
+  public ResponseVO update(@RequestBody ModifyShorterData modifyShorterData){
+    modifyShorterDataService.update(modifyShorterData);
+    return ResponseVO.success(1);
+  }
+
+  @GetMapping(value = "/{page}/{size}")
+  public ResponseVO get(@PathVariable("page") Integer page,
+                        @PathVariable("size") Integer size){
+    return ResponseVO.success(modifyShorterDataService.get(page,size));
+  }
+}

+ 27 - 0
ipfcst/ipfcst-reportquery/src/main/java/com/jiayue/ipfcst/cronJob/WestWindUpJob.java

@@ -0,0 +1,27 @@
+package com.jiayue.ipfcst.cronJob;
+
+import com.jiayue.ipfcst.common.data.job.BaseJob;
+import com.jiayue.ipfcst.service.WindSpeedLawService;
+import lombok.extern.slf4j.Slf4j;
+import org.quartz.JobDataMap;
+import org.springframework.beans.factory.annotation.Autowired;
+
+@Slf4j
+public class WestWindUpJob extends BaseJob {
+
+  @Autowired
+  WindSpeedLawService windSpeedLawService;
+
+  @Override
+  public boolean execute(JobDataMap jobDataMap) {
+    log.info("开始执行强北风持续过后西南风增强定时任务");
+    try {
+      windSpeedLawService.beginWestWindUp();
+    }catch (Exception e){
+      log.error("执行强北风持续过后西南风增强定时任务失败:", e);
+    }
+    log.info("执行强北风持续过后西南风增强定时任务结束");
+    return true;
+  }
+
+}

+ 101 - 0
ipfcst/ipfcst-reportquery/src/main/java/com/jiayue/ipfcst/service/ModifyShorterDataService.java

@@ -0,0 +1,101 @@
+package com.jiayue.ipfcst.service;
+
+import com.jiayue.ipfcst.common.data.entity.FanUnitInfo;
+import com.jiayue.ipfcst.common.data.entity.ModifyShorterData;
+import com.jiayue.ipfcst.common.data.repository.ModifyShorterDataRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.criteria.Predicate;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author shd
+ * @since 2022-06-15
+ */
+@Service
+public class ModifyShorterDataService {
+
+  private ModifyShorterDataRepository modifyShorterDataRepository;
+
+  @Autowired
+  public ModifyShorterDataService(ModifyShorterDataRepository modifyShorterDataRepository){
+    this.modifyShorterDataRepository = modifyShorterDataRepository;
+  }
+
+  /**
+   * 新增
+   *
+   * @param modifyShorterData
+   */
+  public void add(ModifyShorterData modifyShorterData){
+    this.modifyShorterDataRepository.save(modifyShorterData);
+  }
+
+  /**
+   * 删除
+   *
+   * @param modifyShorterData
+   */
+  public void delete(ModifyShorterData modifyShorterData){
+    this.modifyShorterDataRepository.deleteById(modifyShorterData.getId());
+  }
+
+  /**
+   * 修改
+   *
+   * @param modifyShorterData
+   */
+  public void update(ModifyShorterData modifyShorterData){
+    this.modifyShorterDataRepository.save(modifyShorterData);
+  }
+
+  /**
+   * (分页)
+   */
+  public Map<String, Object> get(Integer page, Integer size) {
+    Map<String, Object> map = new HashMap<>();
+    Specification<ModifyShorterData> specification = this.Specification();
+    Pageable pageable = PageRequest.of(page - 1, size);
+    Page ModifyShorterDatas = modifyShorterDataRepository.findAll(specification, pageable);
+    List<FanUnitInfo> wList = ModifyShorterDatas.getContent();
+    map.put("content", wList);
+    map.put("count", ModifyShorterDatas.getTotalElements());
+    return map;
+  }
+
+
+
+
+  /**
+   * 查询条件 yh
+   *
+   * @return 过滤条件
+   */
+  Specification<ModifyShorterData> Specification() {
+    return (Specification<ModifyShorterData>) (root, criteriaQuery, cb) -> {
+      List<Predicate> predicates = new ArrayList<>();
+//      if (startTime!=null) {
+//        //大于或等于传入时间
+//        predicates.add(cb.greaterThanOrEqualTo(root.get("time").as(Date.class), startTime));
+//      }
+//      if (endTime!=null) {
+//        //小于传入时间
+//        predicates.add(cb.lessThan(root.get("time").as(Date.class), endTime));
+//      }
+//      if(no!=null){
+//        predicates.add(cb.equal(root.get("equipmentNo").as(Integer.class), no));
+//      }
+      //添加排序的功能
+      return cb.and(predicates.toArray(new Predicate[predicates.size()]));
+
+    };
+  }
+}

+ 10 - 12
ipfcst/ipfcst-reportquery/src/main/java/com/jiayue/ipfcst/service/NwpService.java

@@ -187,6 +187,7 @@ public class NwpService extends BaseService {
     Map<String,Object> map = new HashMap<>();
     List<WindTowerStatusData> checkList = new ArrayList<>();
     Map<String,Object> datas = new LinkedHashMap<>();
+    // 测风塔数据
     List<WindTowerStatusData> list = windTowerStatusDataRepository.findByTimeBetweenOrderByTimeAsc(new Date(startTime), new Date(endTime));
     long startTimeLong  = startTime;
     long endTimeLong  = endTime;
@@ -204,9 +205,10 @@ public class NwpService extends BaseService {
         checkList.add(new WindTowerStatusData());
       }
     }
+
     this.defaultRealReplace(checkList);
-    Map<String, String> map1 = new HashMap<>();
 
+    Map<String, String> map1 = new HashMap<>();
     List<BigDecimal> ws10Collect = checkList.stream().map(WindTowerStatusData::getWsInst10).collect(Collectors.toList());
     List<BigDecimal> ws30Collect = checkList.stream().map(WindTowerStatusData::getWsInst30).collect(Collectors.toList());
     List<BigDecimal> ws50Collect = checkList.stream().map(WindTowerStatusData::getWsInst50).collect(Collectors.toList());
@@ -257,14 +259,10 @@ public class NwpService extends BaseService {
     List<Nwp> nwpCheckList = new ArrayList<>();
     nwpList = findByTimeBetween(startTime, endTime);
 
-    List<WindTowerStatusData> windTowerStatusDataList = new ArrayList<>();
     Map<String,Object> windTowerStatusDataDatas = new LinkedHashMap<>();
     List<WindTowerStatusData> windTowerStatusDataCheckList = new ArrayList<>();
-    //todo 排序可以在查询中做
-    windTowerStatusDataList = windTowerStatusDataRepository.findByTimeBetween(new Date(startTime), new Date(endTime));
-    windTowerStatusDataList.sort(Comparator.comparing(WindTowerStatusData::getTime));
-
-    //todo 页面传参直接限制为整15分是否可以解决这块代码?
+    // 风机数据
+    List<WindTowerStatusData> windTowerStatusDataList = windTowerStatusDataRepository.findByTimeBetweenOrderByTimeAsc(new Date(startTime), new Date(endTime));
 
     long startTimeLong  = startTime;
     long endTimeLong  = endTime;
@@ -291,12 +289,13 @@ public class NwpService extends BaseService {
       }
 
     }
-    //TODO 此处过滤是否有意义,页面null如何显示,直接忽略断点是否可以?
+    // -99替换成null
     this.defaultReplace(nwpCheckList);
     this.defaultRealReplace(windTowerStatusDataCheckList);
 
     ElectricField electricField = this.getElectricField();
     if(electricField.getElectricFieldTypeEnum().getCode() == 1){
+      // 光伏
       List<BigDecimal> swrCollect = nwpCheckList.stream().map(Nwp::getSwr).collect(Collectors.toList());
       List<BigDecimal> diffuseRadiationCollect = nwpCheckList.stream().map(Nwp::getDiffuseRadiation).collect(Collectors.toList());
       List<BigDecimal> directRadiationCollect = nwpCheckList.stream().map(Nwp::getDirectRadiation).collect(Collectors.toList());
@@ -304,6 +303,7 @@ public class NwpService extends BaseService {
       nwpDatas.put("diffuseRadiation",diffuseRadiationCollect);
       nwpDatas.put("directRadiation",directRadiationCollect);
     }else {
+      // 风电
       List<BigDecimal> wd10 = nwpCheckList.stream().map(Nwp::getWd10).collect(Collectors.toList());
       List<BigDecimal> wd30 = nwpCheckList.stream().map(Nwp::getWd30).collect(Collectors.toList());
       List<BigDecimal> wd50 = nwpCheckList.stream().map(Nwp::getWd50).collect(Collectors.toList());
@@ -313,6 +313,7 @@ public class NwpService extends BaseService {
       List<BigDecimal> wd100 = nwpCheckList.stream().map(Nwp::getWd100).collect(Collectors.toList());
       List<BigDecimal> wd170 = nwpCheckList.stream().map(Nwp::getWd170).collect(Collectors.toList());
 
+      // 风频计算
       Integer[] wd10Integers = windFrequency(wd10);
       Integer[] wd30Integers = windFrequency(wd30);
       Integer[] wd50Integers = windFrequency(wd50);
@@ -340,6 +341,7 @@ public class NwpService extends BaseService {
       List<BigDecimal> wdInst100 = windTowerStatusDataCheckList.stream().map(WindTowerStatusData::getWdInst100).collect(Collectors.toList());
       List<BigDecimal> wdInst170 = windTowerStatusDataCheckList.stream().map(WindTowerStatusData::getWdInst110).collect(Collectors.toList());
 
+      // 风频计算
       Integer[] wdInst10Integers = windFrequency(wdInst10);
       Integer[] wdInst30Integers = windFrequency(wdInst30);
       Integer[] wdInst50Integers = windFrequency(wdInst50);
@@ -360,12 +362,8 @@ public class NwpService extends BaseService {
 
     }
 
-    //todo 页面显示标题?是否可转为中文展示
-    String[] nameList = {"北", "北北东", "北东", "东北东", "东", "东南东", "南东", "南南东", "南", "南南西", "南西", "西南西", "西", "西北西", "北西", "北北西"};
-
     map.put("nwpDatas", nwpDatas);
     map.put("windTowerStatusDataDatas", windTowerStatusDataDatas);
-    map.put("nameList", nameList);
 
     return map;
   }

+ 150 - 0
ipfcst/ipfcst-reportquery/src/main/java/com/jiayue/ipfcst/service/WindSpeedLawService.java

@@ -0,0 +1,150 @@
+package com.jiayue.ipfcst.service;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import com.jiayue.ipfcst.common.core.web.vo.ResponseVO;
+import com.jiayue.ipfcst.common.data.entity.Nwp;
+import com.jiayue.ipfcst.common.data.repository.NwpRepository;
+import com.jiayue.ipfcst.common.data.service.BaseService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author shd
+ * @since 2022-06-28
+ */
+@Service
+@Slf4j
+public class WindSpeedLawService extends BaseService {
+
+  private NwpRepository nwpRepository;
+
+  @Autowired
+  public WindSpeedLawService(NwpRepository nwpRepository){
+    this.nwpRepository = nwpRepository;
+  }
+
+  public void beginWestWindUp(){
+    // 系统日期
+    Date systemTime = new Date();
+
+    // 今天开始
+    long beginOfDay = DateUtil.beginOfDay(systemTime).getTime();
+    // 今天结束
+    long endOfDay = DateUtil.endOfDay(systemTime).getTime() + 1;
+    // 获取今天nwp
+    List<Nwp> todayNwp = nwpRepository.findByPreTimeBetween(beginOfDay, endOfDay);
+    // 80米风向是西南风的点位预测时间
+    long preTime = 0l;
+
+    // 修改多长时间的西南风风速
+    Integer update_how_long_west_wind = Integer.parseInt(super.getSysParameter("UPDATE_HOW_LONG_WEST_WIND", "6"));
+
+    // 西南风list
+    List<Nwp> xnNwp = todayNwp.stream().filter(nwp -> nwp.getWd80().compareTo(new BigDecimal(202.5)) > -1 && nwp.getWd80().compareTo(new BigDecimal(247.5)) < -1).collect(Collectors.toList());
+
+    // 格式化日志时间
+    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
+
+    // 遍历西南风list
+    for (int i = 0; i < xnNwp.size(); i++) {
+      Nwp nwp = xnNwp.get(i);
+      // 判断当前风速前是否满足十小时强北风
+      Boolean isNorth = decideStrongNorthWind(nwp.getPreTime());
+
+      // 是连续强北风
+      if(isNorth){
+        // 执行西南风增强
+        Boolean aBoolean = westWindUp(xnNwp, nwp, update_how_long_west_wind);
+        log.info("时间:"+simpleDateFormat.format(new Date())+"->"+"西南风是否增强成功:" + aBoolean);
+      }
+      // 从计算结束的nwp开始
+      i= i + update_how_long_west_wind * 4;
+    }
+  }
+
+
+  /**
+   * 判断是不是连续强北风
+   *
+   * @param preTime
+   * @return
+   */
+  public Boolean decideStrongNorthWind(Long preTime){
+    Boolean b = new Boolean(false);
+    // 强北风出现次数
+    Integer strongNorthWind = 0;
+    // 强北风中断次数
+    Integer strongNorthWindCut = 0;
+    // 允许不是北风的差值
+    Integer long_north_always = Integer.parseInt(super.getSysParameter("LONG_NORTH_ALWAYS", "5"));
+    // 强北风持续时间区间
+    Integer long_north_wing_start = Integer.parseInt(super.getSysParameter("LONG_NORTH_WING_START", "10"));
+    // 获取西南风时间 的前 long_north_wing_start 小时的nwp
+    List<Nwp> lastNHourList = nwpRepository.findByPreTimeBetween(DateUtil.offsetHour(DateUtil.date(preTime), -long_north_wing_start).getTime(), preTime);
+
+    for(Nwp nwp: lastNHourList){
+      // 如果是北风
+      if(nwp.getWd80().compareTo(BigDecimal.ZERO) > -1 && nwp.getWd80().compareTo(new BigDecimal(45)) < -1  || nwp.getWd80().compareTo(new BigDecimal(315)) > -1 && nwp.getWd80().compareTo(new BigDecimal(360)) < -1 ){
+        //如果风速大于10 则是强北风
+        if(nwp.getWs80().compareTo(new BigDecimal(10)) > -1){
+          // 统计强北风出现次数
+          strongNorthWind += 1;
+        }
+      }else {
+        // 统计强北风中断次数
+        strongNorthWindCut += 1;
+        // 如果中断次数大于允许次数则把强北风出现次数置为0
+        if(strongNorthWindCut > long_north_always){
+          strongNorthWind = 0;
+        }
+      }
+    }
+
+    // 如果强北风出现次数 大于 前long_north_wing_start小时的总点位数 - 允许差值
+    if(strongNorthWind > long_north_wing_start * 4 - long_north_always){
+      b = true;
+    }
+
+    return b;
+  }
+
+  /**
+   * 西南风风速小于10米 则乘上西南风增强系数
+   *
+   * @param nwpList
+   * @param nwp 当前nwp
+   */
+  public Boolean westWindUp(List<Nwp> nwpList, Nwp nwp, Integer update_how_long_west_wind){
+    Boolean b = false;
+    // 西南风增强系数
+    Integer west_wind_up_modulus = Integer.parseInt(super.getSysParameter("WEST_WIND_UP_MODULUS", "1.6"));
+
+    long endTime = 60 * 1000 * 60 * update_how_long_west_wind;
+    // 需要修改的时间区间nwp
+    List<Nwp> collect = nwpList.stream().filter(n -> n.getPreTime().compareTo(nwp.getPreTime()) > -1 && n.getPreTime().compareTo(nwp.getPreTime() + endTime) < -1).collect(Collectors.toList());
+
+    List<Nwp> tempNwp = new ArrayList<>();
+    for (Nwp nwp1 : collect) {
+      // 判断80风速是否大于10米
+      if(nwp1.getWs80().compareTo(new BigDecimal(10)) > -1){
+        nwp1.setWs80(nwp.getWs80().multiply(new BigDecimal(west_wind_up_modulus)));
+      }
+      tempNwp.add(nwp1);
+    }
+    List<Nwp> nwps = nwpRepository.saveAll(tempNwp);
+    if(nwps.size() > 0){
+      b = true;
+    }
+    return b;
+  }
+
+}

+ 11 - 21
ipfcst/ipfcst-reportquery/src/main/java/com/jiayue/ipfcst/service/WindSpeedPointInfoService.java

@@ -1,9 +1,7 @@
 package com.jiayue.ipfcst.service;
 
-import com.alibaba.druid.util.StringUtils;
 import com.jiayue.ipfcst.common.core.exception.BusinessException;
 import com.jiayue.ipfcst.common.data.entity.WindSpeedPointInfo;
-import com.jiayue.ipfcst.common.data.entity.WindTurbineStatusData;
 import com.jiayue.ipfcst.common.data.repository.WindSpeedPointInfoRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -13,7 +11,6 @@ import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 
 import javax.persistence.criteria.Predicate;
-import java.sql.Wrapper;
 import java.util.*;
 
 /**
@@ -107,22 +104,13 @@ public class WindSpeedPointInfoService {
 
   public Page<WindSpeedPointInfo> getBySomeConditions(Integer page, Integer size, String fanNumber,String wind,
                                                  String speed, String unitBelongs, String belong){
-    //TODO 这个map干啥的?
-    Map<String, Object> map = new HashMap<>();
     String nFanNumber = "null";
     if(!fanNumber.equals("null")){
       nFanNumber = "#"+fanNumber+"#";
     }
-
     Specification<WindSpeedPointInfo> specification = this.specificationBySomeConditions(nFanNumber, wind, speed, unitBelongs, belong);
     Pageable pageable = PageRequest.of(page - 1, size);
     Page<WindSpeedPointInfo> windSpeedPointInfos = windSpeedPointInfoRepository.findAll(specification, pageable);
-    //TODO 没用的就删掉
-//    List<WindSpeedPointInfo> windSpeedPointInfos = windSpeedPointInfoRepository.findAll(specification);
-//    List<WindSpeedPointInfo> windSpeedPointInfoList = windSpeedPointInfos.getContent();
-//    map.put("content", windSpeedPointInfos);
-//    map.put("count", windSpeedPointInfos.getTotalElements());
-//    map.put("count", windSpeedPointInfos.size());
     return windSpeedPointInfos;
   }
 
@@ -137,19 +125,25 @@ public class WindSpeedPointInfoService {
       List<Predicate> predicates = new ArrayList<>();
       //添加排序的功能
       return cb.and(predicates.toArray(new Predicate[predicates.size()]));
-
     };
   }
 
-
-  //TODO 干啥用的写明白
+  /**
+   * 查询条件
+   *
+   * @param fanNumber
+   * @param wind
+   * @param speed
+   * @param unitBelongs
+   * @param belong
+   * @return
+   */
   Specification<WindSpeedPointInfo> specificationBySomeConditions(final String fanNumber,final String wind,
                                                                   final String speed, final String unitBelongs,
                                                                   final String belong) {
     return (Specification<WindSpeedPointInfo>) (root, criteriaQuery, cb) -> {
       List<Predicate> predicates = new ArrayList<>();
 
-
       // 风机编号模糊查询
       if (!fanNumber.equals("null")) {
         predicates.add(cb.equal(root.get("fanNumber"), fanNumber));
@@ -175,11 +169,7 @@ public class WindSpeedPointInfoService {
         predicates.add(cb.equal(root.get("belong"), belong));
       }
 
-//      if (predicates.isEmpty()) {
-//        return cb.isNotNull(root.get("id"));
-//      }
-      //TODO 下面这注释对吗?
-      //添加排序的功能
+      // 添加排序的功能
       return cb.and(predicates.toArray(new Predicate[predicates.size()]));
 
     };