Przeglądaj źródła

一键灭火代码优化

hanzhiwei 3 lat temu
rodzic
commit
666c068f3d

+ 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是")
     private Integer ifFire;
 
-    @ApiModelProperty("自动执行/手动执行 0手动 1自动")
+    @ApiModelProperty("自动执行/手动执行 0手动 1自动 2预警")
     private Integer automanual;
 }

+ 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.page.TableDataInfo;
 import io.swagger.annotations.Api;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -250,33 +251,58 @@ public class LabRiskPlanController extends BaseController {
     @Log(title = "一件灭火触发火焰预警")
     @PostMapping("/oneClickFire")
     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();
+                }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.laboratory.domain.LabRiskPlanAbnormalLog;
 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 org.apache.ibatis.annotations.Param;
 
@@ -131,4 +133,18 @@ public interface LabRiskPlanAbnormalLogMapper {
     List<AlarmLog> selectNoBackAlarmLogList(Map<String, Object> params);
 
     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);
 }

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

@@ -104,4 +104,11 @@ public interface ILabRiskPlanAbnormalLogService {
      * @return 风险异常日志集合
      */
     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);
 
     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;
     }
 
+    @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.dto.LabBuildFloorLayoutDTO;
 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.mapper.*;
 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) {
         //将一件灭火插入日志
         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.setRiskPlanId(labRiskPlanLevel.getRiskPlanId());
                 labRiskPlanAbnormalLog.setRiskPlanName("一键灭火");
@@ -2252,6 +2254,35 @@ public class LabRiskPlanServiceImpl extends ServiceImpl<LabRiskPlanMapper, LabRi
         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) {
         boolean flag = false;
         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
         LIMIT 1
     </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>