From d4020168658efdee89a633083cd9c14b06c4d863 Mon Sep 17 00:00:00 2001
From: zhangf <1603559716@qq.com>
Date: 星期三, 11 九月 2024 17:09:10 +0800
Subject: [PATCH] 修改消息推送时间间隔

---
 src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DataReceiveServiceImpl.java |   58 ++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 40 insertions(+), 18 deletions(-)

diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DataReceiveServiceImpl.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DataReceiveServiceImpl.java
index 6890cd6..4eb1eb3 100644
--- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DataReceiveServiceImpl.java
+++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DataReceiveServiceImpl.java
@@ -5,6 +5,7 @@
 import com.gkhy.fourierSpecialGasMonitor.commons.domain.Result;
 import com.gkhy.fourierSpecialGasMonitor.commons.enums.ForeignResultCode;
 import com.gkhy.fourierSpecialGasMonitor.commons.enums.ResultCode;
+import com.gkhy.fourierSpecialGasMonitor.commons.enums.SystemCacheKeyEnum;
 import com.gkhy.fourierSpecialGasMonitor.commons.exception.DataReceiveException;
 import com.gkhy.fourierSpecialGasMonitor.decorator.WarningThresholdUpdateEvent;
 import com.gkhy.fourierSpecialGasMonitor.entity.*;
@@ -40,10 +41,7 @@
 import java.text.MessageFormat;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.locks.ReentrantLock;
 import java.util.stream.Collectors;
 
@@ -115,8 +113,13 @@
 
     private static final String warnContentFormat = "【气体监测预警提示】{0} {1}气体浓度连续超标系统判断为{2},请相关负责人及时检查处置。";
 
+    private static final String deviceExcLogFormat = "【设备预警提示】{0} 硬件设备离线。";
+
+    private static final DateTimeFormatter deviceExcLogFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
+
     private static final DateTimeFormatter warnLogFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
 
+    private static final String[] DEVICE_EXC_RECEIVER = {"17625323889","18019908965","18899396560"};
 
     @PostConstruct
     public void init() {
@@ -168,6 +171,9 @@
         return ForeignResult.success();
     }
 
+    /**
+     * 设备预警
+     * */
     @Override
     public ForeignResult deviceMonitor(DeviceMonitorReqDTO reqDTO) {
         if (reqDTO == null)
@@ -180,7 +186,7 @@
             throw new DataReceiveException(this.getClass(), ForeignResultCode.PARAM_ERROR_NULL.getCode(),"通量数据状态不能为空");
         Boolean push = false;
         List<String> descs = new ArrayList<>();
-        if (reqDTO.getHardwareState().size() > 1){
+        if (!(reqDTO.getHardwareState().size() == 1 && reqDTO.getHardwareState().get(0) == 0)){
             push = true;
             for (int i = 0; i < reqDTO.getHardwareState().size(); i++) {
                 descs.add(HardwareStateEnum.getValue(reqDTO.getHardwareState().get(i)));
@@ -195,31 +201,45 @@
             descs.add(GasFluxStateEnum.INVERSION_FAILED_10_MINUTES_NO_DATA.getDesc());
         }
         String message = JSON.toJSONString(reqDTO);
-        //todo 暂时改为实时推送给前端
+        //暂时改为实时推送给前端
         try {
             GasDeviceExcWebsocketServer.sendInfo(message,null);
         } catch (IOException e) {
             logger.info("【警告】设备异常提醒推送>>>>>>>>>>>>>>>>>>失败");
         }
         if (push){
-            //todo 线上环境还是异常才向前端推送
-            //String message = JSON.toJSONString(reqDTO);
-            //try {
-            //    GasDeviceExcWebsocketServer.sendInfo(message,null);
-            //} catch (IOException e) {
-            //    logger.info("【警告】设备异常提醒推送>>>>>>>>>>>>>>>>>>失败");
-            //}
+            DeviceExceptionLog lastLog = deviceExceptionLogService.getLastLog();
+            LocalDateTime now = LocalDateTime.now();
+            if (lastLog == null || now.compareTo(lastLog.getTime().plusHours(1)) >= 0) {
+                Map<String, String> mesMap = new HashMap<>();
+                mesMap.put("message","数据异常,无法进行监测");
+                mesMap.put(" level","设备离线");  // todo
+                List<String> deviceExcReceiver = Arrays.asList(DEVICE_EXC_RECEIVER);
+                if (!CollectionUtils.isEmpty(deviceExcReceiver)) {
+                    List<String> distinctPhone = deviceExcReceiver.stream().distinct().collect(Collectors.toList());
+                    logger.info("【气体浓度异常短信发送】-----发送内容:" + "克拉玛依富城数据异常,无法进行监测 气体浓度连续超标,系统判断为设备离线,请相关负责人及时检查处置。"
+                            + " 发送时间: " + LocalDateTime.now()+ " 接收人手机号:" + distinctPhone);
+                    if (!org.springframework.util.StringUtils.isEmpty(smsSendEnabledStatus) && "true".equals(smsSendEnabledStatus)) {
+                        sendMessageUtil.sendMessageCheck(deviceExcReceiver.toArray(new String[deviceExcReceiver.size()]), mesMap);
+                    }
+                }
+            }
             String execInfo = JSON.toJSONString(descs);
             logger.info("【警告】设备异常,异常原因: "+ execInfo);
             DeviceExceptionLog log = new DeviceExceptionLog();
-            log.setTime(LocalDateTime.now());
+            String content  = MessageFormat.format(deviceExcLogFormat,deviceExcLogFormatter.format(now));
+            log.setContent(content);
+            log.setTime(now);
             log.setExecDesc(execInfo);
             DeviceExceptionLog save =  deviceExceptionLogService.save(log);
-            if (save == null)
+            if (save == null) {
                 logger.info("【警告】设备异常日志保存>>>>>>>>>>>>>>>>>>失败");
+            }
+
         }
         return ForeignResult.success();
     }
+
 
     private void gasFluxDataCacheAndPush(){
         LocalDateTime time = LocalDateTime.now();
@@ -254,7 +274,7 @@
 
 
     private  void execDataCountAndPush(UploadGasConcentrationReqDTO reqDto){
-        RBucket<List<GasCategory>> bucket = redissonClient.getBucket("gas_category_cache_info");
+        RBucket<List<GasCategory>> bucket = redissonClient.getBucket(SystemCacheKeyEnum.KEY_GAS_CATEGORY.getKey());
         List<GasCategory> gasCategoryCache = bucket.get();
         if (CollectionUtils.isEmpty(gasCategoryCache)){
             gasCategoryCache = gasCategoryService.list();
@@ -309,6 +329,9 @@
         }
     }
 
+    /**
+     * 气体数据--预警信息推送
+    * */
     private void warnLogGenerateAndExecPush(Integer warnThresholdEnumCode,GasCategory gasCategory,Double value){
         if (gasCategory == null)
             throw new DataReceiveException(this.getClass(), ForeignResultCode.SYSTEM_ERROR_DATABASE_FAIL.getCode(),"该气体不存在于对照表");
@@ -353,8 +376,7 @@
                 throw new DataReceiveException(this.getClass(), ForeignResultCode.SYSTEM_ERROR_DATABASE_FAIL.getCode(),"预警异常短信接收人保存失败");
             Map<String, String> mesMap = new HashMap<>();
             mesMap.put("message",warnTime+" "+gasCategory.getName());
-            mesMap.put("level",warnThresholdName);
-            //todo
+            mesMap.put(" level",warnThresholdName);
             if (!CollectionUtils.isEmpty(phone)) {
                 List<String> distinctPhone = phone.stream().distinct().collect(Collectors.toList());
                 logger.info("【气体浓度异常短信发送】-----发送内容:" + content + " 发送时间: " + now + " 接收人手机号:" + distinctPhone);

--
Gitblit v1.9.2