From 8a8a13eb80498e9b905b47b8dc4d52cd8fdb8497 Mon Sep 17 00:00:00 2001
From: aijinhui <aijinhui>
Date: 星期二, 24 十月 2023 16:36:03 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java |  180 ++++++++++++++++++++++++++----------------------------------
 1 files changed, 78 insertions(+), 102 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
index 9ebe065..97191e6 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -3,6 +3,7 @@
 import com.ruoyi.alarm.global.domain.GuidePriorityQueue;
 import com.ruoyi.alarm.global.domain.GuideTask;
 import com.ruoyi.common.annotation.SdkOperate;
+import com.ruoyi.common.utils.Threads;
 import com.ruoyi.common.utils.file.FileUtils;
 import com.ruoyi.common.utils.file.MimeTypeUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
@@ -10,11 +11,10 @@
 import com.ruoyi.device.camera.service.IArdCamerasService;
 import com.ruoyi.device.channel.domain.ArdChannel;
 import com.ruoyi.device.channel.service.IArdChannelService;
-import com.ruoyi.device.dhsdk.lib.LibraryLoad;
-import com.ruoyi.device.dhsdk.lib.NetSDKLib;
 import com.ruoyi.device.hiksdk.common.GlobalVariable;
 import com.ruoyi.device.camera.domain.ArdCameras;
 import com.ruoyi.device.hiksdk.sdk.ExceptionCallBack;
+import com.ruoyi.device.camera.service.impl.AsyncLogin;
 import com.ruoyi.media.domain.Vtdu;
 import com.ruoyi.media.service.IVtduService;
 import com.ruoyi.utils.gis.GisUtil;
@@ -22,13 +22,11 @@
 import com.ruoyi.device.hiksdk.service.IHikClientService;
 import com.ruoyi.device.hiksdk.sdk.LoginResultCallBack;
 import com.ruoyi.utils.minio.MinioUtil;
-import com.sun.jna.Native;
 import com.sun.jna.NativeLong;
 import com.sun.jna.Platform;
 import com.sun.jna.Pointer;
 import com.sun.jna.ptr.IntByReference;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.util.Base64;
@@ -40,7 +38,6 @@
 import java.util.*;
 import java.util.concurrent.PriorityBlockingQueue;
 
-import static com.ruoyi.device.hiksdk.common.GlobalVariable.loginCameraMap;
 import static com.ruoyi.device.hiksdk.sdk.HCNetSDK.*;
 
 /**
@@ -60,7 +57,7 @@
     private IArdChannelService ardChannelService;
     @Resource
     private IVtduService vtduService;
-
+    private final Object lock = new Object();
     public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK;
     private static FExceptionCallBack fExceptionCallBack;//寮傚父鍥炶皟
 
@@ -114,75 +111,79 @@
             //鍚屾鐧诲綍
             int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
             if (lUserID < 0) {
-                int errorCode = hCNetSDK.NET_DVR_GetLastError();
-                log.debug(camera.getIp() + ":" + camera.getPort() + "鐧诲綍澶辫触,閿欒鐮侊細" + errorCode);
+                log.debug("Login Failed [ " + camera.getIp() + ":" + camera.getPort() + " ],閿欒鐮侊細" + hCNetSDK.NET_DVR_GetLastError());
                 camera.setChanNum(0);
                 camera.setLoginId(-1);
                 camera.setState("0");
-            } else {
-                if (fExceptionCallBack == null) {
-                    fExceptionCallBack = new ExceptionCallBack();//寮傚父鍥炶皟
-                    //璁剧疆寮傚父鍥炶皟鍑芥暟(鍙湪鍥炶皟鍑芥暟涓幏鍙栬澶囦笂涓嬬嚎鐘舵�佺瓑)
-                    if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) {
-                        log.info("Set fExceptionCallBack function fail");
-                        return;
-                    } else {
-                        log.info("Set fExceptionCallBack function successfully!");
-                    }
-                }
+                return;
+            }
 
-                if (GlobalVariable.loginMap.containsKey(camera.getId())) {
-                    GlobalVariable.loginMap.remove(camera.getId());
+            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!");
                 }
-                //鍒犻櫎绠$悊閫氶亾
-                ardChannelService.deleteArdChannelByDeviceId(camera.getId());
-                GlobalVariable.loginMap.put(camera.getId(), lUserID);
-                GlobalVariable.loginCameraMap.put(lUserID, camera);
+            }
 
-                log.debug("Login Success [ " + camera.getIp() + ":" + camera.getPort() + " ]");
-                camera.setLoginId(lUserID);
-                camera.setState("1");
-                camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum);
-                camera.setStartDChan((int) m_strDeviceInfo.struDeviceV30.byStartDChan);
-                //鑾峰彇鏈�鏂伴�氶亾
-                List<ArdChannel> cameraChannelList = getCameraChannelList(camera);
-                if (cameraChannelList.size() > 0) {
-                    for (ArdChannel channel : cameraChannelList) {
-                        channel.setId(IdUtils.simpleUUID());
-                        ardChannelService.insertArdChannel(channel);
+            if (GlobalVariable.loginMap.containsKey(camera.getId())) {
+                GlobalVariable.loginMap.remove(camera.getId());
+            }
+
+            //鍒犻櫎绠$悊閫氶亾
+            ardChannelService.deleteArdChannelByDeviceId(camera.getId());
+            GlobalVariable.loginMap.put(camera.getId(), lUserID);
+            GlobalVariable.loginCameraMap.put(lUserID, camera);
+
+            camera.setLoginId(lUserID);
+            camera.setState("1");
+            camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum);
+            camera.setStartDChan((int) m_strDeviceInfo.struDeviceV30.byStartDChan);
+
+            //鑾峰彇鏈�鏂伴�氶亾
+            List<ArdChannel> cameraChannelList = getCameraChannelList(camera);
+            if (cameraChannelList.size() > 0) {
+                for (ArdChannel channel : cameraChannelList) {
+                    channel.setId(IdUtils.simpleUUID());
+                    ardChannelService.insertArdChannel(channel);
+                }
+                //娣诲姞鍒版祦濯掍綋
+                for (ArdChannel channel : cameraChannelList) {
+                    String name = camera.getId() + "_" + channel.getChanNo();
+                    String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream";
+                    Vtdu vtdu = vtduService.selectVtduByName(name);
+                    if (vtdu != null) {
+                        vtduService.deleteVtduByName(name);
                     }
                     //娣诲姞鍒版祦濯掍綋
-                    for (ArdChannel channel : cameraChannelList) {
-                        String name = camera.getId() + "_" + channel.getChanNo();
-                        String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream";
-                        Vtdu vtdu = vtduService.selectVtduByName(name);
-                        if (vtdu != null) {
-                            vtduService.deleteVtduByName(name);
-                        }
-                        //娣诲姞鍒版祦濯掍綋
-                        vtdu = new Vtdu();
-                        vtdu.setRtspSource(rtspSource);
-                        vtdu.setName(camera.getId() + "_" + channel.getChanNo());
-                        CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo());
-                        Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd);
-                        if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) {
-                            vtdu.setIsCode("0");//榛樿涓嶈浆鐮�
-                        } else {
-                            vtdu.setIsCode("1");//榛樿杞爜
-                        }
-                        vtdu.setMode("1");//榛樿CPU杞В鐮�
-                        vtdu.setCameraId(camera.getId());
-                        vtduService.insertVtdu(vtdu);
+                    vtdu = new Vtdu();
+                    vtdu.setRtspSource(rtspSource);
+                    vtdu.setName(camera.getId() + "_" + channel.getChanNo());
+                    CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo());
+                    Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd);
+                    if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) {
+                        vtdu.setIsCode("0");//榛樿涓嶈浆鐮�
+                    } else {
+                        vtdu.setIsCode("1");//榛樿杞爜
                     }
+                    vtdu.setMode("1");//榛樿CPU杞В鐮�
+                    vtdu.setCameraId(camera.getId());
+                    vtduService.insertVtdu(vtdu);
                 }
-                //鍒涘缓寮曞闃熷垪
-                if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) {
-                    Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
-                    PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
-                    GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
-                }
-                ardCamerasService.updateArdCameras(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);
+            }
+            ardCamerasService.updateArdCameras(camera);
+
+
         } catch (Exception ex) {
             log.error("娉ㄥ唽璁惧寮傚父", ex);
         }
@@ -243,28 +244,6 @@
 
     }
 
-    /**
-     * @鎻忚堪 鐧诲綍鎵�鏈夌浉鏈�
-     * @鍙傛暟 []
-     * @杩斿洖鍊� void
-     * @鍒涘缓浜� 鍒樿嫃涔�
-     * @鍒涘缓鏃堕棿 2023/2/3 10:10
-     * @淇敼浜哄拰鍏跺畠淇℃伅
-     */
-    @Override
-    public void loginAll() {
-        try {
-            ArdCameras ardCamera = new ArdCameras();
-            ardCamera.setFactory("1");
-            List<ArdCameras> ardCameras = ardCamerasService.selectArdCamerasListNoDataScope(ardCamera);
-            for (ArdCameras camera : ardCameras) {
-                //鐧诲綍
-                login(camera);
-            }
-        } catch (Exception ex) {
-            log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage());
-        }
-    }
 
     /**
      * @鎻忚堪 娉ㄩ攢鐧诲綍
@@ -318,6 +297,7 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     @Override
+    @SdkOperate
     public boolean pTZControlWithSpeed(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         boolean enable = cmd.isEnable();
@@ -523,19 +503,21 @@
      */
     @Override
     public Map<String, Object> getVideoCompressionCfg(CameraCmd cmd) {
-        String cameraId = cmd.getCameraId();
-        Integer chanNo = cmd.getChanNo();
-        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
-            return null;
-        }
-        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
 
         Map<String, Object> map = new HashMap<>();
-        NET_DVR_COMPRESSIONCFG_V30 compressioncfg = new NET_DVR_COMPRESSIONCFG_V30();
-        compressioncfg.write();
-        Pointer pioint = compressioncfg.getPointer();
-        IntByReference ibrBytesReturned = new IntByReference(0);
         try {
+            String cameraId = cmd.getCameraId();
+            Integer chanNo = cmd.getChanNo();
+            if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+                return null;
+            }
+            Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
+
+            NET_DVR_COMPRESSIONCFG_V30 compressioncfg = new NET_DVR_COMPRESSIONCFG_V30();
+            compressioncfg.write();
+            Pointer pioint = compressioncfg.getPointer();
+            IntByReference ibrBytesReturned = new IntByReference(0);
+
             boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, HCNetSDK.NET_DVR_GET_COMPRESSCFG_V30, chanNo, pioint, compressioncfg.size(), ibrBytesReturned);
             if (bool) {
                 compressioncfg.read();
@@ -1068,7 +1050,6 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     @Override
-    @SdkOperate
     public boolean controlDefogcfg(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         boolean enable = cmd.isEnable();
@@ -1114,7 +1095,6 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     @Override
-    @SdkOperate
     public boolean controlInfrarecfg(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         boolean enable = cmd.isEnable();
@@ -1162,7 +1142,6 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     @Override
-    @SdkOperate
     public boolean controlFocusMode(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         boolean enable = cmd.isEnable();
@@ -1235,7 +1214,6 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     @Override
-    @SdkOperate
     public boolean controlPTHeateRpwron(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         boolean enable = cmd.isEnable();
@@ -1268,7 +1246,6 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     @Override
-    @SdkOperate
     public boolean controlCameraDeicing(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         boolean enable = cmd.isEnable();
@@ -1349,7 +1326,6 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     @Override
-    @SdkOperate
     public String picCutCate(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         Integer channelNum = cmd.getChanNo();

--
Gitblit v1.9.3