From 167d184121945c0d6098b92fcaeec5e3c8fd4fa3 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: Mon, 07 Aug 2023 11:56:27 +0800
Subject: [PATCH] 优化雷达报警

---
 ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java |   77 +++++++++++++++++++++++---------------
 1 files changed, 46 insertions(+), 31 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..1ae7064 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;
 
 /**
@@ -431,6 +432,7 @@
         }
     }
 
+    private  Map<String,Integer> guideCountMap=new HashMap<>();
     /**
      * @描述 异步处理接收的报警
      * @参数 [topic, message]
@@ -545,11 +547,12 @@
                         //判断当前报警点5分钟内是否已引导
                         ardAlarmRadar.setGuideFlag(1);
                        // ArdAlarmRadar AlarmRadar = ardAlarmRadarMapper.getArdAlarmRadarWithGuide(ardAlarmRadar);
-                        ArdAlarmRadar AlarmRadar = redisCache.getCacheObject("global_alarm:guideNew");//从redis中取出最新引导的报警数据
-                        if (StringUtils.isNull(AlarmRadar)) {
+                        ArdAlarmRadar AlarmRadar = redisCache.getCacheObject("global_alarm:"+ardAlarmRadar.getName());//从redis中取出最新引导的报警数据
+                        if (AlarmRadar==null) {
                             //5分钟内未引导直接入库
                             ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar);
-                            redisCache.setCacheObject("global_alarm:guideNew",ardAlarmRadar);//引导数据写入redis
+                            redisCache.setCacheObject("global_alarm:"+ardAlarmRadar.getName(),ardAlarmRadar,5, TimeUnit.MINUTES);//引导数据写入redis
+                            guideCountMap.put(ardAlarmRadar.getName(),0);
                             //获取雷达所在塔上的大光电
                             String cameraIdWithTower = ardAlarmRadarMapper.getCameraByRadar(radarAlarmData.getRadarId());
                             if (StringUtils.isNotNull(cameraIdWithTower) && StringUtils.isNotEmpty(cameraIdWithTower)) {
@@ -569,41 +572,53 @@
                                 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;
+                            //获取当前报警点的未引导次数
+                            Integer count = guideCountMap.get(ardAlarmRadar.getName());
+                            if(count!=null)
+                            {
+                                if(count>2)
+                                {
+                                    ardAlarmRadar.setGuideFlag(1);
+                                    redisCache.setCacheObject("global_alarm:"+ardAlarmRadar.getName(),ardAlarmRadar,5, TimeUnit.MINUTES);//引导数据写入redis
+                                    count=0;
+
+                                    //获取雷达所在塔上的大光电
+                                    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);
                                     }
-                                    log.info("获取到报警点关联的光电:" + cameraId);
-                                    //如果报警点关联了光电
-                                    messagesEnqueued(cameraId, uuid, alarmType, ardAlarmRadar.getCreateTime(), count, 2, 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);
+                                    }
                                 }
-                            } else {
-                                //未引导未超过3次,直接入库
-                                ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar);
+                                else
+                                {
+                                    ardAlarmRadar.setGuideFlag(0);
+                                    count++;
+                                }
                             }
+                            else
+                            {
+                                ardAlarmRadar.setGuideFlag(0);
+                                count=0;
+                            }
+                            guideCountMap.put(ardAlarmRadar.getName(),count);
+                            ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar);
                         }
                         // 结束时间
                         long etime = System.currentTimeMillis();
                         // 计算执行时间
-                        log.info("查询API执行时长:"+(etime-stime)+"毫秒");
+                        log.info("雷达报警处理时长:"+(etime-stime)+"毫秒");
                     }
 
                     //endregion

--
Gitblit v1.9.3