From 05f799b8a5ce57b1f98dc5f8ab08308c32a6ec63 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Fri, 16 Jan 2026 09:35:22 +0800
Subject: [PATCH] 优化
---
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