Przeglądaj źródła

一键灭火逻辑修改

xuxiaofei 3 lat temu
rodzic
commit
87992908c0

+ 12 - 13
zd-modules/zd-algorithm/src/main/java/com/zd/alg/fire/controller/FireDeviceController.java

@@ -395,11 +395,9 @@ public class FireDeviceController extends BaseController {
         List<RemoteLabHardware> hdlist = remoteLaboratoryService.remoteList(hd).getData();
         if (hdlist.size() == 0) {
             logger.info("该实验室尚未配置关联硬件!");
-            //map.put("check","该实验室尚未配置关联硬件!");
             return  map;
-        } else if (hdlist.size() != 2) {
+        } else if (hdlist.size() < 2) {
             logger.info("该实验室尚未配置2路控制器!");
-            //map.put("check","该实验室尚未配置2路控制器!");
             return map;
         }
 
@@ -417,7 +415,7 @@ public class FireDeviceController extends BaseController {
         if (StringUtils.isNotNull(object)) {
             //异常传感器数量
             Integer fireNumber = (Integer) object.get("fireNumber");
-            if (fireNumber == 1) {
+            if (fireNumber > 0) {
                 logger.info("手动灭火,灭火设备1路信号异常,补发一路信号,触发灭火!");
                 //随机补充一路信号 触发灭火
                 List<RemoteLabHardware> li = new ArrayList<>();
@@ -432,13 +430,6 @@ public class FireDeviceController extends BaseController {
             map = sendOutFireMsg(hdlist,map,list.get(0).getDeviceCode());
         }
 
-        //通知预案(手动灭火)
-        OneClickFireDTO dto = new OneClickFireDTO();
-        dto.setDeviceCode(list.get(0).getDeviceCode());
-        dto.setIfFire(1);
-        dto.setAutomanual(0);
-        remoteLaboratoryService.oneClickFire(dto);
-
         //灭火日志添加
         HardwareFireDeviceLog fireDeviceLog = new HardwareFireDeviceLog();
         fireDeviceLog.setFireDeviceId(list.get(0).getId());
@@ -458,7 +449,6 @@ public class FireDeviceController extends BaseController {
      * @throws InterruptedException
      */
     private Map<String, Object> sendOutFireMsg(List<RemoteLabHardware> hdlist,Map<String, Object> map,String deviceCode) throws InterruptedException {
-        //Map<String, Object> map = new HashMap<>();
         StringBuilder msg = new StringBuilder();
         //执行动作结果
         boolean flg = true;
@@ -489,8 +479,17 @@ public class FireDeviceController extends BaseController {
         //通知前端一键灭火正在执行
         mapstatus.put("fireStatus",fireStatus);
         mapstatus.put("direTime",fireTime);
+        mapstatus.put("flg",flg);
         mqttSend.send(MqttConstants.TOPIC_FIRE_DEVICE_EXECUTING+deviceCode,JSON.toJSONString(mapstatus));
 
+        //通知预案(手动灭火)
+        OneClickFireDTO dto = new OneClickFireDTO();
+        dto.setDeviceCode(deviceCode);
+        dto.setIfFire(1);
+        dto.setAutomanual(0);
+        remoteLaboratoryService.oneClickFire(dto);
+        logger.info("手动灭火,通知预案");
+
         //关闭继电器
         for (RemoteLabHardware hardware : hdlist) {
             Thread.sleep(waitTime);
@@ -517,7 +516,7 @@ public class FireDeviceController extends BaseController {
             // 1离线 2在线 3异常
             if (StringUtils.isNull(jsonObject)) {
                 vo.setDeviceStatus(1);
-            } else if (StringUtils.isNotNull(jsonObject.get("msg").toString())) {
+            } else if (StringUtils.isNotNull(jsonObject.get("msg").toString()) && jsonObject.get("msg").toString().length()>0) {
                 vo.setDeviceStatus(3);
                 vo.setDescribe(jsonObject.get("msg").toString());
             } else {

+ 27 - 15
zd-modules/zd-algorithm/src/main/java/com/zd/alg/fire/utils/FireDeviceStatusTask.java

@@ -1,15 +1,17 @@
 package com.zd.alg.fire.utils;
 
 import com.alibaba.fastjson.JSON;
-import com.zd.alg.fire.controller.FireDeviceController;
+import com.alibaba.fastjson.JSONObject;
 import com.zd.alg.fire.service.IFireDeviceService;
 import com.zd.alg.mqtt.MqttSend;
 import com.zd.algorithm.api.fire.entity.vo.HardwareFireDeviceVO;
 import com.zd.common.core.redis.RedisService;
 import com.zd.common.core.utils.ReUtil;
 import com.zd.common.core.utils.StringUtils;
+import com.zd.laboratory.api.entity.OneClickFireDTO;
 import com.zd.laboratory.api.feign.RemoteLaboratoryService;
 import com.zd.model.constant.CacheConstants;
+import com.zd.model.constant.CacheDevice;
 import com.zd.model.constant.MqttConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -17,7 +19,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
-import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
@@ -38,17 +39,15 @@ public class FireDeviceStatusTask {
     private MqttSend mqttSend;
     @Autowired
     private RedisService redisService;
-
     @Autowired
-    private RemoteLaboratoryService laboratoryService;
+    RemoteLaboratoryService remoteLaboratoryService;
+
 
     /**
      * 定时更新灭火装置状态
-     *
      */
     @Scheduled(cron = "0/20 * * * * ?")
     public void getFireDeviceStatus() {
-
         try {
             //redis取值
             List<HardwareFireDeviceVO> list = JSON.parseArray(redisService.getCacheObject(CacheConstants.FIRE_DEVICE_LIST) + "", HardwareFireDeviceVO.class);
@@ -59,36 +58,49 @@ public class FireDeviceStatusTask {
                 redisService.setCacheObject(CacheConstants.FIRE_DEVICE_LIST, list, 60L, TimeUnit.MINUTES);
             }
 
-            if (list != null && list.size()>0) {
+            if (list != null && list.size() > 0) {
                 for (HardwareFireDeviceVO vo : list) {
                     //根据主机地址-位获取主机状态指令
                     String activeCode = FireLaborUtil.getFireActiveOrder(vo.getDeviceUrl());
                     //向mqtt发送状态信息
                     //byte[] activeCodeByte=activeCode.getBytes(StandardCharsets.UTF_8);
-                    byte[] activeCodeByte =ReUtil.hexStringToByteArray(activeCode);
+                    byte[] activeCodeByte = ReUtil.hexStringToByteArray(activeCode);
                     mqttSend.send(MqttConstants.TOPIC_FIRE_DEVICE + vo.getDeviceCode(), activeCodeByte);
                     //兼容指令无反应问题
                     /*Thread.sleep(500);
                     mqttSend.send(MqttConstants.TOPIC_FIRE_DEVICE + vo.getDeviceCode(), activeCodeByte);*/
-                    logger.info("集合数量:" + list.size() + ",mqtt消息推送, 灭火装置状态请求,实验室id:" + vo.getSubjectId() + ",采集器编号:" + vo.getDeviceCode()+",继电器编号"+vo.getRelayCode());
+                    logger.info("集合数量:" + list.size() + ",mqtt消息推送, 灭火装置状态请求,实验室id:" + vo.getSubjectId() + ",采集器编号:" + vo.getDeviceCode() + ",继电器编号" + vo.getRelayCode());
 
 
                     //获取灭火主机最后一次响应时间,判断响应是否超时
-                    Long timeJson = redisService.getCacheObject(CacheConstants.FIRE_DEVICE_RESPOND_TIME+vo.getDeviceCode());
+                    Long timeJson = redisService.getCacheObject(CacheConstants.FIRE_DEVICE_RESPOND_TIME + vo.getDeviceCode());
                     if (StringUtils.isNull(timeJson)) {
-                        logger.info("设备掉线,实验室id:"+vo.getSubjectId()+",采集器编号:"+vo.getDeviceCode());
+                        logger.info("设备掉线,实验室id:" + vo.getSubjectId() + ",采集器编号:" + vo.getDeviceCode());
                         //离线
-                        mqttSend.send(MqttConstants.TOPIC_FIRE_DEVICE_ONLINE+vo.getDeviceCode(), "0");
-                    }else{
+                        mqttSend.send(MqttConstants.TOPIC_FIRE_DEVICE_ONLINE + vo.getDeviceCode(), "0");
+                    } else {
                         //在线
-                        mqttSend.send(MqttConstants.TOPIC_FIRE_DEVICE_ONLINE+vo.getDeviceCode(), "1");
+                        mqttSend.send(MqttConstants.TOPIC_FIRE_DEVICE_ONLINE + vo.getDeviceCode(), "1");
                     }
+
+                    //查询该实验室是否存在火焰摄像头报警
+                    JSONObject fireJson = redisService.getCacheObject(CacheDevice.FIRE_CAMERA_KEY.getRedisKey() + vo.getSubjectId());
+                    logger.info("火焰摄像头情况" + fireJson);
+                    if (StringUtils.isNotNull(fireJson)) {
+                        OneClickFireDTO dto = new OneClickFireDTO();
+                        dto.setDeviceCode(vo.getDeviceCode());
+                        dto.setIfFire(1);
+                        dto.setAutomanual(2);
+                        remoteLaboratoryService.oneClickFire(dto);
+                        logger.info("火焰摄像头情况异常,通知预案。");
+                    }
+
                 }
             } else {
                 logger.info("====暂未查询到灭火主机信息====");
             }
         } catch (Exception e) {
-            logger.info("一键灭火定时任务异常"+e);
+            logger.info("一键灭火定时任务异常" + e);
         }
     }
 }

+ 22 - 23
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mqtt/config/MqttConfig.java

@@ -255,7 +255,7 @@ public class MqttConfig {
                 if (receivedTopic.startsWith(MqttConstants.TOPIC_FIRE_DEVICE_RECEIVE)) {
                     logger.info("消息处理器2开始处理=====");
                     logger.info("topic:" + receivedTopic);
-                    ReturnMessageProcessing(message,receivedTopic);
+                    ReturnMessageProcessing(message, receivedTopic);
                 }
             } catch (Exception e) {
                 e.printStackTrace();
@@ -332,10 +332,10 @@ public class MqttConfig {
                             TerminalRouter.routerMap.get("HxpLockService").offLine(relayCode);
                         }
                     }
-                }else if (receivedTopic.startsWith(MqttConstants.TOPIC_FIRE_DEVICE_RECEIVE)) {
+                } else if (receivedTopic.startsWith(MqttConstants.TOPIC_FIRE_DEVICE_RECEIVE)) {
                     logger.info("消息处理器1开始处理=====");
                     logger.info("topic:" + receivedTopic);
-                    ReturnMessageProcessing(message,receivedTopic);
+                    ReturnMessageProcessing(message, receivedTopic);
                 }
                 // TODO
 //                MessageBody messageBody = JSONObject.parseObject(messageStr, MessageBody.class);
@@ -378,28 +378,27 @@ public class MqttConfig {
         Integer fireNumber = Integer.valueOf(jsonObject.get("fireNumber").toString());
         //灭火主机发生预警
         if (fireNumber > 0) {
-            logger.info("灭火设备传感器异常,通知预案,状态:" + jsonObject.toJSONString());
+            logger.info("灭火设备传感器异常,状态:" + jsonObject.toJSONString());
             //发现灭火设备异常,发送消息通知小程序和PC
             commonSend.send(MqttConstants.TOPIC_FIRE_DEVICE_WARN + receivedTopic, jsonObject.toJSONString());
-            if (fireNumber == 2) {
-                logger.info("=====>>>>>>发现自动灭火");
-                //通知预案
-                //commonSend.send(MqttConstants.TOPIC_FIRE_DEVICE_CATCHFIRE+receivedTopic,jsonObject.toJSONString());
-                OneClickFireDTO dto = new OneClickFireDTO();
-                dto.setDeviceCode(receivedTopic);
-                dto.setIfFire(1);
-                dto.setAutomanual(1);
-                remoteLaboratoryService.oneClickFire(dto);
-
-                String isExist = redisService.getCacheObject(CacheConstants.FIRE_LOG_IS_EXIST);
-                //redis中是否已存在日志已添加标识
-                if (StringUtils.isEmpty(isExist)) {
-                    //自动灭火日志添加
-                    R r = remoteFireDeviceService.addFireLog(receivedTopic);
-                    //redis存值,灭火日志已经添加标识
-                    redisService.setCacheObject(CacheConstants.FIRE_LOG_IS_EXIST, r.getData(), 60L, TimeUnit.MINUTES);
-                    logger.info("灭火日志添加执行结果," + r.getData());
-                }
+
+            //通知预案
+            OneClickFireDTO dto = new OneClickFireDTO();
+            dto.setDeviceCode(receivedTopic);
+            dto.setIfFire(1);
+            //传感器数量大于3时必定是自动灭火
+            dto.setAutomanual(fireNumber > 3 ? 1 : 2);
+            remoteLaboratoryService.oneClickFire(dto);
+            logger.info("灭火设备传感器异常,通知预案");
+
+            String isExist = redisService.getCacheObject(CacheConstants.FIRE_LOG_IS_EXIST);
+            //redis中是否已存在日志已添加标识
+            if (StringUtils.isEmpty(isExist)) {
+                //自动灭火日志添加
+                R r = remoteFireDeviceService.addFireLog(receivedTopic);
+                //redis存值,灭火日志已经添加标识
+                redisService.setCacheObject(CacheConstants.FIRE_LOG_IS_EXIST, r.getData(), 60L, TimeUnit.MINUTES);
+                logger.info("灭火日志添加执行结果," + r.getData());
             }
         }
     }