Jelajahi Sumber

Merge remote-tracking branch 'origin/V0.1.1' into V0.1.1

jingyuanchao 1 tahun lalu
induk
melakukan
845ec25019

+ 14 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/iot/service/IIotDeviceInfoService.java

@@ -55,4 +55,18 @@ public interface IIotDeviceInfoService extends IService<IotDeviceInfo> {
      * @param token
      */
     void deleteDeviceByToken(String token);
+
+    /**
+     * 保存报警主机设备,并更新缓存
+     * @param data
+     */
+    void saveAlarmHostDevice(List<IotDeviceInfo> data);
+
+    /**
+     * 更新报警主机设备,并更新缓存
+     * @param data
+     */
+    void updateAlarmHostDevice(List<IotDeviceInfo> data);
+
+    void deleteAlarmHostDeviceByToken(String token);
 }

+ 36 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/iot/service/impl/IotDeviceInfoServiceImpl.java

@@ -28,6 +28,7 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
 
     private static final String IOT_DVS_INFO = "device:iot_dvs_info_";
     private static final String IOT_CHANNEL_INFO = "device:iot_channel_info_";
+    private static final String IOT_AlARM_HOST_INFO = "device:iot_alarm_host_info_";
 
     /**
      * 根据设备类型和设备编码,获取设备信息
@@ -140,6 +141,9 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
         if (type == 2) {
             key = IOT_CHANNEL_INFO + info.getIotToken() + "_" + info.getHostCode() + "_" + info.getDeviceCode();
         }
+        if (type == 3) {
+            key = IOT_AlARM_HOST_INFO + info.getIotToken() + "_" + info.getHostCode() + "_" + info.getDeviceCode();
+        }
         RedisUtils.setCacheObject(key, info, Duration.ofMillis(1000 * 60 * 60));
     }
 
@@ -153,4 +157,36 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
         uw.lambda().set(IotDeviceInfo::getDeleted, 1);
         update(uw);
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void saveAlarmHostDevice(List<IotDeviceInfo> data) {
+        if(ObjectUtil.isNotEmpty(data)){
+            saveBatch(data);
+            for (IotDeviceInfo info : data) {
+                updateCache(info,3);
+            }
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateAlarmHostDevice(List<IotDeviceInfo> data) {
+        if (ObjectUtil.isNotEmpty(data)) {
+            updateBatchById(data);
+            for (IotDeviceInfo info : data) {
+                updateCache(info,3);
+            }
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteAlarmHostDeviceByToken(String token) {
+        UpdateWrapper<IotDeviceInfo> uw = new UpdateWrapper();
+        uw.lambda().eq(IotDeviceInfo::getIotToken, token);
+        uw.lambda().eq(IotDeviceInfo::getDeviceType, DeviceTypeEnum.ALARM_HOST);
+        uw.lambda().set(IotDeviceInfo::getDeleted, 1);
+        update(uw);
+    }
 }

+ 31 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/websocket/dto/alarmHost/AlarmHostInfo.java

@@ -0,0 +1,31 @@
+package com.xunmei.mediator.websocket.dto.alarmHost;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AlarmHostInfo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String productName;
+
+    private String deviceName;
+
+    private String displayName;
+
+    private String nodeType;
+
+    private boolean enabled;
+
+    private String sourceName;
+
+    private String description;
+
+    private String model;
+}

+ 3 - 1
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/websocket/enums/DeviceTypeEnum.java

@@ -3,7 +3,9 @@ package com.xunmei.mediator.websocket.enums;
 public enum DeviceTypeEnum {
     DVS("1", "DVS监控主机"),
     MONITOR_CAMERA("2", "模拟摄像头"),
-    NUMBER_CAMERA("3", "数字摄像头");
+    NUMBER_CAMERA("3", "数字摄像头"),
+    ALARM_HOST("4", "报警主机"),
+    ;
     private String code;
     private String desc;
 

+ 4 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/websocket/service/WebsocketService.java

@@ -1,8 +1,10 @@
 package com.xunmei.mediator.websocket.service;
 
 
+import com.xunmei.mediator.websocket.dto.alarmHost.AlarmHostInfo;
 import com.xunmei.mediator.websocket.dto.dvs.DvsBaseInfo;
 
+import java.util.List;
 import java.util.Set;
 
 public interface WebsocketService {
@@ -11,4 +13,6 @@ public interface WebsocketService {
     void sendAllMessage(Object obj) throws Exception;
 
     void dealDvsBaseInfo(DvsBaseInfo info, String token) throws Exception;
+
+    void dealAlarmHostInfo(List<AlarmHostInfo> info, String token) throws Exception;
 }

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

@@ -10,6 +10,7 @@ import com.xunmei.mediator.api.server.service.IotServerInfoService;
 import com.xunmei.mediator.api.video.service.IotDvrDiskService;
 import com.xunmei.mediator.iot.service.IIotDeviceInfoExtendService;
 import com.xunmei.mediator.iot.service.IIotDeviceInfoService;
+import com.xunmei.mediator.websocket.dto.alarmHost.AlarmHostInfo;
 import com.xunmei.mediator.websocket.dto.dvs.ChannelInfo;
 import com.xunmei.mediator.websocket.dto.dvs.DiskInfo;
 import com.xunmei.mediator.websocket.dto.dvs.DvsBaseInfo;
@@ -56,7 +57,9 @@ public class WebsocketServiceImpl implements WebsocketService {
     private IotDvrDiskService iIotDvrDiskService;
 
 
-    private static final String LOCK_ACCPET_KEY_PREFIX = "websocket:lock:base_info_";
+    private static final String LOCK_DVS_ACCPET_KEY_PREFIX = "websocket:lock:base_info_dvs_";
+
+    private static final String LOCK_ALARM_HOST_ACCPET_KEY_PREFIX = "websocket:lock:base_info_alarm_host_";
 
     /**
      * 给指定iot服务发送消息
@@ -92,8 +95,8 @@ public class WebsocketServiceImpl implements WebsocketService {
     }
 
 
-    private void lockAndExecute(String token, Runnable action) {
-        String lockKey = LOCK_ACCPET_KEY_PREFIX + token;
+    private void lockAndExecute(String lockKey, Runnable action) {
+        //String lockKey = LOCK_ACCPET_KEY_PREFIX + token;
         RLock lock = RedisUtils.getClient().getLock(lockKey);
         try {
             Boolean cacheLock = lock.tryLock(5, 10, TimeUnit.SECONDS);
@@ -101,7 +104,7 @@ public class WebsocketServiceImpl implements WebsocketService {
                 action.run();
                 Thread.sleep(10000);
             } else {
-                log.error("Failed to acquire lock for order: {}", token);
+                log.error("Failed to acquire lock for order: {}", lockKey);
             }
         } catch (InterruptedException e) {
             Thread.currentThread().interrupt();
@@ -119,7 +122,8 @@ public class WebsocketServiceImpl implements WebsocketService {
     @Transactional(rollbackFor = Exception.class)
     public void dealDvsBaseInfo(DvsBaseInfo dvsBaseInfo, String token) throws Exception {
         //添加分布式锁
-        lockAndExecute(token, () -> {
+        String lockKey = LOCK_DVS_ACCPET_KEY_PREFIX + token;
+        lockAndExecute(lockKey, () -> {
             if (StringUtils.isEmpty(token) || dvsBaseInfo == null) {
                 log.error("同步视频类基础信息失败。原因:token或DvsBaseInfo为null");
                 return;
@@ -178,6 +182,46 @@ public class WebsocketServiceImpl implements WebsocketService {
 
     }
 
+    @Override
+    public void dealAlarmHostInfo(List<AlarmHostInfo> alarmHostInfos, String token) throws Exception {
+        //添加分布式锁
+        String lockKey = LOCK_ALARM_HOST_ACCPET_KEY_PREFIX + token;
+        lockAndExecute(lockKey, () -> {
+            if (StringUtils.isEmpty(token) || alarmHostInfos.isEmpty()) {
+                log.error("同步报警主机基础信息失败。原因:token或alarmHostInfos为空");
+                return;
+            }
+            try {
+                if (StringUtils.isEmpty(token)) {
+                    log.error("同步报警主机基础信息,token为null,同步数据失败!");
+                    return;
+                }
+
+                IotServerInfo serverInfo = iotServerInfoService.selectByToken(token);
+                if (ObjectUtil.isEmpty(serverInfo)) {
+                    log.error("同步报警主机基础信息,token:{},获取机构信息未空,结束同步!", token);
+                    return;
+                }
+
+                //逻辑删除报警主机
+                iIotDeviceInfoService.deleteAlarmHostDeviceByToken(token);
+
+                //添加报警主机集合
+                List<IotDeviceInfo> addAlarmHostList = new ArrayList();
+                //更新报警主机集合
+                List<IotDeviceInfo> updateAlarmHostList = new ArrayList();
+
+                processAlarmHostDevices(alarmHostInfos,serverInfo,token,addAlarmHostList,updateAlarmHostList,null,null);
+
+                saveOrUpdateAlarmHostBatches(addAlarmHostList,updateAlarmHostList,null,null);
+
+
+            } catch (Exception var8) {
+                log.error("同步报警主机基础信息过程中出现异常", var8);
+            }
+        });
+    }
+
     /**
      * 批量保存和更新设备信息
      * @param addList
@@ -448,4 +492,89 @@ public class WebsocketServiceImpl implements WebsocketService {
     private Integer convertToMB(Long size) {
         return size == null ? 0 : (int) (size / 1024L / 1024L);
     }
+
+
+
+    /**
+     * 处理dvs数据
+     *
+     * @param alarmHostInfos
+     * @param serverInfo
+     * @param token
+     * @param addList
+     * @param updateList
+     * @param addListExtend
+     * @param updateListExtend
+     */
+    private void processAlarmHostDevices(List<AlarmHostInfo> alarmHostInfos, IotServerInfo serverInfo, String token, List<IotDeviceInfo> addList, List<IotDeviceInfo> updateList, List<IotDeviceInfoExtend> addListExtend, List<IotDeviceInfoExtend> updateListExtend) {
+        if (ObjectUtil.isEmpty(alarmHostInfos)) {
+            log.error("同步报警主机基础信息,获取报警主机信息为空");
+        } else {
+            for (AlarmHostInfo alarmHostInfo : alarmHostInfos) {
+                IotDeviceInfo info = iIotDeviceInfoService.selectByTypeAndCode(token, DeviceTypeEnum.ALARM_HOST.getCode(), alarmHostInfo.getDeviceName());
+                if (info == null) {
+                    info = createAlarmHostInfo(alarmHostInfo, serverInfo);
+                    addList.add(info);
+                    //addListExtend.add(createIotDeviceInfoExtend(dvsInfo, info.getId(),token));
+                } else {
+                    dealAlarmHostInfo(alarmHostInfo, info,serverInfo);
+                    updateList.add(info);
+                    //IotDeviceInfoExtend extend = iIotDeviceInfoExtendService.selectByDeviceId(info.getId());
+                    //dealDvsExtend(dvsInfo, extend);
+                    //updateListExtend.add(extend);
+                }
+            }
+        }
+    }
+
+    /**
+     * 转换报警主机设备数据(新增数据)
+     * @param alarmHostInfos
+     * @param serverInfo
+     * @return
+     */
+    private IotDeviceInfo createAlarmHostInfo(AlarmHostInfo alarmHostInfos, IotServerInfo serverInfo){
+        IotDeviceInfo info = new IotDeviceInfo();
+        long id = IdWorker.getId(info);
+        info.setDeleted(0);
+        info.setDeviceCode(alarmHostInfos.getDeviceName());
+        info.setDeviceProduct(alarmHostInfos.getProductName());
+        info.setDeviceModel(alarmHostInfos.getModel());
+        info.setDeviceType(DeviceTypeEnum.ALARM_HOST.getCode());
+        //info.setNetStatus("0");
+        info.setIotToken(serverInfo.getIotCode());
+        info.setDeviceName(alarmHostInfos.getDisplayName());
+        info.setOrgName(serverInfo.getOrgName());
+        info.setOrgId(serverInfo.getOrgId());
+        info.setOrgPath(serverInfo.getOrgPath());
+        info.setId(id);
+        return info;
+    }
+
+    /**
+     * 更新数据
+     * @param alarmHostInfos
+     * @param info
+     * @param serverInfo
+     */
+    private void dealAlarmHostInfo(AlarmHostInfo alarmHostInfos, IotDeviceInfo info, IotServerInfo serverInfo) {
+        info.setDeleted(0);
+        info.setDeviceName(alarmHostInfos.getDisplayName());
+        info.setDeviceModel(alarmHostInfos.getModel());
+        info.setOrgId(serverInfo.getOrgId());
+        info.setOrgName(serverInfo.getOrgName());
+        info.setOrgPath(serverInfo.getOrgPath());
+        info.setUpdateBy("system");
+        info.setUpdateTime(new Date());
+    }
+
+    private void saveOrUpdateAlarmHostBatches(List<IotDeviceInfo> addAlarmHostInfos,List<IotDeviceInfo> updateAlarmHostInfos,List<IotDeviceInfoExtend> addAlarmHostExtendInfos,List<IotDeviceInfoExtend> updateAlarmHostExtendInfos){
+        if (!addAlarmHostInfos.isEmpty()) {
+            iIotDeviceInfoService.saveAlarmHostDevice(addAlarmHostInfos);
+        }
+        if (!updateAlarmHostInfos.isEmpty()) {
+            iIotDeviceInfoService.updateAlarmHostDevice(updateAlarmHostInfos);
+        }
+    }
+
 }