Bläddra i källkod

化学品升级预警提交

hanzhiwei 2 år sedan
förälder
incheckning
e96d50fa24

+ 15 - 1
zd-modules/zd-chemical/src/main/java/com/zd/chemical/domain/HxpAlarmConfig.java

@@ -63,7 +63,12 @@ public class HxpAlarmConfig extends BaseEntity {
     @Excel(name = "创建人", readConverterExp = "用=于数据权限")
     @ApiModelProperty(value = "创建人")
     private Long userId;
-
+    /**
+     * 排序
+     */
+    @Excel(name = "排序", readConverterExp = "1,2,3,4,5")
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
     public void setId(Long id) {
         this.id = id;
     }
@@ -120,6 +125,14 @@ public class HxpAlarmConfig extends BaseEntity {
         return userId;
     }
 
+    public Integer getSort() {
+        return sort;
+    }
+
+    public void setSort(Integer sort) {
+        this.sort = sort;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
@@ -129,6 +142,7 @@ public class HxpAlarmConfig extends BaseEntity {
                 .append("alarmContent", getAlarmContent())
                 .append("alarmPhone", getAlarmPhone())
                 .append("userId", getUserId())
+                .append("sort", getSort())
                 .append("createTime", getCreateTime())
                 .append("createBy", getCreateBy())
                 .toString();

+ 40 - 2
zd-modules/zd-chemical/src/main/java/com/zd/chemical/service/impl/HxpAlarmRecordServiceImpl.java

@@ -2,6 +2,10 @@ package com.zd.chemical.service.impl;
 
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
+import com.zd.algorithm.api.alarm.entity.AlarmEntrty;
+import com.zd.algorithm.api.alarm.entity.Routes;
+import com.zd.algorithm.api.alarm.entity.SendTypes;
+import com.zd.algorithm.api.alarm.feign.RemoteAlarmService;
 import com.zd.chemical.domain.HxpAlarmRecord;
 import com.zd.chemical.domain.vo.AioAlarmRecordVo;
 import com.zd.chemical.domain.vo.HxpAlarmRecordSearch;
@@ -17,6 +21,7 @@ import com.zd.common.core.utils.SecurityUtils;
 import com.zd.model.domain.per.PerPrefix;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -39,6 +44,8 @@ public class HxpAlarmRecordServiceImpl implements IHxpAlarmRecordService {
     private HxpUserecordMapper hxpUserecordMapper;
     @Autowired
     private SmsSydUtil smsSydUtil;
+    @Autowired
+    private RemoteAlarmService remoteAlarmService;
 
     /**
      * 查询化学品报警记录
@@ -218,8 +225,8 @@ public class HxpAlarmRecordServiceImpl implements IHxpAlarmRecordService {
 
         HxpAlarmRecord alarmRecord = new HxpAlarmRecord();
         alarmRecord.setAlarmMode(3);
-        alarmRecord.setHasValid(0);
-        alarmRecord.setHandlingStatus(1);
+        alarmRecord.setHasValid(0);//无效
+        alarmRecord.setHandlingStatus(1);//待处理
         List<HxpAlarmRecord> list = hxpAlarmRecordMapper.queryListByNOValid(alarmRecord);
 
         Map<String,Object> subInfo;
@@ -249,4 +256,35 @@ public class HxpAlarmRecordServiceImpl implements IHxpAlarmRecordService {
 
         }
     }
+
+    /**
+     * 阶梯通知打电话
+     */
+    @Scheduled(cron = "0/10 * * * * ?")
+    public void levelCall() {
+        HxpAlarmRecord alarmRecord = new HxpAlarmRecord();
+        alarmRecord.setAlarmMode(4);
+        //无效
+        alarmRecord.setHasValid(0);
+        //待处理
+        alarmRecord.setHandlingStatus(1);
+        List<HxpAlarmRecord> list = hxpAlarmRecordMapper.queryListByNOValid(alarmRecord);
+        for (HxpAlarmRecord hxpAlarmRecord : list) {
+            try {
+                String[] strings = Stream.of(new String[]{hxpAlarmRecord.getLiableUserIds()})
+                        .filter(a -> StrUtil.isNotBlank(a))
+                        .collect(Collectors.joining(","))
+                        .split(",");
+                //打电话
+                AlarmEntrty alarmEntrty = new AlarmEntrty(Routes.NoticePush, strings, SendTypes.Call.name(), hxpAlarmRecord.getAlarmContent());
+                //alarmEntrty.setLogId(logId);
+                remoteAlarmService.send(alarmEntrty);
+                log.info("阶梯电话通知完成!");
+            } catch (Exception e) {
+                log.error("阶梯电话通知发送异常:" + e.getMessage());
+            }
+            hxpAlarmRecord.setHasValid(1);
+            hxpAlarmRecordMapper.updateHxpAlarmRecord(hxpAlarmRecord);
+        }
+    }
 }

+ 126 - 1
zd-modules/zd-chemical/src/main/java/com/zd/chemical/service/impl/HxpStockServiceImpl.java

@@ -49,6 +49,7 @@ import com.zd.model.entity.InventoryTag;
 import com.zd.model.entity.SysUser;
 import com.zd.system.api.entity.SysDictData;
 import com.zd.system.api.feign.RemoteUserService;
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -476,7 +477,13 @@ public class HxpStockServiceImpl implements IHxpStockService {
                         logger.info("化学品违规带离发送短信打电话消息推送完成!");
                     }
                 }
+                //声光报警
                 if (hardwareRfidDto != null && illegalRemoval.contains("3")) {
+                    List<Map<String, Object>> terminalList = hxpSmartTerminalMapper.selectTerminalBySubId(8, hxpStock.getSubId());
+                    Map<String, Object> smartTerminal = terminalList.get(0);
+                    String terminalNum = String.valueOf(smartTerminal.get("hardwareNum"));
+                    //Integer dealTime = (Integer) smartTerminal.get("dealTime");
+                    terminalList.get(0).get("ringTime");
                     ResultData<LabHardwareDto> hardwareByType = remoteLabHardwareService.findHardwareByType(hxpStock.getSubId(), 8, null, null);
                     if (HttpStatus.SUCCESS == hardwareByType.getCode()) {
                         warningNoticeLogDto.setId(logId);
@@ -484,12 +491,60 @@ public class HxpStockServiceImpl implements IHxpStockService {
                         remoteLaboratoryService.updateWarningNoticeLog(warningNoticeLogDto);
                         Long id = hardwareByType.getData().getId();
                         remoteLaboratoryService.controlDevice(id, 1);
+
+                        // 默认一个实验室只触发一个报警器
+                        HxpAlarmRecord hxpAlarmRecord = new HxpAlarmRecord();
+                        hxpAlarmRecord.setAlarmContent(text);
+                        hxpAlarmRecord.setAlarmType(2);
+                        hxpAlarmRecord.setHasValid(1);
+                        hxpAlarmRecord.setAlarmMode(2);
+                        hxpAlarmRecord.setAlarmTime(DateUtils.getNowDate());
+                        hxpAlarmRecord.setSubId(hxpStock.getSubId());
+                        hxpAlarmRecord.setTerminalNum(terminalNum == null ? tag.getSerialNumber() : terminalNum);
+                        hxpAlarmRecord.setHandlingStatus(1);
+                        // TODO 请在此处新增图片路径字段并使用 fileR 中的返回值url作为图片路径以供前端调用,具体实现方式可参考 com.zd.bottle.service.impl.AlarmRecordServiceImpl.remoteAdd#155 行代码,默认配置为空,具体配置可参考zd-bottle-dev.yml#113行到115行
+                        hxpAlarmRecordMapper.insertHxpAlarmRecord(hxpAlarmRecord);
+                        Long recordId = hxpAlarmRecord.getId();
                         scheduledExecutorService.schedule(new TimerTask() {
                             @Override
                             public void run() {
                                 remoteLaboratoryService.controlDevice(id, 0);
+                                // 自动处理声光报警状态
+                                HxpAlarmRecord hxpAlarmRecord1 = new HxpAlarmRecord();
+                                hxpAlarmRecord1.setId(recordId);
+                                hxpAlarmRecord1.setHandlingStatus(2);
+                                hxpAlarmRecord1.setHandlingTime(DateUtils.getNowDate());
+                                hxpAlarmRecord1.setHandlingUserId(-2L);
+                                hxpAlarmRecordMapper.updateHxpAlarmRecord(hxpAlarmRecord1);
                             }
-                        }, 30, TimeUnit.SECONDS);
+                        }, Long.parseLong(terminalList.get(0).get("ringTime") + ""), TimeUnit.SECONDS);
+                    }
+                }
+
+                // 需求变动内容:未领用即携带化学品离开房间报警时,如实验室安全责任人通过化学品终端或PC管理后台操作处理,状态更改为已处理,报警流程终止
+                // 保证逻辑严谨,数据必须进行强关联
+                // 1.查询标签所属实验室院系报警配置流程处理
+                // 查询电话通知配置
+                List<HxpAlarmConfig> hxpAlarmConfigList = hxpAlarmConfigMapper.selectBySubId(4, hxpStock.getSubId());
+                // 2.最多五个步骤分别执行
+                if(CollectionUtils.isNotEmpty(hxpAlarmConfigList)){
+                    logger.info("执行用户电话通知!");
+                    DateTime date = DateUtil.date();
+                    for (HxpAlarmConfig hxpAlarmConfig : hxpAlarmConfigList) {
+                        date = DateUtil.offsetMinute(date, Optional.ofNullable(hxpAlarmConfig.getTimeInterval()).orElse(1));
+                        HxpAlarmRecord hxpAlarmRecord = new HxpAlarmRecord();
+                        hxpAlarmRecord.setAlarmContent(text);
+                        hxpAlarmRecord.setAlarmType(2);
+                        hxpAlarmRecord.setAlarmMode(4);
+                        hxpAlarmRecord.setHasValid(0);
+                        hxpAlarmRecord.setAlarmTime(date);
+                        hxpAlarmRecord.setSubId(hxpStock.getSubId());
+                        hxpAlarmRecord.setStockId(hxpStock.getId());
+                        //hxpAlarmRecord.setParentId(recordId);
+                        //hxpAlarmRecord.setTerminalNum();
+                        hxpAlarmRecord.setHandlingStatus(1);
+                        hxpAlarmRecord.setLiableUserIds(hxpAlarmConfig.getAlarmPhone());
+                        hxpAlarmRecordMapper.insertHxpAlarmRecord(hxpAlarmRecord);
                     }
                 }
             }
@@ -971,6 +1026,7 @@ public class HxpStockServiceImpl implements IHxpStockService {
      * @Return void
      **/
 //    @Scheduled(cron = "0 0 0 * * ?")
+//    @Scheduled(cron = "0 0/5 * * * ?")
     public void hxpTimeOut() {
         logger.info("化学品超时未归还定时任务!");
         // 查询配置
@@ -1070,6 +1126,75 @@ public class HxpStockServiceImpl implements IHxpStockService {
                             logger.info("化学品超时未归还发送短信打电话消息推送完成!");
                         }
                     }
+
+                    //声光报警
+                    if (timeout.contains("3")) {
+                        List<Map<String, Object>> terminalList = hxpSmartTerminalMapper.selectTerminalBySubId(8, hxpStock.getSubId());
+                        Map<String, Object> smartTerminal = terminalList.get(0);
+                        String terminalNum = String.valueOf(smartTerminal.get("hardwareNum"));
+                        //Integer dealTime = (Integer) smartTerminal.get("dealTime");
+                        terminalList.get(0).get("ringTime");
+                        ResultData<LabHardwareDto> hardwareByType = remoteLabHardwareService.findHardwareByType(hxpStock.getSubId(), 8, null, null);
+                        if (HttpStatus.SUCCESS == hardwareByType.getCode()) {
+                            warningNoticeLogDto.setId(logId);
+                            warningNoticeLogDto.setVoiceBroadcast(1);
+                            remoteLaboratoryService.updateWarningNoticeLog(warningNoticeLogDto);
+                            Long id = hardwareByType.getData().getId();
+                            remoteLaboratoryService.controlDevice(id, 1);
+
+                            // 默认一个实验室只触发一个报警器
+                            HxpAlarmRecord hxpAlarmRecord = new HxpAlarmRecord();
+                            hxpAlarmRecord.setAlarmContent(text);
+                            hxpAlarmRecord.setAlarmType(2);
+                            hxpAlarmRecord.setHasValid(1);
+                            hxpAlarmRecord.setAlarmMode(2);
+                            hxpAlarmRecord.setAlarmTime(DateUtils.getNowDate());
+                            hxpAlarmRecord.setSubId(hxpStock.getSubId());
+                            hxpAlarmRecord.setTerminalNum(terminalNum);
+                            hxpAlarmRecord.setHandlingStatus(1);
+                            hxpAlarmRecordMapper.insertHxpAlarmRecord(hxpAlarmRecord);
+                            Long recordId = hxpAlarmRecord.getId();
+                            scheduledExecutorService.schedule(new TimerTask() {
+                                @Override
+                                public void run() {
+                                    remoteLaboratoryService.controlDevice(id, 0);
+                                    // 自动处理声光报警状态
+                                    HxpAlarmRecord hxpAlarmRecord1 = new HxpAlarmRecord();
+                                    hxpAlarmRecord1.setId(recordId);
+                                    hxpAlarmRecord1.setHandlingStatus(2);
+                                    hxpAlarmRecord1.setHandlingTime(DateUtils.getNowDate());
+                                    hxpAlarmRecord1.setHandlingUserId(-2L);
+                                    hxpAlarmRecordMapper.updateHxpAlarmRecord(hxpAlarmRecord1);
+                                }
+                            }, Long.parseLong(terminalList.get(0).get("ringTime") + ""), TimeUnit.SECONDS);
+                        }
+                    }
+                    // 需求变动内容:未领用即携带化学品离开房间报警时,如实验室安全责任人通过化学品终端或PC管理后台操作处理,状态更改为已处理,报警流程终止
+                    // 保证逻辑严谨,数据必须进行强关联
+                    // 1.查询标签所属实验室院系报警配置流程处理
+                    // 查询电话通知配置
+                    List<HxpAlarmConfig> hxpAlarmConfigList = hxpAlarmConfigMapper.selectBySubId(4, hxpStock.getSubId());
+                    // 2.最多五个步骤分别执行
+                    if(CollectionUtils.isNotEmpty(hxpAlarmConfigList)){
+                        logger.info("执行用户电话通知!");
+                        DateTime date = DateUtil.date();
+                        for (HxpAlarmConfig hxpAlarmConfig : hxpAlarmConfigList) {
+                            date = DateUtil.offsetMinute(date, Optional.ofNullable(hxpAlarmConfig.getTimeInterval()).orElse(1));
+                            HxpAlarmRecord hxpAlarmRecord = new HxpAlarmRecord();
+                            hxpAlarmRecord.setAlarmContent(text);
+                            hxpAlarmRecord.setAlarmType(2);
+                            hxpAlarmRecord.setAlarmMode(4);
+                            hxpAlarmRecord.setHasValid(0);
+                            hxpAlarmRecord.setAlarmTime(date);
+                            hxpAlarmRecord.setSubId(hxpStock.getSubId());
+                            hxpAlarmRecord.setStockId(hxpStock.getId());
+                            //hxpAlarmRecord.setParentId(recordId);
+                            //hxpAlarmRecord.setTerminalNum();
+                            hxpAlarmRecord.setHandlingStatus(1);
+                            hxpAlarmRecord.setLiableUserIds(hxpAlarmConfig.getAlarmPhone());
+                            hxpAlarmRecordMapper.insertHxpAlarmRecord(hxpAlarmRecord);
+                        }
+                    }
                 }
             });
             hxpUserecordMapper.updateUserecordOvertimeByIds(hxpIds);

+ 7 - 2
zd-modules/zd-chemical/src/main/resources/mapper/chemical/HxpAlarmConfigMapper.xml

@@ -12,15 +12,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="alarmContent" column="alarm_content"/>
         <result property="alarmPhone" column="alarm_phone"/>
         <result property="userId" column="user_id"/>
+        <result property="sort" column="sort"/>
         <result property="createTime" column="create_time"/>
         <result property="createBy" column="create_by"/>
     </resultMap>
 
     <sql id="selectHxpAlarmConfigVo">
-        select id, alarm_mode, time_interval, alarm_content, alarm_phone, user_id, create_time, create_by from hxp_alarm_config
+        select id, alarm_mode, time_interval, alarm_content, alarm_phone, user_id, sort, create_time, create_by from hxp_alarm_config
     </sql>
     <sql id="selectHxpAlarmConfigListVo">
-        select t.id, t.alarm_mode, t.time_interval, t.alarm_content, t.alarm_phone, t.user_id, t.create_time, t.create_by from hxp_alarm_config as t
+        select t.id, t.alarm_mode, t.time_interval, t.alarm_content, t.alarm_phone, t.user_id, t.sort, t.create_time, t.create_by from hxp_alarm_config as t
     </sql>
     <select id="selectHxpAlarmConfigList" parameterType="com.zd.chemical.domain.HxpAlarmConfig" resultMap="HxpAlarmConfigResult">
         <include refid="selectHxpAlarmConfigVo"/>
@@ -47,6 +48,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="alarmContent != null">alarm_content,</if>
             <if test="alarmPhone != null">alarm_phone,</if>
             <if test="userId != null">user_id,</if>
+            <if test="sort != null">sort,</if>
             <if test="createTime != null">create_time,</if>
             <if test="createBy != null">create_by,</if>
          </trim>
@@ -57,6 +59,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="alarmContent != null">#{alarmContent},</if>
             <if test="alarmPhone != null">#{alarmPhone},</if>
             <if test="userId != null">#{userId},</if>
+            <if test="sort != null">#{sort},</if>
             <if test="createTime != null">#{createTime},</if>
             <if test="createBy != null">#{createBy},</if>
          </trim>
@@ -71,6 +74,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="alarmContent != null">alarm_content = #{alarmContent},</if>
             <if test="alarmPhone != null">alarm_phone = #{alarmPhone},</if>
             <if test="userId != null">user_id = #{userId},</if>
+            <if test="sort != null">sort = #{sort},</if>
             <if test="createTime != null">create_time = #{createTime},</if>
             <if test="createBy != null">create_by = #{createBy},</if>
         </trim>
@@ -101,5 +105,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectHxpAlarmConfigVo"/>
         where alarm_mode = #{alarmMode} and alarm_dept_id =
             (select dept_id from lab_subject where id = #{subId} limit 1)
+        order by level asc
     </select>
 </mapper>