‘liusuyi’
2023-09-16 7130d28d70a63767975c9c59e10cc555511976ce
优化
已修改4个文件
115 ■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java 69 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/radar/mapper/ArdAlarmRadarMoveMapper.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java
@@ -114,6 +114,7 @@
    private Map<String, Integer> unGuideCountMapMove = new HashMap<>();
    private Map<String, Integer> unGuideCountMapFire = new HashMap<>();
    private Map<String, Integer> unGuideCountMapPump = new HashMap<>();
    /**
     * @描述 查询所有报警的当前数量
     * @参数 []
@@ -309,6 +310,7 @@
                return null;
        }
    }
    /**
     * 获取热力图数据
     * 刘苏义
@@ -348,6 +350,25 @@
                            return globalAlarmData;
                        }).collect(Collectors.toList());
            case 1003:
                //从缓存获取数据
                //String key = "radar_alarm:" + DateUtils.getDate();
                //List<ArdAlarmRadarMove> ardAlarmRadarMoves = redisCache.getCacheList(key);
                //Map<String, List<ArdAlarmRadarMove>> groupedData = ardAlarmRadarMoves.stream()
                //        .collect(Collectors.groupingBy(ArdAlarmRadarMove::getName));
                //List<GlobalAlarmData> globalAlarmDataList = new ArrayList<>();
                //for (String name : groupedData.keySet()) {
                //    List<ArdAlarmRadarMove> ardAlarmRadarMove = groupedData.get(name);
                //    GlobalAlarmData globalAlarmData = new GlobalAlarmData()
                //            .setId(ardAlarmRadarMove.get(0).getId())
                //            .setName(name)
                //            .setAlarmTime(ardAlarmRadarMove.get(0).getAlarmTime())
                //            .setLongitude(ardAlarmRadarMove.get(0).getLongitude())
                //            .setLatitude(ardAlarmRadarMove.get(0).getLatitude())
                //            .setTotal(ardAlarmRadarMove.size());
                //    globalAlarmDataList.add(globalAlarmData);
                //}
                //return globalAlarmDataList;
            //从数据库获取
                List<ArdAlarmRadarMove> ardAlarmRadarMoves = ardAlarmRadarMoveMapper.selectListAllByCommand(refreshTime);
                return ardAlarmRadarMoves.stream()
                        .map(ardAlarmRadarMove -> {
@@ -938,7 +959,14 @@
                                //入库
                                ardAlarmRadarMoveMapper.insertArdAlarmRadarMove(ardAlarmRadarMove);
                                ardAlarmRadarMoves.add(ardAlarmRadarMove);
                                //入缓存
                                //String key = "radar_alarm:" + DateUtils.getDate();
                                //if (redisCache.hasKey(key)) {
                                //    redisCache.setCacheList(key, ardAlarmRadarMove, -1, TimeUnit.HOURS);
                                //} else {
                                //    Integer expiryTimeInSeconds = DateUtils.getDayRemainingTime(ardAlarmRadarMove.getCreateTime());
                                //    redisCache.setCacheList(key, ardAlarmRadarMove, expiryTimeInSeconds, TimeUnit.SECONDS);
                                //}
                                break;
                            case "热源检测":
                                ArdAlarmRadarFire ardAlarmRadarFire=new ArdAlarmRadarFire();
@@ -1075,12 +1103,19 @@
            guideTask.setCameraId(cameraId);
            //报警类型
            String aType="";
            switch (alarmType)
            {
                case "运动目标检测": aType="sys_radar_move";break;
                case "热源检测": aType="sys_radar_fire";break;
                case "雷达抽油机停机": aType="sys_radar_pump";break;
                default: aType=alarmType;break;
            switch (alarmType) {
                case "运动目标检测":
                    aType = "sys_radar_move";
                    break;
                case "热源检测":
                    aType = "sys_radar_fire";
                    break;
                case "雷达抽油机停机":
                    aType = "sys_radar_pump";
                    break;
                default:
                    aType = alarmType;
                    break;
            }
            guideTask.setAlarmType(aType);
            //通道(通过日夜时间研判)
@@ -1170,7 +1205,6 @@
        return minDistanceCameraId;
    }
    /**
     * 雷达引导入队
     */
@@ -1183,9 +1217,7 @@
            log.debug("获取到雷达塔上的光电:" + cameraIdWithTower);
            //如果雷达塔上有光电
            messagesEnqueued(cameraIdWithTower, alarmId, alarmType, createTime, 1, 1, coordinate);
        }
        else
        {
        } else {
            log.debug("未获取到雷达塔上的光电");
        }
        //获取报警点关联的大光电
@@ -1198,16 +1230,13 @@
            log.info("获取到报警点关联的光电:" + cameraId);
            //如果报警点关联了光电
            messagesEnqueued(cameraId, alarmId, alarmType, createTime, 1, 2, coordinate);
        }
        else
        {
        } else {
            log.debug("未获取到报警点关联的光电");
        }
    }
    private void radarMoveGuide(List<ArdAlarmRadarMove> ardAlarmRadarMoves,RadarAlarmData radarAlarmData)
    {
    private void radarMoveGuide(List<ArdAlarmRadarMove> ardAlarmRadarMoves, RadarAlarmData radarAlarmData) {
        //按兴趣点去重,然后按引导逻辑进行引导入队
        ardAlarmRadarMoves = ardAlarmRadarMoves.stream()
                .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new java.util.TreeSet<>(java.util.Comparator.comparing(ArdAlarmRadarMove::getName))), ArrayList::new));
@@ -1259,8 +1288,8 @@
        }
        //endregion
    }
    private void radarFireGuide(List<ArdAlarmRadarFire> ardAlarmRadarFires,RadarAlarmData radarAlarmData)
    {
    private void radarFireGuide(List<ArdAlarmRadarFire> ardAlarmRadarFires, RadarAlarmData radarAlarmData) {
        //按兴趣点去重,然后按引导逻辑进行引导入队
        ardAlarmRadarFires = ardAlarmRadarFires.stream()
                .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new java.util.TreeSet<>(java.util.Comparator.comparing(ArdAlarmRadarFire::getName))), ArrayList::new));
@@ -1311,8 +1340,8 @@
        }
        //endregion
    }
    private void radarPumpGuide(List<ArdAlarmRadarPump> ardAlarmRadarPumps,RadarAlarmData radarAlarmData)
    {
    private void radarPumpGuide(List<ArdAlarmRadarPump> ardAlarmRadarPumps, RadarAlarmData radarAlarmData) {
        //按兴趣点去重,然后按引导逻辑进行引导入队
        ardAlarmRadarPumps = ardAlarmRadarPumps.stream()
                .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new java.util.TreeSet<>(java.util.Comparator.comparing(ArdAlarmRadarPump::getName))), ArrayList::new));
ard-work/src/main/java/com/ruoyi/alarm/radar/mapper/ArdAlarmRadarMoveMapper.java
@@ -65,8 +65,5 @@
    int selectCountByAlarmTime(@Param("refreshTime") String refreshTime);
    List<ArdAlarmRadarMove> selectListAllByCommand(@Param("refreshTime") String refreshTime);
    public int updateViewTimeByCondition(@Param("name")String name,@Param("alarmTime") String alarmTime,@Param("viewTime") String viewTime);
    /**
     * 通过雷达id找到关联塔上的大光电id
     */
    String getCameraByRadar(String radarId);
}
ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java
@@ -138,6 +138,15 @@
        return redisTemplate.opsForList().range(key, 0, -1);
    }
    public <T> void setCacheList(String key, T data, final Integer timeout, final TimeUnit timeUnit) {
        // 将数据插入list
        redisTemplate.opsForList().leftPush(key, data);
        // 设置过期时间
        if (timeout > 0) {
            redisTemplate.expire(key,timeout, timeUnit);
        }
    }
    /**
     * 缓存Set
     *
@@ -153,7 +162,23 @@
        }
        return setOperation;
    }
    /**
     * 缓存Set
     *
     * @param key     缓存键值
     * @param data    缓存的值
     * @param timeout  时间
     * @param timeUnit 时间颗粒度
     * @return 缓存数据的对象
     */
    public <T> void setCacheSet(String key, T data, final Integer timeout, final TimeUnit timeUnit) {
        BoundSetOperations<String, String> setOperations = redisTemplate.boundSetOps(key);
        setOperations.add(data.toString());
        // 设置过期时间
        if (timeout > 0) {
            setOperations.expire(timeout, timeUnit);
        }
    }
    /**
     * 获得缓存的set
     *
ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
@@ -8,6 +8,7 @@
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
import java.util.Date;
import org.apache.commons.lang3.time.DateFormatUtils;
@@ -207,4 +208,17 @@
        long sec = diff/ ns;
        return sec;
    }
    /**
     * 获取一天中剩余的时间(秒数)
     */
    public static Integer getDayRemainingTime(Date currentDate) {
        LocalDateTime midnight = LocalDateTime.ofInstant(currentDate.toInstant(),
                        ZoneId.systemDefault()).plusDays(1).withHour(0).withMinute(0)
                .withSecond(0).withNano(0);
        LocalDateTime currentDateTime = LocalDateTime.ofInstant(currentDate.toInstant(),
                ZoneId.systemDefault());
        long seconds = ChronoUnit.SECONDS.between(currentDateTime, midnight);
        return (int) seconds;
    }
}