From 5b017324148ea92d96f9f16ade215463d6c712e5 Mon Sep 17 00:00:00 2001 From: liusuyi <1951119284@qq.com> Date: 星期六, 10 八月 2024 14:15:02 +0800 Subject: [PATCH] 优化:海康大华sdk断线重连机制 --- ard-work/src/main/java/com/ruoyi/device/channel/service/impl/ArdChannelServiceImpl.java | 66 ++++++++++++++++++++++++++++++--- 1 files changed, 60 insertions(+), 6 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/device/channel/service/impl/ArdChannelServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/channel/service/impl/ArdChannelServiceImpl.java index 44ec3b3..0ada6a5 100644 --- a/ard-work/src/main/java/com/ruoyi/device/channel/service/impl/ArdChannelServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/device/channel/service/impl/ArdChannelServiceImpl.java @@ -1,13 +1,18 @@ package com.ruoyi.device.channel.service.impl; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import com.ruoyi.common.utils.uuid.IdUtils; -import org.springframework.beans.factory.annotation.Autowired; +import com.ruoyi.device.camera.domain.ArdCameras; +import com.ruoyi.media.service.IVtduService; import org.springframework.stereotype.Service; import com.ruoyi.device.channel.mapper.ArdChannelMapper; import com.ruoyi.device.channel.domain.ArdChannel; import com.ruoyi.device.channel.service.IArdChannelService; + +import javax.annotation.Resource; /** * 閫氶亾绠$悊Service涓氬姟灞傚鐞� @@ -17,9 +22,10 @@ */ @Service public class ArdChannelServiceImpl implements IArdChannelService { - @Autowired + @Resource private ArdChannelMapper ardChannelMapper; - + @Resource + private IVtduService vtduService; /** * 鏌ヨ閫氶亾绠$悊 * @@ -50,8 +56,8 @@ */ @Override public int insertArdChannel(ArdChannel ardChannel) { - ardChannel.setId(IdUtils.simpleUUID()); - return ardChannelMapper.insertArdChannel(ardChannel); + ardChannel.setId(IdUtils.simpleUUID()); + return ardChannelMapper.insertArdChannel(ardChannel); } /** @@ -86,6 +92,17 @@ public int deleteArdChannelById(String id) { return ardChannelMapper.deleteArdChannelById(id); } + + /** + * 娓呯┖閫氶亾 + * + * @author 鍒樿嫃涔� + * @date 2024/8/10 11:18 + */ + @Override + public int clearArdChannel(){ + return ardChannelMapper.clearArdChannel(); + } /** * 鍒犻櫎閫氶亾绠$悊淇℃伅 * @@ -96,4 +113,41 @@ public int deleteArdChannelByDeviceId(String deviceId) { return ardChannelMapper.deleteArdChannelByDeviceId(deviceId); } -} + + @Override + public void asyncChannel(ArdCameras ardCameras,List<ArdChannel> oldArrayList, List<ArdChannel> newArrayList) { + // 灏嗗垪琛ㄨ浆鎹负鏄犲皠浠ユ彁楂樻�ц兘 + Map<Integer, ArdChannel> oldMap = oldArrayList.stream() + .collect(Collectors.toMap(ArdChannel::getChanNo, channel -> channel)); + Map<Integer, ArdChannel> newMap = newArrayList.stream() + .collect(Collectors.toMap(ArdChannel::getChanNo, channel -> channel)); + + // 闇�瑕佹洿鏂扮殑鏁版嵁 + newArrayList.stream() + .filter(channel -> { + ArdChannel oldChannel = oldMap.get(channel.getChanNo()); + return oldChannel != null && !oldChannel.getName().equals(channel.getName()); + }) + .forEach(channel -> { + ArdChannel oldChannel = oldMap.get(channel.getChanNo()); + channel.setId(oldChannel.getId()); + updateArdChannel(channel); + }); + + // 闇�瑕佸垹闄ょ殑鏁版嵁 + oldArrayList.stream() + .filter(channel -> !newMap.containsKey(channel.getChanNo())) + .forEach(channel -> { + deleteArdChannelById(channel.getId()); + vtduService.deleteVtduByName(channel.getDeviceId() + "_" + channel.getChanNo()); + }); + + // 闇�瑕佹柊澧炵殑鏁版嵁 + newArrayList.stream() + .filter(channel -> !oldMap.containsKey(channel.getChanNo())) + .forEach(channel -> { + insertArdChannel(channel); + vtduService.addChanToVtdu(ardCameras, channel); + }); + } +} \ No newline at end of file -- Gitblit v1.9.3