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/utils/hiksdk/service/impl/HikClientUtil.java                 |   68 ++++------------
 src/main/java/com/ard/utils/hiksdk/domain/CameraEventInfo.java                     |    4 +
 src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java |   67 +++++++++-------
 src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java                      |   12 +-
 src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java                  |   11 +-
 src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java         |   19 ++--
 6 files changed, 80 insertions(+), 101 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 7b0f9ab..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
@@ -42,8 +42,10 @@
     public void run(ApplicationArguments args) {
         //鍔犺浇sdk搴�
         HikClientUtil.loadHCNetSDKLib();
-        //鑾峰彇鍏ㄩ儴娴峰悍鍏夌數灏濊瘯鐧诲綍
-        ardCameraList = ardCamerasMapper.selectArdCamerasList(new ArdCameras());
+        //鑾峰彇灏忓厜鐢靛皾璇曠櫥褰�
+        ArdCameras ardCamera=new ArdCameras();
+        ardCamera.setGdtype("0");
+        ardCameraList = ardCamerasMapper.selectArdCamerasList(ardCamera);
         HikClientUtil.loginAllCamera(ardCameraList);
         syncTask();
     }
@@ -56,8 +58,10 @@
     private void syncTask() {
         scheduler.scheduleAtFixedRate(() -> {
             try {
-                //region 瀹氭椂鍚屾鐩告満
-                List<ArdCameras> newArdCameraList = ardCamerasMapper.selectArdCamerasList(new ArdCameras());
+                //region 瀹氭椂鍚屾灏忓厜鐢�
+                ArdCameras ardCamera=new ArdCameras();
+                ardCamera.setGdtype("0");
+                List<ArdCameras> newArdCameraList = ardCamerasMapper.selectArdCamerasList(ardCamera);
                 //闇�瑕佹洿鏂扮殑鏁版嵁
                 List<ArdCameras> updateList = sameListWithDifferent(ardCameraList, newArdCameraList);
                 if (updateList.size() > 0) {
@@ -129,12 +133,7 @@
                             .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());
+                    return oldItem == null || !Objects.equals(oldItem.getUpdateTime(), newItem.getUpdateTime());
 
                 })
                 .collect(Collectors.toList());
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 9d77347..e5fa5e8 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
@@ -29,26 +29,32 @@
 @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 {
+    public void run(ApplicationArguments args){
         //鑾峰彇鍏ㄩ儴娴峰悍鎶ヨ涓绘満灏濊瘯鐧诲綍
         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();
     }
 
@@ -97,7 +103,7 @@
                 alarmHost.setType("6");
                 List<ArdEquipExternal> newAccessHostList = ardEquipExternalMapper.selectArdEquipExternalList(alarmHost);
                 //闇�瑕佹洿鏂扮殑鏁版嵁
-                 updateList = sameListWithDifferent(ardAccessHostList, newAccessHostList);
+                updateList = sameListWithDifferent(ardAccessHostList, newAccessHostList);
                 if (updateList.size() > 0) {
                     HikClientUtil.logoutAllAlarmHost(updateList);
                     HikClientUtil.loginAllAlarmHost(updateList);
@@ -125,6 +131,34 @@
                 log.error("鍚屾澶栬仈浠诲姟鎵ц鍑洪敊" + e.getMessage());
             }
         }, 10, 10, TimeUnit.SECONDS);
+    }
+
+
+    /**
+     * 鏌ヨexternal
+     *
+     * @param id external涓婚敭
+     * @return external
+     */
+    @Override
+    public ArdEquipExternal selectArdEquipExternalById(String id) {
+        return ardEquipExternalMapper.selectArdEquipExternalById(id);
+    }
+
+    @Override
+    public ArdEquipExternal selectArdEquipExternal(ArdEquipExternal ardEquipExternal) {
+        return ardEquipExternalMapper.selectArdEquipExternal(ardEquipExternal);
+    }
+
+    /**
+     * 鏌ヨexternal鍒楄〃
+     *
+     * @param ardEquipExternal external
+     * @return external
+     */
+    @Override
+    public List<ArdEquipExternal> selectArdEquipExternalList(ArdEquipExternal ardEquipExternal) {
+        return ardEquipExternalMapper.selectArdEquipExternalList(ardEquipExternal);
     }
 
 
@@ -157,33 +191,4 @@
                 .collect(Collectors.toList());
         return resultList;
     }
-
-    /**
-     * 鏌ヨexternal
-     *
-     * @param id external涓婚敭
-     * @return external
-     */
-    @Override
-    public ArdEquipExternal selectArdEquipExternalById(String id) {
-        return ardEquipExternalMapper.selectArdEquipExternalById(id);
-    }
-
-    @Override
-    public ArdEquipExternal selectArdEquipExternal(ArdEquipExternal ardEquipExternal) {
-        return ardEquipExternalMapper.selectArdEquipExternal(ardEquipExternal);
-    }
-
-    /**
-     * 鏌ヨexternal鍒楄〃
-     *
-     * @param ardEquipExternal external
-     * @return external
-     */
-    @Override
-    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 5e79fef..b7cadae 100644
--- a/src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java
+++ b/src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java
@@ -15,14 +15,12 @@
  **/
 @Data
 public class GlobalVariable {
-    //淇濆瓨鐩告満淇℃伅key:ip value:camera瀵硅薄
+    //淇濆瓨鐩告満淇℃伅key:(ip:port) value:camera瀵硅薄
     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
+
+    //淇濆瓨璁惧鐧诲綍淇℃伅key:deviceId value:loginId
     public static Map<String, Integer> loginMap = new HashMap<>();
-    //淇濆瓨鐩告満鐨勫竷闃蹭俊鎭痥ey:cameraId value:lAlarmHandle
+
+    //淇濆瓨璁惧鐨勫竷闃蹭俊鎭痥ey:deviceId value:lAlarmHandle
     public static Map<String, Integer> alarmMap = new HashMap<>();
 }
diff --git a/src/main/java/com/ard/utils/hiksdk/domain/CameraEventInfo.java b/src/main/java/com/ard/utils/hiksdk/domain/CameraEventInfo.java
index 19bea4e..ff82dae 100644
--- a/src/main/java/com/ard/utils/hiksdk/domain/CameraEventInfo.java
+++ b/src/main/java/com/ard/utils/hiksdk/domain/CameraEventInfo.java
@@ -41,6 +41,10 @@
      */
     String cameraIp;
     /**
+     * 鍏宠仈鐩告満port
+     */
+    Integer cameraPort;
+    /**
      * 鍏宠仈鐩告満閫氶亾
      */
     Integer cameraChannel;
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 9314aa7..237152b 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
@@ -56,7 +56,7 @@
         //log.debug("鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand));
         switch (lCommand) {
             case HCNetSDK.COMM_ALARM_V30:
-                log.debug("绉诲姩渚︽祴");
+                //log.debug("绉诲姩渚︽祴");
                 ArdCameras ardCameras = new ArdCameras();
                 ardCameras.setIp(sDeviceIP);
                 ardCameras.setPort(wLinkPort);
@@ -75,6 +75,7 @@
                         info.setCameraName(camera.getName());
                         info.setCameraId(camera.getId());
                         info.setCameraIp(camera.getIp());
+                        info.setCameraPort(camera.getPort());
                         info.setCameraType(camera.getGdtype());
                         info.setCameraChannel(Integer.valueOf(netDvrAlarminfoV30.byChannel[0]));
                         info.setLongitude(camera.getLongitude());
@@ -89,7 +90,7 @@
                 }
 
             case HCNetSDK.COMM_ALARM_RULE:
-                log.debug("琛屼负鍒嗘瀽淇℃伅鎶ヨ淇℃伅涓婃姤");
+                //log.debug("琛屼负鍒嗘瀽淇℃伅鎶ヨ淇℃伅涓婃姤");
                 //region 琛屼负鍒嗘瀽淇℃伅
                 ardCameras = new ArdCameras();
                 ardCameras.setIp(sDeviceIP);
@@ -112,6 +113,7 @@
                 info.setCameraName(ardCamera.getName());
                 info.setCameraId(ardCamera.getId());
                 info.setCameraIp(ipaddr);
+                info.setCameraPort(ardCamera.getPort());
                 info.setCameraType(ardCamera.getGdtype());
                 info.setCameraChannel(channel);
                 info.setLongitude(ardCamera.getLongitude());
@@ -185,7 +187,7 @@
 //                log.debug("GPS鎶ヨ淇℃伅涓婃姤(鏆備笉瑙f瀽)");
 //                break;
             case HCNetSDK.COMM_ALARMHOST_CID_ALARM:
-                log.debug("鎶ヨ涓绘満CID鎶ュ憡鎶ヨ涓婃姤");
+                //log.debug("鎶ヨ涓绘満CID鎶ュ憡鎶ヨ涓婃姤");
                 //region 鎶ヨ涓绘満鎶ヨ澶勭悊
                 ArdEquipExternal ardEquipExternal = new ArdEquipExternal();
                 ardEquipExternal.setIp(sDeviceIP);
@@ -401,7 +403,8 @@
      */
     private String savePicture(CameraEventInfo info) {
         CameraCmd cmd = new CameraCmd();
-        ArdCameras Cameras = GlobalVariable.cameraMap.get(info.getCameraIp());
+        String key=info.getCameraIp()+":"+info.getCameraPort();
+        ArdCameras Cameras = GlobalVariable.cameraMap.get(key);
         if (Cameras == null) {
             return "";
         }
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 1faeb54..02e1fe5 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
@@ -210,7 +210,8 @@
                 info.setUsername(camera.getUsername());
                 info.setPassword(camera.getPassword());
                 login(info);
-                GlobalVariable.cameraMap.put(camera.getIp(), camera);
+                String key = camera.getIp() + ":" + camera.getPort();
+                GlobalVariable.cameraMap.put(key, camera);
             }
         } catch (Exception ex) {
             log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage());
@@ -233,7 +234,8 @@
                 info.setUsername(camera.getUsername());
                 info.setPassword(camera.getPassword());
                 logout(info);
-                GlobalVariable.cameraMap.remove(camera.getIp());
+                String key = camera.getIp() + ":" + camera.getPort();
+                GlobalVariable.cameraMap.remove(key);
             }
         } catch (Exception ex) {
             log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage());
@@ -256,20 +258,20 @@
                 info.setUsername(alarmHost.getUsername());
                 info.setPassword(alarmHost.getPassword());
                 login(info);
-                String ip = alarmHost.getIp();
-                GlobalVariable.alarmHostMap.put(ip, alarmHost);
+//                String key=alarmHost.getIp()+":"+alarmHost.getPort();
+//                GlobalVariable.alarmHostMap.put(key, alarmHost);
             }
         } catch (Exception ex) {
             log.error("鍒濆鍖栨姤璀︿富鏈哄紓甯革細" + ex.getMessage());
         }
     }
+
     /**
      * @鎻忚堪 鐧诲嚭鎵�鏈夋姤璀︿富鏈�
      * @鍒涘缓浜� 鍒樿嫃涔�
      * @鍒涘缓鏃堕棿 2023/2/3 10:10
      */
-    public static void logoutAllAlarmHost(List<ArdEquipExternal> ardEquipExternals)
-    {
+    public static void logoutAllAlarmHost(List<ArdEquipExternal> ardEquipExternals) {
         try {
             for (ArdEquipExternal alarmHost : ardEquipExternals) {
                 Thread.sleep(100);
@@ -280,13 +282,14 @@
                 info.setUsername(alarmHost.getUsername());
                 info.setPassword(alarmHost.getPassword());
                 logout(info);
-                String ip = alarmHost.getIp();
-                GlobalVariable.alarmHostMap.remove(ip);
+//                String key=alarmHost.getIp()+":"+alarmHost.getPort();
+//                GlobalVariable.alarmHostMap.remove(key);
             }
         } catch (Exception ex) {
             log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage());
         }
     }
+
     /**
      * @鎻忚堪 鐧诲綍鎵�鏈夐棬绂佷富鏈�
      * @鍒涘缓浜� 鍒樿嫃涔�
@@ -303,13 +306,15 @@
                 info.setUsername(accessControlHost.getUsername());
                 info.setPassword(accessControlHost.getPassword());
                 login(info);
-                String ip = accessControlHost.getIp();
-                GlobalVariable.accessHostMap.put(ip, accessControlHost);
+//
+//                String key=accessControlHost.getIp()+":"+accessControlHost.getPort();
+//                GlobalVariable.accessHostMap.put(key, accessControlHost);
             }
         } catch (Exception ex) {
             log.error("鍒濆鍖栨姤璀︿富鏈哄紓甯革細" + ex.getMessage());
         }
     }
+
     /**
      * @鎻忚堪 鐧诲嚭鎵�鏈夐棬绂佷富鏈�
      * @鍒涘缓浜� 鍒樿嫃涔�
@@ -326,47 +331,14 @@
                 info.setUsername(accessControlHost.getUsername());
                 info.setPassword(accessControlHost.getPassword());
                 logout(info);
-                String ip = accessControlHost.getIp();
-                GlobalVariable.accessHostMap.remove(ip);
+//                String key=accessControlHost.getIp()+":"+accessControlHost.getPort();
+//                GlobalVariable.accessHostMap.remove(key);
             }
         } catch (Exception ex) {
             log.error("鍒濆鍖栨姤璀︿富鏈哄紓甯革細" + ex.getMessage());
         }
     }
-    /**
-     * @鎻忚堪 娉ㄩ攢鐧诲綍
-     * @鍙傛暟 [dvrLogin]
-     * @杩斿洖鍊� java.lang.Integer
-     * @鍒涘缓浜� 鍒樿嫃涔�
-     * @鍒涘缓鏃堕棿 2023/1/17 16:12
-     * @淇敼浜哄拰鍏跺畠淇℃伅
-     */
-    public static boolean loginOut(String cameraId) {
-        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
-            return false;
-        }
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
-        boolean b = hCNetSDK.NET_DVR_Logout(userId);
-        if (b) {
-            GlobalVariable.loginMap.remove(cameraId);
-        }
-        return b;
-    }
 
-    /**
-     * 鏄惁鍦ㄧ嚎
-     *
-     * @param cmd
-     */
-    public static boolean isOnLine(CameraCmd cmd) {
-        String cameraId = cmd.getCameraId();
-        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
-            return false;
-        }
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
-        boolean isOnLine = hCNetSDK.NET_DVR_RemoteControl(userId, HCNetSDK.NET_DVR_CHECK_USER_STATUS, null, 0);
-        return isOnLine;
-    }
 
     /**
      * 寤虹珛甯冮槻涓婁紶閫氶亾锛岀敤浜庝紶杈撴暟鎹�
@@ -402,8 +374,6 @@
             lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID, m_strAlarmInfo);
             if (lAlarmHandle == -1) {
                 log.error("璁惧銆�" + deviceIpPort + "銆戝竷闃插け璐ワ紝閿欒鐮�==========銆�" + hCNetSDK.NET_DVR_GetLastError());
-                // 娉ㄩ攢 閲婃斁sdk璧勬簮
-                logout(lUserID);
             } else {
                 log.debug("璁惧銆�" + deviceIpPort + "銆戝竷闃叉垚鍔�");
             }
@@ -452,11 +422,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);
         if (is) {
-          //  log.debug("hksdk(鎶撳浘)-缁撴灉鐘舵�佸��(0琛ㄧず鎴愬姛):" + hCNetSDK.NET_DVR_GetLastError());
+            //  log.debug("hksdk(鎶撳浘)-缁撴灉鐘舵�佸��(0琛ㄧず鎴愬姛):" + hCNetSDK.NET_DVR_GetLastError());
             byte[] array = jpegBuffer.array();
             //瀛樺偍鍒癿inio
 

--
Gitblit v1.9.3