‘liusuyi’
2023-07-01 70210b0eb0c58e1779fd89cbcf0909154d7d4936
基本完成优先级排队报警逻辑
已修改12个文件
214 ■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuidePriorityQueue.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueManager.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/constant/CamPriority.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java 116 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/logback.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/annotation/SdkOperate.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/SdkOperateAspect.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/AlarmTask.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuidePriorityQueue.java
@@ -16,7 +16,7 @@
 * @Date: 2023年06月29日11:18
 * @Version: 1.0
 **/
@Slf4j
@Slf4j(topic = "guideQueue")
public class GuidePriorityQueue {
    /**
     * 相机队列,每个相机一个优先级队列
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java
@@ -343,7 +343,13 @@
                    int aat = ardAlarmTubeMapper.insertArdAlarmTube(ardAlarmTube);
                    if (aat > 0) {
                        log.debug("tube入库成功:" + ardAlarmTube);
                        double[] coordinate=new double[]{ardAlarmTube.getLongitude(),ardAlarmTube.getLatitude()};
                        Double longitude = ardAlarmTube.getLongitude();
                        Double latitude = ardAlarmTube.getLatitude();
                        if(StringUtils.isNull(longitude)||StringUtils.isNull(latitude))
                        {
                            return;
                        }
                        double[] coordinate=new double[]{longitude,latitude};
                        String nearbyCameraId = getNearbyCamera(new double[]{ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude()});
                        if (StringUtils.isNotEmpty(nearbyCameraId)) {
                            messagesEnqueued(nearbyCameraId, ardAlarmTube.getId(), "sys_tube_leak",ardAlarmTube.getCreateTime(), 1,1,coordinate);
@@ -400,8 +406,11 @@
                            ArdAlarmpointsWell ardAlarmpointsWell = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(alarmpointName);
                            if(StringUtils.isNotNull(ardAlarmpointsWell) && StringUtils.isNotEmpty(ardAlarmpointsWell.getCameraId()))
                            {
                                String cameraId = ardAlarmpointsWell.getCameraId();
                                if(cameraIdWithTower.equals(cameraId))
                                {
                                    return;
                                }
                                log.info("获取到报警点关联的光电:"+cameraId);
                                //如果报警点关联了光电
                                messagesEnqueued(cameraId, uuid, alarmType,ardAlarmRadar.getCreateTime(), 1,2,coordinate);
@@ -427,6 +436,10 @@
                                if(StringUtils.isNotNull(ardAlarmpointsWell) && StringUtils.isNotEmpty(ardAlarmpointsWell.getCameraId()))
                                {
                                    String cameraId = ardAlarmpointsWell.getCameraId();
                                    if(cameraIdWithTower.equals(cameraId))
                                    {
                                        return;
                                    }
                                    log.info("获取到报警点关联的光电:"+cameraId);
                                    //如果报警点关联了光电
                                    messagesEnqueued(cameraId, uuid, alarmType,ardAlarmRadar.getCreateTime(), count,2,coordinate);
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueManager.java
@@ -24,7 +24,7 @@
 */
@Component
@Slf4j
@Slf4j(topic = "guideQueue")
public class QueueManager {
    @Autowired
@@ -64,8 +64,9 @@
        PriorityBlockingQueue<GuideTask> guideTaskQueue = GuidePriorityQueue.cameraQueueMap.get(cameraId);
        if(StringUtils.isNull(guideTaskQueue))
        {
            log.info("相机未初始化成功,没有队列");
            log.info("相机未登录,没有队列");
        }
        log.debug("新任务入队:"+task.getAlarmId());
        guideTaskQueue.add(task);
        /*获取该相机的当前执行线程*/
        TaskThread currentTaskThread = threadMap.get(cameraId);
@@ -92,14 +93,15 @@
            while (!Thread.currentThread().isInterrupted()) {
                try {
                    GuideTask task = queue.take();
                    log.debug("取出队列数据:"+task.getAlarmId());
                    taskExecutor.processTask(task);
                   // GuidePriorityQueue.printPriorityQueue();
                    // 更新线程的当前任务
                    TaskThread currentTaskThread = threadMap.get(queueName);
                    if (currentTaskThread != null) {
                        currentTaskThread.setCurrentTask(task);
                    }
                } catch (InterruptedException e) {
                    log.info("中断当前线程");
                    //线程中断,退出循环
                    Thread.currentThread().interrupt();
                }
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java
@@ -23,7 +23,7 @@
 */
@Component
@Slf4j
@Slf4j(topic = "guideQueue")
public class QueueTaskExecutor {
    @Resource
    IHikClientService hikClientService;
@@ -42,12 +42,18 @@
            cmd.setExpired(30);
            cmd.setRecordBucketName("record");
            cmd.setRecordObjectName("alarm");
            log.debug("开始引导");
            boolean guideRes = hikClientService.guideTargetPosition(cmd);
            if (guideRes) {
                log.debug("引导成功");
                hikClientService.controlLock(cmd);//上锁
                cmd.setEnable(true);//开始录像
                hikClientService.recordToMinio(cmd);//开始录像
                Thread.sleep(30000);
                try {
                    Thread.sleep(30000);
                } catch (InterruptedException e) {
                    log.info("当前任务ID"+guideTask.getAlarmId()+"线程被终止");
                }
                cmd.setEnable(false);//停止录像
                cmd.setUploadMinio(true);//上传minio
                String url = hikClientService.recordToMinio(cmd);//停止录像返回url
@@ -83,7 +89,7 @@
                }
            }
        } catch (Exception ex) {
            log.info("自动引导异常:" + ex.getMessage());
            log.info("线程任务异常:" + ex.getMessage());
        }
    }
}
ard-work/src/main/java/com/ruoyi/constant/CamPriority.java
@@ -1,12 +1,8 @@
package com.ruoyi.constant;
import com.ruoyi.alarm.globalAlarm.domain.GuidePriorityQueue;
import com.ruoyi.alarm.globalAlarm.domain.GuideTask;
import lombok.extern.slf4j.Slf4j;
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
/**
 * @Description: 相机控制优先级
ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java
@@ -8,7 +8,8 @@
@Data
@ApiModel(description = "sdk命令实体类")
public class CameraCmd {
    /*命令标识*/
    String cmdType;
    /*相机ID*/
    String cameraId;
    /*相机通道号*/
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
@@ -54,8 +54,10 @@
    //聚焦模式
    boolean controlFocusMode(CameraCmd cmd);
    //获取聚焦模式
    String getFocusMode(CameraCmd cmd);
    //云台加热
    boolean controlPTHeateRpwron(CameraCmd cmd);
@@ -64,8 +66,10 @@
    //配置锁定
    boolean controlLock(CameraCmd cmd);
    //配置解锁
    boolean controlUnLock(CameraCmd cmd);
    //获取云台锁定信息
    int getPTZLockInfo(CameraCmd cmd);
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -1,13 +1,8 @@
package com.ruoyi.device.hiksdk.service.impl;
import com.ruoyi.common.annotation.SdkOperate;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.constant.CamPriority;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
import com.ruoyi.device.hiksdk.common.GlobalVariable;
@@ -18,7 +13,6 @@
import com.ruoyi.device.hiksdk.service.IHikClientService;
import com.ruoyi.device.hiksdk.util.hikSdkUtil.LoginResultCallBack;
import com.ruoyi.device.hiksdk.util.minio.MinioUtils;
import com.ruoyi.system.mapper.SysUserMapper;
import com.sun.jna.Native;
import com.sun.jna.Platform;
import com.sun.jna.Pointer;
@@ -30,6 +24,7 @@
import javax.annotation.Resource;
import java.io.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.nio.ByteBuffer;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
@@ -50,9 +45,6 @@
    @Resource
    ArdCamerasMapper ardCamerasMapper;
    @Resource
    SysUserMapper sysUserMapper;
    private static HCNetSDK hCNetSDK;
@@ -132,11 +124,8 @@
            hCNetSDK.NET_DVR_Cleanup();
            camera.setLoginId(-1);
        }
        if (GlobalVariable.loginMap.containsKey(camera.getId())) {
            GlobalVariable.loginMap.remove(camera.getId());
        }
        GlobalVariable.loginMap.remove(camera.getId());
        GlobalVariable.loginMap.put(camera.getId(), lUserID);
        camera.setLoginId(lUserID);
        camera.setChannel((int) m_strDeviceInfo.byStartChan);
        return camera;
@@ -242,7 +231,7 @@
    /**
     * 是否在线
     *
     * @param cmd
     * @param cmd 相机命令
     */
    @Override
    public boolean isOnLine(CameraCmd cmd) {
@@ -251,8 +240,7 @@
            return false;
        }
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        boolean isOnLine = hCNetSDK.NET_DVR_RemoteControl(userId, HCNetSDK.NET_DVR_CHECK_USER_STATUS, null, 0);
        return isOnLine;
        return hCNetSDK.NET_DVR_RemoteControl(userId, HCNetSDK.NET_DVR_CHECK_USER_STATUS, null, 0);
    }
    /**
@@ -277,13 +265,13 @@
            return false;
        }
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        Integer dwStop;
        int dwStop;
        if (enable) {
            dwStop = 0;//开启
        } else {
            dwStop = 1;//关闭
        }
        Integer dwPTZCommand = -1;
        int dwPTZCommand = -1;
        switch (code) {
            /*方向*/
            case 1:
@@ -350,7 +338,7 @@
    /**
     * 设置聚焦值
     *
     * @param cmd
     * @param cmd 相机命令
     */
    @Override
    @SdkOperate
@@ -378,7 +366,7 @@
    /**
     * 获取聚焦值
     *
     * @param cmd
     * @param cmd 相机命令
     */
    @Override
    public Map<String, Object> getFocusPos(CameraCmd cmd) {
@@ -411,7 +399,7 @@
    /**
     * 设置预置点
     *
     * @param cmd
     * @param cmd 相机命令
     */
    @Override
    @SdkOperate
@@ -434,7 +422,7 @@
    /**
     * 转到预置点
     *
     * @param cmd
     * @param cmd 相机命令
     */
    @Override
    @SdkOperate
@@ -481,8 +469,8 @@
            if (bool) {
                resolution.read();
                //视频输出口分辨率:0- 1024x768,1- 1280x720,2-1280x1024,3- 1680x1050,4- 1920x1080,5- 3840*2160
                byte byStreamType = resolution.struNormHighRecordPara.byStreamType;
                int dwVideoBitrate = resolution.struNormHighRecordPara.dwVideoBitrate;
//                byte byStreamType = resolution.struNormHighRecordPara.byStreamType;
//                int dwVideoBitrate = resolution.struNormHighRecordPara.dwVideoBitrate;
                int byResolution = resolution.struNormHighRecordPara.byResolution;
                switch (byResolution) {
                    case 0:
@@ -560,7 +548,6 @@
    }
    /**
     * @return
     * @描述 获取ptz信息
     * @参数 [userId, channelNum]
     * @返回值 boolean
@@ -584,7 +571,7 @@
        boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, HCNetSDK.NET_DVR_GET_PTZPOS, channelNum, pioint, m_ptzPosCurrent.size(), ibrBytesReturned);
        if (bool) {
            m_ptzPosCurrent.read();
            DecimalFormat df = new DecimalFormat("0.0");//设置保留位数
            // DecimalFormat df = new DecimalFormat("0.0");//设置保留位数
            //16进制转Integer后除10,保留小数点1位
            //实际显示的PTZ值是获取到的十六进制值的十分之一,
            //如获取的水平参数P的值是0x1750,实际显示的P值为175度;
@@ -596,7 +583,7 @@
            double p = b.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
            double t = c.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
            double z = d.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
//            log.debug("T垂直参数为: " + p + "P水平参数为: " + t + "Z变倍参数为: " + z);
            //log.debug("T垂直参数为: " + p + "P水平参数为: " + t + "Z变倍参数为: " + z);
            Map<String, Object> ptzMap = new HashMap<>();
            ptzMap.put("p", p);
            ptzMap.put("t", t);
@@ -704,67 +691,9 @@
        now.setTime(now.getTime() + cmd.getExpired() * 1000);
        ardCameras.setOperatorExpired(now);//设置当前过期时间
        ardCamerasMapper.updateArdCameras(ardCameras);
//        String cameraId = cmd.getCameraId();//申请锁的相机
//        ArdCameras ardCameras = ardCamerasMapper.selectArdCamerasById(cameraId);
//        if (StringUtils.isNull(ardCameras)) {
//            return false;//找不到相机拒绝操控
//        }
//        Integer expired = cmd.getExpired();//申请控制时长
//        String operator = cmd.getOperator();//申请者
//        String currentOperator = ardCameras.getOperatorId();//相机当前控制者
//        Date currentExpired = ardCameras.getOperatorExpired();//相机当前过期时间
//        if (currentExpired == null) {
//            //设置当前操作用户ID
//            ardCameras.setOperatorId(operator);
//            //设置当前过期时间
//            Date now = new Date();
//            now.setTime(now.getTime() + expired * 1000);
//            ardCameras.setOperatorExpired(now);
//            ardCamerasMapper.updateArdCameras(ardCameras);
//        } else {
//            //如果过期时间有值
//            //如果是本人直接修改
//            if (currentOperator.equals(operator)) {
//                //设置当前过期时间
//                Date now = new Date();
//                now.setTime(now.getTime() + expired * 1000);
//                ardCameras.setOperatorExpired(now);
//                ardCamerasMapper.updateArdCameras(ardCameras);
//            } else {
//                //如果非本人比较优先级
//                Integer currentLevel = 0;//当前操作者的优先级
//                if (CamPriority.priorityMap.containsKey(currentOperator)) {
//                    /*当前控制者为系统报警用户*/
//                    currentLevel = (Integer) CamPriority.priorityMap.get(currentOperator);
//                } else {
//                    /*当前控制者为普通用户*/
//                    SysUser sysUser = sysUserMapper.selectUserById(currentOperator);
//                    currentLevel = sysUser.getCameraPriority();
//                }
//                Integer operatorLevel = 0;//获取申请者的优先级
//                if (CamPriority.priorityMap.containsKey(operator)) {
//                    /*包含说明当前申请控制者为系统报警用户*/
//                    operatorLevel = (Integer) CamPriority.priorityMap.get(operator);
//                } else {
//                    /*否则申请控制者为当前登录用户*/
//                    LoginUser loginUser = SecurityUtils.getLoginUser();
//                    SysUser user = loginUser.getUser();//获取登录用户的信息
//                    operatorLevel = user.getCameraPriority();
//                }
//                //判断优先级
//                if (operatorLevel > currentLevel) {
//                    Date now = new Date();
//                    now.setTime(now.getTime() + expired * 60);
//                    ardCameras.setOperatorExpired(now);//设置当前过期时间
//                    ardCameras.setOperatorId(operator);//设置当前用户
//                    ardCamerasMapper.updateArdCameras(ardCameras);
//                } else {
//                    return false;//优先级低无法上锁
//                }
//            }
//        }
        return true;
    }
    /**
     * @描述 操控解锁
     * @参数 [userId, channelNum]
@@ -778,14 +707,12 @@
        String cameraId = cmd.getCameraId();//申请解锁的相机
        String operator = cmd.getOperator();//申请者
        ArdCameras ardCameras = ardCamerasMapper.selectArdCamerasById(cameraId);
        if(ardCameras.getOperatorId().equals(operator))
        {
        if (ardCameras.getOperatorId().equals(operator)) {
            //如果解锁相机的当前用户是申请者,则清空该相机的过期时间
            ardCameras.setOperatorExpired(null);
            int i = ardCamerasMapper.updateArdCameras(ardCameras);
            if(i>0)
            {
                log.debug(cameraId+"--解锁成功");
            if (i > 0) {
                log.debug(cameraId + "--解锁成功");
            }
        }
        return true;
@@ -1046,8 +973,7 @@
        return bool;
    }
    public String getFocusMode(CameraCmd cmd)
    {
    public String getFocusMode(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
        Integer channelNum = cmd.getChannelNum();
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
@@ -1065,6 +991,7 @@
        log.info("当前聚焦模式:" + struFocusMode.byFocusMode);
        return String.valueOf(struFocusMode.byFocusMode);
    }
    /**
     * @描述 云台加热开关
     * @参数 [userId, channelNum, enable]
@@ -1420,7 +1347,7 @@
                FileInputStream stream = new FileInputStream(path);
                String simpleUUID = IdUtils.simpleUUID();
                String time = new SimpleDateFormat("yyyyMMdd").format(new Date());
                String recordName = cameraId + "/" + time + "/" + ObjectName +"_"+ simpleUUID + ".mp4";
                String recordName = cameraId + "/" + time + "/" + ObjectName + "_" + simpleUUID + ".mp4";
                boolean b = MinioUtils.uploadObject(BucketName, recordName, stream, stream.available(), ContentType);
                if (b) {
                    String url = MinioClientSingleton.domainUrl + "/" + BucketName + "/" + recordName;
@@ -1434,4 +1361,5 @@
            return "";
        }
    }
}
ruoyi-admin/src/main/resources/logback.xml
@@ -147,6 +147,19 @@
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
    <!--guideQueue日志输出-->
    <appender name="guideQueue" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/guideQueue.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--按天回滚daily-->
            <fileNamePattern>${log.path}/guideQueue.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--日志最大的历史60天-->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
    <!--PatrolInspectionTask日志输出-->
    <appender name="PatrolInspectionTask" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/PatrolInspectionTask.log</file>
@@ -207,4 +220,8 @@
    <logger name="mqtt" level="DEBUG">
        <appender-ref ref="mqtt"/>
    </logger>
    <!--guideQueue日志打印等级-->
    <logger name="guideQueue" level="DEBUG">
        <appender-ref ref="guideQueue"/>
    </logger>
</configuration> 
ruoyi-common/src/main/java/com/ruoyi/common/annotation/SdkOperate.java
@@ -6,5 +6,4 @@
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SdkOperate {
}
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/SdkOperateAspect.java
@@ -1,5 +1,6 @@
package com.ruoyi.framework.aspectj;
import com.ruoyi.common.annotation.SdkOperate;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils;
@@ -10,13 +11,18 @@
import com.ruoyi.device.camera.service.IArdCamerasService;
import com.ruoyi.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import javax.annotation.Nullable;
import javax.annotation.Resource;
import java.lang.reflect.Method;
import java.util.Date;
import static jdk.nashorn.internal.runtime.regexp.joni.Config.log;
@@ -43,12 +49,14 @@
    @Around("dsPointCut()")
    public Object around(ProceedingJoinPoint point) throws Throwable {
        MethodSignature signature = (MethodSignature) point.getSignature();
        Method method = signature.getMethod();
        Boolean result = controlScopeFilter(point);
        if (result) {
            log.debug("已获取相机控制权");
            log.debug("已获取相机控制权--" + method.getName());
            return point.proceed();
        } else {
            log.debug("未获取相机控制权");
            log.debug("未获取相机控制权--" + method.getName());
            return false;//代替目标方法的返回值
        }
    }
@@ -137,6 +145,5 @@
                }
            }
        }
    }
}
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/AlarmTask.java
@@ -1,5 +1,7 @@
package com.ruoyi.quartz.task;
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.stealAlarm.domain.ArdAlarmStealelec;
import com.ruoyi.alarm.stealAlarm.service.IStealElecAlarmService;
@@ -15,6 +17,7 @@
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.PriorityBlockingQueue;
import static com.ruoyi.common.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
@@ -26,7 +29,7 @@
 * @Version: 1.0
 **/
@Component("AlarmTask")
@Slf4j(topic = "AlarmTask")
@Slf4j
public class AlarmTask {
    /**
@@ -44,4 +47,16 @@
                WebSocketUtils.sendMessageAll(stringIntegerMap);
        }
    }
    /**
     * 定时清空引导队列
     * 刘苏义
     * 2023/7/1 10:41
     */
    public void clearGuideQueue() {
        log.info("定时清理引导队列");
        for(PriorityBlockingQueue<GuideTask> guideQueue:GuidePriorityQueue.cameraQueueMap.values())
        {
            guideQueue.clear();
        }
    }
}