From af3b68eeca07a30967754dc1a61b8def9efe188c Mon Sep 17 00:00:00 2001 From: aijinhui <aijinhui> Date: 星期四, 14 十二月 2023 11:59:59 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ard-work/src/main/java/com/ruoyi/alarm/config/AsyncConfiguration.java | 21 ++++++++++ ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java | 33 ++++++++++------ ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueHandler.java | 4 +- ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java | 2 ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java | 29 ++++++++++---- 5 files changed, 64 insertions(+), 25 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/alarm/config/AsyncConfiguration.java b/ard-work/src/main/java/com/ruoyi/alarm/config/AsyncConfiguration.java index 55e35ff..9512bbb 100644 --- a/ard-work/src/main/java/com/ruoyi/alarm/config/AsyncConfiguration.java +++ b/ard-work/src/main/java/com/ruoyi/alarm/config/AsyncConfiguration.java @@ -71,4 +71,25 @@ executor.initialize(); return executor; } + @Bean("guideExecutor") + public Executor guideExecutor(){ + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + //閰嶇疆鏍稿績绾跨▼鏁� + executor.setCorePoolSize(corePoolSize); + //閰嶇疆鏈�澶х嚎绋嬫暟 + executor.setMaxPoolSize(maxPoolSize); + //閰嶇疆闃熷垪澶у皬 + executor.setQueueCapacity(queueCapacity); + //绾跨▼鐨勫悕绉板墠缂� + executor.setThreadNamePrefix("guideExecutor-"); + //绾跨▼娲昏穬鏃堕棿锛堢锛� + executor.setKeepAliveSeconds(keepAliveSeconds); + //绛夊緟鎵�鏈変换鍔$粨鏉熷悗鍐嶅叧闂嚎绋嬫睜 + executor.setWaitForTasksToCompleteOnShutdown(true); + //璁剧疆鎷掔粷绛栫暐 + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + //鎵ц鍒濆鍖� + executor.initialize(); + return executor; + } } diff --git a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueHandler.java b/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueHandler.java index b883dc7..7797e6e 100644 --- a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueHandler.java +++ b/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueHandler.java @@ -71,9 +71,9 @@ // newThread.start(); //} } - @Async + @Async("guideExecutor") public void process(String cameraId) { - log.debug("CameraId:銆�" + cameraId + "銆戦槦鍒楀鐞嗗櫒鍚姩"); + log.debug("CameraId:銆�" + cameraId + "銆戝紩瀵奸槦鍒楀鐞嗗櫒鍚姩鎴愬姛"); PriorityBlockingQueue<GuideTask> guideTasks = GuidePriorityQueue.cameraQueueMap.get(cameraId); while (true) { if (guideTasks.size() > 0) { diff --git a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java index c5961d1..e811055 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java +++ b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java @@ -113,7 +113,7 @@ if (client.isConnected()) { client.subscribe(topic, qos); log.info("mqtt杩炴帴鎴愬姛" ); - log.info("--璁㈤槄涓婚:锛�" + Arrays.toString(topic)); + log.info("璁㈤槄涓婚:" + Arrays.toString(topic)); } else { log.info("mqtt杩炴帴澶辫触"); } 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 306fb1c..2eb90d2 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 @@ -217,7 +217,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); @@ -243,16 +250,20 @@ 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); + //鍒涘缓寮曞闃熷垪 + 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()); + } } - //鍚姩闃熷垪澶勭悊鍣� - queueHandler.process(camera.getId()); } } 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 d822c17..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 @@ -57,6 +57,7 @@ @Resource private QueueHandler queueHandler; + public Object _lock=new Object(); public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK; private static HCNetSDK.FExceptionCallBack fExceptionCallBack;//寮傚父鍥炶皟 @@ -180,7 +181,6 @@ @Async("loginExecutor") public void asyncLogin(ArdCameras camera) { try { - Thread.sleep(100); // 鍒濆鍖� if (!hCNetSDK.NET_DVR_Init()) { log.error("SDK鍒濆鍖栧け璐�"); @@ -230,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()); } @@ -269,6 +270,15 @@ //娣诲姞鍒版祦濯掍綋 addVtdu(camera); //鍒涘缓寮曞闃熷垪 + 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(); @@ -278,11 +288,8 @@ queueHandler.process(camera.getId()); } } - } catch (Exception ex) { - log.error("娉ㄥ唽璁惧寮傚父", ex); } } - //娣诲姞鍒版祦濯掍綋 private void addVtdu(ArdCameras camera) { try { -- Gitblit v1.9.3