From 1e89a0c2fc96040ba50d0fe4305ace22f3daa6cf Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: Fri, 11 Aug 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<>();
-    //保存相机的布防信息key:cameraId value:lAlarmHandle
+
+    //保存设备的布防信息key: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报警信息上报(暂不解析)");
 //                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();
             //存储到minio
 

--
Gitblit v1.9.3