From c8b6f74ecc29022a7f52a2ee35aa25eef3312f39 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期三, 25 十月 2023 17:09:15 +0800
Subject: [PATCH] 海康动态链接库集成

---
 src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java |  209 +++++++++++++++++++++++++++++++++-------------------
 1 files changed, 132 insertions(+), 77 deletions(-)

diff --git a/src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java b/src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java
index 7a52bec..36b5523 100644
--- a/src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java
+++ b/src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java
@@ -1,77 +1,132 @@
-package com.ard.alarm.camera.service.impl;
-
-import java.util.*;
-
-import com.ard.alarm.camera.domain.ArdCameras;
-import com.ard.alarm.camera.mapper.ArdCamerasMapper;
-import com.ard.alarm.camera.service.IArdCamerasService;
-import com.ard.alarm.external.domain.ArdEquipExternal;
-import com.ard.alarm.external.mapper.ArdEquipExternalMapper;
-import com.ard.utils.hiksdk.service.impl.HikClientUtil;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.boot.ApplicationArguments;
-import org.springframework.boot.ApplicationRunner;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.Resource;
-
-/**
- * 鐩告満璁惧Service涓氬姟灞傚鐞�
- *
- * @author 鍒樿嫃涔�
- * @date 2023-02-11
- */
-@Service
-@Slf4j(topic = "camera")
-@Order(4)
-public class ArdCamerasServiceImpl implements IArdCamerasService, ApplicationRunner {
-    @Resource
-    private ArdCamerasMapper ardCamerasMapper;
-    @Resource
-    private ArdEquipExternalMapper ardEquipExternalMapper;
-
-    @Override
-    public void run(ApplicationArguments args)  {
-        //鍔犺浇sdk搴�
-        HikClientUtil.loadHCNetSDKLib();
-        //鑾峰彇鍏ㄩ儴娴峰悍鍏夌數灏濊瘯鐧诲綍
-        List<ArdCameras> ardCameras = ardCamerasMapper.selectArdCamerasList(new ArdCameras());
-        HikClientUtil.loginAllCamera(ardCameras);
-        //鑾峰彇鍏ㄩ儴娴峰悍鎶ヨ涓绘満灏濊瘯鐧诲綍
-        ArdEquipExternal alarmHost = new ArdEquipExternal();
-        alarmHost.setFactory("1");
-        alarmHost.setType("1");
-        List<ArdEquipExternal> alarmHosts = ardEquipExternalMapper.selectArdEquipExternalList(alarmHost);
-        HikClientUtil.loginAllAlarmHost(alarmHosts);
-        //鑾峰彇鍏ㄩ儴闂ㄧ涓绘満灏濊瘯鐧诲綍
-        ArdEquipExternal accessControlHost = new ArdEquipExternal();
-        accessControlHost.setFactory("1");
-        accessControlHost.setType("6");
-        List<ArdEquipExternal>accessControlHosts = ardEquipExternalMapper.selectArdEquipExternalList(accessControlHost);
-        HikClientUtil.loginAllAccessControlHost(accessControlHosts);
-    }
-
-    /**
-     * 鏌ヨ鐩告満璁惧
-     *
-     * @param id 鐩告満璁惧涓婚敭
-     * @return 鐩告満璁惧
-     */
-    @Override
-    public ArdCameras selectArdCamerasById(String id) {
-        return ardCamerasMapper.selectArdCamerasById(id);
-    }
-
-    /**
-     * 鏌ヨ鐩告満璁惧鍒楄〃
-     *
-     * @param ardCameras 鐩告満璁惧
-     * @return 鐩告満璁惧
-     */
-    @Override
-    public List<ArdCameras> selectArdCamerasList(ArdCameras ardCameras) {
-        return ardCamerasMapper.selectArdCamerasList(ardCameras);
-    }
-}
+package com.ard.alarm.camera.service.impl;
+
+import java.util.*;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+import com.ard.alarm.camera.domain.ArdCameras;
+import com.ard.alarm.camera.mapper.ArdCamerasMapper;
+import com.ard.alarm.camera.service.IArdCamerasService;
+import com.ard.alarm.external.domain.ArdEquipExternal;
+import com.ard.alarm.external.mapper.ArdEquipExternalMapper;
+import com.ard.utils.hiksdk.service.impl.HikClientUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+
+/**
+ * 鐩告満璁惧Service涓氬姟灞傚鐞�
+ *
+ * @author 鍒樿嫃涔�
+ * @date 2023-02-11
+ */
+@Service
+@Slf4j(topic = "camera")
+@Order(4)
+public class ArdCamerasServiceImpl implements IArdCamerasService, ApplicationRunner {
+    private final static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+
+    public static List<ArdCameras> ardCameraList = new ArrayList<>();
+    @Resource
+    private ArdCamerasMapper ardCamerasMapper;
+
+    //鍒濆鍖栨墽琛�
+    @Override
+    public void run(ApplicationArguments args) {
+        //鑾峰彇灏忓厜鐢靛皾璇曠櫥褰�
+        ardCameraList = selectArdCamerasList(new ArdCameras());
+        HikClientUtil.loginAllCamera(ardCameraList);
+        syncCameraListTask();
+    }
+
+    /**
+     * 鍚屾鐩告満鍒楄〃浠诲姟
+     * 瀹炴椂鑾峰彇鍦ㄧ嚎鐨勫皬鍏夌數
+     * 鍒樿嫃涔�
+     * 2023/8/11 9:09:27
+     */
+    private void syncCameraListTask() {
+        scheduler.scheduleAtFixedRate(() -> {
+            try {
+                //region 瀹氭椂鍚屾灏忓厜鐢�
+                List<ArdCameras> newArdCameraList = selectArdCamerasList(new ArdCameras());
+                //闇�瑕佹洿鏂扮殑鏁版嵁
+                List<ArdCameras> updateList = sameListWithDifferent(ardCameraList, newArdCameraList);
+                if (updateList.size() > 0) {
+                    HikClientUtil.logoutAllCamera(updateList);
+                    HikClientUtil.loginAllCamera(updateList);
+                    ardCameraList.clear();
+                    ardCameraList.addAll(newArdCameraList);
+                }
+                //闇�瑕佸垹闄ょ殑鏁版嵁
+                List<ArdCameras> delList = diffList(ardCameraList, newArdCameraList);
+                if (delList.size() > 0) {
+                    HikClientUtil.logoutAllCamera(delList);
+                    for (ArdCameras ardCameras : delList) {
+                        ardCameraList.remove(ardCameras);
+                    }
+                }
+                //闇�瑕佹柊澧炵殑鏁版嵁
+                List<ArdCameras> inserList = diffList(newArdCameraList, ardCameraList);
+                if (inserList.size() > 0) {
+                    HikClientUtil.loginAllCamera(inserList);
+                    for (ArdCameras ardCameras : inserList) {
+                        ardCameraList.add(ardCameras);
+                    }
+                }
+                //endregion
+            } catch (Exception e) {
+                log.error("鍚屾鐩告満浠诲姟鎵ц鍑洪敊" + e.getMessage());
+            }
+        }, 10, 10, TimeUnit.SECONDS);
+    }
+
+    /**
+     * 鏌ヨ鐩告満璁惧鍒楄〃
+     *
+     * @param ardCamera 鐩告満璁惧
+     * @return 鐩告満璁惧
+     */
+    @Override
+    public List<ArdCameras> selectArdCamerasList(ArdCameras ardCamera) {
+        ardCamera.setGdType("0");
+        ardCamera.setFactory("1");
+        Wrapper<ArdCameras> queryWrapper=new QueryWrapper<>(ardCamera);
+        return ardCamerasMapper.selectList(queryWrapper);
+    }
+
+
+    //  姹備袱涓璞ist鐨勫樊闆�
+    private List<ArdCameras> diffList(List<ArdCameras> oldArrayList, List<ArdCameras> newArrayList) {
+        List<ArdCameras> resultList = oldArrayList.stream()
+                .filter(item -> !newArrayList.stream().map(e -> e.getId()).collect(Collectors.toList()).contains(item.getId()))
+                .collect(Collectors.toList());
+        return resultList;
+    }
+
+    //姹備袱涓璞ist鐨勪氦闆嗗瓧娈典笉鍚孖d鐩稿悓
+    private List<ArdCameras> sameListWithDifferent(List<ArdCameras> oldList, List<ArdCameras> newList) {
+        List<ArdCameras> differentFieldsList = newList.stream()
+                .filter(newItem -> {
+                    ArdCameras oldItem = oldList.stream()
+                            .filter(item -> item.getId().equals(newItem.getId()))
+                            .findFirst()
+                            .orElse(null);
+
+                    return oldItem == null || !Objects.equals(oldItem.getUpdateTime(), newItem.getUpdateTime());
+
+                })
+                .collect(Collectors.toList());
+
+        return differentFieldsList;
+    }
+}

--
Gitblit v1.9.3