Browse Source

主页增加当天预测最大、最小风速,最高、最低温度显示功能

songhaodong 2 years ago
parent
commit
642a87b7e0

+ 30 - 1
ipfcst/ipfcst-reportquery/src/main/frontend/views/datav/index.vue

@@ -7,6 +7,11 @@
           <div style="text-align: center">
             <span class="elname">{{ this.elName }}</span>
           </div>
+          <div style="text-align: center; padding-left: 40px; font-size: 14px;">
+            <dv-border-box-8 :color="['#0c71d4']" style="height: 30px;line-height: 30px; text-align:center; border-radius: 10px; color: white; padding: 2px;">
+              最大风速:{{maxWind}}&nbsp;最小风速:{{minWind}}&nbsp;最高气温:{{maxT}}&nbsp;最低气温:{{minT}}
+            </dv-border-box-8>
+          </div>
         </el-col>
         <el-col :span="3.5">
           <div style="display: flex;justify-content: space-around;padding-top: 2.5%">
@@ -298,6 +303,7 @@
       qrtimer: '',
       entimer: '',
       test: '',
+      boom: false,
       equipmentInfoList: [],
       equipmentDataTypeList: [],
       summaryAudioUrl: '/audio/gjy.mp3', // 音频地址,调用接口获取
@@ -332,7 +338,11 @@
       isAbnormalInfo: '',
       //通道、上报对象日志标识
       tunnelLogFlag: false,
-      objectLogFlag: false
+      objectLogFlag: false,
+      maxWind: '',
+      minWind: '',
+      maxT: '',
+      minT: '',
     }
   },
   destroyed() {
@@ -346,6 +356,8 @@
     this.init()
     this.getEl()
     this.test = setInterval(this.init,60*1000)
+    this.boom = setInterval(this.yesOrNoBoom,1000 * 60 * 5)
+    this.windInfo()
   },
   methods: {
     changeConsole(){
@@ -613,6 +625,23 @@
         that.$refs.mySummaryAudio.pause()
         that.summaryAudioStatus = 'pause'
       }
+    },
+    yesOrNoBoom(){
+      //间隔整十五分钟向后台发送一次请求
+      this.$axios.get('/dashboard/yesOrNoBoom').then((res) => {
+        if(res.data){
+          this.summaryAudioClick()
+        }
+      })
+    },
+    windInfo(){
+      this.$axios.get('/dashboard/getWindInfo').then((res) => {
+        console.log(res.data.maxWind + "=======================");
+        this.maxWind = res.data.maxWind
+        this.minWind = res.data.minWind
+        this.maxT = res.data.maxT
+        this.minT = res.data.minT
+      })
     }
   }
 }

+ 12 - 0
ipfcst/ipfcst-reportquery/src/main/java/com/jiayue/ipfcst/controller/DashboardController.java

@@ -5,7 +5,9 @@ import com.jiayue.ipfcst.common.data.constant.enums.ChannelStatusEnum;
 import com.jiayue.ipfcst.common.data.constant.enums.FileStatusEnum;
 import com.jiayue.ipfcst.common.data.constant.enums.FileTypeEnum;
 import com.jiayue.ipfcst.common.data.entity.*;
+import com.jiayue.ipfcst.common.data.repository.PowerStationStatusDataRepository;
 import com.jiayue.ipfcst.service.DashboardService;
+import com.sun.org.apache.xpath.internal.operations.Bool;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
@@ -241,4 +243,14 @@ public class DashboardController {
   public ResponseVO getById(@PathVariable("sysKey") String sysKey) {
     return ResponseVO.success(dashboardService.getParameterBySysKey(sysKey));
   }
+
+  @GetMapping(value = "/yesOrNoBoom")
+  public ResponseVO yesOrNoBoom(){
+    return ResponseVO.success(dashboardService.getYesOrNoBoom());
+  }
+
+  @GetMapping(value = "/getWindInfo")
+  public ResponseVO getWindInfo(){
+    return ResponseVO.success(dashboardService.getWindInfo());
+  }
 }

+ 107 - 1
ipfcst/ipfcst-reportquery/src/main/java/com/jiayue/ipfcst/service/DashboardService.java

@@ -1,5 +1,6 @@
 package com.jiayue.ipfcst.service;
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.http.HttpRequest;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
@@ -42,6 +43,7 @@ import java.math.BigDecimal;
 import java.net.HttpURLConnection;
 import java.text.NumberFormat;
 import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -110,12 +112,15 @@ public class DashboardService extends BaseService {
   private final FileParseTunnelInfoRepository fileParseTunnelInfoRepository;
 
   private final ElectricFieldRepository electricFieldRepository;
+
   private final SysParameterRepository sysParameterRepository;
 
+  private final NwpRepository nwpRepository;
+
   @Autowired
   private Map<String, IUploadFileRuleService> uploadFileRuleServiceMap;
 
-  public DashboardService(UploadObjectRepository uploadObjectRepository, UploadFileChannelRepository uploadFileChannelRepository, UploadFileLogRepository uploadFileLogRepository, WeatherStationInfoRepository weatherStationInfoRepository, WindTowerInfoRepository windTowerInfoRepository, FileAnalysisRecordRepository fileAnalysisRecordRepository, ProtocolGatherDataPointRepository protocolGatherDataPointRepository, WeatherStationStatusDataRepository weatherStationStatusDataRepository, WindTowerStatusDataRepository windTowerStatusDataRepository, Gather104TcpTunnelRepository gather104TcpTunnelRepository, GatherCdtRtuTunnelRepository gatherCdtRtuTunnelRepository, GatherModbusRtuTunnelRepository gatherModbusRtuTunnelRepository, GatherModbusRtuWithTcpServerTunnelRepository gatherModbusRtuWithTcpServerTunnelRepository, GatherModbusTcpTunnelRepository gatherModbusTcpTunnelRepository, Sender104TcpTunnelRepository sender104TcpTunnelRepository, SenderCdtRtuTunnelRepository senderCdtRtuTunnelRepository, SenderModbusRtuTunnelRepository senderModbusRtuTunnelRepository, SenderModbusTcpTunnelRepository senderModbusTcpTunnelRepository, ForecastPowerUltraShortTermHisRepository forecastPowerUltraShortTermHisRepository, ForecastPowerShortTermHisRepository forecastPowerShortTermHisRepository, PowerStationStatusDataRepository powerStationStatusDataRepository, ChannelDisconLogRepository channelDisconLogRepository, PowerLimitPlanSignRepository powerLimitPlanSignRepository, ChannelAlarmInfoRepository channelAlarmInfoRepository, QuartzRepository quartzRepository, FileParseTunnelInfoRepository fileParseTunnelInfoRepository, ElectricFieldRepository electricFieldRepository, SysParameterRepository sysParameterRepository) {
+  public DashboardService(UploadObjectRepository uploadObjectRepository, UploadFileChannelRepository uploadFileChannelRepository, UploadFileLogRepository uploadFileLogRepository, WeatherStationInfoRepository weatherStationInfoRepository, WindTowerInfoRepository windTowerInfoRepository, FileAnalysisRecordRepository fileAnalysisRecordRepository, ProtocolGatherDataPointRepository protocolGatherDataPointRepository, WeatherStationStatusDataRepository weatherStationStatusDataRepository, WindTowerStatusDataRepository windTowerStatusDataRepository, Gather104TcpTunnelRepository gather104TcpTunnelRepository, GatherCdtRtuTunnelRepository gatherCdtRtuTunnelRepository, GatherModbusRtuTunnelRepository gatherModbusRtuTunnelRepository, GatherModbusRtuWithTcpServerTunnelRepository gatherModbusRtuWithTcpServerTunnelRepository, GatherModbusTcpTunnelRepository gatherModbusTcpTunnelRepository, Sender104TcpTunnelRepository sender104TcpTunnelRepository, SenderCdtRtuTunnelRepository senderCdtRtuTunnelRepository, SenderModbusRtuTunnelRepository senderModbusRtuTunnelRepository, SenderModbusTcpTunnelRepository senderModbusTcpTunnelRepository, ForecastPowerUltraShortTermHisRepository forecastPowerUltraShortTermHisRepository, ForecastPowerShortTermHisRepository forecastPowerShortTermHisRepository, PowerStationStatusDataRepository powerStationStatusDataRepository, ChannelDisconLogRepository channelDisconLogRepository, PowerLimitPlanSignRepository powerLimitPlanSignRepository, ChannelAlarmInfoRepository channelAlarmInfoRepository, QuartzRepository quartzRepository, FileParseTunnelInfoRepository fileParseTunnelInfoRepository, ElectricFieldRepository electricFieldRepository, SysParameterRepository sysParameterRepository, NwpRepository nwpRepository) {
     this.uploadObjectRepository = uploadObjectRepository;
     this.uploadFileChannelRepository = uploadFileChannelRepository;
     this.uploadFileLogRepository = uploadFileLogRepository;
@@ -144,6 +149,7 @@ public class DashboardService extends BaseService {
     this.fileParseTunnelInfoRepository = fileParseTunnelInfoRepository;
     this.electricFieldRepository = electricFieldRepository;
     this.sysParameterRepository = sysParameterRepository;
+    this.nwpRepository = nwpRepository;
   }
 
   /**
@@ -1259,4 +1265,104 @@ public class DashboardService extends BaseService {
     SysParameter sysParameter = sysParameterRepository.findBySysKeyEquals(sysKey);
     return sysParameter;
   }
+
+  /**
+   * 预测值偏差过大报警提示
+   *
+   * @return
+   */
+  public Boolean getYesOrNoBoom(){
+    Boolean boom = false;
+    Date sysDate = new Date();
+    SimpleDateFormat sdf = new SimpleDateFormat("mm");
+    Calendar calendar = Calendar.getInstance();
+    calendar.setTime(sysDate);
+    int minutes = calendar.get(Calendar.MINUTE); // 分
+    calendar.set(Calendar.SECOND,00);
+    if(minutes > 00 && minutes <= 15){
+      calendar.set(Calendar.MINUTE,00);
+    }else if(minutes > 15 && minutes <= 30){
+      calendar.set(Calendar.MINUTE,15);
+    }else if(minutes > 30 && minutes <= 45){
+      calendar.set(Calendar.MINUTE,30);
+    }else if(minutes > 45 && minutes <= 59){
+      calendar.set(Calendar.MINUTE,45);
+    }
+    PowerStationStatusData powerStationStatusData = powerStationStatusDataRepository.findByTime(calendar.getTime());
+    ForecastPowerShortTermHis forecastPowerShortTermHis = forecastPowerShortTermHisRepository.findByGenDate(calendar.getTime());
+
+    BigDecimal realValue = powerStationStatusData.getRealValue();
+    BigDecimal ableValue = forecastPowerShortTermHis.getAbleValue();
+
+    float abs;
+    if(realValue.compareTo(ableValue) > 0){
+      abs = Math.abs(ableValue.subtract(realValue).divide(realValue).floatValue());
+    }else{
+      abs = ableValue.subtract(realValue).divide(realValue).floatValue();
+    }
+    if(abs > 20){
+      boom = true;
+    }
+    return boom;
+  }
+
+  /**
+   * 最大、最小风速,最高、最低温度
+   *
+   * @return
+   */
+  public Map<String,String> getWindInfo(){
+    Map<String, String> map = new HashMap<>();
+    Date date = new Date();
+    //一天的开始,结果:2017-03-01 00:00:00
+    Date beginOfDay = DateUtil.beginOfDay(date);
+    //一天的结束,结果:2017-03-01 23:59:59
+    Date endOfDay = DateUtil.endOfDay(date);
+    // 指定层高
+    String wind_hight = super.getSysParameter("WIND_HIGHT", "70");
+
+    List<Nwp> byPreTimeBetween = nwpRepository.findByPreTimeBetween(beginOfDay.getTime(), endOfDay.getTime());
+
+    String maxWind = "无数据";
+    String minWind = "无数据";
+    String maxT = "无数据";
+    String minT = "无数据";
+
+    if(byPreTimeBetween.size() > 0){
+      if(wind_hight.equals("10")){
+        maxWind = String.valueOf(byPreTimeBetween.stream().map(Nwp::getWs10).collect(Collectors.reducing(BigDecimal::max)).get());
+        minWind = String.valueOf(byPreTimeBetween.stream().filter(n->n.getWs10().compareTo(new BigDecimal(-99))!=0).map(Nwp::getWs10).collect(Collectors.reducing(BigDecimal::min)).get());
+      }else if(wind_hight.equals("30")){
+        maxWind = String.valueOf(byPreTimeBetween.stream().map(Nwp::getWs30).collect(Collectors.reducing(BigDecimal::max)).get());
+        minWind = String.valueOf(byPreTimeBetween.stream().filter(n->n.getWs30().compareTo(new BigDecimal(-99))!=0).map(Nwp::getWs30).collect(Collectors.reducing(BigDecimal::min)).get());
+      }else if(wind_hight.equals("50")){
+        maxWind = String.valueOf(byPreTimeBetween.stream().map(Nwp::getWs50).collect(Collectors.reducing(BigDecimal::max)).get());
+        minWind = String.valueOf(byPreTimeBetween.stream().filter(n->n.getWs50().compareTo(new BigDecimal(-99))!=0).map(Nwp::getWs50).collect(Collectors.reducing(BigDecimal::min)).get());
+      }else if(wind_hight.equals("70")){
+        maxWind = String.valueOf(byPreTimeBetween.stream().map(Nwp::getWs70).collect(Collectors.reducing(BigDecimal::max)).get());
+        minWind = String.valueOf(byPreTimeBetween.stream().filter(n->n.getWs70().compareTo(new BigDecimal(-99))!=0).map(Nwp::getWs70).collect(Collectors.reducing(BigDecimal::min)).get());
+      }else if(wind_hight.equals("80")){
+        maxWind = String.valueOf(byPreTimeBetween.stream().map(Nwp::getWs80).collect(Collectors.reducing(BigDecimal::max)).get());
+        minWind = String.valueOf(byPreTimeBetween.stream().filter(n->n.getWs80().compareTo(new BigDecimal(-99))!=0).map(Nwp::getWs80).collect(Collectors.reducing(BigDecimal::min)).get());
+      }else if(wind_hight.equals("90")){
+        maxWind = String.valueOf(byPreTimeBetween.stream().map(Nwp::getWs90).collect(Collectors.reducing(BigDecimal::max)).get());
+        minWind = String.valueOf(byPreTimeBetween.stream().filter(n->n.getWs90().compareTo(new BigDecimal(-99))!=0).map(Nwp::getWs90).collect(Collectors.reducing(BigDecimal::min)).get());
+      }else if(wind_hight.equals("100")){
+        maxWind = String.valueOf(byPreTimeBetween.stream().map(Nwp::getWs100).collect(Collectors.reducing(BigDecimal::max)).get());
+        minWind = String.valueOf(byPreTimeBetween.stream().filter(n->n.getWs100().compareTo(new BigDecimal(-99))!=0).map(Nwp::getWs100).collect(Collectors.reducing(BigDecimal::min)).get());
+      }else if(wind_hight.equals("170")){
+        maxWind = String.valueOf(byPreTimeBetween.stream().map(Nwp::getWs170).collect(Collectors.reducing(BigDecimal::max)).get());
+        minWind = String.valueOf(byPreTimeBetween.stream().filter(n->n.getWs170().compareTo(new BigDecimal(-99))!=0).map(Nwp::getWs170).collect(Collectors.reducing(BigDecimal::min)).get());
+      }
+      maxT = String.valueOf(byPreTimeBetween.stream().map(Nwp::getT).collect(Collectors.reducing(BigDecimal::max)).get());
+      minT = String.valueOf(byPreTimeBetween.stream().filter(n->n.getT().compareTo(new BigDecimal(-99))!=0).map(Nwp::getT).collect(Collectors.reducing(BigDecimal::min)).get());
+    }
+
+    map.put("maxWind",maxWind);
+    map.put("minWind",minWind);
+    map.put("maxT",maxT);
+    map.put("minT",minT);
+    return map;
+
+  }
 }