From a38cb5bb3898f8996321df8f8d537ea18f4af71f Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期五, 30 六月 2023 10:19:11 +0800
Subject: [PATCH] 优化

---
 ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuideTask.java                    |   28 +++++++
 ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java |   68 +++++++----------
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SdkTask.java                               |   10 +
 ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueManager.java           |   34 ++++++--
 ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java      |   76 ++++++++++++++++--
 ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/domain/ArdAlarmRadar.java                 |    9 ++
 6 files changed, 163 insertions(+), 62 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuideTask.java b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuideTask.java
index 7636988..25f1db5 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuideTask.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuideTask.java
@@ -16,9 +16,37 @@
 @AllArgsConstructor
 public class GuideTask {
 
+    /**
+     * 鐩告満ID
+     */
     String cameraId;
+    /**
+     * 鐩告満閫氶亾
+     */
+    Integer chanNum;
+    /**
+     * 鎶ヨID
+     */
     String alarmId;
+    /**
+     * 鎶ヨ绫诲瀷
+     */
+    String alarmType;
+    /**
+     * 鎶ヨ浼樺厛绾�
+     */
     Integer priority;
+    /**
+     * 鎶ヨ鏃堕棿
+     */
     String alarmTime;
+    /**
+     * 鎶ヨ娆℃暟
+     */
     Integer num;
+    /**
+     * 褰曞儚瀛樺偍浣嶇疆
+     */
+    Integer recordSn;
+
 }
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java
index 1a0e990..b90f567 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java
@@ -344,7 +344,7 @@
                         log.debug("tube鍏ュ簱鎴愬姛锛�" + ardAlarmTube);
                         String nearbyCamera = getNearbyCamera(new double[]{ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude()});
                         if (StringUtils.isNotEmpty(nearbyCamera)) {
-                            messagesEnqueued(nearbyCamera, ardAlarmTube.getId(), "sys_tube_leak", ardAlarmTube.getAlarmTime(), 1);
+                            messagesEnqueued(nearbyCamera, ardAlarmTube.getId(), "sys_tube_leak", ardAlarmTube.getAlarmTime(), 1,1);
                         }
                     }
                     //endregion
@@ -357,26 +357,6 @@
                     int aac = ardAlarmCameraMapper.insertArdAlarmCamera(ardAlarmCamera);
                     if (aac > 0) {
                         log.debug("camera鍏ュ簱鎴愬姛锛�" + ardAlarmCamera);
-                        String nearbyCamera = getNearbyCamera(new double[]{ardAlarmCamera.getLongitude(), ardAlarmCamera.getLatitude()});
-                        if (StringUtils.isNotEmpty(nearbyCamera)) {
-                            messagesEnqueued(nearbyCamera, ardAlarmCamera.getId(), "sys_camera", ardAlarmCamera.getAlarmTime(), 1);
-                        }
-                        //寮曞褰曞儚
-//                        CameraCmd cmd = new CameraCmd();
-//                        cmd.setRecordBucketName("record");
-//                        cmd.setRecordObjectName("camera");
-//                        cmd.setOperator("sys_camera");
-//                        cmd.setExpired(30);
-//                        cmd.setTargetPosition(new double[]{ardAlarmCamera.getLongitude(), ardAlarmCamera.getLatitude()});
-//                        boolean res = guideCamera(cmd);
-//                        if (res) {
-//                            String url = alarmToRecord(cmd);
-//                            if (StringUtils.isNotEmpty(url)) {
-//                                //鏇存柊褰曞儚
-//                                ardAlarmCamera.setRecordUrl(url);
-//                                ardAlarmCameraMapper.updateArdAlarmCamera(ardAlarmCamera);
-//                            }
-//                        }
                     }
                     //endregion
                     break;
@@ -410,41 +390,36 @@
                             String cameraIdWithTower = ardAlarmRadarMapper.getCameraByRadar(radarAlarmData.getRadarId());
                             if (StringUtils.isNotNull(cameraIdWithTower) && StringUtils.isNotEmpty(cameraIdWithTower)) {
                                 //鍏ラ槦鍒楀緟寮曞
-                                messagesEnqueued(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getAlarmTime(), 1);
+                                messagesEnqueued(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getAlarmTime(), 1,1);
                             }
                         } else {
                             //5鍒嗛挓鍐呮湁寮曞
                             ardAlarmRadar.setGuideFlag(0);
                             int count = ardAlarmRadarMapper.getArdAlarmRadarWithNotGuide(ardAlarmRadar, AlarmRadar.getCreateTime());
+                            //鏈紩瀵艰秴杩�3娆★紝鐩存帴鍏ュ簱鍏ラ槦
                             if (count >= 3) {
-                                //鏈紩瀵艰秴杩�3娆★紝鐩存帴鍏ュ簱鍏ラ槦
-                                //5鍒嗛挓鍐呮湭寮曞鐩存帴鍏ュ簱
                                 ardAlarmRadar.setGuideFlag(1);
                                 ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar);
-                                //鍏ラ槦鍒楀緟寮曞
+
                                 //鑾峰彇闆疯揪鎵�鍦ㄥ涓婄殑澶у厜鐢�
                                 String cameraIdWithTower = ardAlarmRadarMapper.getCameraByRadar(radarAlarmData.getRadarId());
                                 if (StringUtils.isNotNull(cameraIdWithTower) && StringUtils.isNotEmpty(cameraIdWithTower)) {
                                     //濡傛灉闆疯揪濉斾笂鏈夊厜鐢�
-                                    messagesEnqueued(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getAlarmTime(), count);
+                                    messagesEnqueued(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getAlarmTime(), count,1);
+                                }
+                                //鑾峰彇鎶ヨ鐐瑰叧鑱旂殑澶у厜鐢�
+                                ArdAlarmpointsWell ardAlarmpointsWell = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(ardAlarmRadar.getName());
+                                if(StringUtils.isNotNull(ardAlarmpointsWell) && StringUtils.isNotEmpty(ardAlarmpointsWell.getCameraId()))
+                                {
+                                    String cameraId = ardAlarmpointsWell.getCameraId();
+                                    //濡傛灉鎶ヨ鐐瑰叧鑱斾簡鍏夌數
+                                    messagesEnqueued(cameraId, uuid, alarmType, ardAlarmRadar.getAlarmTime(), count,1);
                                 }
                             } else {
                                 //鏈紩瀵兼湭瓒呰繃3娆★紝鐩存帴鍏ュ簱
                                 ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar);
                             }
-
                         }
-
-
-                        //鑾峰彇鍏磋叮鐐瑰叧鑱旂殑澶у厜鐢�
-//                            ArdAlarmpointsWell well=new ArdAlarmpointsWell();
-//                            well.setWellId(ardAlarmRadar.getName());
-//                            List<ArdAlarmpointsWell> ardAlarmpointsWells = ardAlarmpointsWellMapper.selectArdAlarmpointsWellList(well);
-//                            if(ardAlarmpointsWells!=null&&ardAlarmpointsWells.size()>0)
-//                            {
-//                                String cameraIdWithWell = ardAlarmpointsWells.get(0).getCameraId();
-//                            }
-
                     }
                     //endregion
                     break;
@@ -459,16 +434,29 @@
     /**
      * 娑堟伅鍏ラ槦
      */
-    private void messagesEnqueued (String cameraId, String alarmId, String alarmType, Date alarmTime, Integer num) {
+    private void messagesEnqueued(String cameraId, String alarmId, String alarmType, Date alarmTime, Integer num, Integer recordSn) {
+
         GuideTask guideTask = new GuideTask();
+        /*閰嶇疆鐩告満ID*/
         guideTask.setCameraId(cameraId);
+        /*鏍规嵁閰嶇疆鏃堕棿閰嶇疆閫氶亾*/
+        String dayNightTime = redisCache.getCacheObject("sys_config:dayNightTime");
+        Integer channel = ArdTool.getChannelBydayNightTime(dayNightTime);
+        guideTask.setChanNum(channel);
+        /*閰嶇疆鎶ヨID*/
         guideTask.setAlarmId(alarmId);
+        /*閰嶇疆鎶ヨ鏃堕棿*/
         SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         guideTask.setAlarmTime(fmt.format(alarmTime));
+        /*閰嶇疆鎶ヨ浼樺厛绾�*/
         Integer priority = CamPriority.priorityMap.get(alarmType);
         guideTask.setPriority(priority);
+        /*閰嶇疆鎶ヨ娆℃暟*/
         guideTask.setNum(num);
-        queueManager.addTaskToQueue(cameraId,guideTask);
+        /*閰嶇疆褰曞儚瀛樺偍浣嶇疆*/
+        guideTask.setRecordSn(recordSn);
+        /*娑堟伅鍏ラ槦*/
+        queueManager.addTaskToQueue(cameraId, guideTask);
 //        PriorityBlockingQueue<GuideTask> priorityBlockingQueue = GuidePriorityQueue.cameraQueueMap.get(guideTask.getCameraId());
 //        priorityBlockingQueue.add(guideTask);
     }
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueManager.java b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueManager.java
index 0703126..f9b3861 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueManager.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueManager.java
@@ -13,7 +13,7 @@
 
 /**
  * @ClassName QueueManager
- * @Description:
+ * @Description: 闃熷垪绠$悊
  * @Author 鍒樿嫃涔�
  * @Date 2023/6/29 21:09
  * @Version 1.0
@@ -26,6 +26,7 @@
     private QueueTaskExecutor taskExecutor;
     private Map<String, TaskThread> threadMap = new ConcurrentHashMap<>();
 
+    /*鍐呴儴闈欐�佺被*/
     private static class TaskThread {
         private Thread thread;
         private GuideTask currentTask;
@@ -48,36 +49,49 @@
         }
     }
 
-    public void addTaskToQueue(String queueName, GuideTask task) {
-        PriorityBlockingQueue<GuideTask> guideTaskQueue = GuidePriorityQueue.cameraQueueMap.get(queueName);
+    /**
+     * 寮曞浠诲姟鍏ラ槦
+     * 鍒樿嫃涔�
+     * 2023/6/30 8:57
+     */
+    public void addTaskToQueue(String cameraId, GuideTask task) {
+        /*閫氳繃鐩告満ID鑾峰彇寮曞闃熷垪锛屽苟灏嗗紩瀵间换鍔″姞鍏ラ槦鍒�*/
+        PriorityBlockingQueue<GuideTask> guideTaskQueue = GuidePriorityQueue.cameraQueueMap.get(cameraId);
         guideTaskQueue.add(task);
-        TaskThread currentTaskThread = threadMap.get(queueName);
+        /*鑾峰彇璇ョ浉鏈虹殑褰撳墠鎵ц绾跨▼*/
+        TaskThread currentTaskThread = threadMap.get(cameraId);
+        //濡傛灉闃熷垪褰撳墠绾跨▼姝e湪杩愯锛岃嫢鍏ラ槦浠诲姟浼樺厛绾уぇ浜庡綋鍓嶄换鍔′紭鍏堢骇锛屽垯缁堟褰撳墠绾跨▼
         if (currentTaskThread != null && task.getPriority() > currentTaskThread.getCurrentTask().getPriority()) {
             currentTaskThread.getThread().interrupt();
         }
-
-        // Start a new thread if no thread is currently running for the queue
+        //濡傛灉闃熷垪褰撳墠娌℃湁绾跨▼姝e湪杩愯锛屽垯鍚姩鏂扮嚎绋�
         if (currentTaskThread == null || !currentTaskThread.getThread().isAlive()) {
-            Thread newThread = createThread(queueName, guideTaskQueue);
-            threadMap.put(queueName, new TaskThread(newThread, task));
+            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();
                     taskExecutor.processTask(task);
                     GuidePriorityQueue.printPriorityQueue();
-                    // Update the current task for the thread
+                    // 鏇存柊绾跨▼鐨勫綋鍓嶄换鍔�
                     TaskThread currentTaskThread = threadMap.get(queueName);
                     if (currentTaskThread != null) {
                         currentTaskThread.setCurrentTask(task);
                     }
                 } catch (InterruptedException e) {
-                    // Thread interrupted, exit the loop
+                    //绾跨▼涓柇锛岄��鍑哄惊鐜�
                     Thread.currentThread().interrupt();
                 }
             }
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java
index 553da24..3f43366 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java
@@ -1,25 +1,83 @@
 package com.ruoyi.alarm.globalAlarm.service.impl;
 
+import com.ruoyi.alarm.globalAlarm.domain.GuideTask;
+import com.ruoyi.alarm.radarAlarm.domain.ArdAlarmRadar;
+import com.ruoyi.alarm.radarAlarm.service.IArdAlarmRadarService;
+import com.ruoyi.alarm.tubeAlarm.domain.ArdAlarmTube;
+import com.ruoyi.alarm.tubeAlarm.service.IArdAlarmTubeService;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.device.camera.domain.CameraCmd;
+import com.ruoyi.device.hiksdk.service.IHikClientService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
 /**
  * @ClassName QueueTaskExecutor
- * @Description:
+ * @Description: 闃熷垪浠诲姟鎵ц鍣�
  * @Author 鍒樿嫃涔�
  * @Date 2023/6/29 21:10
  * @Version 1.0
  */
 
-import com.ruoyi.alarm.globalAlarm.domain.GuideTask;
-import org.springframework.stereotype.Component;
-
 @Component
+@Slf4j
 public class QueueTaskExecutor {
+    @Resource
+    IHikClientService hikClientService;
+    @Resource
+    IArdAlarmTubeService ardAlarmTubeService;
+    @Resource
+    IArdAlarmRadarService ardAlarmRadarService;
+
     public void processTask(GuideTask guideTask) {
-        System.out.println("Executing task: " + guideTask.getAlarmId());
         try {
-            Thread.sleep(30000);
-        } catch (InterruptedException e) {
-            e.printStackTrace();
+            CameraCmd cmd = new CameraCmd();
+            cmd.setCameraId(guideTask.getCameraId());
+            cmd.setChannelNum(guideTask.getNum());
+            boolean guideRes = hikClientService.guideTargetPosition(cmd);
+            if (guideRes) {
+                hikClientService.controlLock(cmd);//涓婇攣
+                cmd.setEnable(true);//寮�濮嬪綍鍍�
+                hikClientService.recordToMinio(cmd);//寮�濮嬪綍鍍�
+                Thread.sleep(30000);
+                cmd.setEnable(false);//鍋滄褰曞儚
+                cmd.setUploadMinio(true);//涓婁紶minio
+                String url = hikClientService.recordToMinio(cmd);//鍋滄褰曞儚杩斿洖url
+                if (StringUtils.isNotEmpty(url)) {
+                    switch (guideTask.getAlarmType()) {
+                        case "sys_tube_leak":
+                            ArdAlarmTube ardAlarmTube = new ArdAlarmTube();
+                            ardAlarmTube.setId(guideTask.getAlarmId());
+                            ardAlarmTube.setRecordUrl(url);
+                            ardAlarmTubeService.updateArdAlarmTube(ardAlarmTube);
+                            break;
+                        case "sys_radar_move":
+                            ArdAlarmRadar ardAlarmRadar = new ArdAlarmRadar();
+                            ardAlarmRadar.setId(guideTask.getAlarmId());
+                            if (guideTask.getRecordSn().equals(1)) {
+                                ardAlarmRadar.setRecordUrl1(url);
+                            } else {
+                                ardAlarmRadar.setRecordUrl2(url);
+                            }
+                            ardAlarmRadarService.updateArdAlarmRadar(ardAlarmRadar);
+                            break;
+                        case "sys_radar_fire":
+                            ardAlarmRadar = new ArdAlarmRadar();
+                            ardAlarmRadar.setId(guideTask.getAlarmId());
+                            if (guideTask.getRecordSn().equals(1)) {
+                                ardAlarmRadar.setRecordUrl1(url);
+                            } else {
+                                ardAlarmRadar.setRecordUrl2(url);
+                            }
+                            ardAlarmRadarService.updateArdAlarmRadar(ardAlarmRadar);
+                            break;
+                    }
+                }
+            }
+        } catch (Exception ex) {
+            log.info("鑷姩寮曞寮傚父:" + ex.getMessage());
         }
-        System.out.println("finished task: " + guideTask.getAlarmId());
     }
 }
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/domain/ArdAlarmRadar.java b/ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/domain/ArdAlarmRadar.java
index 2a92045..b58c0fb 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/domain/ArdAlarmRadar.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/domain/ArdAlarmRadar.java
@@ -73,4 +73,13 @@
      * 寮曞鏍囪
      */
     private  Integer guideFlag;
+    /**
+     * 褰曞儚url1
+     */
+    private  String recordUrl1;
+    /**
+     * 褰曞儚url2
+     */
+    private  String recordUrl2;
+
 }
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SdkTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SdkTask.java
index 674c5bd..7a93710 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SdkTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SdkTask.java
@@ -6,6 +6,7 @@
 import com.ruoyi.device.camera.domain.ArdCameras;
 import com.ruoyi.device.camera.domain.CameraCmd;
 import com.ruoyi.device.camera.service.IArdCamerasService;
+import com.ruoyi.device.hiksdk.common.GlobalVariable;
 import com.ruoyi.device.hiksdk.service.IHikClientService;
 import org.springframework.stereotype.Component;
 
@@ -46,14 +47,17 @@
             CameraCmd cmd = new CameraCmd();
             cmd.setCameraId(camera.getId());
             cmd.setChannelNum(1);
-            Map<String, Object> ptz = hikClientService.getPtz(cmd);
-            if(StringUtils.isNull(ptz))
+            if (!GlobalVariable.loginMap.containsKey(camera.getId()))//鍙帹閫佺櫥褰曟垚鍔熺殑鐩告満
             {
+                continue;
+            }
+            Map<String, Object> ptz = hikClientService.getPtz(cmd);
+            if (StringUtils.isNull(ptz)) {
                 continue;
             }
             if (ptz.size() > 0) {
                 ptz.put("cameraId", camera.getId());
-                ptz.put("operatorExpired",camera.getOperatorExpired());
+                ptz.put("operatorExpired", camera.getOperatorExpired());
                 list.add(ptz);
             }
         }

--
Gitblit v1.9.3