소스 검색

获取IoTServer基础信息完善

xujie 1 년 전
부모
커밋
af496df4b5

+ 14 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/north/controller/MediatorController.java

@@ -53,4 +53,18 @@ public class MediatorController {
         websocketService.invokeBaseDeviceInfoForSchedule();
         return AjaxResult.success();
     }
+
+    @ApiOperation("定时任务获取所有的dvs下通道和硬盘信息")
+    @GetMapping({"/mediator/dvsBaseInfo"})
+    public AjaxResult dvsBaseInfo() {
+        websocketService.invokeDvsBaseInfoForSchedule();
+        return AjaxResult.success();
+    }
+
+    @ApiOperation("定时任务获取所有的报警主机下子系统和防区信息")
+    @GetMapping({"/mediator/alarmHostBaseInfo"})
+    public AjaxResult alarmHostBaseInfo() {
+        websocketService.invokeAlarmHostBaseInfoForSchedule();
+        return AjaxResult.success();
+    }
 }

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

@@ -18,6 +18,7 @@ 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.mediator.websocket.utils.IotServerUtils;
 import com.xunmei.system.api.domain.iot.IotDeviceInfo;
 import com.xunmei.system.api.enums.ProtectionStatus;
 import com.xunmei.system.api.util.LogUtils;
@@ -131,12 +132,12 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
                         .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);
+                    JSONObject args = new JSONObject();
+                    args.put("id",Integer.valueOf(subsystem.getCode()));
+                    args.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);
+                    LogUtils.DEVICE_CONTROL_LOG.info("报警主机布撤防控制topic:{},控制参数:{}",topic,args.toJSONString());
+                    IotServerUtils.invokeIotServer(topic,WebSocketConstants.SUB_SYSTEM_CONTROL,args);
                 }
             }
         }catch (Exception e){
@@ -146,18 +147,6 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
         }
     }
 
-    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);

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

@@ -108,6 +108,11 @@ public interface WebSocketConstants {
     String GET_DEVICE_BASE_INFOS = "getDeviceBaseInfos";
 
     /**
+     * 获取监控主机下通道、硬盘和监控主机扩展信息
+     */
+    String GET_DVS_DEVICE_INFOS = "getDvsDeviceInfos";
+
+    /**
      * 获取报警主机子系统和防区
      */
     String GET_ALARM_HOST_DEVICE_INFOS = "getAlarmHostDeviceInfos";

+ 5 - 2
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/websocket/service/WebsocketService.java

@@ -13,14 +13,17 @@ public interface WebsocketService {
 
     void sendAllMessage(Object obj) throws Exception;
 
+    void dealBaseDeviceInfo(List<DeviceBaseInfo> info, String token) throws Exception;
+
     void dealDvsBaseInfo(DvsBaseInfo info, String token) throws Exception;
 
-    void dealBaseDeviceInfo(List<DeviceBaseInfo> info, String token) throws Exception;
+    void dealAlarmHostBaseInfo(AlarmHostBaseInfo alarmHostBaseInfo, String token) throws Exception;
 
     void invokeBaseDeviceInfoForSchedule();
 
+    void invokeDvsBaseInfoForSchedule();
 
-    void dealSubSystemAndInput(AlarmHostBaseInfo alarmHostBaseInfo, String token) throws Exception;
+    void invokeAlarmHostBaseInfoForSchedule();
 
 
 

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

@@ -34,6 +34,7 @@ import com.xunmei.mediator.websocket.holder.WebSocketSessionHolder;
 import com.xunmei.mediator.websocket.redis.WebsocketPublisher;
 import com.xunmei.mediator.websocket.service.RouterService;
 import com.xunmei.mediator.websocket.service.WebsocketService;
+import com.xunmei.mediator.websocket.utils.IotServerUtils;
 import com.xunmei.system.api.domain.iot.IotDeviceInfo;
 import com.xunmei.system.api.domain.iot.IotDeviceInfoExtend;
 import com.xunmei.system.api.domain.websocket.RedisWebsocketMsg;
@@ -71,28 +72,41 @@ public class WebsocketServiceImpl implements WebsocketService, RouterService {
     private IotAlarmSubsystemService iotAlarmSubsystemService;
 
 
-    private static final String LOCK_DVS_ACCPET_KEY_PREFIX = "websocket:lock:base_info_dvs_";
+    private static final String LOCK_DVS_BASE_INFO = "websocket:lock:dvs_base_info";
 
-    private static final String LOCK_ALARM_HOST_ACCPET_KEY_PREFIX = "websocket:lock:base_info_alarm_host_";
+    private static final String LOCK_DEVICE_BASE_INFO = "websocket:lock:device_base_info";
 
-    private static final String LOCK_SUBSYSTEM_INPUT_ACCPET_KEY_PREFIX = "websocket:lock:base_info_subSystem_input_";
+    private static final String LOCK_ALARM_HOST_BASE_INFO = "websocket:lock:alarmHost_base_info";
 
+    //获取基础数据topic
+    private static final String iotServerDeviceTopic = "/things/IoTServer/IoTServerDevice/service/invoke";
 
     @Override
     public void invokeBaseDeviceInfoForSchedule() {
 
-        WebsocketResult websocketResult = new WebsocketResult();
-        websocketResult.setId(UUID.randomUUID().toString());
-        websocketResult.setTimestamp(new Date());
-        HashMap<String, Object> hashMap = new HashMap<>();
-        hashMap.put(WebSocketConstants.SERVICE, WebSocketConstants.GET_DEVICE_BASE_INFOS);
-        JSONObject object = new JSONObject();
-        object.put("categories", Arrays.asList(WebSocketConstants.DVS, WebSocketConstants.ALARM_HOST));
-        hashMap.put(WebSocketConstants.ARGS, object);
-        websocketResult.setPayload(hashMap);
-        WebSocketSessionHolder.sendAll(JacksonUtils.toJSONString(websocketResult));
+        List<String> categories = Arrays.asList(WebSocketConstants.DVS, WebSocketConstants.ALARM_HOST);
+        JSONObject args = new JSONObject();
+        args.put("categories", categories);
 
+        IotServerUtils.invokeIotServer(iotServerDeviceTopic,WebSocketConstants.GET_DEVICE_BASE_INFOS,args);
+    }
+
+    @Override
+    public void invokeDvsBaseInfoForSchedule() {
+        String[] productNames = ProductEnums.DVS.getProductName();
+        JSONObject args = new JSONObject();
+        args.put("productNames", productNames);
 
+        IotServerUtils.invokeIotServer(iotServerDeviceTopic,WebSocketConstants.GET_DVS_DEVICE_INFOS,args);
+    }
+
+    @Override
+    public void invokeAlarmHostBaseInfoForSchedule() {
+        String[] productNames = ProductEnums.ALARM_HOST.getProductName();
+        JSONObject args = new JSONObject();
+        args.put("productNames", productNames);
+
+        IotServerUtils.invokeIotServer(iotServerDeviceTopic,WebSocketConstants.GET_ALARM_HOST_DEVICE_INFOS,args);
     }
 
     /**
@@ -152,11 +166,17 @@ public class WebsocketServiceImpl implements WebsocketService, RouterService {
     }
 
 
+    /**
+     * dvs下通道、硬盘、dvs扩展信息基础信息
+     * @param dvsBaseInfo
+     * @param token
+     * @throws Exception
+     */
     @Async
     @Transactional(rollbackFor = Exception.class)
     public void dealDvsBaseInfo(DvsBaseInfo dvsBaseInfo, String token) throws Exception {
         //添加分布式锁
-        String lockKey = LOCK_DVS_ACCPET_KEY_PREFIX + token;
+        String lockKey = LOCK_DVS_BASE_INFO + token;
         lockAndExecute(lockKey, () -> {
             if (StringUtils.isEmpty(token) || dvsBaseInfo == null) {
                 log.error("同步视频类基础信息失败。原因:token或DvsBaseInfo为null");
@@ -211,14 +231,20 @@ public class WebsocketServiceImpl implements WebsocketService, RouterService {
 
     }
 
+    /**
+     * 报警主机和dvs基础信息
+     * @param deviceBaseInfos
+     * @param token
+     * @throws Exception
+     */
     @Async
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void dealBaseDeviceInfo(List<DeviceBaseInfo> alarmHostInfos, String token) throws Exception {
+    public void dealBaseDeviceInfo(List<DeviceBaseInfo> deviceBaseInfos, String token) throws Exception {
         //添加分布式锁
-        String lockKey = LOCK_ALARM_HOST_ACCPET_KEY_PREFIX + token;
+        String lockKey = LOCK_DEVICE_BASE_INFO + token;
         lockAndExecute(lockKey, () -> {
-            if (StringUtils.isEmpty(token) || alarmHostInfos.isEmpty()) {
+            if (StringUtils.isEmpty(token) || deviceBaseInfos.isEmpty()) {
                 log.error("同步主机基础信息失败。原因:token或alarmHostInfos为空");
                 return;
             }
@@ -242,23 +268,29 @@ public class WebsocketServiceImpl implements WebsocketService, RouterService {
                 //更新主机集合
                 List<IotDeviceInfo> updateHostList = new ArrayList();
 
-                processHostDevices(alarmHostInfos, serverInfo, token, addHostList, updateHostList);
+                processHostDevices(deviceBaseInfos, serverInfo, token, addHostList, updateHostList);
 
                 saveOrUpdateHostBatches(addHostList, updateHostList);
 
 
             } catch (Exception var8) {
-                log.error("同步报警主机基础信息过程中出现异常", var8);
+                log.error("同步主机基础信息过程中出现异常", var8);
             }
         });
     }
 
+    /**
+     * 报警主机下 子系统及防区基础数据和报警主机扩展信息
+     * @param alarmHostBaseInfo
+     * @param token
+     * @throws Exception
+     */
     @Async
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void dealSubSystemAndInput(AlarmHostBaseInfo alarmHostBaseInfo, String token) throws Exception {
+    public void dealAlarmHostBaseInfo(AlarmHostBaseInfo alarmHostBaseInfo, String token) throws Exception {
         //添加分布式锁
-        String lockKey = LOCK_SUBSYSTEM_INPUT_ACCPET_KEY_PREFIX + token;
+        String lockKey = LOCK_ALARM_HOST_BASE_INFO + token;
         lockAndExecute(lockKey, () -> {
             if (StringUtils.isEmpty(token) || alarmHostBaseInfo == null) {
                 log.error("同步报警主机子系统和防区信息失败。原因:token或alarmHostBaseInfo为空");
@@ -600,23 +632,23 @@ public class WebsocketServiceImpl implements WebsocketService, RouterService {
     /**
      * 处理报警主机数据
      *
-     * @param alarmHostInfos
+     * @param deviceBaseInfos
      * @param serverInfo
      * @param token
      * @param addList
      * @param updateList
      */
-    private void processHostDevices(List<DeviceBaseInfo> alarmHostInfos, IotServerInfo serverInfo, String token, List<IotDeviceInfo> addList, List<IotDeviceInfo> updateList) {
-        if (ObjectUtil.isEmpty(alarmHostInfos)) {
+    private void processHostDevices(List<DeviceBaseInfo> deviceBaseInfos, IotServerInfo serverInfo, String token, List<IotDeviceInfo> addList, List<IotDeviceInfo> updateList) {
+        if (ObjectUtil.isEmpty(deviceBaseInfos)) {
             log.error("同步主机基础信息,获取主机信息为空");
         } else {
-            for (DeviceBaseInfo alarmHostInfo : alarmHostInfos) {
-                IotDeviceInfo info = iIotDeviceInfoService.selectByTypeAndCode(token, getDeviceType(alarmHostInfo.getCategories()), alarmHostInfo.getDeviceName());
+            for (DeviceBaseInfo deviceBaseInfo : deviceBaseInfos) {
+                IotDeviceInfo info = iIotDeviceInfoService.selectByTypeAndCode(token, getDeviceType(deviceBaseInfo.getCategories()), deviceBaseInfo.getDeviceName());
                 if (info == null) {
-                    info = createHostInfo(alarmHostInfo, serverInfo);
+                    info = createHostInfo(deviceBaseInfo, serverInfo);
                     addList.add(info);
                 } else {
-                    dealHostInfo(alarmHostInfo, info, serverInfo);
+                    dealHostInfo(deviceBaseInfo, info, serverInfo);
                     updateList.add(info);
                 }
             }
@@ -842,6 +874,7 @@ public class WebsocketServiceImpl implements WebsocketService, RouterService {
         StringJoiner result = new StringJoiner(",");
         result.add(WebSocketConstants.GET_DEVICE_BASE_INFOS);
         result.add(WebSocketConstants.GET_ALARM_HOST_DEVICE_INFOS);
+        result.add(WebSocketConstants.GET_DVS_DEVICE_INFOS);
         return result.toString();
     }
 
@@ -851,12 +884,14 @@ public class WebsocketServiceImpl implements WebsocketService, RouterService {
         try {
             if (WebSocketConstants.GET_DEVICE_BASE_INFOS.equals(req.getEvent())) {
                 JSONObject object = (JSONObject) req.getData();
-                if (object != null) {
+                if (object != null){
                     List<DeviceBaseInfo> deviceBaseInfos = (List<DeviceBaseInfo>) object.get("deviceBaseInfos");
-                    chooseMethod(deviceBaseInfos);
+                    dealBaseDeviceInfo(deviceBaseInfos,req.getToken());
                 }
             } else if (WebSocketConstants.GET_ALARM_HOST_DEVICE_INFOS.equals(req.getEvent())) {
-                dealSubSystemAndInput((AlarmHostBaseInfo) req.getData(), req.getToken());
+                dealAlarmHostBaseInfo((AlarmHostBaseInfo) req.getData(), req.getToken());
+            }else if(WebSocketConstants.GET_DVS_DEVICE_INFOS.equals(req.getEvent())){
+                dealDvsBaseInfo((DvsBaseInfo) req.getData(),req.getToken());
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -864,8 +899,4 @@ public class WebsocketServiceImpl implements WebsocketService, RouterService {
         }
         return null;
     }
-
-    private void chooseMethod(List<DeviceBaseInfo> deviceBaseInfos) {
-        //new HashMap<String,List>()
-    }
 }

+ 32 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/websocket/utils/IotServerUtils.java

@@ -0,0 +1,32 @@
+package com.xunmei.mediator.websocket.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import com.xunmei.common.core.utils.JacksonUtils;
+import com.xunmei.mediator.websocket.constant.WebSocketConstants;
+import com.xunmei.mediator.websocket.dto.WebsocketResult;
+import com.xunmei.mediator.websocket.holder.WebSocketSessionHolder;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.UUID;
+
+@Slf4j
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public class IotServerUtils {
+
+    public static void invokeIotServer(String topic, String service, Object args){
+        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, args);
+        websocketResult.setPayload(hashMap);
+        WebSocketSessionHolder.sendAll(JacksonUtils.toJSONString(websocketResult));
+    }
+}