ソースを参照

消息通知修改

xujie 1 年間 前
コミット
4cd3c9ca48

+ 1 - 1
project_data/sql/0.1.1/soc/soc.sql

@@ -1222,7 +1222,7 @@ drop table if exists websocket_notice_log;
 CREATE TABLE `websocket_notice_log` (
                                         `id` bigint NOT NULL,
                                         `iot_alarm_id` bigint DEFAULT NULL,
-                                        `org_id` bigint DEFAULT NULL,
+                                        `org_ids` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
                                         `user_ids` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
                                         `is_do` int DEFAULT NULL COMMENT '是否处理:0.否 1.是',
                                         `create_time` datetime DEFAULT NULL COMMENT '创建时间',

+ 2 - 2
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/notice/WebsocketNoticeLog.java

@@ -34,8 +34,8 @@ public class WebsocketNoticeLog implements Serializable {
     @TableField("iot_alarm_id")
     private Long iotAlarmId;
 
-    @TableField("org_id")
-    private Long orgId;
+    @TableField("org_ids")
+    private String orgIds;
 
     @TableField("user_ids")
     private String userIds;

+ 1 - 1
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/iot/BaseDeviceTypeEnum.java

@@ -43,7 +43,7 @@ public enum BaseDeviceTypeEnum {
     AlarmHostInput_Infrared("Infrared","红外传感器"),
     AlarmHostInput_Soaking("Soaking","水浸传感器"),
     AlarmHostInput_DoorSensor("DoorSensor","门磁传感器"),
-    AlarmHostInput_Other("Other(","其他传感器"),
+    AlarmHostInput_Other("Other","其他传感器"),
     AlarmHostInput_Displacement("Displacement","位移传感器"),
     AlarmHostInput_Broken("Broken","破碎传感器"),
     AlarmHostInput_Shock("Shock","震动传感器"),

+ 41 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/enums/AlarmHostProductToFsuProductEnum.java

@@ -0,0 +1,41 @@
+package com.xunmei.host.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+@Getter
+@AllArgsConstructor
+public enum AlarmHostProductToFsuProductEnum {
+
+    INFRARED("Infrared", "FSU_Infrared","红外"),
+    WATER("Soaking", "FSU_Water","水浸"),
+    SMOKE("Smoke", "FSU_Smoke","烟感"),
+    Temperature("Temperature", "FSU_TemperatureAndHumidity","温度"),
+    Humidity("Humidity", "FSU_TemperatureAndHumidity","温度"),
+    DOOR("DoorSensor", "FSU_DoorMagnetic","门磁"),
+
+    ;
+
+    private String alarmHostProductType;
+
+    private String fsuProductType;
+
+    private String desc;
+
+    private static final Map<String, AlarmHostProductToFsuProductEnum> enumMap = new LinkedHashMap<>();
+
+    static {
+        for (AlarmHostProductToFsuProductEnum enumNode : AlarmHostProductToFsuProductEnum.values()) {
+            enumMap.put(enumNode.alarmHostProductType, enumNode);
+        }
+    }
+    //根据key找value
+    public static String getFsuProductType(String alarmHostProductType) {
+        AlarmHostProductToFsuProductEnum e = enumMap.get(alarmHostProductType);
+        return e != null ? e.getFsuProductType() : "";
+    }
+
+}

+ 11 - 7
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/enums/SmsNotifyType.java

@@ -18,20 +18,24 @@ public enum SmsNotifyType {
 
     OVERDUE_REMINDER("10200", "逾期提醒"),
 
-    WATER_DRAINAGE_ALARM("4184", "水浸告警"),
+    WATER_DRAINAGE_ALARM("FSU_Water", "水浸告警"),
 
-    HUMIDITY_TEMPERATURE_ALARM("4183", "温湿度告警"),
+    HUMIDITY_TEMPERATURE_ALARM("FSU_TemperatureAndHumidity", "温湿度告警"),
 
-    SMOKE_ALARM("4182", "烟感告警"),
+    SMOKE_ALARM("FSU_Smoke", "烟感告警"),
 
-    Infrared_Alarm("4181", "红外告警"),
+    Infrared_Alarm("FSU_Infrared", "红外告警"),
 
-    GAS_ALARM("41885", "燃气告警"),
+    GAS_ALARM("FSU_Gas", "燃气告警"),
 
-    ALARM_OF_THEFT("41881", "盗情告警"),
+    ALARM_OF_THEFT("FSU_Theft", "防盗告警"),
 
-    DOOR_MAGNET_ALARM("4188", "门磁告警"),
+    DOOR_MAGNET_ALARM("FSU_DoorMagnetic", "门磁告警"),
 
+
+    TEMPERATURE_HOST_ALARM("Temperature", "温度告警"),
+
+    HUMIDITY_HOST_ALARM("Humidity", "湿度告警"),
     ;
 
     private final String code;

+ 2 - 6
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/service/impl/IotDeviceStatusServiceImpl.java

@@ -207,18 +207,14 @@ public class IotDeviceStatusServiceImpl extends ServiceImpl<IotDeviceStatusMappe
             if (ObjectUtil.isNotNull(dataReq.getStartTime()) && ObjectUtil.isNull(dataReq.getEndTime())) {
                 updateStatusByDevicePrimaryId(deviceInfo.getId(), DeviceStatusEnum.ALARM.getValue());
                 //判断是否通知app
-                websocketNoticeLogService.noticeAlarm(deviceInfo,iotAlarmData);
+                websocketNoticeLogService.noticeAlarm(deviceInfo,iotAlarmData,false);
             }
             // 报警结束
             if (ObjectUtil.isNotNull(dataReq.getStartTime()) && ObjectUtil.isNotNull(dataReq.getEndTime())) {
                 updateStatusByDevicePrimaryId(deviceInfo.getId(), DeviceStatusEnum.NORMAL.getValue());
-                //todo 告警结束需要结束通知
+                //告警结束需要结束通知
                 websocketNoticeLogService.endNoticeAlarm(deviceInfo,iotAlarmData);
             }
-            if (Boolean.TRUE.equals(dataReq.getSmsType())) {
-                //todo  发送短信
-            }
-
         }
 
 

+ 1 - 1
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/notice/service/IWebsocketNoticeLogService.java

@@ -19,5 +19,5 @@ public interface IWebsocketNoticeLogService extends IService<WebsocketNoticeLog>
 
     void endNoticeAlarm(IotDeviceInfo deviceInfo, IotAlarmData iotAlarmData);
 
-    void noticeAlarm(IotDeviceInfo deviceInfo,IotAlarmData iotAlarmData);
+    void noticeAlarm(IotDeviceInfo deviceInfo,IotAlarmData iotAlarmData,boolean alarmHost);
 }

+ 33 - 8
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/notice/service/impl/WebsocketNoticeLogServiceImpl.java

@@ -9,6 +9,7 @@ import com.xunmei.common.core.domain.notice.CoreNoticeRuleItem;
 import com.xunmei.common.core.domain.notice.WebsocketNoticeLog;
 import com.xunmei.common.core.enums.iot.BaseDeviceTypeEnum;
 import com.xunmei.common.core.vo.notice.WebSocketNoticeVo;
+import com.xunmei.host.enums.AlarmHostProductToFsuProductEnum;
 import com.xunmei.host.notice.mapper.WebsocketNoticeLogMapper;
 import com.xunmei.host.notice.service.ICoreNoticeRuleItemService;
 import com.xunmei.host.notice.service.IWebsocketNoticeLogService;
@@ -16,12 +17,13 @@ import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.RemoteWebsocketSendService;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.domain.iot.IotDeviceInfo;
+import com.xunmei.system.api.util.LogUtils;
 import com.xunmei.system.api.vo.WebSocketSendVo;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 
@@ -77,9 +79,20 @@ public class WebsocketNoticeLogServiceImpl extends ServiceImpl<WebsocketNoticeLo
 
 
     @Override
-    public void noticeAlarm(IotDeviceInfo deviceInfo,IotAlarmData iotAlarmData) {
+    public void noticeAlarm(IotDeviceInfo deviceInfo,IotAlarmData iotAlarmData,boolean alarmHost) {
         try {
-            List<CoreNoticeRuleItem> itemList = coreNoticeRuleItemService.getByOrgIdAndProductType(deviceInfo.getOrgId(),deviceInfo.getDeviceProduct());
+            String productType = deviceInfo.getDeviceProduct();
+            //是报警主机的传感器时,需要转换类型
+            if (alarmHost){
+                String fsuProductType = AlarmHostProductToFsuProductEnum.getFsuProductType(productType);
+                if (ObjectUtil.isEmpty(fsuProductType)){
+                    LogUtils.SMS_NOTICE_LOG.error("报警主机设备类型转换fsu设备类型为空,设备类型:{}",productType);
+                    return;
+                }
+                productType = fsuProductType;
+            }
+
+            List<CoreNoticeRuleItem> itemList = coreNoticeRuleItemService.getByOrgIdAndProductType(deviceInfo.getOrgId(),productType);
             /**
              * 通知人员:
              * 1.角色为空,有具体人员->发送到该机构下具体人员
@@ -88,12 +101,20 @@ public class WebsocketNoticeLogServiceImpl extends ServiceImpl<WebsocketNoticeLo
              */
             if (itemList != null && itemList.size() > 0) {
                 HashSet<Long> userSet = new HashSet<>();
+                HashSet<Long> sendSmsUserSet = new HashSet<>();
+                HashMap<Long, Long> hashMap = new HashMap<>();
                 for (CoreNoticeRuleItem item : itemList) {
                     //根据角色查询人员
                     if(item.getRoleId() != null){
-                        List<Long> roleUserIdList = coreNoticeRuleItemService.getUserIdsByRoleId(item.getRoleId(), deviceInfo.getOrgId());
+                        List<Long> roleUserIdList = coreNoticeRuleItemService.getUserIdsByRoleId(item.getRoleId(), item.getOrgId());
                         if (roleUserIdList != null && roleUserIdList.size() > 0) {
                             userSet.addAll(roleUserIdList);
+                            if (item.getSendSms() == 1){
+                                sendSmsUserSet.addAll(roleUserIdList);
+                            }
+                            for (Long userId : roleUserIdList) {
+                                hashMap.put(userId, item.getOrgId());
+                            }
                         }
                     }
                     //根据人员id查询该机构下人员
@@ -101,11 +122,14 @@ public class WebsocketNoticeLogServiceImpl extends ServiceImpl<WebsocketNoticeLo
                         String[] userIds = item.getUserIds().split(",");
                         for (String userId : userIds) {
                             userSet.add(Long.valueOf(userId));
+                            hashMap.put(Long.valueOf(userId), item.getOrgId());
+                            if (item.getSendSms() == 1){
+                                sendSmsUserSet.add(Long.valueOf(userId));
+                            }
                         }
                     }
                 }
                 if(!userSet.isEmpty()){
-                    Long orgId = deviceInfo.getOrgId();
                     WebSocketNoticeVo noticeVo = new WebSocketNoticeVo();
                     noticeVo.setIotAlarmDataId(iotAlarmData.getId());
                     noticeVo.setAlarmTime(iotAlarmData.getTime());
@@ -117,8 +141,8 @@ public class WebsocketNoticeLogServiceImpl extends ServiceImpl<WebsocketNoticeLo
                             ? BaseDeviceTypeEnum.getDescByCode(deviceInfo.getDeviceType()) : BaseDeviceTypeEnum.getDescByCode(deviceInfo.getDeviceProduct());
                     noticeVo.setProductTypeName(productTypeName);
                     noticeVo.setIsDo(0);
-                    noticeVo.setOrgId(orgId);
-                    SysOrg sysOrg = orgService.selectOrgById(orgId, SecurityConstants.INNER);
+                    noticeVo.setOrgId(deviceInfo.getOrgId());
+                    SysOrg sysOrg = orgService.selectOrgById(deviceInfo.getOrgId(), SecurityConstants.INNER);
                     if (null != sysOrg) {
                         noticeVo.setOrgName(sysOrg.getShortName());
                     }
@@ -126,7 +150,8 @@ public class WebsocketNoticeLogServiceImpl extends ServiceImpl<WebsocketNoticeLo
                     for (Long userId : userSet) {
                         WebSocketSendVo sendVo = new WebSocketSendVo();
                         sendVo.setUserId(userId);
-                        sendVo.setOrgId(orgId);
+                        //通知机构
+                        sendVo.setOrgId(hashMap.get(userId));
                         sendVo.setContent(noticeVo);
                         list.add(sendVo);
                     }

+ 5 - 2
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/protection/service/impl/IotAlarmHostServiceImpl.java

@@ -492,7 +492,7 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
             dataList.add(alarmData);
             //todo 产生告警通知
             IotDeviceInfo deviceInfo = changeToDeviceInfo(input);
-            websocketNoticeLogService.noticeAlarm(deviceInfo,alarmData);
+            websocketNoticeLogService.noticeAlarm(deviceInfo,alarmData,true);
         }else{
             // 本次上传的设备状态数据 没有生成告警
             if (!isAlarm) {
@@ -503,13 +503,16 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
                         for (IotAlarmData oldAlarm : alarms) {
                             oldAlarm.setEndTime(LocalDateTime.now());
                             iotAlarmDataMapper.updateById(oldAlarm);
+
+                            IotDeviceInfo deviceInfo = changeToDeviceInfo(input);
+                            websocketNoticeLogService.endNoticeAlarm(deviceInfo,oldAlarm);
                         }
                     } else {
                         IotAlarmData iotAlarmData = alarms.get(0);
                         iotAlarmData.setEndTime(LocalDateTime.now());
                         iotAlarmDataMapper.updateById(iotAlarmData);
 
-                        //todo 结束告警通知 , 只有6种传感器需要走这个逻辑
+                        //结束告警通知 , 只有6种传感器需要走这个逻辑
                         IotDeviceInfo deviceInfo = changeToDeviceInfo(input);
                         websocketNoticeLogService.endNoticeAlarm(deviceInfo,iotAlarmData);
                     }

+ 11 - 4
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/NoticeServiceImpl.java

@@ -21,6 +21,7 @@ import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 public class NoticeServiceImpl extends ServiceImpl<NoticeLogMapper, WebsocketNoticeLog> implements INoticeService {
@@ -65,7 +66,6 @@ public class NoticeServiceImpl extends ServiceImpl<NoticeLogMapper, WebsocketNot
                     }
                     WebSocketSendVo sendVo = new WebSocketSendVo();
                     sendVo.setUserId(Long.valueOf(userId));
-                    sendVo.setOrgId(websocketNoticeLog.getOrgId());
                     sendVo.setContent(content);
                     list.add(sendVo);
                 }
@@ -86,10 +86,10 @@ public class NoticeServiceImpl extends ServiceImpl<NoticeLogMapper, WebsocketNot
             WebSocketNoticeVo noticeVo = object.toBean(WebSocketNoticeVo.class);
             noticeLog.setIotAlarmId(noticeVo.getIotAlarmDataId());
 
-            noticeLog.setOrgId(list.get(0).getOrgId());
+            noticeLog.setOrgIds(this.handOrgIdStr(list));
             noticeLog.setIsDo(0);
             noticeLog.setCreateTime(new Date());
-            noticeLog.setUserIds(this.handStr(list));
+            noticeLog.setUserIds(this.handUserIdStr(list));
             QueryWrapper<WebsocketNoticeLog> wrapper = new QueryWrapper<>();
             wrapper.lambda().eq(WebsocketNoticeLog::getIotAlarmId,noticeVo.getIotAlarmDataId());
             WebsocketNoticeLog websocketNoticeLog = baseMapper.selectOne(wrapper);
@@ -136,7 +136,7 @@ public class NoticeServiceImpl extends ServiceImpl<NoticeLogMapper, WebsocketNot
         }
     }
 
-    private String handStr(List<WebSocketSendVo> list){
+    private String handUserIdStr(List<WebSocketSendVo> list){
         StringBuilder sb = new StringBuilder();
         for (int i = 0; i < list.size(); i++) {
             sb.append(list.get(i).getUserId());
@@ -146,4 +146,11 @@ public class NoticeServiceImpl extends ServiceImpl<NoticeLogMapper, WebsocketNot
         }
         return sb.toString();
     }
+
+    private String handOrgIdStr(List<WebSocketSendVo> list){
+        List<Long> orgIdList = list.stream().map(WebSocketSendVo::getOrgId).distinct().collect(Collectors.toList());
+        String result = orgIdList.stream().map(String::valueOf).collect(Collectors.joining(","));
+
+        return result;
+    }
 }