From 44f2a0a32c096bdb05d4cc0ac162cdc1eb14c3ed Mon Sep 17 00:00:00 2001
From: Administrator <1144154118@qq.com>
Date: 星期四, 10 八月 2023 13:14:29 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java | 172 ++++++++++++++++++++++++--------------------------------
1 files changed, 74 insertions(+), 98 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 6d761a0..c7d9fb5 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
@@ -30,8 +30,8 @@
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.DictUtils;
import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.constant.CamPriority;
import com.ruoyi.device.external.domain.ArdEquipExternal;
import com.ruoyi.device.external.mapper.ArdEquipExternalMapper;
import com.ruoyi.utils.tools.ArdTool;
@@ -42,8 +42,6 @@
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.utils.tube.GeoPoint;
import com.ruoyi.utils.tube.TubeTools;
-import lombok.AllArgsConstructor;
-import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@@ -51,8 +49,9 @@
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
-import java.util.concurrent.PriorityBlockingQueue;
+import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
+
/**
* @Description: 鍏ㄥ眬鎶ヨ涓氬姟
@@ -96,6 +95,8 @@
@Resource
private QueueManager queueManager;
//endregion
+ //姣忎釜鐐逛綅鏈紩瀵兼鏁�
+ private Map<String, Integer> unGuideCountMap = new HashMap<>();
/**
* @鎻忚堪 鏌ヨ鎵�鏈夋姤璀︾殑褰撳墠鏁伴噺
@@ -508,8 +509,6 @@
break;
case "radar":
//region 澶勭悊闆疯揪鎶ヨ
- // 寮�濮嬫椂闂�
- long stime = System.currentTimeMillis();
RadarAlarmData radarAlarmData = JSONObject.parseObject(message, RadarAlarmData.class);
List<ArdAlarmRadar> ardAlarmRadars = radarAlarmData.getArdAlarmRadars();
for (ArdAlarmRadar ardAlarmRadar : ardAlarmRadars) {
@@ -520,10 +519,9 @@
ardAlarmRadar.setName(ardAlarmRadar.getName() + "(" + radarAlarmData.getRadarName() + ")");//鎶ヨ鐐瑰悕绉�
ardAlarmRadar.setCreateTime(new Date());//鎺ユ敹鏃堕棿
- String alarmType = "";
switch (ardAlarmRadar.getAlarmType()) {
case "杩愬姩鐩爣妫�娴�":
- alarmType = "sys_radar_move";
+ String alarmType = "sys_radar_move";
break;
case "鐑簮妫�娴�":
alarmType = "sys_radar_fire";
@@ -537,75 +535,57 @@
}
break;
}
+ //鍏ュ簱
+ ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar);
+
+ }
+ //鎸夊叴瓒g偣鍘婚噸,鐒跺悗鎸夊紩瀵奸�昏緫杩涜寮曞鍏ラ槦
+ ardAlarmRadars = ardAlarmRadars.stream()
+ .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new java.util.TreeSet<>(java.util.Comparator.comparing(ArdAlarmRadar::getName))), ArrayList::new));
+ for(ArdAlarmRadar ardAlarmRadar : ardAlarmRadars)
+ {
+ //閬嶅巻鎶ヨ鏁版嵁杩涜寮曞
if (StringUtils.isNull(ardAlarmRadar.getLongitude()) || StringUtils.isNull(ardAlarmRadar.getLatitude())) {
+ //鍧愭爣涓虹┖涓嶅紩瀵�
continue;
}
double[] coordinate = new double[]{ardAlarmRadar.getLongitude(), ardAlarmRadar.getLatitude()};//鎶ヨ鍧愭爣
+ //浠巖edis涓彇鍑哄綋鍓嶆姤璀︾偣鐨�5鍒嗛挓鍐呮槸鍚︽湁寮曞
+ ArdAlarmRadar AlarmRadar = redisCache.getCacheObject("global_alarm:" + ardAlarmRadar.getName());//浠巖edis涓彇鍑烘渶鏂板紩瀵肩殑鎶ヨ鏁版嵁
+ if (AlarmRadar == null) {
+ //5鍒嗛挓鍐卹edis涓病鏈夋暟鎹紝璇存槑5鍒嗛挓鍐呮病鏈夊紩瀵兼暟鎹�
+ ardAlarmRadar.setGuideFlag(1);
+ //灏嗗紩瀵兼暟鎹啓鍏edis 璁剧疆5鍒嗛挓杩囨湡
+ redisCache.setCacheObject("global_alarm:" + ardAlarmRadar.getName(), ardAlarmRadar, 5, TimeUnit.MINUTES);//寮曞鏁版嵁鍐欏叆redis
+ unGuideCountMap.put(ardAlarmRadar.getName(), 0);
+ //寮曞鍏ラ槦
+ radarGuide(radarAlarmData.getRadarId(), ardAlarmRadar.getName(), ardAlarmRadar.getAlarmType(), ardAlarmRadar.getCreateTime(), coordinate);
- //鍒ゆ柇褰撳墠鎶ヨ鐐�5鍒嗛挓鍐呮槸鍚﹀凡寮曞
- ardAlarmRadar.setGuideFlag(1);
- // ArdAlarmRadar AlarmRadar = ardAlarmRadarMapper.getArdAlarmRadarWithGuide(ardAlarmRadar);
- ArdAlarmRadar AlarmRadar = redisCache.getCacheObject("global_alarm:guideNew");//浠巖edis涓彇鍑烘渶鏂板紩瀵肩殑鎶ヨ鏁版嵁
- if (StringUtils.isNull(AlarmRadar)) {
- //5鍒嗛挓鍐呮湭寮曞鐩存帴鍏ュ簱
- ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar);
- redisCache.setCacheObject("global_alarm:guideNew",ardAlarmRadar);//寮曞鏁版嵁鍐欏叆redis
- //鑾峰彇闆疯揪鎵�鍦ㄥ涓婄殑澶у厜鐢�
- String cameraIdWithTower = ardAlarmRadarMapper.getCameraByRadar(radarAlarmData.getRadarId());
- if (StringUtils.isNotNull(cameraIdWithTower) && StringUtils.isNotEmpty(cameraIdWithTower)) {
- log.info("鑾峰彇鍒伴浄杈惧涓婄殑鍏夌數:" + cameraIdWithTower);
- //濡傛灉闆疯揪濉斾笂鏈夊厜鐢�
- messagesEnqueued(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getCreateTime(), 1, 1, coordinate);
- }
- //鑾峰彇鎶ヨ鐐瑰叧鑱旂殑澶у厜鐢�
- ArdAlarmpointsWell ardAlarmpointsWell = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(alarmpointName);
- if (StringUtils.isNotNull(ardAlarmpointsWell) && StringUtils.isNotEmpty(ardAlarmpointsWell.getCameraId())) {
- String cameraId = ardAlarmpointsWell.getCameraId();
- if (cameraId.equals(cameraIdWithTower)) {
- return;
- }
- log.info("鑾峰彇鍒版姤璀︾偣鍏宠仈鐨勫厜鐢�:" + cameraId);
- //濡傛灉鎶ヨ鐐瑰叧鑱斾簡鍏夌數
- messagesEnqueued(cameraId, uuid, alarmType, ardAlarmRadar.getCreateTime(), 1, 2, coordinate);
- }
} else {
- //5鍒嗛挓鍐呮湁寮曞
- ardAlarmRadar.setGuideFlag(0);
- int count = ardAlarmRadarMapper.getArdAlarmRadarWithNotGuide(ardAlarmRadar, AlarmRadar.getCreateTime());
- //鏈紩瀵艰秴杩�3娆★紝鐩存帴鍏ュ簱鍏ラ槦
- if (count >= 3) {
- ardAlarmRadar.setGuideFlag(1);
- ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar);
- redisCache.setCacheObject("global_alarm:guideNew",ardAlarmRadar);//寮曞鏁版嵁鍐欏叆redis
- //鑾峰彇闆疯揪鎵�鍦ㄥ涓婄殑澶у厜鐢�
- String cameraIdWithTower = ardAlarmRadarMapper.getCameraByRadar(radarAlarmData.getRadarId());
- if (StringUtils.isNotNull(cameraIdWithTower) && StringUtils.isNotEmpty(cameraIdWithTower)) {
- log.info("鑾峰彇鍒伴浄杈惧涓婄殑鍏夌數:" + cameraIdWithTower);
- //濡傛灉闆疯揪濉斾笂鏈夊厜鐢�
- messagesEnqueued(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getCreateTime(), count, 1, coordinate);
- }
- //鑾峰彇鎶ヨ鐐瑰叧鑱旂殑澶у厜鐢�
- ArdAlarmpointsWell ardAlarmpointsWell = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(alarmpointName);
- if (StringUtils.isNotNull(ardAlarmpointsWell) && StringUtils.isNotEmpty(ardAlarmpointsWell.getCameraId())) {
- String cameraId = ardAlarmpointsWell.getCameraId();
- if (cameraId.equals(cameraIdWithTower)) {
- return;
- }
- log.info("鑾峰彇鍒版姤璀︾偣鍏宠仈鐨勫厜鐢�:" + cameraId);
- //濡傛灉鎶ヨ鐐瑰叧鑱斾簡鍏夌數
- messagesEnqueued(cameraId, uuid, alarmType, ardAlarmRadar.getCreateTime(), count, 2, coordinate);
+ //5鍒嗛挓鍐卹edis涓湁鏁版嵁锛岃鏄�5鍒嗛挓鍐呮湁寮曞鏁版嵁,鑾峰彇褰撳墠鎶ヨ鐐圭殑鏈紩瀵兼鏁�
+ Integer count = unGuideCountMap.get(ardAlarmRadar.getName());
+ if (count != null) {
+ if (count > 2) {
+ //鏈紩瀵兼鏁�3娆″悗杩涜寮曞
+ ardAlarmRadar.setGuideFlag(1);
+ //灏嗗紩瀵兼暟鎹啓鍏edis 璁剧疆5鍒嗛挓杩囨湡
+ redisCache.setCacheObject("global_alarm:" + ardAlarmRadar.getName(), ardAlarmRadar, 5, TimeUnit.MINUTES);
+ count = 0;
+ //寮曞鍏ラ槦
+ radarGuide(radarAlarmData.getRadarId(), ardAlarmRadar.getName(), ardAlarmRadar.getAlarmType(), ardAlarmRadar.getCreateTime(), coordinate);
+ } else {
+ ardAlarmRadar.setGuideFlag(0);
+ count++;
}
} else {
- //鏈紩瀵兼湭瓒呰繃3娆★紝鐩存帴鍏ュ簱
- ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar);
+ ardAlarmRadar.setGuideFlag(0);
+ count = 0;
}
+ unGuideCountMap.put(ardAlarmRadar.getName(), count);
+ //鏇存柊
+ ardAlarmRadarMapper.updateArdAlarmRadar(ardAlarmRadar);
}
- // 缁撴潫鏃堕棿
- long etime = System.currentTimeMillis();
- // 璁$畻鎵ц鏃堕棿
- log.info("鏌ヨAPI鎵ц鏃堕暱锛�"+(etime-stime)+"姣");
}
-
//endregion
break;
case "external":
@@ -714,8 +694,12 @@
//鎺ユ敹鏃堕棿
guideTask.setReceiveTime(fmt.format(receiveTime));
//鎶ヨ浼樺厛绾�(閫氳繃浼樺厛绾у瓧鍏�)
- Integer priority = CamPriority.priorityMap.get(alarmType);
- guideTask.setPriority(priority);
+ String priority = DictUtils.getDictValue("cameras_priority", alarmType);
+ if (StringUtils.isEmpty(priority)) {
+ log.debug("鏈尮閰嶅埌浼樺厛绾�,璇锋鏌ヤ紭鍏堢骇瀛楀吀閰嶇疆");
+ return;
+ }
+ guideTask.setPriority(Integer.valueOf(priority));
//鎶ヨ娆℃暟
guideTask.setNum(num);
//褰曞儚瀛樺偍浣嶇疆
@@ -739,7 +723,7 @@
private Boolean IsEnableGuide(String cameraId) {
boolean enabled = false;
ArdCameras ardCameras = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
- if(ardCameras!=null) {
+ if (ardCameras != null) {
if (ardCameras.getCamAlarmGuideEnable().equals(1)) {
enabled = true;
}
@@ -781,37 +765,29 @@
return minDistanceCameraId;
}
- public static void main(String[] args) {
- Comparator<Obj> PriorityDescCom = Comparator.comparingInt(Obj::getPriority).reversed();
- Comparator<Obj> NumDescCom = Comparator.comparingInt(Obj::getNum).reversed();
- Comparator<Obj> receiveTimeAscCom = Comparator.comparing(Obj::getAlarmTime);
- Comparator<Obj> comparator = PriorityDescCom.thenComparing(NumDescCom).thenComparing(receiveTimeAscCom);
-
- PriorityBlockingQueue<Obj> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
-
- priorityQueue.add(new Obj(999, 1, "2023-07-01 16:00:01"));
- priorityQueue.add(new Obj(999, 2, "2023-07-01 16:00:01"));
- priorityQueue.add(new Obj(999, 3, "2023-07-01 16:00:01"));
-
- List<Obj> elements = new ArrayList<>(priorityQueue);
- elements.sort(priorityQueue.comparator()); // 浣跨敤闃熷垪鐨勬瘮杈冨櫒杩涜鎺掑簭
- for (Obj task : elements) {
- log.info("姝e湪鎺掗槦銆恜riority銆�" + task.getPriority() + "銆恘um銆�" + task.getNum() + "銆恆larmTime銆�" + task.getAlarmTime());
+ /**
+ * 闆疯揪寮曞鍏ラ槦
+ */
+ private void radarGuide(String radarId, String alarmpointName, String alarmType, Date createTime, double[] coordinate) {
+ String uuid = IdUtils.simpleUUID();
+ //鑾峰彇闆疯揪鎵�鍦ㄥ涓婄殑澶у厜鐢�
+ String cameraIdWithTower = ardAlarmRadarMapper.getCameraByRadar(radarId);
+ if (StringUtils.isNotNull(cameraIdWithTower) && StringUtils.isNotEmpty(cameraIdWithTower)) {
+ log.info("鑾峰彇鍒伴浄杈惧涓婄殑鍏夌數:" + cameraIdWithTower);
+ //濡傛灉闆疯揪濉斾笂鏈夊厜鐢�
+ messagesEnqueued(cameraIdWithTower, uuid, alarmType, createTime, 1, 1, coordinate);
}
- log.info("===================================================================");
- priorityQueue.add(new Obj(999, 5, "2023-07-01 16:00:01"));
- PriorityBlockingQueue queue = new PriorityBlockingQueue<>(priorityQueue);
- while (queue.size() > 0) {
- Obj task = (Obj) queue.poll();
- log.info("姝e湪鎺掗槦銆恜riority銆�" + task.getPriority() + "銆恘um銆�" + task.getNum() + "銆恆larmTime銆�" + task.getAlarmTime());
+ //鑾峰彇鎶ヨ鐐瑰叧鑱旂殑澶у厜鐢�
+ ArdAlarmpointsWell ardAlarmpointsWell = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(alarmpointName);
+ if (StringUtils.isNotNull(ardAlarmpointsWell) && StringUtils.isNotEmpty(ardAlarmpointsWell.getCameraId())) {
+ String cameraId = ardAlarmpointsWell.getCameraId();
+ if (cameraId.equals(cameraIdWithTower)) {
+ return;
+ }
+ log.info("鑾峰彇鍒版姤璀︾偣鍏宠仈鐨勫厜鐢�:" + cameraId);
+ //濡傛灉鎶ヨ鐐瑰叧鑱斾簡鍏夌數
+ messagesEnqueued(cameraId, uuid, alarmType, createTime, 1, 2, coordinate);
}
}
- @Data
- @AllArgsConstructor
- static class Obj {
- Integer priority;
- Integer num;
- String alarmTime;
- }
}
--
Gitblit v1.9.3