From 2d7896ecd6bcafb4c0457a83ee254ff2006481ce Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期四, 14 十二月 2023 09:40:36 +0800
Subject: [PATCH] 优化

---
 ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java |  110 ++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 92 insertions(+), 18 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 8c89a46..8bf60c2 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
@@ -2,8 +2,10 @@
 
 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.utils.file.FileUtils;
 import com.ruoyi.common.utils.file.MimeTypeUtils;
+import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.device.camera.service.IArdCamerasService;
 import com.ruoyi.device.camera.factory.CameraSDK;
@@ -52,7 +54,10 @@
     private IArdChannelService ardChannelService;
     @Resource
     private IVtduService vtduService;
+    @Resource
+    private QueueHandler queueHandler;
 
+    public Object _lock=new Object();
     public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK;
     private static HCNetSDK.FExceptionCallBack fExceptionCallBack;//寮傚父鍥炶皟
 
@@ -176,7 +181,6 @@
     @Async("loginExecutor")
     public void asyncLogin(ArdCameras camera) {
         try {
-            Thread.sleep(100);
             // 鍒濆鍖�
             if (!hCNetSDK.NET_DVR_Init()) {
                 log.error("SDK鍒濆鍖栧け璐�");
@@ -226,17 +230,18 @@
             }
 
             log.debug("Login Success 銆� " + camera.getIp() + ":" + camera.getPort() + " 銆�");
-            if (fExceptionCallBack == null) {
-                fExceptionCallBack = new ExceptionCallBack();//寮傚父鍥炶皟
-                //璁剧疆寮傚父鍥炶皟鍑芥暟(鍙湪鍥炶皟鍑芥暟涓幏鍙栬澶囦笂涓嬬嚎鐘舵�佺瓑)
-                if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) {
-                    log.debug("Set fExceptionCallBack function fail");
-                    return;
-                } else {
-                    log.debug("Set fExceptionCallBack function successfully!");
+            synchronized (_lock) {
+                if (fExceptionCallBack == null) {
+                    fExceptionCallBack = new ExceptionCallBack();//寮傚父鍥炶皟
+                    //璁剧疆寮傚父鍥炶皟鍑芥暟(鍙湪鍥炶皟鍑芥暟涓幏鍙栬澶囦笂涓嬬嚎鐘舵�佺瓑)
+                    if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) {
+                        log.debug("Set fExceptionCallBack function fail");
+                        return;
+                    } else {
+                        log.debug("Set fExceptionCallBack function successfully!");
+                    }
                 }
             }
-
             if (GlobalVariable.loginMap.containsKey(camera.getId())) {
                 GlobalVariable.loginMap.remove(camera.getId());
             }
@@ -265,16 +270,26 @@
             //娣诲姞鍒版祦濯掍綋
             addVtdu(camera);
             //鍒涘缓寮曞闃熷垪
-            if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) {
-                Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
-                PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
-                GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
-            }
+            createGuideQueue(camera);
         } catch (Exception ex) {
             log.error("娉ㄥ唽璁惧寮傚父", ex);
         }
     }
 
+    //鍒涘缓寮曞闃熷垪
+    private void createGuideQueue(ArdCameras camera) {
+        if(camera.getCamAlarmGuideEnable()!=null) {
+            if (camera.getCamAlarmGuideEnable() == 1) {
+                if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) {
+                    Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
+                    PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
+                    GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
+                    //鍚姩闃熷垪澶勭悊鍣�
+                    queueHandler.process(camera.getId());
+                }
+            }
+        }
+    }
     //娣诲姞鍒版祦濯掍綋
     private void addVtdu(ArdCameras camera) {
         try {
@@ -922,8 +937,8 @@
      * @鍒涘缓鏃堕棿 2023/1/17 16:36
      * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�奸渶瑕佸姞涓�360寰楀埌鐨勬鍊艰繘琛岃缃�
      */
-    @Override
-    public boolean setPtz(CameraCmd cmd) {
+
+    public boolean setPtz1(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         Integer channelNum = cmd.getChanNo();
         Map<String, Double> ptz = cmd.getPtzMap();
@@ -945,7 +960,7 @@
             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);
+                log.error("璁剧疆PTZ鍙傛暟澶辫触,璇风◢鍚庨噸璇�:" + code);
             }
             return bool;
         } catch (Exception ex) {
@@ -954,6 +969,65 @@
         }
     }
 
+    /**
+     * @鎻忚堪 璁剧疆楂樼簿搴tz淇℃伅
+     * @鍙傛暟 [userId, channelNum]
+     * @杩斿洖鍊� boolean
+     * @鍒涘缓浜� 鍒樿嫃涔�
+     * @鍒涘缓鏃堕棿 2023/1/17 16:36
+     * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�煎悜涓嬭礋鍊�
+     */
+    @Override
+    public boolean 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;
+            }
+            Integer lUserID = (Integer) GlobalVariable.loginMap.get(cameraId);
+            IntByReference pchannel = new IntByReference(chanNo);
+            Pointer pChannelNum = pchannel.getPointer();
+
+            HCNetSDK.NET_DVR_STD_CONFIG lpConfigParam6697 = new HCNetSDK.NET_DVR_STD_CONFIG();
+            HCNetSDK.NET_DVR_PTZABSOLUTEEX_CFG lpPTZAbsoluteEX_cfgInfo = new HCNetSDK.NET_DVR_PTZABSOLUTEEX_CFG();
+            lpConfigParam6697.lpCondBuffer = pChannelNum;
+            lpConfigParam6697.dwCondSize = 4;
+            HCNetSDK.BYTE_ARRAY m_szStatusBuf = new HCNetSDK.BYTE_ARRAY(4096 * 4);
+            lpConfigParam6697.lpStatusBuffer = m_szStatusBuf.getPointer();
+            lpConfigParam6697.dwStatusSize = 4096 * 4;
+            lpPTZAbsoluteEX_cfgInfo.dwSize = lpPTZAbsoluteEX_cfgInfo.size();
+            lpPTZAbsoluteEX_cfgInfo.struPTZCtrl.fPan = new Double(ptz.get("p")).floatValue();
+            float t = new Double(ptz.get("t")).floatValue();
+            float t1 = t > 300 ? (t - 360) : t;
+            BigDecimal bigDecimal = new BigDecimal(t1);
+            float t2 = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
+            lpPTZAbsoluteEX_cfgInfo.struPTZCtrl.fTilt = t2;
+            lpPTZAbsoluteEX_cfgInfo.struPTZCtrl.fZoom = new Double(ptz.get("z")).floatValue();
+            lpPTZAbsoluteEX_cfgInfo.struPTZCtrl.dwFocus = 399;
+            lpPTZAbsoluteEX_cfgInfo.dwFocalLen = 1250;
+            lpPTZAbsoluteEX_cfgInfo.fHorizontalSpeed = (float) 10;
+            lpPTZAbsoluteEX_cfgInfo.fVerticalSpeed = (float) 10;
+            lpPTZAbsoluteEX_cfgInfo.byZoomType = 0;
+            lpPTZAbsoluteEX_cfgInfo.write();
+            lpConfigParam6697.lpInBuffer = lpPTZAbsoluteEX_cfgInfo.getPointer();
+            lpConfigParam6697.dwInSize = lpPTZAbsoluteEX_cfgInfo.dwSize;
+            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);
+            }
+            return bool;
+
+        }catch (Exception ex)
+        {
+            log.error("璁剧疆楂樼簿搴TZ鍙傛暟寮傚父",ex);
+            return false;
+        }
+    }
+
     @Override
     public boolean guideTargetPosition(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();

--
Gitblit v1.9.3