From e71d3d823093bafe0283a57aa640928709d09434 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期一, 25 九月 2023 11:51:01 +0800
Subject: [PATCH] 优化sql框架使用mybatis-plus代替mybatis

---
 src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java |  170 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 157 insertions(+), 13 deletions(-)

diff --git a/src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java b/src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java
index 2753ea4..723ab35 100644
--- a/src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java
+++ b/src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java
@@ -1,53 +1,197 @@
 package com.ard.alarm.external.service.impl;
 
-import java.util.List;
+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.external.domain.ArdEquipExternal;
 import com.ard.alarm.external.mapper.ArdEquipExternalMapper;
 import com.ard.alarm.external.service.IArdEquipExternalService;
+import com.ard.utils.hiksdk.service.impl.HikClientUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Service;
 
 
 /**
  * externalService涓氬姟灞傚鐞�
- * 
+ *
  * @author zj
  * @date 2023-03-13
  */
 @Service
-public class ArdEquipExternalServiceImpl implements IArdEquipExternalService
-{
+@Slf4j(topic = "external")
+@Order(5)
+public class ArdEquipExternalServiceImpl implements IArdEquipExternalService, ApplicationRunner {
+
+    private final static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+
+    public static List<ArdEquipExternal> ardAlarmHostList = new ArrayList<>();
+    public static List<ArdEquipExternal> ardAccessHostList = new ArrayList<>();
+
     @Autowired
     private ArdEquipExternalMapper ardEquipExternalMapper;
 
+    @Override
+    public void run(ApplicationArguments args){
+        //鑾峰彇鍏ㄩ儴娴峰悍鎶ヨ涓绘満灏濊瘯鐧诲綍
+        ArdEquipExternal alarmHost = new ArdEquipExternal();
+        alarmHost.setFactory("1");
+        alarmHost.setType("1");
+        ardAlarmHostList = selectArdEquipExternalList(alarmHost);
+        HikClientUtil.loginAllAlarmHost(ardAlarmHostList);
+        log.debug("鎶ヨ涓绘満灏濊瘯鐧诲綍");
+        //鑾峰彇鍏ㄩ儴闂ㄧ涓绘満灏濊瘯鐧诲綍
+        ArdEquipExternal accessControlHost = new ArdEquipExternal();
+        accessControlHost.setFactory("1");
+        accessControlHost.setType("6");
+        ardAccessHostList = selectArdEquipExternalList(accessControlHost);
+        HikClientUtil.loginAllAccessControlHost(ardAccessHostList);
+        log.debug("闂ㄧ涓绘満灏濊瘯鐧诲綍");
+        //鍚屾浠诲姟
+        syncTask();
+    }
+
+    /**
+     * 鍚屾浠诲姟
+     * 鍒樿嫃涔�
+     * 2023/8/11 9:09:27
+     */
+    private void syncTask() {
+        scheduler.scheduleAtFixedRate(() -> {
+            try {
+                //region 瀹氭椂鍚屾鎶ヨ涓绘満
+                ArdEquipExternal alarmHost = new ArdEquipExternal();
+                alarmHost.setFactory("1");
+                alarmHost.setType("1");
+                List<ArdEquipExternal> newAlarmHostList = selectArdEquipExternalList(alarmHost);
+                //闇�瑕佹洿鏂扮殑鏁版嵁
+                List<ArdEquipExternal> updateList = sameListWithDifferent(ardAlarmHostList, newAlarmHostList);
+                if (updateList.size() > 0) {
+                    HikClientUtil.logoutAllAlarmHost(updateList);
+                    HikClientUtil.loginAllAlarmHost(updateList);
+                    ardAlarmHostList.clear();
+                    ardAlarmHostList.addAll(newAlarmHostList);
+                }
+                //闇�瑕佸垹闄ょ殑鏁版嵁
+                List<ArdEquipExternal> delList = diffList(ardAlarmHostList, newAlarmHostList);
+                if (delList.size() > 0) {
+                    HikClientUtil.logoutAllAlarmHost(delList);
+                    for (ArdEquipExternal ardEquipExternal : delList) {
+                        ardAlarmHostList.remove(ardEquipExternal);
+                    }
+                }
+                //闇�瑕佹柊澧炵殑鏁版嵁
+                List<ArdEquipExternal> inserList = diffList(newAlarmHostList, ardAlarmHostList);
+                if (inserList.size() > 0) {
+                    HikClientUtil.loginAllAlarmHost(inserList);
+                    for (ArdEquipExternal ardEquipExternal : inserList) {
+                        ardAlarmHostList.add(ardEquipExternal);
+                    }
+                }
+
+                //endregion
+                //region 瀹氭椂鍚屾闂ㄧ涓绘満
+                alarmHost = new ArdEquipExternal();
+                alarmHost.setFactory("1");
+                alarmHost.setType("6");
+                List<ArdEquipExternal> newAccessHostList = selectArdEquipExternalList(alarmHost);
+                //闇�瑕佹洿鏂扮殑鏁版嵁
+                updateList = sameListWithDifferent(ardAccessHostList, newAccessHostList);
+                if (updateList.size() > 0) {
+                    HikClientUtil.logoutAllAlarmHost(updateList);
+                    HikClientUtil.loginAllAlarmHost(updateList);
+                    ardAccessHostList.clear();
+                    ardAccessHostList.addAll(newAccessHostList);
+                }
+                //闇�瑕佸垹闄ょ殑鏁版嵁
+                delList = diffList(ardAccessHostList, newAccessHostList);
+                if (delList.size() > 0) {
+                    HikClientUtil.logoutAllAccessControlHost(delList);
+                    for (ArdEquipExternal ardEquipExternal : delList) {
+                        ardAccessHostList.remove(ardEquipExternal);
+                    }
+                }
+                //闇�瑕佹柊澧炵殑鏁版嵁
+                inserList = diffList(newAccessHostList, ardAccessHostList);
+                if (inserList.size() > 0) {
+                    HikClientUtil.loginAllAccessControlHost(inserList);
+                    for (ArdEquipExternal ardEquipExternal : inserList) {
+                        ardAccessHostList.add(ardEquipExternal);
+                    }
+                }
+                //endregion
+            } catch (Exception e) {
+                log.error("鍚屾澶栬仈浠诲姟鎵ц鍑洪敊" + e.getMessage());
+            }
+        }, 10, 10, TimeUnit.SECONDS);
+    }
+
+
     /**
      * 鏌ヨexternal
-     * 
+     *
      * @param id external涓婚敭
      * @return external
      */
     @Override
-    public ArdEquipExternal selectArdEquipExternalById(String id)
-    {
-        return ardEquipExternalMapper.selectArdEquipExternalById(id);
+    public ArdEquipExternal selectArdEquipExternalById(String id) {
+        return ardEquipExternalMapper.selectById(id);
     }
 
     @Override
     public ArdEquipExternal selectArdEquipExternal(ArdEquipExternal ardEquipExternal) {
-        return ardEquipExternalMapper.selectArdEquipExternal(ardEquipExternal);
+        QueryWrapper<ArdEquipExternal> queryWrapper=new QueryWrapper<>(ardEquipExternal);
+        return ardEquipExternalMapper.selectOne(queryWrapper);
     }
 
     /**
      * 鏌ヨexternal鍒楄〃
-     * 
+     *
      * @param ardEquipExternal external
      * @return external
      */
     @Override
-    public List<ArdEquipExternal> selectArdEquipExternalList(ArdEquipExternal ardEquipExternal)
-    {
-        return ardEquipExternalMapper.selectArdEquipExternalList(ardEquipExternal);
+    public List<ArdEquipExternal> selectArdEquipExternalList(ArdEquipExternal ardEquipExternal) {
+        QueryWrapper<ArdEquipExternal> queryWrapper=new QueryWrapper<>(ardEquipExternal);
+        return ardEquipExternalMapper.selectList(queryWrapper);
     }
 
+
+    //姹備袱涓璞ist鐨勪氦闆嗗瓧娈典笉鍚孖d鐩稿悓
+    private List<ArdEquipExternal> sameListWithDifferent(List<ArdEquipExternal> oldList, List<ArdEquipExternal> newList) {
+        List<ArdEquipExternal> differentFieldsList = newList.stream()
+                .filter(newItem -> {
+                    ArdEquipExternal oldItem = oldList.stream()
+                            .filter(item -> item.getId().equals(newItem.getId()))
+                            .findFirst()
+                            .orElse(null);
+
+                    return oldItem == null ||
+                            !Objects.equals(oldItem.getUpdateTime(), newItem.getUpdateTime()) ||
+                            !Objects.equals(oldItem.getIp(), newItem.getIp()) ||
+                            !Objects.equals(oldItem.getPort(), newItem.getPort()) ||
+                            !Objects.equals(oldItem.getUsername(), newItem.getUsername()) ||
+                            !Objects.equals(oldItem.getPassword(), newItem.getPassword());
+                })
+                .collect(Collectors.toList());
+
+        return differentFieldsList;
+    }
+
+
+    //  姹備袱涓璞ist鐨勫樊闆�
+    private List<ArdEquipExternal> diffList(List<ArdEquipExternal> oldArrayList, List<ArdEquipExternal> newArrayList) {
+        List<ArdEquipExternal> resultList = oldArrayList.stream()
+                .filter(item -> !newArrayList.stream().map(e -> e.getId()).collect(Collectors.toList()).contains(item.getId()))
+                .collect(Collectors.toList());
+        return resultList;
+    }
 }

--
Gitblit v1.9.3