From 1e89a0c2fc96040ba50d0fe4305ace22f3daa6cf Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期五, 11 八月 2023 15:35:21 +0800
Subject: [PATCH] 优化通用光电报警只获取小光电数据

---
 src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java |  103 +++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 95 insertions(+), 8 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 1726943..7513cd8 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,11 +1,21 @@
 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.hiksdk.service.impl.HikClientUtil;
+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;
@@ -19,18 +29,70 @@
  */
 @Service
 @Slf4j(topic = "camera")
-public class ArdCamerasServiceImpl implements IArdCamerasService {
+@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;
 
-
-    @PostConstruct
-    public void init()
-    {
-        List<ArdCameras> ardCameras = ardCamerasMapper.selectArdCamerasList(new ArdCameras());
+    @Override
+    public void run(ApplicationArguments args) {
+        //鍔犺浇sdk搴�
         HikClientUtil.loadHCNetSDKLib();
-        HikClientUtil.loginAll(ardCameras);
+        //鑾峰彇灏忓厜鐢靛皾璇曠櫥褰�
+        ArdCameras ardCamera=new ArdCameras();
+        ardCamera.setGdtype("0");
+        ardCameraList = ardCamerasMapper.selectArdCamerasList(ardCamera);
+        HikClientUtil.loginAllCamera(ardCameraList);
+        syncTask();
     }
+
+    /**
+     * 鍚屾浠诲姟
+     * 鍒樿嫃涔�
+     * 2023/8/11 9:09:27
+     */
+    private void syncTask() {
+        scheduler.scheduleAtFixedRate(() -> {
+            try {
+                //region 瀹氭椂鍚屾灏忓厜鐢�
+                ArdCameras ardCamera=new ArdCameras();
+                ardCamera.setGdtype("0");
+                List<ArdCameras> newArdCameraList = ardCamerasMapper.selectArdCamerasList(ardCamera);
+                //闇�瑕佹洿鏂扮殑鏁版嵁
+                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);
+    }
+
     /**
      * 鏌ヨ鐩告満璁惧
      *
@@ -53,4 +115,29 @@
         return ardCamerasMapper.selectArdCamerasList(ardCameras);
     }
 
+
+    //  姹備袱涓璞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