From 5d2e6ca50091f405dfda9e287b367dd295dc6cf8 Mon Sep 17 00:00:00 2001
From: Xiajijian <1176061145@qq.com>
Date: Mon, 09 Feb 2026 17:39:17 +0800
Subject: [PATCH] 1. 航线任务增加校验,只有下发人和登陆人是一个人才可以删除修改操作。 2. 增加校验航线任务是否可以创建航线接口。

---
 ard-device/src/main/java/com/ard/device/camera/service/impl/ArdCameraServiceImpl.java |   83 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 83 insertions(+), 0 deletions(-)

diff --git a/ard-device/src/main/java/com/ard/device/camera/service/impl/ArdCameraServiceImpl.java b/ard-device/src/main/java/com/ard/device/camera/service/impl/ArdCameraServiceImpl.java
index e55b8cc..a7f7f73 100644
--- a/ard-device/src/main/java/com/ard/device/camera/service/impl/ArdCameraServiceImpl.java
+++ b/ard-device/src/main/java/com/ard/device/camera/service/impl/ArdCameraServiceImpl.java
@@ -373,4 +373,87 @@
         redisService.setCacheObject(getCacheKey(camera.getId()), camera);
     }
 
+    /**
+     * 定时执行登录失败相机重新登录
+     */
+    @Scheduled(cron = "0/10 * * * * ?")
+    public void failedReconnect() {
+        try {
+            log.debug("定时执行失败相机重连任务");
+            // 从数据库取全部设备
+            ArdCamera ardCamera = new ArdCamera();
+            ardCamera.setUseDataScope(false);
+            List<ArdCamera> cameraList = this.selectArdCameraList(ardCamera);
+            cameraList.stream()
+                    // 只处理登录失败或离线的设备
+                    .filter(camera -> camera.getLoginId() == null || camera.getLoginId() < 0 || "0".equals(camera.getState()))
+                    .forEach(camera -> {
+                        log.info("尝试重新登录设备 {}:{}", camera.getIp(), camera.getPort());
+                        cameraSDKService.login(camera);
+                    });
+
+        } catch (Exception ex) {
+            log.error("定时执行失败相机重连任务异常:{}", ex.getMessage());
+        }
+    }
+
+    /**
+     * 同步相机在线状态
+     */
+    @Scheduled(cron = "0/10 * * * * ?")
+    public void syncCameraState() {
+        try {
+            log.debug("定时执行同步相机在线状态任务");
+            //调用查询方法
+            ArdCamera ardCamera = new ArdCamera();
+            ardCamera.setUseDataScope(false);
+            List<ArdCamera> ardCameraList = this.selectArdCameraList(ardCamera);
+            ardCameraList
+                    .forEach(camera -> {
+                        boolean onLineNew = cameraSDKService.isOnLine(camera);
+                        boolean onLineOld = "1".equals(camera.getState());
+                        if (onLineNew != onLineOld) {
+                            if (onLineNew) {
+                                camera.setState("1");
+                            } else {
+                                camera.setState("0");
+                            }
+                            camera.setUpdateTime(DateUtils.getNowDate());
+                            ardCameraMapper.updateArdCamera(camera);
+                        }
+                    });
+        } catch (Exception ex) {
+            log.error("同步相机在线状态异常:{}", ex.getMessage());
+        }
+    }
+    /**
+     * 同步相机通道
+     */
+    @Scheduled(cron = "0/10 * * * * ?")
+    public void syncChannel() {
+        try {
+            log.debug("定时执行同步通道任务");
+            ArdCamera camera = new ArdCamera();
+            camera.setUseDataScope(false);
+            List<ArdCamera> ardCameraList = this.selectArdCameraList(camera);
+            if (!ardCameraList.isEmpty()) {
+                ardCameraList
+                        .forEach(ardCamera -> {
+                            //SDK获取实际通道
+                            List<ArdChannel> ardChannelListSDK = cameraSDKService.getChannels(ardCamera);
+                            //数据库获取通道
+                            ArdChannel ardChannel = new ArdChannel();
+                            ardChannel.setUseDataScope(false);
+                            ardChannel.setDeviceId(ardCamera.getId());
+                            List<ArdChannel> ardChannelListDb = ardChannelService.selectArdChannelList(ardChannel);
+                            //同步通道
+                            asyncChannel(ardChannelListDb, ardChannelListSDK);
+                        });
+            }
+        } catch (Exception ex) {
+            log.error("定时执行同步通道任务异常:{}", ex.getMessage());
+        }
+    }
+
+
 }
\ No newline at end of file

--
Gitblit v1.9.3