From 87cdb465d9185c4a8f554f248be6f960e66bff26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=B0=8F=E4=BA=91?= Date: Tue, 10 Feb 2026 17:14:39 +0800 Subject: [PATCH] xx --- .../device/service/impl/TuohengService.java | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/ruoyi/device/service/impl/TuohengService.java b/src/main/java/com/ruoyi/device/service/impl/TuohengService.java index 9a51fc4..ba6b640 100644 --- a/src/main/java/com/ruoyi/device/service/impl/TuohengService.java +++ b/src/main/java/com/ruoyi/device/service/impl/TuohengService.java @@ -271,7 +271,6 @@ public class TuohengService { /** * 同步无人机开关机状态 - * 注意:只有关机时才更新状态,其他情况保持当前状态不变 */ private void syncDronePowerState(String deviceSn, TuohengRealTimeData data) { try { @@ -284,9 +283,30 @@ public class TuohengService { return; } - // 只有关机时才更新状态为 POWER_OFF - // 其他情况(开机、飞行中等)保持当前状态不变 - if (powerOn == 2) { + // 根据 bPowerON 值更新无人机状态 + // 1 = 开机, 2 = 关机 + if (powerOn == 1) { + // 开机时,只有在特定状态下才更新为 ONLINE + // 只有从 POWER_OFF、UNKNOWN、ARRIVED、RETURNING 这些状态才能转为 ONLINE + MachineStates currentStates = stateManager.getMachineStates(deviceSn); + if (currentStates != null && currentStates.getDroneState() != null) { + DroneState currentState = currentStates.getDroneState(); + if (currentState == DroneState.POWER_OFF || + currentState == DroneState.UNKNOWN || + currentState == DroneState.ARRIVED || + currentState == DroneState.RETURNING) { + stateManager.setDroneState(deviceSn, DroneState.ONLINE); + log.debug("同步无人机开机状态: sn={}, powerOn={}, 从 {} 更新为 ONLINE", + deviceSn, powerOn, currentState); + } else { + log.debug("无人机已开机,但当前状态为 {},不更新为 ONLINE", currentState); + } + } else { + // 如果没有当前状态,直接设置为 ONLINE + stateManager.setDroneState(deviceSn, DroneState.ONLINE); + log.debug("同步无人机开机状态: sn={}, powerOn=, 初始化为 ONLINE", deviceSn, powerOn); + } + } else if (powerOn == 2) { stateManager.setDroneState(deviceSn, DroneState.POWER_OFF); log.debug("同步无人机关机状态: sn={}, powerOn={}", deviceSn, powerOn); }