From 35d61801feb590df335a76b15142a6c849cdadc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=B0=8F=E4=BA=91?= Date: Fri, 16 Jan 2026 16:05:17 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9IOT=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E5=92=8C=E4=BB=A3=E7=A0=81=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/impl/ThingsBoardDomainImpl.java | 40 ----------- .../device/service/api/IDeviceService.java | 7 ++ .../service/impl/DeviceServiceImpl.java | 72 +++++++++++++++++++ 3 files changed, 79 insertions(+), 40 deletions(-) create mode 100644 src/main/java/com/ruoyi/device/service/api/IDeviceService.java create mode 100644 src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java diff --git a/src/main/java/com/ruoyi/device/domain/impl/ThingsBoardDomainImpl.java b/src/main/java/com/ruoyi/device/domain/impl/ThingsBoardDomainImpl.java index 73faf6e..8768dea 100644 --- a/src/main/java/com/ruoyi/device/domain/impl/ThingsBoardDomainImpl.java +++ b/src/main/java/com/ruoyi/device/domain/impl/ThingsBoardDomainImpl.java @@ -218,45 +218,5 @@ public class ThingsBoardDomainImpl implements IThingsBoardDomain { } } - /** - * 定时任务:每隔1分钟打印所有设备信息 - * 执行时间:每分钟的第0秒执行 - */ - @Scheduled(cron = "0 * * * * ?") - public void printAllDevicesScheduled() { - try { - log.info("========== 开始执行定时任务:打印所有设备信息 =========="); - Iterable> allDevices = getAllDevices(); - int totalCount = 0; - - for (List deviceBatch : allDevices) { - for (DeviceInfo device : deviceBatch) { - // 获取设备属性以获取活跃状态 - Boolean activeStatus = false; - try { - AttributeMap attributes = 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); - } - } } \ No newline at end of file diff --git a/src/main/java/com/ruoyi/device/service/api/IDeviceService.java b/src/main/java/com/ruoyi/device/service/api/IDeviceService.java new file mode 100644 index 0000000..9ae1516 --- /dev/null +++ b/src/main/java/com/ruoyi/device/service/api/IDeviceService.java @@ -0,0 +1,7 @@ +package com.ruoyi.device.service.api; + +/** + * 设备服务 + */ +public interface IDeviceService { +} diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java new file mode 100644 index 0000000..01efb51 --- /dev/null +++ b/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java @@ -0,0 +1,72 @@ +package com.ruoyi.device.service.impl; + +import com.ruoyi.device.domain.api.IThingsBoardDomain; +import com.ruoyi.device.domain.impl.ThingsBoardDomainImpl; +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 com.ruoyi.device.service.api.IDeviceService; +import com.ruoyi.device.service.api.IDeviceTempService; +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 DeviceServiceImpl implements IDeviceService { + + private static final Logger log = LoggerFactory.getLogger(DeviceServiceImpl.class); + + private final IThingsBoardDomain iThingsBoardDomain; + + public DeviceServiceImpl(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); + } + } +}