Pārlūkot izejas kodu

Merge branch 'dev' of http://192.168.1.43:3000/v2/zd-parents into dev

chaiyunlong 3 gadi atpakaļ
vecāks
revīzija
e326da22e4
13 mainītis faili ar 277 papildinājumiem un 76 dzēšanām
  1. 1 1
      zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/entity/OneClickFireDTO.java
  2. 12 13
      zd-modules/zd-algorithm/src/main/java/com/zd/alg/fire/controller/FireDeviceController.java
  3. 27 15
      zd-modules/zd-algorithm/src/main/java/com/zd/alg/fire/utils/FireDeviceStatusTask.java
  4. 49 23
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabRiskPlanController.java
  5. 16 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/dto/QueryLogInfoParam.java
  6. 49 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/dto/RiskPlanLogInfoDTO.java
  7. 16 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabRiskPlanAbnormalLogMapper.java
  8. 22 23
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mqtt/config/MqttConfig.java
  9. 7 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabRiskPlanAbnormalLogService.java
  10. 2 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabRiskPlanService.java
  11. 8 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabRiskPlanAbnormalLogServiceImpl.java
  12. 32 1
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabRiskPlanServiceImpl.java
  13. 36 0
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabRiskPlanAbnormalLogMapper.xml

+ 1 - 1
zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/entity/OneClickFireDTO.java

@@ -18,6 +18,6 @@ public class OneClickFireDTO {
     @ApiModelProperty("是否火灾 0否 1是")
     @ApiModelProperty("是否火灾 0否 1是")
     private Integer ifFire;
     private Integer ifFire;
 
 
-    @ApiModelProperty("自动执行/手动执行 0手动 1自动")
+    @ApiModelProperty("自动执行/手动执行 0手动 1自动 2预警")
     private Integer automanual;
     private Integer automanual;
 }
 }

+ 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();
         List<RemoteLabHardware> hdlist = remoteLaboratoryService.remoteList(hd).getData();
         if (hdlist.size() == 0) {
         if (hdlist.size() == 0) {
             logger.info("该实验室尚未配置关联硬件!");
             logger.info("该实验室尚未配置关联硬件!");
-            //map.put("check","该实验室尚未配置关联硬件!");
             return  map;
             return  map;
-        } else if (hdlist.size() != 2) {
+        } else if (hdlist.size() < 2) {
             logger.info("该实验室尚未配置2路控制器!");
             logger.info("该实验室尚未配置2路控制器!");
-            //map.put("check","该实验室尚未配置2路控制器!");
             return map;
             return map;
         }
         }
 
 
@@ -417,7 +415,7 @@ public class FireDeviceController extends BaseController {
         if (StringUtils.isNotNull(object)) {
         if (StringUtils.isNotNull(object)) {
             //异常传感器数量
             //异常传感器数量
             Integer fireNumber = (Integer) object.get("fireNumber");
             Integer fireNumber = (Integer) object.get("fireNumber");
-            if (fireNumber == 1) {
+            if (fireNumber > 0) {
                 logger.info("手动灭火,灭火设备1路信号异常,补发一路信号,触发灭火!");
                 logger.info("手动灭火,灭火设备1路信号异常,补发一路信号,触发灭火!");
                 //随机补充一路信号 触发灭火
                 //随机补充一路信号 触发灭火
                 List<RemoteLabHardware> li = new ArrayList<>();
                 List<RemoteLabHardware> li = new ArrayList<>();
@@ -432,13 +430,6 @@ public class FireDeviceController extends BaseController {
             map = sendOutFireMsg(hdlist,map,list.get(0).getDeviceCode());
             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();
         HardwareFireDeviceLog fireDeviceLog = new HardwareFireDeviceLog();
         fireDeviceLog.setFireDeviceId(list.get(0).getId());
         fireDeviceLog.setFireDeviceId(list.get(0).getId());
@@ -458,7 +449,6 @@ public class FireDeviceController extends BaseController {
      * @throws InterruptedException
      * @throws InterruptedException
      */
      */
     private Map<String, Object> sendOutFireMsg(List<RemoteLabHardware> hdlist,Map<String, Object> map,String deviceCode) 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();
         StringBuilder msg = new StringBuilder();
         //执行动作结果
         //执行动作结果
         boolean flg = true;
         boolean flg = true;
@@ -489,8 +479,17 @@ public class FireDeviceController extends BaseController {
         //通知前端一键灭火正在执行
         //通知前端一键灭火正在执行
         mapstatus.put("fireStatus",fireStatus);
         mapstatus.put("fireStatus",fireStatus);
         mapstatus.put("direTime",fireTime);
         mapstatus.put("direTime",fireTime);
+        mapstatus.put("flg",flg);
         mqttSend.send(MqttConstants.TOPIC_FIRE_DEVICE_EXECUTING+deviceCode,JSON.toJSONString(mapstatus));
         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) {
         for (RemoteLabHardware hardware : hdlist) {
             Thread.sleep(waitTime);
             Thread.sleep(waitTime);
@@ -517,7 +516,7 @@ public class FireDeviceController extends BaseController {
             // 1离线 2在线 3异常
             // 1离线 2在线 3异常
             if (StringUtils.isNull(jsonObject)) {
             if (StringUtils.isNull(jsonObject)) {
                 vo.setDeviceStatus(1);
                 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.setDeviceStatus(3);
                 vo.setDescribe(jsonObject.get("msg").toString());
                 vo.setDescribe(jsonObject.get("msg").toString());
             } else {
             } 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;
 package com.zd.alg.fire.utils;
 
 
 import com.alibaba.fastjson.JSON;
 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.fire.service.IFireDeviceService;
 import com.zd.alg.mqtt.MqttSend;
 import com.zd.alg.mqtt.MqttSend;
 import com.zd.algorithm.api.fire.entity.vo.HardwareFireDeviceVO;
 import com.zd.algorithm.api.fire.entity.vo.HardwareFireDeviceVO;
 import com.zd.common.core.redis.RedisService;
 import com.zd.common.core.redis.RedisService;
 import com.zd.common.core.utils.ReUtil;
 import com.zd.common.core.utils.ReUtil;
 import com.zd.common.core.utils.StringUtils;
 import com.zd.common.core.utils.StringUtils;
+import com.zd.laboratory.api.entity.OneClickFireDTO;
 import com.zd.laboratory.api.feign.RemoteLaboratoryService;
 import com.zd.laboratory.api.feign.RemoteLaboratoryService;
 import com.zd.model.constant.CacheConstants;
 import com.zd.model.constant.CacheConstants;
+import com.zd.model.constant.CacheDevice;
 import com.zd.model.constant.MqttConstants;
 import com.zd.model.constant.MqttConstants;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
@@ -17,7 +19,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
-import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
 
 
@@ -38,17 +39,15 @@ public class FireDeviceStatusTask {
     private MqttSend mqttSend;
     private MqttSend mqttSend;
     @Autowired
     @Autowired
     private RedisService redisService;
     private RedisService redisService;
-
     @Autowired
     @Autowired
-    private RemoteLaboratoryService laboratoryService;
+    RemoteLaboratoryService remoteLaboratoryService;
+
 
 
     /**
     /**
      * 定时更新灭火装置状态
      * 定时更新灭火装置状态
-     *
      */
      */
     @Scheduled(cron = "0/20 * * * * ?")
     @Scheduled(cron = "0/20 * * * * ?")
     public void getFireDeviceStatus() {
     public void getFireDeviceStatus() {
-
         try {
         try {
             //redis取值
             //redis取值
             List<HardwareFireDeviceVO> list = JSON.parseArray(redisService.getCacheObject(CacheConstants.FIRE_DEVICE_LIST) + "", HardwareFireDeviceVO.class);
             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);
                 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) {
                 for (HardwareFireDeviceVO vo : list) {
                     //根据主机地址-位获取主机状态指令
                     //根据主机地址-位获取主机状态指令
                     String activeCode = FireLaborUtil.getFireActiveOrder(vo.getDeviceUrl());
                     String activeCode = FireLaborUtil.getFireActiveOrder(vo.getDeviceUrl());
                     //向mqtt发送状态信息
                     //向mqtt发送状态信息
                     //byte[] activeCodeByte=activeCode.getBytes(StandardCharsets.UTF_8);
                     //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);
                     mqttSend.send(MqttConstants.TOPIC_FIRE_DEVICE + vo.getDeviceCode(), activeCodeByte);
                     //兼容指令无反应问题
                     //兼容指令无反应问题
                     /*Thread.sleep(500);
                     /*Thread.sleep(500);
                     mqttSend.send(MqttConstants.TOPIC_FIRE_DEVICE + vo.getDeviceCode(), activeCodeByte);*/
                     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)) {
                     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 {
             } else {
                 logger.info("====暂未查询到灭火主机信息====");
                 logger.info("====暂未查询到灭火主机信息====");
             }
             }
         } catch (Exception e) {
         } catch (Exception e) {
-            logger.info("一键灭火定时任务异常"+e);
+            logger.info("一键灭火定时任务异常" + e);
         }
         }
     }
     }
 }
 }

+ 49 - 23
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabRiskPlanController.java

@@ -38,6 +38,7 @@ import com.zd.model.domain.per.PerFun;
 import com.zd.model.domain.per.PerPrefix;
 import com.zd.model.domain.per.PerPrefix;
 import com.zd.model.page.TableDataInfo;
 import com.zd.model.page.TableDataInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
@@ -250,33 +251,58 @@ public class LabRiskPlanController extends BaseController {
     @Log(title = "一件灭火触发火焰预警")
     @Log(title = "一件灭火触发火焰预警")
     @PostMapping("/oneClickFire")
     @PostMapping("/oneClickFire")
     public ResultData oneClickFire(@RequestBody OneClickFireDTO oneClickFireDTO){
     public ResultData oneClickFire(@RequestBody OneClickFireDTO oneClickFireDTO){
-        if (!Objects.isNull(oneClickFireDTO)) {
-            logger.info("一件灭火触发火焰预警,入参={}", JSON.toJSONString(oneClickFireDTO));
-            if (oneClickFireDTO.getIfFire() == 1) {
-                R deviceByCode = remoteFireDeviceService.getDeviceByCode(oneClickFireDTO.getDeviceCode());
-                if (deviceByCode.getCode()!=(HttpStatus.SUCCESS)){
-                    return ResultData.fail("查询一键灭火设备信息失败!");
-                }
-                HardwareFireDeviceVO hardwareFireDeviceVO = JSON.parseObject(JSON.toJSONString(deviceByCode.getData()), HardwareFireDeviceVO.class);
-                if (hardwareFireDeviceVO.getSubjectId() != null){
-                    SubFunction subFunction = new SubFunction();
-                    List<SensorFunctionStatus> sensorFunctionStatuses = new ArrayList<>();
-                    SensorFunctionStatus sensorFunctionStatus = new SensorFunctionStatus();
-                    sensorFunctionStatus.setVal("1");
-                    sensorFunctionStatus.setFunNum("huoyan");
-                    sensorFunctionStatus.setHardwareNum(oneClickFireDTO.getDeviceCode());
-                    sensorFunctionStatus.setDescribe("火焰");
-                    sensorFunctionStatus.setAutomanual(oneClickFireDTO.getAutomanual());
-                    sensorFunctionStatuses.add(sensorFunctionStatus);
-                    subFunction.setSubId(hardwareFireDeviceVO.getSubjectId());
-                    subFunction.setFunctionStatuses(sensorFunctionStatuses);
-                    triggerRiskPlan(subFunction);
+        if (Objects.isNull(oneClickFireDTO)) {
+            return ResultData.fail("传入参数为空!");
+        }
+        logger.info("一键灭火触发火焰预警,入参={}", JSON.toJSONString(oneClickFireDTO));
+        if (oneClickFireDTO.getIfFire() == 1) {
+            R deviceByCode = remoteFireDeviceService.getDeviceByCode(oneClickFireDTO.getDeviceCode());
+            if (deviceByCode.getCode()!=(HttpStatus.SUCCESS)){
+                return ResultData.fail("查询一键灭火实验室信息失败!");
+            }
+            HardwareFireDeviceVO hardwareFireDeviceVO = JSON.parseObject(JSON.toJSONString(deviceByCode.getData()), HardwareFireDeviceVO.class);
+            if (hardwareFireDeviceVO.getSubjectId() != null){
+                //自动或手动
+                if(oneClickFireDTO.getAutomanual() == 0 || oneClickFireDTO.getAutomanual() == 1){
+                    Boolean b = labRiskPlanAbnormalLogService.queryIfTriggerRiskPlan(hardwareFireDeviceVO.getSubjectId());
+                    //未触发火焰预案,则新触发火焰预案
+                    if (!b) {
+                        return oneClickFireTriggerRiskPlan(oneClickFireDTO, hardwareFireDeviceVO);
+                    }
+                    //已触发火焰预案,则查询日志是否已经写入,未写入则写入日志,已写入则不做处理
+                    labRiskPlanService.inserRiskLog(hardwareFireDeviceVO.getSubjectId(),oneClickFireDTO.getAutomanual());
                     return ResultData.success();
                     return ResultData.success();
+                }else {
+                    //预警,直接触发预案, ,不触发预案一键灭火日志写入
+                    return oneClickFireTriggerRiskPlan(oneClickFireDTO, hardwareFireDeviceVO);
                 }
                 }
-                return ResultData.fail("查询一键灭火实验室信息失败!");
             }
             }
+            return ResultData.fail("未查询到一键灭火实验室信息!");
         }
         }
-        return ResultData.fail("传入参数为空!");
+        return ResultData.fail("当前传入非火焰预案!");
+    }
+
+    /**
+     * 一键灭火触发预案
+     * @param oneClickFireDTO
+     * @param hardwareFireDeviceVO
+     * @return
+     */
+    @NotNull
+    private ResultData<Object> oneClickFireTriggerRiskPlan(OneClickFireDTO oneClickFireDTO, HardwareFireDeviceVO hardwareFireDeviceVO) {
+        SubFunction subFunction = new SubFunction();
+        List<SensorFunctionStatus> sensorFunctionStatuses = new ArrayList<>();
+        SensorFunctionStatus sensorFunctionStatus = new SensorFunctionStatus();
+        sensorFunctionStatus.setVal("1");
+        sensorFunctionStatus.setFunNum("huoyan");
+        sensorFunctionStatus.setHardwareNum(oneClickFireDTO.getDeviceCode());
+        sensorFunctionStatus.setDescribe("火焰");
+        sensorFunctionStatus.setAutomanual(oneClickFireDTO.getAutomanual());
+        sensorFunctionStatuses.add(sensorFunctionStatus);
+        subFunction.setSubId(hardwareFireDeviceVO.getSubjectId());
+        subFunction.setFunctionStatuses(sensorFunctionStatuses);
+        triggerRiskPlan(subFunction);
+        return ResultData.success();
     }
     }
 
 
     /**
     /**

+ 16 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/dto/QueryLogInfoParam.java

@@ -0,0 +1,16 @@
+package com.zd.laboratory.domain.dto;
+
+import lombok.Data;
+
+/**
+ * @Description TODO
+ * @Author hzw
+ * @Date 2022/12/28 9:59
+ * @Version 2.0
+ */
+@Data
+public class QueryLogInfoParam {
+    private Long subId;
+    private Integer riskStatus;
+    private Integer riskAttribute;
+}

+ 49 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/dto/RiskPlanLogInfoDTO.java

@@ -0,0 +1,49 @@
+package com.zd.laboratory.domain.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Description TODO
+ * @Author hzw
+ * @Date 2022/12/27 19:32
+ * @Version 2.0
+ */
+@Data
+public class RiskPlanLogInfoDTO {
+    /**
+     * 预案id
+     */
+    @ApiModelProperty(value="预案id")
+    private Long riskPlanId;
+
+    /**
+     * 预案级别id
+     */
+    @ApiModelProperty(value="预案级别id")
+    private Long riskPlanLevelId;
+
+    /**
+     * 预案级别名称
+     */
+    @ApiModelProperty(value="预案级别名称")
+    private String riskPlanLevelName;
+
+    /**
+     * 预案级别
+     */
+    @ApiModelProperty(value="预案级别 1低风险、2中风险、3较高风险、4高风险")
+    private Integer riskPlanLevel;
+
+    /**
+     * 预案属性(1火灾预案 2非火灾预案)
+     */
+    @ApiModelProperty(value="预案属性(1火灾预案 2非火灾预案)")
+    private Integer riskAttribute;
+
+    /**
+     * 日志组id
+     */
+    @ApiModelProperty(value="日志组id")
+    private Long groupId;
+}

+ 16 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabRiskPlanAbnormalLogMapper.java

@@ -3,6 +3,8 @@ package com.zd.laboratory.mapper;
 import com.zd.algorithm.api.alarm.entity.AlarmLog;
 import com.zd.algorithm.api.alarm.entity.AlarmLog;
 import com.zd.laboratory.domain.LabRiskPlanAbnormalLog;
 import com.zd.laboratory.domain.LabRiskPlanAbnormalLog;
 import com.zd.laboratory.domain.dto.LabBuildFloorLayoutDTO;
 import com.zd.laboratory.domain.dto.LabBuildFloorLayoutDTO;
+import com.zd.laboratory.domain.dto.QueryLogInfoParam;
+import com.zd.laboratory.domain.dto.RiskPlanLogInfoDTO;
 import com.zd.laboratory.domain.vo.LabRiskPlanAbnormalLogVO;
 import com.zd.laboratory.domain.vo.LabRiskPlanAbnormalLogVO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 
 
@@ -131,4 +133,18 @@ public interface LabRiskPlanAbnormalLogMapper {
     List<AlarmLog> selectNoBackAlarmLogList(Map<String, Object> params);
     List<AlarmLog> selectNoBackAlarmLogList(Map<String, Object> params);
 
 
     LabBuildFloorLayoutDTO selectRiskPlanTriggerInfo(@Param("riskPlanId") Long riskPlanId, @Param("groupId") Long groupId);
     LabBuildFloorLayoutDTO selectRiskPlanTriggerInfo(@Param("riskPlanId") Long riskPlanId, @Param("groupId") Long groupId);
+
+    /**
+     * 通过实验室id查询当前实验室触发预案信息
+     * @param subjectId
+     * @return
+     */
+    RiskPlanLogInfoDTO selectRiskPlanLogInfoBySubId(@Param("queryLogInfoParam") QueryLogInfoParam queryLogInfoParam);
+
+    /**
+     * 通过实验室id查询当前实验室是否触发预案
+     * @Param [subjectId]
+     * @Return java.lang.Long
+     **/
+    Long queryIfTriggerRiskPlan(Long subjectId);
 }
 }

+ 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)) {
                 if (receivedTopic.startsWith(MqttConstants.TOPIC_FIRE_DEVICE_RECEIVE)) {
                     logger.info("消息处理器2开始处理=====");
                     logger.info("消息处理器2开始处理=====");
                     logger.info("topic:" + receivedTopic);
                     logger.info("topic:" + receivedTopic);
-                    ReturnMessageProcessing(message,receivedTopic);
+                    ReturnMessageProcessing(message, receivedTopic);
                 }
                 }
             } catch (Exception e) {
             } catch (Exception e) {
                 e.printStackTrace();
                 e.printStackTrace();
@@ -332,10 +332,10 @@ public class MqttConfig {
                             TerminalRouter.routerMap.get("HxpLockService").offLine(relayCode);
                             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("消息处理器1开始处理=====");
                     logger.info("topic:" + receivedTopic);
                     logger.info("topic:" + receivedTopic);
-                    ReturnMessageProcessing(message,receivedTopic);
+                    ReturnMessageProcessing(message, receivedTopic);
                 }
                 }
                 // TODO
                 // TODO
 //                MessageBody messageBody = JSONObject.parseObject(messageStr, MessageBody.class);
 //                MessageBody messageBody = JSONObject.parseObject(messageStr, MessageBody.class);
@@ -378,28 +378,27 @@ public class MqttConfig {
         Integer fireNumber = Integer.valueOf(jsonObject.get("fireNumber").toString());
         Integer fireNumber = Integer.valueOf(jsonObject.get("fireNumber").toString());
         //灭火主机发生预警
         //灭火主机发生预警
         if (fireNumber > 0) {
         if (fireNumber > 0) {
-            logger.info("灭火设备传感器异常,通知预案,状态:" + jsonObject.toJSONString());
+            logger.info("灭火设备传感器异常,状态:" + jsonObject.toJSONString());
             //发现灭火设备异常,发送消息通知小程序和PC
             //发现灭火设备异常,发送消息通知小程序和PC
             commonSend.send(MqttConstants.TOPIC_FIRE_DEVICE_WARN + receivedTopic, jsonObject.toJSONString());
             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());
             }
             }
         }
         }
     }
     }

+ 7 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabRiskPlanAbnormalLogService.java

@@ -104,4 +104,11 @@ public interface ILabRiskPlanAbnormalLogService {
      * @return 风险异常日志集合
      * @return 风险异常日志集合
      */
      */
     public List<SubDiyAppVO> adminSubByRiskPlan(LabRiskPlanAbnormalLogVO labRiskPlanAbnormalLogVo);
     public List<SubDiyAppVO> adminSubByRiskPlan(LabRiskPlanAbnormalLogVO labRiskPlanAbnormalLogVo);
+
+    /**
+     * 根据实验室id查询当前实验室是否触发预案
+     * @Param [subjectId]
+     * @Return java.lang.Boolean
+     **/
+    Boolean queryIfTriggerRiskPlan(Long subjectId);
 }
 }

+ 2 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabRiskPlanService.java

@@ -164,4 +164,6 @@ public interface ILabRiskPlanService  extends IService<LabRiskPlan> {
     Integer checkEnterRiskPlan(Long riskPlanId);
     Integer checkEnterRiskPlan(Long riskPlanId);
 
 
     void writerEnterRiskPlan(Long groupId,Integer ifCheck);
     void writerEnterRiskPlan(Long groupId,Integer ifCheck);
+
+    void inserRiskLog(Long subjectId,Integer automanual);
 }
 }

+ 8 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabRiskPlanAbnormalLogServiceImpl.java

@@ -482,4 +482,12 @@ public class LabRiskPlanAbnormalLogServiceImpl implements ILabRiskPlanAbnormalLo
         return subRiskPlanList;
         return subRiskPlanList;
     }
     }
 
 
+    @Override
+    public Boolean queryIfTriggerRiskPlan(Long subjectId) {
+        Long groupId = labRiskPlanAbnormalLogMapper.queryIfTriggerRiskPlan(subjectId);
+        if (groupId != null && groupId > 0){
+            return true;
+        }
+        return false;
+    }
 }
 }

+ 32 - 1
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabRiskPlanServiceImpl.java

@@ -25,6 +25,8 @@ import com.zd.laboratory.config.HardwareFunctionStatusConfig;
 import com.zd.laboratory.domain.*;
 import com.zd.laboratory.domain.*;
 import com.zd.laboratory.domain.dto.LabBuildFloorLayoutDTO;
 import com.zd.laboratory.domain.dto.LabBuildFloorLayoutDTO;
 import com.zd.laboratory.domain.dto.LabRiskPlanDTO;
 import com.zd.laboratory.domain.dto.LabRiskPlanDTO;
+import com.zd.laboratory.domain.dto.QueryLogInfoParam;
+import com.zd.laboratory.domain.dto.RiskPlanLogInfoDTO;
 import com.zd.laboratory.domain.vo.*;
 import com.zd.laboratory.domain.vo.*;
 import com.zd.laboratory.mapper.*;
 import com.zd.laboratory.mapper.*;
 import com.zd.laboratory.mqtt.enums.BigViewDataType;
 import com.zd.laboratory.mqtt.enums.BigViewDataType;
@@ -1664,7 +1666,7 @@ public class LabRiskPlanServiceImpl extends ServiceImpl<LabRiskPlanMapper, LabRi
     public void insertPlanAbnormalLogByOneClickFire(LabRiskPlanLevel labRiskPlanLevel, SubFunction<SensorFunctionStatus> subFunction, Long groupId) {
     public void insertPlanAbnormalLogByOneClickFire(LabRiskPlanLevel labRiskPlanLevel, SubFunction<SensorFunctionStatus> subFunction, Long groupId) {
         //将一件灭火插入日志
         //将一件灭火插入日志
         subFunction.getFunctionStatuses().stream().filter(a->"huoyan".equals(a.getFunNum())).forEach(a -> {
         subFunction.getFunctionStatuses().stream().filter(a->"huoyan".equals(a.getFunNum())).forEach(a -> {
-            if(a.getAutomanual()!=null){
+            if(a.getAutomanual() == 0 || a.getAutomanual() == 1){
                 LabRiskPlanAbnormalLog labRiskPlanAbnormalLog = new LabRiskPlanAbnormalLog();
                 LabRiskPlanAbnormalLog labRiskPlanAbnormalLog = new LabRiskPlanAbnormalLog();
                 labRiskPlanAbnormalLog.setRiskPlanId(labRiskPlanLevel.getRiskPlanId());
                 labRiskPlanAbnormalLog.setRiskPlanId(labRiskPlanLevel.getRiskPlanId());
                 labRiskPlanAbnormalLog.setRiskPlanName("一键灭火");
                 labRiskPlanAbnormalLog.setRiskPlanName("一键灭火");
@@ -2252,6 +2254,35 @@ public class LabRiskPlanServiceImpl extends ServiceImpl<LabRiskPlanMapper, LabRi
         labRiskPlanAbnormalGroupMapper.updateLabRiskPlanAbnormalGroup(labRiskPlanAbnormalGroup);
         labRiskPlanAbnormalGroupMapper.updateLabRiskPlanAbnormalGroup(labRiskPlanAbnormalGroup);
     }
     }
 
 
+    @Override
+    public void inserRiskLog(Long subjectId,Integer automanual) {
+        //查询一体机日志是否写入
+        QueryLogInfoParam queryLogInfoParam = new QueryLogInfoParam();
+        queryLogInfoParam.setSubId(subjectId);
+        queryLogInfoParam.setRiskStatus(6);
+        queryLogInfoParam.setRiskAttribute(1);
+        RiskPlanLogInfoDTO riskPlanLogInfoDTO1 = labRiskPlanAbnormalLogMapper.selectRiskPlanLogInfoBySubId(queryLogInfoParam);
+        if (Objects.isNull(riskPlanLogInfoDTO1)){
+            //点击手动一键灭火
+            queryLogInfoParam.setRiskStatus(null);
+            RiskPlanLogInfoDTO riskPlanLogInfoDTO = labRiskPlanAbnormalLogMapper.selectRiskPlanLogInfoBySubId(queryLogInfoParam);
+            LabRiskPlanAbnormalLog labRiskPlanAbnormalLog = new LabRiskPlanAbnormalLog();
+            labRiskPlanAbnormalLog.setRiskPlanId(riskPlanLogInfoDTO.getRiskPlanId());
+            labRiskPlanAbnormalLog.setRiskPlanName("一键灭火");
+            labRiskPlanAbnormalLog.setSubjectId(subjectId);
+            labRiskPlanAbnormalLog.setCreateTime(new Date());
+            labRiskPlanAbnormalLog.setGroupId(riskPlanLogInfoDTO.getGroupId());
+            labRiskPlanAbnormalLog.setRiskAttribute(1);
+            labRiskPlanAbnormalLog.setRiskPlanLevelId(riskPlanLogInfoDTO.getRiskPlanLevelId());
+            labRiskPlanAbnormalLog.setRiskPlanLevelName(riskPlanLogInfoDTO.getRiskPlanLevelName());
+            labRiskPlanAbnormalLog.setRiskPlanLevel(riskPlanLogInfoDTO.getRiskPlanLevel());
+            labRiskPlanAbnormalLog.setRiskStatus(6L);
+            labRiskPlanAbnormalLog.setRemark(automanual == 1 ? "自动灭火" : "手动灭火");
+            //插入风险日志
+            labRiskPlanAbnormalLogMapper.insertLabRiskPlanAbnormalLog(labRiskPlanAbnormalLog);
+        }
+    }
+
     public static boolean isListEqual(List l0, List l1) {
     public static boolean isListEqual(List l0, List l1) {
         boolean flag = false;
         boolean flag = false;
         if (l0 == null && l1 == null) return true;
         if (l0 == null && l1 == null) return true;

+ 36 - 0
zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabRiskPlanAbnormalLogMapper.xml

@@ -445,4 +445,40 @@
         ORDER BY lrpal.id DESC
         ORDER BY lrpal.id DESC
         LIMIT 1
         LIMIT 1
     </select>
     </select>
+    <select id="selectRiskPlanLogInfoBySubId" parameterType="com.zd.laboratory.domain.dto.QueryLogInfoParam" resultType="com.zd.laboratory.domain.dto.RiskPlanLogInfoDTO">
+        SELECT
+            lrpl.risk_plan_id,
+            lrpl.id risk_plan_level_id,
+            lrpl.risk_plan_level,
+			lrpal.risk_plan_level_name,
+            lrpal.risk_attribute,
+			lrpag.id group_id
+        FROM
+            lab_risk_plan_abnormal_group lrpag
+            LEFT JOIN lab_risk_plan_abnormal_log lrpal ON lrpag.id = lrpal.group_id
+            LEFT JOIN lab_risk_plan_level lrpl ON lrpal.risk_plan_level_id = lrpl.id
+        <where>
+            <if test="queryLogInfoParam.subId != null">
+                and lrpag.subject_id = #{queryLogInfoParam.subId}
+            </if>
+            <if test="queryLogInfoParam.riskStatus != null">
+                and lrpal.risk_status = #{queryLogInfoParam.riskStatus}
+            </if>
+            <if test="param1.riskAttribute != null">
+                and lrpag.risk_attribute = #{queryLogInfoParam.riskAttribute}
+            </if>
+            and lrpag.`status` = 1
+        </where>
+        ORDER BY lrpal.id DESC
+        LIMIT 1
+    </select>
+    <select id="queryIfTriggerRiskPlan" resultType="java.lang.Long">
+        SELECT
+			lrpag.id
+        FROM
+            lab_risk_plan_abnormal_group lrpag
+        WHERE lrpag.subject_id = #{subjectId}
+            and lrpag.`status` = 1
+            and lrpag.risk_attribute = 1
+    </select>
 </mapper>
 </mapper>