From a767f8b7e2aabf9bb3bb98344e8c559c71c1d442 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期五, 11 八月 2023 14:40:28 +0800
Subject: [PATCH] 过滤通用光电报警只保留移动侦测、周界入侵报警、越界侦测报警 增加报警主机、门禁主机、通用光电数据同步

---
 src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java                 |  124 +++++++++--
 src/main/java/com/ard/utils/tcp/ClientHandler.java                                 |    4 
 src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java |  156 +++++++++++++
 src/main/java/com/ard/utils/hiksdk/service/impl/LoginResultCallBack.java           |    5 
 src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java                      |    4 
 src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java                  |  206 +++++++++---------
 src/main/resources/logback-spring.xml                                              |   26 ++
 src/main/resources/mapper/ArdCamerasMapper.xml                                     |    4 
 src/main/resources/mapper/ArdEquipExternalMapper.xml                               |    4 
 src/main/java/com/ard/alarm/camera/domain/ArdCameras.java                          |    9 
 src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java         |  101 +++++++-
 src/main/java/com/ard/alarm/external/domain/ArdEquipExternal.java                  |    4 
 12 files changed, 483 insertions(+), 164 deletions(-)

diff --git a/src/main/java/com/ard/alarm/camera/domain/ArdCameras.java b/src/main/java/com/ard/alarm/camera/domain/ArdCameras.java
index f10e0f7..5fa12ca 100644
--- a/src/main/java/com/ard/alarm/camera/domain/ArdCameras.java
+++ b/src/main/java/com/ard/alarm/camera/domain/ArdCameras.java
@@ -17,10 +17,7 @@
 @NoArgsConstructor
 public class ArdCameras {
     private static final long serialVersionUID = 1L;
-    public ArdCameras(String gdtype)
-    {
-        this.gdtype=gdtype;
-    }
+
     /**
      * id
      */
@@ -172,4 +169,8 @@
     private Integer loginId;
     private String operatorId;
     private Date operatorExpired;
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    private Date updateTime;
 }
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..7b0f9ab 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;
@@ -27,30 +31,62 @@
 @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)  {
+    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 = ardCamerasMapper.selectArdCamerasList(new ArdCameras());
+        HikClientUtil.loginAllCamera(ardCameraList);
+        syncTask();
+    }
+
+    /**
+     * 鍚屾浠诲姟
+     * 鍒樿嫃涔�
+     * 2023/8/11 9:09:27
+     */
+    private void syncTask() {
+        scheduler.scheduleAtFixedRate(() -> {
+            try {
+                //region 瀹氭椂鍚屾鐩告満
+                List<ArdCameras> newArdCameraList = ardCamerasMapper.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);
     }
 
     /**
@@ -74,4 +110,35 @@
     public List<ArdCameras> selectArdCamerasList(ArdCameras ardCameras) {
         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()) ||
+                            !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;
+    }
 }
diff --git a/src/main/java/com/ard/alarm/external/domain/ArdEquipExternal.java b/src/main/java/com/ard/alarm/external/domain/ArdEquipExternal.java
index 9d517e0..1ef1ae9 100644
--- a/src/main/java/com/ard/alarm/external/domain/ArdEquipExternal.java
+++ b/src/main/java/com/ard/alarm/external/domain/ArdEquipExternal.java
@@ -2,6 +2,8 @@
 
 import lombok.Data;
 
+import java.util.Date;
+
 /**
  * 澶栬仈璁惧绠$悊瀵硅薄 ard_equip_external
  *
@@ -52,4 +54,6 @@
     /** 鐢ㄦ埛id */
     private String userId;
 
+    private Date updateTime;
+
 }
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..9d77347 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,35 +1,171 @@
 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 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) throws Exception {
+        //鑾峰彇鍏ㄩ儴娴峰悍鎶ヨ涓绘満灏濊瘯鐧诲綍
+        ArdEquipExternal alarmHost = new ArdEquipExternal();
+        alarmHost.setFactory("1");
+        alarmHost.setType("1");
+        ardAlarmHostList = ardEquipExternalMapper.selectArdEquipExternalList(alarmHost);
+        HikClientUtil.loginAllAlarmHost(ardAlarmHostList);
+        //鑾峰彇鍏ㄩ儴闂ㄧ涓绘満灏濊瘯鐧诲綍
+        ArdEquipExternal accessControlHost = new ArdEquipExternal();
+        accessControlHost.setFactory("1");
+        accessControlHost.setType("6");
+        ardAccessHostList = ardEquipExternalMapper.selectArdEquipExternalList(accessControlHost);
+        HikClientUtil.loginAllAccessControlHost(ardAccessHostList);
+        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 = ardEquipExternalMapper.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 = ardEquipExternalMapper.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);
+    }
+
+
+    //姹備袱涓璞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;
+    }
+
     /**
      * 鏌ヨexternal
-     * 
+     *
      * @param id external涓婚敭
      * @return external
      */
     @Override
-    public ArdEquipExternal selectArdEquipExternalById(String id)
-    {
+    public ArdEquipExternal selectArdEquipExternalById(String id) {
         return ardEquipExternalMapper.selectArdEquipExternalById(id);
     }
 
@@ -40,14 +176,14 @@
 
     /**
      * 鏌ヨexternal鍒楄〃
-     * 
+     *
      * @param ardEquipExternal external
      * @return external
      */
     @Override
-    public List<ArdEquipExternal> selectArdEquipExternalList(ArdEquipExternal ardEquipExternal)
-    {
+    public List<ArdEquipExternal> selectArdEquipExternalList(ArdEquipExternal ardEquipExternal) {
         return ardEquipExternalMapper.selectArdEquipExternalList(ardEquipExternal);
     }
 
+
 }
diff --git a/src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java b/src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java
index 6eee57f..5e79fef 100644
--- a/src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java
+++ b/src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java
@@ -19,6 +19,10 @@
     public static Map<String, ArdCameras> cameraMap = new HashMap<>();
     //淇濆瓨鐩告満淇℃伅key:ip value:鎶ヨ涓绘満瀵硅薄
     public static Map<String, ArdEquipExternal> alarmHostMap = new HashMap<>();
+    //淇濆瓨鐩告満淇℃伅key:ip value:闂ㄧ涓绘満瀵硅薄
+    public static Map<String, ArdEquipExternal> accessHostMap = new HashMap<>();
     //淇濆瓨鐩告満鐧诲綍淇℃伅key:cameraId value:loginId
     public static Map<String, Integer> loginMap = new HashMap<>();
+    //淇濆瓨鐩告満鐨勫竷闃蹭俊鎭痥ey:cameraId value:lAlarmHandle
+    public static Map<String, Integer> alarmMap = new HashMap<>();
 }
diff --git a/src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java b/src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java
index 898dc85..9314aa7 100644
--- a/src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java
+++ b/src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java
@@ -46,26 +46,56 @@
      */
     @Override
     public boolean invoke(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) {
-
-        String sDeviceIP = ByteUtils.bytesToStringZh(pAlarmer.sDeviceIP);
-        Integer wLinkPort = Integer.valueOf(pAlarmer.wLinkPort);
+        SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String sDeviceIP = ByteUtils.bytesToStringZh(pAlarmer.sDeviceIP);//璁惧IP鍦板潃
+        Integer wLinkPort = Integer.valueOf(pAlarmer.wLinkPort);//璁惧閫氳绔彛
         CameraEventInfo info;
         String sTime;//浜嬩欢鏃堕棿
         String url = "";//浜嬩欢鍥剧墖
-        Boolean isSnapPic=true;
         //lCommand鏄紶鐨勬姤璀︾被鍨�
-        log.debug("鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand));
+        //log.debug("鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand));
         switch (lCommand) {
             case HCNetSDK.COMM_ALARM_V30:
-                log.debug("绉诲姩渚︽祴銆佽棰戜涪澶便�侀伄鎸°�両O淇″彿閲忕瓑鎶ヨ淇℃伅(鏆備笉瑙f瀽)");
-            case HCNetSDK.COMM_ALARM_RULE:
-                log.debug("琛屼负鍒嗘瀽淇℃伅鎶ヨ淇℃伅涓婃姤");
-                //region 琛屼负鍒嗘瀽淇℃伅
+                log.debug("绉诲姩渚︽祴");
                 ArdCameras ardCameras = new ArdCameras();
                 ardCameras.setIp(sDeviceIP);
                 ardCameras.setPort(wLinkPort);
                 IArdCamerasService ardCamerasService = SpringTool.getApplicationContext().getBean(IArdCamerasService.class);
-                ArdCameras ardcamere = ardCamerasService.selectArdCamerasList(ardCameras).get(0);
+                ArdCameras camera = ardCamerasService.selectArdCamerasList(ardCameras).get(0);
+                HCNetSDK.NET_DVR_ALARMINFO_V30 netDvrAlarminfoV30 = new HCNetSDK.NET_DVR_ALARMINFO_V30();
+                netDvrAlarminfoV30.write();
+                Pointer pNDAInfo = netDvrAlarminfoV30.getPointer();
+                pNDAInfo.write(0, pAlarmInfo.getByteArray(0, netDvrAlarminfoV30.size()), 0, netDvrAlarminfoV30.size());
+                netDvrAlarminfoV30.read();
+                switch (netDvrAlarminfoV30.dwAlarmType) {
+                    case 3:
+                        info = new CameraEventInfo();
+                        info.setAlarmName("绉诲姩渚︽祴");
+                        info.setAlarmTime(fmt.format(new Date()));
+                        info.setCameraName(camera.getName());
+                        info.setCameraId(camera.getId());
+                        info.setCameraIp(camera.getIp());
+                        info.setCameraType(camera.getGdtype());
+                        info.setCameraChannel(Integer.valueOf(netDvrAlarminfoV30.byChannel[0]));
+                        info.setLongitude(camera.getLongitude());
+                        info.setLatitude(camera.getLatitude());
+                        info.setAlarmType("绉诲姩渚︽祴");
+                        printLog(info);
+                        //鍥剧墖瀛樺叆minio
+                        url = savePicture(info);
+                        info.setPicUrl(url);
+                        publishMqtt(info);
+                        break;
+                }
+
+            case HCNetSDK.COMM_ALARM_RULE:
+                log.debug("琛屼负鍒嗘瀽淇℃伅鎶ヨ淇℃伅涓婃姤");
+                //region 琛屼负鍒嗘瀽淇℃伅
+                ardCameras = new ArdCameras();
+                ardCameras.setIp(sDeviceIP);
+                ardCameras.setPort(wLinkPort);
+                ardCamerasService = SpringTool.getApplicationContext().getBean(IArdCamerasService.class);
+                ArdCameras ardCamera = ardCamerasService.selectArdCamerasList(ardCameras).get(0);
 
                 HCNetSDK.NET_VCA_RULE_ALARM strVcaAlarm = new HCNetSDK.NET_VCA_RULE_ALARM();
                 strVcaAlarm.write();
@@ -79,80 +109,81 @@
                 info = new CameraEventInfo();
                 info.setAlarmName("浜哄憳琛屼负鍒嗘瀽");
                 info.setAlarmTime(sTime);
-                info.setCameraName(ardcamere.getName());
-                info.setCameraId(ardcamere.getId());
+                info.setCameraName(ardCamera.getName());
+                info.setCameraId(ardCamera.getId());
                 info.setCameraIp(ipaddr);
-                info.setCameraType(ardcamere.getGdtype());
+                info.setCameraType(ardCamera.getGdtype());
                 info.setCameraChannel(channel);
-                info.setLongitude(ardcamere.getLongitude());
-                info.setLatitude(ardcamere.getLatitude());
-                info.setAlarmType(ardcamere.getGdtype());
+                info.setLongitude(ardCamera.getLongitude());
+                info.setLatitude(ardCamera.getLatitude());
                 info.setRuleId(ruleID);
                 switch (strVcaAlarm.struRuleInfo.wEventTypeEx) {
                     case 1: //region绌胯秺璀︽垝闈� (瓒婄晫渚︽祴)
                         info.setAlarmType("瓒婄晫渚︽祴鎶ヨ");
                         strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_TRAVERSE_PLANE.class);
+                        printLog(info);
+                        //鍥剧墖瀛樺叆minio
+                        url = savePicture(info);
+                        info.setPicUrl(url);
+                        publishMqtt(info);
                         //endregion
                         break;
-                    case 2: //region 鐩爣杩涘叆鍖哄煙
-                        info.setAlarmType("鐩爣杩涘叆鍖哄煙鎶ヨ");
-                        strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_AREA.class);
-                        //endregion
-                        break;
-                    case 3: //region 鐩爣绂诲紑鍖哄煙
-                        info.setAlarmType("鐩爣绂诲紑鍖哄煙鎶ヨ");
-                        strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_AREA.class);
-                        //endregion
-                        break;
+//                    case 2: //region 鐩爣杩涘叆鍖哄煙
+//                        info.setAlarmType("鐩爣杩涘叆鍖哄煙鎶ヨ");
+//                        strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_AREA.class);
+//                        //endregion
+//                        break;
+//                    case 3: //region 鐩爣绂诲紑鍖哄煙
+//                        info.setAlarmType("鐩爣绂诲紑鍖哄煙鎶ヨ");
+//                        strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_AREA.class);
+//                        //endregion
+//                        break;
                     case 4: //region 鍛ㄧ晫鍏ヤ镜
                         info.setAlarmType("鍛ㄧ晫鍏ヤ镜鎶ヨ");
                         strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_INTRUSION.class);
+                        printLog(info);
+                        //鍥剧墖瀛樺叆minio
+                        url = savePicture(info);
+                        info.setPicUrl(url);
+                        publishMqtt(info);
                         //endregion
                         break;
-                    case 5: //region 寰樺緤
-                        info.setAlarmType("寰樺緤浜嬩欢鎶ヨ");
-                        //endregion
-                        break;
-                    case 8: //region 蹇�熺Щ鍔�(濂旇窇)
-                        info.setAlarmType("蹇�熺Щ鍔�(濂旇窇)浜嬩欢鎶ヨ");
-                        //endregion
-                        break;
-                    case 13: //region 鐗╁搧閬楃暀浜嬩欢
-                        info.setAlarmType("鐗╁搧閬楃暀浜嬩欢鎶ヨ");
-                        //endregion
-                        break;
-                    case 14: //region 鐗╁搧鎷垮彇浜嬩欢
-                        info.setAlarmType("鐗╁搧鎷垮彇浜嬩欢浜嬩欢鎶ヨ");
-                        //endregion
-                        break;
-                    case 20: //region 鍊掑湴妫�娴�
-                        info.setAlarmType("鍊掑湴浜嬩欢瑙﹀彂");
-                        //endregion
-                        break;
-                    case 44: //region 鐜╂墜鏈�
-                        info.setAlarmType("鐜╂墜鏈烘姤璀︿簨浠�");
-                        //endregion
-                        break;
+//                    case 5: //region 寰樺緤
+//                        info.setAlarmType("寰樺緤浜嬩欢鎶ヨ");
+//                        //endregion
+//                        break;
+//                    case 8: //region 蹇�熺Щ鍔�(濂旇窇)
+//                        info.setAlarmType("蹇�熺Щ鍔�(濂旇窇)浜嬩欢鎶ヨ");
+//                        //endregion
+//                        break;
+//                    case 13: //region 鐗╁搧閬楃暀浜嬩欢
+//                        info.setAlarmType("鐗╁搧閬楃暀浜嬩欢鎶ヨ");
+//                        //endregion
+//                        break;
+//                    case 14: //region 鐗╁搧鎷垮彇浜嬩欢
+//                        info.setAlarmType("鐗╁搧鎷垮彇浜嬩欢浜嬩欢鎶ヨ");
+//                        //endregion
+//                        break;
+//                    case 20: //region 鍊掑湴妫�娴�
+//                        info.setAlarmType("鍊掑湴浜嬩欢瑙﹀彂");
+//                        //endregion
+//                        break;
+//                    case 44: //region 鐜╂墜鏈�
+//                        info.setAlarmType("鐜╂墜鏈烘姤璀︿簨浠�");
+//                        //endregion
+//                        break;
                     default:
-                       // log.debug("鏈煡琛屼负浜嬩欢绫诲瀷:" + strVcaAlarm.struRuleInfo.wEventTypeEx);
-                        isSnapPic=false;
+                        // log.debug("鏈煡琛屼负浜嬩欢绫诲瀷:" + strVcaAlarm.struRuleInfo.wEventTypeEx);
                         break;
                 }
                 //endregion
-                //鍥剧墖瀛樺叆minio
-                if(isSnapPic) {
-                    url = savePicture(info);
-                    info.setPicUrl(url);
-                    publishMqtt(info);
-                }
-
                 break;
-            case HCNetSDK.COMM_UPLOAD_FACESNAP_RESULT:
-                log.debug("浜鸿劯妫�娴嬩簨浠朵笂鎶�(鏆備笉瑙f瀽)");
-                break;
-            case HCNetSDK.COMM_GISINFO_UPLOAD:
-                log.debug("GPS鎶ヨ淇℃伅涓婃姤(鏆備笉瑙f瀽)");
-                break;
+//            case HCNetSDK.COMM_UPLOAD_FACESNAP_RESULT:
+//                log.debug("浜鸿劯妫�娴嬩簨浠朵笂鎶�(鏆備笉瑙f瀽)");
+//                break;
+//            case HCNetSDK.COMM_GISINFO_UPLOAD:
+//                log.debug("GPS鎶ヨ淇℃伅涓婃姤(鏆備笉瑙f瀽)");
+//                break;
             case HCNetSDK.COMM_ALARMHOST_CID_ALARM:
                 log.debug("鎶ヨ涓绘満CID鎶ュ憡鎶ヨ涓婃姤");
                 //region 鎶ヨ涓绘満鎶ヨ澶勭悊
@@ -256,7 +287,7 @@
 
                 if (dwMajor != 5) {
                     //鍙幏鍙栦簨浠�
-                    log.debug("闈炰簨浠舵姤璀︽暟鎹笂鎶�(鏆備笉瑙f瀽)");
+                    // log.debug("闈炰簨浠舵姤璀︽暟鎹笂鎶�(鏆備笉瑙f瀽)");
                     break;
                 }
                 int dwMinor = strACSInfo.dwMinor;
@@ -357,47 +388,13 @@
                 //endregion
                 break;
             default:
-                log.debug("鏈煡鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand));
+                // log.debug("鏈煡鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand));
                 break;
 
         }
         return true;
     }
 
-    /**
-     * @鎻忚堪 淇濆瓨鍥剧墖灏佽鏂规硶
-     * @鍙傛暟 [strVcaAlarm, eventName, eventNameEng]
-     * @杩斿洖鍊� java.lang.String
-     * @鍒涘缓浜� 鍒樿嫃涔�
-     * @鍒涘缓鏃堕棿 2023/2/17 15:05
-     * @淇敼浜哄拰鍏跺畠淇℃伅
-     */
-    private String savePicture(HCNetSDK.NET_VCA_RULE_ALARM strVcaAlarm, String eventName, String eventNameEng) {
-        String url = "";
-        if ((strVcaAlarm.dwPicDataLen > 0) && (strVcaAlarm.byPicTransType == 0)) {
-            String currentTime = new SimpleDateFormat("yyyyMMdd").format(new Date());
-            try {
-                //瀛樺叆minio
-                long offset = 0;
-                ByteBuffer buffers = strVcaAlarm.pImage.getByteBuffer(offset, strVcaAlarm.dwPicDataLen);
-                byte[] bytes = new byte[strVcaAlarm.dwPicDataLen];
-                buffers.rewind();
-                buffers.get(bytes);
-                InputStream inputStream = new ByteArrayInputStream(bytes);
-                String ipaddr = new String(strVcaAlarm.struDevInfo.struDevIP.sIpV4).trim();//璁惧ip
-                String UUID = java.util.UUID.randomUUID().toString().replace("-", "");
-                String filename = ipaddr + "/" + currentTime + "/" + eventNameEng + "/" + UUID + ".jpg";
-                boolean uploadRes = MinioUtils.uploadObject("pic", filename, inputStream, "image/jpeg");
-                if (uploadRes) {
-                    url = MinioClientSingleton.domainUrl + filename;
-                    log.info("鍐欏叆minio鍥剧墖鍦板潃锛�" + url);
-                }
-            } catch (Exception ex) {
-                log.error(eventName + "澶勭悊鍥剧墖寮傚父锛�" + ex.getMessage());
-            }
-        }
-        return url;
-    }
 
     /**
      * 鐩告満鎴浘
@@ -405,8 +402,7 @@
     private String savePicture(CameraEventInfo info) {
         CameraCmd cmd = new CameraCmd();
         ArdCameras Cameras = GlobalVariable.cameraMap.get(info.getCameraIp());
-        if(Cameras==null)
-        {
+        if (Cameras == null) {
             return "";
         }
         cmd.setCameraId(Cameras.getId());
@@ -442,9 +438,9 @@
      * 鎵撳嵃闂ㄧ浜嬩欢鏃ュ織
      */
     private void printLog(AccessControlHostEventInfo info) {
-        log.debug("銆愭姤璀D銆�" + info.getSerialNo() + "銆愯澶囩紪鍙枫��"+
+        log.debug("銆愭姤璀D銆�" + info.getSerialNo() + "銆愯澶囩紪鍙枫��" +
                 "銆愰棬缂栧彿銆�" + info.getDoorNo() + "銆愪簨浠剁被鍨嬨��" + info.getAlarmType() +
-                "銆愰槻鍖虹被鍨嬨��" + info.getDefenseType()+"銆愭椂闂淬��" + info.getAlarmTime() +
+                "銆愰槻鍖虹被鍨嬨��" + info.getDefenseType() + "銆愭椂闂淬��" + info.getAlarmTime() +
                 "銆愰棬绂佷富鏈篒D銆�" + info.getAcsId());
     }
 
diff --git a/src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java b/src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java
index 428c3fe..1faeb54 100644
--- a/src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java
+++ b/src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java
@@ -121,11 +121,8 @@
 
     /**
      * @鎻忚堪 娉ㄥ唽鐧诲綍 闆嗘垚浜嶯ET_DVR_Login_V30锛屾敮鎸佸悓姝ュ拰寮傛鐧诲綍
-     * @鍙傛暟 [dvrLogin]
-     * @杩斿洖鍊� java.lang.Integer
      * @鍒涘缓浜� 鍒樿嫃涔�
      * @鍒涘缓鏃堕棿 2023/1/17 16:12
-     * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     public static void login(DeviceInfo deviceInfo) {
         // 鍒濆鍖�
@@ -173,12 +170,34 @@
     }
 
     /**
+     * @鎻忚堪 鐢ㄦ埛娉ㄩ攢
+     * @鍒涘缓浜� 鍒樿嫃涔�
+     * @鍒涘缓鏃堕棿 2023/1/17 16:12
+     */
+    public static void logout(DeviceInfo deviceInfo) {
+        String deviceIpPort = deviceInfo.getIp() + ":" + deviceInfo.getPort();
+        //鎾ら槻
+        if (GlobalVariable.alarmMap.containsKey(deviceInfo.getDeviceId())) {
+            Integer lAlarmHandle = GlobalVariable.alarmMap.get(deviceInfo.getDeviceId());
+            boolean b = hCNetSDK.NET_DVR_CloseAlarmChan_V30(lAlarmHandle);
+            if (b) {
+                log.debug("璁惧銆�" + deviceIpPort + "銆戞挙闃叉垚鍔�");
+            }
+        }
+        //鐧诲嚭
+        if (GlobalVariable.loginMap.containsKey(deviceInfo.getDeviceId())) {
+            Integer lUserID = GlobalVariable.loginMap.get(deviceInfo.getDeviceId());
+            boolean b = hCNetSDK.NET_DVR_Logout(lUserID);
+            if (b) {
+                log.debug("璁惧銆�" + deviceIpPort + "銆戞敞閿�鎴愬姛");
+            }
+        }
+    }
+
+    /**
      * @鎻忚堪 鐧诲綍鎵�鏈夌浉鏈�
-     * @鍙傛暟 []
-     * @杩斿洖鍊� void
      * @鍒涘缓浜� 鍒樿嫃涔�
      * @鍒涘缓鏃堕棿 2023/2/3 10:10
-     * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     public static void loginAllCamera(List<ArdCameras> ardCameras) {
         try {
@@ -191,8 +210,30 @@
                 info.setUsername(camera.getUsername());
                 info.setPassword(camera.getPassword());
                 login(info);
-                String ip = camera.getIp();
-                GlobalVariable.cameraMap.put(ip, camera);
+                GlobalVariable.cameraMap.put(camera.getIp(), camera);
+            }
+        } catch (Exception ex) {
+            log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage());
+        }
+    }
+
+    /**
+     * @鎻忚堪 鐧诲嚭鎵�鏈夌浉鏈�
+     * @鍒涘缓浜� 鍒樿嫃涔�
+     * @鍒涘缓鏃堕棿 2023/2/3 10:10
+     */
+    public static void logoutAllCamera(List<ArdCameras> ardCameras) {
+        try {
+            for (ArdCameras camera : ardCameras) {
+                Thread.sleep(100);
+                DeviceInfo info = new DeviceInfo();
+                info.setDeviceId(camera.getId());
+                info.setIp(camera.getIp());
+                info.setPort(camera.getPort());
+                info.setUsername(camera.getUsername());
+                info.setPassword(camera.getPassword());
+                logout(info);
+                GlobalVariable.cameraMap.remove(camera.getIp());
             }
         } catch (Exception ex) {
             log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage());
@@ -201,11 +242,8 @@
 
     /**
      * @鎻忚堪 鐧诲綍鎵�鏈夋姤璀︿富鏈�
-     * @鍙傛暟 []
-     * @杩斿洖鍊� void
      * @鍒涘缓浜� 鍒樿嫃涔�
      * @鍒涘缓鏃堕棿 2023/2/3 10:10
-     * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     public static void loginAllAlarmHost(List<ArdEquipExternal> ardEquipExternals) {
         try {
@@ -225,14 +263,34 @@
             log.error("鍒濆鍖栨姤璀︿富鏈哄紓甯革細" + ex.getMessage());
         }
     }
-
     /**
-     * @鎻忚堪 鐧诲綍鎵�鏈夐棬绂佷富鏈�
-     * @鍙傛暟 []
-     * @杩斿洖鍊� void
+     * @鎻忚堪 鐧诲嚭鎵�鏈夋姤璀︿富鏈�
      * @鍒涘缓浜� 鍒樿嫃涔�
      * @鍒涘缓鏃堕棿 2023/2/3 10:10
-     * @淇敼浜哄拰鍏跺畠淇℃伅
+     */
+    public static void logoutAllAlarmHost(List<ArdEquipExternal> ardEquipExternals)
+    {
+        try {
+            for (ArdEquipExternal alarmHost : ardEquipExternals) {
+                Thread.sleep(100);
+                DeviceInfo info = new DeviceInfo();
+                info.setDeviceId(alarmHost.getId());
+                info.setIp(alarmHost.getIp());
+                info.setPort(alarmHost.getPort());
+                info.setUsername(alarmHost.getUsername());
+                info.setPassword(alarmHost.getPassword());
+                logout(info);
+                String ip = alarmHost.getIp();
+                GlobalVariable.alarmHostMap.remove(ip);
+            }
+        } catch (Exception ex) {
+            log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage());
+        }
+    }
+    /**
+     * @鎻忚堪 鐧诲綍鎵�鏈夐棬绂佷富鏈�
+     * @鍒涘缓浜� 鍒樿嫃涔�
+     * @鍒涘缓鏃堕棿 2023/2/3 10:10
      */
     public static void loginAllAccessControlHost(List<ArdEquipExternal> ardEquipExternals) {
         try {
@@ -246,13 +304,35 @@
                 info.setPassword(accessControlHost.getPassword());
                 login(info);
                 String ip = accessControlHost.getIp();
-                GlobalVariable.alarmHostMap.put(ip, accessControlHost);
+                GlobalVariable.accessHostMap.put(ip, accessControlHost);
             }
         } catch (Exception ex) {
             log.error("鍒濆鍖栨姤璀︿富鏈哄紓甯革細" + ex.getMessage());
         }
     }
-
+    /**
+     * @鎻忚堪 鐧诲嚭鎵�鏈夐棬绂佷富鏈�
+     * @鍒涘缓浜� 鍒樿嫃涔�
+     * @鍒涘缓鏃堕棿 2023/2/3 10:10
+     */
+    public static void logoutAllAccessControlHost(List<ArdEquipExternal> ardEquipExternals) {
+        try {
+            for (ArdEquipExternal accessControlHost : ardEquipExternals) {
+                Thread.sleep(100);
+                DeviceInfo info = new DeviceInfo();
+                info.setDeviceId(accessControlHost.getId());
+                info.setIp(accessControlHost.getIp());
+                info.setPort(accessControlHost.getPort());
+                info.setUsername(accessControlHost.getUsername());
+                info.setPassword(accessControlHost.getPassword());
+                logout(info);
+                String ip = accessControlHost.getIp();
+                GlobalVariable.accessHostMap.remove(ip);
+            }
+        } catch (Exception ex) {
+            log.error("鍒濆鍖栨姤璀︿富鏈哄紓甯革細" + ex.getMessage());
+        }
+    }
     /**
      * @鎻忚堪 娉ㄩ攢鐧诲綍
      * @鍙傛暟 [dvrLogin]
@@ -324,10 +404,8 @@
                 log.error("璁惧銆�" + deviceIpPort + "銆戝竷闃插け璐ワ紝閿欒鐮�==========銆�" + hCNetSDK.NET_DVR_GetLastError());
                 // 娉ㄩ攢 閲婃斁sdk璧勬簮
                 logout(lUserID);
-                return lAlarmHandle;
             } else {
                 log.debug("璁惧銆�" + deviceIpPort + "銆戝竷闃叉垚鍔�");
-                return lAlarmHandle;
             }
         }
         return lAlarmHandle;
@@ -374,11 +452,11 @@
         //璁剧疆鍥剧墖澶у皬
         ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024);
         // 鎶撳浘鍒板唴瀛橈紝鍗曞抚鏁版嵁鎹曡幏骞朵繚瀛樻垚JPEG瀛樻斁鍦ㄦ寚瀹氱殑鍐呭瓨绌洪棿涓�
-        log.debug("-----------杩欓噷寮�濮嬪皝瑁� NET_DVR_CaptureJPEGPicture_NEW---------");
+       // log.debug("-----------杩欓噷寮�濮嬪皝瑁� NET_DVR_CaptureJPEGPicture_NEW---------");
         boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a);
-        log.debug("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is);
+        //log.debug("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is);
         if (is) {
-            log.debug("hksdk(鎶撳浘)-缁撴灉鐘舵�佸��(0琛ㄧず鎴愬姛):" + hCNetSDK.NET_DVR_GetLastError());
+          //  log.debug("hksdk(鎶撳浘)-缁撴灉鐘舵�佸��(0琛ㄧず鎴愬姛):" + hCNetSDK.NET_DVR_GetLastError());
             byte[] array = jpegBuffer.array();
             //瀛樺偍鍒癿inio
 
diff --git a/src/main/java/com/ard/utils/hiksdk/service/impl/LoginResultCallBack.java b/src/main/java/com/ard/utils/hiksdk/service/impl/LoginResultCallBack.java
index 2c12155..244e9af 100644
--- a/src/main/java/com/ard/utils/hiksdk/service/impl/LoginResultCallBack.java
+++ b/src/main/java/com/ard/utils/hiksdk/service/impl/LoginResultCallBack.java
@@ -29,7 +29,10 @@
             GlobalVariable.loginMap.put(deviceInfo.getDeviceId(), lUserID);
             log.debug("璁惧銆�" + deviceIpPort + "銆戠櫥褰曟垚鍔�");
             // 璁剧疆鎶ヨ鍥炶皟鍑芥暟锛屽缓绔嬫姤璀︿笂浼犻�氶亾锛堝惎鐢ㄥ竷闃诧級
-            HikClientUtil.setupAlarmChan(deviceIpPort, lUserID, -1);
+            int lAlarmHandle = HikClientUtil.setupAlarmChan(deviceIpPort, lUserID, -1);
+            if (lAlarmHandle != -1) {
+                GlobalVariable.alarmMap.put(deviceInfo.getDeviceId(), lAlarmHandle);
+            }
         } else {
             log.debug("璁惧銆�" + deviceIpPort + "銆戠櫥褰曞け璐�");
         }
diff --git a/src/main/java/com/ard/utils/tcp/ClientHandler.java b/src/main/java/com/ard/utils/tcp/ClientHandler.java
index 3937fdb..b7ebb4d 100644
--- a/src/main/java/com/ard/utils/tcp/ClientHandler.java
+++ b/src/main/java/com/ard/utils/tcp/ClientHandler.java
@@ -208,7 +208,7 @@
                 if (targetNum == 0) {
                     return;
                 }
-                log.info("鐩爣鎬荤偣鏁�(杞暣鍨�):" + targetNum);
+                log.debug("鐩爣鎬荤偣鏁�(杞暣鍨�):" + targetNum);
 
                 //瑙f瀽NET_TARGET_UNIT(64鏄疦ET_TARGET_HEAD鐨勫瓧鑺傛暟)
                 int uintSize = (payloadSizeToDecimal - 64) / targetNum;
@@ -327,7 +327,7 @@
                 byte[] wTargetNum = Arrays.copyOfRange(data, 8, 10);
                 wTargetNum = ByteUtils.toLittleEndian(wTargetNum);
                 targetNum = ByteUtils.bytesToDecimal(wTargetNum);
-                log.info("鐩爣鎬荤偣鏁�(杞暣鍨�):" + targetNum);
+                log.debug("鐩爣鎬荤偣鏁�(杞暣鍨�):" + targetNum);
                 if (targetNum == 0) {
                     return;
                 }
diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml
index f65b886..a68ba92 100644
--- a/src/main/resources/logback-spring.xml
+++ b/src/main/resources/logback-spring.xml
@@ -76,6 +76,28 @@
             <onMismatch>DENY</onMismatch>
         </filter>
     </appender>
+    <!--澶栬仈璁惧鎶ヨ鏃ュ織杈撳嚭-->
+    <appender name="external" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/external.log</file>
+        <!--寰幆鏀跨瓥锛氬熀浜庢椂闂村垱寤烘棩蹇楁枃浠�-->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!--鏃ュ織鏂囦欢鍚嶆牸寮�-->
+            <fileNamePattern>${log.path}/external.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!--鏃ュ織鏈�澶х殑鍘嗗彶60澶�-->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!--杩囨护鐨勭骇鍒�-->
+            <level>INFO</level>
+            <!--鍖归厤鏃剁殑鎿嶄綔锛氭帴鏀讹紙璁板綍锛�-->
+            <onMatch>ACCEPT</onMatch>
+            <!--涓嶅尮閰嶆椂鐨勬搷浣滐細鎷掔粷锛堜笉璁板綍锛�-->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
     <!--Netty鏃ュ織杈撳嚭-->
     <appender name="netty" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>${log.path}/netty.log</file>
@@ -148,6 +170,10 @@
     <logger name="camera" level="INFO">
         <appender-ref ref="camera"/>
     </logger>
+    <!--澶栬仈璁惧鎶ヨ鎿嶄綔鏃ュ織-->
+    <logger name="external" level="INFO">
+        <appender-ref ref="external"/>
+    </logger>
     <!--Netty鏃ュ織-->
     <logger name="netty"  level="INFO">
         <appender-ref ref="netty"/>
diff --git a/src/main/resources/mapper/ArdCamerasMapper.xml b/src/main/resources/mapper/ArdCamerasMapper.xml
index 5f5e419..2ecf053 100644
--- a/src/main/resources/mapper/ArdCamerasMapper.xml
+++ b/src/main/resources/mapper/ArdCamerasMapper.xml
@@ -32,6 +32,7 @@
         <result property="operatorExpired" column="operator_expired"/>
         <result property="camMaxVisibleDistance" column="cam_max_visible_distance"/>
         <result property="camAlarmGuideEnable" column="cam_alarm_guide_enable"/>
+        <result property="updateTime" column="update_time"/>
     </resultMap>
 
     <sql id="selectArdCamerasVo">
@@ -60,7 +61,8 @@
                c.operator_id,
                c.operator_expired,
                c.cam_max_visible_distance,
-               c.cam_alarm_guide_enable
+               c.cam_alarm_guide_enable,
+               c.update_time
         from ard_cameras c
     </sql>
 
diff --git a/src/main/resources/mapper/ArdEquipExternalMapper.xml b/src/main/resources/mapper/ArdEquipExternalMapper.xml
index a7550e1..0cd93bf 100644
--- a/src/main/resources/mapper/ArdEquipExternalMapper.xml
+++ b/src/main/resources/mapper/ArdEquipExternalMapper.xml
@@ -18,6 +18,7 @@
         <result property="altitude" column="altitude"/>
         <result property="deptId" column="dept_id"/>
         <result property="userId" column="user_id"/>
+        <result property="updateTime" column="update_time"/>
     </resultMap>
 
     <sql id="selectArdEquipExternalVo">
@@ -31,7 +32,8 @@
                c.password,
                c.longitude,
                c.latitude,
-               c.altitude
+               c.altitude,
+               c.update_time
         from ard_equip_external c
     </sql>
     <select id="selectArdEquipExternal" parameterType="ArdEquipExternal" resultMap="ArdEquipExternalResult">

--
Gitblit v1.9.3