From 6a26b1d539576a556d0f8682af7ae4317de78c7a Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期二, 02 四月 2024 13:35:35 +0800
Subject: [PATCH] 修复相机密码脱敏导致的bug

---
 ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java |   45 ++-
 ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java   |   49 ++-
 ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java      |  246 +++++++++++-----------
 ard-work/src/main/java/com/ruoyi/utils/tools/ArdTool.java                             |   23 ++
 ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java         |    7 
 ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/LoginModule.java              |   16 
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java                        |    7 
 ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDK.java                 |    4 
 ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java           |  251 +++++++++++----------
 ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml                        |    4 
 10 files changed, 355 insertions(+), 297 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java b/ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java
index 4aa2d0c..b5727f2 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java
@@ -2,6 +2,7 @@
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
+
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell;
 import com.ruoyi.common.constant.CameraConstants;
@@ -14,10 +15,12 @@
 import com.ruoyi.device.camera.service.ICameraSdkService;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.inspect.service.IArdVideoInspectTaskService;
+import com.ruoyi.utils.tools.ArdTool;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PutMapping;
@@ -64,6 +67,7 @@
         List<ArdCameras> list = ardCamerasService.selectArdCamerasList(ardCamera);
         return getDataTable(list);
     }
+
     /**
      * 鏌ヨ鐩告満璁惧鍒楄〃锛堜笉鏍¢獙鏉冮檺锛�
      */
@@ -74,6 +78,7 @@
         List<ArdCameras> list = ardCamerasService.selectArdCamerasList(ardCamera);
         return getDataTable(list);
     }
+
     /**
      * 瀵煎嚭鐩告満璁惧鍒楄〃
      */
@@ -105,16 +110,17 @@
     @Log(title = "鐩告満璁惧", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody ArdCameras camera) {
-        if (CameraConstants.NOT_UNIQUE.equals(ardCamerasService.checkCameraIpAndPortUnique(camera)))
-        {
-            return error("鏂板鐩告満'" + camera.getIp()+":"+camera.getPort() + "'澶辫触锛岀浉鏈哄凡瀛樺湪");
+        if (CameraConstants.NOT_UNIQUE.equals(ardCamerasService.checkCameraIpAndPortUnique(camera))) {
+            return error("鏂板鐩告満'" + camera.getIp() + ":" + camera.getPort() + "'澶辫触锛岀浉鏈哄凡瀛樺湪");
         }
+        camera.setState("0");
         int i = ardCamerasService.insertArdCameras(camera);
         if (i > 0) {
-            cameraSdkService.logout(camera.getId());
-            cameraSdkService.login(camera);
+            AjaxResult result = cameraSdkService.login(camera);
+            return success(result.get("msg"));
+        } else {
+            return error("鏂板鐩告満璁惧澶辫触");
         }
-        return toAjax(i);
     }
 
     /**
@@ -125,18 +131,20 @@
     @Log(title = "鐩告満璁惧", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody ArdCameras camera) {
-        if (CameraConstants.NOT_UNIQUE.equals(ardCamerasService.checkCameraIpAndPortUnique(camera)))
-        {
-            return error("淇敼鐩告満'" + camera.getIp()+":"+camera.getPort() + "'澶辫触锛岀浉鏈哄凡瀛樺湪");
+        if (CameraConstants.NOT_UNIQUE.equals(ardCamerasService.checkCameraIpAndPortUnique(camera))) {
+            return error("淇敼鐩告満'" + camera.getIp() + ":" + camera.getPort() + "'澶辫触锛岀浉鏈哄凡瀛樺湪");
         }
+        ArdCameras cameraOld = ardCamerasService.selectArdCamerasById(camera.getId());
+        ArdTool.fillNullFields(cameraOld, camera);
+
+        camera.setState("0");
         int i = ardCamerasService.updateArdCameras(camera);
         if (i > 0) {
-            if(StringUtils.isNotNull(camera.getPassword())) {
-                cameraSdkService.logout(camera.getId());
-                cameraSdkService.login(camera);
-            }
+            AjaxResult result = cameraSdkService.login(camera);
+            return success(result.get("msg"));
+        } else {
+            return error("淇敼鐩告満璁惧澶辫触");
         }
-        return toAjax(i);
     }
 
     /**
@@ -173,7 +181,6 @@
     }
 
 
-
     @GetMapping("/options")
     @ApiOperation("閫夋嫨鐩告満鏁版嵁")
     public List options(ArdCameras ardCameras) {
@@ -198,12 +205,14 @@
         Map deptAndCamera = ardCamerasService.getChildDeptAndCamera(true);
         return AjaxResult.success(deptAndCamera);
     }
+
     @GetMapping("/getDeptAndCameraByRole")
     @ApiOperation("鑾峰彇閮ㄩ棬鍜岀浉鏈烘寜瑙掕壊")
     public AjaxResult getDeptAndCameraByRole() {
         List<DeptAndCamerasDto> deptAndCamera = ardCamerasService.getChildDeptAndCamera();
         return AjaxResult.success(deptAndCamera);
     }
+
     @GetMapping("/getDeptAndCameraWithCheckBox")
     @ApiOperation("鑾峰彇閮ㄩ棬鍜岀浉鏈�(寮�鍚閫夋)")
     public AjaxResult getDeptAndCameraWithCheckBox() {
@@ -224,22 +233,22 @@
     public AjaxResult getCamerasByDeptId() {
         Long deptId = SecurityUtils.getDeptId();
         String userId = SecurityUtils.getUserId();
-        List<Map<String,Object>> camerasList = ardCamerasService.getCamerasByDeptId(deptId,userId);
+        List<Map<String, Object>> camerasList = ardCamerasService.getCamerasByDeptId(deptId, userId);
         return AjaxResult.success(camerasList);
     }
 
     @PostMapping("/getCameraOperationByCameraId")
     @ApiOperation("鏌ョ湅鐩告満鍙惁鎿嶆帶")
-    public AjaxResult getCameraOperationByCameraId(@RequestBody Map<String,String> map) {
+    public AjaxResult getCameraOperationByCameraId(@RequestBody Map<String, String> map) {
         String userId = SecurityUtils.getUserId();
-        Boolean flag = ardCamerasService.getCameraOperationByCameraId(map.get("id"),userId);
+        Boolean flag = ardCamerasService.getCameraOperationByCameraId(map.get("id"), userId);
         return AjaxResult.success(flag);
     }
 
     @PostMapping("/getChannelByCameraId")
     @ApiOperation("鑾峰彇鐩告満閫氶亾")
-    public AjaxResult getChannelByCameraId(@RequestBody Map<String,String> map) {
-        Map<String,Object> result = ardCamerasService.getChannelByCameraId(map.get("id"));
+    public AjaxResult getChannelByCameraId(@RequestBody Map<String, String> map) {
+        Map<String, Object> result = ardCamerasService.getChannelByCameraId(map.get("id"));
         return AjaxResult.success(result);
     }
 }
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDK.java b/ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDK.java
index be01720..a978e5a 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDK.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDK.java
@@ -15,10 +15,10 @@
 public interface CameraSDK {
 
     //鍚屾鐧诲綍
-    boolean login(ArdCameras cameras);
+    AjaxResult login(ArdCameras cameras);
 
     //寮傛鐧诲綍
-    void asyncLogin(ArdCameras cameras);
+    AjaxResult asyncLogin(ArdCameras cameras);
 
     //娉ㄩ攢
     boolean logout(String cameraId);
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java
index a5a2662..8909eec 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java
@@ -9,8 +9,11 @@
 
 public interface ICameraSdkService {
 
-    //鐧诲綍
-    Boolean login(ArdCameras ardCamera);
+    //鍚屾鐧诲綍
+    AjaxResult login(ArdCameras ardCamera);
+
+    //寮傛鐧诲綍
+    AjaxResult asyncLogin(ArdCameras ardCamera);
 
     //娉ㄩ攢
     boolean logout(String cameraId);
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java
index 8f1a9b0..de2805a 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java
@@ -59,12 +59,11 @@
      */
     @Override
     public void run(ApplicationArguments args) {
-
         try {
             // 浠巃rdCamerasService涓幏鍙朅rdCameras鍒楄〃
             List<ArdCameras> ardCameras = ardCamerasService.selectArdCamerasListNoDataScope(new ArdCameras());
             for (ArdCameras camera : ardCameras) {
-                login(camera);
+                asyncLogin(camera);
             }
         } catch (Exception ex) {
             // 鍒濆鍖栫櫥褰曠浉鏈哄紓甯革紝璁板綍閿欒鏃ュ織
@@ -73,23 +72,35 @@
     }
 
 
-    //鐧诲綍
+    //鍚屾鐧诲綍
     @Override
-    public Boolean login(ArdCameras ardCamera) {
-        boolean result = false;
+    public AjaxResult login(ArdCameras ardCamera) {
         try {
-            if (ardCamera != null) {
-                String factory = ardCamera.getFactory();
-                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
-                //sdkStrategy.login(ardCamera);//鍚屾鐧诲綍
-                cameraSDK.asyncLogin(ardCamera);//寮傛鐧诲綍
-                result = true;
+            if (ardCamera == null) {
+                return AjaxResult.error("鐧诲綍鐩告満澶辫触锛岀浉鏈轰笉瀛樺湪");
             }
+            String factory = ardCamera.getFactory();
+            CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+            return cameraSDK.login(ardCamera);//鍚屾鐧诲綍
         } catch (Exception ex) {
             log.error("鐧诲綍寮傚父锛�" + ex.getMessage());
-            return false;
+            return AjaxResult.error("鐧诲綍寮傚父锛�" + ex.getMessage());
         }
-        return result;
+    }
+
+    @Override
+    public AjaxResult asyncLogin(ArdCameras ardCamera) {
+        try {
+            if (ardCamera == null) {
+                return AjaxResult.error("鐧诲綍鐩告満澶辫触锛岀浉鏈轰笉瀛樺湪");
+            }
+            String factory = ardCamera.getFactory();
+            CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+            return cameraSDK.asyncLogin(ardCamera);//寮傛鐧诲綍
+        } catch (Exception ex) {
+            log.error("鐧诲綍寮傚父锛�" + ex.getMessage());
+            return AjaxResult.error("鐧诲綍寮傚父锛�" + ex.getMessage());
+        }
     }
 
     //娉ㄩ攢
@@ -463,7 +474,7 @@
 
         } catch (Exception ex) {
             log.error("璁剧疆ptz寮傚父锛�" + ex.getMessage());
-           return AjaxResult.error("璁剧疆ptz寮傚父:" + ex.getMessage());
+            return AjaxResult.error("璁剧疆ptz寮傚父:" + ex.getMessage());
         }
     }
 
@@ -689,8 +700,7 @@
     public AjaxResult controlLock(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();//鐢宠閿佺殑鐩告満
         ArdCameras ardCameras = ardCamerasService.selectArdCamerasById(cameraId);
-        if(ardCameras==null)
-        {
+        if (ardCameras == null) {
             return AjaxResult.error("璁惧鏈櫥褰�");
         }
         Date now = new Date();
@@ -713,8 +723,7 @@
         String cameraId = cmd.getCameraId();//鐢宠瑙i攣鐨勭浉鏈�
         String operator = cmd.getOperator();//鐢宠鑰�
         ArdCameras ardCameras = ardCamerasService.selectArdCamerasById(cameraId);
-        if(ardCameras==null)
-        {
+        if (ardCameras == null) {
             return AjaxResult.error("璁惧鏈櫥褰�");
         }
         if (ardCameras.getOperatorId().equals(operator)) {
diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/LoginModule.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/LoginModule.java
index 8919e7a..ff36514 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/LoginModule.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/LoginModule.java
@@ -63,14 +63,14 @@
         netsdk.CLIENT_SetAutoReconnect(haveReConnect, null);
 
         //璁剧疆鐧诲綍瓒呮椂鏃堕棿鍜屽皾璇曟鏁帮紝鍙��
-        int waitTime = 5000; //鐧诲綍璇锋眰鍝嶅簲瓒呮椂鏃堕棿璁剧疆涓�5S
+        int waitTime = 2000; //鐧诲綍璇锋眰鍝嶅簲瓒呮椂鏃堕棿璁剧疆涓�5S
         int tryTimes = 1;    //鐧诲綍鏃跺皾璇曞缓绔嬮摼鎺�1娆�
         netsdk.CLIENT_SetConnectTime(waitTime, tryTimes);
 
         // 璁剧疆鏇村缃戠粶鍙傛暟锛孨ET_PARAM鐨刵Waittime锛宯ConnectTryNum鎴愬憳涓嶤LIENT_SetConnectTime
         // 鎺ュ彛璁剧疆鐨勭櫥褰曡澶囪秴鏃舵椂闂村拰灏濊瘯娆℃暟鎰忎箟鐩稿悓,鍙��
         NetSDKLib.NET_PARAM netParam = new NetSDKLib.NET_PARAM();
-        netParam.nConnectTime = 10000;      // 鐧诲綍鏃跺皾璇曞缓绔嬮摼鎺ョ殑瓒呮椂鏃堕棿
+        netParam.nConnectTime = 2000;      // 鐧诲綍鏃跺皾璇曞缓绔嬮摼鎺ョ殑瓒呮椂鏃堕棿
         netParam.nGetConnInfoTime = 3000;   // 璁剧疆瀛愯繛鎺ョ殑瓒呮椂鏃堕棿
         netParam.nGetDevInfoTime = 3000;//鑾峰彇璁惧淇℃伅瓒呮椂鏃堕棿锛屼负0榛樿1000ms
         netsdk.CLIENT_SetNetworkParam(netParam);
@@ -114,11 +114,11 @@
         //NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY pstOutParam = new NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY();
         LLong m_hLoginHandle = netsdk.CLIENT_LoginEx2(m_strIp, m_nPort, m_strUser, m_strPassword, 0, null, lpDeviceInfo, nError);
         //m_hLoginHandle=netsdk.CLIENT_LoginWithHighLevelSecurity(pstInParam, pstOutParam);
-        if (m_hLoginHandle.longValue() == 0) {
-            log.debug("Login Failed [" + m_strIp + ":" + m_nPort + "],閿欒鐮�:" + getErrorCodePrint());
-        } else {
-            log.debug("Login Success [ " + m_strIp + ":" + m_nPort + " ]");
-        }
+        //if (m_hLoginHandle.longValue() == 0) {
+        //    log.debug("Login Failed [" + m_strIp + ":" + m_nPort + "],閿欒鐮�:" + getErrorCodePrint());
+        //} else {
+        //    log.debug("Login Success [ " + m_strIp + ":" + m_nPort + " ]");
+        //}
         return m_hLoginHandle;
     }
 
@@ -141,4 +141,4 @@
     }
 
 
-}
\ No newline at end of file
+}
diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java
index 4ffb4d8..990676d 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java
@@ -86,145 +86,156 @@
      * @return
      */
     @Override
-
-    public boolean login(ArdCameras camera) {
-        LoginModule.init(disConnect, haveReConnect);
-        NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
-        NetSDKLib.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);
+    public AjaxResult login(ArdCameras camera) {
+        try {
+            LoginModule.init(disConnect, haveReConnect);
+            NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
+            NetSDKLib.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);
+                //鍒犻櫎绠$悊閫氶亾
+                ardChannelService.deleteArdChannelByDeviceId(camera.getId());
+                log.error("璁惧[" + camera.getIp() + ":" + camera.getPort() + "]鐧诲綍澶辫触:" + getErrorCodePrint());
+                return AjaxResult.error(ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError()));
+            }
+            if (GlobalVariable.loginMap.containsKey(camera.getId())) {
+                GlobalVariable.loginMap.remove(camera.getId());
+            }
             //鍒犻櫎绠$悊閫氶亾
             ardChannelService.deleteArdChannelByDeviceId(camera.getId());
-            return false;
-        }
-        if (GlobalVariable.loginMap.containsKey(camera.getId())) {
-            GlobalVariable.loginMap.remove(camera.getId());
-        }
-        //鍒犻櫎绠$悊閫氶亾
-        ardChannelService.deleteArdChannelByDeviceId(camera.getId());
-        camera.setState("1");
-        camera.setChanNum(m_stDeviceInfo.byChanNum);
-        camera.setStartDChan(1);
-        camera.setLoginId((int) loginId.longValue());
-        ardCamerasService.updateArdCameras(camera);
-        GlobalVariable.loginMap.put(camera.getId(), loginId);
+            camera.setState("1");
+            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 < m_stDeviceInfo.byChanNum + 1; i++) {
-            ArdChannel channel = new ArdChannel();
-            NetSDKLib.AV_CFG_ChannelName av_cfg_channelName = new NetSDKLib.AV_CFG_ChannelName();
-            boolean b = ConfigModule.GetNewDevConfig(loginId, i - 1, CFG_CMD_CHANNELTITLE, av_cfg_channelName);
-            if (b) {
-                String chanName = null;
-                try {
-                    chanName = new String(av_cfg_channelName.szName, "GBK").trim();
-                } catch (UnsupportedEncodingException e) {
-                    e.printStackTrace();
-                }
-                channel.setName(chanName);
-            } else {
-                channel.setName("閫氶亾" + i);
-            }
-            channel.setDeviceId(camera.getId());
-            channel.setChanNo(i);
-            ardChannelService.insertArdChannel(channel);
-        }
-        //閰嶇疆鍒版祦濯掍綋
-        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(), i);
-            Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd);
-            vtdu = new Vtdu();
-            if (videoCompressionCfg.get("videoEncType") != null) {
-                if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) {
-                    vtdu.setIsCode("0");//榛樿涓嶈浆鐮�
+            //鑾峰彇鏈�鏂伴�氶亾
+            for (int i = 1; i < m_stDeviceInfo.byChanNum + 1; i++) {
+                ArdChannel channel = new ArdChannel();
+                NetSDKLib.AV_CFG_ChannelName av_cfg_channelName = new NetSDKLib.AV_CFG_ChannelName();
+                boolean b = ConfigModule.GetNewDevConfig(loginId, i - 1, CFG_CMD_CHANNELTITLE, av_cfg_channelName);
+                if (b) {
+                    String chanName = null;
+                    try {
+                        chanName = new String(av_cfg_channelName.szName, "GBK").trim();
+                    } catch (UnsupportedEncodingException e) {
+                        e.printStackTrace();
+                    }
+                    channel.setName(chanName);
                 } else {
-                    vtdu.setIsCode("1");//榛樿杞爜
+                    channel.setName("閫氶亾" + i);
                 }
-            } else {
-                vtdu.setIsCode("0");//榛樿涓嶈浆鐮�
+                channel.setDeviceId(camera.getId());
+                channel.setChanNo(i);
+                ardChannelService.insertArdChannel(channel);
             }
-            vtdu.setRtspSource(rtspSource);
-            vtdu.setName(camera.getId() + "_" + i);
-            vtdu.setMode("1");//榛樿CPU杞В鐮�
-            vtdu.setCameraId(camera.getId());
-            vtduService.insertVtdu(vtdu);
-        }
+            //閰嶇疆鍒版祦濯掍綋
+            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(), i);
+                Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd);
+                vtdu = new Vtdu();
+                if (videoCompressionCfg.get("videoEncType") != null) {
+                    if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) {
+                        vtdu.setIsCode("0");//榛樿涓嶈浆鐮�
+                    } else {
+                        vtdu.setIsCode("1");//榛樿杞爜
+                    }
+                } else {
+                    vtdu.setIsCode("0");//榛樿涓嶈浆鐮�
+                }
+                vtdu.setRtspSource(rtspSource);
+                vtdu.setName(camera.getId() + "_" + i);
+                vtdu.setMode("1");//榛樿CPU杞В鐮�
+                vtdu.setCameraId(camera.getId());
+                vtduService.insertVtdu(vtdu);
+            }
 
-        //鍒涘缓寮曞闃熷垪
-        //鍒涘缓寮曞闃熷垪
-        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);
+            //鍒涘缓寮曞闃熷垪
+            if (camera.getCamAlarmGuideEnable() != null && 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());
             }
-            //鍚姩闃熷垪澶勭悊鍣�
-            queueHandler.process(camera.getId());
+            return AjaxResult.success("鐧诲綍鎴愬姛");
+        } catch (Exception ex) {
+            log.error("鐧诲綍寮傚父:" + ex.getMessage());
+            return AjaxResult.error("鐧诲綍寮傚父:" + ex.getMessage());
         }
-        return true;
     }
 
     @Override
     @Async("loginExecutor")
-    public void asyncLogin(ArdCameras camera) {
-        LoginModule.init(disConnect, haveReConnect);
-        NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
-        NetSDKLib.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);
+    public AjaxResult asyncLogin(ArdCameras camera) {
+        try {
+            LoginModule.init(disConnect, haveReConnect);
+            NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
+            NetSDKLib.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);
+                //鍒犻櫎绠$悊閫氶亾
+                ardChannelService.deleteArdChannelByDeviceId(camera.getId());
+                log.error("璁惧[" + camera.getIp() + ":" + camera.getPort() + "]鐧诲綍澶辫触:" + getErrorCodePrint());
+                return AjaxResult.error(ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError()));
+            }
+            if (GlobalVariable.loginMap.containsKey(camera.getId())) {
+                GlobalVariable.loginMap.remove(camera.getId());
+            }
             //鍒犻櫎绠$悊閫氶亾
             ardChannelService.deleteArdChannelByDeviceId(camera.getId());
-            return;
-        }
-        if (GlobalVariable.loginMap.containsKey(camera.getId())) {
-            GlobalVariable.loginMap.remove(camera.getId());
-        }
-        //鍒犻櫎绠$悊閫氶亾
-        ardChannelService.deleteArdChannelByDeviceId(camera.getId());
-        camera.setState("1");
-        camera.setChanNum(m_stDeviceInfo.byChanNum);
-        camera.setStartDChan(1);
-        camera.setLoginId((int) loginId.longValue());
-        ardCamerasService.updateArdCameras(camera);
-        GlobalVariable.loginMap.put(camera.getId(), loginId);
+            camera.setState("1");
+            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 < m_stDeviceInfo.byChanNum + 1; i++) {
-            ArdChannel channel = new ArdChannel();
-            NetSDKLib.AV_CFG_ChannelName av_cfg_channelName = new NetSDKLib.AV_CFG_ChannelName();
-            boolean b = ConfigModule.GetNewDevConfig(loginId, i - 1, CFG_CMD_CHANNELTITLE, av_cfg_channelName);
-            if (b) {
-                String chanName = null;
-                try {
-                    chanName = new String(av_cfg_channelName.szName, "GBK").trim();
-                } catch (UnsupportedEncodingException e) {
-                    e.printStackTrace();
+            //鑾峰彇鏈�鏂伴�氶亾
+            for (int i = 1; i < m_stDeviceInfo.byChanNum + 1; i++) {
+                ArdChannel channel = new ArdChannel();
+                NetSDKLib.AV_CFG_ChannelName av_cfg_channelName = new NetSDKLib.AV_CFG_ChannelName();
+                boolean b = ConfigModule.GetNewDevConfig(loginId, i - 1, CFG_CMD_CHANNELTITLE, av_cfg_channelName);
+                if (b) {
+                    String chanName = null;
+                    try {
+                        chanName = new String(av_cfg_channelName.szName, "GBK").trim();
+                    } catch (UnsupportedEncodingException e) {
+                        e.printStackTrace();
+                    }
+                    channel.setName(chanName);
+                } else {
+                    channel.setName("閫氶亾" + i);
                 }
-                channel.setName(chanName);
-            } else {
-                channel.setName("閫氶亾" + i);
+                channel.setDeviceId(camera.getId());
+                channel.setChanNo(i);
+                ardChannelService.insertArdChannel(channel);
             }
-            channel.setDeviceId(camera.getId());
-            channel.setChanNo(i);
-            ardChannelService.insertArdChannel(channel);
+            //閰嶇疆鍒版祦濯掍綋
+            addVtdu(camera);
+            //鍒涘缓寮曞闃熷垪
+            createGuideQueue(camera);
+            return AjaxResult.success("鐧诲綍鎴愬姛");
+        } catch (Exception ex) {
+            log.error("鐧诲綍寮傚父:" + ex.getMessage());
+            return AjaxResult.error("鐧诲綍寮傚父:" + ex.getMessage());
         }
-        //閰嶇疆鍒版祦濯掍綋
-        addVtdu(camera);
-        //鍒涘缓寮曞闃熷垪
-        createGuideQueue(camera);
     }
 
     //娣诲姞鍒版祦濯掍綋
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 fc24937..1193b37 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
@@ -73,116 +73,7 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     @Override
-    public boolean login(ArdCameras camera) {
-        try {
-            // 鍒濆鍖�
-            if (!hCNetSDK.NET_DVR_Init()) {
-                log.error("SDK鍒濆鍖栧け璐�");
-            }
-            //鎵撳嵃娴峰悍sdk鏃ュ織
-            if (Platform.isWindows()) {
-                String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator;
-                hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true);
-            } else {
-                hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true);
-            }
-            String m_sDeviceIP = camera.getIp();
-            String m_sUsername = camera.getUsername();
-            String m_sPassword = camera.getPassword();
-            short m_sPort = camera.getPort().shortValue();
-            //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂�
-            hCNetSDK.NET_DVR_SetConnectTime(2000, 1);
-            hCNetSDK.NET_DVR_SetReconnect(5000, true);
-            //璁惧淇℃伅, 杈撳嚭鍙傛暟
-            HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();
-            HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();
-
-            // 娉ㄥ唽璁惧-鐧诲綍鍙傛暟锛屽寘鎷澶囧湴鍧�銆佺櫥褰曠敤鎴枫�佸瘑鐮佺瓑
-            m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN];
-            System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length());
-            m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN];
-            System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length());
-            m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN];
-            System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length());
-            m_strLoginInfo.wPort = m_sPort;
-            m_strLoginInfo.byVerifyMode = 0;
-            m_strLoginInfo.byLoginMode = 0;
-            //鏄惁寮傛鐧诲綍锛�0- 鍚︼紝1- 鏄�  windowsSDK閲屾槸true鍜宖alse
-            m_strLoginInfo.bUseAsynLogin = false;
-            m_strLoginInfo.write();
-            //鍚屾鐧诲綍
-            int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
-            if (lUserID < 0) {
-                log.debug("Login Failed [ " + camera.getIp() + ":" + camera.getPort() + " ],閿欒鐮侊細" + hCNetSDK.NET_DVR_GetLastError());
-                camera.setChanNum(0);
-                camera.setLoginId(-1);
-                camera.setState("0");
-                //鍒犻櫎绠$悊閫氶亾
-                ardChannelService.deleteArdChannelByDeviceId(camera.getId());
-                ardCamerasService.updateArdCameras(camera);
-                return false;
-            }
-
-            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 false;
-                } else {
-                    log.debug("Set fExceptionCallBack function successfully!");
-                }
-            }
-
-            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 = getIPChannelInfo(camera);
-            if (cameraChannelList.size() > 0) {
-                camera.setChannelList(cameraChannelList);
-                for (ArdChannel channel : cameraChannelList) {
-                    channel.setId(IdUtils.simpleUUID());
-                    ardChannelService.insertArdChannel(channel);
-                }
-                //娣诲姞鍒版祦濯掍綋
-                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);
-            }
-            ardCamerasService.updateArdCameras(camera);
-        } catch (Exception ex) {
-            log.error("娉ㄥ唽璁惧寮傚父", ex);
-        }
-        return true;
-    }
-
-    /**
-     * @鎻忚堪 娉ㄥ唽鐧诲綍 闆嗘垚浜嶯ET_DVR_Login_V30锛屾敮鎸佸悓姝ュ拰寮傛鐧诲綍
-     * @鍙傛暟 [dvrLogin]
-     * @杩斿洖鍊� java.lang.Integer
-     * @鍒涘缓浜� 鍒樿嫃涔�
-     * @鍒涘缓鏃堕棿 2023/1/17 16:12
-     * @淇敼浜哄拰鍏跺畠淇℃伅
-     */
-    @Override
-    @Async("loginExecutor")
-    public void asyncLogin(ArdCameras camera) {
+    public AjaxResult login(ArdCameras camera) {
         try {
             // 鍒濆鍖�
             if (!hCNetSDK.NET_DVR_Init()) {
@@ -223,18 +114,126 @@
             int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
             if (lUserID < 0) {
                 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");
                 //鍒犻櫎绠$悊閫氶亾
                 ardChannelService.deleteArdChannelByDeviceId(camera.getId());
                 ardCamerasService.updateArdCameras(camera);
-                return;
+                log.error("璁惧[" + camera.getIp() + ":" + camera.getPort() + "]鐧诲綍澶辫触: errorCode:" + errorCode + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(errorCode));
+                return AjaxResult.error("鐧诲綍澶辫触: errorCode:" + errorCode + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(errorCode));
             }
 
+            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");
+                } else {
+                    log.debug("Set fExceptionCallBack function successfully!");
+                }
+            }
+
+            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 = getIPChannelInfo(camera);
+            if (cameraChannelList.size() > 0) {
+                camera.setChannelList(cameraChannelList);
+                for (ArdChannel channel : cameraChannelList) {
+                    channel.setId(IdUtils.simpleUUID());
+                    ardChannelService.insertArdChannel(channel);
+                }
+                //娣诲姞鍒版祦濯掍綋
+                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);
+            }
+            ardCamerasService.updateArdCameras(camera);
+            return AjaxResult.success("璁惧鐧诲綍鎴愬姛");
+        } catch (Exception ex) {
+            log.error("娉ㄥ唽璁惧寮傚父", ex);
+            return AjaxResult.error("娉ㄥ唽璁惧寮傚父" + ex.getMessage());
+        }
+    }
+
+    /**
+     * @鎻忚堪 娉ㄥ唽鐧诲綍 闆嗘垚浜嶯ET_DVR_Login_V30锛屾敮鎸佸悓姝ュ拰寮傛鐧诲綍
+     * @鍙傛暟 [dvrLogin]
+     * @杩斿洖鍊� java.lang.Integer
+     * @鍒涘缓浜� 鍒樿嫃涔�
+     * @鍒涘缓鏃堕棿 2023/1/17 16:12
+     * @淇敼浜哄拰鍏跺畠淇℃伅
+     */
+    @Override
+    @Async("loginExecutor")
+    public AjaxResult asyncLogin(ArdCameras camera) {
+        try {
+            // 鍒濆鍖�
+            if (!hCNetSDK.NET_DVR_Init()) {
+                log.error("SDK鍒濆鍖栧け璐�");
+                return AjaxResult.error("SDK鍒濆鍖栧け璐�");
+            }
+            //鎵撳嵃娴峰悍sdk鏃ュ織
+            if (Platform.isWindows()) {
+                String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator;
+                hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true);
+            } else {
+                hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true);
+            }
+            String m_sDeviceIP = camera.getIp();
+            String m_sUsername = camera.getUsername();
+            String m_sPassword = camera.getPassword();
+            short m_sPort = camera.getPort().shortValue();
+            //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂�
+            hCNetSDK.NET_DVR_SetConnectTime(2000, 1);
+            hCNetSDK.NET_DVR_SetReconnect(5000, true);
+            //璁惧淇℃伅, 杈撳嚭鍙傛暟
+            HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();
+            HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();
+
+            // 娉ㄥ唽璁惧-鐧诲綍鍙傛暟锛屽寘鎷澶囧湴鍧�銆佺櫥褰曠敤鎴枫�佸瘑鐮佺瓑
+            m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN];
+            System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length());
+            m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN];
+            System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length());
+            m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN];
+            System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length());
+            m_strLoginInfo.wPort = m_sPort;
+            m_strLoginInfo.byVerifyMode = 0;
+            m_strLoginInfo.byLoginMode = 0;
+            //鏄惁寮傛鐧诲綍锛�0- 鍚︼紝1- 鏄�  windowsSDK閲屾槸true鍜宖alse
+            m_strLoginInfo.bUseAsynLogin = false;
+            m_strLoginInfo.write();
+            //鍚屾鐧诲綍
+            int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
+            if (lUserID < 0) {
+                int errorCode = hCNetSDK.NET_DVR_GetLastError();
+                camera.setChanNum(0);
+                camera.setLoginId(-1);
+                camera.setState("0");
+                //鍒犻櫎绠$悊閫氶亾
+                ardChannelService.deleteArdChannelByDeviceId(camera.getId());
+                ardCamerasService.updateArdCameras(camera);
+                log.error("璁惧[" + camera.getIp() + ":" + camera.getPort() + "]鐧诲綍澶辫触: errorCode:" + errorCode + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(errorCode));
+                return AjaxResult.error("璁惧鐧诲綍澶辫触: errorCode:" + errorCode + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(errorCode));
+            }
             log.debug("Login Success 銆� " + camera.getIp() + ":" + camera.getPort() + " 銆�");
             synchronized (_lock) {
                 if (fExceptionCallBack == null) {
@@ -242,7 +241,6 @@
                     //璁剧疆寮傚父鍥炶皟鍑芥暟(鍙湪鍥炶皟鍑芥暟涓幏鍙栬澶囦笂涓嬬嚎鐘舵�佺瓑)
                     if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) {
                         log.debug("Set fExceptionCallBack function fail");
-                        return;
                     } else {
                         log.debug("Set fExceptionCallBack function successfully!");
                     }
@@ -277,8 +275,10 @@
             addVtdu(camera);
             //鍒涘缓寮曞闃熷垪
             createGuideQueue(camera);
+            return AjaxResult.success("璁惧鐧诲綍鎴愬姛");
         } catch (Exception ex) {
             log.error("娉ㄥ唽璁惧寮傚父", ex);
+            return AjaxResult.error("娉ㄥ唽璁惧寮傚父" + ex.getMessage());
         }
     }
 
@@ -1917,14 +1917,14 @@
             log.error("鑾峰彇GIS淇℃伅鏁版嵁澶辫触: errorCode:" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code));
             return AjaxResult.error("鑾峰彇GIS淇℃伅鏁版嵁澶辫触: errorCode:" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code));
         }
-            struGisInfo.read();
-            Map<String, Object> map = new HashMap<>();
-            map.put("p", struGisInfo.struPtzPos.fPanPos);
-            map.put("t", struGisInfo.struPtzPos.fTiltPos < 0 ? struGisInfo.struPtzPos.fTiltPos + 360 : struGisInfo.struPtzPos.fTiltPos);
-            map.put("z", struGisInfo.struPtzPos.fZoomPos);
-            map.put("fHorFieldAngle", struGisInfo.fHorizontalValue);// 姘村钩瑙嗗満瑙�
-            map.put("fVerFieldAngle", struGisInfo.fVerticalValue);// 鍨傜洿瑙嗗満瑙�
-            return AjaxResult.success(map);
+        struGisInfo.read();
+        Map<String, Object> map = new HashMap<>();
+        map.put("p", struGisInfo.struPtzPos.fPanPos);
+        map.put("t", struGisInfo.struPtzPos.fTiltPos < 0 ? struGisInfo.struPtzPos.fTiltPos + 360 : struGisInfo.struPtzPos.fTiltPos);
+        map.put("z", struGisInfo.struPtzPos.fZoomPos);
+        map.put("fHorFieldAngle", struGisInfo.fHorizontalValue);// 姘村钩瑙嗗満瑙�
+        map.put("fVerFieldAngle", struGisInfo.fVerticalValue);// 鍨傜洿瑙嗗満瑙�
+        return AjaxResult.success(map);
 
     }
 }
diff --git a/ard-work/src/main/java/com/ruoyi/utils/tools/ArdTool.java b/ard-work/src/main/java/com/ruoyi/utils/tools/ArdTool.java
index 13146fa..ff87625 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/tools/ArdTool.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/tools/ArdTool.java
@@ -186,4 +186,27 @@
         }
     }
 
+    /**
+     *  閫氳繃鍙嶅皠瀵硅薄濉厖
+     * 鍒樿嫃涔�
+     * 2024/4/2 11:50:57
+     */
+    public static void fillNullFields(Object source, Object target) {
+        if (source == null || target == null) {
+            return;
+        }
+        Field[] fields = source.getClass().getDeclaredFields();
+        for (Field field : fields) {
+            field.setAccessible(true);
+            try {
+                Object sourceValue = field.get(source);
+                Object targetValue = field.get(target);
+                if (targetValue == null && sourceValue != null) {
+                    field.set(target, sourceValue);
+                }
+            } catch (IllegalAccessException e) {
+                e.printStackTrace();
+            }
+        }
+    }
 }
diff --git a/ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml b/ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml
index 38ff325..e7a7999 100644
--- a/ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml
+++ b/ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml
@@ -104,6 +104,7 @@
                 WHERE cast(#{deptId} as varchar) = any(string_to_array(ancestors,',')) ))
             </if>
             <if test="towerId != null ">and c.tower_id = #{towerId}</if>
+            <if test="state != null ">and c.state = #{state}</if>
             <!-- 鏁版嵁鑼冨洿杩囨护 -->
             ${params.dataScope}
         </where>
@@ -140,6 +141,7 @@
             <if test="camMaxVisibleDistance != null ">and c.cam_max_visible_distance = #{camMaxVisibleDistance}</if>
             <if test="camAlarmGuideEnable != null ">and c.cam_alarm_guide_enable = #{camAlarmGuideEnable}</if>
             <if test="loginId != null ">and c.login_id = #{loginId}</if>
+            <if test="state != null ">and c.state = #{state}</if>
         </where>
     </select>
     <select id="selectArdCamerasById" parameterType="String" resultMap="ArdCamerasResult">
@@ -181,6 +183,7 @@
             <if test="createTime != null">create_time,</if>
             <if test="updateBy != null">update_by,</if>
             <if test="updateTime != null">update_time,</if>
+            <if test="state != null">state,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">#{id},</if>
@@ -214,6 +217,7 @@
             <if test="createTime != null">#{createTime},</if>
             <if test="updateBy != null">#{updateBy},</if>
             <if test="updateTime != null">#{updateTime},</if>
+            <if test="state != null">#{state},</if>
         </trim>
     </insert>
 
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java
index ea6535c..d6ed2c3 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java
@@ -8,6 +8,7 @@
 import com.ruoyi.device.camera.factory.CameraSDK;
 import com.ruoyi.device.camera.factory.CameraSDKFactory;
 import com.ruoyi.device.camera.service.IArdCamerasService;
+import com.ruoyi.device.camera.service.ICameraSdkService;
 import com.ruoyi.media.domain.Vtdu;
 import com.ruoyi.media.service.IMediaService;
 import com.ruoyi.media.service.IVtduService;
@@ -41,7 +42,7 @@
     @Resource
     IMediaService mediaService;
     @Resource
-    private CameraSDKFactory cameraSDKFactory;
+    private ICameraSdkService cameraSdkService;
     /**
      * 鍚屾鐩告満鍦ㄧ嚎鐘舵��
      * 鍒樿嫃涔�
@@ -55,9 +56,7 @@
             for (ArdCameras camera : ardCameras) {
                 CameraCmd cmd = new CameraCmd();
                 cmd.setCameraId(camera.getId());
-                String factory = camera.getFactory();
-                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
-                boolean onLineNew = cameraSDK.isOnLine(cmd);
+                boolean onLineNew = cameraSdkService.isOnLine(cmd);
                 boolean onLineOld = "1".equals(camera.getState());
                 if (onLineNew != onLineOld) {
                     if (onLineNew) {

--
Gitblit v1.9.3