소스 검색

修改bug

11868 1 주 전
부모
커밋
08f4073c63

+ 122 - 14
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carDoor/CarDoorController.java

@@ -1,8 +1,10 @@
 package com.supervision.web.ConnectSDK.carDoor;
 
 
-import com.supervision.web.ConnectSDK.carCamera.CarCameraDeviceManager;
+import com.supervision.web.ConnectSDK.carDoor.hik.BarrierGateManage;
 import com.supervision.web.ConnectSDK.util.DeviceSession;
+import com.supervision.web.peopleGateManage.entity.Device;
+import com.supervision.web.peopleGateManage.service.DeviceService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,7 +27,7 @@ import java.util.Map;
  *  - 查看设备状态
  */
 @RestController
-@RequestMapping("/api/car-door")
+@RequestMapping("/carDoor")
 public class CarDoorController {
 
     private static final Logger logger = LoggerFactory.getLogger(CarDoorController.class);
@@ -33,6 +35,112 @@ public class CarDoorController {
     @Autowired
     private CarDoorDeviceManager carDoorDeviceManager;
 
+    @Autowired
+    private DeviceService deviceService;
+
+    @Autowired
+    private BarrierGateManage barrierGateManage;
+
+    @PostMapping("/getDoorStatus")
+    public Map<String, Object> getDoorStatus(@RequestBody Map<String, Object> params) {
+        Map<String, Object> result = new HashMap<>();
+
+        Object idObj = params.get("deviceId");
+        if (idObj == null) {
+            result.put("success", false);
+            result.put("message", "deviceId不能为空");
+            return result;
+        }
+
+        Long deviceId;
+        try {
+            deviceId = Long.parseLong(idObj.toString());
+        } catch (NumberFormatException e) {
+            result.put("success", false);
+            result.put("message", "deviceId格式错误");
+            return result;
+        }
+
+        Device device = deviceService.getById(deviceId);
+        if (device == null || device.getIp() == null) {
+            logger.error("设备不存在, deviceId={}", deviceId);
+            result.put("success", false);
+            result.put("message", "设备不存在或未配置IP");
+            return result;
+        }
+
+        DeviceSession deviceSession = carDoorDeviceManager.getDeviceSession(device.getIp());
+        if (deviceSession == null) {
+            logger.error("设备未登录, deviceId={}", deviceId);
+            result.put("success", false);
+            result.put("message", "设备未登录");
+            return result;
+        }
+
+        try {
+            int userID = deviceSession.getUserID();
+            barrierGateManage.getBarrierGateState(userID);
+            result.put("success", true);
+            result.put("message", "操作成功");
+        } catch (Exception e) {
+            logger.error("控制门禁异常, deviceId={}", deviceId, e);
+            result.put("success", false);
+            result.put("message", "操作失败: " + e.getMessage());
+        }
+
+        return result;
+    }
+
+    @PostMapping("/ctrlDoor")
+    public Map<String, Object> ctrlDoor(@RequestBody Map<String, Object> params) {
+        Map<String, Object> result = new HashMap<>();
+
+        Object idObj = params.get("deviceId");
+        if (idObj == null) {
+            result.put("success", false);
+            result.put("message", "deviceId不能为空");
+            return result;
+        }
+
+        Long deviceId;
+        try {
+            deviceId = Long.parseLong(idObj.toString());
+        } catch (NumberFormatException e) {
+            result.put("success", false);
+            result.put("message", "deviceId格式错误");
+            return result;
+        }
+
+        Device device = deviceService.getById(deviceId);
+        if (device == null || device.getIp() == null) {
+            logger.error("设备不存在, deviceId={}", deviceId);
+            result.put("success", false);
+            result.put("message", "设备不存在或未配置IP");
+            return result;
+        }
+
+        DeviceSession deviceSession = carDoorDeviceManager.getDeviceSession(device.getIp());
+        if (deviceSession == null) {
+            logger.error("设备未登录, deviceId={}", deviceId);
+            result.put("success", false);
+            result.put("message", "设备未登录");
+            return result;
+        }
+
+        try {
+            int userID = deviceSession.getUserID();
+            barrierGateManage.BarrierGateCtrl(userID, (HashMap<String, Object>) params);
+            result.put("success", true);
+            result.put("message", "操作成功");
+        } catch (Exception e) {
+            logger.error("控制门禁异常, deviceId={}, params={}", deviceId, params, e);
+            result.put("success", false);
+            result.put("message", "操作失败: " + e.getMessage());
+        }
+
+        return result;
+    }
+
     /**
      * 登录设备
      */
@@ -73,17 +181,17 @@ public class CarDoorController {
         }
 
         HashMap<String, Object> cmd = new HashMap<>();
-        if ("start".equalsIgnoreCase(action)) {
-            cmd.put("caseId", "1"); // 布防
-            carDoorDeviceManager.handleCase(session.getUserID(), cmd);
-            res.put("message", "布防已启动");
-        } else if ("stop".equalsIgnoreCase(action)) {
-            cmd.put("caseId", "2"); // 撤防
-            carDoorDeviceManager.handleCase(session.getUserID(), cmd);
-            res.put("message", "布防已撤销");
-        } else {
-            res.put("message", "未知操作: " + action);
-        }
+//        if ("start".equalsIgnoreCase(action)) {
+//            cmd.put("caseId", "1"); // 布防
+//            carDoorDeviceManager.handleCase(session.getUserID(), cmd);
+//            res.put("message", "布防已启动");
+//        } else if ("stop".equalsIgnoreCase(action)) {
+//            cmd.put("caseId", "2"); // 撤防
+//            carDoorDeviceManager.handleCase(session.getUserID(), cmd);
+//            res.put("message", "布防已撤销");
+//        } else {
+//            res.put("message", "未知操作: " + action);
+//        }
 
         res.put("success", true);
         return res;
@@ -121,7 +229,7 @@ public class CarDoorController {
             return res;
         }
 
-        carDoorDeviceManager.handleCase(session.getUserID(), req);
+//        carDoorDeviceManager.handleCase(session.getUserID(), req);
         res.put("success", true);
         res.put("message", "操作完成");
         return res;

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

@@ -127,93 +127,93 @@ public class CarDoorDeviceManager {
         });
     }
 
-    /**
-     * 根据caseId 执行操作
-     */
-    public void handleCase(int userID, HashMap<String, Object> request) throws Exception {
-        String caseId = (String) request.get("caseId");
-        switch (caseId.toLowerCase()) {
-            case "1": {
-                logger.info("\n[Module]下发车辆授权名单示例代码");
-                vechileListManage.addVechileList(userID);
-                break;
-            }
-            case "2": {
-                logger.info("\n[Module]查询车辆授权名单示例代码");
-                vechileListManage.searchVechileList(userID);
-                break;
-            }
-            case "3": {
-                logger.info("\n[Module]删除车辆授权名单示例代码");
-                vechileListManage.deleteVechileList(userID);
-                break;
-            }
-            case "4": {
-                logger.info("\n[Module]远程道闸控制示例代码");
-                barrierGateManage.BarrierGateCtrl(userID, null);
-                break;
-            }
-            case "5": {
-                logger.info("\n[Module]获取道闸状态示例代码");
-                barrierGateManage.getBarrierGateState(userID);
-                break;
-            }
-            case "6": {
-                logger.info("\n[Module]语音播报示例代码");
-                voiceManage.voiceBroadcastInfo(userID);
-                break;
-            }
-            case "7": {
-                logger.info("\n[Module]获取组合语音播报参数示例代码");
-                voiceManage.getCombinateBroadcastInfo(userID);
-                break;
-            }
-            case "8": {
-                logger.info("\n[Module]语音播报示例代码");
-                voiceManage.setCombinateBroadcastInfo(userID);
-                break;
-            }
-            case "9": {
-                logger.info("\n[Module]相机控制LCD显示参数示例代码");
-                lCDdisplayManage.setCameractrlModeLCDdisplayInfo(userID);
-                break;
-            }
-            case "10": {
-                logger.info("\n[Module]获取当前LCD参数示例代码");
-                lCDdisplayManage.getctrlModeLCDdisplayInfo(userID);
-                break;
-            }
-            case "11": {
-                logger.info("\n[Module]设置平台模式LCD参数示例代码");
-                lCDdisplayManage.setplatformctrlModeLCDdisplayInfo(userID);
-                break;
-            }
-            // 此后所有case都属于平台控制模式下发LCD显示,需要先调用setplatformctrlModeLCDdisplayInfo接口设置设备未平台模式
-            case "12": {
-                logger.info("\n[Module]下发入场无车牌图片显示示例代码");
-                lCDdisplayManage.setPicDisplayEnterNolicense(userID);
-                break;
-            }
-            case "13": {
-                logger.info("\n[Module]车辆出场未缴费场景图片显示示例代码");
-                lCDdisplayManage.setPicDisplayExitNoPay(userID);
-                break;
-            }
-            case "14": {
-                logger.info("\n[Module]设置车辆入场有车牌自定义显示示例代码");
-                lCDdisplayManage.setEnterLicenseDisplay(userID);
-                break;
-            }
-            case "15": {
-                logger.info("\n[Module]设置余位显示示例代码");
-                lCDdisplayManage.setParkingLotDisPlay(userID);
-                break;
-            }
-            default: {
-                logger.info("\n未知的指令操作!请重新输入!\n");
-            }
-        }
-    }
+//    /**
+//     * 根据caseId 执行操作
+//     */
+//    public void handleCase(int userID, HashMap<String, Object> request) throws Exception {
+//        String caseId = (String) request.get("caseId");
+//        switch (caseId.toLowerCase()) {
+//            case "1": {
+//                logger.info("\n[Module]下发车辆授权名单示例代码");
+//                vechileListManage.addVechileList(userID);
+//                break;
+//            }
+//            case "2": {
+//                logger.info("\n[Module]查询车辆授权名单示例代码");
+//                vechileListManage.searchVechileList(userID);
+//                break;
+//            }
+//            case "3": {
+//                logger.info("\n[Module]删除车辆授权名单示例代码");
+//                vechileListManage.deleteVechileList(userID);
+//                break;
+//            }
+//            case "4": {
+//                logger.info("\n远程道闸控制示例代码");
+//                barrierGateManage.BarrierGateCtrl(userID, request);
+//                break;
+//            }
+//            case "5": {
+//                logger.info("\n获取道闸状态示例代码");
+//                barrierGateManage.getBarrierGateState(userID,);
+//                break;
+//            }
+//            case "6": {
+//                logger.info("\n[Module]语音播报示例代码");
+//                voiceManage.voiceBroadcastInfo(userID);
+//                break;
+//            }
+//            case "7": {
+//                logger.info("\n[Module]获取组合语音播报参数示例代码");
+//                voiceManage.getCombinateBroadcastInfo(userID);
+//                break;
+//            }
+//            case "8": {
+//                logger.info("\n[Module]语音播报示例代码");
+//                voiceManage.setCombinateBroadcastInfo(userID);
+//                break;
+//            }
+//            case "9": {
+//                logger.info("\n[Module]相机控制LCD显示参数示例代码");
+//                lCDdisplayManage.setCameractrlModeLCDdisplayInfo(userID);
+//                break;
+//            }
+//            case "10": {
+//                logger.info("\n[Module]获取当前LCD参数示例代码");
+//                lCDdisplayManage.getctrlModeLCDdisplayInfo(userID);
+//                break;
+//            }
+//            case "11": {
+//                logger.info("\n[Module]设置平台模式LCD参数示例代码");
+//                lCDdisplayManage.setplatformctrlModeLCDdisplayInfo(userID);
+//                break;
+//            }
+//            // 此后所有case都属于平台控制模式下发LCD显示,需要先调用setplatformctrlModeLCDdisplayInfo接口设置设备未平台模式
+//            case "12": {
+//                logger.info("\n[Module]下发入场无车牌图片显示示例代码");
+//                lCDdisplayManage.setPicDisplayEnterNolicense(userID);
+//                break;
+//            }
+//            case "13": {
+//                logger.info("\n[Module]车辆出场未缴费场景图片显示示例代码");
+//                lCDdisplayManage.setPicDisplayExitNoPay(userID);
+//                break;
+//            }
+//            case "14": {
+//                logger.info("\n[Module]设置车辆入场有车牌自定义显示示例代码");
+//                lCDdisplayManage.setEnterLicenseDisplay(userID);
+//                break;
+//            }
+//            case "15": {
+//                logger.info("\n[Module]设置余位显示示例代码");
+//                lCDdisplayManage.setParkingLotDisPlay(userID);
+//                break;
+//            }
+//            default: {
+//                logger.info("\n未知的指令操作!请重新输入!\n");
+//            }
+//        }
+//    }
 
     /**
      * 获取设备 session

+ 25 - 13
supervision-admin/src/main/java/com/supervision/web/ConnectSDK/carDoor/hik/BarrierGateManage.java

@@ -1,20 +1,17 @@
 package com.supervision.web.ConnectSDK.carDoor.hik;
 
+
 import com.supervision.web.ConnectSDK.carDoor.NetSDKDemo.HCNetSDK;
 import com.sun.jna.Pointer;
 import com.sun.jna.ptr.IntByReference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 
 import java.util.HashMap;
 
 /**
- * @author jiangxin
- * @create 2021-04-20-17:17
- * <p>
  * 远程控制道闸模块,功能:远程控制道闸开启、关闭、获取道闸状态
  */
 @Component
@@ -34,22 +31,19 @@ public class BarrierGateManage {
      */
     public void BarrierGateCtrl(int lUserID, HashMap<String, Object> conditions) {
         // 获取参数,提供默认值
-        int laneNo = conditions.getOrDefault("laneNo", 1) instanceof Integer ? (int) conditions.get("laneNo") : 1;
-        int ctrl = conditions.getOrDefault("ctrl", 1) instanceof Integer ? (int) conditions.get("ctrl") : 1;
-        int entranceNo = conditions.getOrDefault("entranceNo", 1) instanceof Integer ? (int) conditions.get("entranceNo") : 1;
-        int unlockEnable = conditions.getOrDefault("unlockEnable", 0) instanceof Integer ? (int) conditions.get("unlockEnable") : 0;
-
+        byte operate = (byte) conditions.get("byBarrierGateCtrl");
         // 初始化结构体
         HCNetSDK.NET_DVR_BARRIERGATE_CFG cfg = new HCNetSDK.NET_DVR_BARRIERGATE_CFG();
         cfg.read();
         cfg.dwSize = cfg.size(); // 结构体大小
         cfg.dwChannel = 1; // 通道号
         cfg.byLaneNo = 1; // 道闸号:0- 表示无效值(设备需要做有效值判断),1- 道闸1
-        cfg.byBarrierGateCtrl = 1; // 控制参数:0- 关闭道闸,1- 开启道闸,2- 停止道闸,3- 锁定道闸,4- 解锁道闸
-        cfg.byEntranceNo = 1;   // 出入口编号,取值范围:[1,8]
+        cfg.byBarrierGateCtrl = operate; // 控制参数:0- 关闭道闸,1- 开启道闸,2- 停止道闸,3- 锁定道闸,4- 解锁道闸
+        cfg.byEntranceNo = 1; // 出入口编号,取值范围:[1,8]
         cfg.byUnlock = 0; // 启用解锁使能:0- 不启用,1- 启用
         // 如果设备不支持byUnlock字段,该参数赋值为0,byBarrierGateCtrl控制参数取值“0-关闭道闸、1-开启道闸、2-停止道闸”中任何一种操作皆可进行解锁;
         // 如果设备支持byUnlock字段,解锁时需要将参数赋值为1,并结合byBarrierGateCtrl赋值为“4-解锁道闸”来进行解锁,byUnlock为1时其他操作均不能解锁
+        cfg.byRes[0] = 0;
         cfg.write();
 
         // 调用 SDK 控制道闸 // TRUE表示成功,FALSE表示失败。接口返回失败请调用NET_DVR_GetLastError获取错误码,通过错误码判断出错原因。
@@ -65,6 +59,24 @@ public class BarrierGateManage {
             throw new RuntimeException("远程控制道闸失败,错误码:" + errCode);
         }
         logger.info("远程控制道闸成功");
+        // 0- 关闭道闸,1- 开启道闸,2- 停止道闸,3- 锁定道闸,4- 解锁道闸
+        switch(operate) {
+            case 0:
+                logger.info("道闸已关闭");
+                break;
+            case 1:
+                logger.info("道闸已开启");
+                break;
+            case 2:
+                logger.info("道闸已停止");
+                break;
+            case 3:
+                logger.info("道闸已锁定");
+                break;
+            case 4:
+                logger.info("道闸已解锁");
+                break;
+        }
     }
 
     /**
@@ -75,7 +87,7 @@ public class BarrierGateManage {
      *
      * @param lUserID
      */
-    public void getBarrierGateState(int lUserID) {
+    public String getBarrierGateState(int lUserID) {
         String getBarrierGateStateUrl = "GET /ISAPI/Parking/channels/1/barrierGate/barrierGateStatus";
         String responseString = isapi.stdXMLConfig(
                 lUserID,
@@ -83,7 +95,7 @@ public class BarrierGateManage {
                 ""
         );
         logger.info("获取道闸状态返回报文:" + responseString);
-        return;
+        return responseString;
     }
 
     // 出入口控制参数获取

+ 1 - 0
supervision-admin/src/main/java/com/supervision/web/peopleGateManage/controller/DeviceManageController.java

@@ -1,5 +1,6 @@
 package com.supervision.web.peopleGateManage.controller;
 
+
 import com.github.pagehelper.PageInfo;
 import com.supervision.web.peopleGateManage.service.DeviceService;
 import com.supervision.web.peopleGateManage.service.PeopleDeviceService;