‘liusuyi’
2023-12-14 2d7896ecd6bcafb4c0457a83ee254ff2006481ce
优化
已修改5个文件
89 ■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/alarm/config/AsyncConfiguration.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueHandler.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/config/AsyncConfiguration.java
@@ -71,4 +71,25 @@
        executor.initialize();
        return executor;
    }
    @Bean("guideExecutor")
    public Executor guideExecutor(){
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        //配置核心线程数
        executor.setCorePoolSize(corePoolSize);
        //配置最大线程数
        executor.setMaxPoolSize(maxPoolSize);
        //配置队列大小
        executor.setQueueCapacity(queueCapacity);
        //线程的名称前缀
        executor.setThreadNamePrefix("guideExecutor-");
        //线程活跃时间(秒)
        executor.setKeepAliveSeconds(keepAliveSeconds);
        //等待所有任务结束后再关闭线程池
        executor.setWaitForTasksToCompleteOnShutdown(true);
        //设置拒绝策略
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        //执行初始化
        executor.initialize();
        return executor;
    }
}
ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueHandler.java
@@ -71,9 +71,9 @@
        //    newThread.start();
        //}
    }
    @Async
    @Async("guideExecutor")
    public void process(String cameraId) {
        log.debug("CameraId:【" + cameraId + "】队列处理器启动");
        log.debug("CameraId:【" + cameraId + "】引导队列处理器启动成功");
        PriorityBlockingQueue<GuideTask> guideTasks = GuidePriorityQueue.cameraQueueMap.get(cameraId);
        while (true) {
            if (guideTasks.size() > 0) {
ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java
@@ -113,7 +113,7 @@
                if (client.isConnected()) {
                    client.subscribe(topic, qos);
                    log.info("mqtt连接成功" );
                    log.info("--订阅主题::" + Arrays.toString(topic));
                    log.info("订阅主题:" + Arrays.toString(topic));
                } else {
                    log.info("mqtt连接失败");
                }
ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java
@@ -217,7 +217,14 @@
            ardChannelService.insertArdChannel(channel);
        }
        //配置到流媒体
        for (int i = 1; i < m_stDeviceInfo.byChanNum + 1; i++) {
        addVtdu(camera);
        //创建引导队列
        createGuideQueue(camera);
    }
    //添加到流媒体
    private void addVtdu(ArdCameras camera) {
        for (int i = 1; i < camera.getChanNum() + 1; i++) {
            String name = camera.getId() + "_" + i;
            String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/cam/realmonitor?channel=" + i + "&subtype=0";
            Vtdu vtdu = vtduService.selectVtduByName(name);
@@ -243,16 +250,20 @@
            vtdu.setCameraId(camera.getId());
            vtduService.insertVtdu(vtdu);
        }
    }
        //创建引导队列
        if (camera.getCamAlarmGuideEnable() == 1) {
            if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) {
                Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
                PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
                GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
    //创建引导队列
    private void createGuideQueue(ArdCameras camera) {
        if (camera.getCamAlarmGuideEnable() != null) {
            if (camera.getCamAlarmGuideEnable() == 1) {
                if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) {
                    Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
                    PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
                    GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
                    //启动队列处理器
                    queueHandler.process(camera.getId());
                }
            }
            //启动队列处理器
            queueHandler.process(camera.getId());
        }
    }
ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
@@ -57,6 +57,7 @@
    @Resource
    private QueueHandler queueHandler;
    public Object _lock=new Object();
    public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK;
    private static HCNetSDK.FExceptionCallBack fExceptionCallBack;//异常回调
@@ -180,7 +181,6 @@
    @Async("loginExecutor")
    public void asyncLogin(ArdCameras camera) {
        try {
            Thread.sleep(100);
            // 初始化
            if (!hCNetSDK.NET_DVR_Init()) {
                log.error("SDK初始化失败");
@@ -230,17 +230,18 @@
            }
            log.debug("Login Success 【 " + camera.getIp() + ":" + camera.getPort() + " 】");
            if (fExceptionCallBack == null) {
                fExceptionCallBack = new ExceptionCallBack();//异常回调
                //设置异常回调函数(可在回调函数中获取设备上下线状态等)
                if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) {
                    log.debug("Set fExceptionCallBack function fail");
                    return;
                } else {
                    log.debug("Set fExceptionCallBack function successfully!");
            synchronized (_lock) {
                if (fExceptionCallBack == null) {
                    fExceptionCallBack = new ExceptionCallBack();//异常回调
                    //设置异常回调函数(可在回调函数中获取设备上下线状态等)
                    if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) {
                        log.debug("Set fExceptionCallBack function fail");
                        return;
                    } else {
                        log.debug("Set fExceptionCallBack function successfully!");
                    }
                }
            }
            if (GlobalVariable.loginMap.containsKey(camera.getId())) {
                GlobalVariable.loginMap.remove(camera.getId());
            }
@@ -269,6 +270,15 @@
            //添加到流媒体
            addVtdu(camera);
            //创建引导队列
            createGuideQueue(camera);
        } catch (Exception ex) {
            log.error("注册设备异常", ex);
        }
    }
    //创建引导队列
    private void createGuideQueue(ArdCameras camera) {
        if(camera.getCamAlarmGuideEnable()!=null) {
            if (camera.getCamAlarmGuideEnable() == 1) {
                if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) {
                    Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
@@ -278,11 +288,8 @@
                    queueHandler.process(camera.getId());
                }
            }
        } catch (Exception ex) {
            log.error("注册设备异常", ex);
        }
    }
    //添加到流媒体
    private void addVtdu(ArdCameras camera) {
        try {