From f5fa6fa5e5d14fb3d8703434b30648be76b6e7e6 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期二, 12 十二月 2023 17:08:47 +0800
Subject: [PATCH] 重构引导队列逻辑

---
 ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueTaskExecutor.java      |    6 
 ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java       |   16 +
 ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java |    4 
 ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueHandler.java           |  216 ++++++++++++++++++++++++++++++
 ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueManager.java           |  134 +++++++++---------
 ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java            |   34 +++-
 6 files changed, 323 insertions(+), 87 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java b/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java
index 588c3f5..28d68cd 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java
@@ -110,7 +110,7 @@
     @Resource
     private RedisCache redisCache;
     @Resource
-    private QueueManager queueManager;
+    private QueueHandler queueHandler;
     @Resource
     private ArdEquipRadarMapper ardEquipRadarMapper;
     //endregion
@@ -1427,7 +1427,7 @@
                 guideTask.setGuidePTZ(guideDataDto.getGuidePTZ());
             }
             //娑堟伅鍏ラ槦
-            queueManager.addTaskToQueue(cameraId, guideTask);
+            queueHandler.addTaskToQueue(cameraId, guideTask);
             //鎵撳嵃闃熷垪
             GuidePriorityQueue.printPriorityQueue();
         } catch (Exception ex) {
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
new file mode 100644
index 0000000..b883dc7
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueHandler.java
@@ -0,0 +1,216 @@
+package com.ruoyi.alarm.global.service.impl;
+
+import com.ruoyi.alarm.access.domain.ArdAlarmAccess;
+import com.ruoyi.alarm.access.service.IArdAlarmAccessService;
+import com.ruoyi.alarm.external.domain.ArdAlarmExternal;
+import com.ruoyi.alarm.external.service.IArdAlarmExternalService;
+import com.ruoyi.alarm.global.domain.GuidePriorityQueue;
+import com.ruoyi.alarm.global.domain.GuideTask;
+import com.ruoyi.alarm.radar.domain.ArdAlarmRadarFire;
+import com.ruoyi.alarm.radar.domain.ArdAlarmRadarMove;
+import com.ruoyi.alarm.radar.domain.ArdAlarmRadarPump;
+import com.ruoyi.alarm.radar.service.IArdAlarmRadarFireService;
+import com.ruoyi.alarm.radar.service.IArdAlarmRadarMoveService;
+import com.ruoyi.alarm.radar.service.IArdAlarmRadarPumpService;
+import com.ruoyi.alarm.tube.domain.ArdAlarmTube;
+import com.ruoyi.alarm.tube.service.IArdAlarmTubeService;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.spring.SpringUtils;
+import com.ruoyi.device.camera.domain.CameraCmd;
+import com.ruoyi.device.camera.service.ICameraSdkService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import java.time.Duration;
+import java.time.Instant;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.*;
+
+/**
+ * @Description: 闃熷垪澶勭悊鍣�
+ * @ClassName: QueueHandler
+ * @Author: 鍒樿嫃涔�
+ * @Date: 2023骞�12鏈�12鏃�13:40:13
+ **/
+@Slf4j(topic = "guideQueue")
+@Component
+public class QueueHandler {
+    /**
+     * 寮曞浠诲姟鍏ラ槦
+     * 鍒樿嫃涔�
+     * 2023/6/30 8:57
+     */
+    public void addTaskToQueue(String cameraId, GuideTask task) {
+        /*閫氳繃鐩告満ID鑾峰彇寮曞闃熷垪锛屽苟灏嗗紩瀵间换鍔″姞鍏ラ槦鍒�*/
+        PriorityBlockingQueue<GuideTask> guideTaskQueue = GuidePriorityQueue.cameraQueueMap.get(cameraId);
+        if (StringUtils.isNull(guideTaskQueue)) {
+            log.info("鐩告満鏈櫥褰�,娌℃湁闃熷垪,鏃犳硶鍏ラ槦寮曞");
+            return;
+        }
+        log.debug("鏂颁换鍔″叆闃�:" + task.getAlarmId());
+        guideTaskQueue.add(task);
+        /*鑾峰彇璇ョ浉鏈虹殑褰撳墠鎵ц绾跨▼-----寮冪敤*/
+        //TaskThread currentTaskThread = threadMap.get(cameraId);
+        ////濡傛灉闃熷垪褰撳墠绾跨▼姝e湪杩愯锛岃嫢鍏ラ槦浠诲姟浼樺厛绾уぇ浜庡綋鍓嶄换鍔′紭鍏堢骇锛屽垯缁堟褰撳墠绾跨▼
+        //if (currentTaskThread != null){
+        //    if (task.getPriority() > currentTaskThread.getCurrentTask().getPriority()) {
+        //        currentTaskThread.getThread().interrupt();
+        //    }
+        //    if (!currentTaskThread.getThread().isAlive()) {
+        //        Thread newThread = createThread(cameraId, guideTaskQueue);
+        //        threadMap.put(cameraId, new TaskThread(newThread, task));
+        //        newThread.start();
+        //    }
+        //}
+        ////濡傛灉闃熷垪褰撳墠娌℃湁绾跨▼姝e湪杩愯锛屽垯鍚姩鏂扮嚎绋�
+        //else {
+        //    Thread newThread = createThread(cameraId, guideTaskQueue);
+        //    threadMap.put(cameraId, new TaskThread(newThread, task));
+        //    newThread.start();
+        //}
+    }
+    @Async
+    public void process(String cameraId) {
+        log.debug("CameraId:銆�" + cameraId + "銆戦槦鍒楀鐞嗗櫒鍚姩");
+        PriorityBlockingQueue<GuideTask> guideTasks = GuidePriorityQueue.cameraQueueMap.get(cameraId);
+        while (true) {
+            if (guideTasks.size() > 0) {
+                //鍙栧嚭闃熷垪涓殑寮曞浠诲姟
+                GuideTask newTask = null;
+                try {
+                    newTask = guideTasks.take();
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                }
+                log.debug("鎵ц鏂颁换鍔�:銆�" + newTask.getAlarmId() + "銆�");
+                log.debug("鍓╀綑浠诲姟鏁�:銆�" + guideTasks.size() + "銆�");
+                // 寮傛澶勭悊浠诲姟锛屽苟鑾峰彇Future
+                processTask(newTask);
+            }
+            try {
+                Thread.sleep(100);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+    public void processTask(GuideTask guideTask) {
+        try {
+            String url="";
+            CameraCmd cmd = new CameraCmd();
+            cmd.setCameraId(guideTask.getCameraId());
+            cmd.setChanNo(guideTask.getChanNum());
+            cmd.setTargetPosition(guideTask.getTargetPosition());
+            cmd.setOperator(guideTask.getAlarmType());
+            cmd.setExpired(30);
+            cmd.setRecordBucketName("record");
+            Map<String, Double> ptzMap = new HashMap<>();
+            ptzMap.put("p", guideTask.getGuidePTZ().getP());
+            ptzMap.put("t", guideTask.getGuidePTZ().getT());
+            ptzMap.put("z", guideTask.getGuidePTZ().getZ());
+            cmd.setPtzMap(ptzMap);
+            if (guideTask.getRecordSn().equals(1)) {
+                cmd.setRecordObjectName("alarm_" + guideTask.getAlarmId() + "_1");
+            } else {
+                cmd.setRecordObjectName("alarm_" + guideTask.getAlarmId() + "_2");
+            }
+            ICameraSdkService cameraSdkService = SpringUtils.getBean(ICameraSdkService.class);
+            log.debug("寮�濮嬪紩瀵�");
+            boolean guideRes = false;
+            boolean recordFlag = false;
+            if (cmd.getPtzMap().get("p") != null) {
+                //p鍊煎瓨鍦� 浼樺厛寮曞ptz
+                guideRes = cameraSdkService.setPtz(cmd);
+            } else {
+                guideRes = cameraSdkService.guideTargetPosition(cmd);
+            }
+            if (guideRes) {
+                log.debug("寮曞鎴愬姛");
+                cameraSdkService.controlLock(cmd);//涓婇攣
+                cameraSdkService.recordStart(cmd);//寮�濮嬪綍鍍�
+                recordFlag = true;
+                Instant startTime = Instant.now();
+                while (recordFlag) {
+                    //鍒ゆ柇鏃堕棿
+                    Instant currentTime = Instant.now();
+                    long elapsedSeconds = Duration.between(startTime, currentTime).getSeconds();
+                    if (elapsedSeconds >= 30) {
+                        recordFlag = false;
+                        url = cameraSdkService.recordStopToMinio(cmd);//鍋滄褰曞儚杩斿洖url
+                    }
+                    //鍒ゆ柇闃熷垪涓涓�鏉℃暟鎹殑浼樺厛绾ф槸鍚﹀ぇ浜庡綋鍓嶆暟鎹殑浼樺厛绾�
+                    PriorityBlockingQueue<GuideTask> guideTasks = GuidePriorityQueue.cameraQueueMap.get(guideTask.getCameraId());
+                    if (guideTasks.size() > 0) {
+                        GuideTask firstTask = guideTasks.peek();
+                        if (firstTask.getPriority() > guideTask.getPriority()) {
+                            recordFlag = false;//褰曞儚鍋滄
+                            break;
+                        }
+                    }
+                }
+                if (StringUtils.isNotEmpty(url)) {
+                    switch (guideTask.getAlarmType()) {
+                        case "sys_tube_leak":
+                            ArdAlarmTube ardAlarmTube = new ArdAlarmTube();
+                            ardAlarmTube.setId(guideTask.getAlarmId());
+                            ardAlarmTube.setRecordUrl(url);
+                            IArdAlarmTubeService ardAlarmTubeService = SpringUtils.getBean(IArdAlarmTubeService.class);
+                            ardAlarmTubeService.updateArdAlarmTube(ardAlarmTube);
+                            break;
+                        case "sys_radar_move":
+                            ArdAlarmRadarMove ardAlarmRadarMove = new ArdAlarmRadarMove();
+                            ardAlarmRadarMove.setId(guideTask.getAlarmId());
+                            if (guideTask.getRecordSn().equals(1)) {
+                                ardAlarmRadarMove.setRecordUrl1(url);
+                            } else {
+                                ardAlarmRadarMove.setRecordUrl2(url);
+                            }
+                            IArdAlarmRadarMoveService ardAlarmRadarMoveService = SpringUtils.getBean(IArdAlarmRadarMoveService.class);
+                            ardAlarmRadarMoveService.updateArdAlarmRadarMove(ardAlarmRadarMove);
+                            break;
+                        case "sys_radar_fire":
+                            ArdAlarmRadarFire ardAlarmRadarFire = new ArdAlarmRadarFire();
+                            ardAlarmRadarFire.setId(guideTask.getAlarmId());
+                            if (guideTask.getRecordSn().equals(1)) {
+                                ardAlarmRadarFire.setRecordUrl1(url);
+                            } else {
+                                ardAlarmRadarFire.setRecordUrl2(url);
+                            }
+                            IArdAlarmRadarFireService ardAlarmRadarFireService = SpringUtils.getBean(IArdAlarmRadarFireService.class);
+                            ardAlarmRadarFireService.updateArdAlarmRadarFire(ardAlarmRadarFire);
+                            break;
+                        case "sys_radar_pump":
+                            ArdAlarmRadarPump ardAlarmRadarPump = new ArdAlarmRadarPump();
+                            ardAlarmRadarPump.setId(guideTask.getAlarmId());
+                            if (guideTask.getRecordSn().equals(1)) {
+                                ardAlarmRadarPump.setRecordUrl1(url);
+                            } else {
+                                ardAlarmRadarPump.setRecordUrl2(url);
+                            }
+                            IArdAlarmRadarPumpService ardAlarmRadarPumpService = SpringUtils.getBean(IArdAlarmRadarPumpService.class);
+                            ardAlarmRadarPumpService.updateArdAlarmRadarPump(ardAlarmRadarPump);
+                            break;
+                        case "sys_external":
+                            ArdAlarmExternal ardAlarmExternal = new ArdAlarmExternal();
+                            ardAlarmExternal.setId(guideTask.getAlarmId());
+                            ardAlarmExternal.setRecordUrl(url);
+                            IArdAlarmExternalService ardAlarmExternalService = SpringUtils.getBean(IArdAlarmExternalService.class);
+                            ardAlarmExternalService.updateArdAlarmExternal(ardAlarmExternal);
+                            break;
+                        case "sys_access_control":
+                            ArdAlarmAccess ardAlarmAccess = new ArdAlarmAccess();
+                            ardAlarmAccess.setId(guideTask.getAlarmId());
+                            ardAlarmAccess.setRecordUrl(url);
+                            IArdAlarmAccessService ardAlarmAccessService = SpringUtils.getBean(IArdAlarmAccessService.class);
+                            ardAlarmAccessService.updateArdAlarmAccess(ardAlarmAccess);
+                            break;
+                    }
+                }
+            }
+        } catch (Exception ex) {
+            log.info("绾跨▼浠诲姟寮傚父:" + ex.getMessage());
+        }
+    }
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueManager.java b/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueManager.java
index 0497e66..9d53cc8 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueManager.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueManager.java
@@ -13,7 +13,7 @@
 
 /**
  * @ClassName QueueManager
- * @Description: 闃熷垪绠$悊
+ * @Description: 闃熷垪绠$悊-----寮冪敤
  * @Author 鍒樿嫃涔�
  * @Date 2023/6/29 21:09
  * @Version 1.0
@@ -23,32 +23,32 @@
 @Slf4j(topic = "guideQueue")
 public class QueueManager {
 
-    @Autowired
-    private QueueTaskExecutor taskExecutor;
-    private Map<String, TaskThread> threadMap = new ConcurrentHashMap<>();
+   // @Autowired
+   // private QueueTaskExecutor taskExecutor;-----寮冪敤
+   // private Map<String, TaskThread> threadMap = new ConcurrentHashMap<>();
 
-    /*鍐呴儴闈欐�佺被*/
-    private static class TaskThread {
-        private Thread thread;
-        private GuideTask currentTask;
-
-        public TaskThread(Thread thread, GuideTask currentTask) {
-            this.thread = thread;
-            this.currentTask = currentTask;
-        }
-
-        public Thread getThread() {
-            return thread;
-        }
-
-        public GuideTask getCurrentTask() {
-            return currentTask;
-        }
-
-        public void setCurrentTask(GuideTask task) {
-            this.currentTask = task;
-        }
-    }
+    ///*鍐呴儴闈欐�佺被*/
+    //private static class TaskThread {
+    //    private Thread thread;
+    //    private GuideTask currentTask;
+    //
+    //    public TaskThread(Thread thread, GuideTask currentTask) {
+    //        this.thread = thread;
+    //        this.currentTask = currentTask;
+    //    }
+    //
+    //    public Thread getThread() {
+    //        return thread;
+    //    }
+    //
+    //    public GuideTask getCurrentTask() {
+    //        return currentTask;
+    //    }
+    //
+    //    public void setCurrentTask(GuideTask task) {
+    //        this.currentTask = task;
+    //    }
+    //}
 
     /**
      * 寮曞浠诲姟鍏ラ槦
@@ -64,51 +64,51 @@
         }
         log.debug("鏂颁换鍔″叆闃�:" + task.getAlarmId());
         guideTaskQueue.add(task);
-        /*鑾峰彇璇ョ浉鏈虹殑褰撳墠鎵ц绾跨▼*/
-        TaskThread currentTaskThread = threadMap.get(cameraId);
-        //濡傛灉闃熷垪褰撳墠绾跨▼姝e湪杩愯锛岃嫢鍏ラ槦浠诲姟浼樺厛绾уぇ浜庡綋鍓嶄换鍔′紭鍏堢骇锛屽垯缁堟褰撳墠绾跨▼
-        if (currentTaskThread != null){
-            if (task.getPriority() > currentTaskThread.getCurrentTask().getPriority()) {
-                currentTaskThread.getThread().interrupt();
-            }
-            if (!currentTaskThread.getThread().isAlive()) {
-                Thread newThread = createThread(cameraId, guideTaskQueue);
-                threadMap.put(cameraId, new TaskThread(newThread, task));
-                newThread.start();
-            }
-        }
-        //濡傛灉闃熷垪褰撳墠娌℃湁绾跨▼姝e湪杩愯锛屽垯鍚姩鏂扮嚎绋�
-        else {
-            Thread newThread = createThread(cameraId, guideTaskQueue);
-            threadMap.put(cameraId, new TaskThread(newThread, task));
-            newThread.start();
-        }
+        /*鑾峰彇璇ョ浉鏈虹殑褰撳墠鎵ц绾跨▼-----寮冪敤*/
+        //TaskThread currentTaskThread = threadMap.get(cameraId);
+        ////濡傛灉闃熷垪褰撳墠绾跨▼姝e湪杩愯锛岃嫢鍏ラ槦浠诲姟浼樺厛绾уぇ浜庡綋鍓嶄换鍔′紭鍏堢骇锛屽垯缁堟褰撳墠绾跨▼
+        //if (currentTaskThread != null){
+        //    if (task.getPriority() > currentTaskThread.getCurrentTask().getPriority()) {
+        //        currentTaskThread.getThread().interrupt();
+        //    }
+        //    if (!currentTaskThread.getThread().isAlive()) {
+        //        Thread newThread = createThread(cameraId, guideTaskQueue);
+        //        threadMap.put(cameraId, new TaskThread(newThread, task));
+        //        newThread.start();
+        //    }
+        //}
+        ////濡傛灉闃熷垪褰撳墠娌℃湁绾跨▼姝e湪杩愯锛屽垯鍚姩鏂扮嚎绋�
+        //else {
+        //    Thread newThread = createThread(cameraId, guideTaskQueue);
+        //    threadMap.put(cameraId, new TaskThread(newThread, task));
+        //    newThread.start();
+        //}
     }
 
     /**
-     * 鍒涘缓绾跨▼
+     * 鍒涘缓绾跨▼ -----寮冪敤
      * 鍒樿嫃涔�
      * 2023/6/30 9:04
      */
-    private Thread createThread(String queueName, PriorityBlockingQueue<GuideTask> queue) {
-
-        return new Thread(() -> {
-            while (!Thread.currentThread().isInterrupted()) {
-                try {
-                    GuideTask task = queue.take();
-                    log.debug("鍙栧嚭闃熷垪鏁版嵁:" + task.getAlarmId());
-                    taskExecutor.processTask(task);
-                    // 鏇存柊绾跨▼鐨勫綋鍓嶄换鍔�
-                    TaskThread currentTaskThread = threadMap.get(queueName);
-                    if (currentTaskThread != null) {
-                        currentTaskThread.setCurrentTask(task);
-                    }
-                } catch (InterruptedException e) {
-                    log.info("涓柇褰撳墠绾跨▼");
-                    //绾跨▼涓柇锛岄��鍑哄惊鐜�
-                    Thread.currentThread().interrupt();
-                }
-            }
-        }, queueName);
-    }
+    //private Thread createThread(String queueName, PriorityBlockingQueue<GuideTask> queue) {
+    //
+    //    return new Thread(() -> {
+    //        while (!Thread.currentThread().isInterrupted()) {
+    //            try {
+    //                GuideTask task = queue.take();
+    //                log.debug("鍙栧嚭闃熷垪鏁版嵁:" + task.getAlarmId());
+    //                taskExecutor.processTask(task);
+    //                // 鏇存柊绾跨▼鐨勫綋鍓嶄换鍔�
+    //                TaskThread currentTaskThread = threadMap.get(queueName);
+    //                if (currentTaskThread != null) {
+    //                    currentTaskThread.setCurrentTask(task);
+    //                }
+    //            } catch (InterruptedException e) {
+    //                log.info("涓柇褰撳墠绾跨▼");
+    //                //绾跨▼涓柇锛岄��鍑哄惊鐜�
+    //                Thread.currentThread().interrupt();
+    //            }
+    //        }
+    //    }, queueName);
+    //}
 }
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueTaskExecutor.java b/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueTaskExecutor.java
index 9b45bf5..ff9980c 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueTaskExecutor.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueTaskExecutor.java
@@ -25,13 +25,12 @@
 
 /**
  * @ClassName QueueTaskExecutor
- * @Description: 闃熷垪浠诲姟鎵ц鍣�
+ * @Description: 闃熷垪浠诲姟鎵ц鍣�-----寮冪敤
  * @Author 鍒樿嫃涔�
  * @Date 2023/6/29 21:10
  * @Version 1.0
  */
 
-@Component
 @Slf4j(topic = "guideQueue")
 public class QueueTaskExecutor {
     @Resource
@@ -44,7 +43,6 @@
     ICameraSdkService cameraSdkService;
     @Resource
     IArdAlarmTubeService ardAlarmTubeService;
-
     @Resource
     IArdAlarmExternalService ardAlarmExternalService;
     @Resource
@@ -145,4 +143,4 @@
             log.info("绾跨▼浠诲姟寮傚父:" + ex.getMessage());
         }
     }
-}
+}
\ 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 a2e632f..306fb1c 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,10 @@
 
 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.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;
@@ -62,7 +64,8 @@
     private IVtduService vtduService;
     @Value("${minio.endpoint}")
     private String minioEndPoint;
-
+    @Resource
+    private QueueHandler queueHandler;
 
     // 璁惧鏂嚎閫氱煡鍥炶皟
     private static DisConnect disConnect = new DisConnect();
@@ -74,6 +77,7 @@
      * 鐧诲綍
      * 鍒樿嫃涔�
      * 2023/10/17 8:28:13
+     *
      * @return
      */
     @Override
@@ -152,17 +156,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);
@@ -236,10 +245,14 @@
         }
 
         //鍒涘缓寮曞闃熷垪
-        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());
         }
     }
 
@@ -247,6 +260,7 @@
      * 娉ㄩ攢
      * 鍒樿嫃涔�
      * 2023/10/17 8:28:13
+     *
      * @return
      */
     @Override
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 8c89a46..ac1388b 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
@@ -2,8 +2,10 @@
 
 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.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.service.IArdCamerasService;
 import com.ruoyi.device.camera.factory.CameraSDK;
@@ -52,6 +54,8 @@
     private IArdChannelService ardChannelService;
     @Resource
     private IVtduService vtduService;
+    @Resource
+    private QueueHandler queueHandler;
 
     public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK;
     private static HCNetSDK.FExceptionCallBack fExceptionCallBack;//寮傚父鍥炶皟
@@ -265,10 +269,14 @@
             //娣诲姞鍒版祦濯掍綋
             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);
+            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());
+                }
             }
         } catch (Exception ex) {
             log.error("娉ㄥ唽璁惧寮傚父", ex);

--
Gitblit v1.9.3