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