From 5e9111e879902ef4e8ff9b61a1d2ecff60f4b992 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=B0=8F=E4=BA=91?= Date: Wed, 11 Feb 2026 16:28:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=97=A0=E4=BA=BA=E6=9C=BA?= =?UTF-8?q?=E7=9A=84=E7=8A=B6=E6=80=81=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/TuohengBufferDeviceImpl.java | 54 +++++++++++++------ 1 file changed, 37 insertions(+), 17 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 8c09640..6743b3f 100644 --- a/src/main/java/com/ruoyi/device/service/impl/TuohengBufferDeviceImpl.java +++ b/src/main/java/com/ruoyi/device/service/impl/TuohengBufferDeviceImpl.java @@ -651,11 +651,11 @@ public class TuohengBufferDeviceImpl implements IBufferDeviceService { .orElse(""); log.info("无人机 MODE 值: {}", mode); - // 获取 tsingal(图传信号强度,用于判断开关机) - Integer tsingal = telemetry.get(TuohengDeviceTelemetry.TSINGAL) - .map(TelemetryValue::getValue) - .orElse(0); - log.info("无人机 TSINGAL 值: {}", tsingal); +// // 获取 tsingal(图传信号强度,用于判断开关机) +// Integer tsingal = telemetry.get(TuohengDeviceTelemetry.TSINGAL) +// .map(TelemetryValue::getValue) +// .orElse(0); +// log.info("无人机 TSINGAL 值: {}", tsingal); // 从 MachineStateManager 获取无人机开关机状态 DroneState droneState = null; @@ -674,23 +674,43 @@ public class TuohengBufferDeviceImpl implements IBufferDeviceService { boolean isPowerOn = (droneState != null && droneState != DroneState.POWER_OFF && droneState != DroneState.UNKNOWN); log.info("无人机开关机状态: {}", isPowerOn ? "开机" : "关机"); - // 判断逻辑 - // 注意:无人机详情接口无法获取机场舱门状态 - // 如果 mode == "auto" 且开机,推测为 IN_MISSION - // 否则根据开关机状态判断 - String aircraftStatus; - if ("auto".equalsIgnoreCase(mode) && isPowerOn) { - // mode == "auto" 且开机,推测正在执行任务 - aircraftStatus = "IN_MISSION"; - log.info("无人机处于 auto 模式且开机,推测状态: IN_MISSION"); + // 从 MachineStateManager 获取舱门状态 + CoverState coverState = null; + if (dockSn != null) { + try { + MachineStates machineStates = machineStateManager.getStates(dockSn); + coverState = machineStates.getCoverState(); + log.info("机场舱门状态(从MachineStateManager): {}", coverState); + } catch (Exception e) { + log.warn("从MachineStateManager获取舱门状态失败: {}", e.getMessage()); + } } else { - // 其他情况,根据开关机状态判断(默认舱内) + log.warn("机场SN为空,无法从MachineStateManager获取舱门状态"); + } + + // 判断逻辑:舱门打开就是任务中 + String aircraftStatus; + if (coverState == CoverState.OPENED) { + // 舱门打开,表示正在执行任务 + aircraftStatus = "IN_MISSION"; + log.info("舱门打开,设置状态: IN_MISSION"); + } else if (coverState == CoverState.CLOSED) { + // 舱门关闭(舱内),根据开关机状态判断 if (isPowerOn) { aircraftStatus = "POWER_ON_IN_CABIN"; - log.info("开机状态,默认设置: POWER_ON_IN_CABIN"); + log.info("舱门关闭 + 开机 → POWER_ON_IN_CABIN"); } else { aircraftStatus = "POWER_OFF_IN_CABIN"; - log.info("关机状态,默认设置: POWER_OFF_IN_CABIN"); + log.info("舱门关闭 + 关机 → POWER_OFF_IN_CABIN"); + } + } else { + // 无法获取舱门状态,默认根据开关机状态判断 + if (isPowerOn) { + aircraftStatus = "POWER_ON_IN_CABIN"; + log.warn("无法获取舱门状态,默认设置: POWER_ON_IN_CABIN"); + } else { + aircraftStatus = "POWER_OFF_IN_CABIN"; + log.warn("无法获取舱门状态,默认设置: POWER_OFF_IN_CABIN"); } }