浏览代码

布撤防控制代码提交

xujie 1 年之前
父节点
当前提交
6815669d1c

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

@@ -127,4 +127,9 @@ public class LogUtils {
     public  static  final Logger BASE_AIR_CONDITIONER_DATA=LoggerFactory.getLogger("airConditionerDataLog");
 
     public  static  final Logger STATUS_AIR_CONDITIONER_DATA=LoggerFactory.getLogger("airConditionerStatusLog");
+
+    /**
+     * 设备控制日志(子系统布撤防、防区旁路/取消旁路、用电类控制、空调类控制)
+     */
+    public  static  final Logger DEVICE_CONTROL_LOG=LoggerFactory.getLogger("deviceControlLog");
 }

+ 5 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/protection/service/IIotAlarmHostService.java

@@ -1,7 +1,12 @@
 package com.xunmei.mediator.api.protection.service;
 
+import java.io.Serializable;
+
 /**
  * iot报警服务处理
  */
 public interface IIotAlarmHostService {
+
+    //布撤防控制
+    void subSystemControl(Serializable id,boolean isArm);
 }

+ 43 - 1
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/protection/service/impl/IotAlarmHostServiceImpl.java

@@ -7,13 +7,16 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.xunmei.common.core.domain.iot.domain.IotAlarmSubsystem;
 import com.xunmei.common.core.domain.iot.domain.IotAlarmSubsystemLog;
 import com.xunmei.common.core.util.BeanHelper;
+import com.xunmei.common.core.utils.JacksonUtils;
 import com.xunmei.mediator.api.protection.mapper.ProtectionLogMapper;
 import com.xunmei.mediator.api.protection.service.IIotAlarmHostService;
 import com.xunmei.mediator.api.protection.service.IotAlarmSubsystemService;
 import com.xunmei.mediator.iot.service.IIotDeviceInfoService;
 import com.xunmei.mediator.websocket.constant.WebSocketConstants;
 import com.xunmei.mediator.websocket.dto.WebsocketExecuteReq;
+import com.xunmei.mediator.websocket.dto.WebsocketResult;
 import com.xunmei.mediator.websocket.enums.ProductEnums;
+import com.xunmei.mediator.websocket.holder.WebSocketSessionHolder;
 import com.xunmei.mediator.websocket.service.RouterService;
 import com.xunmei.system.api.domain.iot.IotDeviceInfo;
 import com.xunmei.system.api.enums.ProtectionStatus;
@@ -21,8 +24,9 @@ import com.xunmei.system.api.util.LogUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.Resource;
+import java.io.Serializable;
 import java.time.LocalDateTime;
-import java.util.StringJoiner;
+import java.util.*;
 
 @Service
 public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterService {
@@ -116,6 +120,44 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
         }
     }
 
+    @Override
+    public void subSystemControl(Serializable id, boolean isArm) {
+        try {
+            IotAlarmSubsystem subsystem = subsystemService.getById(id);
+            if (subsystem != null){
+                QueryWrapper<IotDeviceInfo> wrapper = new QueryWrapper<>();
+                wrapper.lambda()
+                        .eq(IotDeviceInfo::getDeviceCode,subsystem.getAlarmHostCode())
+                        .eq(IotDeviceInfo::getIotToken,subsystem.getIotToken());
+                IotDeviceInfo deviceInfo = iIotDeviceInfoService.getOne(wrapper);
+                if (deviceInfo != null){
+                    JSONObject object = new JSONObject();
+                    object.put("id",Integer.valueOf(subsystem.getCode()));
+                    object.put("isArm",isArm);
+                    String topic = "/things/" + deviceInfo.getDeviceProduct() + "/" + deviceInfo.getDeviceCode() + "/service/invoke";
+                    LogUtils.DEVICE_CONTROL_LOG.info("报警主机布撤防控制topic:{},控制参数:{}",topic,object.toJSONString());
+                    invokeSubSystemControl(topic,object,WebSocketConstants.SUB_SYSTEM_CONTROL);
+                }
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            LogUtils.DEVICE_CONTROL_LOG.error("报警主机布撤防控制失败",e);
+            throw new RuntimeException(e);
+        }
+    }
+
+    private void invokeSubSystemControl(String topic,JSONObject object,String service){
+        WebsocketResult websocketResult = new WebsocketResult();
+        websocketResult.setId(UUID.randomUUID().toString());
+        websocketResult.setTimestamp(new Date());
+        websocketResult.setTopic(topic);
+        HashMap<String, Object> hashMap = new HashMap<>();
+        hashMap.put(WebSocketConstants.SERVICE, service);
+        hashMap.put(WebSocketConstants.ARGS, object);
+        websocketResult.setPayload(hashMap);
+        WebSocketSessionHolder.sendAll(JacksonUtils.toJSONString(websocketResult));
+    }
+
     private void saveProtectionLog(IotAlarmSubsystem protection) {
         IotAlarmSubsystemLog protectionLog = new IotAlarmSubsystemLog();
         BeanHelper.copyProperties(protectionLog, protection);

+ 9 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/websocket/constant/WebSocketConstants.java

@@ -112,6 +112,15 @@ public interface WebSocketConstants {
      */
     String GET_ALARM_HOST_DEVICE_INFOS = "getAlarmHostDeviceInfos";
 
+    /**
+     * 布撤防控制
+     */
+    String SUB_SYSTEM_CONTROL = "ArmSubsystem";
+
+    /**
+     * 子系统防区旁路/取消旁路
+     */
+    String SENSOR_BY_PASS = "Bypass";
 
     /**
      * 报警主机离线在线事件

+ 5 - 1
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/websocket/service/impl/WebsocketServiceImpl.java

@@ -211,6 +211,7 @@ public class WebsocketServiceImpl implements WebsocketService, RouterService {
 
     }
 
+    @Async
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void dealBaseDeviceInfo(List<DeviceBaseInfo> alarmHostInfos, String token) throws Exception {
@@ -252,6 +253,7 @@ public class WebsocketServiceImpl implements WebsocketService, RouterService {
         });
     }
 
+    @Async
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void dealSubSystemAndInput(AlarmHostBaseInfo alarmHostBaseInfo, String token) throws Exception {
@@ -844,6 +846,7 @@ public class WebsocketServiceImpl implements WebsocketService, RouterService {
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Object execute(WebsocketExecuteReq req) {
         try {
             if (WebSocketConstants.GET_DEVICE_BASE_INFOS.equals(req.getEvent())) {
@@ -856,7 +859,8 @@ public class WebsocketServiceImpl implements WebsocketService, RouterService {
                 dealSubSystemAndInput((AlarmHostBaseInfo) req.getData(), req.getToken());
             }
         } catch (Exception e) {
-
+            e.printStackTrace();
+            throw new RuntimeException(e);
         }
         return null;
     }