‘liusuyi’
2023-09-16 7130d28d70a63767975c9c59e10cc555511976ce
优化
已修改4个文件
211 ■■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java 165 ●●●●● 补丁 | 查看 | 原始文档 | 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,19 +350,38 @@
                            return globalAlarmData;
                        }).collect(Collectors.toList());
            case 1003:
                List<ArdAlarmRadarMove> ardAlarmRadarMoves = ardAlarmRadarMoveMapper.selectListAllByCommand(refreshTime);
                return ardAlarmRadarMoves.stream()
                        .map(ardAlarmRadarMove -> {
                            GlobalAlarmData globalAlarmData = new GlobalAlarmData()
                                    .setId(ardAlarmRadarMove.getId())
                                    .setName(ardAlarmRadarMove.getName())
                                    .setAlarmTime(ardAlarmRadarMove.getAlarmTime())
                                    .setLongitude(ardAlarmRadarMove.getLongitude())
                                    .setLatitude(ardAlarmRadarMove.getLatitude())
                                    .setCount(ardAlarmRadarMove.getCount())
                                    .setTotal(ardAlarmRadarMove.getTotal());
                            return globalAlarmData;
                        }).collect(Collectors.toList());
                //从缓存获取数据
                //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 -> {
                         GlobalAlarmData globalAlarmData = new GlobalAlarmData()
                                 .setId(ardAlarmRadarMove.getId())
                                 .setName(ardAlarmRadarMove.getName())
                                 .setAlarmTime(ardAlarmRadarMove.getAlarmTime())
                                 .setLongitude(ardAlarmRadarMove.getLongitude())
                                 .setLatitude(ardAlarmRadarMove.getLatitude())
                                 .setCount(ardAlarmRadarMove.getCount())
                                 .setTotal(ardAlarmRadarMove.getTotal());
                         return globalAlarmData;
                     }).collect(Collectors.toList());
            case 1004:
                List<ArdAlarmRadarFire> ardAlarmRadarFires = ardAlarmRadarFireMapper.selectListAllByCommand(refreshTime);
                return ardAlarmRadarFires.stream()
@@ -484,12 +505,12 @@
                            .setAlarmType("1001");
                    return globalAlarmData;
                }).collect(Collectors.toList());
        if(alarmData1001.size()>0) {
        if (alarmData1001.size() > 0) {
            GlobalAlarmDataList.addAll(alarmData1001);
        }
        List<ArdAlarmCamera> ardAlarmCameras = ardAlarmCameraMapper.selectListAllByCommand(refreshTime);
        List<GlobalAlarmData> alarmData1002= ardAlarmCameras.stream()
        List<GlobalAlarmData> alarmData1002 = ardAlarmCameras.stream()
                .map(ardAlarmCamera -> {
                    GlobalAlarmData globalAlarmData = new GlobalAlarmData()
                            .setId(ardAlarmCamera.getId())
@@ -502,12 +523,12 @@
                            .setAlarmType("1002");
                    return globalAlarmData;
                }).collect(Collectors.toList());
        if(alarmData1002.size()>0) {
        if (alarmData1002.size() > 0) {
            GlobalAlarmDataList.addAll(alarmData1002);
        }
        List<ArdAlarmRadarMove> ardAlarmRadarMoves = ardAlarmRadarMoveMapper.selectListAllByCommand(refreshTime);
        List<GlobalAlarmData> alarmData1003= ardAlarmRadarMoves.stream()
        List<GlobalAlarmData> alarmData1003 = ardAlarmRadarMoves.stream()
                .map(ardAlarmRadarMove -> {
                    GlobalAlarmData globalAlarmData = new GlobalAlarmData()
                            .setId(ardAlarmRadarMove.getId())
@@ -520,12 +541,12 @@
                            .setAlarmType("1003");
                    return globalAlarmData;
                }).collect(Collectors.toList());
        if(alarmData1003.size()>0) {
        if (alarmData1003.size() > 0) {
            GlobalAlarmDataList.addAll(alarmData1003);
        }
        List<ArdAlarmRadarFire> ardAlarmRadarFires = ardAlarmRadarFireMapper.selectListAllByCommand(refreshTime);
        List<GlobalAlarmData> alarmData1004=  ardAlarmRadarFires.stream()
        List<GlobalAlarmData> alarmData1004 = ardAlarmRadarFires.stream()
                .map(ardAlarmRadarFire -> {
                    GlobalAlarmData globalAlarmData = new GlobalAlarmData()
                            .setId(ardAlarmRadarFire.getId())
@@ -538,12 +559,12 @@
                            .setAlarmType("1004");
                    return globalAlarmData;
                }).collect(Collectors.toList());
        if(alarmData1004.size()>0) {
        if (alarmData1004.size() > 0) {
            GlobalAlarmDataList.addAll(alarmData1004);
        }
        List<ArdAlarmExternal> ardAlarmExternals = ardAlarmExternalMapper.selectListAllByCommand(refreshTime, "防区报警");
        List<GlobalAlarmData> alarmData1005=  ardAlarmExternals.stream()
        List<GlobalAlarmData> alarmData1005 = ardAlarmExternals.stream()
                .map(ardAlarmExternal -> {
                    GlobalAlarmData globalAlarmData = new GlobalAlarmData()
                            .setId(ardAlarmExternal.getId())
@@ -556,12 +577,12 @@
                            .setAlarmType("1005");
                    return globalAlarmData;
                }).collect(Collectors.toList());
        if(alarmData1005.size()>0) {
        if (alarmData1005.size() > 0) {
            GlobalAlarmDataList.addAll(alarmData1005);
        }
        List<ArdAlarmAccess> ardAlarmAccesses = ardAlarmAccessMapper.selectListAllByCommand(refreshTime);
        List<GlobalAlarmData> alarmData1006= ardAlarmAccesses.stream()
        List<GlobalAlarmData> alarmData1006 = ardAlarmAccesses.stream()
                .map(ardAlarmAccess -> {
                    GlobalAlarmData globalAlarmData = new GlobalAlarmData()
                            .setId(ardAlarmAccess.getId())
@@ -574,12 +595,12 @@
                            .setAlarmType("1006");
                    return globalAlarmData;
                }).collect(Collectors.toList());
        if(alarmData1006.size()>0) {
        if (alarmData1006.size() > 0) {
            GlobalAlarmDataList.addAll(alarmData1006);
        }
        List<ArdAlarmRadarPump> ardAlarmRadarPumps = ardAlarmRadarPumpMapper.selectListAllByCommand(refreshTime);
        List<GlobalAlarmData> alarmData1007= ardAlarmRadarPumps.stream()
        List<GlobalAlarmData> alarmData1007 = ardAlarmRadarPumps.stream()
                .map(ardAlarmRadarPump -> {
                    GlobalAlarmData globalAlarmData = new GlobalAlarmData()
                            .setId(ardAlarmRadarPump.getId())
@@ -592,12 +613,12 @@
                            .setAlarmType("1007");
                    return globalAlarmData;
                }).collect(Collectors.toList());
        if(alarmData1007.size()>0) {
        if (alarmData1007.size() > 0) {
            GlobalAlarmDataList.addAll(alarmData1007);
        }
        List<ArdAlarmApponekey> ardAlarmApponekeys = ardAlarmApponekeyMapper.selectListAllByCommand(refreshTime);
        List<GlobalAlarmData> alarmData1009= ardAlarmApponekeys.stream()
        List<GlobalAlarmData> alarmData1009 = ardAlarmApponekeys.stream()
                .map(ardAlarmApponekey -> {
                    GlobalAlarmData globalAlarmData = new GlobalAlarmData()
                            .setId(ardAlarmApponekey.getId())
@@ -610,12 +631,12 @@
                            .setAlarmType("1009");
                    return globalAlarmData;
                }).collect(Collectors.toList());
        if(alarmData1009.size()>0) {
        if (alarmData1009.size() > 0) {
            GlobalAlarmDataList.addAll(alarmData1009);
        }
        List<ArdAlarmWall> ardAlarmWalls = ardAlarmWallMapper.selectListAllByCommand(refreshTime);
        List<GlobalAlarmData> alarmData1010= ardAlarmWalls.stream()
        List<GlobalAlarmData> alarmData1010 = ardAlarmWalls.stream()
                .map(ardAlarmWall -> {
                    GlobalAlarmData globalAlarmData = new GlobalAlarmData()
                            .setId(ardAlarmWall.getId())
@@ -628,12 +649,12 @@
                            .setAlarmType("1010");
                    return globalAlarmData;
                }).collect(Collectors.toList());
        if(alarmData1010.size()>0) {
        if (alarmData1010.size() > 0) {
            GlobalAlarmDataList.addAll(alarmData1010);
        }
        List<ArdAlarmTube> ardAlarmTubes = ardAlarmTubeMapper.selectListAllByCommand(refreshTime);
        List<GlobalAlarmData> alarmData1014= ardAlarmTubes.stream()
        List<GlobalAlarmData> alarmData1014 = ardAlarmTubes.stream()
                .map(ardAlarmTube -> {
                    GlobalAlarmData globalAlarmData = new GlobalAlarmData()
                            .setId(ardAlarmTube.getId())
@@ -647,11 +668,11 @@
                            .setAlarmType("1014");
                    return globalAlarmData;
                }).collect(Collectors.toList());
        if(alarmData1014.size()>0) {
        if (alarmData1014.size() > 0) {
            GlobalAlarmDataList.addAll(alarmData1014);
        }
        return GlobalAlarmDataList;
}
    }
    /**
     * @描述 历史报警查询
@@ -915,18 +936,18 @@
                    //region 处理雷达报警
                    RadarAlarmData radarAlarmData = JSONObject.parseObject(message, RadarAlarmData.class);
                    List<ArdAlarmRadar> ardAlarmRadars = radarAlarmData.getArdAlarmRadars();
                    List<ArdAlarmRadarMove>ardAlarmRadarMoves=new ArrayList<>();
                    List<ArdAlarmRadarFire>ardAlarmRadarFires=new ArrayList<>();
                    List<ArdAlarmRadarPump>ardAlarmRadarPumps=new ArrayList<>();
                    List<ArdAlarmRadarMove> ardAlarmRadarMoves = new ArrayList<>();
                    List<ArdAlarmRadarFire> ardAlarmRadarFires = new ArrayList<>();
                    List<ArdAlarmRadarPump> ardAlarmRadarPumps = new ArrayList<>();
                    for (ArdAlarmRadar ardAlarmRadar : ardAlarmRadars) {
                        String uuid = IdUtils.simpleUUID();
                        String alarmpointName = ardAlarmRadar.getName();//兴趣点名称
                        Double longitude = ardAlarmRadar.getLongitude();
                        Double latitude = ardAlarmRadar.getLatitude();
                        String targetId=ardAlarmRadar.getTargetId();
                        String targetId = ardAlarmRadar.getTargetId();
                        switch (ardAlarmRadar.getAlarmType()) {
                            case "运动目标检测":
                                ArdAlarmRadarMove ardAlarmRadarMove=new ArdAlarmRadarMove();
                                ArdAlarmRadarMove ardAlarmRadarMove = new ArdAlarmRadarMove();
                                ardAlarmRadarMove.setId(uuid);
                                ardAlarmRadarMove.setTargetId(targetId);
                                ardAlarmRadarMove.setAlarmTime(radarAlarmData.getAlarmTime());
@@ -938,10 +959,17 @@
                                //入库
                                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();
                                ArdAlarmRadarFire ardAlarmRadarFire = new ArdAlarmRadarFire();
                                ardAlarmRadarFire.setId(uuid);
                                ardAlarmRadarFire.setTargetId(targetId);
                                ardAlarmRadarFire.setAlarmTime(radarAlarmData.getAlarmTime());
@@ -956,7 +984,7 @@
                                break;
                            case "雷达抽油机停机":
                                ArdAlarmRadarPump ardAlarmRadarPump=new ArdAlarmRadarPump();
                                ArdAlarmRadarPump ardAlarmRadarPump = new ArdAlarmRadarPump();
                                ardAlarmRadarPump.setId(uuid);
                                ardAlarmRadarPump.setTargetId(targetId);
                                ardAlarmRadarPump.setAlarmTime(radarAlarmData.getAlarmTime());
@@ -975,9 +1003,9 @@
                                break;
                        }
                    }
                    radarMoveGuide(ardAlarmRadarMoves,radarAlarmData);
                    radarFireGuide(ardAlarmRadarFires,radarAlarmData);
                    radarPumpGuide(ardAlarmRadarPumps,radarAlarmData);
                    radarMoveGuide(ardAlarmRadarMoves, radarAlarmData);
                    radarFireGuide(ardAlarmRadarFires, radarAlarmData);
                    radarPumpGuide(ardAlarmRadarPumps, radarAlarmData);
                    break;
                case "external":
                    //region 处理外联报警
@@ -1074,13 +1102,20 @@
            //相机ID
            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;
            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;
            }
            guideTask.setAlarmType(aType);
            //通道(通过日夜时间研判)
@@ -1170,11 +1205,10 @@
        return minDistanceCameraId;
    }
    /**
     * 雷达引导入队
     */
    private void radarGuideToQueue(String alarmId,String radarId, String name, String alarmType, Date createTime, double[] coordinate) {
    private void radarGuideToQueue(String alarmId, String radarId, String name, String alarmType, Date createTime, double[] coordinate) {
        int index = name.indexOf("(");
        String alarmpointName = name.substring(0, index);
        //获取雷达所在塔上的大光电
@@ -1183,9 +1217,7 @@
            log.debug("获取到雷达塔上的光电:" + cameraIdWithTower);
            //如果雷达塔上有光电
            messagesEnqueued(cameraIdWithTower, alarmId, alarmType, createTime, 1, 1, coordinate);
        }
        else
        {
        } else {
            log.debug("未获取到雷达塔上的光电");
        }
        //获取报警点关联的大光电
@@ -1198,20 +1230,17 @@
            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));
        if(ardAlarmRadarMoves.size()>0) {
        if (ardAlarmRadarMoves.size() > 0) {
            for (ArdAlarmRadarMove ardAlarmRadarMove : ardAlarmRadarMoves) {
                //遍历报警数据进行引导
                if (StringUtils.isNull(ardAlarmRadarMove.getLongitude()) || StringUtils.isNull(ardAlarmRadarMove.getLatitude())) {
@@ -1259,12 +1288,12 @@
        }
        //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));
        if(ardAlarmRadarFires.size()>0) {
        if (ardAlarmRadarFires.size() > 0) {
            for (ArdAlarmRadarFire ardAlarmRadarFire : ardAlarmRadarFires) {
                //遍历报警数据进行引导
                if (StringUtils.isNull(ardAlarmRadarFire.getLongitude()) || StringUtils.isNull(ardAlarmRadarFire.getLatitude())) {
@@ -1311,12 +1340,12 @@
        }
        //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));
        if(ardAlarmRadarPumps.size()>0) {
        if (ardAlarmRadarPumps.size() > 0) {
            for (ArdAlarmRadarPump ardAlarmRadarPump : ardAlarmRadarPumps) {
                //遍历报警数据进行引导
                if (StringUtils.isNull(ardAlarmRadarPump.getLongitude()) || StringUtils.isNull(ardAlarmRadarPump.getLatitude())) {
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;
    }
}