ソースを参照

发送短信不重复提交

hanzhiwei 2 年 前
コミット
af0bca35a6

+ 13 - 0
zd-api/zd-algorithm-api/src/main/java/com/zd/algorithm/api/alarm/entity/AlarmEntrty.java

@@ -44,6 +44,11 @@ public class AlarmEntrty {
     private String Text;
 
     /**
+     * 报警id
+     */
+    private Long logId;
+
+    /**
      * 本次打电话、发短信 电话用户信息
      */
     private List<UserPhoneInfo> userPhoneInfo;
@@ -124,6 +129,14 @@ public class AlarmEntrty {
         this.userPhoneInfo = userPhoneInfo;
     }
 
+    public Long getLogId() {
+        return logId;
+    }
+
+    public void setLogId(Long logId) {
+        this.logId = logId;
+    }
+
     @Override
     public String toString() {
         return JSONUtil.toJsonStr(this);

+ 9 - 21
zd-modules/zd-airbottle/src/main/java/com/zd/airbottle/service/impl/AlarmRecordServiceImpl.java

@@ -134,8 +134,7 @@ public class AlarmRecordServiceImpl implements IAlarmRecordService {
      * 新增报警记录
      * 默认新增气瓶报警记录
      *
-     * @param alarmRecord 报警记录
-     * @param hardwareRfidDto RFID 设备数据
+     * @param tag 记录
      * @return 结果
      */
     @Override
@@ -216,12 +215,7 @@ public class AlarmRecordServiceImpl implements IAlarmRecordService {
                 }
                 //按照配置预警
                 if (illegalRemoval != null) {
-                    ResultData urlScheme = remoteMessageService.getUrlScheme(logId);
-                    if (urlScheme.getCode() != HttpStatus.SUCCESS) {
-                        log.error("获取urlScheme失败!");
-                    }
-                    String systemText = "【实验室安全系统】"+warningNoticeLogDto.getSubName()+"-实验人员违规携带"+warningNoticeLogDto.getName()+"气瓶离开房间,发生时间:" + LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss") + ",请尽快确认。";
-                    String text = "【实验室安全系统】"+warningNoticeLogDto.getSubName()+"-实验人员违规携带"+warningNoticeLogDto.getName()+"气瓶离开房间,发生时间:" + LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss") + ",请尽快确认。点击查看:" + "https://lab.zjznai.com/labAppTest/earlyWarning/index.html?id="+ logId + "&urlScheme=" + urlScheme.getData();
+                    String text = "【实验室安全系统】"+warningNoticeLogDto.getSubName()+"-实验人员违规携带"+warningNoticeLogDto.getName()+"气瓶离开房间,发生时间:" + LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss") + ",请尽快确认。";
 
                     //系统通知
                     if (illegalRemoval.contains("1")) {
@@ -232,21 +226,18 @@ public class AlarmRecordServiceImpl implements IAlarmRecordService {
                         labMessageContent.setMessType(13);
                         labMessageContent.setSubIds(String.valueOf(storageRVo.getSubjectId()));
                         labMessageContent.setUserIds(userIds.toString());
-                        labMessageContent.setContent(systemText);
+                        labMessageContent.setContent(text);
                         remoteMessageContentService.sendMessage(labMessageContent);
-
                     }
 
                     //短信通知
                     if (illegalRemoval.contains("2")) {
-
                         String[] strings = Stream.of(phones.toString().split(",")).filter(a -> StrUtil.isNotBlank(a)).collect(Collectors.joining(",")).split(",");
-
                         if (strings != null) {
                             AlarmEntrty alarmEntrty = new AlarmEntrty(Routes.NoticePush, strings, SendTypes.SMS.toString(), text);
+                            alarmEntrty.setLogId(logId);
                             remoteAlarmService.send(alarmEntrty);
                             log.info("气瓶发送短信打电话消息推送完成!");
-                            log.info("气瓶发送短信内容:{}",text);
                         }
                     }
 
@@ -521,12 +512,9 @@ public class AlarmRecordServiceImpl implements IAlarmRecordService {
                 if (HttpStatus.SUCCESS == resultData.getCode()) {
                     log.info("气瓶超时未归还保存日志成功!");
                 }
-                ResultData urlScheme = remoteMessageService.getUrlScheme(Long.valueOf(String.valueOf(resultData.getData())));
-                if(urlScheme.getCode() != HttpStatus.SUCCESS){
-                    log.error("获取urlScheme失败!");
-                }
-                String systemText = "【实验室安全系统】"+warningNoticeLogDto.getSubName()+"-"+warningNoticeLogDto.getApply()+"领用"+warningNoticeLogDto.getName()+"气瓶超时未归还,领用时间:"+LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss")+",请尽快确认。";
-                String text = "【实验室安全系统】"+warningNoticeLogDto.getSubName()+"-"+warningNoticeLogDto.getApply()+"领用"+warningNoticeLogDto.getName()+"气瓶超时未归还,领用时间:"+LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss")+",请尽快确认。点击查看:https://lab.zjznai.com/labAppTest/earlyWarning/index.html?id="+resultData.getData()+"&urlScheme="+urlScheme.getData();
+                Long logId = (Long) resultData.getData();
+
+                String text = "【实验室安全系统】"+warningNoticeLogDto.getSubName()+"-"+warningNoticeLogDto.getApply()+"领用"+warningNoticeLogDto.getName()+"气瓶超时未归还,领用时间:"+LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss")+",请尽快确认。";
                 if (timeout.contains("1")) {
                     //系统通知
                     LabMessageContent labMessageContent = new LabMessageContent();
@@ -536,7 +524,7 @@ public class AlarmRecordServiceImpl implements IAlarmRecordService {
                     labMessageContent.setMessType(13);
                     labMessageContent.setSubIds(String.valueOf(QpUseRecord.getSubjectId()));
                     labMessageContent.setUserIds(userIdStr.toString());
-                    labMessageContent.setContent(systemText);
+                    labMessageContent.setContent(text);
                     remoteMessageContentService.sendMessage(labMessageContent);
                 }
                 if (timeout.contains("2")) {
@@ -544,9 +532,9 @@ public class AlarmRecordServiceImpl implements IAlarmRecordService {
                     String[] strings = Stream.of(phones.toString().split(",")).filter(a -> StrUtil.isNotBlank(a)).collect(Collectors.joining(",")).split(",");
                     if (strings != null) {
                         AlarmEntrty alarmEntrty = new AlarmEntrty(Routes.NoticePush, strings, SendTypes.SMS.toString(), text);
+                        alarmEntrty.setLogId(logId);
                         remoteAlarmService.send(alarmEntrty);
                         log.info("气瓶超时未归还发送短信打电话消息推送完成!");
-                        log.info("气瓶超时未归还发送短信内容:{}",text);
                     }
                 }
                 QpUseRecord qpUseRecord = new QpUseRecord();

+ 160 - 39
zd-modules/zd-algorithm/src/main/java/com/zd/alg/alarm/controller/AlarmController.java

@@ -1,15 +1,19 @@
 package com.zd.alg.alarm.controller;
 
 
+import com.alibaba.fastjson.JSON;
 import com.zd.alg.alarm.service.IAlarmLogService;
 import com.zd.alg.alarm.utils.AlarmUtil;
+import com.zd.algorithm.api.alarm.domain.UserPhoneInfo;
 import com.zd.algorithm.api.alarm.entity.AlarmEntrty;
 import com.zd.algorithm.api.alarm.entity.AlarmLog;
 import com.zd.algorithm.api.alarm.entity.SendTypes;
+import com.zd.base.api.feign.RemoteMessageService;
 import com.zd.common.core.annotation.PreAuthorize;
 import com.zd.common.core.utils.DateUtils;
 import com.zd.common.core.web.controller.BaseController;
-import com.zd.model.domain.AjaxResult;
+import com.zd.model.constant.HttpStatus;
+import com.zd.model.domain.ResultData;
 import com.zd.model.domain.per.PerFun;
 import com.zd.model.domain.per.PerPrefix;
 import com.zd.model.page.TableDataInfo;
@@ -17,8 +21,8 @@ import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("/alarm")
@@ -30,6 +34,9 @@ public class AlarmController extends BaseController {
     @Autowired
     private IAlarmLogService alarmLogService;
 
+    @Autowired
+    private RemoteMessageService remoteMessageService;
+
     /**
      * 查询算法结果列表
      * @return
@@ -44,48 +51,162 @@ public class AlarmController extends BaseController {
     }
 
     @PostMapping("/send")
-    public AjaxResult queryOption(@RequestBody AlarmEntrty alarmEntrty) {
-        Map<String, String> map = alarmUtil.sendPost(alarmEntrty);
-
-        String data = map.get("Reply");
-        if((SendTypes.Call + "").equals(alarmEntrty.getType()) || (SendTypes.All + "").equals(alarmEntrty.getType())){
-            if("OK".equals(data)) {
-                String[] phones = alarmEntrty.getTo();
-                for (String phone : phones) {
-                    AlarmLog alarmLog = new AlarmLog();
-                    alarmLog.setIsBack(1);
-                    alarmLog.setPhone(phone);
-                    alarmLog.setNotice(alarmEntrty.getText());
-                    alarmLog.setMethod("电话");
-                    alarmLog.setStatus("成功");
-                    alarmLog.setCreateTime(DateUtils.getNowDate());
-                    alarmLog.setUpdateTime(DateUtils.getNowDate());
+    public ResultData queryOption(@RequestBody AlarmEntrty alarmEntrty) {
+        if (alarmEntrty.getTo() == null || alarmEntrty.getTo().length == 0) {
+            logger.info("打电话发短信电话号码为空!");
+            return ResultData.fail("打电话发短信电话号码为空!");
+        }
+        //处理数据 短信拼装
+        String sendType = alarmEntrty.getType();
+        if((SendTypes.All.toString()).equals(sendType) || (SendTypes.Call.toString()).equals(sendType)){
+            //打电话
+            alarmEntrty.setType(SendTypes.Call.toString());
+            sendCall(alarmEntrty);
+        }
+        if((SendTypes.All.toString()).equals(sendType) || (SendTypes.SMS.toString()).equals(sendType) ){
+            //发短信
+            alarmEntrty.setType(SendTypes.SMS.toString());
+            sendSMS(alarmEntrty);
+        }
+        return ResultData.success("拨打电话发送短信完成!");
+//        Map<String, String> map = alarmUtil.sendPost(alarmEntrty);
+//        String data = map.get("Reply");
+//        if((SendTypes.Call + "").equals(alarmEntrty.getType()) || (SendTypes.All + "").equals(alarmEntrty.getType())){
+//            if("OK".equals(data)) {
+//                String[] phones = alarmEntrty.getTo();
+//                for (String phone : phones) {
+//                    AlarmLog alarmLog = new AlarmLog();
+//                    alarmLog.setKeyId(alarmLog.getKeyId());
+//                    alarmLog.setNickName();
+//                    alarmLog.setRoleName();
+//                    alarmLog.setIsBack(1);
+//                    alarmLog.setPhone(phone);
+//                    alarmLog.setNotice(alarmEntrty.getText());
+//                    alarmLog.setMethod("电话");
+//                    alarmLog.setStatus("成功");
+//                    alarmLog.setCreateTime(DateUtils.getNowDate());
+//                    alarmLog.setUpdateTime(DateUtils.getNowDate());
+//
+//                    alarmLogService.insertAlarmLog(alarmLog);
+//                }
+//                return AjaxResult.success();
+//            }else {
+//                String[] phones = alarmEntrty.getTo();
+//                for (String phone : phones) {
+//                    AlarmLog alarmLog = new AlarmLog();
+//                    alarmLog.setIsBack(1);
+//                    alarmLog.setPhone(phone);
+//                    alarmLog.setNotice(alarmEntrty.getText());
+//                    alarmLog.setMethod("电话");
+//                    alarmLog.setStatus("失败");
+//                    alarmLog.setRemark(data);
+//                    alarmLog.setCreateTime(DateUtils.getNowDate());
+//                    alarmLog.setUpdateTime(DateUtils.getNowDate());
+//
+//                    alarmLogService.insertAlarmLog(alarmLog);
+//                }
+//                return AjaxResult.error(data);
+//            }
+//        }else if((SendTypes.SMS + "").equals(alarmEntrty.getType())) {
+//            if ("OK".equals(data)) {
+//                return AjaxResult.success();
+//            }
+//        }
+    }
 
-                    alarmLogService.insertAlarmLog(alarmLog);
+    private void sendCall(AlarmEntrty alarmEntrty) {
+        Map map = alarmUtil.sendPost(alarmEntrty);
+        String data = (String) map.get("Reply");
+        List<UserPhoneInfo> userPhoneInfoList = alarmEntrty.getUserPhoneInfo();
+        LinkedHashMap<String, List<UserPhoneInfo>> userPhoneInfoMap = Optional.ofNullable(userPhoneInfoList).orElseGet(Collections::emptyList).stream().collect(Collectors.groupingBy(UserPhoneInfo::getPhone, LinkedHashMap::new, Collectors.toList()));
+        if ("OK".equals(data)) {
+            for (String phone : alarmEntrty.getTo()) {
+                AlarmLog alarmLog = new AlarmLog();
+                if (userPhoneInfoMap.size() > 0) {
+                    List<UserPhoneInfo> userPhoneInfos = userPhoneInfoMap.get(phone);
+                    alarmLog.setNickName(userPhoneInfos.get(0).getNickName());
+                    alarmLog.setRoleName(userPhoneInfos.get(0).getRole());
                 }
-                return AjaxResult.success();
-            }else {
-                String[] phones = alarmEntrty.getTo();
-                for (String phone : phones) {
-                    AlarmLog alarmLog = new AlarmLog();
-                    alarmLog.setIsBack(1);
-                    alarmLog.setPhone(phone);
-                    alarmLog.setNotice(alarmEntrty.getText());
-                    alarmLog.setMethod("电话");
-                    alarmLog.setStatus("失败");
-                    alarmLog.setRemark(data);
-                    alarmLog.setCreateTime(DateUtils.getNowDate());
-                    alarmLog.setUpdateTime(DateUtils.getNowDate());
-
-                    alarmLogService.insertAlarmLog(alarmLog);
+                alarmLog.setIsBack(0);
+                alarmLog.setMethod("电话");
+                alarmLog.setStatus("成功");
+                alarmLog.setPhone(phone);
+                alarmLog.setNotice(alarmEntrty.getText());
+                alarmLog.setCreateTime(DateUtils.getNowDate());
+                alarmLog.setKeyId(alarmEntrty.getLogId());
+                alarmLogService.insertAlarmLog(alarmLog);
+            }
+            logger.info("电话预警通知用户成功!===>>>{}", JSON.toJSONString(alarmEntrty.getTo()));
+        }else {
+            String[] phones = alarmEntrty.getTo();
+            for (String phone : phones) {
+                AlarmLog alarmLog = new AlarmLog();
+                if (userPhoneInfoMap.size() > 0) {
+                    List<UserPhoneInfo> userPhoneInfos = userPhoneInfoMap.get(phone);
+                    alarmLog.setNickName(userPhoneInfos.get(0).getNickName());
+                    alarmLog.setRoleName(userPhoneInfos.get(0).getRole());
                 }
-                return AjaxResult.error(data);
+                alarmLog.setIsBack(0);
+                alarmLog.setPhone(phone);
+                alarmLog.setNotice(alarmEntrty.getText());
+                alarmLog.setMethod("电话");
+                alarmLog.setStatus("失败");
+                alarmLog.setCreateTime(DateUtils.getNowDate());
+                alarmLog.setUpdateTime(DateUtils.getNowDate());
+                alarmLog.setKeyId(alarmEntrty.getLogId());
+                alarmLogService.insertAlarmLog(alarmLog);
             }
-        }else if((SendTypes.SMS + "").equals(alarmEntrty.getType())) {
+            logger.info("电话预警通知用户失败!===>>>{}", JSON.toJSONString(alarmEntrty.getTo()));
+        }
+    }
+
+    private void sendSMS(AlarmEntrty alarmEntrty) {
+        List<UserPhoneInfo> userPhoneInfoList = alarmEntrty.getUserPhoneInfo();
+        LinkedHashMap<String, List<UserPhoneInfo>> userPhoneInfoMap = Optional.ofNullable(userPhoneInfoList).orElseGet(Collections::emptyList).stream().collect(Collectors.groupingBy(UserPhoneInfo::getPhone, LinkedHashMap::new, Collectors.toList()));
+        for (String phone : alarmEntrty.getTo()) {
+            ResultData urlScheme = remoteMessageService.getUrlScheme(alarmEntrty.getLogId());
+            if (urlScheme.getCode() != HttpStatus.SUCCESS) {
+                logger.error("获取urlScheme失败!");
+            }
+            String text = alarmEntrty.getText();
+            text = text + "https://lab.zjznai.com/labAppTest/earlyWarning/index.html?id=?id=" + alarmEntrty.getLogId() + "&urlScheme=" + urlScheme.getData();
+            alarmEntrty.setText(text);
+            alarmEntrty.setTo(new String[]{phone});
+            logger.info("发送给用户===>>>{},短信内容===>>>{}",phone,text);
+            //发送短信
+            Map map = alarmUtil.sendPost(alarmEntrty);
+            String data = (String) map.get("Reply");
+            AlarmLog alarmLog = new AlarmLog();
             if ("OK".equals(data)) {
-                return AjaxResult.success();
+                if (userPhoneInfoMap.size() > 0) {
+                    List<UserPhoneInfo> userPhoneInfos = userPhoneInfoMap.get(phone);
+                    alarmLog.setNickName(userPhoneInfos.get(0).getNickName());
+                    alarmLog.setRoleName(userPhoneInfos.get(0).getRole());
+                }
+                alarmLog.setIsBack(0);
+                alarmLog.setMethod("电话");
+                alarmLog.setStatus("成功");
+                alarmLog.setPhone(phone);
+                alarmLog.setNotice(alarmEntrty.getText());
+                alarmLog.setCreateTime(DateUtils.getNowDate());
+                alarmLog.setKeyId(alarmEntrty.getLogId());
+                alarmLogService.insertAlarmLog(alarmLog);
+            } else {
+                if (userPhoneInfoMap.size() > 0) {
+                    List<UserPhoneInfo> userPhoneInfos = userPhoneInfoMap.get(phone);
+                    alarmLog.setNickName(userPhoneInfos.get(0).getNickName());
+                    alarmLog.setRoleName(userPhoneInfos.get(0).getRole());
+                }
+                alarmLog.setIsBack(0);
+                alarmLog.setPhone(phone);
+                alarmLog.setNotice(alarmEntrty.getText());
+                alarmLog.setMethod("电话");
+                alarmLog.setStatus("失败");
+                alarmLog.setCreateTime(DateUtils.getNowDate());
+                alarmLog.setUpdateTime(DateUtils.getNowDate());
+                alarmLog.setKeyId(alarmEntrty.getLogId());
+                alarmLogService.insertAlarmLog(alarmLog);
             }
         }
-        return AjaxResult.error("报警发送错误:" + data);
     }
 }

+ 75 - 57
zd-modules/zd-algorithm/src/main/java/com/zd/alg/mqtt/MqttConfig.java

@@ -1,16 +1,14 @@
 package com.zd.alg.mqtt;
 
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
 import com.zd.alg.alarm.service.IAlarmLogService;
 import com.zd.alg.alarm.utils.AlarmUtil;
 import com.zd.algorithm.api.alarm.domain.UserPhoneInfo;
 import com.zd.algorithm.api.alarm.entity.AlarmEntrty;
 import com.zd.algorithm.api.alarm.entity.AlarmLog;
 import com.zd.algorithm.api.alarm.entity.Routes;
-import com.zd.algorithm.api.alarm.entity.SendTypes;
+import com.zd.base.api.feign.RemoteMessageService;
 import com.zd.common.core.utils.DateUtils;
-import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
 import org.slf4j.Logger;
@@ -27,14 +25,15 @@ import org.springframework.integration.mqtt.core.MqttPahoClientFactory;
 import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter;
 import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler;
 import org.springframework.integration.mqtt.support.DefaultPahoMessageConverter;
-import org.springframework.integration.mqtt.support.MqttHeaders;
 import org.springframework.messaging.Message;
 import org.springframework.messaging.MessageChannel;
 import org.springframework.messaging.MessageHandler;
 import org.springframework.messaging.MessagingException;
 
-import java.util.*;
-import java.util.stream.Collectors;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
 
 /**
  * mqtt配置
@@ -49,6 +48,9 @@ public class MqttConfig {
     @Autowired
     private IAlarmLogService alarmLogService;
 
+    @Autowired
+    private RemoteMessageService remoteMessageService;
+
     static Logger logger = LoggerFactory.getLogger(MqttConfig.class);
 
     private static final byte[] WILL_DATA;
@@ -174,58 +176,74 @@ public class MqttConfig {
         return new MessageHandler() {
             @Override
             public void handleMessage(Message<?> message) throws MessagingException {
-                logger.info("预警消息接收内容: message={}", message);
-                String receivedTopic = (String) message.getHeaders().get(MqttHeaders.RECEIVED_TOPIC);
-                String msg = (String) message.getPayload();
-                try {
-                    String type = SendTypes.All + "";
-                    Map<String, Object> map = JSON.parseObject(msg, Map.class);
-                    Long GroupId = Long.valueOf(String.valueOf(map.get("messageId")));
-                    map = JSON.parseObject(map.get("data") + "", Map.class);
-                    List<UserPhoneInfo> userPhoneInfo = JSONArray.parseArray(JSON.toJSONString(map.get("userPhoneInfo")), UserPhoneInfo.class);
-                    LinkedHashMap<String, List<UserPhoneInfo>> userPhoneInfoMap = userPhoneInfo.stream().collect(Collectors.groupingBy(UserPhoneInfo::getPhone, LinkedHashMap::new, Collectors.toList()));
-                    String text = (String) map.get("text");
-                    List<String> list = JSON.parseArray(map.get("to") + "", String.class);
-                    if (CollectionUtils.isEmpty(list)) {
-                        logger.error("接收告警消息手机号为空!");
-                        return;
-                    }
-
-                    Set<String> set = new HashSet<>(list);
-                    String[] to = new String[set.size()];
-                    set.toArray(to);
-                    String dataType = (String) map.get("type");
-                    if (map.get("type") != null && ((SendTypes.All + "").equals(dataType) || (SendTypes.Call + "").equals(dataType) || (SendTypes.SMS + "").equals(dataType))) {
-                        type = dataType;
-                    }
-
-                    AlarmEntrty alarmEntrty = new AlarmEntrty(Routes.NoticePush, to, type, text);
-                    map = alarmUtil.sendPost(alarmEntrty);
-                    String data = (String) map.get("Reply");
-                    if ("OK".equals(data)) {
-                        String[] phones = alarmEntrty.getTo();
-                        for (String phone : phones) {
-                            List<UserPhoneInfo> userPhoneInfos = userPhoneInfoMap.get(phone);
-                            AlarmLog alarmLog = new AlarmLog();
-                            alarmLog.setRemark("预案ID/实验室ID: " + receivedTopic.replace(defaultTopic, ""));
-                            alarmLog.setIsBack(0);
-                            alarmLog.setStatus("失败");
-                            alarmLog.setPhone(phone);
-                            alarmLog.setNotice(alarmEntrty.getText());
-                            alarmLog.setCreateTime(DateUtils.getNowDate());
-                            alarmLog.setKeyId(GroupId);
-                            alarmLog.setNickName(userPhoneInfos.get(0).getNickName());
-                            alarmLog.setRoleName(userPhoneInfos.get(0).getRole());
-                            logger.info("写入数据~~~~~~~~~~~~");
-                            alarmLogService.insertAlarmLog(alarmLog);
-                        }
-                    } else {
-                        logger.error("报警电话推送错误:" + JSON.toJSONString(map));
-                    }
-                } catch (Exception e) {
-                    logger.error("报警处理数据异常:{}", e);
-                }
+                // TODO 不使用mqtt方式打电话发短信,测试完成之后删除该代码
+//                logger.info("预警消息接收内容: message={}", message);
+//                String receivedTopic = (String) message.getHeaders().get(MqttHeaders.RECEIVED_TOPIC);
+//                String msg = (String) message.getPayload();
+//                try {
+//                    String type = SendTypes.All + "";
+//                    Map<String, Object> map = JSON.parseObject(msg, Map.class);
+//                    Long logId = Long.valueOf(String.valueOf(map.get("messageId")));
+//                    map = JSON.parseObject(map.get("data") + "", Map.class);
+//                    List<UserPhoneInfo> userPhoneInfo = JSONArray.parseArray(JSON.toJSONString(map.get("userPhoneInfo")), UserPhoneInfo.class);
+//                    LinkedHashMap<String, List<UserPhoneInfo>> userPhoneInfoMap = userPhoneInfo.stream().collect(Collectors.groupingBy(UserPhoneInfo::getPhone, LinkedHashMap::new, Collectors.toList()));
+//                    String text = (String) map.get("text");
+//                    List<String> list = JSON.parseArray(map.get("to") + "", String.class);
+//                    if (CollectionUtils.isEmpty(list)) {
+//                        logger.error("接收告警消息手机号为空!");
+//                        return;
+//                    }
+//
+//                    Set<String> set = new HashSet<>(list);
+//                    String[] to = new String[set.size()];
+//                    set.toArray(to);
+//                    String dataType = (String) map.get("type");
+//
+//                    if((SendTypes.All + "").equals(dataType) || (SendTypes.Call + "").equals(dataType)){
+//                        //打电话
+//                        String callText = text.substring(0,text.indexOf("https"));
+//                        type = SendTypes.Call + "";
+//                        callAndSMS(receivedTopic, type, logId, userPhoneInfoMap, callText, to);
+//                    }
+//                    if((SendTypes.All + "").equals(dataType) || (SendTypes.SMS + "").equals(dataType) ){
+//                        //发短信
+//                        ResultData urlScheme = remoteMessageService.getUrlScheme(logId);
+//                        if (urlScheme.getCode() != HttpStatus.SUCCESS) {
+//                            logger.error("获取urlScheme失败!");
+//                        }
+//                        type = SendTypes.SMS + "";
+//                        callAndSMS(receivedTopic, type, logId, userPhoneInfoMap, text, to);
+//                    }
+//                } catch (Exception e) {
+//                    logger.error("报警处理数据异常:{}", e);
+//                }
             }
         };
     }
+
+    private void callAndSMS(String receivedTopic, String type, Long logId, LinkedHashMap<String, List<UserPhoneInfo>> userPhoneInfoMap, String text, String[] to) {
+        Map<String, Object> map;
+        AlarmEntrty alarmEntrty = new AlarmEntrty(Routes.NoticePush, to, type, text);
+        map = alarmUtil.sendPost(alarmEntrty);
+        String data = (String) map.get("Reply");
+        if ("OK".equals(data)) {
+            for (String phone : to) {
+                List<UserPhoneInfo> userPhoneInfos = userPhoneInfoMap.get(phone);
+                AlarmLog alarmLog = new AlarmLog();
+                alarmLog.setRemark("预案ID/实验室ID: " + receivedTopic.replace(defaultTopic, ""));
+                alarmLog.setIsBack(0);
+                alarmLog.setStatus("失败");
+                alarmLog.setPhone(phone);
+                alarmLog.setNotice(text);
+                alarmLog.setCreateTime(DateUtils.getNowDate());
+                alarmLog.setKeyId(logId);
+                alarmLog.setNickName(userPhoneInfos.get(0).getNickName());
+                alarmLog.setRoleName(userPhoneInfos.get(0).getRole());
+                logger.info("写入数据~~~~~~~~~~~~");
+                alarmLogService.insertAlarmLog(alarmLog);
+            }
+        } else {
+            logger.error("报警电话推送错误:" + JSON.toJSONString(map));
+        }
+    }
 }

+ 16 - 31
zd-modules/zd-chemical/src/main/java/com/zd/chemical/service/impl/HxpStockServiceImpl.java

@@ -361,12 +361,6 @@ public class HxpStockServiceImpl implements IHxpStockService {
             logger.info("无标签信息!");
             return false;
         }
-
-//        Date d = cacheMap.get(rfidCode);
-//        if (d != null && DateUtil.compare(DateUtil.offsetSecond(d, interval), DateUtils.getNowDate()) > 0) {
-//            return false;
-//        }
-
         logger.info("RFID 实时检测 RFIDCheck(标签编号): " + rfidCode);
         HxpStock hxpStock = hxpStockMapper.selectByRfidCode(rfidCode);
         if (hxpStock == null) {
@@ -454,8 +448,7 @@ public class HxpStockServiceImpl implements IHxpStockService {
                 if (urlScheme.getCode() != HttpStatus.SUCCESS) {
                     logger.error("获取urlScheme失败!");
                 }
-                String systemText = "【实验室安全系统】" + warningNoticeLogDto.getSubName() + "-实验人员违规携带" + warningNoticeLogDto.getName() + "离开房间,发生时间:" + LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss") + ",请尽快确认。";
-                String text = "【实验室安全系统】" + warningNoticeLogDto.getSubName() + "-实验人员违规携带" + warningNoticeLogDto.getName() + "离开房间,发生时间:" + LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss") + ",请尽快确认。点击查看:https://lab.zjznai.com/labAppTest/earlyWarning/index.html?id=" + logId + "&urlScheme=" + urlScheme.getData();
+                String text = "【实验室安全系统】" + warningNoticeLogDto.getSubName() + "-实验人员违规携带" + warningNoticeLogDto.getName() + "离开房间,发生时间:" + LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss") + ",请尽快确认。";
                 //系统通知
                 if (illegalRemoval.contains("1")) {
                     LabMessageContent labMessageContent = new LabMessageContent();
@@ -465,7 +458,7 @@ public class HxpStockServiceImpl implements IHxpStockService {
                     labMessageContent.setMessType(13);
                     labMessageContent.setSubIds(String.valueOf(hxpStock.getSubId()));
                     labMessageContent.setUserIds(userIdStr.toString());
-                    labMessageContent.setContent(systemText);
+                    labMessageContent.setContent(text);
                     remoteMessageContentService.sendMessage(labMessageContent);
 
                 }
@@ -475,9 +468,9 @@ public class HxpStockServiceImpl implements IHxpStockService {
                     String[] strings = Stream.of(phones.toString().split(",")).filter(a -> StrUtil.isNotBlank(a)).collect(Collectors.joining(",")).split(",");
                     if (strings != null) {
                         AlarmEntrty alarmEntrty = new AlarmEntrty(Routes.NoticePush, strings, SendTypes.SMS.toString(), text);
+                        alarmEntrty.setLogId(logId);
                         remoteAlarmService.send(alarmEntrty);
                         logger.info("化学品违规带离发送短信打电话消息推送完成!");
-                        logger.info("化学品违规带离发送短信内容:{}",text);
                     }
                 }
                 if (hardwareRfidDto != null && illegalRemoval.contains("3")) {
@@ -1114,14 +1107,14 @@ public class HxpStockServiceImpl implements IHxpStockService {
             if (HttpStatus.SUCCESS == result.getCode()) {
                 logger.info("即将过期保存日志成功!");
             }
+            Long logId = (Long) result.getData();
             ResultData urlScheme = remoteMessageService.getUrlScheme(Long.valueOf(String.valueOf(result.getData())));
             if (urlScheme.getCode() != HttpStatus.SUCCESS) {
                 logger.error("获取urlScheme失败!");
             }
-            String systemText = "【实验室安全系统】" + warningNoticeLogDto.getSubName() + "-" + warningNoticeLogDto.getName() + "即将过期,发生时间:" + LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss") + ",请尽快确认。";
-            String text = "【实验室安全系统】" + warningNoticeLogDto.getSubName() + "-" + warningNoticeLogDto.getName() + "即将过期,发生时间:" + LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss") + ",请尽快确认。点击查看:https://lab.zjznai.com/labAppTest/earlyWarning/index.html?id=" + result.getData() + "&urlScheme=" + urlScheme.getData();
+            String text = "【实验室安全系统】" + warningNoticeLogDto.getSubName() + "-" + warningNoticeLogDto.getName() + "即将过期,发生时间:" + LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss") + ",请尽快确认。";
             //发送通知
-            sendNotice(hxpStock, userIdStr, phones, warningConfigDto.getUnexpired(), systemText, text);
+            sendNotice(hxpStock, userIdStr, phones, warningConfigDto.getUnexpired(),text,logId);
         });
     }
 
@@ -1174,14 +1167,10 @@ public class HxpStockServiceImpl implements IHxpStockService {
             if (HttpStatus.SUCCESS == result.getCode()) {
                 logger.info("已过期保存日志成功!");
             }
-            ResultData urlScheme = remoteMessageService.getUrlScheme(Long.valueOf(String.valueOf(result.getData())));
-            if(urlScheme.getCode() != HttpStatus.SUCCESS){
-                logger.error("获取urlScheme失败!");
-            }
-            String systemText =  "【实验室安全系统】"+warningNoticeLogDto.getSubName()+"-"+warningNoticeLogDto.getName()+"已过期,请尽快确认。";
-            String text =  "【实验室安全系统】"+warningNoticeLogDto.getSubName()+"-"+warningNoticeLogDto.getName()+"已过期,请尽快确认。点击查看:https://lab.zjznai.com/labAppTest/earlyWarning/index.html?id="+result.getData()+"&urlScheme="+urlScheme.getData();
+            Long logId = (Long)result.getData();
+            String text =  "【实验室安全系统】"+warningNoticeLogDto.getSubName()+"-"+warningNoticeLogDto.getName()+"已过期,请尽快确认。";
             //发送通知
-            sendNotice(hxpStock, userIdStr, phones, warningConfigDto.getExpired(), systemText, text);
+            sendNotice(hxpStock, userIdStr, phones, warningConfigDto.getExpired(), text, logId);
         });
 
         List<Long> stockIds = expiredStock.stream().filter(i -> 1 == i.getStatus()).map(HxpStockVO::getId).collect(Collectors.toList());
@@ -1194,7 +1183,7 @@ public class HxpStockServiceImpl implements IHxpStockService {
         }
     }
 
-    private void sendNotice(HxpStockVO hxpStock, StringBuffer userIdStr, StringBuffer phones, String expired, String systemText, String text) {
+    private void sendNotice(HxpStockVO hxpStock, StringBuffer userIdStr, StringBuffer phones, String expired,String text,Long logId) {
         if (expired.contains("1")) {
             //系统通知
             LabMessageContent labMessageContent = new LabMessageContent();
@@ -1204,7 +1193,7 @@ public class HxpStockServiceImpl implements IHxpStockService {
             labMessageContent.setMessType(13);
             labMessageContent.setSubIds(String.valueOf(hxpStock.getSubId()));
             labMessageContent.setUserIds(userIdStr.toString());
-            labMessageContent.setContent(systemText);
+            labMessageContent.setContent(text);
             remoteMessageContentService.sendMessage(labMessageContent);
         }
         if (expired.contains("2")) {
@@ -1212,9 +1201,9 @@ public class HxpStockServiceImpl implements IHxpStockService {
             String[] strings = Stream.of(phones.toString().split(",")).filter(a -> StrUtil.isNotBlank(a)).collect(Collectors.joining(",")).split(",");
             if (strings != null) {
                 AlarmEntrty alarmEntrty = new AlarmEntrty(Routes.NoticePush, strings, SendTypes.SMS.toString(), text);
+                alarmEntrty.setLogId(logId);
                 remoteAlarmService.send(alarmEntrty);
                 logger.info("化学品已过期发送短信打电话消息推送完成!");
-                logger.info("化学品已过期发送短信内容:{}", text);
             }
         }
     }
@@ -1290,12 +1279,8 @@ public class HxpStockServiceImpl implements IHxpStockService {
                     if (HttpStatus.SUCCESS == result.getCode()) {
                         logger.info("化学品超时未归还保存日志成功!");
                     }
-                    ResultData urlScheme = remoteMessageService.getUrlScheme(Long.valueOf(String.valueOf(result.getData())));
-                    if(urlScheme.getCode() != HttpStatus.SUCCESS){
-                        logger.error("获取urlScheme失败!");
-                    }
-                    String systemText ="【实验室安全系统】"+warningNoticeLogDto.getSubName()+"-"+warningNoticeLogDto.getApply()+"领用"+warningNoticeLogDto.getName()+"超时未归还,领用时间:"+LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss") +",请尽快确认。";
-                    String text = "【实验室安全系统】"+warningNoticeLogDto.getSubName()+"-"+warningNoticeLogDto.getApply()+"领用"+warningNoticeLogDto.getName()+"超时未归还,领用时间:"+LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss")+",请尽快确认。点击查看:https://lab.zjznai.com/labAppTest/earlyWarning/index.html?id="+result.getData()+"&urlScheme="+ urlScheme.getData();
+                    Long logId = (Long) result.getData();
+                    String text ="【实验室安全系统】"+warningNoticeLogDto.getSubName()+"-"+warningNoticeLogDto.getApply()+"领用"+warningNoticeLogDto.getName()+"超时未归还,领用时间:"+LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss") +",请尽快确认。";
                     if (timeout.contains("1")) {
                         //系统通知
                         LabMessageContent labMessageContent = new LabMessageContent();
@@ -1305,7 +1290,7 @@ public class HxpStockServiceImpl implements IHxpStockService {
                         labMessageContent.setMessType(13);
                         labMessageContent.setSubIds(String.valueOf(hxpStock.getSubId()));
                         labMessageContent.setUserIds(userIdStr.toString());
-                        labMessageContent.setContent(systemText);
+                        labMessageContent.setContent(text);
                         remoteMessageContentService.sendMessage(labMessageContent);
                     }
                     if (timeout.contains("2")) {
@@ -1313,9 +1298,9 @@ public class HxpStockServiceImpl implements IHxpStockService {
                         String[] strings = Stream.of(phones.toString().split(",")).filter(a -> StrUtil.isNotBlank(a)).collect(Collectors.joining(",")).split(",");
                         if (strings != null) {
                             AlarmEntrty alarmEntrty = new AlarmEntrty(Routes.NoticePush, strings, SendTypes.SMS.toString(), text);
+                            alarmEntrty.setLogId(logId);
                             remoteAlarmService.send(alarmEntrty);
                             logger.info("化学品超时未归还发送短信打电话消息推送完成!");
-                            logger.info("化学品超时未归还发送短信内容:{}",text);
                         }
                     }
                 }

+ 52 - 12
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/event/RedisExpiredPhotographListener.java

@@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zd.algorithm.api.alarm.domain.UserPhoneInfo;
 import com.zd.algorithm.api.alarm.entity.AlarmEntrty;
 import com.zd.algorithm.api.alarm.entity.Routes;
 import com.zd.algorithm.api.alarm.entity.SendTypes;
@@ -25,14 +26,18 @@ import com.zd.laboratory.domain.LabHardware;
 import com.zd.laboratory.domain.WarningConfig;
 import com.zd.laboratory.domain.WarningDetail;
 import com.zd.laboratory.domain.WarningNoticeLog;
+import com.zd.laboratory.domain.vo.LabSubjectVO;
 import com.zd.laboratory.service.*;
 import com.zd.model.constant.BaseConstants;
 import com.zd.model.constant.HttpStatus;
 import com.zd.model.domain.R;
 import com.zd.model.domain.ResultData;
 import com.zd.model.entity.SysFile;
+import com.zd.model.entity.SysUser;
+import com.zd.system.api.feign.RemoteUserService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.connection.Message;
@@ -97,6 +102,12 @@ public class RedisExpiredPhotographListener extends KeyExpirationEventMessageLis
     @Autowired
     private RemoteMessageService remoteMessageService;
 
+    @Autowired
+    private ILabSubjectAccessRecordService subjectAccessRecordService;
+
+    @Autowired
+    private RemoteUserService remoteUserService;
+
     private final String testFormat = "【实验室安全智能】{}发生{}{}";
     private final String streamUrlFormat = "rtsp://admin:hk123456@{}:554/h264/ch1/main/av_stream";
 
@@ -116,7 +127,7 @@ public class RedisExpiredPhotographListener extends KeyExpirationEventMessageLis
     public void onMessage(Message message, byte[] bytes) {
         String key = new String(message.getBody());
         if (key.indexOf(BaseConstants.PHOTOGRAPH_QUEUE) != -1) {
-            log.info("预警异常,缓存信息:" + key);
+            log.info("未穿戴实验服预警缓存信息===>>>{}",key);
             String[] keyStr = key.split("~");
             WarningNoticeLog warningNoticeLog = JSON.parseObject(JSON.toJSONString(JSON.parseObject(keyStr[1]).getJSONObject(BaseConstants.PHOTOGRAPH_QUEUE)), WarningNoticeLog.class);
             //调用拍摄照片接口
@@ -139,7 +150,6 @@ public class RedisExpiredPhotographListener extends KeyExpirationEventMessageLis
                 if (HttpStatus.SUCCESS != resultData.getCode()) {
                 //算法调用 默认返回成功!
                 //if (HttpStatus.SUCCESS != 200) {
-                    log.error("调用算法服务失败!{}",resultData);
                     return;
                 }
                 AlgorithmWarningVo algorithmWarningVo = JSON.parseObject(JSONObject.toJSONString(resultData.getData()), AlgorithmWarningVo.class);
@@ -170,7 +180,7 @@ public class RedisExpiredPhotographListener extends KeyExpirationEventMessageLis
                 WarningConfig warningConfig = warningConfigService.getOne(new LambdaQueryWrapper<WarningConfig>().eq(WarningConfig::getWarningType, 1));
                 Integer anomalyCount = warningConfig.getAnomalyCount();
                 String lastKey = key.substring(0,key.lastIndexOf("~")) +"~"+ (anomalyCount - 1);
-                log.info("lastKey = {},大于0则修改日志删除状态!",lastKey);
+                log.info("最后一个缓存key = {},大于0则修改日志删除状态!",lastKey);
                 if (!redisService.hasKey(lastKey)) {
                     log.info("进入最后一次循环!");
                     //如果没有这个key了 则统计异常率
@@ -210,12 +220,7 @@ public class RedisExpiredPhotographListener extends KeyExpirationEventMessageLis
 
                             //是否通知
                             StringBuffer warningWay = new StringBuffer();
-                            ResultData urlScheme = remoteMessageService.getUrlScheme(warningNoticeLog.getId());
-                            if(urlScheme.getCode() != HttpStatus.SUCCESS){
-                                log.error("获取urlScheme失败!");
-                            }
-                            String systemText = "【实验室安全系统】"+warningNoticeLog.getSubName()+"-监测到实验人员违规未穿戴实验服,请尽快确认。";
-                            String text = "【实验室安全系统】"+warningNoticeLog.getSubName()+"-监测到实验人员违规未穿戴实验服,请尽快确认。点击查看:https://lab.zjznai.com/labAppTest/earlyWarning/index.html?id="+warningNoticeLog.getId()+"&urlScheme="+urlScheme.getData();
+                            String text = "【实验室安全系统】"+warningNoticeLog.getSubName()+"-监测到实验人员违规未穿戴实验服,请尽快确认。";
                             WarningNoticeLogDto warningNoticeLogDto2 = new WarningNoticeLogDto();
                             //系统 短信 语音通知
                             long noticeCount = warningNoticeLogService.count(new LambdaQueryWrapper<WarningNoticeLog>().eq(WarningNoticeLog::getSubId, warningNoticeLog.getSubId())
@@ -231,19 +236,22 @@ public class RedisExpiredPhotographListener extends KeyExpirationEventMessageLis
                                 labMessageContent.setMessType(13);
                                 labMessageContent.setSubIds(String.valueOf(warningNoticeLog.getSubId()));
                                 labMessageContent.setUserIds(userIds.toString());
-                                labMessageContent.setContent(systemText);
+                                labMessageContent.setContent(text);
                                 labMessageContentService.sendMessage(labMessageContent);
                             }
                             long l1 = noticeCount % warningConfig.getMessageNotice();
                             if (warningConfig.getMessageNotice() != null && l1 == 0) {
                                 //短信通知
                                 warningWay.append("2,");
+                                //获取人员电话信息
+                                List<UserPhoneInfo> userPhoneInfoList = getUserPhoneInfos(warningNoticeLog.getSubId());
                                 String[] strings = Stream.of(phones.toString().split(",")).filter(a -> StrUtil.isNotBlank(a)).collect(Collectors.joining(",")).split(",");
                                 if (strings != null) {
                                     AlarmEntrty alarmEntrty = new AlarmEntrty(Routes.NoticePush, strings, SendTypes.SMS.toString(), text);
+                                    alarmEntrty.setUserPhoneInfo(userPhoneInfoList);
+                                    alarmEntrty.setLogId(warningNoticeLog.getId());
                                     remoteAlarmService.send(alarmEntrty);
                                     log.info("未穿戴实验服发送短信打电话消息推送完成!");
-                                    log.info("未穿戴实验服发送短信内容:{}",text);
                                 }
                             }
                             long l2 = noticeCount % warningConfig.getVoiceNotcie();
@@ -272,7 +280,7 @@ public class RedisExpiredPhotographListener extends KeyExpirationEventMessageLis
                                         }
                                     }
                                     log.info("打开喇叭-远程调用喇叭播放音乐,playVoList={}", JSON.toJSONString(playVoList));
-                                    R r = remoteSpeakService.textParseUrlIps(systemText, playVoList);
+                                    R r = remoteSpeakService.textParseUrlIps(text, playVoList);
                                     log.info("打开喇叭-远程调用喇叭播放音乐返回信息:{}", JSON.toJSONString(r));
                                 }
                             }
@@ -287,7 +295,39 @@ public class RedisExpiredPhotographListener extends KeyExpirationEventMessageLis
                         }
                     }
                 }
+            }else {
+                log.info("未查询到穿戴识别摄像头!");
+            }
+        }
+    }
+
+    @NotNull
+    private List<UserPhoneInfo> getUserPhoneInfos(Long subId) {
+        LabSubjectVO subject = labSubjectService.selectLabSubjectVoById(subId);
+        List<UserPhoneInfo> userPhoneInfoList = new ArrayList<>();
+        R<SysUser> sysUserR = remoteUserService.getUserByPhone(subject.getAdminPhone());
+        if (HttpStatus.SUCCESS != sysUserR.getCode()) {
+            log.error("手机号码为:{}用户不存在!", subject.getAdminPhone());
+        }
+        UserPhoneInfo userPhoneInfo = new UserPhoneInfo();
+        userPhoneInfo.setPhone(subject.getAdminPhone());
+        userPhoneInfo.setNickName(sysUserR.getData().getNickName());
+        userPhoneInfo.setRole("实验室负责人");
+        userPhoneInfoList.add(userPhoneInfo);
+        String[] split = subject.getSafeUserPhone().split(",");
+        if(split != null && split.length >0){
+            for (String phoneNumber : split) {
+                R<SysUser> result = remoteUserService.getUserByPhone(phoneNumber);
+                if (HttpStatus.SUCCESS != result.getCode()) {
+                    log.error("手机号码为:{}用户不存在!",phoneNumber);
+                }
+                UserPhoneInfo userPhoneInfo1 = new UserPhoneInfo();
+                userPhoneInfo1.setPhone(phoneNumber);
+                userPhoneInfo1.setNickName(result.getData().getNickName());
+                userPhoneInfo1.setRole("安全责任人");
+                userPhoneInfoList.add(userPhoneInfo1);
             }
         }
+        return userPhoneInfoList;
     }
 }

+ 49 - 46
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabMessageContentServiceImpl.java

@@ -1,6 +1,5 @@
 package com.zd.laboratory.service.impl;
 
-import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
@@ -17,15 +16,16 @@ import com.zd.common.core.utils.SaveUtil;
 import com.zd.common.core.utils.SecurityUtils;
 import com.zd.laboratory.api.entity.LabMessageContent;
 import com.zd.laboratory.api.entity.SubAddrr;
-import com.zd.laboratory.domain.*;
+import com.zd.laboratory.domain.LabRiskPlanAbnormalGroup;
+import com.zd.laboratory.domain.LabRiskPlanLevel;
+import com.zd.laboratory.domain.LabSubject;
+import com.zd.laboratory.domain.WarningNoticeLog;
 import com.zd.laboratory.domain.dto.LabMessageContentDTO;
 import com.zd.laboratory.domain.dto.LabMessageContentListQuery;
 import com.zd.laboratory.domain.vo.LabMessageContentVO;
 import com.zd.laboratory.domain.vo.LabSubjectAccessRecordVo;
 import com.zd.laboratory.domain.vo.LabSubjectVO;
 import com.zd.laboratory.mapper.*;
-import com.zd.laboratory.mqtt.entiy.MessageBody;
-import com.zd.laboratory.mqtt.enums.SendMode;
 import com.zd.laboratory.mqtt.service.impl.CommonSend;
 import com.zd.laboratory.service.*;
 import com.zd.model.constant.HttpStatus;
@@ -117,7 +117,7 @@ public class LabMessageContentServiceImpl implements ILabMessageContentService {
 
     private final String smsFormat = "{}: {},发生风险预案,{}";
     private final String smsFormatString = "【实验室安全智能】{}发生{}{}";
-    private final String smsFormatString2 = "【实验室安全系统】{}-{}数值异常,请立即核实处理:{}";
+    private final String smsFormatString2 = "【实验室安全系统】{}-{}数值异常,请立即核实处理:";
 
     /**
      * 查询消息发布
@@ -282,29 +282,29 @@ public class LabMessageContentServiceImpl implements ILabMessageContentService {
 
 //        String format = StrUtil.format(smsFormat, deptName, subject.getName(), StrUtil.isBlank(labRiskPlanLevel.getMessage()) ? labRiskPlanLevel.getRiskName() : labRiskPlanLevel.getMessage());
 //        String format = StrUtil.format(smsFormatString, labRiskPlanLevel.getTopName(), labRiskPlanLevel.getRiskName(), StrUtil.isBlank(labRiskPlanLevel.getMessage()) ? "" : labRiskPlanLevel.getMessage());
-        String format = StrUtil.format(smsFormatString2, labRiskPlanLevel.getTopName(), labRiskPlanLevel.getRiskName(), "https://lab.zjznai.com/labAppTest/earlyWarning/index.html?id=" + logId + "&urlScheme=" + urlScheme.getData());
+        String format = StrUtil.format(smsFormatString2, labRiskPlanLevel.getTopName(), labRiskPlanLevel.getRiskName());
         logger.info("new format = {}",format);
-        String phone = null;
-        String userids = null;
-        try {
-            userids = getDoingUserId(subject);
-            if (StrUtil.isNotBlank(userids)) {
-
-                R<List<String>> phoneByUserIDS = remoteUserService.getPhoneByUserIDS(userids);
-                if (phoneByUserIDS.getCode() == 200 && CollUtil.isNotEmpty(phoneByUserIDS.getData())) {
-                    phone = phoneByUserIDS.getData().stream()
-                            .collect(Collectors.joining(","));
-
-                }
-
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            logger.error("获取实验室内部短信发送人出错");
-        }
+//        String phone = null;
+//        String userids = null;
+//        try {
+//            userids = getDoingUserId(subject);
+//            if (StrUtil.isNotBlank(userids)) {
+//                 userids = getDoingUserId(subject);
+//                R<List<String>> phoneByUserIDS = remoteUserService.getPhoneByUserIDS(userids);
+//                if (phoneByUserIDS.getCode() == 200 && CollUtil.isNotEmpty(phoneByUserIDS.getData())) {
+//                    phone = phoneByUserIDS.getData().stream()
+//                            .collect(Collectors.joining(","));
+//
+//                }
+//
+//            }
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//            logger.error("获取实验室内部短信发送人出错");
+//        }
         //获取人员电话信息
-        List<UserPhoneInfo> userPhoneInfoList = getUserPhoneInfos(subject, phone);
-        String[] strings = Stream.of(new String[]{subject.getAdminPhone(), subject.getSafeUserPhone(), phone})
+        List<UserPhoneInfo> userPhoneInfoList = getUserPhoneInfos(subject);
+        String[] strings = Stream.of(new String[]{subject.getAdminPhone(), subject.getSafeUserPhone()})
                 .filter(a -> StrUtil.isNotBlank(a))
                 .collect(Collectors.joining(","))
                 .split(",");
@@ -323,16 +323,19 @@ public class LabMessageContentServiceImpl implements ILabMessageContentService {
                     alarmEntrty = new AlarmEntrty(Routes.NoticePush, strings, SendTypes.SMS.toString(),format);
                 }
                 alarmEntrty.setUserPhoneInfo(userPhoneInfoList);
-                MessageBody messageBody = new MessageBody();
-                messageBody.setData(alarmEntrty);
-                messageBody.setMessageId(groupId);
-                commonSend.send(MqttConstants.TOPIC_ALERT + labRiskPlanLevel.getRiskPlanId() + "/" + subject.getId(), messageBody, SendMode.DISTINCT);
-                logger.info("发送短信打电话消息推送完成!topic={},msg={}",MqttConstants.TOPIC_ALERT + labRiskPlanLevel.getRiskPlanId() + "/" + subject.getId(),JSON.toJSONString(messageBody));
+                alarmEntrty.setLogId(logId);
+                remoteAlarmService.send(alarmEntrty);
+//                MessageBody messageBody = new MessageBody();
+//                messageBody.setData(alarmEntrty);
+//                messageBody.setMessageId(logId);
+//                commonSend.send(MqttConstants.TOPIC_ALERT + labRiskPlanLevel.getRiskPlanId() + "/" + subject.getId(), messageBody, SendMode.DISTINCT);
+                logger.info("发送短信打电话消息推送完成!topic={},msg={}",MqttConstants.TOPIC_ALERT + labRiskPlanLevel.getRiskPlanId() + "/" + subject.getId(),JSON.toJSONString(alarmEntrty));
                 try {
                     if (subject.getAdminId() != null) {
                         //发送预案消息(预案指挥中心) 没什么卵用 lab_warn_push_message
                         labWarnPushMessageService.insertLabWarnPushMessage(subject.getId(), subject.getAdminId().toString(), groupId, labRiskPlanLevel, WarnUserAttrEnum.ADMIN);
                     }
+                    String userids = getDoingUserId(subject);
                     //发送预案消息(预案指挥中心) 没什么卵用 lab_warn_push_message 保持实验室内部人员发送记录  ?安全的要不要保存展示?
                     labWarnPushMessageService.insertLabWarnPushMessage(subject.getId(), userids, groupId, labRiskPlanLevel, WarnUserAttrEnum.NONE);
                 } catch (Exception e) {
@@ -364,11 +367,11 @@ public class LabMessageContentServiceImpl implements ILabMessageContentService {
     }
 
     @NotNull
-    private List<UserPhoneInfo> getUserPhoneInfos(LabSubjectVO subject, String phone) {
+    private List<UserPhoneInfo> getUserPhoneInfos(LabSubjectVO subject) {
         List<UserPhoneInfo> userPhoneInfoList = new ArrayList<>();
         R<SysUser> sysUserR = remoteUserService.getUserByPhone(subject.getAdminPhone());
         if (HttpStatus.SUCCESS != sysUserR.getCode()) {
-            logger.error("手机号码为:{}用户不存在!", phone);
+            logger.error("手机号码为:{}用户不存在!", subject.getAdminPhone());
         }
         UserPhoneInfo userPhoneInfo = new UserPhoneInfo();
         userPhoneInfo.setPhone(subject.getAdminPhone());
@@ -389,19 +392,19 @@ public class LabMessageContentServiceImpl implements ILabMessageContentService {
                 userPhoneInfoList.add(userPhoneInfo1);
             }
         }
-        if(StringUtils.isNotBlank(phone)){
-            for (String phoneNumber : phone.split(",")) {
-                R<SysUser> result1 = remoteUserService.getUserByPhone(phoneNumber);
-                if (HttpStatus.SUCCESS != result1.getCode()) {
-                    logger.error("手机号码为:{}用户不存在!",phoneNumber);
-                }
-                UserPhoneInfo userPhoneInfo2 = new UserPhoneInfo();
-                userPhoneInfo2.setPhone(phoneNumber);
-                userPhoneInfo2.setNickName(result1.getData().getNickName());
-                userPhoneInfo2.setRole("室内人员");
-                userPhoneInfoList.add(userPhoneInfo2);
-            }
-        }
+//        if(StringUtils.isNotBlank(phone)){
+//            for (String phoneNumber : phone.split(",")) {
+//                R<SysUser> result1 = remoteUserService.getUserByPhone(phoneNumber);
+//                if (HttpStatus.SUCCESS != result1.getCode()) {
+//                    logger.error("手机号码为:{}用户不存在!",phoneNumber);
+//                }
+//                UserPhoneInfo userPhoneInfo2 = new UserPhoneInfo();
+//                userPhoneInfo2.setPhone(phoneNumber);
+//                userPhoneInfo2.setNickName(result1.getData().getNickName());
+//                userPhoneInfo2.setRole("室内人员");
+//                userPhoneInfoList.add(userPhoneInfo2);
+//            }
+//        }
         return userPhoneInfoList;
     }
 

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

@@ -71,7 +71,7 @@ public class WarningNoticeLogServiceImpl extends ServiceImpl<WarningNoticeLogMap
         BeanUtils.copyProperties(warningNoticeLog, warningNoticeLogVO);
         List<WarningDetail> list = warningDetailService.list(new LambdaQueryWrapper<WarningDetail>().eq(WarningDetail::getLogId, warningNoticeLogVO.getId()).orderByDesc(WarningDetail::getId));
         warningNoticeLogVO.setWarningDetailList(list);
-        List<AlarmLog> alarmLogs = alarmLogService.selectAlarmLogByKeyId(warningNoticeLog.getKeyId());
+        List<AlarmLog> alarmLogs = alarmLogService.selectAlarmLogByKeyId(warningNoticeLog.getId());
         List<MessageVO> messageVOList = new ArrayList<>();
         Optional.ofNullable(alarmLogs).orElseGet(Collections::emptyList).forEach(alarmLog -> {
             MessageVO messageVO = new MessageVO();