From f728d1f0c18a319a8d0c1a5e2f4e50a1b33ffbc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=B0=8F=E4=BA=91?= Date: Sat, 17 Jan 2026 13:05:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=A7=84=E8=8C=83=E8=AF=B4?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/DeviceServiceImpl.java | 42 ----------- .../ruoyi/device/service/impl/SynService.java | 70 +++++++++++++++++++ 2 files changed, 70 insertions(+), 42 deletions(-) create mode 100644 src/main/java/com/ruoyi/device/service/impl/SynService.java diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java index 6e0da12..ef6226f 100644 --- a/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java @@ -46,48 +46,6 @@ public class DeviceServiceImpl implements IDeviceService { Device model = deviceDomain.selectDeviceByDeviceId(deviceId); return DeviceServiceConvert.toDTO(model); } - /** - * 定时任务:定期打印所有设备信息 - * 执行时间:启动后1分钟开始,每2分钟执行一次(可通过配置文件修改) - * 配置项:device.schedule.print-devices.initial-delay 初始延迟时间(毫秒) - * device.schedule.print-devices.fixed-delay 执行间隔时间(毫秒) - */ - @Scheduled(initialDelayString = "${device.schedule.update-devices.initial-delay:60000}", - fixedDelayString = "${device.schedule.update-devices.fixed-delay:120000}") - public void updateDevicesScheduled() { - try { - log.info("========== 开始执行定时任务:打印所有设备信息 =========="); - Iterable> allDevices = iThingsBoardDomain.getAllDevices(); - int totalCount = 0; - for (List deviceBatch : allDevices) { - for (DeviceInfo device : deviceBatch) { - // 获取设备属性以获取活跃状态 - Boolean activeStatus = false; - try { - AttributeMap attributes = iThingsBoardDomain.getDeviceAttributes(device.getId()); - // 尝试从 AttributeMap 中获取 active 属性 - Optional active = attributes.get(DeviceAttributes.ACTIVE); - if (active.isPresent()) { - activeStatus = active.get(); - } - } catch (Exception e) { - log.debug("获取设备 {} 的活跃状态失败: {}", device.getId(), e.getMessage()); - } - - log.info("Device Name: {}, Device ID: {}, Device Type: {}, Active: {}", - device.getName(), - device.getId(), - device.getType(), - activeStatus); - totalCount++; - } - } - - log.info("========== 定时任务执行完成,共打印 {} 个设备 ==========", totalCount); - } catch (Exception e) { - log.error("定时任务执行失败: {}", e.getMessage(), e); - } - } } diff --git a/src/main/java/com/ruoyi/device/service/impl/SynService.java b/src/main/java/com/ruoyi/device/service/impl/SynService.java new file mode 100644 index 0000000..1883004 --- /dev/null +++ b/src/main/java/com/ruoyi/device/service/impl/SynService.java @@ -0,0 +1,70 @@ +package com.ruoyi.device.service.impl; + +import com.ruoyi.device.domain.api.IThingsBoardDomain; +import com.ruoyi.device.domain.model.thingsboard.AttributeMap; +import com.ruoyi.device.domain.model.thingsboard.DeviceInfo; +import com.ruoyi.device.domain.model.thingsboard.constants.DeviceAttributes; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +public class SynService { + + private static final Logger log = LoggerFactory.getLogger(SynService.class); + + private final IThingsBoardDomain iThingsBoardDomain; + + public SynService(IThingsBoardDomain iThingsBoardDomain) { + this.iThingsBoardDomain = iThingsBoardDomain; + } + + /** + * 定时任务:同步基础表数据 + * 执行时间:启动后1分钟开始,每2分钟执行一次(可通过配置文件修改) + * 配置项:device.schedule.print-devices.initial-delay 初始延迟时间(毫秒) + * device.schedule.print-devices.fixed-delay 执行间隔时间(毫秒) + */ + @Scheduled(initialDelayString = "${device.schedule.update-devices.initial-delay:60000}", + fixedDelayString = "${device.schedule.update-devices.fixed-delay:120000}") + public void updateDevicesScheduled() { + try { + log.info("========== 开始执行定时任务:同步基础表数据 =========="); + + Iterable> allDevices = iThingsBoardDomain.getAllDevices(); + int totalCount = 0; + + for (List deviceBatch : allDevices) { + for (DeviceInfo device : deviceBatch) { + // 获取设备属性以获取活跃状态 + Boolean activeStatus = false; + try { + AttributeMap attributes = iThingsBoardDomain.getDeviceAttributes(device.getId()); + // 尝试从 AttributeMap 中获取 active 属性 + Optional active = attributes.get(DeviceAttributes.ACTIVE); + if (active.isPresent()) { + activeStatus = active.get(); + } + } catch (Exception e) { + log.debug("获取设备 {} 的活跃状态失败: {}", device.getId(), e.getMessage()); + } + + log.info("Device Name: {}, Device ID: {}, Device Type: {}, Active: {}", + device.getName(), + device.getId(), + device.getType(), + activeStatus); + totalCount++; + } + } + + log.info("========== 定时任务执行完成,共打印 {} 个设备 ==========", totalCount); + } catch (Exception e) { + log.error("定时任务执行失败: {}", e.getMessage(), e); + } + } +}