From 3daa378637a5ceeb4965b554f528a7a36e3d5c2a Mon Sep 17 00:00:00 2001
From: liusuyi <13324259@qq.com>
Date: 星期四, 29 六月 2023 23:17:39 +0800
Subject: [PATCH] 优化
---
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java | 230 ++++++++++++-------------
ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java | 6
ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java | 105 +++++------
ard-work/src/main/java/com/ruoyi/constant/CamPriority.java | 22 +
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueManager.java | 86 +++++++++
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java | 25 ++
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuidePriorityQueue.java | 17 +
ard-work/src/main/java/com/ruoyi/utils/tube/TubeTools.java | 10
8 files changed, 307 insertions(+), 194 deletions(-)
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuidePriorityQueue.java b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuidePriorityQueue.java
index 11c5aac..1ba629f 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuidePriorityQueue.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuidePriorityQueue.java
@@ -1,9 +1,12 @@
package com.ruoyi.alarm.globalAlarm.domain;
+import lombok.extern.slf4j.Slf4j;
+
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
+import java.util.concurrent.PriorityBlockingQueue;
/**
* @Description: 寮曞浼樺厛绾ч槦鍒�
@@ -12,11 +15,12 @@
* @Date: 2023骞�06鏈�29鏃�11:18
* @Version: 1.0
**/
+@Slf4j
public class GuidePriorityQueue {
/**
* 鐩告満闃熷垪锛屾瘡涓浉鏈轰竴涓紭鍏堢骇闃熷垪
*/
- public static Map<String, PriorityQueue<GuideTask>> cameraQueueMap = new HashMap<>();
+ public static Map<String, PriorityBlockingQueue<GuideTask>> cameraQueueMap = new HashMap<>();
/**
* 鍒涘缓涓�涓嚜瀹氫箟鐨勬瘮杈冨櫒锛屾牴鎹紭鍏堢骇灞炴�ц繘琛屾瘮杈�
@@ -29,4 +33,15 @@
return Comparator;
}
+ /**
+ * 娴嬭瘯浣跨敤锛氭墦鍗伴槦鍒�
+ */
+ public static void printPriorityQueue() {
+ for (String cameraId : GuidePriorityQueue.cameraQueueMap.keySet()) {
+ PriorityBlockingQueue<GuideTask> priorityQueue = GuidePriorityQueue.cameraQueueMap.get(cameraId);
+ for (GuideTask task : priorityQueue) {
+ log.info("alarmId:" + task.getAlarmId() + " alarmTime:" + task.getAlarmTime() + " priority:" + task.getPriority() + " num:" + task.getNum() + " cameraId:" + task.getCameraId());
+ }
+ }
+ }
}
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 2fa6745..1a0e990 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
@@ -43,6 +43,7 @@
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
+import java.util.concurrent.PriorityBlockingQueue;
import java.util.stream.Collectors;
@@ -56,6 +57,7 @@
@Service
@Slf4j(topic = "mqtt")
public class GlobalAlarmServiceImpl implements IGlobalAlarmService {
+ //region 渚濊禆娉ㄥ叆
@Resource
private ArdAlarmRadarMapper ardAlarmRadarMapper;
@Resource
@@ -78,6 +80,36 @@
private IHikClientService hikClientService;
@Resource
private RedisCache redisCache;
+ @Resource
+ private QueueManager queueManager;
+ //endregion
+
+ /**
+ * @鎻忚堪 鏌ヨ鎵�鏈夋姤璀︾殑褰撳墠鏁伴噺
+ * @鍙傛暟 []
+ * @杩斿洖鍊� java.util.Map<java.lang.String, java.lang.Integer>
+ * @鍒涘缓浜� 鍒樿嫃涔�
+ * @鍒涘缓鏃堕棿 2023/6/13 16:30
+ * @淇敼浜哄拰鍏跺畠淇℃伅
+ */
+ @Override
+ public Map<String, Object> selectAlarmLogsCount() {
+ Map<String, Object> map = new HashMap<>();
+ Map<String, Integer> countMap = new HashMap<>();
+ String refreshTime = configService.selectConfigByKey("refreshTime");
+ int count1001 = ardAlarmStealelecMapper.selectCountByStartTime(refreshTime);
+ countMap.put("1001", count1001);
+ int count1002 = ardAlarmCameraMapper.selectCountByAlarmTime(refreshTime);
+ countMap.put("1002", count1002);
+ int count1003 = ardAlarmRadarMapper.selectCountByAlarmTime(refreshTime, "杩愬姩鐩爣妫�娴�");
+ countMap.put("1003", count1003);
+ int count1004 = ardAlarmRadarMapper.selectCountByAlarmTime(refreshTime, "鐑簮妫�娴�");
+ countMap.put("1004", count1004);
+ int count1014 = ardAlarmTubeMapper.selectCountByAlarmTime(refreshTime);
+ countMap.put("1014", count1014);
+ map.put("20000", countMap);
+ return map;
+ }
/**
* @鎻忚堪 鎸夋潯浠舵煡璇㈡姤璀�
@@ -174,6 +206,61 @@
}
/**
+ * @鎻忚堪 鍘嗗彶鎶ヨ鏌ヨ
+ * @鍙傛暟 [command, beginTime, endTime, pageNum, pageSize]
+ * @杩斿洖鍊� java.lang.Object
+ * @鍒涘缓浜� 鍒樿嫃涔�
+ * @鍒涘缓鏃堕棿 2023/6/28 13:30
+ * @淇敼浜哄拰鍏跺畠淇℃伅
+ */
+ @Override
+ public Object selectAlarmList(Integer command, String beginTime, String endTime, Integer pageNum, Integer pageSize) {
+ Map<String, Object> params = new HashMap<>();
+ params.put("beginTime", beginTime);
+ params.put("endTime", endTime);
+ switch (command) {
+ case 1001:
+ ArdAlarmStealelec aas = new ArdAlarmStealelec();
+ aas.setParams(params);
+ aas.setPageNum(pageNum);
+ aas.setPageSize(pageSize);
+ List<ArdAlarmStealelec> ardAlarmStealelecs = ardAlarmStealelecMapper.selectArdAlarmStealelecList(aas);
+ return ardAlarmStealelecs;
+ case 1002:
+ ArdAlarmCamera aac = new ArdAlarmCamera();
+ aac.setParams(params);
+ aac.setPageNum(pageNum);
+ aac.setPageSize(pageSize);
+ List<ArdAlarmCamera> ardAlarmCameras = ardAlarmCameraMapper.selectArdAlarmCameraList(aac);
+ return ardAlarmCameras;
+ case 1003:
+ ArdAlarmRadar aar = new ArdAlarmRadar();
+ aar.setParams(params);
+ aar.setPageNum(pageNum);
+ aar.setPageSize(pageSize);
+ aar.setAlarmType("杩愬姩鐩爣妫�娴�");
+ List<ArdAlarmRadar> ardAlarmRadar = ardAlarmRadarMapper.selectArdAlarmRadarList(aar);
+ return ardAlarmRadar;
+ case 1004:
+ ArdAlarmRadar aarr = new ArdAlarmRadar();
+ aarr.setParams(params);
+ aarr.setPageNum(pageNum);
+ aarr.setPageSize(pageSize);
+ aarr.setAlarmType("鐑簮妫�娴�");
+ List<ArdAlarmRadar> ardAlarmRadarr = ardAlarmRadarMapper.selectArdAlarmRadarList(aarr);
+ return ardAlarmRadarr;
+ case 1014:
+ ArdAlarmTube aat = new ArdAlarmTube();
+ aat.setParams(params);
+ aat.setPageNum(pageNum);
+ aat.setPageSize(pageSize);
+ List<ArdAlarmTube> ardAlarmTubes = ardAlarmTubeMapper.selectArdAlarmTubeList(aat);
+ return ardAlarmTubes;
+ }
+ return null;
+ }
+
+ /**
* @鎻忚堪 鎸夋潯浠舵洿鏂版煡鐪嬫椂闂�
* @鍙傛暟 [condition]
* @杩斿洖鍊� java.lang.Object
@@ -215,21 +302,19 @@
* @淇敼浜哄拰鍏跺畠淇℃伅
*/
@Override
-// @Async("alarmExecutor")
+ @Async("alarmExecutor")
public void receiveAlarm(String topic, String message) {
try {
switch (topic) {
case "stealelec":
//region 澶勭悊鐩楃數鎶ヨ
ArdAlarmStealelec ardAlarmStealelec = JSONObject.parseObject(message, ArdAlarmStealelec.class);
-
- ArdAlarmStealelec existe = ardAlarmStealelecMapper.selectByPrimaryKey(ardAlarmStealelec.getId());
- if (StringUtils.isNotNull(existe)) {
- return;
- }
- int aas = ardAlarmStealelecMapper.insertArdAlarmStealelec(ardAlarmStealelec);
- if (aas > 0) {
- log.info("stealelec鍏ュ簱鎴愬姛锛�" + ardAlarmStealelec);
+ ArdAlarmStealelec isExiste = ardAlarmStealelecMapper.selectByPrimaryKey(ardAlarmStealelec.getId());
+ if (StringUtils.isNull(isExiste)) {
+ int aas = ardAlarmStealelecMapper.insertArdAlarmStealelec(ardAlarmStealelec);
+ if (aas > 0) {
+ log.info("stealelec鍏ュ簱鎴愬姛锛�" + ardAlarmStealelec);
+ }
}
//endregion
break;
@@ -258,8 +343,8 @@
if (aat > 0) {
log.debug("tube鍏ュ簱鎴愬姛锛�" + ardAlarmTube);
String nearbyCamera = getNearbyCamera(new double[]{ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude()});
- if(StringUtils.isNotEmpty(nearbyCamera)) {
- addTaskQueue(nearbyCamera, ardAlarmTube.getId(), "sys_tube_leak", ardAlarmTube.getAlarmTime(), 1);
+ if (StringUtils.isNotEmpty(nearbyCamera)) {
+ messagesEnqueued(nearbyCamera, ardAlarmTube.getId(), "sys_tube_leak", ardAlarmTube.getAlarmTime(), 1);
}
}
//endregion
@@ -273,8 +358,8 @@
if (aac > 0) {
log.debug("camera鍏ュ簱鎴愬姛锛�" + ardAlarmCamera);
String nearbyCamera = getNearbyCamera(new double[]{ardAlarmCamera.getLongitude(), ardAlarmCamera.getLatitude()});
- if(StringUtils.isNotEmpty(nearbyCamera)) {
- addTaskQueue(nearbyCamera, ardAlarmCamera.getId(), "sys_camera", ardAlarmCamera.getAlarmTime(), 1);
+ if (StringUtils.isNotEmpty(nearbyCamera)) {
+ messagesEnqueued(nearbyCamera, ardAlarmCamera.getId(), "sys_camera", ardAlarmCamera.getAlarmTime(), 1);
}
//寮曞褰曞儚
// CameraCmd cmd = new CameraCmd();
@@ -325,7 +410,7 @@
String cameraIdWithTower = ardAlarmRadarMapper.getCameraByRadar(radarAlarmData.getRadarId());
if (StringUtils.isNotNull(cameraIdWithTower) && StringUtils.isNotEmpty(cameraIdWithTower)) {
//鍏ラ槦鍒楀緟寮曞
- addTaskQueue(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getAlarmTime(), 1);
+ messagesEnqueued(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getAlarmTime(), 1);
}
} else {
//5鍒嗛挓鍐呮湁寮曞
@@ -341,7 +426,7 @@
String cameraIdWithTower = ardAlarmRadarMapper.getCameraByRadar(radarAlarmData.getRadarId());
if (StringUtils.isNotNull(cameraIdWithTower) && StringUtils.isNotEmpty(cameraIdWithTower)) {
//濡傛灉闆疯揪濉斾笂鏈夊厜鐢�
- addTaskQueue(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getAlarmTime(), count);
+ messagesEnqueued(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getAlarmTime(), count);
}
} else {
//鏈紩瀵兼湭瓒呰繃3娆★紝鐩存帴鍏ュ簱
@@ -361,21 +446,20 @@
// }
}
- printPriorityQueue();
//endregion
break;
}
- printPriorityQueue();
+ GuidePriorityQueue.printPriorityQueue();//鎵撳嵃闃熷垪
} catch (Exception ex) {
log.error("鎺ユ敹鎶ヨ寮傚父:" + ex.getMessage());
}
}
- /**
- * 寮曞浠诲姟鍏ラ槦鏂规硶
- */
- private void addTaskQueue(String cameraId, String alarmId, String alarmType, Date alarmTime, Integer num) {
+ /**
+ * 娑堟伅鍏ラ槦
+ */
+ private void messagesEnqueued (String cameraId, String alarmId, String alarmType, Date alarmTime, Integer num) {
GuideTask guideTask = new GuideTask();
guideTask.setCameraId(cameraId);
guideTask.setAlarmId(alarmId);
@@ -384,23 +468,9 @@
Integer priority = CamPriority.priorityMap.get(alarmType);
guideTask.setPriority(priority);
guideTask.setNum(num);
-
- PriorityQueue<GuideTask> priorityQueue = GuidePriorityQueue.cameraQueueMap.get(guideTask.getCameraId());
- priorityQueue.add(guideTask);
- }
-
- /**
- * 鎵撳嵃闃熷垪
- */
- private void printPriorityQueue() {
- for (String cameraId : GuidePriorityQueue.cameraQueueMap.keySet()) {
- log.info("cameraId" + cameraId);
- PriorityQueue<GuideTask> priorityQueue = GuidePriorityQueue.cameraQueueMap.get(cameraId);
- for (GuideTask task : priorityQueue) {
- log.info("alarmId:" + task.getAlarmId() + " alarmTime:" + task.getAlarmTime() + " priority:" + task.getPriority() + " num:" + task.getNum() + " cameraId:" + task.getCameraId());
- }
-
- }
+ queueManager.addTaskToQueue(cameraId,guideTask);
+// PriorityBlockingQueue<GuideTask> priorityBlockingQueue = GuidePriorityQueue.cameraQueueMap.get(guideTask.getCameraId());
+// priorityBlockingQueue.add(guideTask);
}
/**
@@ -475,7 +545,7 @@
* @鍒涘缓鏃堕棿 2023/6/28 16:33
* @淇敼浜哄拰鍏跺畠淇℃伅
*/
- public String alarmToRecord(CameraCmd cmd) {
+ private String alarmToRecord(CameraCmd cmd) {
String url = "";
try {
log.debug("寮曞鎴愬姛锛屽皾璇曞綍鍍�");
@@ -497,88 +567,6 @@
log.error("褰曞儚寮傚父:" + ex.getMessage());
}
return url;
- }
-
- /**
- * @鎻忚堪 鏌ヨ鎵�鏈夋姤璀︾殑褰撳墠鏁伴噺
- * @鍙傛暟 []
- * @杩斿洖鍊� java.util.Map<java.lang.String, java.lang.Integer>
- * @鍒涘缓浜� 鍒樿嫃涔�
- * @鍒涘缓鏃堕棿 2023/6/13 16:30
- * @淇敼浜哄拰鍏跺畠淇℃伅
- */
- @Override
- public Map<String, Object> selectAlarmLogsCount() {
- Map<String, Object> map = new HashMap<>();
- Map<String, Integer> countMap = new HashMap<>();
- String refreshTime = configService.selectConfigByKey("refreshTime");
- int count1001 = ardAlarmStealelecMapper.selectCountByStartTime(refreshTime);
- countMap.put("1001", count1001);
- int count1002 = ardAlarmCameraMapper.selectCountByAlarmTime(refreshTime);
- countMap.put("1002", count1002);
- int count1003 = ardAlarmRadarMapper.selectCountByAlarmTime(refreshTime, "杩愬姩鐩爣妫�娴�");
- countMap.put("1003", count1003);
- int count1004 = ardAlarmRadarMapper.selectCountByAlarmTime(refreshTime, "鐑簮妫�娴�");
- countMap.put("1004", count1004);
- int count1014 = ardAlarmTubeMapper.selectCountByAlarmTime(refreshTime);
- countMap.put("1014", count1014);
- map.put("20000", countMap);
- return map;
- }
-
- /**
- * @鎻忚堪 鍘嗗彶鎶ヨ鏌ヨ
- * @鍙傛暟 [command, beginTime, endTime, pageNum, pageSize]
- * @杩斿洖鍊� java.lang.Object
- * @鍒涘缓浜� 鍒樿嫃涔�
- * @鍒涘缓鏃堕棿 2023/6/28 13:30
- * @淇敼浜哄拰鍏跺畠淇℃伅
- */
- @Override
- public Object selectAlarmList(Integer command, String beginTime, String endTime, Integer pageNum, Integer pageSize) {
- Map<String, Object> params = new HashMap<>();
- params.put("beginTime", beginTime);
- params.put("endTime", endTime);
- switch (command) {
- case 1001:
- ArdAlarmStealelec aas = new ArdAlarmStealelec();
- aas.setParams(params);
- aas.setPageNum(pageNum);
- aas.setPageSize(pageSize);
- List<ArdAlarmStealelec> ardAlarmStealelecs = ardAlarmStealelecMapper.selectArdAlarmStealelecList(aas);
- return ardAlarmStealelecs;
- case 1002:
- ArdAlarmCamera aac = new ArdAlarmCamera();
- aac.setParams(params);
- aac.setPageNum(pageNum);
- aac.setPageSize(pageSize);
- List<ArdAlarmCamera> ardAlarmCameras = ardAlarmCameraMapper.selectArdAlarmCameraList(aac);
- return ardAlarmCameras;
- case 1003:
- ArdAlarmRadar aar = new ArdAlarmRadar();
- aar.setParams(params);
- aar.setPageNum(pageNum);
- aar.setPageSize(pageSize);
- aar.setAlarmType("杩愬姩鐩爣妫�娴�");
- List<ArdAlarmRadar> ardAlarmRadar = ardAlarmRadarMapper.selectArdAlarmRadarList(aar);
- return ardAlarmRadar;
- case 1004:
- ArdAlarmRadar aarr = new ArdAlarmRadar();
- aarr.setParams(params);
- aarr.setPageNum(pageNum);
- aarr.setPageSize(pageSize);
- aarr.setAlarmType("鐑簮妫�娴�");
- List<ArdAlarmRadar> ardAlarmRadarr = ardAlarmRadarMapper.selectArdAlarmRadarList(aarr);
- return ardAlarmRadarr;
- case 1014:
- ArdAlarmTube aat = new ArdAlarmTube();
- aat.setParams(params);
- aat.setPageNum(pageNum);
- aat.setPageSize(pageSize);
- List<ArdAlarmTube> ardAlarmTubes = ardAlarmTubeMapper.selectArdAlarmTubeList(aat);
- return ardAlarmTubes;
- }
- return null;
}
}
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
new file mode 100644
index 0000000..0703126
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueManager.java
@@ -0,0 +1,86 @@
+package com.ruoyi.alarm.globalAlarm.service.impl;
+
+import com.ruoyi.alarm.globalAlarm.domain.GuidePriorityQueue;
+import com.ruoyi.alarm.globalAlarm.domain.GuideTask;
+import org.apache.tomcat.util.threads.TaskThread;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.PriorityBlockingQueue;
+
+/**
+ * @ClassName QueueManager
+ * @Description:
+ * @Author 鍒樿嫃涔�
+ * @Date 2023/6/29 21:09
+ * @Version 1.0
+ */
+
+@Component
+public class QueueManager {
+
+ @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;
+ }
+ }
+
+ public void addTaskToQueue(String queueName, GuideTask task) {
+ PriorityBlockingQueue<GuideTask> guideTaskQueue = GuidePriorityQueue.cameraQueueMap.get(queueName);
+ guideTaskQueue.add(task);
+ TaskThread currentTaskThread = threadMap.get(queueName);
+ if (currentTaskThread != null && task.getPriority() > currentTaskThread.getCurrentTask().getPriority()) {
+ currentTaskThread.getThread().interrupt();
+ }
+
+ // Start a new thread if no thread is currently running for the queue
+ if (currentTaskThread == null || !currentTaskThread.getThread().isAlive()) {
+ Thread newThread = createThread(queueName, guideTaskQueue);
+ threadMap.put(queueName, new TaskThread(newThread, task));
+ newThread.start();
+ }
+ }
+
+ 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();
+ }
+ }
+ }, queueName);
+ }
+}
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
new file mode 100644
index 0000000..553da24
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java
@@ -0,0 +1,25 @@
+package com.ruoyi.alarm.globalAlarm.service.impl;
+
+/**
+ * @ClassName QueueTaskExecutor
+ * @Description:
+ * @Author 鍒樿嫃涔�
+ * @Date 2023/6/29 21:10
+ * @Version 1.0
+ */
+
+import com.ruoyi.alarm.globalAlarm.domain.GuideTask;
+import org.springframework.stereotype.Component;
+
+@Component
+public class QueueTaskExecutor {
+ public void processTask(GuideTask guideTask) {
+ System.out.println("Executing task: " + guideTask.getAlarmId());
+ try {
+ Thread.sleep(30000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ System.out.println("finished task: " + guideTask.getAlarmId());
+ }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/constant/CamPriority.java b/ard-work/src/main/java/com/ruoyi/constant/CamPriority.java
index a9315b5..f997ff0 100644
--- a/ard-work/src/main/java/com/ruoyi/constant/CamPriority.java
+++ b/ard-work/src/main/java/com/ruoyi/constant/CamPriority.java
@@ -1,7 +1,12 @@
package com.ruoyi.constant;
+import com.ruoyi.alarm.globalAlarm.domain.GuidePriorityQueue;
+import com.ruoyi.alarm.globalAlarm.domain.GuideTask;
+import lombok.extern.slf4j.Slf4j;
+
import java.util.HashMap;
import java.util.Map;
+import java.util.PriorityQueue;
/**
* @Description: 鐩告満鎺у埗浼樺厛绾�
@@ -10,15 +15,18 @@
* @Date: 2023骞�05鏈�23鏃�11:25
* @Version: 1.0
**/
+@Slf4j
public class CamPriority {
- public static Map<String,Integer> priorityMap=new HashMap<>();
+ public static Map<String, Integer> priorityMap = new HashMap<>();
+
static {
- priorityMap.put("sys_radar_fire",999);//闆疯揪闃茬伀鎶ヨ
- priorityMap.put("sys_radar_move",999);//闆疯揪绉诲姩鎶ヨ
- priorityMap.put("sys_tube_leak",998);//绠$嚎娉勯湶鎶ヨ
- priorityMap.put("sys_camera",997);//閫氱敤鍏夌數鎶ヨ
- priorityMap.put("sys_steal_elec",996);//鐩楃數鎶ヨ
- priorityMap.put("sys_patrol_inspect",1);//宸℃
+ priorityMap.put("sys_radar_fire", 999);//闆疯揪闃茬伀鎶ヨ
+ priorityMap.put("sys_radar_move", 999);//闆疯揪绉诲姩鎶ヨ
+ priorityMap.put("sys_tube_leak", 998);//绠$嚎娉勯湶鎶ヨ
+ priorityMap.put("sys_camera", 997);//閫氱敤鍏夌數鎶ヨ
+ priorityMap.put("sys_steal_elec", 996);//鐩楃數鎶ヨ
+ priorityMap.put("sys_patrol_inspect", 1);//宸℃
}
+
}
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java
index a4d1d6c..4ea42ef 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java
@@ -13,6 +13,7 @@
import javax.annotation.Resource;
import java.util.Comparator;
import java.util.PriorityQueue;
+import java.util.concurrent.PriorityBlockingQueue;
/**
* @Description: 寮傛鐧诲綍鍥炶皟
@@ -25,6 +26,7 @@
public class LoginResultCallBack implements HCNetSDK.FLoginResultCallBack {
private ArdCameras camera;
+
public LoginResultCallBack(ArdCameras camera) {
this.camera = camera;
}
@@ -41,8 +43,8 @@
camera.setChannel((int) lpDeviceinfo.byChanNum);
//鍒涘缓寮曞闃熷垪
Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
- PriorityQueue<GuideTask> priorityQueue=new PriorityQueue<>(comparator);
- GuidePriorityQueue.cameraQueueMap.put(camera.getId(),priorityQueue);
+ PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000,comparator);
+ GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
} else {
log.info(camera.getIp() + ":" + camera.getPort() + "鐧诲綍澶辫触");
camera.setChannel(0);
diff --git a/ard-work/src/main/java/com/ruoyi/utils/tube/TubeTools.java b/ard-work/src/main/java/com/ruoyi/utils/tube/TubeTools.java
index efa4764..9f633bd 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/tube/TubeTools.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/tube/TubeTools.java
@@ -53,12 +53,10 @@
}
/**
- * @鎻忚堪 璁$畻鍧愭爣
- * @鍙傛暟 [ardTubesDetails, alarmPointDistance]
- * @杩斿洖鍊� void
- * @鍒涘缓浜� 鍒樿嫃涔�
- * @鍒涘缓鏃堕棿 2023/6/8 14:38
- * @淇敼浜哄拰鍏跺畠淇℃伅
+ * 璁$畻鍧愭爣
+ *
+ * 鍒樿嫃涔�
+ * 2023/6/8 14:38
*/
public static GeoPoint CalculateCoordinates(List<ArdTubesDetails> ardTubesDetails, Integer alarmPointDistance) {
try {
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
index 00f2c57..60a46f4 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
@@ -9,15 +9,15 @@
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
+
import org.apache.commons.lang3.time.DateFormatUtils;
/**
* 鏃堕棿宸ュ叿绫�
- *
+ *
* @author ruoyi
*/
-public class DateUtils extends org.apache.commons.lang3.time.DateUtils
-{
+public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
public static String YYYY = "yyyy";
public static String YYYY_MM = "yyyy-MM";
@@ -31,65 +31,54 @@
public static String HH_MM_SS = "HH:mm:ss";
private static String[] parsePatterns = {
- "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
+ "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
/**
* 鑾峰彇褰撳墠Date鍨嬫棩鏈�
- *
+ *
* @return Date() 褰撳墠鏃ユ湡
*/
- public static Date getNowDate()
- {
+ public static Date getNowDate() {
return new Date();
}
/**
* 鑾峰彇褰撳墠鏃ユ湡, 榛樿鏍煎紡涓簓yyy-MM-dd
- *
+ *
* @return String
*/
- public static String getDate()
- {
+ public static String getDate() {
return dateTimeNow(YYYY_MM_DD);
}
- public static final String getTime()
- {
+ public static final String getTime() {
return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
}
- public static final String dateTimeNow()
- {
+ public static final String dateTimeNow() {
return dateTimeNow(YYYYMMDDHHMMSS);
}
public static final String dateTimeNowMS()
{
return dateTimeNow(YYYY_MM_DD_HH_MM_SS_MS);
}
- public static final String dateTimeNow(final String format)
- {
+ public static final String dateTimeNow(final String format) {
return parseDateToStr(format, new Date());
}
- public static final String dateTime(final Date date)
- {
+ public static final String dateTime(final Date date) {
return parseDateToStr(YYYY_MM_DD, date);
}
- public static final String parseDateToStr(final String format, final Date date)
- {
+ public static final String parseDateToStr(final String format, final Date date) {
return new SimpleDateFormat(format).format(date);
}
- public static final Date dateTime(final String format, final String ts)
- {
- try
- {
+ public static final Date dateTime(final String format, final String ts) {
+ try {
return new SimpleDateFormat(format).parse(ts);
- }
- catch (ParseException e)
- {
+ } catch (ParseException e) {
throw new RuntimeException(e);
}
}
@@ -97,8 +86,7 @@
/**
* 鏃ユ湡璺緞 鍗冲勾/鏈�/鏃� 濡�2018/08/08
*/
- public static final String datePath()
- {
+ public static final String datePath() {
Date now = new Date();
return DateFormatUtils.format(now, "yyyy/MM/dd");
}
@@ -106,8 +94,7 @@
/**
* 鏃ユ湡璺緞 鍗冲勾/鏈�/鏃� 濡�20180808
*/
- public static final String dateTime()
- {
+ public static final String dateTime() {
Date now = new Date();
return DateFormatUtils.format(now, "yyyyMMdd");
}
@@ -115,18 +102,13 @@
/**
* 鏃ユ湡鍨嬪瓧绗︿覆杞寲涓烘棩鏈� 鏍煎紡
*/
- public static Date parseDate(Object str)
- {
- if (str == null)
- {
+ public static Date parseDate(Object str) {
+ if (str == null) {
return null;
}
- try
- {
+ try {
return parseDate(str.toString(), parsePatterns);
- }
- catch (ParseException e)
- {
+ } catch (ParseException e) {
return null;
}
}
@@ -134,8 +116,7 @@
/**
* 鑾峰彇鏈嶅姟鍣ㄥ惎鍔ㄦ椂闂�
*/
- public static Date getServerStartDate()
- {
+ public static Date getServerStartDate() {
long time = ManagementFactory.getRuntimeMXBean().getStartTime();
return new Date(time);
}
@@ -143,16 +124,14 @@
/**
* 璁$畻鐩稿樊澶╂暟
*/
- public static int differentDaysByMillisecond(Date date1, Date date2)
- {
+ public static int differentDaysByMillisecond(Date date1, Date date2) {
return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24)));
}
/**
* 璁$畻涓や釜鏃堕棿宸�
*/
- public static String getDatePoor(Date endDate, Date nowDate)
- {
+ public static String getDatePoor(Date endDate, Date nowDate) {
long nd = 1000 * 24 * 60 * 60;
long nh = 1000 * 60 * 60;
long nm = 1000 * 60;
@@ -173,8 +152,7 @@
/**
* 澧炲姞 LocalDateTime ==> Date
*/
- public static Date toDate(LocalDateTime temporalAccessor)
- {
+ public static Date toDate(LocalDateTime temporalAccessor) {
ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault());
return Date.from(zdt.toInstant());
}
@@ -182,31 +160,29 @@
/**
* 澧炲姞 LocalDate ==> Date
*/
- public static Date toDate(LocalDate temporalAccessor)
- {
+ public static Date toDate(LocalDate temporalAccessor) {
LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0));
ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
return Date.from(zdt.toInstant());
}
/*鍒ゆ柇鏃堕棿鏄惁鍦ㄦ椂闂村唴*/
- public static boolean TimeCompare(String startT,String endT)
- {
+ public static boolean TimeCompare(String startT, String endT) {
LocalTime startTime = LocalTime.parse(startT); // 寮�濮嬫椂闂�
LocalTime endTime = LocalTime.parse(endT); // 缁撴潫鏃堕棿
LocalTime currentTime = LocalTime.now(); // 褰撳墠鏃堕棿
// 鍒ゆ柇褰撳墠鏃堕棿鏄惁鍦ㄦ椂闂村尯闂村唴
if (currentTime.isAfter(startTime) && currentTime.isBefore(endTime)) {
- // System.out.println("褰撳墠鏃堕棿鍦ㄦ椂闂村尯闂村唴");
+ // System.out.println("褰撳墠鏃堕棿鍦ㄦ椂闂村尯闂村唴");
return true;
} else {
- // System.out.println("褰撳墠鏃堕棿涓嶅湪鏃堕棿鍖洪棿鍐�");
+ // System.out.println("褰撳墠鏃堕棿涓嶅湪鏃堕棿鍖洪棿鍐�");
return false;
}
}
- public static boolean TimeCompare(Date startT,Date endT)
- {
- Date current=new Date();
+
+ public static boolean TimeCompare(Date startT, Date endT) {
+ Date current = new Date();
// 鍒ゆ柇褰撳墠鏃堕棿鏄惁鍦ㄦ椂闂村尯闂村唴
if (current.after(startT) && current.before(endT)) {
// System.out.println("褰撳墠鏃堕棿鍦ㄦ椂闂村尯闂村唴");
@@ -216,4 +192,19 @@
return false;
}
}
+
+ /**
+ * 璁$畻涓や釜鏃堕棿绉掔殑宸�
+ */
+ public static long getSecDatePoor(Date endDate, Date nowDate) {
+ long nd = 1000 * 24 * 60 * 60;
+ long nh = 1000 * 60 * 60;
+ long nm = 1000 * 60;
+ long ns = 1000;
+ // 鑾峰緱涓や釜鏃堕棿鐨勬绉掓椂闂村樊寮�
+ long diff = endDate.getTime() - nowDate.getTime();
+ // 璁$畻宸灏戠//杈撳嚭缁撴灉
+ long sec = diff % nd % nh % nm / ns;
+ return sec;
+ }
}
--
Gitblit v1.9.3