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

---
 ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java |  197 +++++++++++++++++++++---------------------------
 1 files changed, 86 insertions(+), 111 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java
index 2a20d7e..8da654f 100644
--- a/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java
@@ -1,6 +1,7 @@
 package com.ruoyi.device.dhsdk.service.impl;
 
 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;
@@ -18,6 +19,7 @@
 import com.ruoyi.device.dhsdk.module.*;
 import com.ruoyi.device.dhsdk.service.IDhClientService;
 import com.ruoyi.device.hiksdk.common.GlobalVariable;
+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;
@@ -25,7 +27,6 @@
 import com.sun.jna.Pointer;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -58,42 +59,13 @@
     private IVtduService vtduService;
     @Value("${minio.endpoint}")
     private String minioEndPoint;
+    private final Object lock = new Object();
 
     // 璁惧鏂嚎閫氱煡鍥炶皟
     private static DisConnect disConnect = new DisConnect();
     // 缃戠粶杩炴帴鎭㈠
     private static HaveReConnect haveReConnect = new HaveReConnect();
 
-    /**
-     * 鐧诲綍鎵�鏈夌浉鏈�
-     * 鍒樿嫃涔�
-     * 2023/10/17 8:28:13
-     */
-    @Override
-    public void loginAll() {
-        try {
-            ArdCameras ardCamera = new ArdCameras();
-            ardCamera.setFactory("2");//鑾峰彇澶у崕鐩告満
-            List<ArdCameras> ardCameras = ardCamerasService.selectArdCamerasListNoDataScope(ardCamera);
-            for (ArdCameras camera : ardCameras) {
-                Thread.sleep(500);
-                //寮傛鐧诲綍
-                login(camera);
-            }
-        } catch (Exception ex) {
-            log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage());
-        }
-    }
-
-    /**
-     * sdk鍒濆鍖�
-     * 鍒樿嫃涔�
-     * 2023/10/17 8:28:13
-     */
-    @Override
-    public Boolean init() {
-        return LoginModule.init(disConnect, haveReConnect);   // 鎵撳紑宸ョ▼锛屽垵濮嬪寲
-    }
 
     /**
      * 鐧诲綍
@@ -101,24 +73,32 @@
      * 2023/10/17 8:28:13
      */
     @Override
-    @Async
     public Boolean login(ArdCameras camera) {
-        LLong loginId = LoginModule.login(camera.getIp(), camera.getPort(), camera.getUsername(), camera.getPassword());
-        if (loginId.longValue() > 0) {
-            //log.debug(camera.getIp() + ":" + camera.getPort() + "鐧诲綍鎴愬姛");
+        LoginModule.init(disConnect, haveReConnect);
+        NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
+        LLong loginId = LoginModule.login(camera.getIp(), camera.getPort(), camera.getUsername(), camera.getPassword(), m_stDeviceInfo);
+        if (loginId.longValue() <= 0) {
+            camera.setChanNum(0);
+            camera.setLoginId(-1);
+            camera.setState("0");
+            ardCamerasService.updateArdCameras(camera);
+            return false;
+        }
+        synchronized (lock) {
             if (GlobalVariable.loginMap.containsKey(camera.getId())) {
                 GlobalVariable.loginMap.remove(camera.getId());
             }
             //鍒犻櫎绠$悊閫氶亾
             ardChannelService.deleteArdChannelByDeviceId(camera.getId());
             camera.setState("1");
-            camera.setChanNum(LoginModule.m_stDeviceInfo.byChanNum);
+            camera.setChanNum(m_stDeviceInfo.byChanNum);
             camera.setStartDChan(1);
             camera.setLoginId((int) loginId.longValue());
             ardCamerasService.updateArdCameras(camera);
             GlobalVariable.loginMap.put(camera.getId(), loginId);
+
             //鑾峰彇鏈�鏂伴�氶亾
-            for (int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) {
+            for (int i = 1; i < m_stDeviceInfo.byChanNum + 1; i++) {
                 ArdChannel channel = new ArdChannel();
                 AV_CFG_ChannelName av_cfg_channelName = new AV_CFG_ChannelName();
                 boolean b = ConfigModule.GetNewDevConfig(loginId, i - 1, CFG_CMD_CHANNELTITLE, av_cfg_channelName);
@@ -136,17 +116,17 @@
                 channel.setDeviceId(camera.getId());
                 channel.setChanNo(i);
                 ardChannelService.insertArdChannel(channel);
-
-                //閰嶇疆鍒版祦濯掍綋
-                String name = camera.getId() + "_" + channel.getChanNo();
-                String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/cam/realmonitor?channel=" + channel.getChanNo() + "&subtype=0";
+            }
+            //閰嶇疆鍒版祦濯掍綋
+            for (int i = 1; i < m_stDeviceInfo.byChanNum + 1; i++) {
+                String name = camera.getId() + "_" + i;
+                String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/cam/realmonitor?channel=" + i + "&subtype=0";
                 Vtdu vtdu = vtduService.selectVtduByName(name);
                 if (vtdu != null) {
                     vtduService.deleteVtduByName(name);
                 }
-
                 //娣诲姞鍒版祦濯掍綋
-                CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo());
+                CameraCmd cmd = new CameraCmd(camera.getId(), i);
                 Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd);
                 vtdu = new Vtdu();
                 if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) {
@@ -155,20 +135,12 @@
                     vtdu.setIsCode("1");//榛樿杞爜
                 }
                 vtdu.setRtspSource(rtspSource);
-                vtdu.setName(camera.getId() + "_" + channel.getChanNo());
+                vtdu.setName(camera.getId() + "_" + i);
                 vtdu.setMode("1");//榛樿CPU杞В鐮�
                 vtdu.setCameraId(camera.getId());
                 vtduService.insertVtdu(vtdu);
             }
-        } else {
-            //log.debug(camera.getIp() + ":" + camera.getPort() + "鐧诲綍澶辫触");
-            camera.setChanNum(0);
-            camera.setLoginId(-1);
-            camera.setState("0");
-            ardCamerasService.updateArdCameras(camera);
-            return false;
         }
-
         return true;
     }
 
@@ -217,6 +189,7 @@
      * 2023/10/17 8:28:13
      */
     @Override
+    @SdkOperate
     public boolean pTZControl(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         boolean enable = cmd.isEnable();
@@ -368,7 +341,6 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�奸渶瑕佸姞涓�360寰楀埌鐨勬鍊艰繘琛岃缃�
      */
     @Override
-    @SdkOperate
     public boolean setZeroPtz(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         Integer chanNo = cmd.getChanNo();
@@ -392,7 +364,6 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     @Override
-    @SdkOperate
     public String picCutCate(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         Integer chanNo = cmd.getChanNo();
@@ -823,62 +794,66 @@
     @Override
     public Map<String, Object> getVideoCompressionCfg(CameraCmd cmd) {
         Map<String, Object> map = new HashMap<>();
-        String cameraId = cmd.getCameraId();
-        Integer chanNo = cmd.getChanNo();
-        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
-            return null;
-        }
-        LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
-        CFG_ENCODE_INFO cfg_encode_info = new CFG_ENCODE_INFO();
-        cfg_encode_info.nChannelID = chanNo - 1;
-        boolean b = ConfigModule.GetNewDevConfig(loginId, chanNo - 1, CFG_CMD_ENCODE, cfg_encode_info);
-        if (b) {
-            int emCompression = cfg_encode_info.stuMainStream[0].stuVideoFormat.emCompression;//瑙嗛鏍煎紡
-            String videoEncType = "";
-            switch (emCompression) {
-                case 0:
-                    videoEncType = "MPEG4";
-                    break;
-                case 1:
-                    videoEncType = "MS-MPEG4";
-                    break;
-                case 2:
-                    videoEncType = "MPEG2";
-                    break;
-                case 3:
-                    videoEncType = "MPEG1";
-                    break;
-                case 4:
-                    videoEncType = "H.263";
-                    break;
-                case 5:
-                    videoEncType = "MJPG";
-                    break;
-                case 6:
-                    videoEncType = "FCC-MPEG4";
-                    break;
-                case 7:
-                    videoEncType = "鏍囧噯h264";
-                    break;
-                case 8:
-                    videoEncType = "鏍囧噯h265";
-                    break;
-                case 9:
-                    videoEncType = "SVAC";
-                    break;
-                default:
-                    videoEncType = "鏈煡";
-                    break;
+        try {
+            String cameraId = cmd.getCameraId();
+            Integer chanNo = cmd.getChanNo();
+            if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+                return null;
             }
-            int nBitRate = cfg_encode_info.stuMainStream[0].stuVideoFormat.nBitRate;
-            int nWidth = cfg_encode_info.stuMainStream[0].stuVideoFormat.nWidth;
-            int nHeight = cfg_encode_info.stuMainStream[0].stuVideoFormat.nHeight;
-            String resolution = nWidth + "*" + nHeight;
-            float nFrameRate = cfg_encode_info.stuMainStream[0].stuVideoFormat.nFrameRate;
-            map.put("resolution", resolution);//鍒嗚鲸鐜�
-            map.put("videoBitrate", String.valueOf(nBitRate));//姣旂壒鐜�
-            map.put("videoEncType", videoEncType);//缂栫爜
-            map.put("nFrameRate", String.valueOf(nFrameRate));//甯х巼
+            LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
+            CFG_ENCODE_INFO cfg_encode_info = new CFG_ENCODE_INFO();
+            cfg_encode_info.nChannelID = chanNo - 1;
+            boolean b = ConfigModule.GetNewDevConfig(loginId, chanNo - 1, CFG_CMD_ENCODE, cfg_encode_info);
+            if (b) {
+                int emCompression = cfg_encode_info.stuMainStream[0].stuVideoFormat.emCompression;//瑙嗛鏍煎紡
+                String videoEncType = "";
+                switch (emCompression) {
+                    case 0:
+                        videoEncType = "MPEG4";
+                        break;
+                    case 1:
+                        videoEncType = "MS-MPEG4";
+                        break;
+                    case 2:
+                        videoEncType = "MPEG2";
+                        break;
+                    case 3:
+                        videoEncType = "MPEG1";
+                        break;
+                    case 4:
+                        videoEncType = "H.263";
+                        break;
+                    case 5:
+                        videoEncType = "MJPG";
+                        break;
+                    case 6:
+                        videoEncType = "FCC-MPEG4";
+                        break;
+                    case 7:
+                        videoEncType = "鏍囧噯h264";
+                        break;
+                    case 8:
+                        videoEncType = "鏍囧噯h265";
+                        break;
+                    case 9:
+                        videoEncType = "SVAC";
+                        break;
+                    default:
+                        videoEncType = "鏈煡";
+                        break;
+                }
+                int nBitRate = cfg_encode_info.stuMainStream[0].stuVideoFormat.nBitRate;
+                int nWidth = cfg_encode_info.stuMainStream[0].stuVideoFormat.nWidth;
+                int nHeight = cfg_encode_info.stuMainStream[0].stuVideoFormat.nHeight;
+                String resolution = nWidth + "*" + nHeight;
+                float nFrameRate = cfg_encode_info.stuMainStream[0].stuVideoFormat.nFrameRate;
+                map.put("resolution", resolution);//鍒嗚鲸鐜�
+                map.put("videoBitrate", String.valueOf(nBitRate));//姣旂壒鐜�
+                map.put("videoEncType", videoEncType);//缂栫爜
+                map.put("nFrameRate", String.valueOf(nFrameRate));//甯х巼
+            }
+        } catch (Exception ex) {
+            log.error("鍙栫爜娴佸帇缂╁弬鏁板紓甯�:" + ex.getMessage());
         }
         return map;
     }
@@ -912,7 +887,7 @@
     // 璁惧鏂嚎鍥炶皟: 褰撹澶囧嚭鐜版柇绾挎椂锛孲DK浼氳皟鐢ㄨ鍑芥暟
     private static class DisConnect implements NetSDKLib.fDisConnect {
         public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
-            System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
+            log.warn("Device[" + pchDVRIP + "] Port[" + nDVRPort + "] DisConnect!");
         }
     }
 
@@ -920,7 +895,7 @@
     private static class HaveReConnect implements NetSDKLib.fHaveReConnect {
         @Override
         public void invoke(LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
-            System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
+            log.warn("ReConnect Device[" + pchDVRIP + "] Port[" + nDVRPort + "]");
         }
     }
 

--
Gitblit v1.9.3