设备同步逻辑修改
All checks were successful
Build and Push to Target Registry / 构建并推送镜像到目标仓库 (push) Successful in 13m12s

This commit is contained in:
lxj
2025-09-04 10:46:53 +08:00
parent e98890cd79
commit 86116cbf5c

View File

@@ -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<RemoteSdkChannel> sdkChannels = remoteHikSdkService.getDeviceChannel(sisDeviceManage.getDeviceIp());
SnailJobLog.REMOTE.info("设备[{}]sdk通道数量={}", sisDeviceManage.getDeviceIp(), sdkChannels.size());
// 根据设备ip 生成一个hashset
Map<String, RemoteSisDeviceChannel> data1 = ls.stream().collect(Collectors.toMap(RemoteSisDeviceChannel::getDeviceIp, item -> item));
Map<String, RemoteSdkChannel> data2 = sdkChannels.stream().collect(Collectors.toMap(RemoteSdkChannel::getChannelIp, item -> item));
Set<String> keys = new HashSet<>(data1.size() + data2.size());
keys.addAll(data1.keySet());
keys.addAll(data2.keySet());
// 在data1 不在data2 的数据 -- 删除本体通道
// 删除数据
List<RemoteSisDeviceChannel> deleteData = new ArrayList<>(data1.size());
// 在data2有 data1中没有的数据 -- 写入本地通道
// 新增数据
List<RemoteSdkChannel> insertData = new ArrayList<>(data1.size());
// 在2个集合中都存在的数据 -- 更新本地通道
// 更新数据
List<RemoteSisDeviceChannel> 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 {