Ver código fonte

ws消息回复代码提交.

jingyuanchao 1 ano atrás
pai
commit
e5090dc759

+ 2 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/util/LogUtils.java

@@ -177,4 +177,6 @@ public class LogUtils {
      * fsu动环和报警主机传感器短信日志
      */
     public  static  final Logger SMS_NOTICE_LOG=LoggerFactory.getLogger("smsNoticeLog");
+
+    public  static  final Logger ALARM_RULE_LOG=LoggerFactory.getLogger("alarmRuleLog");
 }

+ 2 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/constant/ErrorMsgConstants.java

@@ -20,4 +20,6 @@ public class ErrorMsgConstants {
     public static final String QUERY_SYS_CONFIG_ERROR = "获取参数配置信息失败!";
     public static final String QUERY_CONFIG_ERROR = "获取系统参数配置失败!";
     public static final String QUERY_USER_PERMISSION_ERROR = "获取用户权限失败!";
+    public static final String ERROR_ROUTE = "不支持的路由!";
+    public static final String ERROR_TOPIC = "不支持的Topic!";
 }

+ 49 - 41
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/alarm/service/impl/IotAlarmRuleServiceImpl.java

@@ -1,10 +1,11 @@
 package com.xunmei.host.alarm.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
-import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Sets;
+import com.xunmei.common.core.constant.HttpStatus;
 import com.xunmei.common.core.domain.iot.domain.IotServerInfo;
 import com.xunmei.common.core.domain.mediator.domain.IotAlarmRule;
 import com.xunmei.common.core.domain.mediator.domain.IotAlarmRuleExpress;
@@ -21,6 +22,7 @@ import com.xunmei.host.websocket.enums.TopicTypeEnums;
 import com.xunmei.host.websocket.service.RouterService;
 import com.xunmei.host.websocket.service.WebsocketService;
 import com.xunmei.host.websocket.utils.IotServerUtils;
+import com.xunmei.system.api.util.LogUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
@@ -55,8 +57,8 @@ public class IotAlarmRuleServiceImpl extends ServiceImpl<IotAlarmRuleMapper, Iot
 
     @Override
     public Object execute(WebsocketExecuteReq req) {
-        receiveAndUpdateAlarmRule(req);
-        return null;
+        final JSONObject jsb = receiveAndUpdateAlarmRule(req);
+        return WebsocketResult.reply(req,jsb);
     }
 
     @Override
@@ -76,47 +78,53 @@ public class IotAlarmRuleServiceImpl extends ServiceImpl<IotAlarmRuleMapper, Iot
         websocketService.sendMsgByTokens(result, Sets.newHashSet(iotAlarmRule.getIotCode()));
     }
 
-    private void receiveAndUpdateAlarmRule(WebsocketExecuteReq req) {
-        final Object data = req.getData();
-        final IotServerInfo serverInfo = req.getServerInfo();
-        final JSONObject jsb = JSON.parseObject(data.toString(), JSONObject.class);
-        final IotAlarmRule alarmRule = jsb.toJavaObject(IotAlarmRule.class);
+    private JSONObject receiveAndUpdateAlarmRule(WebsocketExecuteReq req) {
+        try {
+            final Object data = req.getData();
+            final IotServerInfo serverInfo = req.getServerInfo();
+            final JSONObject jsb = JSON.parseObject(data.toString(), JSONObject.class);
+            final IotAlarmRule alarmRule = jsb.toJavaObject(IotAlarmRule.class);
 
-        final IotAlarmRule iotAlarmRule = JSON.parseObject(JSON.toJSONString(jsb), IotAlarmRule.class);
-        final IotAlarmRule rule = new IotAlarmRule();
-        BeanUtils.copyProperties(iotAlarmRule, rule);
-        rule.setIotCode(serverInfo.getIotCode());
-        rule.setOrgId(serverInfo.getOrgId());
-        rule.setOrgName(serverInfo.getOrgName());
-        rule.setServerName(serverInfo.getIotName());
-        final Object deleted = jsb.get("deleted");
-        rule.setIsdeleted(deleted == null ? null : Integer.parseInt(deleted.toString()));
-        rule.setType("alarm");
-        saveOrUpdate(rule);
+            final IotAlarmRule iotAlarmRule = JSON.parseObject(JSON.toJSONString(jsb), IotAlarmRule.class);
+            final IotAlarmRule rule = new IotAlarmRule();
+            BeanUtils.copyProperties(iotAlarmRule, rule);
+            rule.setIotCode(serverInfo.getIotCode());
+            rule.setOrgId(serverInfo.getOrgId());
+            rule.setOrgName(serverInfo.getOrgName());
+            rule.setServerName(serverInfo.getIotName());
+            final Object deleted = jsb.get("deleted");
+            rule.setIsdeleted(deleted == null ? null : Integer.parseInt(deleted.toString()));
+            rule.setType("alarm");
+            saveOrUpdate(rule);
 
-        final Object rs = jsb.get("ruleSourceList");
-        final Object re = jsb.get("ruleExpresses");
-        final Long ruleId = rule.getId();
-        if (rs != null) {
-            final List<JSONObject> list = JSON.parseArray(rs.toString(), JSONObject.class);
-            ruleSourceService.deleteByRuleId(ruleId);
-            for (JSONObject j : list) {
-                final IotAlarmRuleSource ruleSource = j.toJavaObject(IotAlarmRuleSource.class);
-                final IotAlarmRuleSource source = new IotAlarmRuleSource();
-                BeanUtils.copyProperties(ruleSource, source);
-                source.setOrgId(serverInfo.getOrgId());
-                source.setIotCode(serverInfo.getIotCode());
-                source.setValue(serverInfo.getIotCode() + "_" + ruleSource.getProductType() + "_" + ruleSource.getDeviceCode());
-                source.setValueType(j.get("sourceType") == null ? "" : j.get("sourceType").toString());
-                ruleSourceService.saveOrUpdate(source);
+            final Object rs = jsb.get("ruleSourceList");
+            final Object re = jsb.get("ruleExpresses");
+            final Long ruleId = rule.getId();
+            if (rs != null) {
+                final List<JSONObject> list = JSON.parseArray(rs.toString(), JSONObject.class);
+                ruleSourceService.deleteByRuleId(ruleId);
+                for (JSONObject j : list) {
+                    final IotAlarmRuleSource ruleSource = j.toJavaObject(IotAlarmRuleSource.class);
+                    final IotAlarmRuleSource source = new IotAlarmRuleSource();
+                    BeanUtils.copyProperties(ruleSource, source);
+                    source.setOrgId(serverInfo.getOrgId());
+                    source.setIotCode(serverInfo.getIotCode());
+                    source.setValue(serverInfo.getIotCode() + "_" + ruleSource.getProductType() + "_" + ruleSource.getDeviceCode());
+                    source.setValueType(j.get("sourceType") == null ? "" : j.get("sourceType").toString());
+                    ruleSourceService.saveOrUpdate(source);
+                }
             }
-        }
-        if (re != null) {
-            final List<IotAlarmRuleExpress> list = JSON.parseArray(re.toString(), IotAlarmRuleExpress.class);
-            ruleExpressService.delByRuleId(ruleId);
-            if (ObjectUtil.isNotEmpty(list)) {
-                ruleExpressService.saveOrUpdateBatch(list);
+            if (re != null) {
+                final List<IotAlarmRuleExpress> list = JSON.parseArray(re.toString(), IotAlarmRuleExpress.class);
+                ruleExpressService.delByRuleId(ruleId);
+                if (ObjectUtil.isNotEmpty(list)) {
+                    ruleExpressService.saveOrUpdateBatch(list);
+                }
             }
+        } catch (Exception e) {
+            LogUtils.ALARM_RULE_LOG.error("保存告警规则失败", e);
+            return WebsocketResult.getResPayload(HttpStatus.ERROR, e.getMessage());
         }
+        return WebsocketResult.getSuccessPayload();
     }
 }

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

@@ -352,7 +352,7 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
         Object data = req.getData();
         JSONArray dataArray = (JSONArray) data;
         if (ObjectUtil.isEmpty(dataArray)) {
-            return WebsocketResult.replySuccess(req.getTopic(), req.getId(), req.getProductName(), req.getDeviceName());
+            return WebsocketResult.replySuccess(req);
         }
         IotServerInfo serverInfo = req.getServerInfo();
         if (ObjectUtil.isEmpty(serverInfo)) {
@@ -371,7 +371,7 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
 
                 handelAssetDeviceInfo(syncToAssetDeviceList);
 
-                return WebsocketResult.replySuccess(req.getTopic(), req.getId(), req.getProductName(), req.getDeviceName());
+                return WebsocketResult.replySuccess(req);
             case WebSocketConstants.DEVICES_STATUS_EVENT:
                 List<DeviceStatusInfo> statusInfos = dataArray.toJavaList(DeviceStatusInfo.class);
                 deviceStatusChange(statusInfos, serverInfo);

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

@@ -6,6 +6,8 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.google.common.collect.Lists;
+import com.xunmei.common.core.constant.ErrorMsgConstants;
+import com.xunmei.common.core.constant.HttpStatus;
 import com.xunmei.common.core.domain.iot.domain.*;
 import com.xunmei.common.core.domain.mediator.domain.IotAlarmData;
 import com.xunmei.common.core.domain.mediator.domain.IotAlarmSystemField;
@@ -90,7 +92,7 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
     private IWebsocketNoticeLogService websocketNoticeLogService;
 
     @Transactional(rollbackFor = Exception.class)
-    public void changeSubSystemStatus(WebsocketExecuteReq req) {
+    public JSONObject changeSubSystemStatus(WebsocketExecuteReq req) {
         try {
             LogUtils.STATUS_INFO_DEFENCEAREA.info("【报警主机布撤防状态变更事件】【token:{}】【msgId:{}】【接收参数:{}】", req.getServerInfo().getIotCode(), req.getId(), JSON.toJSONString(req));
             if (req.getData() != null) {
@@ -126,15 +128,15 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
                     this.saveProtectionLog(subsystem);
                 }
             }
+            return WebsocketResult.getSuccessPayload();
         } catch (Exception e) {
-            e.printStackTrace();
             LogUtils.STATUS_INFO_DEFENCEAREA.error("处理报警主机布撤防状态改变事件出错", e);
-            throw new RuntimeException(e);
+            return WebsocketResult.getResPayload(HttpStatus.ERROR, e.getMessage());
         }
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public void changeAlarmHostSensorStatus(WebsocketExecuteReq req) {
+    public JSONObject changeAlarmHostSensorStatus(WebsocketExecuteReq req) {
         try {
             LogUtils.STATUS_INFO_STATUS_SENSOR.info("【报警主机传感器状态事件】【token:{}】【msgId:{}】【接收参数:{}】", req.getServerInfo().getIotCode(), req.getId(), JSON.toJSONString(req));
             if (req.getData() != null) {
@@ -152,10 +154,10 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
                     defenceArea.setUpdateTime(LocalDateTime.now());
 
                     IotAlarmDefenceAreaData defenceAreaData = defenceAreaDataService.findByAreaId(defenceArea.getId());
-                    if (null != defenceAreaData){
+                    if (null != defenceAreaData) {
                         defenceAreaData.setDefenceAreaStatus(defenceArea.getState());
                         defenceAreaData.setUpdateTime(LocalDateTime.now());
-                    }else {
+                    } else {
                         defenceAreaData = new IotAlarmDefenceAreaData();
                         defenceAreaData.setId(IDHelper.id());
                         defenceAreaData.setAlarmHostCode(defenceArea.getAlarmHostCode());
@@ -192,16 +194,19 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
                     defenceAreaDataService.saveOrUpdate(defenceAreaData);
                     defenceAreDataLogService.save(dataLog);
                     defenceAreaService.updateById(defenceArea);
-                }else {
-                    LogUtils.STATUS_INFO_STATUS_SENSOR.info("【报警主机传感器状态事件,未找到对应传感器】【token:{}】【设备名称:{}】【子系统id:{}】【传感器index:{}】",
-                            req.getServerInfo().getIotCode(), req.getDeviceName(),subSystemId,inputIndex);
+                    return WebsocketResult.getSuccessPayload();
+                } else {
+                    String str = "【报警主机传感器状态事件,未找到对应传感器】【token:%s】【设备名称:%s】【子系统id:%s】【传感器index:%s】";
+                    String logMsg = String.format(str, req.getServerInfo().getIotCode(), req.getDeviceName(), subSystemId, inputIndex);
+                    LogUtils.STATUS_INFO_STATUS_SENSOR.info(logMsg);
+                    return WebsocketResult.getResPayload(HttpStatus.ERROR, logMsg);
                 }
             }
         } catch (Exception e) {
-            e.printStackTrace();
             LogUtils.STATUS_INFO_STATUS_SENSOR.error("处理报警主机传感器状态事件出错", e);
-            throw new RuntimeException(e);
+            return WebsocketResult.getResPayload(HttpStatus.ERROR, e.getMessage());
         }
+        return WebsocketResult.getSuccessPayload();
     }
 
     @Override
@@ -244,7 +249,7 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
     }
 
     @Override
-    public void breakerControlByOrgId(Long orgId,String command) {
+    public void breakerControlByOrgId(Long orgId, String command) {
         try {
             QueryWrapper<IotDeviceInfo> wrapper = new QueryWrapper<>();
             wrapper.lambda()
@@ -270,10 +275,10 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
                         throw new RuntimeException();
                     }
                 }
-            }else {
+            } else {
                 LogUtils.DEVICE_CONTROL_LOG.error("通断电控制,组织机构:{} 下未找到控制设备", orgId);
             }
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             LogUtils.DEVICE_CONTROL_LOG.error("通断电控制", e);
             throw new RuntimeException(e);
@@ -281,7 +286,7 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
     }
 
     @Override
-    public void breakerControlByDeviceId(Serializable id,String command) {
+    public void breakerControlByDeviceId(Serializable id, String command) {
         try {
             IotDeviceInfo deviceInfo = iIotDeviceInfoService.getById(id);
             if (deviceInfo != null) {
@@ -299,10 +304,10 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
                     LogUtils.DEVICE_CONTROL_LOG.error("通断电控制,指令下发iot服务失败");
                     throw new RuntimeException();
                 }
-            }else {
+            } else {
                 LogUtils.DEVICE_CONTROL_LOG.error("通断电控制,未找到控制设备:{}", id);
             }
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             LogUtils.DEVICE_CONTROL_LOG.error("通断电控制", e);
             throw new RuntimeException(e);
@@ -335,18 +340,18 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Object execute(WebsocketExecuteReq req) {
-        try {
-            if (WebSocketConstants.SENSOR_STATUS.equals(req.getEvent())) {
-                //changeAlarmHostSensorStatus(req);
-                changeAlarmHostInputStatus(req);
-            } else if (WebSocketConstants.SUB_SYSTEM_STATUS.equals(req.getEvent())) {
-                changeSubSystemStatus(req);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new RuntimeException(e);
+        final String event = req.getEvent();
+        JSONObject jsb;
+        switch (event) {
+            case WebSocketConstants.SENSOR_STATUS:
+                jsb = changeAlarmHostSensorStatus(req);
+                return WebsocketResult.reply(req, jsb);
+            case WebSocketConstants.SUB_SYSTEM_STATUS:
+                jsb = changeSubSystemStatus(req);
+                return WebsocketResult.reply(req, jsb);
+            default:
+                return WebsocketResult.replyError(req, ErrorMsgConstants.ERROR_ROUTE);
         }
-        return null;
     }
 
 
@@ -357,25 +362,25 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
             if (req.getData() != null) {
                 String productName = req.getProductName();
                 String deviceName = req.getDeviceName();
-                AlarmHostSensorVO resParam = JSONObject.parseObject(req.getData().toString(),AlarmHostSensorVO.class);
+                AlarmHostSensorVO resParam = JSONObject.parseObject(req.getData().toString(), AlarmHostSensorVO.class);
                 String index = resParam.getIndex();
-                if(resParam == null){
-                    LogUtils.STATUS_INFO_STATUS_SENSOR.error("报警主机传感器状态事件:产品名称={},设备名称={},设备状态为空", productName,deviceName);
+                if (resParam == null) {
+                    LogUtils.STATUS_INFO_STATUS_SENSOR.error("报警主机传感器状态事件:产品名称={},设备名称={},设备状态为空", productName, deviceName);
                     return;
                 }
-                if (StringUtils.isBlank(index)){
-                    LogUtils.STATUS_INFO_STATUS_SENSOR.error("报警主机传感器状态事件:产品名称={},设备名称={},index为空", productName,deviceName);
+                if (StringUtils.isBlank(index)) {
+                    LogUtils.STATUS_INFO_STATUS_SENSOR.error("报警主机传感器状态事件:产品名称={},设备名称={},index为空", productName, deviceName);
                     return;
                 }
-                if(resParam.getStatus().equals(IotInputStatusEnum.ACTIVITY.getState())){
-                    LogUtils.STATUS_INFO_STATUS_SENSOR.debug("报警主机传感器状态事件:产品名称={},设备名称={},index={},活动状态丢弃", productName,deviceName,index);
+                if (resParam.getStatus().equals(IotInputStatusEnum.ACTIVITY.getState())) {
+                    LogUtils.STATUS_INFO_STATUS_SENSOR.debug("报警主机传感器状态事件:产品名称={},设备名称={},index={},活动状态丢弃", productName, deviceName, index);
                     return;
                 }
 
                 try {
-                    this.saveInputStatus(req.getServerInfo().getIotCode(),productName, deviceName, resParam);
-                }catch (Exception e){
-                    LogUtils.STATUS_INFO_STATUS_SENSOR.info("报警主机传感器状态事件: 处理出现异常{}",e);
+                    this.saveInputStatus(req.getServerInfo().getIotCode(), productName, deviceName, resParam);
+                } catch (Exception e) {
+                    LogUtils.STATUS_INFO_STATUS_SENSOR.info("报警主机传感器状态事件: 处理出现异常{}", e);
                 }
             }
         } catch (Exception e) {
@@ -386,7 +391,7 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
     }
 
     @Transactional
-    public void saveInputStatus(String token,String productName,String deviceName,AlarmHostSensorVO vo) throws Exception {
+    public void saveInputStatus(String token, String productName, String deviceName, AlarmHostSensorVO vo) throws Exception {
         String subsystemId = vo.getSubsystemId();
         String moduleAddress = vo.getModuleAddress();
         String index = vo.getIndex();
@@ -395,30 +400,30 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
 
         String limitOne = "limit 1";
         //todo:
-        final IotAlarmDefenceArea input = this.selectByTypeAndCode(token, DeviceTypeEnum.ALARM_HOST_INPUT.getCode(), productName, deviceName,moduleAddress,index);
+        final IotAlarmDefenceArea input = this.selectByTypeAndCode(token, DeviceTypeEnum.ALARM_HOST_INPUT.getCode(), productName, deviceName, moduleAddress, index);
         if (input == null) {
-            LogUtils.STATUS_INFO_STATUS_SENSOR.error("接收报警主机传感器状态事件:未查询到报警主机传感器信息,token:{},alarmHostId:{},zoneId:{},inputIndex:{}",token,deviceName,subsystemId,index);
+            LogUtils.STATUS_INFO_STATUS_SENSOR.error("接收报警主机传感器状态事件:未查询到报警主机传感器信息,token:{},alarmHostId:{},zoneId:{},inputIndex:{}", token, deviceName, subsystemId, index);
             return;
         }
         String sensorType = "AlarmHostInput_" + input.getSensorType();
         Long vipDeviceCode = input.getId();
 
         QueryWrapper<IotAlarmSystemField> fieldWrapper = new QueryWrapper<>();
-        fieldWrapper.eq("product_type",sensorType);
-        fieldWrapper.eq("enable",1);
+        fieldWrapper.eq("product_type", sensorType);
+        fieldWrapper.eq("enable", 1);
         List<IotAlarmSystemField> fieldList = alarmSystemFieldMapper.selectList(fieldWrapper);
         IotPropertiesRes resParam = new IotPropertiesRes();
         resParam.setPropertyName("status");
         resParam.setPropertyValue(val);
 
         JSONArray arr = this.dealStatusData(resParam, fieldList);
-        if(arr == null || arr.isEmpty()){
+        if (arr == null || arr.isEmpty()) {
             LogUtils.STATUS_INFO_STATUS_SENSOR.debug("接收报警主机传感器状态事件: 匹配表iotAlarmSystemField属性失败,productName={},deviceName={}", sensorType, vipDeviceCode);
             return;
         }
 
         Date now = new Date();
-        Long id= IDHelper.id();
+        Long id = IDHelper.id();
         String arrInfo = JSON.toJSONString(arr);
         String displayName = input.getDefenceAreaName();
         IotAlarmSystemField field = fieldList.get(0);
@@ -457,14 +462,14 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
             iotDeviceStatusMapper.updateById(status);
         }
         IotDeviceStatusLog log = new IotDeviceStatusLog();
-        BeanUtils.copyProperties(status,log);
+        BeanUtils.copyProperties(status, log);
         log.setDeviceStatusId(status.getId());
         log.setCreateTime(now);
         log.setId(null);
         iotDeviceStatusLogMapper.insert(log);
 
         boolean isAlarm = false;
-        if(val.equals(IotInputStatusEnum.ALARM.getState())){
+        if (val.equals(IotInputStatusEnum.ALARM.getState())) {
             isAlarm = true;
         }
         String infos = status.getInfo();
@@ -472,9 +477,9 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
 
         String sensorValue = dataMap.get(field.getProductPropertyDisplayName());
         if (StringUtils.isBlank(sensorValue)) {
-            return ;
+            return;
         }
-        IotAlarmData alarmData =this.builderAlarm(sensorValue,field,status);
+        IotAlarmData alarmData = this.builderAlarm(sensorValue, field, status);
 
         QueryWrapper<IotAlarmData> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(IotAlarmData::getDeviceId, vipDeviceCode).isNull(IotAlarmData::getEndTime);
@@ -492,8 +497,8 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
             dataList.add(alarmData);
             //todo 产生告警通知
             IotDeviceInfo deviceInfo = changeToDeviceInfo(input);
-            websocketNoticeLogService.noticeAlarm(deviceInfo,alarmData,true);
-        }else{
+            websocketNoticeLogService.noticeAlarm(deviceInfo, alarmData, true);
+        } else {
             // 本次上传的设备状态数据 没有生成告警
             if (!isAlarm) {
                 //报警恢复
@@ -505,7 +510,7 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
                             iotAlarmDataMapper.updateById(oldAlarm);
 
                             IotDeviceInfo deviceInfo = changeToDeviceInfo(input);
-                            websocketNoticeLogService.endNoticeAlarm(deviceInfo,oldAlarm);
+                            websocketNoticeLogService.endNoticeAlarm(deviceInfo, oldAlarm);
                         }
                     } else {
                         IotAlarmData iotAlarmData = alarms.get(0);
@@ -514,7 +519,7 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
 
                         //结束告警通知 , 只有6种传感器需要走这个逻辑
                         IotDeviceInfo deviceInfo = changeToDeviceInfo(input);
-                        websocketNoticeLogService.endNoticeAlarm(deviceInfo,iotAlarmData);
+                        websocketNoticeLogService.endNoticeAlarm(deviceInfo, iotAlarmData);
                     }
                 }
 
@@ -524,7 +529,7 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
                     status.setState(0);
                     iotDeviceStatusMapper.updateById(status);
                 }
-            }else{
+            } else {
                 //告警持续无操作
             }
         }
@@ -532,17 +537,17 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
     }
 
     //分析状态数据
-    private  JSONArray dealStatusData(IotPropertiesRes datum, List<IotAlarmSystemField> fieldList) {
+    private JSONArray dealStatusData(IotPropertiesRes datum, List<IotAlarmSystemField> fieldList) {
         JSONArray array = new JSONArray();
         JSONObject object = new JSONObject();
         String val = datum.getPropertyValue();
-        if(StringUtils.isBlank(val)){
+        if (StringUtils.isBlank(val)) {
             return array;
         }
 
         IotAlarmSystemField bean = null;
-        for(IotAlarmSystemField field:fieldList){
-            if(datum.getPropertyName().equals(field.getProductProperty())){
+        for (IotAlarmSystemField field : fieldList) {
+            if (datum.getPropertyName().equals(field.getProductProperty())) {
                 bean = field;
             }
         }
@@ -618,7 +623,7 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
         return iotAlarmData;
     }
 
-    private IotAlarmDefenceArea selectByTypeAndCode(String token, String deviceType, String product, String deviceCode,String moduleAddress,String index) {
+    private IotAlarmDefenceArea selectByTypeAndCode(String token, String deviceType, String product, String deviceCode, String moduleAddress, String index) {
         /**
          * RedisUtils,加入缓存机制
          */
@@ -631,7 +636,7 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
                     .eq(IotAlarmDefenceArea::getAlarmHostCode, deviceCode)
                     .eq(IotAlarmDefenceArea::getModuleAddress, moduleAddress)
                     .eq(IotAlarmDefenceArea::getDefenceAreaIndex, index)
-                    .eq(IotAlarmDefenceArea::getDeleted,0)
+                    .eq(IotAlarmDefenceArea::getDeleted, 0)
                     .last("limit 1");
             IotAlarmDefenceArea one = iotAlarmDefenceAreaMapper.selectOne(qw);
             if (one != null) {

+ 29 - 3
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/websocket/dto/WebsocketResult.java

@@ -49,16 +49,28 @@ public class WebsocketResult implements Serializable {
     private Object payload;
 
 
+    public static WebsocketResult replySuccess(WebsocketExecuteReq req) {
+        return createWebsocketResult(req.getTopic(), req.getId(), req.getProductName(), req.getDeviceName(), HttpStatus.SUCCESS, StringUtil.EMPTY_STRING);
+    }
+
+    public static WebsocketResult replyError(WebsocketExecuteReq req, String msg) {
+        return createWebsocketResult(req.getTopic(), req.getId(), req.getProductName(), req.getDeviceName(), HttpStatus.ERROR, msg);
+    }
+
+    public static WebsocketResult reply(WebsocketExecuteReq req, JSONObject payload) {
+        return createWebsocketResult(req.getTopic(), req.getId(), req.getProductName(), req.getDeviceName(), Integer.parseInt(payload.get(WebSocketConstants.STATUS_CODE).toString()), payload.get(WebSocketConstants.STATUS_DESCRIPTION).toString());
+    }
+
 
-    public static WebsocketResult replySuccess(String topic, String id,String productName,String deviceName) {
+    public static WebsocketResult createWebsocketResult(String topic, String id, String productName, String deviceName, int statusCode, String statusDescription) {
         WebsocketResult result = new WebsocketResult();
         result.setId(id);
         result.setTopic(topic.contains("reply") ? topic : String.format("things/%s/%s/service/invoke/reply", productName, deviceName));
         result.setTimestamp(DateUtil.format(new Date(), Constants.UTC_FORMAT));
 
         JSONObject payload = new JSONObject();
-        payload.put(WebSocketConstants.STATUS_CODE, HttpStatus.SUCCESS);
-        payload.put(WebSocketConstants.STATUS_DESCRIPTION, StringUtil.EMPTY_STRING);
+        payload.put(WebSocketConstants.STATUS_CODE, statusCode);
+        payload.put(WebSocketConstants.STATUS_DESCRIPTION, statusDescription);
 
         final JSONObject header = new JSONObject();
         header.put(WebSocketConstants.PRODUCT_NAME, productName);
@@ -68,5 +80,19 @@ public class WebsocketResult implements Serializable {
         result.setPayload(payload);
         return result;
     }
+
+    public static JSONObject getSuccessPayload() {
+        JSONObject payload = new JSONObject();
+        payload.put(WebSocketConstants.STATUS_CODE, HttpStatus.SUCCESS);
+        payload.put(WebSocketConstants.STATUS_DESCRIPTION, StringUtil.EMPTY_STRING);
+        return payload;
+    }
+
+    public static JSONObject getResPayload(int statusCode, String statusDescription) {
+        JSONObject payload = new JSONObject();
+        payload.put(WebSocketConstants.STATUS_CODE, statusCode);
+        payload.put(WebSocketConstants.STATUS_DESCRIPTION, statusDescription);
+        return payload;
+    }
 }
 

+ 7 - 7
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/websocket/enums/TopicTypeEnums.java

@@ -21,23 +21,23 @@ public enum TopicTypeEnums {
     //产品事件通知消息
     PRODUCT_EVENT_NOTICE("^/things/([^/]+)/([^/]+)/event/post$", StringUtil.EMPTY_STRING, StringUtil.EMPTY_STRING, "/things/%s/%s/event/post"),
     //产品事件通知返回发给IOT消息
-    PRODUCT_EVENT_NOTICE_REPLY("^/things/([^/]+)/([^/]+)/event/post/reply$", StringUtil.EMPTY_STRING, StringUtil.EMPTY_STRING, "/things/%s/%s/event/post/reply"),
+    //PRODUCT_EVENT_NOTICE_REPLY("^/things/([^/]+)/([^/]+)/event/post/reply$", StringUtil.EMPTY_STRING, StringUtil.EMPTY_STRING, "/things/%s/%s/event/post/reply"),
     //应用方调用IoT产品服务消息
     PRODUCT_SERVICE_INVOKE("^/things/([^/]+)/([^/]+)/service/invoke$", StringUtil.EMPTY_STRING, StringUtil.EMPTY_STRING, "/things/%s/%s/service/invoke"),
     //IoT返回服务调用消息
     PRODUCT_SERVICE_REPLY("^/things/([^/]+)/([^/]+)/service/invoke/reply$", StringUtil.EMPTY_STRING, StringUtil.EMPTY_STRING, "/things/%s/%s/service/invoke/reply"),
     //应用方读取属性
-    PRODUCT_PROPERTY_GET("^/things/([^/]+)/([^/]+)/property/get$", StringUtil.EMPTY_STRING, StringUtil.EMPTY_STRING, "/things/%s/%s/property/get"),
+    //PRODUCT_PROPERTY_GET("^/things/([^/]+)/([^/]+)/property/get$", StringUtil.EMPTY_STRING, StringUtil.EMPTY_STRING, "/things/%s/%s/property/get"),
     //IoT返回属性
-    PRODUCT_PROPERTY_GET_REPLY("^/things/([^/]+)/([^/]+)/property/get/reply$", StringUtil.EMPTY_STRING, StringUtil.EMPTY_STRING, "/things/%s/%s/property/get/reply"),
+    //PRODUCT_PROPERTY_GET_REPLY("^/things/([^/]+)/([^/]+)/property/get/reply$", StringUtil.EMPTY_STRING, StringUtil.EMPTY_STRING, "/things/%s/%s/property/get/reply"),
     //应用方设置属性
-    PRODUCT_PROPERTY_SET("^/things/([^/]+)/([^/]+)/property/set$", StringUtil.EMPTY_STRING, StringUtil.EMPTY_STRING, "/things/%s/%s/property/set"),
+    //PRODUCT_PROPERTY_SET("^/things/([^/]+)/([^/]+)/property/set$", StringUtil.EMPTY_STRING, StringUtil.EMPTY_STRING, "/things/%s/%s/property/set"),
     //应用方设置属性
-    PRODUCT_PROPERTY_SET_REPLY("^/things/([^/]+)/([^/]+)/property/set$", StringUtil.EMPTY_STRING, StringUtil.EMPTY_STRING, "/things/%s/%s/property/set/reply"),
+    //PRODUCT_PROPERTY_SET_REPLY("^/things/([^/]+)/([^/]+)/property/set$", StringUtil.EMPTY_STRING, StringUtil.EMPTY_STRING, "/things/%s/%s/property/set/reply"),
     //IoT上报属性
-    PRODUCT_PROPERTY_POST("^/things/([^/]+)/([^/]+)/property/post", StringUtil.EMPTY_STRING, StringUtil.EMPTY_STRING, "/things/%s/%s/property/post"),
+    //PRODUCT_PROPERTY_POST("^/things/([^/]+)/([^/]+)/property/post", StringUtil.EMPTY_STRING, StringUtil.EMPTY_STRING, "/things/%s/%s/property/post"),
     //IoT上报属性返回消息
-    PRODUCT_PROPERTY_POST_REPLY("^/things/([^/]+)/([^/]+)/property/post/reply$", StringUtil.EMPTY_STRING, StringUtil.EMPTY_STRING, "/things/%s/%s/property/post/reply"),
+   // PRODUCT_PROPERTY_POST_REPLY("^/things/([^/]+)/([^/]+)/property/post/reply$", StringUtil.EMPTY_STRING, StringUtil.EMPTY_STRING, "/things/%s/%s/property/post/reply"),
     ;
 
     private final String topic;

+ 8 - 1
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/websocket/handler/SocWebSocketHandler.java

@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.xunmei.common.core.constant.Constants;
+import com.xunmei.common.core.constant.ErrorMsgConstants;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.iot.domain.IotServerInfo;
 import com.xunmei.common.core.enums.iot.IotServerConnectStatus;
@@ -17,6 +18,7 @@ import com.xunmei.host.websocket.enums.TopicTypeEnums;
 import com.xunmei.host.websocket.enums.WebsocketStatus;
 import com.xunmei.host.websocket.holder.WebSocketSessionHolder;
 import com.xunmei.host.websocket.service.RouterService;
+import com.xunmei.host.websocket.service.WebsocketService;
 import com.xunmei.host.websocket.utils.WebSocketUtils;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
@@ -51,6 +53,9 @@ public class SocWebSocketHandler extends AbstractWebSocketHandler {
     @Autowired
     private RemoteOrgService orgService;
 
+    @Autowired
+    private WebsocketService websocketService;
+
     /**
      * 连接成功后
      */
@@ -192,11 +197,13 @@ public class SocWebSocketHandler extends AbstractWebSocketHandler {
                 case PRODUCT_SERVICE_REPLY:
                     RouterService routeService = RouterServiceHandler.getRouteService(typeEnums.getProductName(), payloadResolve.getRoutingKey());
                     if (routeService == null) {
+                        WebSocketUtils.sendMessage(session, WebsocketResult.replyError(executeReq, ErrorMsgConstants.ERROR_TOPIC));
                         return;
                     }
-                        result = (WebsocketResult) routeService.execute(executeReq);
+                    result = (WebsocketResult) routeService.execute(executeReq);
                     break;
                 default:
+                    WebSocketUtils.sendMessage(session, WebsocketResult.replyError(executeReq, ErrorMsgConstants.ERROR_TOPIC));
                     break;
             }
             WebSocketUtils.sendMessage(session, result);

+ 21 - 1
soc-modules/soc-modules-host/src/main/resources/logback.xml

@@ -34,7 +34,22 @@
 
 
 
-
+    <!-- 动环告警规则同步日志 日志  -->
+    <appender name="alarmRuleLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <maxFileSize>${max.file.size}</maxFileSize>
+            <!--日志文件输出的文件名-->
+            <FileNamePattern>${LOG_HOME}/alarmRuleLog/%d{yyyy-MM-dd}-%i.log</FileNamePattern>
+            <!--日志文件保留天数-->
+            <maxHistory>${max.history}</maxHistory>
+            <totalSizeCap>${total.size.cap}</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
+            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+        </encoder>
+    </appender>
 
     <!-- websocket日志  -->
     <appender name="websocketMsgLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
@@ -247,6 +262,11 @@
         <appender-ref ref="statusSensorLog"/>
     </logger>
 
+    <logger name="alarmRuleLog" additivity="false" level="info">
+        <!--上面appender元素的name值。为了和logger的name属性做区分,我故意写的不一样-->
+        <appender-ref ref="alarmRuleLog"/>
+    </logger>
+
     <!-- 日志输出级别 -->
     <root level="INFO">
         <appender-ref ref="STDOUT"/>