From f4a60a693a7dec0c921e573573c58cf81e47aa98 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期三, 25 十月 2023 09:21:56 +0800
Subject: [PATCH] 增加厂商类别

---
 src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java |  111 +++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 83 insertions(+), 28 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 b0890de..6934173 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,6 +1,10 @@
 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;
@@ -8,6 +12,8 @@
 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;
@@ -27,53 +33,102 @@
 @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;
-    @Resource
-    private ArdEquipExternalMapper ardEquipExternalMapper;
 
+    //鍒濆鍖栨墽琛�
     @Override
-    public void run(ApplicationArguments args) throws Exception {
+    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);
+        //鑾峰彇灏忓厜鐢靛皾璇曠櫥褰�
+        ardCameraList = selectArdCamerasList(new ArdCameras());
+        HikClientUtil.loginAllCamera(ardCameraList);
+        syncCameraListTask();
     }
 
     /**
-     * 鏌ヨ鐩告満璁惧
-     *
-     * @param id 鐩告満璁惧涓婚敭
-     * @return 鐩告満璁惧
+     * 鍚屾鐩告満鍒楄〃浠诲姟
+     * 瀹炴椂鑾峰彇鍦ㄧ嚎鐨勫皬鍏夌數
+     * 鍒樿嫃涔�
+     * 2023/8/11 9:09:27
      */
-    @Override
-    public ArdCameras selectArdCamerasById(String id) {
-        return ardCamerasMapper.selectArdCamerasById(id);
+    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 ardCameras 鐩告満璁惧
+     * @param ardCamera 鐩告満璁惧
      * @return 鐩告満璁惧
      */
     @Override
-    public List<ArdCameras> selectArdCamerasList(ArdCameras ardCameras) {
-        return ardCamerasMapper.selectArdCamerasList(ardCameras);
+    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