‘liusuyi’
2023-06-29 0362c0c8502a81fc974afb8d2aff85d9efd7bbb1
修改报警逻辑 增加优先级队列
已重命名1个文件
已修改11个文件
已删除1个文件
404 ■■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuidePriorityQueue.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuideTask.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java 267 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/PriorityQueueExample.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/domain/ArdAlarmRadar.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/domain/RadarAlarmData.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/mapper/ArdAlarmRadarMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/constant/CamPriority.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/alarm/ArdAlarmRadarMapper.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SdkTask.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuidePriorityQueue.java
@@ -1,13 +1,12 @@
package com.ruoyi.alarm.globalAlarm.domain;
import com.ruoyi.alarm.globalAlarm.service.impl.GuideTask;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
/**
 * @Description:
 * @Description: å¼•导优先级队列
 * @ClassName: PriorityQueue
 * @Author: åˆ˜è‹ä¹‰
 * @Date: 2023å¹´06月29日11:18
@@ -17,7 +16,7 @@
    /**
     * ç›¸æœºé˜Ÿåˆ—,每个相机一个优先级队列
     */
    public static Map<String, java.util.PriorityQueue<GuideTask>> cameraQueueMap = new HashMap<>();
    public static Map<String, PriorityQueue<GuideTask>> cameraQueueMap = new HashMap<>();
    /**
     * åˆ›å»ºä¸€ä¸ªè‡ªå®šä¹‰çš„æ¯”较器,根据优先级属性进行比较
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuideTask.java
ÎļþÃû´Ó ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GuideTask.java ÐÞ¸Ä
@@ -1,7 +1,8 @@
package com.ruoyi.alarm.globalAlarm.service.impl;
package com.ruoyi.alarm.globalAlarm.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * @Description: å¼•导任务
@@ -11,11 +12,12 @@
 * @Version: 1.0
 **/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class GuideTask {
    String cameraId;
    String alarmId;
    String alarmType;
    Integer priority;
    String alarmTime;
    Integer num;
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java
@@ -5,6 +5,8 @@
import com.ruoyi.alarm.cameraAlarm.mapper.ArdAlarmCameraMapper;
import com.ruoyi.alarm.globalAlarm.domain.GlobalAlarmCondition;
import com.ruoyi.alarm.globalAlarm.domain.GlobalAlarmData;
import com.ruoyi.alarm.globalAlarm.domain.GuidePriorityQueue;
import com.ruoyi.alarm.globalAlarm.domain.GuideTask;
import com.ruoyi.alarm.globalAlarm.service.IGlobalAlarmService;
import com.ruoyi.alarm.radarAlarm.domain.ArdAlarmRadar;
import com.ruoyi.alarm.radarAlarm.domain.RadarAlarmData;
@@ -22,6 +24,7 @@
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.constant.CamPriority;
import com.ruoyi.utils.tools.ArdTool;
import com.ruoyi.utils.tools.GisTool;
import com.ruoyi.common.utils.uuid.IdUtils;
@@ -54,19 +57,19 @@
@Slf4j(topic = "mqtt")
public class GlobalAlarmServiceImpl implements IGlobalAlarmService {
    @Resource
    ArdAlarmRadarMapper ardAlarmRadarMapper;
    private ArdAlarmRadarMapper ardAlarmRadarMapper;
    @Resource
    ArdAlarmStealelecMapper ardAlarmStealelecMapper;
    private ArdAlarmStealelecMapper ardAlarmStealelecMapper;
    @Resource
    ArdAlarmTubeMapper ardAlarmTubeMapper;
    private ArdAlarmTubeMapper ardAlarmTubeMapper;
    @Resource
    ArdAlarmCameraMapper ardAlarmCameraMapper;
    private ArdAlarmCameraMapper ardAlarmCameraMapper;
    @Resource
    ArdTubesMapper ardTubesMapper;
    private ArdTubesMapper ardTubesMapper;
    @Resource
    ArdAlarmpointsWellMapper ardAlarmpointsWellMapper;
    private ArdAlarmpointsWellMapper ardAlarmpointsWellMapper;
    @Resource
    ArdTubesDetailsMapper ardTubesDetailsMapper;
    private ArdTubesDetailsMapper ardTubesDetailsMapper;
    @Resource
    private ISysConfigService configService;
    @Resource
@@ -212,7 +215,7 @@
     * @修改人和其它信息
     */
    @Override
    @Async("alarmExecutor")
//    @Async("alarmExecutor")
    public void receiveAlarm(String topic, String message) {
        try {
            switch (topic) {
@@ -227,28 +230,6 @@
                    int aas = ardAlarmStealelecMapper.insertArdAlarmStealelec(ardAlarmStealelec);
                    if (aas > 0) {
                        log.info("stealelec入库成功:" + ardAlarmStealelec);
                        ArdAlarmpointsWell well = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(ardAlarmStealelec.getDescribe());
                        if (well != null) {
                            ardAlarmStealelec.setLongitude(well.getLongitude());
                            ardAlarmStealelec.setLatitude(well.getLatitude());
                            ardAlarmStealelec.setAltitude(well.getAltitude());
                            //引导录像
                            CameraCmd cmd = new CameraCmd();
                            cmd.setRecordBucketName("record");
                            cmd.setRecordObjectName("stealelec");
                            cmd.setOperator("sys_steal_elec");
                            cmd.setExpired(30);
                            cmd.setTargetPosition(new double[]{well.getLongitude(), well.getLatitude(), well.getAltitude()});
                            boolean res = guideCamera(cmd);
                            if (res) {
                                String url = alarmToRecord(cmd);
                                if (StringUtils.isNotEmpty(url)) {
                                    //更新录像
                                    ardAlarmStealelec.setRecordUrl(url);
                                    ardAlarmStealelecMapper.updateArdAlarmStealelec(ardAlarmStealelec);
                                }
                            }
                        }
                    }
                    //endregion
                    break;
@@ -276,21 +257,9 @@
                    int aat = ardAlarmTubeMapper.insertArdAlarmTube(ardAlarmTube);
                    if (aat > 0) {
                        log.debug("tube入库成功:" + ardAlarmTube);
                        //引导录像
                        CameraCmd cmd = new CameraCmd();
                        cmd.setRecordBucketName("record");
                        cmd.setRecordObjectName("tube");
                        cmd.setOperator("sys_tube_leak");
                        cmd.setExpired(30);
                        cmd.setTargetPosition(new double[]{ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude(), ardAlarmTube.getAltitude()});
                        boolean res = guideCamera(cmd);
                        if (res) {
                            String url = alarmToRecord(cmd);
                            if (StringUtils.isNotEmpty(url)) {
                                //更新录像
                                ardAlarmTube.setRecordUrl(url);
                                ardAlarmTubeMapper.updateArdAlarmTube(ardAlarmTube);
                            }
                        String nearbyCamera = getNearbyCamera(new double[]{ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude()});
                        if(StringUtils.isNotEmpty(nearbyCamera)) {
                            addTaskQueue(nearbyCamera, ardAlarmTube.getId(), "sys_tube_leak", ardAlarmTube.getAlarmTime(), 1);
                        }
                    }
                    //endregion
@@ -299,25 +268,30 @@
                    //region å¤„理通用光电报警
                    ArdAlarmCamera ardAlarmCamera = JSONObject.parseObject(message, ArdAlarmCamera.class);
                    ardAlarmCamera.setId(IdUtils.simpleUUID());
                    int aac = ardAlarmCameraMapper.insertArdAlarmCamera(ardAlarmCamera);
                    if (aac > 0) {
                        log.debug("camera入库成功:" + ardAlarmCamera);
                        String nearbyCamera = getNearbyCamera(new double[]{ardAlarmCamera.getLongitude(), ardAlarmCamera.getLatitude()});
                        if(StringUtils.isNotEmpty(nearbyCamera)) {
                            addTaskQueue(nearbyCamera, ardAlarmCamera.getId(), "sys_camera", ardAlarmCamera.getAlarmTime(), 1);
                        }
                        //引导录像
                        CameraCmd cmd = new CameraCmd();
                        cmd.setRecordBucketName("record");
                        cmd.setRecordObjectName("camera");
                        cmd.setOperator("sys_camera");
                        cmd.setExpired(30);
                        cmd.setTargetPosition(new double[]{ardAlarmCamera.getLongitude(), ardAlarmCamera.getLatitude()});
                        boolean res = guideCamera(cmd);
                        if (res) {
                            String url = alarmToRecord(cmd);
                            if (StringUtils.isNotEmpty(url)) {
                                //更新录像
                                ardAlarmCamera.setRecordUrl(url);
                                ardAlarmCameraMapper.updateArdAlarmCamera(ardAlarmCamera);
                            }
                        }
//                        CameraCmd cmd = new CameraCmd();
//                        cmd.setRecordBucketName("record");
//                        cmd.setRecordObjectName("camera");
//                        cmd.setOperator("sys_camera");
//                        cmd.setExpired(30);
//                        cmd.setTargetPosition(new double[]{ardAlarmCamera.getLongitude(), ardAlarmCamera.getLatitude()});
//                        boolean res = guideCamera(cmd);
//                        if (res) {
//                            String url = alarmToRecord(cmd);
//                            if (StringUtils.isNotEmpty(url)) {
//                                //更新录像
//                                ardAlarmCamera.setRecordUrl(url);
//                                ardAlarmCameraMapper.updateArdAlarmCamera(ardAlarmCamera);
//                            }
//                        }
                    }
                    //endregion
                    break;
@@ -325,35 +299,142 @@
                    //region å¤„理雷达报警
                    RadarAlarmData radarAlarmData = JSONObject.parseObject(message, RadarAlarmData.class);
                    List<ArdAlarmRadar> ardAlarmRadars = radarAlarmData.getArdAlarmRadars();
                    Map<String, Object> readyGuide = new HashMap<>();
                    for (ArdAlarmRadar ardAlarmRadar : ardAlarmRadars) {
                        ardAlarmRadar.setId(IdUtils.simpleUUID());
                        String uuid = IdUtils.simpleUUID();
                        ardAlarmRadar.setId(uuid);
                        ardAlarmRadar.setAlarmTime(radarAlarmData.getAlarmTime());
                        int aar = ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar);
                        if (aar > 0) {
                            log.debug("radar入库成功:" + ardAlarmRadar);
                        String name = ardAlarmRadar.getName() + "(" + radarAlarmData.getRadarName() + ")";
                        ardAlarmRadar.setName(name);
                        ardAlarmRadar.setCreateTime(new Date());
                        String alarmType = "";
                        switch (ardAlarmRadar.getAlarmType()) {
                            case "运动目标检测":
                                alarmType = "sys_radar_move";
                                break;
                            case "热源检测":
                                alarmType = "sys_radar_fire";
                                break;
                        }
                        readyGuide.put(ardAlarmRadar.getName(), ardAlarmRadar);//每个报警点取出一条报警
                        //判断当前报警点5分钟内是否已引导
                        ardAlarmRadar.setGuideFlag(1);
                        ArdAlarmRadar AlarmRadar = ardAlarmRadarMapper.getArdAlarmRadarWithGuide(ardAlarmRadar);
                        if (StringUtils.isNull(AlarmRadar)) {
                            //5分钟内未引导直接入库
                            ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar);
                            //获取雷达所在塔上的大光电
                            String cameraIdWithTower = ardAlarmRadarMapper.getCameraByRadar(radarAlarmData.getRadarId());
                            if (StringUtils.isNotNull(cameraIdWithTower) && StringUtils.isNotEmpty(cameraIdWithTower)) {
                                //入队列待引导
                                addTaskQueue(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getAlarmTime(), 1);
                    }
                    //获取每个报警点关联的相机
                        } else {
                            //5分钟内有引导
                            ardAlarmRadar.setGuideFlag(0);
                            int count = ardAlarmRadarMapper.getArdAlarmRadarWithNotGuide(ardAlarmRadar, AlarmRadar.getCreateTime());
                            if (count >= 3) {
                                //未引导超过3次,直接入库入队
                                //5分钟内未引导直接入库
                                ardAlarmRadar.setGuideFlag(1);
                                ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar);
                                //入队列待引导
                                //获取雷达所在塔上的大光电
                                String cameraIdWithTower = ardAlarmRadarMapper.getCameraByRadar(radarAlarmData.getRadarId());
                                if (StringUtils.isNotNull(cameraIdWithTower) && StringUtils.isNotEmpty(cameraIdWithTower)) {
                                    //如果雷达塔上有光电
                                    addTaskQueue(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getAlarmTime(), count);
                                }
                            } else {
                                //未引导未超过3次,直接入库
                                ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar);
                            }
                    //先找报警雷达塔上的相机
                    CameraCmd cmd = new CameraCmd();
                    cmd.setCameraId("1");
                    cmd.setChannelNum(1);
                    boolean b = guideCamera(cmd);
                        }
                    //再找报警点关联的相机
                    cmd.setCameraId("2");
                    cmd.setChannelNum(1);
                    boolean b1 = guideCamera(cmd);
                        //获取兴趣点关联的大光电
//                            ArdAlarmpointsWell well=new ArdAlarmpointsWell();
//                            well.setWellId(ardAlarmRadar.getName());
//                            List<ArdAlarmpointsWell> ardAlarmpointsWells = ardAlarmpointsWellMapper.selectArdAlarmpointsWellList(well);
//                            if(ardAlarmpointsWells!=null&&ardAlarmpointsWells.size()>0)
//                            {
//                                String cameraIdWithWell = ardAlarmpointsWells.get(0).getCameraId();
//                            }
                    }
                    printPriorityQueue();
                    //endregion
                    break;
            }
            printPriorityQueue();
        } catch (Exception ex) {
            log.error("接收报警异常:" + ex.getMessage());
        }
    }
    /**
     * å¼•导任务入队方法
     */
    private void addTaskQueue(String cameraId, String alarmId, String alarmType, Date alarmTime, Integer num) {
        GuideTask guideTask = new GuideTask();
        guideTask.setCameraId(cameraId);
        guideTask.setAlarmId(alarmId);
        SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        guideTask.setAlarmTime(fmt.format(alarmTime));
        Integer priority = CamPriority.priorityMap.get(alarmType);
        guideTask.setPriority(priority);
        guideTask.setNum(num);
        PriorityQueue<GuideTask> priorityQueue = GuidePriorityQueue.cameraQueueMap.get(guideTask.getCameraId());
        priorityQueue.add(guideTask);
    }
    /**
     * æ‰“印队列
     */
    private void printPriorityQueue() {
        for (String cameraId : GuidePriorityQueue.cameraQueueMap.keySet()) {
            log.info("cameraId" + cameraId);
            PriorityQueue<GuideTask> priorityQueue = GuidePriorityQueue.cameraQueueMap.get(cameraId);
            for (GuideTask task : priorityQueue) {
                log.info("alarmId:" + task.getAlarmId() + "  alarmTime:" + task.getAlarmTime() + "  priority:" + task.getPriority() + "  num:" + task.getNum() + "  cameraId:" + task.getCameraId());
            }
        }
    }
    /**
     * æŸ¥æ‰¾é™„近开启报警引导功能光电
     */
    private String getNearbyCamera(double[] targetPosition) {
        String minDistanceCameraId = "";
        //获取所有大光电
        List<ArdCameras> ardCamerasList = ardCamerasMapper.selectArdCamerasList(new ArdCameras("1"));
        //统计所有大光电可视范围内与报警点的距离
        Map<String, Double> distanceMap = new HashMap<>();
        Map<String, Integer> guideMap = new HashMap<>();
        for (ArdCameras camera : ardCamerasList) {
            double[] camPosition = new double[]{camera.getLongitude(), camera.getLatitude()};
            double distance = GisTool.getDistance(targetPosition, camPosition);
            if (distance != 0.0 && distance <= camera.getCamMaxVisibleDistance()) {
                distanceMap.put(camera.getId(), distance);
                if (StringUtils.isNull(camera.getCamAlarmGuideEnable())) {
                    camera.setCamAlarmGuideEnable(0);
                }
                guideMap.put(camera.getId(), camera.getCamAlarmGuideEnable());
            }
        }
        if (distanceMap.size() > 0) {
            log.debug("尝试查找最近光电");
            //获取距离字典中最近的一个相机ID
            minDistanceCameraId = ArdTool.getKeyByMinValue(distanceMap);
            log.debug("查找到最近光电:" + minDistanceCameraId);
            if (guideMap.get(minDistanceCameraId).equals(0)) {
                log.debug("该光电未开启报警引导");
                return " ";
            }
        }
        return minDistanceCameraId;
    }
    /**
@@ -367,45 +448,23 @@
    private boolean guideCamera(CameraCmd cmd) {
        try {
            String dayNightTime = redisCache.getCacheObject("sys_config:dayNightTime");
            //获取所有大光电
            List<ArdCameras> ardCamerasList = ardCamerasMapper.selectArdCamerasList(new ArdCameras("1"));
            //统计所有大光电可视范围内与报警点的距离
            Map<String, Double> distanceMap = new HashMap<>();
            Map<String, Integer> guideMap = new HashMap<>();
            for (ArdCameras camera : ardCamerasList) {
                double[] camPosition = new double[]{camera.getLongitude(), camera.getLatitude()};
                double distance = GisTool.getDistance(cmd.getTargetPosition(), camPosition);
                if (distance != 0.0 && distance <= camera.getCamMaxVisibleDistance()) {
                    distanceMap.put(camera.getId(), distance);
                    if (StringUtils.isNull(camera.getCamAlarmGuideEnable())) {
                        camera.setCamAlarmGuideEnable(0);
                    }
                    guideMap.put(camera.getId(), camera.getCamAlarmGuideEnable());
                }
            }
            if (distanceMap.size() > 0) {
                log.debug("尝试查找最近光电");
                //获取距离字典中最近的一个相机ID
                String minDistanceCameraId = ArdTool.getKeyByMinValue(distanceMap);
                log.debug("查找到最近光电:" + minDistanceCameraId + ",尝试引导");
                if (guideMap.get(minDistanceCameraId).equals(0)) {
                    log.debug("该光电未开启报警引导");
                    return false;
                }
            String nearbyCamera = getNearbyCamera(cmd.getTargetPosition());
            if (StringUtils.isNotEmpty(nearbyCamera)) {
                //引导光电
                cmd.setCameraId(minDistanceCameraId);
                cmd.setCameraId(nearbyCamera);
                cmd.setChannelNum(ArdTool.getChannelBydayNightTime(dayNightTime));
                boolean guideRes = hikClientService.guideTargetPosition(cmd);
                return guideRes;
            } else {
                log.debug("未查找到最近光电");
                return false;
            }
        } catch (Exception ex) {
        } catch (
                Exception ex) {
            log.error("引导异常:" + ex.getMessage());
            return false;
        }
    }
    /**
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/PriorityQueueExample.java
ÎļþÒÑɾ³ý
ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/domain/ArdAlarmRadar.java
@@ -69,7 +69,8 @@
     * æœªè¯»æŠ¥è­¦æ•°é‡
     */
    private Integer count;
    /**
     * å¼•导标记
     */
    private  Integer guideFlag;
}
ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/domain/RadarAlarmData.java
@@ -17,11 +17,14 @@
@Data
public class RadarAlarmData {
    /** é›·è¾¾id */
    private String radarId;
    /** é›·è¾¾åç§°*/
    private String radarName;
    /** æŠ¥è­¦æ—¶é—´ */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "报警时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date alarmTime;
    private List<ArdAlarmRadar> ardAlarmRadars;
}
ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/mapper/ArdAlarmRadarMapper.java
@@ -2,6 +2,8 @@
import com.ruoyi.alarm.radarAlarm.domain.ArdAlarmRadar;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
@@ -63,4 +65,17 @@
    public List<ArdAlarmRadar> selectListAllByCommand(@Param("refreshTime")String refreshTime,@Param("alarmType")String alarmType);
    int selectCountByAlarmTime(@Param("refreshTime")String refreshTime,@Param("alarmType")String alarmType);
    /**
     * é€šè¿‡é›·è¾¾id找到关联塔上的大光电id
     *
     */
     String getCameraByRadar(String radarId);
     /**
      *  æŸ¥æ‰¾5分钟内引导过的记录
      * */
     public ArdAlarmRadar getArdAlarmRadarWithGuide(ArdAlarmRadar ardAlarmRadar);
     public int getArdAlarmRadarWithNotGuide(@Param("ardAlarmRadar")ArdAlarmRadar ardAlarmRadar, @Param("guideTime")Date guideTime);
}
ard-work/src/main/java/com/ruoyi/constant/CamPriority.java
@@ -1,10 +1,7 @@
package com.ruoyi.constant;
import com.ruoyi.alarm.globalAlarm.service.impl.GuideTask;
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
/**
 * @Description: ç›¸æœºæŽ§åˆ¶ä¼˜å…ˆçº§
@@ -15,9 +12,10 @@
 **/
public class CamPriority {
    public static Map<String,Object> priorityMap=new HashMap<>();
    public static Map<String,Integer> priorityMap=new HashMap<>();
    static {
        priorityMap.put("sys_radar_fire",999);//雷达防火报警
        priorityMap.put("sys_radar_move",999);//雷达移动报警
        priorityMap.put("sys_tube_leak",998);//管线泄露报警
        priorityMap.put("sys_camera",997);//通用光电报警
        priorityMap.put("sys_steal_elec",996);//盗电报警
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -210,7 +210,7 @@
            log.debug("加载lib完成!");
            List<ArdCameras> ardCameras = ardCamerasMapper.selectArdCamerasListNoDataScope(new ArdCameras());
            for (ArdCameras camera : ardCameras) {
                Thread.sleep(100);
                Thread.sleep(500);
                login(camera);
            }
        } catch (Exception ex) {
ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java
@@ -1,5 +1,7 @@
package com.ruoyi.device.hiksdk.util.hikSdkUtil;
import com.ruoyi.alarm.globalAlarm.domain.GuidePriorityQueue;
import com.ruoyi.alarm.globalAlarm.domain.GuideTask;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
@@ -9,6 +11,8 @@
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Comparator;
import java.util.PriorityQueue;
/**
 * @Description: å¼‚步登录回调
@@ -35,6 +39,10 @@
            log.info(camera.getIp() + ":" + camera.getPort() + "登录成功");
            camera.setLoginId(lUserID);
            camera.setChannel((int) lpDeviceinfo.byChanNum);
            //创建引导队列
            Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
            PriorityQueue<GuideTask> priorityQueue=new PriorityQueue<>(comparator);
            GuidePriorityQueue.cameraQueueMap.put(camera.getId(),priorityQueue);
        } else {
            log.info(camera.getIp() + ":" + camera.getPort() + "登录失败");
            camera.setChannel(0);
ard-work/src/main/resources/mapper/alarm/ArdAlarmRadarMapper.xml
@@ -63,6 +63,7 @@
            <if test="createTime != null">create_time,</if>
            <if test="userId != null">user_id,</if>
            <if test="deptId != null">dept_id,</if>
            <if test="guideFlag != null">guide_flag,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
@@ -77,6 +78,7 @@
            <if test="createTime != null">#{createTime},</if>
            <if test="userId != null">#{userId},</if>
            <if test="deptId != null">#{deptId},</if>
            <if test="guideFlag != null">#{guideFlag},</if>
        </trim>
    </insert>
@@ -94,6 +96,7 @@
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="userId != null">user_id = #{userId},</if>
            <if test="deptId != null">dept_id = #{deptId},</if>
            <if test="guideFlag != null">guide_flag = #{guideFlag},</if>
        </trim>
        where id = #{id}
    </update>
@@ -140,4 +143,28 @@
        WHERE aar.alarm_time >= CURRENT_TIMESTAMP - INTERVAL '%${refreshTime}%' MINUTE
          and aar.alarm_type = #{alarmType}
    </select>
    <select id="getCameraByRadar" resultType="String">
        select ac.id
        from ard_equip_radar aer
                 INNER JOIN ard_towers at
        on aer.tower_id= at.id
            INNER JOIN ard_cameras ac on aer.tower_id=ac.tower_id
    </select>
    <select id="getArdAlarmRadarWithGuide" resultMap="ArdAlarmRadarResult">
        select *
        from ard_alarm_radar
        where create_time > current_timestamp - interval '5' minute
          and guide_flag = #{guideFlag}
          and alarm_type =#{alarmType}
          and name = #{name}
        ORDER BY create_time desc  limit 1
    </select>
    <select id="getArdAlarmRadarWithNotGuide" resultType="Integer">
        select count(*)
        from ard_alarm_radar
        where create_time >= #{guideTime}
          and guide_flag = #{ardAlarmRadar.guideFlag}
          and alarm_type =#{ardAlarmRadar.alarmType}
          and name = #{ardAlarmRadar.name}
    </select>
</mapper>
ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
@@ -27,6 +27,7 @@
    public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
    public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
    public static String YYYY_MM_DD_HH_MM_SS_MS = "yyyy-MM-dd HH:mm:ss.fff";
    public static String HH_MM_SS = "HH:mm:ss";
    private static String[] parsePatterns = {
@@ -58,12 +59,14 @@
    {
        return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
    }
    public static final String dateTimeNow()
    {
        return dateTimeNow(YYYYMMDDHHMMSS);
    }
    public static final String dateTimeNowMS()
    {
        return dateTimeNow(YYYY_MM_DD_HH_MM_SS_MS);
    }
    public static final String dateTimeNow(final String format)
    {
        return parseDateToStr(format, new Date());
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SdkTask.java
@@ -1,5 +1,6 @@
package com.ruoyi.quartz.task;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.common.websocket.util.WebSocketUtils;
import com.ruoyi.device.camera.domain.ArdCameras;
@@ -46,6 +47,10 @@
            cmd.setCameraId(camera.getId());
            cmd.setChannelNum(1);
            Map<String, Object> ptz = hikClientService.getPtz(cmd);
            if(StringUtils.isNull(ptz))
            {
                continue;
            }
            if (ptz.size() > 0) {
                ptz.put("cameraId", camera.getId());
                ptz.put("operatorExpired",camera.getOperatorExpired());