diff --git a/src/main/java/com/tuoheng/machine/statemachine/MachineStateManager.java b/src/main/java/com/tuoheng/machine/statemachine/MachineStateManager.java index 97e3bb8..96ad21e 100644 --- a/src/main/java/com/tuoheng/machine/statemachine/MachineStateManager.java +++ b/src/main/java/com/tuoheng/machine/statemachine/MachineStateManager.java @@ -89,29 +89,53 @@ public class MachineStateManager { /** * 批量更新状态(用于心跳同步) + * 只更新非UNKNOWN的状态,避免覆盖已有状态 */ public void updateStates(String sn, MachineStates newStates) { + updateStates(sn, newStates, false); + } + + /** + * 批量更新状态(用于心跳同步) + * + * @param sn 设备SN号 + * @param newStates 新状态 + * @param forceUpdate 是否强制更新所有状态(包括UNKNOWN) + */ + public void updateStates(String sn, MachineStates newStates, boolean forceUpdate) { MachineStates currentStates = getStates(sn); boolean changed = false; - if (currentStates.getDroneState() != newStates.getDroneState()) { - currentStates.setDroneState(newStates.getDroneState()); - changed = true; + // 更新无人机状态(如果不是UNKNOWN或强制更新) + if (forceUpdate || newStates.getDroneState() != DroneState.UNKNOWN) { + if (currentStates.getDroneState() != newStates.getDroneState()) { + currentStates.setDroneState(newStates.getDroneState()); + changed = true; + } } - if (currentStates.getAirportState() != newStates.getAirportState()) { - currentStates.setAirportState(newStates.getAirportState()); - changed = true; + // 更新机巢状态(如果不是UNKNOWN或强制更新) + if (forceUpdate || newStates.getAirportState() != AirportState.UNKNOWN) { + if (currentStates.getAirportState() != newStates.getAirportState()) { + currentStates.setAirportState(newStates.getAirportState()); + changed = true; + } } - if (currentStates.getCoverState() != newStates.getCoverState()) { - currentStates.setCoverState(newStates.getCoverState()); - changed = true; + // 更新舱门状态(如果不是UNKNOWN或强制更新) + if (forceUpdate || newStates.getCoverState() != CoverState.UNKNOWN) { + if (currentStates.getCoverState() != newStates.getCoverState()) { + currentStates.setCoverState(newStates.getCoverState()); + changed = true; + } } - if (currentStates.getDrcState() != newStates.getDrcState()) { - currentStates.setDrcState(newStates.getDrcState()); - changed = true; + // 更新DRC状态(如果不是UNKNOWN或强制更新) + if (forceUpdate || newStates.getDrcState() != DrcState.UNKNOWN) { + if (currentStates.getDrcState() != newStates.getDrcState()) { + currentStates.setDrcState(newStates.getDrcState()); + changed = true; + } } if (changed) {