From 86116cbf5c5d4009de18e9eacec1ddf6ddd96416 Mon Sep 17 00:00:00 2001 From: lxj <15683799673@163.com> Date: Thu, 4 Sep 2025 10:46:53 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=90=8C=E6=AD=A5=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../snailjob/sis/HikDeviceCheckStateTask.java | 39 +++++++++---------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/sis/HikDeviceCheckStateTask.java b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/sis/HikDeviceCheckStateTask.java index e0268ed8..4c9b57ec 100644 --- a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/sis/HikDeviceCheckStateTask.java +++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/sis/HikDeviceCheckStateTask.java @@ -51,19 +51,12 @@ public class HikDeviceCheckStateTask { } SnailJobLog.REMOTE.info("需要同步状态的设备数量", device.size()); device.forEach(item -> { - // ipc - if (DeviceTypeEnum.IPC.getType().equals(item.getDeviceType())) { - updateDeviceStatus(item); + // 同步设备状态 + updateDeviceStatus(item); + // 如果设备类型为nvr或者cvr/dvr 需要同步通道状态 + if (DeviceTypeEnum.NVR.getType().equals(item.getDeviceType()) || DeviceTypeEnum.DVR.getType().equals(item.getDeviceType())) { + updateDeviceChannelStatus(item); } - - if (DeviceTypeEnum.NVR.getType().equals(item.getDeviceType())) { - // 设备状态更新完成 - boolean b = updateDeviceStatus(item); - if (b) { - updateDeviceChannelStatus(item); - } - } - }); return ExecuteResult.success(); } @@ -80,23 +73,26 @@ public class HikDeviceCheckStateTask { SnailJobLog.REMOTE.info("设备[{}]本地通道数量={}", sisDeviceManage.getDeviceIp(), ls.size()); List sdkChannels = remoteHikSdkService.getDeviceChannel(sisDeviceManage.getDeviceIp()); SnailJobLog.REMOTE.info("设备[{}]sdk通道数量={}", sisDeviceManage.getDeviceIp(), sdkChannels.size()); - + // 根据设备ip 生成一个hashset Map data1 = ls.stream().collect(Collectors.toMap(RemoteSisDeviceChannel::getDeviceIp, item -> item)); Map data2 = sdkChannels.stream().collect(Collectors.toMap(RemoteSdkChannel::getChannelIp, item -> item)); Set keys = new HashSet<>(data1.size() + data2.size()); keys.addAll(data1.keySet()); keys.addAll(data2.keySet()); - - // 在data1 不在data2 的数据 -- 删除本体通道 + // 删除数据 List deleteData = new ArrayList<>(data1.size()); - // 在data2有 data1中没有的数据 -- 写入本地通道 + // 新增数据 List insertData = new ArrayList<>(data1.size()); - // 在2个集合中都存在的数据 -- 更新本地通道 + // 更新数据 List updateData = new ArrayList<>(data1.size()); keys.forEach(item -> { + // 系统设备通道 RemoteSisDeviceChannel remoteSisDeviceChannel = data1.get(item); + // 远程设备通道 RemoteSdkChannel remoteSdkChannel = data2.get(item); + // 本地不存在此通道 if (remoteSisDeviceChannel == null) { + // 远程存在此通道 -- 新增 if (remoteSdkChannel != null) { remoteSdkChannel.setDeviceId(sisDeviceManage.getId()); remoteSdkChannel.setNvrIp(sisDeviceManage.getDeviceIp()); @@ -106,10 +102,13 @@ public class HikDeviceCheckStateTask { remoteSdkChannel.setNvrFactoryNo(sisDeviceManage.getFactoryNo()); remoteSdkChannel.setGroupId(sisDeviceManage.getGroupId()); remoteSdkChannel.setTenantId(sisDeviceManage.getTenantId()); - // 写入 + remoteSdkChannel.setChannelStatus(remoteSdkChannel.getChannelStatus()); insertData.add(remoteSdkChannel); } - } else { + } + // 本地存在此通道 + else { + // 远程不存在此通道 if (remoteSdkChannel == null) { // 删除 deleteData.add(remoteSisDeviceChannel); @@ -153,7 +152,7 @@ public class HikDeviceCheckStateTask { */ private boolean updateDeviceStatus(RemoteSisDeviceManage item) { Integer deviceType = item.getDeviceType(); - if(item.getDeviceType().equals(DeviceTypeEnum.IPC.getType())) { + if (item.getDeviceType().equals(DeviceTypeEnum.IPC.getType())) { } else {