Преглед изворни кода

添加开门关门控制代码

zhangqian пре 1 година
родитељ
комит
809090491c
1 измењених фајлова са 76 додато и 0 уклоњено
  1. 76 0
      src/main/java/com/greentech/gateservice/controller/GateController.java

+ 76 - 0
src/main/java/com/greentech/gateservice/controller/GateController.java

@@ -0,0 +1,76 @@
+package com.greentech.gateservice.controller;
+
+import com.greentech.gateservice.util.LoginModule;
+import com.netsdk.common.Res;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.ToolKits;
+import com.sun.jna.Memory;
+import com.sun.jna.Pointer;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.swing.*;
+
+@RestController
+public class GateController {
+    @RequestMapping("/open/door")
+    public String openDoor(@RequestParam String sn){
+        NetSDKLib.NET_CTRL_ACCESS_OPEN openInfo = new NetSDKLib.NET_CTRL_ACCESS_OPEN();
+        openInfo.nChannelID = 0;
+        openInfo.emOpenDoorType = NetSDKLib.EM_OPEN_DOOR_TYPE.EM_OPEN_DOOR_TYPE_REMOTE;
+        Pointer pointer = new Memory(openInfo.size());
+        ToolKits.SetStructDataToPointer(openInfo, pointer, 0);
+
+
+        //遍历寻找sn对应的句柄
+        synchronized(LoginModule.lock){
+            for (NetSDKLib.LLong key : LoginModule.m_stDeviceInfo.keySet()) {
+
+                //获取handle句柄和设备信息
+                NetSDKLib.NET_DEVICEINFO_Ex value = LoginModule.m_stDeviceInfo.get(key);
+                String deviceSn = new String(value.sSerialNumber);
+                if (deviceSn.equals(sn)) {
+                    boolean ret = LoginModule.netsdk.CLIENT_ControlDeviceEx(key,
+                            NetSDKLib.CtrlType.CTRLTYPE_CTRL_ACCESS_OPEN, pointer, null, 10000);
+                    if (!ret) {
+                        JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(),
+                                JOptionPane.ERROR_MESSAGE);
+                        return "开门失败";
+                    }
+                    return "开门成功";
+                }
+
+            }
+        }
+        return "未发现设备";
+    }
+
+    @RequestMapping("/close/door")
+    public String closeDoor(@RequestParam String sn){
+        final NetSDKLib.NET_CTRL_ACCESS_CLOSE close = new NetSDKLib.NET_CTRL_ACCESS_CLOSE();
+        close.nChannelID = 0; // 对应的门编号 - 如何开全部的门
+        close.write();
+        Pointer pointer = new Memory(close.size());
+
+        synchronized(LoginModule.lock) {
+            for (NetSDKLib.LLong key : LoginModule.m_stDeviceInfo.keySet()) {
+                //获取handle句柄和设备信息
+                NetSDKLib.NET_DEVICEINFO_Ex value = LoginModule.m_stDeviceInfo.get(key);
+                String deviceSn = new String(value.sSerialNumber);
+                if (deviceSn.equals(sn)) {
+                    boolean result = LoginModule.netsdk.CLIENT_ControlDeviceEx(key,
+                            NetSDKLib.CtrlType.CTRLTYPE_CTRL_ACCESS_CLOSE, close.getPointer(), null, 5000);
+                    close.read();
+                    if (!result) {
+                        JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(),
+                                JOptionPane.ERROR_MESSAGE);
+                        return "关门失败";
+                    }
+                    return "关门成功";
+                }
+            }
+        }
+        return "未发现设备";
+    }
+}