Browse Source

[bug] 连接sdk

11868 1 week ago
parent
commit
5ae0a7d525
31 changed files with 522 additions and 689 deletions
  1. 6 1
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carCamera/CarCameraDeviceManager.java
  2. 120 117
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carCamera/NetSDKDemo/HCNetSDK.java
  3. 0 2
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carCamera/alarm/Alarm.java
  4. 0 2
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carCamera/alarm/AlarmDataParse.java
  5. 1 0
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carCamera/alarm/FMSGCallBack.java
  6. 1 0
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carCamera/alarm/FMSGCallBack_V31.java
  7. 5 16
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carDoor/CarDoorDeviceManager.java
  8. 118 118
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carDoor/NetSDKDemo/HCNetSDK.java
  9. 0 2
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carDoor/hik/BarrierGateManage.java
  10. 0 2
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carDoor/hik/ISAPI.java
  11. 0 2
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carDoor/hik/ITCMain.java
  12. 0 2
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carDoor/hik/LCDdisplayManage.java
  13. 0 2
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carDoor/hik/LEDdisplayManage.java
  14. 0 2
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carDoor/hik/VechileListManage.java
  15. 0 2
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carDoor/hik/VoiceManage.java
  16. 0 2
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/Acs/ACSManage.java
  17. 0 2
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/Acs/AcsMain.java
  18. 0 2
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/Acs/CardManage.java
  19. 0 2
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/Acs/EventSearch.java
  20. 0 2
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/Acs/FaceManage.java
  21. 0 2
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/Acs/FingerManage.java
  22. 0 2
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/Acs/MutilCard.java
  23. 0 2
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/Acs/TransIsapi.java
  24. 0 2
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/Acs/UserManage.java
  25. 118 117
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/NetSDKDemo/HCNetSDK.java
  26. 17 17
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/PeopleDoorDeviceManager.java
  27. 1 11
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/util/DeviceSession.java
  28. 68 0
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/util/DeviceSimulator.java
  29. 47 1
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/util/HikSDKManager.java
  30. 20 0
      supervision-admin/src/main/java/com/supervision/web/ConnectSDK/util/XStructure.java
  31. 0 255
      supervision-admin/src/main/java/com/supervision/web/peopleGateManage/Service/impl/HikvisionPeopleAcsServiceImpl.java

+ 6 - 1
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carCamera/CarCameraDeviceManager.java

@@ -56,6 +56,10 @@ public class CarCameraDeviceManager {
     /** key: 设备IP, value: 登录会话信息 */
     private final Map<String, DeviceSession> deviceMap = new ConcurrentHashMap<>();
 
+    public Map<String, DeviceSession> getDeviceMap() {
+        return deviceMap;
+    }
+
     /**
      * Spring Bean 初始化后执行
      * ----------------------------------------
@@ -67,7 +71,8 @@ public class CarCameraDeviceManager {
     public void init() {
         // 初始化 SDK
         hikSDKManager.initSDK(SdkType.CAR_CAMERA);
-        hCNetSDK = (HCNetSDK) hikSDKManager.getSDK(SdkType.CAR_CAMERA);
+//        hCNetSDK = (HCNetSDK) hikSDKManager.getSDK(SdkType.CAR_CAMERA);
+        hCNetSDK = hikSDKManager.getCarCameraSDK(); // 类型安全获取
 
         if (hCNetSDK == null) {
             logger.error("❌ CarCamera HCNetSDK 初始化失败");

File diff suppressed because it is too large
+ 120 - 117
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carCamera/NetSDKDemo/HCNetSDK.java


+ 0 - 2
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carCamera/alarm/Alarm.java

@@ -18,8 +18,6 @@ public class Alarm {
 
     private static final Logger logger = org.slf4j.LoggerFactory.getLogger(Alarm.class);
 
-    @Autowired
-    @Qualifier("carCameraSDK")
     private HCNetSDK hCNetSDK;
 
     private int lUserID = -1; // 用户句柄 实现对设备登录

+ 0 - 2
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carCamera/alarm/AlarmDataParse.java

@@ -21,8 +21,6 @@ public class AlarmDataParse {
 
     private static final Logger logger = LoggerFactory.getLogger(AlarmDataParse.class);
 
-    @Autowired
-    @Qualifier("carCameraSDK")
     private HCNetSDK hCNetSDK;
 
     public static void alarmDataHandle(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) {

+ 1 - 0
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carCamera/alarm/FMSGCallBack.java

@@ -13,6 +13,7 @@ import org.springframework.stereotype.Component;
 public class FMSGCallBack implements HCNetSDK.FMSGCallBack {
 
     // 报警信息回调函数
+    @Override
     public void invoke(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) {
         AlarmDataParse.alarmDataHandle(lCommand, pAlarmer, pAlarmInfo, dwBufLen, pUser);
         return;

+ 1 - 0
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carCamera/alarm/FMSGCallBack_V31.java

@@ -9,6 +9,7 @@ import org.springframework.stereotype.Component;
 public class FMSGCallBack_V31 implements HCNetSDK.FMSGCallBack_V31 {
 
     // 报警信息回调函数
+    @Override
     public boolean invoke(
             int lCommand, // lCommand [out] 上传的消息类型,不同的报警信息对应不同的类型,通过类型区分是什么报警信息,详见“Remarks”中列表
             HCNetSDK.NET_DVR_ALARMER pAlarmer, // pAlarmer [out] 报警设备信息,包括设备序列号、IP地址、登录IUserID句柄等

+ 5 - 16
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carDoor/CarDoorDeviceManager.java

@@ -41,33 +41,22 @@ public class CarDoorDeviceManager {
     @Autowired
     private LCDdisplayManage lCDdisplayManage;
 
-    // 用户名 -> userID 映射,多用户支持
-    private final Map<String, Integer> userLoginMap = new ConcurrentHashMap<>();
-
-    private boolean sdkInitialized = false;
-
-    private int lAlarmHandle = -1; // 报警布防句柄
-
-    private int lListenHandle = -1; // 报警监听句柄
-
-    private boolean sdkInited = false;
-
     /** key: 设备IP, value: 登录会话信息 */
     private final Map<String, DeviceSession> deviceMap = new ConcurrentHashMap<>();
 
-//    private FMSGCallBack_V31 fMSFCallBack_V31 = null; // 报警布防回调函数
-//
-//    private FMSGCallBack fMSFCallBack = null; // 报警监听回调函数
-
     @Autowired
     private HkCameraProperty hkCameraProperty;
 
+    public Map<String, DeviceSession> getDeviceMap() {
+        return deviceMap;
+    }
 
     @PostConstruct
     public void init() {
         // 初始化 SDK
         hikSDKManager.initSDK(SdkType.CAR_DOOR);
-        hCNetSDK = (HCNetSDK) hikSDKManager.getSDK(SdkType.CAR_DOOR);
+//        hCNetSDK = (HCNetSDK) hikSDKManager.getSDK(SdkType.CAR_DOOR);
+        hCNetSDK = hikSDKManager.getCarDoorSDK(); // 类型安全获取
 
         if (hCNetSDK == null) {
             logger.error("❌ CAR_DOOR HCNetSDK 初始化失败");

File diff suppressed because it is too large
+ 118 - 118
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carDoor/NetSDKDemo/HCNetSDK.java


+ 0 - 2
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carDoor/hik/BarrierGateManage.java

@@ -22,8 +22,6 @@ public class BarrierGateManage {
 
     private static final Logger logger = LoggerFactory.getLogger(BarrierGateManage.class);
 
-    @Autowired
-    @Qualifier("carDoorSDK")
     private HCNetSDK hCNetSDK;
 
     @Autowired

+ 0 - 2
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carDoor/hik/ISAPI.java

@@ -20,8 +20,6 @@ public class ISAPI {
 
     private static final Logger logger = LoggerFactory.getLogger(ISAPI.class);
 
-    @Autowired
-    @Qualifier("carDoorSDK")
     private HCNetSDK hCNetSDK;
 
     /**

+ 0 - 2
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carDoor/hik/ITCMain.java

@@ -33,8 +33,6 @@ public class ITCMain {
     @Autowired
     private HikSDKManager hikSDKManager;
 
-    @Autowired
-    @Qualifier("carDoorSDK")
     private HCNetSDK hCNetSDK;
 
     @Autowired

+ 0 - 2
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carDoor/hik/LCDdisplayManage.java

@@ -22,8 +22,6 @@ public class LCDdisplayManage {
 
     private static final Logger logger = LoggerFactory.getLogger(LCDdisplayManage.class);
 
-    @Autowired
-    @Qualifier("carDoorSDK")
     private HCNetSDK hCNetSDK;
 
     @Autowired

+ 0 - 2
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carDoor/hik/LEDdisplayManage.java

@@ -19,8 +19,6 @@ public class LEDdisplayManage {
 
     private static final Logger logger = LoggerFactory.getLogger(LEDdisplayManage.class);
 
-    @Autowired
-    @Qualifier("carDoorSDK")
     private HCNetSDK hCNetSDK;
 
     @Autowired

+ 0 - 2
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carDoor/hik/VechileListManage.java

@@ -28,8 +28,6 @@ public class VechileListManage {
 
     private static final Logger logger = LoggerFactory.getLogger(VechileListManage.class);
 
-    @Autowired
-    @Qualifier("carDoorSDK")
     private HCNetSDK hCNetSDK;
 
     private FVehicleCrtlCB fVehicleCrtlCB = null;

+ 0 - 2
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carDoor/hik/VoiceManage.java

@@ -21,8 +21,6 @@ public class VoiceManage {
 
     private static final Logger logger = LoggerFactory.getLogger(VoiceManage.class);
 
-    @Autowired
-    @Qualifier("carDoorSDK")
     private HCNetSDK hCNetSDK;
 
     @Autowired

+ 0 - 2
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/Acs/ACSManage.java

@@ -21,8 +21,6 @@ public final class ACSManage {
 
     private static final Logger logger = org.slf4j.LoggerFactory.getLogger(ACSManage.class);
 
-    @Autowired
-    @Qualifier("peopleDoorSDK")
     private HCNetSDK hCNetSDK;
 
     /**

+ 0 - 2
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/Acs/AcsMain.java

@@ -19,8 +19,6 @@ public class AcsMain {
 
     private static final Logger logger = org.slf4j.LoggerFactory.getLogger(AcsMain.class);
 
-    @Autowired
-    @Qualifier("peopleDoorSDK")
     private HCNetSDK hCNetSDK;
 
     static int lUserID = -1;//用户句柄

+ 0 - 2
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/Acs/CardManage.java

@@ -20,8 +20,6 @@ import java.util.UUID;
 @Component
 public final class CardManage {
 
-    @Autowired
-    @Qualifier("peopleDoorSDK")
     private HCNetSDK hCNetSDK;
 
     @Autowired

+ 0 - 2
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/Acs/EventSearch.java

@@ -18,8 +18,6 @@ import java.nio.ByteBuffer;
 @Component
 public final class EventSearch {
 
-    @Autowired
-    @Qualifier("peopleDoorSDK")
     private HCNetSDK hCNetSDK;
 
     /**

+ 0 - 2
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/Acs/FaceManage.java

@@ -33,8 +33,6 @@ public class FaceManage {
 
     private static final Logger logger = LoggerFactory.getLogger(FaceManage.class);
 
-    @Autowired
-    @Qualifier("peopleDoorSDK")
     private HCNetSDK hCNetSDK;
 
     @Autowired

+ 0 - 2
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/Acs/FingerManage.java

@@ -28,8 +28,6 @@ public final class FingerManage {
 
     private static final Logger logger = LoggerFactory.getLogger(FingerManage.class);
 
-    @Autowired
-    @Qualifier("peopleDoorSDK")
     private HCNetSDK hCNetSDK;
 
     @Autowired

+ 0 - 2
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/Acs/MutilCard.java

@@ -16,8 +16,6 @@ public class MutilCard {
 
     private static final Logger logger = LoggerFactory.getLogger(MutilCard.class);
 
-    @Autowired
-    @Qualifier("peopleDoorSDK")
     private HCNetSDK hCNetSDK;
 
     //设置群组参数

+ 0 - 2
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/Acs/TransIsapi.java

@@ -18,8 +18,6 @@ public final class TransIsapi {
 
     private static final Logger logger = LoggerFactory.getLogger(TransIsapi.class);
 
-    @Autowired
-    @Qualifier("peopleDoorSDK")
     private HCNetSDK hCNetSDK;
 
     public String get_isapi(int lUserID, String url) {

+ 0 - 2
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/Acs/UserManage.java

@@ -26,8 +26,6 @@ public class UserManage {
 
     private static final Logger logger = org.slf4j.LoggerFactory.getLogger(UserManage.class);
 
-    @Autowired
-    @Qualifier("peopleDoorSDK")
     private HCNetSDK hCNetSDK;
 
     public void deleteUserInfo(int userID) {

File diff suppressed because it is too large
+ 118 - 117
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/NetSDKDemo/HCNetSDK.java


+ 17 - 17
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/peopleDoor/PeopleDoorDeviceManager.java

@@ -32,8 +32,6 @@ public class PeopleDoorDeviceManager {
 
     private HCNetSDK hCNetSDK;
 
-    // 防止重复初始化
-    private boolean sdkInited = false;
     @Autowired
     private UserManage userManage;
 
@@ -54,17 +52,25 @@ public class PeopleDoorDeviceManager {
      */
     private final Map<String, DeviceSession> deviceMap = new ConcurrentHashMap<>();
 
+    public Map<String, DeviceSession> getDeviceMap() {
+        return deviceMap;
+    }
+
     @PostConstruct
     public void init() {
-        // 确保 SDK 已初始化
-        hikSDKManager.initSDK(SdkType.CAR_CAMERA);
-        hCNetSDK = (HCNetSDK) hikSDKManager.getSDK(SdkType.CAR_CAMERA);
-
-        if (hCNetSDK != null) {
-            sdkInited = true;
-            logger.info("CarCamera HCNetSDK 已初始化");
-        } else {
-            logger.error("CarCamera HCNetSDK 初始化失败");
+        try {
+            // 初始化 PEOPLE_DOOR SDK
+            hikSDKManager.initSDK(SdkType.PEOPLE_DOOR);
+//            hCNetSDK = (HCNetSDK) hikSDKManager.getSDK(SdkType.PEOPLE_DOOR);
+            hCNetSDK = hikSDKManager.getPeopleDoorSDK(); // 类型安全获取
+
+            if (hCNetSDK != null) {
+                logger.info("PeopleDoor HCNetSDK 已初始化");
+            } else {
+                logger.error("PeopleDoor HCNetSDK 初始化失败");
+            }
+        } catch (Exception e) {
+            logger.error("PeopleDoorDeviceManager 初始化异常: {}", e.getMessage(), e);
         }
     }
 
@@ -127,12 +133,6 @@ public class PeopleDoorDeviceManager {
             }
         });
         deviceMap.clear();
-
-        if (sdkInited) {
-            hCNetSDK.NET_DVR_Cleanup();
-            sdkInited = false;
-            logger.info("SDK资源释放完成");
-        }
     }
 
     /**

+ 1 - 11
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/util/DeviceSession.java

@@ -1,20 +1,18 @@
 package com.supervision.web.ConnectSDK.util;
 
 import lombok.Data;
-import org.springframework.stereotype.Component;
 
 /**
  * 通用设备会话对象(支持多种类型 SDK)
  * -------------------------------------------------
  * 注意:不直接依赖 HCNetSDK 结构体,以避免多 SDK 类型冲突。
  */
-@Component
 @Data
 public class DeviceSession {
     private final String ip;
     private final int userID;
     private final SdkType sdkType;
-    private final Object deviceInfo; // 可存放任何 SDK 的 NET_DVR_DEVICEINFO_V40
+    private final Object deviceInfo;
 
     public DeviceSession(String ip, int userID, SdkType sdkType, Object deviceInfo) {
         this.ip = ip;
@@ -23,15 +21,7 @@ public class DeviceSession {
         this.deviceInfo = deviceInfo;
     }
 
-    public String getIp() { return ip; }
-    public int getUserID() { return userID; }
-    public SdkType getSdkType() { return sdkType; }
-    public Object getDeviceInfo() { return deviceInfo; }
-
-    /** 类型安全获取 DeviceInfo */
     public <T> T getDeviceInfo(Class<T> clazz) {
         return clazz.cast(deviceInfo);
     }
 }
-
-

+ 68 - 0
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/util/DeviceSimulator.java

@@ -0,0 +1,68 @@
+package com.supervision.web.ConnectSDK.util;
+
+import com.supervision.web.ConnectSDK.carCamera.CarCameraDeviceManager;
+import com.supervision.web.ConnectSDK.carDoor.CarDoorDeviceManager;
+import com.supervision.web.ConnectSDK.peopleDoor.PeopleDoorDeviceManager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class DeviceSimulator {
+
+    @Autowired
+    private PeopleDoorDeviceManager peopleDoorManager;
+
+    @Autowired
+    private CarCameraDeviceManager carCameraManager;
+
+    @Autowired
+    private CarDoorDeviceManager carDoorManager;
+
+    /**
+     * 模拟登录所有设备
+     */
+    public void simulateLoginAll() {
+        simulatePeopleDoor();
+        simulateCarCamera();
+        simulateCarDoor();
+    }
+
+    private void simulatePeopleDoor() {
+        String ip = "10.9.137.17";
+        int userID = 1; // 模拟 userID
+        DeviceSession session = new DeviceSession(
+                ip,
+                userID,
+                SdkType.PEOPLE_DOOR,
+                null // 模拟 deviceInfo,可根据需要传空或自定义对象
+        );
+        peopleDoorManager.getDeviceMap().put(ip, session);
+        System.out.println("[模拟] PeopleDoor 设备登录成功: " + ip);
+    }
+
+    private void simulateCarCamera() {
+        String ip = "10.9.137.17";
+        int userID = 2;
+        DeviceSession session = new DeviceSession(
+                ip,
+                userID,
+                SdkType.CAR_CAMERA,
+                null
+        );
+        carCameraManager.getDeviceMap().put(ip, session);
+        System.out.println("[模拟] CarCamera 设备登录成功: " + ip);
+    }
+
+    private void simulateCarDoor() {
+        String ip = "10.9.137.17";
+        int userID = 3;
+        DeviceSession session = new DeviceSession(
+                ip,
+                userID,
+                SdkType.CAR_DOOR,
+                null
+        );
+        carDoorManager.getDeviceMap().put(ip, session);
+        System.out.println("[模拟] CarDoor 设备登录成功: " + ip);
+    }
+}

+ 47 - 1
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/util/HikSDKManager.java

@@ -4,6 +4,7 @@ import com.sun.jna.Native;
 import com.sun.jna.Pointer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.PostConstruct;
@@ -35,7 +36,8 @@ public class HikSDKManager {
     /** 工程路径(假设所有 lib 库放在 supervision-admin/lib 目录下) */
     private static final String BASE_PATH = System.getProperty("user.dir") + "/supervision-admin";
 
-    private boolean sdkInited = false;
+    @Autowired
+    private DeviceSimulator deviceSimulator;
 
     /**---------------------------------------------
      * 统一初始化全部 SDK(Spring 启动时执行)
@@ -51,6 +53,7 @@ public class HikSDKManager {
             }
         }
         logger.info("全部海康 SDK 初始化完成");
+        deviceSimulator.simulateLoginAll();
     }
 
     /**---------------------------------------------
@@ -211,4 +214,47 @@ public class HikSDKManager {
     private boolean isWindows() {
         return System.getProperty("os.name").toLowerCase().contains("win");
     }
+
+    // 获取人行门禁 SDK
+    public com.supervision.web.ConnectSDK.peopleDoor.NetSDKDemo.HCNetSDK getPeopleDoorSDK() {
+        Object sdk = sdkMap.get(SdkType.PEOPLE_DOOR);
+        if (sdk == null) {
+            logger.warn("PeopleDoor SDK 未初始化");
+            return null;
+        }
+        if (!(sdk instanceof com.supervision.web.ConnectSDK.peopleDoor.NetSDKDemo.HCNetSDK)) {
+            logger.error("PeopleDoor SDK 类型错误: {}", sdk.getClass());
+            return null;
+        }
+        return (com.supervision.web.ConnectSDK.peopleDoor.NetSDKDemo.HCNetSDK) sdk;
+    }
+
+    // 获取车牌识别摄像头 SDK
+    public com.supervision.web.ConnectSDK.carCamera.NetSDKDemo.HCNetSDK getCarCameraSDK() {
+        Object sdk = sdkMap.get(SdkType.CAR_CAMERA);
+        if (sdk == null) {
+            logger.warn("CarCamera SDK 未初始化");
+            return null;
+        }
+        if (!(sdk instanceof com.supervision.web.ConnectSDK.carCamera.NetSDKDemo.HCNetSDK)) {
+            logger.error("CarCamera SDK 类型错误: {}", sdk.getClass());
+            return null;
+        }
+        return (com.supervision.web.ConnectSDK.carCamera.NetSDKDemo.HCNetSDK) sdk;
+    }
+
+    // 获取车辆道闸 SDK
+    public com.supervision.web.ConnectSDK.carDoor.NetSDKDemo.HCNetSDK getCarDoorSDK() {
+        Object sdk = sdkMap.get(SdkType.CAR_DOOR);
+        if (sdk == null) {
+            logger.warn("CarDoor SDK 未初始化");
+            return null;
+        }
+        if (!(sdk instanceof com.supervision.web.ConnectSDK.carDoor.NetSDKDemo.HCNetSDK)) {
+            logger.error("CarDoor SDK 类型错误: {}", sdk.getClass());
+            return null;
+        }
+        return (com.supervision.web.ConnectSDK.carDoor.NetSDKDemo.HCNetSDK) sdk;
+    }
+
 }

+ 20 - 0
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/util/XStructure.java

@@ -0,0 +1,20 @@
+package com.supervision.web.ConnectSDK.util;
+
+import com.sun.jna.Structure;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+
+public class XStructure extends Structure {
+    @Override
+    protected List<String> getFieldOrder() {
+        List<String> fieldNames = new ArrayList<>();
+        Field[] fields = this.getClass().getDeclaredFields();
+        // 遍历字段并提取名称
+        for (Field field : fields) {
+            fieldNames.add(field.getName());
+        }
+        return fieldNames;
+    }
+}

+ 0 - 255
supervision-admin/src/main/java/com/supervision/web/peopleGateManage/Service/impl/HikvisionPeopleAcsServiceImpl.java

@@ -1,255 +0,0 @@
-package com.supervision.web.peopleGateManage.Service.impl;
-
-
-import com.sun.jna.Native;
-import com.supervision.web.ConnectSDK.peopleDoor.Commom.osSelect;
-import com.supervision.web.ConnectSDK.peopleDoor.NetSDKDemo.HCNetSDK;
-import com.supervision.web.ConnectSDK.util.HikSDKManager;
-import com.supervision.web.ConnectSDK.util.SdkType;
-import org.slf4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import java.io.UnsupportedEncodingException;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-@Service
-public class HikvisionPeopleAcsServiceImpl {
-
-    private static final Logger logger = org.slf4j.LoggerFactory.getLogger(HikvisionPeopleAcsServiceImpl.class);
-
-
-
-    private HCNetSDK hCNetSDK = null;
-
-    @Autowired
-    private HikSDKManager hikSDKManager;
-
-    // 获取门禁 SDK
-    HCNetSDK peopleDoorSDK = (HCNetSDK) hikSDKManager.getSDK(SdkType.PEOPLE_DOOR);
-
-    // 用户名 -> userID 映射,多用户支持
-    private final Map<String, Integer> userLoginMap = new ConcurrentHashMap<>();
-
-    private boolean sdkInitialized = false;
-
-    private int iCharEncodeType = 0;
-
-
-
-    /**
-     * 用户登录设备
-     * 调用SDK登录设备
-     */
-    public Map<String, Object> beginloginDevice(String username, String ip, short port, String user, String psw,
-                                                String caseId)
-            throws UnsupportedEncodingException, InterruptedException {
-        Map<String, Object> res = new java.util.HashMap<>();
-        if (!sdkInitialized) {
-            res.put("message", "SDK未初始化");
-            return res;
-        }
-
-        // 重复登录处理
-        if (userLoginMap.containsKey(username)) {
-            logger.info("用户 {} 已登录,先登出原 session", username);
-            logout(username);
-        }
-
-        // 设备登录
-        // lUserID = loginDevice("10.10.138.203", (short) 8000, "admin", "hik12345");    //登陆设备
-        int userID = loginDevice(ip, port, user, psw);
-        if (userID < 0) {
-            res.put("message", "登录设备失败");
-            return res;
-        }
-
-        // 保存用户登录句柄
-        userLoginMap.put(username, userID);
-        logger.info("用户 {} 登录成功, userID={}", username, userID);
-
-        // 根据caseId 执行操作
-        handleCase(userID, caseId);
-
-        res.put("message", "操作成功,用户已登录");
-        res.put("userID", userID);
-        return res;
-    }
-
-    /**
-     * 用户登出设备
-     */
-    public void logout(String username) {
-        Integer userID = userLoginMap.remove(username);
-        if (userID != null && userID >= 0) {
-            hCNetSDK.NET_DVR_Logout(userID);
-            logger.info("用户 {} 已登出, userID={}", username, userID);
-        }
-    }
-
-    /**
-     * 登录设备,支持 V40 和 V30 版本,功能一致。
-     *
-     * @param ip   设备IP地址
-     * @param port SDK端口,默认为设备的8000端口
-     * @param user 设备用户名
-     * @param psw  设备密码
-     * @return 登录成功返回用户ID,失败返回-1
-     */
-    public int loginDevice(String ip, short port, String user, String psw) {
-        // SDK 已经全局初始化,不需要再次 NET_DVR_Init
-
-        // 创建设备登录信息和设备信息对象
-        HCNetSDK.NET_DVR_USER_LOGIN_INFO loginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();
-        HCNetSDK.NET_DVR_DEVICEINFO_V40 deviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();
-
-        // 填充 loginInf
-        // 设置设备IP地址
-        byte[] deviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN];
-        byte[] ipBytes = ip.getBytes();
-        System.arraycopy(ipBytes, 0, deviceAddress, 0, Math.min(ipBytes.length, deviceAddress.length));
-        loginInfo.sDeviceAddress = deviceAddress;
-
-        // 设置用户名和密码
-        byte[] userName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN];
-        byte[] password = psw.getBytes();
-        System.arraycopy(user.getBytes(), 0, userName, 0, Math.min(user.length(), userName.length));
-        System.arraycopy(password, 0, loginInfo.sPassword, 0, Math.min(password.length, loginInfo.sPassword.length));
-        loginInfo.sUserName = userName;
-
-        // 设置端口和登录模式
-        loginInfo.wPort = port;
-        loginInfo.bUseAsynLogin = false; // 同步登录
-        loginInfo.byLoginMode = 0; // 使用SDK私有协议
-
-        // 执行登录操作
-        int userID = hCNetSDK.NET_DVR_Login_V40(loginInfo, deviceInfo); // 用户注册即登录设备,调用NET_DVR_Login_V40接口,每一台设备只需要登录一次。
-        if (userID == -1) {
-            logger.error("登录失败,错误码为: " + hCNetSDK.NET_DVR_GetLastError());
-        } else {
-            deviceInfo.read();
-            // 获取设备字符编码格式
-            iCharEncodeType = deviceInfo.byCharEncodeType;
-            logger.info("{} 设备登录成功,userID={}", ip, userID);
-        }
-        return userID; // 返回登录结果
-    }
-
-    /**
-     * 根据caseId 执行操作
-     */
-    private void handleCase(int userID, String caseId) throws UnsupportedEncodingException, InterruptedException {
-        switch (caseId.toLowerCase()) {
-//            case "11": {
-//                logger.info("[Module]获取门禁主机参数");
-//                ACSManage.getAcsCfg(userID);
-//                break;
-//            }
-//            case "12": {
-//                logger.info("[Module]设置门禁主机参数");
-//                ACSManage.setAcsCfg(userID);
-//                break;
-//            }
-//            case "13": {
-//                logger.info("[Module]获取门禁主机工作状态");
-//                ACSManage.getAcsStatus(userID);
-//                break;
-//            }
-//            case "14": {
-//                logger.info("[Module]远程控门");
-//                ACSManage.remoteControlGate(userID, 1, 1);
-//                break;
-//            }
-//            case "21": {
-//                logger.info("\n[Module]下发人员示例代码");
-//                UserManage.addUserInfo(userID, "12345");
-//                break;
-//            }
-//            case "22": {
-//                logger.info("\n[Module]查询人员示例代码");
-//                UserManage.searchUserInfo(userID);
-//                break;
-//            }
-//            case "23": {
-//                logger.info("\n[Module]删除人员代码");
-//                //支持按人员和全部删除
-//                UserManage.deleteUserInfo(userID);
-//                break;
-//            }
-//            case "24": {
-//                //人员下发默认1号计划模板:全天24小时有权限,自定义设置计划模板建议从2号模板开始
-//                logger.info("\n[Module]设置计划模板代码");
-//                UserManage.setCardTemplate(userID, 2);
-//                break;
-//            }
-//            case "31": {
-//                //先下发人员,人员工号上绑定卡号
-//                logger.info("\n[Module]下发卡号代码");
-//                CardManage.addCardInfo(userID, "test001", "12345");
-//                break;
-//            }
-//            case "32": {
-//                //按照人员工号查看绑定的卡号
-//                logger.info("\n[Module]查询卡号代码");
-//                CardManage.searchCardInfo(userID, "test001");
-//                break;
-//            }
-//            case "33": {
-//                //按照人员工号删除绑定的卡号
-//                logger.info("\n[Module]删除卡号代码");
-//                CardManage.deleteCardInfo(userID, "12345");
-//                break;
-//            }
-//            case "41": {
-//                //先下发人员,人员工号上绑定人脸图片
-//                logger.info("\n[Module]二进制方式下发人脸代码");
-//                FaceManage.addFaceByBinary(userID, "test001");
-//                break;
-//            }
-//            case "42": {
-//                //先下发人员,人员工号上绑定人脸图片
-//                logger.info("\n[Module]URL方式下发人脸代码");
-//                FaceManage.addFaceByUrl(userID, "test001");
-//                break;
-//            }
-//            case "43": {
-//                //根据人员工号查询人脸图片
-//                logger.info("\n[Module]查询人脸代码");
-//                FaceManage.searchFaceInfo(userID, "test001");
-//                break;
-//            }
-//            case "44": {
-//                //根据人员工号删除人脸图片
-//                logger.info("\n[Module]删除人脸代码");
-//                FaceManage.deleteFaceInfo(userID, "test001");
-//                break;
-//            }
-//            case "45": {
-//                logger.info("\n[Module]采集人脸代码");
-//                FaceManage.captureFaceInfo(userID);
-//                break;
-//            }
-//            case "56": {
-//                logger.info("\n[Module]门禁历史事件查询代码");
-//                EventSearch.searchAllEvent(userID);
-//                break;
-//            }
-//            default: {
-//                logger.info("\n未知的指令操作!请重新输入!\n");
-//            }
-        }
-    }
-
-    /**
-     * 获取用户登录句柄
-     */
-    public Integer getUserID(String username) {
-        return userLoginMap.get(username);
-    }
-
-}
-

Some files were not shown because too many files changed in this diff