From 582a3d0e0c662981b4786c2fbbdd264d63a223b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=B0=8F=E4=BA=91?= Date: Fri, 6 Feb 2026 09:44:30 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E6=9C=BA=E5=9C=BA=E7=A6=BB?= =?UTF-8?q?=E7=BA=BF=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/TuohengBufferDeviceImpl.java | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/ruoyi/device/service/impl/TuohengBufferDeviceImpl.java b/src/main/java/com/ruoyi/device/service/impl/TuohengBufferDeviceImpl.java index 755e80f..dc87882 100644 --- a/src/main/java/com/ruoyi/device/service/impl/TuohengBufferDeviceImpl.java +++ b/src/main/java/com/ruoyi/device/service/impl/TuohengBufferDeviceImpl.java @@ -206,21 +206,30 @@ public class TuohengBufferDeviceImpl implements IBufferDeviceService { TelemetryMap telemetry = thingsBoardDomain.getPredefinedTuohengDeviceTelemetry(iotDeviceId); log.info("拓恒设备遥测数据: {}", telemetry); - // 设置在线状态 - Boolean isActive = attributes.get(TuohengDeviceAttributes.ACTIVE).orElse(false); - log.info("设备在线状态 ACTIVE: {}", isActive); - if (isActive) { - telemetry.get(TuohengDeviceTelemetry.STATUS).ifPresent(statusValue -> { + // 设置在线状态 - 基于心跳时间戳判断 + telemetry.get(TuohengDeviceTelemetry.STATUS).ifPresentOrElse(statusValue -> { + long lastHeartbeatTime = statusValue.getTimestamp(); + long currentTime = System.currentTimeMillis(); + long timeDiff = currentTime - lastHeartbeatTime; + + log.info("STATUS 心跳时间戳: {}, 当前时间: {}, 时间差: {}ms ({}秒)", + lastHeartbeatTime, currentTime, timeDiff, timeDiff / 1000); + + // 5分钟 = 300000 毫秒 + if (timeDiff > 300000) { + dto.setDockStatus("OFFLINE"); + log.info("心跳超时(>5分钟),设置机场状态为 OFFLINE"); + } else { String status = statusValue.getValue(); log.info("STATUS 遥测值: {}", status); String dockStatus = "online".equals(status) ? "IDLE" : "OFFLINE"; dto.setDockStatus(dockStatus); - log.info("设置机场状态: {}", dockStatus); - }); - } else { + log.info("心跳正常,设置机场状态: {}", dockStatus); + } + }, () -> { dto.setDockStatus("OFFLINE"); - log.info("设备离线,设置机场状态为 OFFLINE"); - } + log.info("没有心跳数据,设置机场状态为 OFFLINE"); + }); // 设置舱内温度和湿度 log.info("---------- 解析舱内环境数据 ----------");