From 4b085b357d5e3137a79b4618a15dcba1fc5adf7b Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期四, 14 三月 2024 08:53:43 +0800 Subject: [PATCH] 优化 --- ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java | 87 +++++++++++++++++++++++++++++++++---------- 1 files changed, 67 insertions(+), 20 deletions(-) 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 a2e632f..31bd49f 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 @@ -2,8 +2,12 @@ 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; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.device.camera.factory.CameraSDK; import com.ruoyi.device.camera.domain.ArdCameras; @@ -16,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.dhsdk.common.ErrorCode; import com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib; import com.ruoyi.utils.sdk.dhsdk.lib.enumeration.EM_NEW_CONFIG; import com.ruoyi.utils.sdk.dhsdk.lib.enumeration.NET_EM_CFG_OPERATE_TYPE; @@ -62,7 +67,8 @@ private IVtduService vtduService; @Value("${minio.endpoint}") private String minioEndPoint; - + @Resource + private QueueHandler queueHandler; // 璁惧鏂嚎閫氱煡鍥炶皟 private static DisConnect disConnect = new DisConnect(); @@ -74,6 +80,7 @@ * 鐧诲綍 * 鍒樿嫃涔� * 2023/10/17 8:28:13 + * * @return */ @Override @@ -152,17 +159,22 @@ } //鍒涘缓寮曞闃熷垪 - 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() == 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()); } return true; } @Override @Async("loginExecutor") - public void asyncLogin(ArdCameras camera){ + 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); @@ -208,7 +220,14 @@ ardChannelService.insertArdChannel(channel); } //閰嶇疆鍒版祦濯掍綋 - for (int i = 1; i < m_stDeviceInfo.byChanNum + 1; i++) { + addVtdu(camera); + //鍒涘缓寮曞闃熷垪 + createGuideQueue(camera); + } + + //娣诲姞鍒版祦濯掍綋 + private void addVtdu(ArdCameras camera) { + for (int i = 1; i < camera.getChanNum() + 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); @@ -234,12 +253,20 @@ 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); + //鍒涘缓寮曞闃熷垪 + 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()); + } + } } } @@ -247,6 +274,7 @@ * 娉ㄩ攢 * 鍒樿嫃涔� * 2023/10/17 8:28:13 + * * @return */ @Override @@ -290,14 +318,15 @@ * 2023/10/17 8:28:13 */ @Override - public boolean pTZControl(CameraCmd cmd) { + @SdkOperate + public AjaxResult pTZControl(CameraCmd cmd) { String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); Integer chanNo = cmd.getChanNo(); Integer speed = cmd.getSpeed(); Integer code = cmd.getCode(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; + return AjaxResult.error("璁惧鏈櫥褰�"); } NetSDKLib.LLong loginId = (NetSDKLib.LLong) GlobalVariable.loginMap.get(cameraId); int dwStop; @@ -364,8 +393,9 @@ boolean bool = PtzControlModule.ptzControl(loginId, chanNo - 1, dwPTZCommand, speed, speed, 0, dwStop); if (!bool) { log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); + return AjaxResult.error(ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError())); } - return bool; + return AjaxResult.success(); } /** @@ -401,6 +431,11 @@ return null; } + @Override + public AjaxResult setPtz1(CameraCmd cmd) { + return setPtz(cmd) ; + } + /** * @鎻忚堪 璁剧疆ptz淇℃伅 * @鍙傛暟 [userId, channelNum] @@ -410,15 +445,20 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�奸渶瑕佸姞涓�360寰楀埌鐨勬鍊艰繘琛岃缃� */ @Override - public boolean setPtz(CameraCmd cmd) { + @SdkOperate + public AjaxResult setPtz(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer chanNo = cmd.getChanNo(); Map<String, Double> ptz = cmd.getPtzMap(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; + return AjaxResult.error("璁惧鏈櫥褰�"); } LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); try { + if(ptz.get("p")==null||ptz.get("t")==null||ptz.get("z")==null) + { + return AjaxResult.error("ptz鍙傛暟涓嶈兘涓虹┖"); + } int p = (int) (ptz.get("p") * 10); int t = (int) (ptz.get("t") * 10); t = t > 900 ? 3600 - t : t * -1; @@ -427,11 +467,12 @@ boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_EXACTGOTO, p, t, z, 0); if (!bool) { log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); + return AjaxResult.error(ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError())); } - return bool; + return AjaxResult.success(); } catch (Exception ex) { log.error(ex.getMessage()); - return false; + return AjaxResult.error(ex.getMessage()); } } @@ -444,6 +485,7 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�奸渶瑕佸姞涓�360寰楀埌鐨勬鍊艰繘琛岃缃� */ @Override + @SdkOperate public boolean setZeroPtz(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer chanNo = cmd.getChanNo(); @@ -485,6 +527,11 @@ } return picUrl; + } + + @Override + public Map<String, Object> getPtz1(CameraCmd cmd) { + return getPtz(cmd); } /** @@ -1058,4 +1105,4 @@ } } -} \ No newline at end of file +} -- Gitblit v1.9.3