From a20bc4abb2b913bf03dda03a45d835da090cf9aa Mon Sep 17 00:00:00 2001
From: liusuyi <13324259@qq.com>
Date: 星期三, 27 十二月 2023 22:18:11 +0800
Subject: [PATCH] 雷达通过ip和端口关联

---
 src/main/java/com/ard/utils/sdk/hiksdk/service/impl/HikClientUtil.java |  272 ++++++++++++++++--------------------------------------
 1 files changed, 80 insertions(+), 192 deletions(-)

diff --git a/src/main/java/com/ard/utils/sdk/hiksdk/service/impl/HikClientUtil.java b/src/main/java/com/ard/utils/sdk/hiksdk/service/impl/HikClientUtil.java
index f98eddc..ad6ca50 100644
--- a/src/main/java/com/ard/utils/sdk/hiksdk/service/impl/HikClientUtil.java
+++ b/src/main/java/com/ard/utils/sdk/hiksdk/service/impl/HikClientUtil.java
@@ -4,10 +4,12 @@
 import com.ard.alarm.camera.domain.CameraCmd;
 import com.ard.alarm.external.domain.ArdEquipExternal;
 import com.ard.utils.minio.MinioUtil;
+import com.ard.utils.sdk.hiksdk.domain.ChannelInfo;
 import com.ard.utils.util.ByteUtils;
 import com.ard.utils.sdk.hiksdk.common.GlobalVariable;
 import com.ard.utils.sdk.hiksdk.domain.DeviceInfo;
 import com.ard.utils.sdk.hiksdk.util.hikSdkUtil.HCNetSDK;
+import com.sun.jna.NativeLong;
 import com.sun.jna.Platform;
 import com.sun.jna.Pointer;
 import com.sun.jna.ptr.IntByReference;
@@ -16,7 +18,6 @@
 import java.io.*;
 import java.nio.ByteBuffer;
 import java.util.*;
-
 
 /**
  * @ClassName: hikClientServiceImpl
@@ -32,58 +33,11 @@
     public static HCNetSDK.FMSGCallBack_V31 fMSFCallBack_V31;
 
     /**
-     * @鎻忚堪 娉ㄥ唽鐧诲綍 鍙敮鎸佸悓姝ョ櫥闄嗭紝涓斿畼鏂逛笉寤鸿鐩存帴鍦ㄦ鎺ュ彛涓嬪啓鑰楁椂鎿嶄綔
-     * @鍙傛暟 [dvrLogin]
-     * @杩斿洖鍊� java.lang.Integer
-     * @鍒涘缓浜� 鍒樿嫃涔�
-     * @鍒涘缓鏃堕棿 2023/1/17 16:12
-     * @淇敼浜哄拰鍏跺畠淇℃伅
-     */
-    public ArdCameras login1(ArdCameras camera) {
-        // 鍒濆鍖�
-        if (!hCNetSDK.NET_DVR_Init()) {
-            log.error("SDK鍒濆鍖栧け璐�");
-        }
-
-        //鎵撳嵃娴峰悍sdk鏃ュ織
-        if (Platform.isWindows()) {
-            String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator;
-            hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true);
-        } else {
-            hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true);
-        }
-        String m_sDeviceIP = camera.getIp();
-        String m_sUsername = camera.getUsername();
-        String m_sPassword = camera.getPassword();
-        short m_sPort = camera.getPort().shortValue();
-        //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂�
-        hCNetSDK.NET_DVR_SetConnectTime(2000, 1);
-        hCNetSDK.NET_DVR_SetReconnect(100000, true);
-
-        //璁惧淇℃伅, 杈撳嚭鍙傛暟
-        HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();
-        int lUserID = hCNetSDK.NET_DVR_Login_V30(m_sDeviceIP, m_sPort, m_sUsername, m_sPassword, m_strDeviceInfo);
-        if (lUserID < 0) {
-            //閲婃斁SDK璧勬簮
-            hCNetSDK.NET_DVR_Cleanup();
-            camera.setLoginId(-1);
-        }
-        if (GlobalVariable.loginMap.containsKey(camera.getId())) {
-            GlobalVariable.loginMap.remove(camera.getId());
-        }
-        GlobalVariable.loginMap.put(camera.getId(), lUserID);
-
-        camera.setLoginId(lUserID);
-        camera.setChannel((int) m_strDeviceInfo.byStartChan);
-        return camera;
-    }
-
-    /**
      * @鎻忚堪 娉ㄥ唽鐧诲綍 闆嗘垚浜嶯ET_DVR_Login_V30锛屾敮鎸佸悓姝ュ拰寮傛鐧诲綍
      * @鍒涘缓浜� 鍒樿嫃涔�
      * @鍒涘缓鏃堕棿 2023/1/17 16:12
      */
-    public static void login(DeviceInfo deviceInfo) {
+    public static int login(DeviceInfo deviceInfo) {
         // 鍒濆鍖�
         if (!hCNetSDK.NET_DVR_Init()) {
             log.error("SDK鍒濆鍖栧け璐�");
@@ -94,6 +48,7 @@
         struNET_DVR_LOCAL_GENERAL_CFG.write();
         Pointer pStrNET_DVR_LOCAL_GENERAL_CFG = struNET_DVR_LOCAL_GENERAL_CFG.getPointer();
         hCNetSDK.NET_DVR_SetSDKLocalCfg(17, pStrNET_DVR_LOCAL_GENERAL_CFG);
+
         //鎵撳嵃娴峰悍sdk鏃ュ織
         if (Platform.isWindows()) {
             String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator;
@@ -127,11 +82,12 @@
         //寮傛鐧诲綍鍥炶皟
         m_strLoginInfo.cbLoginResult = new LoginResultCallBack(deviceInfo);
         m_strLoginInfo.write();
-        int i = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
-        if (i < 0) {
+        int loginId = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
+        if (loginId < 0) {
             int errorCode = hCNetSDK.NET_DVR_GetLastError();
             log.error("鐧诲綍寮傚父锛�" + errorCode);
         }
+        return loginId;
     }
 
     /**
@@ -174,12 +130,13 @@
                 info.setPort(camera.getPort());
                 info.setUsername(camera.getUsername());
                 info.setPassword(camera.getPassword());
+                info.setDeviceType(camera.getGdType());
                 login(info);
                 String key = camera.getIp() + ":" + camera.getPort();
                 GlobalVariable.cameraMap.put(key, camera);
             }
         } catch (Exception ex) {
-            log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage());
+            log.error("鐧诲綍鐩告満寮傚父锛�" + ex.getMessage());
         }
     }
 
@@ -203,147 +160,10 @@
                 GlobalVariable.cameraMap.remove(key);
             }
         } catch (Exception ex) {
-            log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage());
+            log.error("娉ㄩ攢鐩告満寮傚父锛�" + ex.getMessage());
         }
     }
 
-    /**
-     * @鎻忚堪 鐧诲綍鎵�鏈夋姤璀︿富鏈�
-     * @鍒涘缓浜� 鍒樿嫃涔�
-     * @鍒涘缓鏃堕棿 2023/2/3 10:10
-     */
-    public static void loginAllAlarmHost(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());
-                login(info);
-//                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) {
-        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 key=alarmHost.getIp()+":"+alarmHost.getPort();
-//                GlobalVariable.alarmHostMap.remove(key);
-            }
-        } catch (Exception ex) {
-            log.error("鐧诲嚭鎵�鏈夋姤璀︿富鏈哄紓甯革細" + ex.getMessage());
-        }
-    }
-
-    /**
-     * @鎻忚堪 鐧诲綍鎵�鏈夐棬绂佷富鏈�
-     * @鍒涘缓浜� 鍒樿嫃涔�
-     * @鍒涘缓鏃堕棿 2023/2/3 10:10
-     */
-    public static void loginAllAccessControlHost(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());
-                login(info);
-            }
-        } 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);
-            }
-        } catch (Exception ex) {
-            log.error("鐧诲嚭鎵�鏈夐棬绂佷富鏈哄紓甯革細" + ex.getMessage());
-        }
-    }
-
-    /**
-     * @鎻忚堪 鐧诲綍鎵�鏈夎秴鑴�
-     * @鍒涘缓浜� 鍒樿嫃涔�
-     * @鍒涘缓鏃堕棿 2023/2/3 10:10
-     */
-    public static void loginAllSuperBrainHost(List<ArdEquipExternal> ardEquipExternals) {
-        try {
-            for (ArdEquipExternal superBrainHost : ardEquipExternals) {
-                Thread.sleep(100);
-                DeviceInfo info = new DeviceInfo();
-                info.setDeviceId(superBrainHost.getId());
-                info.setIp(superBrainHost.getIp());
-                info.setPort(superBrainHost.getPort());
-                info.setUsername(superBrainHost.getUsername());
-                info.setPassword(superBrainHost.getPassword());
-                login(info);
-            }
-        } catch (Exception ex) {
-            log.error("鐧诲綍鎵�鏈夎秴鑴戝紓甯革細" + ex.getMessage());
-        }
-    }
-
-    /**
-     * @鎻忚堪 鐧诲嚭鎵�鏈夎秴鑴�
-     * @鍒涘缓浜� 鍒樿嫃涔�
-     * @鍒涘缓鏃堕棿 2023/2/3 10:10
-     */
-    public static void logoutAllSuperBrainHost(List<ArdEquipExternal> ardEquipExternals) {
-        try {
-            for (ArdEquipExternal superBrainHost : ardEquipExternals) {
-                Thread.sleep(100);
-                DeviceInfo info = new DeviceInfo();
-                info.setDeviceId(superBrainHost.getId());
-                info.setIp(superBrainHost.getIp());
-                info.setPort(superBrainHost.getPort());
-                info.setUsername(superBrainHost.getUsername());
-                info.setPassword(superBrainHost.getPassword());
-                logout(info);
-//                String key=accessControlHost.getIp()+":"+accessControlHost.getPort();
-//                GlobalVariable.accessHostMap.remove(key);
-            }
-        } catch (Exception ex) {
-            log.error("鐧诲嚭鎵�鏈夎秴鑴戝紓甯革細" + ex.getMessage());
-        }
-    }
     /**
      * @鎻忚堪 鐧诲綍鎵�鏈夊鑱旇澶�
      * @鍒涘缓浜� 鍒樿嫃涔�
@@ -365,6 +185,7 @@
             log.error("鐧诲綍鎵�鏈夊鑱旇澶囧紓甯革細" + ex.getMessage());
         }
     }
+
     /**
      * @鎻忚堪 鐧诲嚭鎵�鏈夊鑱旇澶�
      * @鍒涘缓浜� 鍒樿嫃涔�
@@ -383,10 +204,9 @@
                 logout(info);
             }
         } catch (Exception ex) {
-            log.error("鐧诲嚭鎵�鏈夎秴鑴戝紓甯革細" + ex.getMessage());
+            log.error("鐧诲嚭鎵�鏈夊鑱旇澶囧紓甯革細" + ex.getMessage());
         }
     }
-
 
 
     /**
@@ -420,6 +240,11 @@
             m_strAlarmInfo.byDeployType = 1;
             //浜鸿劯鎶ヨ淇℃伅绫诲瀷锛�1- 浜鸿劯渚︽祴鎶ヨ 0- 浜鸿劯鎶撴媿鎶ヨ
             m_strAlarmInfo.byFaceAlarmDetection = 0;
+            //鎶ヨ鍥剧墖鏁版嵁绫诲瀷锛屾寜浣嶈〃绀猴細
+            //bit0- 浜鸿劯鎶撴媿(鎶ヨ绫诲瀷涓篊OMM_UPLOAD_FACESNAP_RESULT)涓浘鐗囨暟鎹笂浼犵被鍨嬶細0- 浜岃繘鍒朵紶杈擄紝1- URL浼犺緭
+            //bit1- EVENT_JSON(鎶ヨ绫诲瀷涓篊OMM_VCA_ALARM)涓浘鐗囨暟鎹笂浼犵被鍨嬶細0- 浜岃繘鍒朵紶杈擄紝1- URL浼犺緭
+            //bit2- 浜鸿劯姣斿(鎶ヨ绫诲瀷涓篊OMM_SNAP_MATCH_ALARM)涓浘鐗囨暟鎹笂浼犵被鍨嬶細0- 浜岃繘鍒朵紶杈擄紝1- URL浼犺緭
+            m_strAlarmInfo.byAlarmTypeURL = 0;
             m_strAlarmInfo.write();
             // 甯冮槻鎴愬姛锛岃繑鍥炲竷闃叉垚鍔熺殑鏁版嵁浼犺緭閫氶亾鍙�
             lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID, m_strAlarmInfo);
@@ -535,4 +360,67 @@
         return name;
     }
 
+    //鑾峰彇IP閫氶亾
+    public static void getIPChannelInfo(String deviceId, int iUserID) {
+        try {
+            GlobalVariable.deviceChanMap.remove(deviceId);
+            List<ChannelInfo> channelInfoList = new ArrayList<>();
+            int chanNum = 64;
+            IntByReference ibrBytesReturned = new IntByReference(0);//鑾峰彇IP鎺ュ叆閰嶇疆鍙傛暟
+            HCNetSDK.NET_DVR_IPPARACFG_V40 m_strIpparaCfg = new HCNetSDK.NET_DVR_IPPARACFG_V40();
+            m_strIpparaCfg.write();
+            //lpIpParaConfig 鎺ユ敹鏁版嵁鐨勭紦鍐叉寚閽�
+            Pointer lpIpParaConfig = m_strIpparaCfg.getPointer();
+            boolean bRet = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_IPPARACFG_V40, 0, lpIpParaConfig, m_strIpparaCfg.size(), ibrBytesReturned);
+            m_strIpparaCfg.read();
+            //log.debug("璧峰鏁板瓧閫氶亾鍙凤細" + m_strIpparaCfg.dwStartDChan);
+            for (int iChannum = 0; iChannum < chanNum; iChannum++) {
+                int channum = iChannum + m_strIpparaCfg.dwStartDChan;
+                HCNetSDK.NET_DVR_PICCFG_V40 strPicCfg = new HCNetSDK.NET_DVR_PICCFG_V40();
+                strPicCfg.dwSize = strPicCfg.size();
+                strPicCfg.write();
+                Pointer pStrPicCfg = strPicCfg.getPointer();
+                NativeLong lChannel = new NativeLong(channum);
+                IntByReference pInt = new IntByReference(0);
+                boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(),
+                        pStrPicCfg, strPicCfg.size(), pInt);
+//            if (b_GetPicCfg == false) {
+//                System.out.println("鑾峰彇鍥惧儚鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError());
+//            }
+                strPicCfg.read();
+                m_strIpparaCfg.struStreamMode[iChannum].read();
+                if (m_strIpparaCfg.struStreamMode[iChannum].byGetStreamType == 0) {
+                    m_strIpparaCfg.struStreamMode[iChannum].uGetStream.setType(HCNetSDK.NET_DVR_IPCHANINFO.class);
+                    m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.read();
+
+                    //log.debug("--------------绗�" + (iChannum + 1) + "涓�氶亾------------------");
+                    int channel = m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPID + m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPIDHigh * 256;
+                    //log.debug("channel:" + channel);
+                    if (channel > 0) {
+                        //log.debug("name锛� " + new String(strPicCfg.sChanName, "GBK").trim());
+                        //log.debug("ip锛� " + new String(m_strIpparaCfg.struIPDevInfo[channel - 1].struIP.sIpV4).trim());
+                        //log.debug("port锛� " + m_strIpparaCfg.struIPDevInfo[channel - 1].wDVRPort);
+                        String name = new String(strPicCfg.sChanName, "GBK").trim();
+                        String ip = new String(m_strIpparaCfg.struIPDevInfo[channel - 1].struIP.sIpV4).trim();
+                        int port = m_strIpparaCfg.struIPDevInfo[channel - 1].wDVRPort;
+                        ChannelInfo channelInfo = new ChannelInfo();
+                        channelInfo.setIp(ip);
+                        channelInfo.setPort(port);
+                        channelInfo.setName(name);
+                        channelInfoList.add(channelInfo);
+                    }
+                    if (m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byEnable == 1) {
+                        //log.debug("IP閫氶亾" + channum + "鍦ㄧ嚎");
+                    } else {
+                        //log.debug("IP閫氶亾" + channum + "涓嶅湪绾�");
+                    }
+                }
+            }
+            if (channelInfoList.size() > 0) {
+                GlobalVariable.deviceChanMap.put(deviceId, channelInfoList);
+            }
+        } catch (Exception ex) {
+            log.error("鑾峰彇IP閫氶亾寮傚父锛�" + ex.getMessage());
+        }
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3