From 38eaaa87743252da53851047bd15b089ccf9697b Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期四, 07 三月 2024 11:00:40 +0800
Subject: [PATCH] SDK云台控制和setptz增加错误码返回 增加部门和相机按角色数据权限查询

---
 ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java |  116 +++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 90 insertions(+), 26 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
index 8bf60c2..61a578e 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
@@ -3,6 +3,8 @@
 import com.ruoyi.alarm.global.domain.GuidePriorityQueue;
 import com.ruoyi.alarm.global.domain.GuideTask;
 import com.ruoyi.alarm.global.service.impl.QueueHandler;
+import com.ruoyi.common.annotation.SdkOperate;
+import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.utils.file.FileUtils;
 import com.ruoyi.common.utils.file.MimeTypeUtils;
 import com.ruoyi.common.utils.spring.SpringUtils;
@@ -18,6 +20,7 @@
 import com.ruoyi.utils.gis.GisUtil;
 import com.ruoyi.utils.minio.MinioUtil;
 import com.ruoyi.utils.sdk.common.GlobalVariable;
+import com.ruoyi.utils.sdk.common.SdkErrorCodeEnum;
 import com.ruoyi.utils.sdk.hiksdk.lib.ExceptionCallBack;
 import com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK;
 import com.sun.jna.NativeLong;
@@ -57,7 +60,7 @@
     @Resource
     private QueueHandler queueHandler;
 
-    public Object _lock=new Object();
+    public Object _lock = new Object();
     public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK;
     private static HCNetSDK.FExceptionCallBack fExceptionCallBack;//寮傚父鍥炶皟
 
@@ -219,7 +222,10 @@
             //鍚屾鐧诲綍
             int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
             if (lUserID < 0) {
-                log.debug("Login Failed 銆� " + camera.getIp() + ":" + camera.getPort() + " 銆�,Error Code锛�" + hCNetSDK.NET_DVR_GetLastError());
+                int errorCode = hCNetSDK.NET_DVR_GetLastError();
+                log.debug("Login Failed 銆� " + camera.getIp() + ":" + camera.getPort() + " 銆�," +
+                        "Error Code:" + errorCode + " " +
+                        "Error Info:" + SdkErrorCodeEnum.getDescByCode(errorCode));
                 camera.setChanNum(0);
                 camera.setLoginId(-1);
                 camera.setState("0");
@@ -278,7 +284,7 @@
 
     //鍒涘缓寮曞闃熷垪
     private void createGuideQueue(ArdCameras camera) {
-        if(camera.getCamAlarmGuideEnable()!=null) {
+        if (camera.getCamAlarmGuideEnable() != null) {
             if (camera.getCamAlarmGuideEnable() == 1) {
                 if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) {
                     Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
@@ -290,6 +296,7 @@
             }
         }
     }
+
     //娣诲姞鍒版祦濯掍綋
     private void addVtdu(ArdCameras camera) {
         try {
@@ -373,14 +380,15 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     @Override
-    public boolean pTZControl(CameraCmd cmd) {
+    @SdkOperate
+    public AjaxResult pTZControl(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         boolean enable = cmd.isEnable();
         Integer channelNum = cmd.getChanNo();
         Integer speed = cmd.getSpeed();
         Integer code = cmd.getCode();
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
-            return false;
+            return AjaxResult.error("鐩告満鏈櫥褰�");
         }
         Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         int dwStop;
@@ -449,8 +457,9 @@
         if (!bool) {
             int errorCode = hCNetSDK.NET_DVR_GetLastError();
             log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + errorCode);
+            return AjaxResult.error("errorCode:" + errorCode + "errorInfo:" + SdkErrorCodeEnum.getDescByCode(errorCode));
         }
-        return bool;
+        return AjaxResult.success();
     }
 
     /**
@@ -888,8 +897,7 @@
      * @鍒涘缓鏃堕棿 2023/1/17 16:36
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
-    @Override
-    public Map<String, Object> getPtz(CameraCmd cmd) {
+    public Map<String, Object> getPtz1(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         Integer channelNum = cmd.getChanNo();
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
@@ -930,6 +938,57 @@
     }
 
     /**
+     * @鎻忚堪 鑾峰彇楂樼簿搴tz淇℃伅
+     * @鍙傛暟 [userId, chanNo]
+     * @杩斿洖鍊� boolean
+     * @鍒涘缓浜� 鍒樿嫃涔�
+     * @鍒涘缓鏃堕棿 2023/1/17 16:36
+     * @淇敼浜哄拰鍏跺畠淇℃伅
+     */
+    @Override
+    public Map<String, Object> getPtz(CameraCmd cmd) {
+        Map<String, Object> ptzMap = new HashMap<>();
+        try {
+            String cameraId = cmd.getCameraId();
+            Integer chanNo = cmd.getChanNo();
+            if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+                return new HashMap<>();
+            }
+            IntByReference pchannel = new IntByReference(chanNo);
+            Pointer pChannelNum = pchannel.getPointer();
+            Integer lUserID = (Integer) GlobalVariable.loginMap.get(cameraId);
+            HCNetSDK.NET_DVR_STD_CONFIG lpConfigParam6696 = new HCNetSDK.NET_DVR_STD_CONFIG();
+            HCNetSDK.NET_DVR_PTZABSOLUTEEX_CFG lpPTZAbsoluteEX_cfg = new HCNetSDK.NET_DVR_PTZABSOLUTEEX_CFG();
+            lpConfigParam6696.lpCondBuffer = pChannelNum;
+            lpConfigParam6696.dwCondSize = 4;
+            lpConfigParam6696.lpInBuffer = null;
+            lpConfigParam6696.dwInSize = 0;
+            lpConfigParam6696.lpOutBuffer = lpPTZAbsoluteEX_cfg.getPointer();
+            lpConfigParam6696.dwOutSize = lpPTZAbsoluteEX_cfg.size();
+            lpConfigParam6696.write();
+            boolean res = hCNetSDK.NET_DVR_GetSTDConfig(lUserID, HCNetSDK.NET_DVR_GET_PTZABSOLUTEEX, lpConfigParam6696);
+            if (!res) {
+                log.error("鑾峰彇楂樼簿搴TZ缁濆浣嶇疆閰嶇疆澶辫触锛岄敊璇彿锛�" + hCNetSDK.NET_DVR_GetLastError());
+            } else {
+                lpPTZAbsoluteEX_cfg.read();
+                //log.debug("P锛�" + lpPTZAbsoluteEX_cfg.struPTZCtrl.fPan + " T锛�" + lpPTZAbsoluteEX_cfg.struPTZCtrl.fTilt + " Z锛�" + lpPTZAbsoluteEX_cfg.struPTZCtrl.fZoom
+                //        + " 鑱氱劍鍙傛暟锛�" + lpPTZAbsoluteEX_cfg.struPTZCtrl.dwFocus + " 鑱氱劍鑼冨洿锛�" + lpPTZAbsoluteEX_cfg.dwFocalLen + " 姘村钩杞姩閫熷害锛�" + lpPTZAbsoluteEX_cfg.fHorizontalSpeed
+                //        + " 鍨傜洿杞姩閫熷害锛�" + lpPTZAbsoluteEX_cfg.fVerticalSpeed + " 闀滃ご鍙樺�嶉厤缃被鍨嬶細" + lpPTZAbsoluteEX_cfg.byZoomType);
+                float p = lpPTZAbsoluteEX_cfg.struPTZCtrl.fPan;
+                float fTilt = lpPTZAbsoluteEX_cfg.struPTZCtrl.fTilt;
+                float t = fTilt < 0 ? fTilt + 360 : fTilt;
+                float z = lpPTZAbsoluteEX_cfg.struPTZCtrl.fZoom;
+                ptzMap.put("p", p);
+                ptzMap.put("t", t);
+                ptzMap.put("z", z);
+            }
+        } catch (Exception ex) {
+            log.error("鑾峰彇楂樼簿搴TZ缁濆浣嶇疆寮傚父:" + ex.getMessage());
+        }
+        return ptzMap;
+    }
+
+    /**
      * @鎻忚堪 璁剧疆ptz淇℃伅
      * @鍙傛暟 [userId, channelNum]
      * @杩斿洖鍊� boolean
@@ -937,13 +996,14 @@
      * @鍒涘缓鏃堕棿 2023/1/17 16:36
      * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�奸渶瑕佸姞涓�360寰楀埌鐨勬鍊艰繘琛岃缃�
      */
-
-    public boolean setPtz1(CameraCmd cmd) {
+    @Override
+    @SdkOperate
+    public AjaxResult setPtz1(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         Integer channelNum = cmd.getChanNo();
         Map<String, Double> ptz = cmd.getPtzMap();
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
-            return false;
+            return AjaxResult.error("璁惧鏈櫥褰�");
         }
         Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
@@ -959,13 +1019,14 @@
             m_ptzPosCurrent.write();
             boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, channelNum, point, m_ptzPosCurrent.size());
             if (!bool) {
-                int code = hCNetSDK.NET_DVR_GetLastError();
-                log.error("璁剧疆PTZ鍙傛暟澶辫触,璇风◢鍚庨噸璇�:" + code);
+                int errorCode = hCNetSDK.NET_DVR_GetLastError();
+                log.error("璁剧疆PTZ鍙傛暟澶辫触,璇风◢鍚庨噸璇�:" + errorCode);
+                return AjaxResult.error("errorCode:" + errorCode + "errorInfo:" + SdkErrorCodeEnum.getDescByCode(errorCode));
             }
-            return bool;
+            return AjaxResult.success();
         } catch (Exception ex) {
             log.error(ex.getMessage());
-            return false;
+            return AjaxResult.error("璁剧疆PTZ鍙傛暟寮傚父:" + ex.getMessage());
         }
     }
 
@@ -978,13 +1039,14 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�煎悜涓嬭礋鍊�
      */
     @Override
-    public boolean setPtz(CameraCmd cmd) {
+    @SdkOperate
+    public AjaxResult setPtz(CameraCmd cmd) {
         try {
             String cameraId = cmd.getCameraId();
             Integer chanNo = cmd.getChanNo();
             Map<String, Double> ptz = cmd.getPtzMap();
             if (!GlobalVariable.loginMap.containsKey(cameraId)) {
-                return false;
+                return AjaxResult.error("璁惧鏈櫥褰�");
             }
             Integer lUserID = (Integer) GlobalVariable.loginMap.get(cameraId);
             IntByReference pchannel = new IntByReference(chanNo);
@@ -1016,22 +1078,23 @@
             lpConfigParam6697.write();
             boolean bool = hCNetSDK.NET_DVR_SetSTDConfig(lUserID, NET_DVR_SET_PTZABSOLUTEEX, lpConfigParam6697);
             if (!bool) {
-                int code = hCNetSDK.NET_DVR_GetLastError();
-                log.error("璁剧疆楂樼簿搴TZ鍙傛暟澶辫触,璇风◢鍚庨噸璇�:" + code);
+                int errorCode = hCNetSDK.NET_DVR_GetLastError();
+                log.error("璁剧疆楂樼簿搴TZ鍙傛暟澶辫触,璇风◢鍚庨噸璇�:" + errorCode);
+                return AjaxResult.error("errorCode:" + errorCode + "errorInfo:" + SdkErrorCodeEnum.getDescByCode(errorCode));
             }
-            return bool;
+            return AjaxResult.success();
 
-        }catch (Exception ex)
-        {
-            log.error("璁剧疆楂樼簿搴TZ鍙傛暟寮傚父",ex);
-            return false;
+        } catch (Exception ex) {
+            log.error("璁剧疆楂樼簿搴TZ鍙傛暟寮傚父", ex);
+            return AjaxResult.error("璁剧疆楂樼簿搴TZ鍙傛暟寮傚父:" + ex);
         }
     }
 
     @Override
+    @SdkOperate
     public boolean guideTargetPosition(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
-        Integer channelNum = cmd.getChanNo();
+        Integer chanNo = cmd.getChanNo();
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
@@ -1051,7 +1114,7 @@
             m_ptzPosCurrent.wZoomPos = (short) (Integer.parseInt(z, 16));
             Pointer point = m_ptzPosCurrent.getPointer();
             m_ptzPosCurrent.write();
-            boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, channelNum, point, m_ptzPosCurrent.size());
+            boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, chanNo, point, m_ptzPosCurrent.size());
             if (!bool) {
                 int code = hCNetSDK.NET_DVR_GetLastError();
                 log.error("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code);
@@ -1103,6 +1166,7 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�奸渶瑕佸姞涓�360寰楀埌鐨勬鍊艰繘琛岃缃�
      */
     @Override
+    @SdkOperate
     public boolean setZeroPtz(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         Integer channelNum = cmd.getChanNo();

--
Gitblit v1.9.3