From c1dafc830993fcedb99a4f2b62178691e1e92e64 Mon Sep 17 00:00:00 2001
From: Administrator <1144154118@qq.com>
Date: Mon, 07 Aug 2023 14:07:46 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
ard-work/src/main/java/com/ruoyi/storage/minio/service/impl/StorageMinioEventServiceImpl.java | 52 +++++++-----
ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java | 140 ++++++++++++++---------------------
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java | 9 +-
3 files changed, 90 insertions(+), 111 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..fec6e6f 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
@@ -52,6 +52,7 @@
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.PriorityBlockingQueue;
+import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@@ -96,6 +97,8 @@
@Resource
private QueueManager queueManager;
//endregion
+ //每个点位未引导次数
+ private Map<String, Integer> unGuideCountMap = new HashMap<>();
/**
* @描述 查询所有报警的当前数量
@@ -542,68 +545,45 @@
}
double[] coordinate = new double[]{ardAlarmRadar.getLongitude(), ardAlarmRadar.getLatitude()};//报警坐标
- //判断当前报警点5分钟内是否已引导
- ardAlarmRadar.setGuideFlag(1);
- // ArdAlarmRadar AlarmRadar = ardAlarmRadarMapper.getArdAlarmRadarWithGuide(ardAlarmRadar);
- ArdAlarmRadar AlarmRadar = redisCache.getCacheObject("global_alarm:guideNew");//从redis中取出最新引导的报警数据
- 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);
- }
+ //从redis中取出当前报警点的5分钟内是否有引导
+ ArdAlarmRadar AlarmRadar = redisCache.getCacheObject("global_alarm:" + ardAlarmRadar.getName());//从redis中取出最新引导的报警数据
+ if (AlarmRadar == null) {
+ //5分钟内redis中没有数据,说明5分钟内没有引导数据
+ ardAlarmRadar.setGuideFlag(1);
+ //将引导数据写入redis 设置5分钟过期
+ redisCache.setCacheObject("global_alarm:" + ardAlarmRadar.getName(), ardAlarmRadar, 5, TimeUnit.MINUTES);//引导数据写入redis
+ unGuideCountMap.put(ardAlarmRadar.getName(), 0);
+ //引导入队
+ radarGuide(radarAlarmData.getRadarId(), alarmpointName, alarmType, ardAlarmRadar.getCreateTime(), 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分钟内redis中有数据,说明5分钟内有引导数据,获取当前报警点的未引导次数
+ Integer count = unGuideCountMap.get(ardAlarmRadar.getName());
+ if (count != null) {
+ if (count > 2) {
+ //未引导次数3次后进行引导
+ ardAlarmRadar.setGuideFlag(1);
+ //将引导数据写入redis 设置5分钟过期
+ redisCache.setCacheObject("global_alarm:" + ardAlarmRadar.getName(), ardAlarmRadar, 5, TimeUnit.MINUTES);
+ count = 0;
+ //引导入队
+ radarGuide(radarAlarmData.getRadarId(), alarmpointName, alarmType, ardAlarmRadar.getCreateTime(), coordinate);
+ } else {
+ ardAlarmRadar.setGuideFlag(0);
+ count++;
}
} else {
- //未引导未超过3次,直接入库
- ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar);
+ ardAlarmRadar.setGuideFlag(0);
+ count = 0;
}
+ unGuideCountMap.put(ardAlarmRadar.getName(), count);
}
+ //入库
+ ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar);
// 结束时间
long etime = System.currentTimeMillis();
// 计算执行时间
- log.info("查询API执行时长:"+(etime-stime)+"毫秒");
+ log.info("雷达报警处理时长:" + (etime - stime) + "毫秒");
}
//endregion
@@ -739,7 +719,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 +761,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("正在排队【priority】" + task.getPriority() + "【num】" + task.getNum() + "【alarmTime】" + 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("正在排队【priority】" + task.getPriority() + "【num】" + task.getNum() + "【alarmTime】" + 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;
- }
}
diff --git a/ard-work/src/main/java/com/ruoyi/storage/minio/service/impl/StorageMinioEventServiceImpl.java b/ard-work/src/main/java/com/ruoyi/storage/minio/service/impl/StorageMinioEventServiceImpl.java
index ce70fdf..5e16aca 100644
--- a/ard-work/src/main/java/com/ruoyi/storage/minio/service/impl/StorageMinioEventServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/storage/minio/service/impl/StorageMinioEventServiceImpl.java
@@ -106,31 +106,37 @@
@Async
@Override
public void parseStorageMinioEvent(String message) {
- JsonsRootBean jsonsRootBean = JSONObject.parseObject(message, JsonsRootBean.class);
- if (jsonsRootBean != null) {
- Records records = jsonsRootBean.getRecords().get(0);
- StorageMinioEvent storageMinioEvent = new StorageMinioEvent();
- storageMinioEvent.setEventTime(records.getEventTime());
- storageMinioEvent.setEventType(records.getEventName());
- storageMinioEvent.setBucketName(records.getS3().getBucket().getName());
- String encode = null;
- try {
- encode = URLDecoder.decode(records.getS3().getMObject().getKey(), "UTF-8");
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- storageMinioEvent.setObjectName(encode);
- storageMinioEvent.setObjectSize(records.getS3().getMObject().getSize());
- storageMinioEvent.setObjectType(records.getS3().getMObject().getContentType());
- storageMinioEvent.setHost(records.getSource().getHost());
- storageMinioEvent.setEndpoint(records.getResponseElements().getXMinioOriginEndpoint());
- storageMinioEvent.setUserName(records.getRequestParameters().getPrincipalid());
+ try {
+ JsonsRootBean jsonsRootBean = JSONObject.parseObject(message, JsonsRootBean.class);
+ if (jsonsRootBean != null) {
+ Records records = jsonsRootBean.getRecords().get(0);
+ StorageMinioEvent storageMinioEvent = new StorageMinioEvent();
+ storageMinioEvent.setEventTime(records.getEventTime());
+ String eventType = records.getEventName().substring(0, records.getEventName().indexOf(":", records.getEventName().indexOf(":") + 1));//不包含本身位置
+ storageMinioEvent.setEventType(eventType);
+ storageMinioEvent.setBucketName(records.getS3().getBucket().getName());
+ String encode = null;
+ try {
+ encode = URLDecoder.decode(records.getS3().getMObject().getKey(), "UTF-8");
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ storageMinioEvent.setObjectName(encode);
+ storageMinioEvent.setObjectSize(records.getS3().getMObject().getSize());
+ storageMinioEvent.setObjectType(records.getS3().getMObject().getContentType());
+ storageMinioEvent.setHost(records.getSource().getHost());
+ storageMinioEvent.setEndpoint(records.getResponseElements().getXMinioOriginEndpoint());
+ storageMinioEvent.setUserName(records.getRequestParameters().getPrincipalid());
- int i = insertStorageMinioEvent(storageMinioEvent);
- if(i>0)
- {
- log.debug("minio操作日志入库成功!【"+storageMinioEvent.getEventType()+"】");
+ int i = insertStorageMinioEvent(storageMinioEvent);
+ if (i > 0) {
+ log.debug("minio操作日志入库成功!【" + storageMinioEvent.getEventType() + "】");
+ }
}
}
+ catch (Exception ex)
+ {
+ log.error("minio事件格式化异常:"+ex.getMessage());
+ }
}
}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java
index f539fce..e3fed44 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java
@@ -1,9 +1,7 @@
package com.ruoyi.web.controller.monitor;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
+import java.util.*;
+
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.DeleteMapping;
@@ -75,6 +73,9 @@
}
Collections.reverse(userOnlineList);
userOnlineList.removeAll(Collections.singleton(null));
+ //在线用户按登录时间逆序排序
+ Comparator<SysUserOnline> comparator = Comparator.comparingLong(sysUserOnline -> sysUserOnline.getLoginTime()); // 使用Collections.sort方法进行排序 Collections.sort(personList, comparator);
+ Collections.sort(userOnlineList, comparator.reversed());
return getDataTable(userOnlineList);
}
--
Gitblit v1.9.3