Administrator
2023-08-10 931ad9c18321121d0b64e9f6e49592f0472289fa
Merge remote-tracking branch 'origin/master'
已修改2个文件
78 ■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/alarm/ArdAlarmRadarMapper.xml 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java
@@ -45,11 +45,13 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
 * @Description: 全局报警业务
@@ -507,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) {
@@ -519,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";
@@ -536,11 +535,21 @@
                                }
                                break;
                        }
                        //入库
                        ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar);
                    }
                    //按兴趣点去重,然后按引导逻辑进行引导入队
                    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()};//报警坐标
                        //从redis中取出当前报警点的5分钟内是否有引导
                        ArdAlarmRadar AlarmRadar = redisCache.getCacheObject("global_alarm:" + ardAlarmRadar.getName());//从redis中取出最新引导的报警数据
                        if (AlarmRadar == null) {
@@ -550,7 +559,7 @@
                            redisCache.setCacheObject("global_alarm:" + ardAlarmRadar.getName(), ardAlarmRadar, 5, TimeUnit.MINUTES);//引导数据写入redis
                            unGuideCountMap.put(ardAlarmRadar.getName(), 0);
                            //引导入队
                            radarGuide(radarAlarmData.getRadarId(), alarmpointName, alarmType, ardAlarmRadar.getCreateTime(), coordinate);
                            radarGuide(radarAlarmData.getRadarId(), ardAlarmRadar.getName(), ardAlarmRadar.getAlarmType(), ardAlarmRadar.getCreateTime(), coordinate);
                        } else {
                            //5分钟内redis中有数据,说明5分钟内有引导数据,获取当前报警点的未引导次数
@@ -563,7 +572,7 @@
                                    redisCache.setCacheObject("global_alarm:" + ardAlarmRadar.getName(), ardAlarmRadar, 5, TimeUnit.MINUTES);
                                    count = 0;
                                    //引导入队
                                    radarGuide(radarAlarmData.getRadarId(), alarmpointName, alarmType, ardAlarmRadar.getCreateTime(), coordinate);
                                    radarGuide(radarAlarmData.getRadarId(), ardAlarmRadar.getName(), ardAlarmRadar.getAlarmType(), ardAlarmRadar.getCreateTime(), coordinate);
                                } else {
                                    ardAlarmRadar.setGuideFlag(0);
                                    count++;
@@ -573,15 +582,10 @@
                                count = 0;
                            }
                            unGuideCountMap.put(ardAlarmRadar.getName(), count);
                            //更新
                            ardAlarmRadarMapper.updateArdAlarmRadar(ardAlarmRadar);
                        }
                        //入库
                        ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar);
                        // 结束时间
                        long etime = System.currentTimeMillis();
                        // 计算执行时间
                        log.debug("雷达报警处理时长:" + (etime - stime) + "毫秒");
                    }
                    //endregion
                    break;
                case "external":
@@ -691,8 +695,7 @@
            guideTask.setReceiveTime(fmt.format(receiveTime));
            //报警优先级(通过优先级字典)
            String priority = DictUtils.getDictValue("cameras_priority", alarmType);
            if(StringUtils.isEmpty(priority))
            {
            if (StringUtils.isEmpty(priority)) {
                log.debug("未匹配到优先级,请检查优先级字典配置");
                return;
            }
ard-work/src/main/resources/mapper/alarm/ArdAlarmRadarMapper.xml
@@ -128,27 +128,28 @@
    </delete>
    <select id="selectListAllByCommand" resultMap="ArdAlarmRadarResult">
        SELECT T
                   .*
        FROM (
                 SELECT aar.ID,
                        aar.target_id,
                        aar.NAME,
                        aar.alarm_type,
                        aar.alarm_time,
                        aar.longitude,
                        aar.latitude,
                        ROW_NUMBER() OVER ( PARTITION BY aar.NAME ORDER BY aar.alarm_time DESC ) AS rn, COUNT(CASE WHEN aar.view_time IS NULL THEN 1 END) OVER ( PARTITION BY aar.NAME ) AS COUNT,
        COUNT ( aar.alarm_time ) OVER ( PARTITION BY aar.NAME ) AS total
                 FROM
                     ard_alarm_radar aar
                 WHERE
                     aar.alarm_time >= ( CURRENT_TIMESTAMP - INTERVAL '%${refreshTime}%' MINUTE )
                   AND aar.alarm_type = #{alarmType}
                 ORDER BY
                     aar.alarm_time DESC
             ) T
        WHERE T.rn = 1
                select aaar.ID,
               aaar.target_id,
               aaar.NAME,
               aaar.alarm_type,
               aaar.alarm_time,
               aaar.longitude,
               aaar.latitude,
               r.COUNT,
               r.total  from
            (SELECT
                 aar.NAME,
                 max(aar.create_time) as create_time1,
                 count(case when aar.view_time is null THEN 1  END) as count,
                 count(aar.id) as total
             FROM
                 ard_alarm_radar aar
             WHERE
                 aar.create_time >= ( CURRENT_TIMESTAMP - INTERVAL '%${refreshTime}%' MINUTE )
               AND aar.alarm_type = #{alarmType}
             GROUP BY aar.NAME
            ) r
                INNER JOIN ard_alarm_radar aaar ON r.create_time1 = aaar.create_time
    </select>
    <select id="selectCountByAlarmTime" resultType="Integer">
        SELECT COUNT(DISTINCT aar.name)