From 425ba5eba4d96f6eed3658d9d0cb79da801551f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=B0=8F=E4=BA=91?= Date: Thu, 18 Dec 2025 10:42:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A7=E7=9A=84=E6=96=B9?= =?UTF-8?q?=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../machine/CONDITIONAL_BRANCH_GUIDE.md | 400 ------------------ .../old/action/airport/OfflineAction.java | 12 - .../old/action/airport/OnlineAction.java | 12 - .../old/action/cover/CloseCoverAction.java | 12 - .../old/action/cover/CoverClosedAction.java | 12 - .../old/action/cover/CoverOpenedAction.java | 12 - .../old/action/cover/OpenCoverAction.java | 12 - .../action/debug/CloseDebugModeAction.java | 12 - .../old/action/debug/OpenDebugModeAction.java | 12 - .../tuoheng/old/action/drc/EnterAction.java | 11 - .../tuoheng/old/action/drc/EnteredAction.java | 11 - .../tuoheng/old/action/drc/ExitAction.java | 11 - .../tuoheng/old/action/drc/ExitedAction.java | 11 - .../old/action/drone/ArriveAction.java | 11 - .../old/action/drone/CancelPointAction.java | 11 - .../old/action/drone/EmergencyStopAction.java | 11 - .../old/action/drone/OfflineAction.java | 11 - .../drone/PointFlyingCompletedAction.java | 11 - .../drone/PointPrepareCompletedAction.java | 11 - .../old/action/drone/PointToFlyingAction.java | 11 - .../old/action/drone/PointToReturnAction.java | 11 - .../action/drone/PrepareCompletedAction.java | 11 - .../old/action/drone/ResumeFlyingAction.java | 11 - .../old/action/drone/ResumeReturnAction.java | 11 - .../action/drone/ReturnCompletedAction.java | 11 - .../drone/ReturnEmergencyStopAction.java | 11 - .../old/action/drone/StartFlyingAction.java | 11 - .../old/action/drone/StartPointingAction.java | 11 - .../old/action/drone/StartPrepareAction.java | 11 - .../old/action/drone/StartReturnAction.java | 11 - .../old/action/reboot/RebootAction.java | 12 - .../action/reboot/RebootCompletedAction.java | 12 - .../old/config/AirportMachineConfig.java | 215 ---------- .../old/config/CoverMachineConfig.java | 178 -------- .../tuoheng/old/config/DrcMachineConfig.java | 145 ------- .../old/config/DroneMachineConfig.java | 393 ----------------- .../tuoheng/old/demo/MultiPlatformDemo.java | 96 ----- .../com/tuoheng/old/events/AirportEvent.java | 59 --- .../com/tuoheng/old/events/CoverEvent.java | 36 -- .../java/com/tuoheng/old/events/DrcEvent.java | 31 -- .../com/tuoheng/old/events/DroneEvent.java | 121 ------ .../old/guard/airport/CanOfflineGuard.java | 12 - .../old/guard/airport/CanOnlineGuard.java | 12 - .../guard/airport/IsAirportOnlineGuard.java | 12 - .../old/guard/cover/CanCloseCoverGuard.java | 12 - .../old/guard/cover/CanOpenCoverGuard.java | 12 - .../old/guard/cover/IsCoverClosedGuard.java | 12 - .../old/guard/cover/IsCoverOpenedGuard.java | 12 - .../guard/debug/CanCloseDebugModeGuard.java | 12 - .../old/guard/debug/IsDebugModeGuard.java | 12 - .../old/guard/debug/IsNotDebugModeGuard.java | 12 - .../tuoheng/old/guard/drc/CanEnterGuard.java | 11 - .../tuoheng/old/guard/drc/CanExitGuard.java | 11 - .../old/guard/drone/CanPointGuard.java | 13 - .../guard/reboot/IsRebootCompletedGuard.java | 12 - .../impl/dji/DjiAirportPlatformStrategy.java | 135 ------ .../old/impl/dji/DjiAirportSystemManager.java | 127 ------ .../impl/dji/DjiCoverPlatformStrategy.java | 123 ------ .../old/impl/dji/DjiDrcPlatformStrategy.java | 86 ---- .../impl/dji/DjiDronePlatformStrategy.java | 179 -------- .../airport/DjiCloseDebugModeAction.java | 25 -- .../dji/action/airport/DjiOfflineAction.java | 25 -- .../dji/action/airport/DjiOnlineAction.java | 27 -- .../airport/DjiOpenDebugModeAction.java | 25 -- .../dji/action/airport/DjiRebootAction.java | 25 -- .../airport/DjiRebootCompletedAction.java | 25 -- .../dji/action/cover/DjiCloseCoverAction.java | 25 -- .../action/cover/DjiCoverClosedAction.java | 25 -- .../dji/action/cover/DjiCoverErrorAction.java | 25 -- .../action/cover/DjiCoverOpenedAction.java | 25 -- .../dji/action/cover/DjiCoverResetAction.java | 25 -- .../dji/action/cover/DjiOpenCoverAction.java | 26 -- .../impl/dji/action/drc/DjiEnterAction.java | 25 -- .../impl/dji/action/drc/DjiEnteredAction.java | 25 -- .../impl/dji/action/drc/DjiExitAction.java | 29 -- .../impl/dji/action/drc/DjiExitedAction.java | 25 -- .../dji/action/drone/DjiArriveAction.java | 25 -- .../action/drone/DjiCancelPointAction.java | 25 -- .../action/drone/DjiDroneOfflineAction.java | 25 -- .../action/drone/DjiEmergencyStopAction.java | 25 -- .../drone/DjiPointFlyingCompletedAction.java | 25 -- .../drone/DjiPointPrepareCompletedAction.java | 25 -- .../action/drone/DjiPointToFlyingAction.java | 25 -- .../action/drone/DjiPointToReturnAction.java | 25 -- .../drone/DjiPrepareCompletedAction.java | 25 -- .../action/drone/DjiResumeFlyingAction.java | 25 -- .../action/drone/DjiResumeReturnAction.java | 25 -- .../drone/DjiReturnCompletedAction.java | 25 -- .../drone/DjiReturnEmergencyStopAction.java | 25 -- .../action/drone/DjiStartFlyingAction.java | 25 -- .../action/drone/DjiStartPointingAction.java | 25 -- .../action/drone/DjiStartPrepareAction.java | 25 -- .../action/drone/DjiStartReturnAction.java | 25 -- .../airport/DjiCanCloseDebugModeGuard.java | 25 -- .../dji/guard/airport/DjiCanOfflineGuard.java | 25 -- .../dji/guard/airport/DjiCanOnlineGuard.java | 33 -- .../guard/airport/DjiIsDebugModeGuard.java | 25 -- .../guard/airport/DjiIsNotDebugModeGuard.java | 25 -- .../airport/DjiIsRebootCompletedGuard.java | 25 -- .../guard/cover/DjiCanCloseCoverGuard.java | 25 -- .../dji/guard/cover/DjiCanOpenCoverGuard.java | 25 -- .../guard/cover/DjiIsCoverClosedGuard.java | 25 -- .../guard/cover/DjiIsCoverOpenedGuard.java | 25 -- .../impl/dji/guard/drc/DjiCanEnterGuard.java | 28 -- .../impl/dji/guard/drc/DjiCanExitGuard.java | 30 -- .../dji/guard/drone/DjiCanPointGuard.java | 36 -- .../impl/dji/listener/DjiAirportListener.java | 12 - .../impl/dji/listener/DjiCoverListener.java | 15 - .../old/impl/dji/listener/DjiDrcListener.java | 69 --- .../impl/dji/listener/DjiDroneListener.java | 16 - .../old/listener/DefaultAirportListener.java | 94 ---- .../old/listener/DefaultCoverListener.java | 92 ---- .../old/listener/DefaultDrcListener.java | 95 ----- .../old/listener/DefaultDroneListener.java | 92 ---- .../tuoheng/old/manager/AbsSystemManager.java | 328 -------------- .../tuoheng/old/manager/ISystemManager.java | 69 --- .../factory/AirportSystemManagerFactory.java | 79 ---- .../tuoheng/old/platform/PlatformType.java | 49 --- .../factory/PlatformStrategyFactory.java | 250 ----------- .../strategy/AirportPlatformStrategy.java | 53 --- .../strategy/CoverPlatformStrategy.java | 49 --- .../strategy/DrcPlatformStrategy.java | 59 --- .../strategy/DronePlatformStrategy.java | 73 ---- .../old/platform/strategy/PlatformAction.java | 22 - .../old/platform/strategy/PlatformGuard.java | 22 - .../platform/strategy/PlatformListener.java | 15 - .../tuoheng/old/redis/RedisStateStore.java | 84 ---- .../repository/MachinePlatTypeRepository.java | 76 ---- .../old/service/AirportMachineService.java | 193 --------- .../old/service/CoverMachineService.java | 83 ---- .../old/service/DrcMachineService.java | 194 --------- .../old/service/DroneMachineService.java | 194 --------- .../com/tuoheng/old/status/AirportState.java | 46 -- .../com/tuoheng/old/status/CoverState.java | 36 -- .../java/com/tuoheng/old/status/DrcState.java | 32 -- .../com/tuoheng/old/status/DroneState.java | 104 ----- 136 files changed, 6621 deletions(-) delete mode 100644 src/main/java/com/tuoheng/machine/CONDITIONAL_BRANCH_GUIDE.md delete mode 100644 src/main/java/com/tuoheng/old/action/airport/OfflineAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/airport/OnlineAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/cover/CloseCoverAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/cover/CoverClosedAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/cover/CoverOpenedAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/cover/OpenCoverAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/debug/CloseDebugModeAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/debug/OpenDebugModeAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/drc/EnterAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/drc/EnteredAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/drc/ExitAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/drc/ExitedAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/drone/ArriveAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/drone/CancelPointAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/drone/EmergencyStopAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/drone/OfflineAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/drone/PointFlyingCompletedAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/drone/PointPrepareCompletedAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/drone/PointToFlyingAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/drone/PointToReturnAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/drone/PrepareCompletedAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/drone/ResumeFlyingAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/drone/ResumeReturnAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/drone/ReturnCompletedAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/drone/ReturnEmergencyStopAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/drone/StartFlyingAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/drone/StartPointingAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/drone/StartPrepareAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/drone/StartReturnAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/reboot/RebootAction.java delete mode 100644 src/main/java/com/tuoheng/old/action/reboot/RebootCompletedAction.java delete mode 100644 src/main/java/com/tuoheng/old/config/AirportMachineConfig.java delete mode 100644 src/main/java/com/tuoheng/old/config/CoverMachineConfig.java delete mode 100644 src/main/java/com/tuoheng/old/config/DrcMachineConfig.java delete mode 100644 src/main/java/com/tuoheng/old/config/DroneMachineConfig.java delete mode 100644 src/main/java/com/tuoheng/old/demo/MultiPlatformDemo.java delete mode 100644 src/main/java/com/tuoheng/old/events/AirportEvent.java delete mode 100644 src/main/java/com/tuoheng/old/events/CoverEvent.java delete mode 100644 src/main/java/com/tuoheng/old/events/DrcEvent.java delete mode 100644 src/main/java/com/tuoheng/old/events/DroneEvent.java delete mode 100644 src/main/java/com/tuoheng/old/guard/airport/CanOfflineGuard.java delete mode 100644 src/main/java/com/tuoheng/old/guard/airport/CanOnlineGuard.java delete mode 100644 src/main/java/com/tuoheng/old/guard/airport/IsAirportOnlineGuard.java delete mode 100644 src/main/java/com/tuoheng/old/guard/cover/CanCloseCoverGuard.java delete mode 100644 src/main/java/com/tuoheng/old/guard/cover/CanOpenCoverGuard.java delete mode 100644 src/main/java/com/tuoheng/old/guard/cover/IsCoverClosedGuard.java delete mode 100644 src/main/java/com/tuoheng/old/guard/cover/IsCoverOpenedGuard.java delete mode 100644 src/main/java/com/tuoheng/old/guard/debug/CanCloseDebugModeGuard.java delete mode 100644 src/main/java/com/tuoheng/old/guard/debug/IsDebugModeGuard.java delete mode 100644 src/main/java/com/tuoheng/old/guard/debug/IsNotDebugModeGuard.java delete mode 100644 src/main/java/com/tuoheng/old/guard/drc/CanEnterGuard.java delete mode 100644 src/main/java/com/tuoheng/old/guard/drc/CanExitGuard.java delete mode 100644 src/main/java/com/tuoheng/old/guard/drone/CanPointGuard.java delete mode 100644 src/main/java/com/tuoheng/old/guard/reboot/IsRebootCompletedGuard.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/DjiAirportPlatformStrategy.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/DjiAirportSystemManager.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/DjiCoverPlatformStrategy.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/DjiDrcPlatformStrategy.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/DjiDronePlatformStrategy.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiCloseDebugModeAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiOfflineAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiOnlineAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiOpenDebugModeAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiRebootAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiRebootCompletedAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiCloseCoverAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiCoverClosedAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiCoverErrorAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiCoverOpenedAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiCoverResetAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiOpenCoverAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/drc/DjiEnterAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/drc/DjiEnteredAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/drc/DjiExitAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/drc/DjiExitedAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiArriveAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiCancelPointAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiDroneOfflineAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiEmergencyStopAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiPointFlyingCompletedAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiPointPrepareCompletedAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiPointToFlyingAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiPointToReturnAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiPrepareCompletedAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiResumeFlyingAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiResumeReturnAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiReturnCompletedAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiReturnEmergencyStopAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiStartFlyingAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiStartPointingAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiStartPrepareAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiStartReturnAction.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiCanCloseDebugModeGuard.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiCanOfflineGuard.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiCanOnlineGuard.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiIsDebugModeGuard.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiIsNotDebugModeGuard.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiIsRebootCompletedGuard.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/guard/cover/DjiCanCloseCoverGuard.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/guard/cover/DjiCanOpenCoverGuard.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/guard/cover/DjiIsCoverClosedGuard.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/guard/cover/DjiIsCoverOpenedGuard.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/guard/drc/DjiCanEnterGuard.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/guard/drc/DjiCanExitGuard.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/guard/drone/DjiCanPointGuard.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/listener/DjiAirportListener.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/listener/DjiCoverListener.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/listener/DjiDrcListener.java delete mode 100644 src/main/java/com/tuoheng/old/impl/dji/listener/DjiDroneListener.java delete mode 100644 src/main/java/com/tuoheng/old/listener/DefaultAirportListener.java delete mode 100644 src/main/java/com/tuoheng/old/listener/DefaultCoverListener.java delete mode 100644 src/main/java/com/tuoheng/old/listener/DefaultDrcListener.java delete mode 100644 src/main/java/com/tuoheng/old/listener/DefaultDroneListener.java delete mode 100644 src/main/java/com/tuoheng/old/manager/AbsSystemManager.java delete mode 100644 src/main/java/com/tuoheng/old/manager/ISystemManager.java delete mode 100644 src/main/java/com/tuoheng/old/manager/factory/AirportSystemManagerFactory.java delete mode 100644 src/main/java/com/tuoheng/old/platform/PlatformType.java delete mode 100644 src/main/java/com/tuoheng/old/platform/factory/PlatformStrategyFactory.java delete mode 100644 src/main/java/com/tuoheng/old/platform/strategy/AirportPlatformStrategy.java delete mode 100644 src/main/java/com/tuoheng/old/platform/strategy/CoverPlatformStrategy.java delete mode 100644 src/main/java/com/tuoheng/old/platform/strategy/DrcPlatformStrategy.java delete mode 100644 src/main/java/com/tuoheng/old/platform/strategy/DronePlatformStrategy.java delete mode 100644 src/main/java/com/tuoheng/old/platform/strategy/PlatformAction.java delete mode 100644 src/main/java/com/tuoheng/old/platform/strategy/PlatformGuard.java delete mode 100644 src/main/java/com/tuoheng/old/platform/strategy/PlatformListener.java delete mode 100644 src/main/java/com/tuoheng/old/redis/RedisStateStore.java delete mode 100644 src/main/java/com/tuoheng/old/repository/MachinePlatTypeRepository.java delete mode 100644 src/main/java/com/tuoheng/old/service/AirportMachineService.java delete mode 100644 src/main/java/com/tuoheng/old/service/CoverMachineService.java delete mode 100644 src/main/java/com/tuoheng/old/service/DrcMachineService.java delete mode 100644 src/main/java/com/tuoheng/old/service/DroneMachineService.java delete mode 100644 src/main/java/com/tuoheng/old/status/AirportState.java delete mode 100644 src/main/java/com/tuoheng/old/status/CoverState.java delete mode 100644 src/main/java/com/tuoheng/old/status/DrcState.java delete mode 100644 src/main/java/com/tuoheng/old/status/DroneState.java diff --git a/src/main/java/com/tuoheng/machine/CONDITIONAL_BRANCH_GUIDE.md b/src/main/java/com/tuoheng/machine/CONDITIONAL_BRANCH_GUIDE.md deleted file mode 100644 index 8f6c547..0000000 --- a/src/main/java/com/tuoheng/machine/CONDITIONAL_BRANCH_GUIDE.md +++ /dev/null @@ -1,400 +0,0 @@ -# 条件分支执行指南 - -## 概述 - -框架现在支持基于状态回调结果的条件分支执行。指令自己维护下游节点关系,形成树状结构,可以根据执行结果(成功/失败)动态决定下一步执行哪个指令。 - -## 核心概念 - -### 1. Instruction 自维护下游节点 - -每个指令可以配置三种类型的下游指令: - -```java -CheckDeviceInstruction checkInstruction = new CheckDeviceInstruction() - .onSuccess(new TakeOffInstruction()) // 成功时执行 - .onFailure(new RepairDeviceInstruction()) // 失败时执行 - .then(new LogInstruction()); // 无论成功失败都执行 -``` - -**优先级**:`then` (always) > `onSuccess/onFailure` - -### 2. Transaction 持有根指令 - -Transaction 只需要持有根指令,指令树由指令自己维护: - -```java -Transaction transaction = new Transaction("条件分支起飞", CommandType.TAKE_OFF) - .root(checkInstruction) - .setTimeout(120000); -``` - -### 3. 条件分支触发条件 - -只有当指令**配置了 `StateCallbackConfig`** 时,才会根据状态回调结果执行下游节点: - -```java -@Override -public CallbackConfig getStateCallbackConfig(InstructionContext context) { - return CallbackConfig.builder() - .topic("device/" + context.getSn() + "/state") - .fieldPath("droneState") - .expectedValue("FLYING") - .timeoutMs(60000) - .build(); -} -``` - -**核心规则**: -- **配置了 StateCallbackConfig** → 必须等待状态回调,下游节点的执行依赖于回调结果 -- **没有配置 StateCallbackConfig** → 当前指令的结果即为事务结果,不会执行下游节点 - -### 4. 分支决策逻辑 - -当指令配置了状态回调时: - -1. **状态回调成功** → 执行 `then` 或 `onSuccess` 配置的指令 -2. **状态回调失败/超时** → 执行 `then` 或 `onFailure` 配置的指令 -3. **如果找不到对应的下游指令** → 将状态回调结果作为事务结果返回 - -## 使用场景 - -### 场景1:简单的成功/失败分支 - -```java -// 创建指令 -TakeOffInstruction takeoffInstruction = new TakeOffInstruction(); -RepairDeviceInstruction repairInstruction = new RepairDeviceInstruction(); - -// 配置指令树 -CheckDeviceInstruction checkInstruction = new CheckDeviceInstruction() - .onSuccess(takeoffInstruction) // 状态正常 -> 起飞 - .onFailure(repairInstruction // 状态异常 -> 修复 - .then(takeoffInstruction)); // 修复后 -> 起飞 - -// 创建事务 -Transaction transaction = new Transaction("条件分支起飞", CommandType.TAKE_OFF) - .root(checkInstruction); -``` - -**执行流程**: -``` -check (检查设备) - ├─ 成功 → takeoff (起飞) → 结束 - └─ 失败 → repair (修复) → takeoff (起飞) → 结束 -``` - -### 场景2:重试机制 - -```java -// 创建指令 -StartMissionInstruction startMissionInstruction = new StartMissionInstruction(); -EmergencyLandInstruction emergencyLandInstruction = new EmergencyLandInstruction(); - -// 重试起飞指令 -RetryTakeOffInstruction retryInstruction = new RetryTakeOffInstruction() - .onSuccess(startMissionInstruction) // 重试成功 -> 开始任务 - .onFailure(emergencyLandInstruction); // 重试失败 -> 紧急降落 - -// 起飞指令(带状态回调) -TakeOffWithStateCallbackInstruction takeoffInstruction = new TakeOffWithStateCallbackInstruction() - .onSuccess(startMissionInstruction) // 起飞成功 -> 开始任务 - .onFailure(retryInstruction); // 起飞失败 -> 重试 - -// 创建事务 -Transaction transaction = new Transaction("智能起飞", CommandType.TAKE_OFF) - .root(takeoffInstruction); -``` - -**执行流程**: -``` -takeoff (起飞) - ├─ 成功 → start_mission (开始任务) → 结束 - └─ 失败 → retry_takeoff (重试) - ├─ 成功 → start_mission (开始任务) → 结束 - └─ 失败 → emergency_land (紧急降落) → 结束 -``` - -### 场景3:状态回调结果直接作为事务结果 - -```java -// 只有一个指令,没有配置下游 -TakeOffWithStateCallbackInstruction takeoffInstruction = new TakeOffWithStateCallbackInstruction(); -// 注意:没有配置 onSuccess 或 onFailure - -Transaction transaction = new Transaction("简单起飞", CommandType.TAKE_OFF) - .root(takeoffInstruction); -``` - -**执行流程**: -``` -takeoff (起飞,等待状态回调) - ├─ 状态回调成功 → 事务成功(没有下游指令) - └─ 状态回调失败 → 事务失败(没有下游指令) -``` - -### 场景4:复杂的多分支流程 - -```java -// 创建所有指令 -OpenCoverInstruction openCoverInstruction = new OpenCoverInstruction(); -CheckWeatherInstruction checkWeatherInstruction = new CheckWeatherInstruction(); -TakeOffInstruction takeoffInstruction = new TakeOffInstruction(); -ExecuteMissionInstruction executeMissionInstruction = new ExecuteMissionInstruction(); -HandleBadWeatherInstruction handleBadWeatherInstruction = new HandleBadWeatherInstruction(); -WaitInstruction waitInstruction = new WaitInstruction(); -CloseCoverInstruction closeCoverInstruction = new CloseCoverInstruction(); - -// 配置指令树(从叶子节点开始构建) -waitInstruction.then(checkWeatherInstruction); // 等待后 -> 重新检查天气 - -handleBadWeatherInstruction - .onSuccess(waitInstruction) // 可以等待 -> 等待后重试 - .onFailure(closeCoverInstruction); // 天气极差 -> 关闭舱门 - -takeoffInstruction - .onSuccess(executeMissionInstruction) // 起飞成功 -> 执行任务 - .onFailure(closeCoverInstruction); // 起飞失败 -> 关闭舱门 - -checkWeatherInstruction - .onSuccess(takeoffInstruction) // 天气好 -> 起飞 - .onFailure(handleBadWeatherInstruction); // 天气差 -> 处理 - -openCoverInstruction.then(checkWeatherInstruction); // 打开舱门 -> 检查天气 - -// 创建事务 -Transaction transaction = new Transaction("智能任务执行", CommandType.START_MISSION) - .root(openCoverInstruction) - .setTimeout(300000); -``` - -**执行流程**: -``` -open_cover (打开舱门) - → check_weather (检查天气) - ├─ 天气好 → takeoff (起飞) - │ ├─ 成功 → execute_mission (执行任务) → 结束 - │ └─ 失败 → close_cover (关闭舱门) → 结束 - └─ 天气差 → handle_bad_weather (处理恶劣天气) - ├─ 可等待 → wait_and_retry (等待) → check_weather (重新检查) - └─ 极差 → close_cover (关闭舱门) → 结束 -``` - -## 指令实现要点 - -### 1. 继承 AbstractInstruction - -所有指令都应该继承 `AbstractInstruction`,它提供了下游节点管理功能: - -```java -public class MyInstruction extends AbstractInstruction { - - @Override - public String getName() { - return "MY_INSTRUCTION"; - } - - @Override - public void executeRemoteCall(InstructionContext context) throws Exception { - // 发送MQTT指令 - String sn = context.getSn(); - mqttClient.publish("device/" + sn + "/command", "{\"cmd\":\"myCommand\"}"); - } - - @Override - public CallbackConfig getMethodCallbackConfig(InstructionContext context) { - // 方法回调:等待指令ACK - return CallbackConfig.builder() - .topic("device/" + context.getSn() + "/response") - .fieldPath("cmd") - .expectedValue("myCommand") - .timeoutMs(10000) - .build(); - } - - @Override - public CallbackConfig getStateCallbackConfig(InstructionContext context) { - // 状态回调:等待状态变化 - // 配置了状态回调,则必须等待回调结果,下游节点的执行依赖于此 - return CallbackConfig.builder() - .topic("device/" + context.getSn() + "/state") - .fieldPath("status") - .expectedValue("SUCCESS") - .timeoutMs(60000) - .build(); - } -} -``` - -### 2. 使用自定义判断逻辑 - -```java -@Override -public CallbackConfig getStateCallbackConfig(InstructionContext context) { - return CallbackConfig.builder() - .topic("device/" + context.getSn() + "/state") - .customPredicate(messageBody -> { - // 自定义判断逻辑 - Map data = (Map) messageBody; - String status = (String) data.get("status"); - Integer errorCode = (Integer) data.get("errorCode"); - - // 只有状态为SUCCESS且错误码为0才算成功 - return "SUCCESS".equals(status) && errorCode == 0; - }) - .timeoutMs(60000) - .build(); -} -``` - -### 3. 链式配置下游指令 - -```java -// 方式1:直接链式配置 -CheckDeviceInstruction checkInstruction = new CheckDeviceInstruction() - .onSuccess(new TakeOffInstruction()) - .onFailure(new RepairDeviceInstruction()); - -// 方式2:先创建再配置(适合复杂场景) -TakeOffInstruction takeoffInstruction = new TakeOffInstruction(); -RepairDeviceInstruction repairInstruction = new RepairDeviceInstruction(); - -CheckDeviceInstruction checkInstruction = new CheckDeviceInstruction(); -checkInstruction.onSuccess(takeoffInstruction); -checkInstruction.onFailure(repairInstruction); - -// 方式3:指令复用(同一个指令实例可以被多个上游引用) -TakeOffInstruction takeoffInstruction = new TakeOffInstruction(); - -CheckDeviceInstruction checkInstruction = new CheckDeviceInstruction() - .onSuccess(takeoffInstruction); - -RepairDeviceInstruction repairInstruction = new RepairDeviceInstruction() - .then(takeoffInstruction); // 复用同一个 takeoff 实例 -``` - -## 关键规则总结 - -1. **下游节点执行的前提**: - - **必须配置 `StateCallbackConfig`** - 下游节点的执行强依赖状态回调 - - **没有配置 `StateCallbackConfig`** - 当前指令的结果即为事务结果,不会执行下游节点 - -2. **分支优先级**: - - `then` (always) > `onSuccess/onFailure` - - 如果配置了 `then`,则无论成功失败都执行该指令 - -3. **找不到下游指令时**: - - 如果指令配置了状态回调 - - 但找不到对应的下游指令(`onSuccess` 或 `onFailure`) - - 则状态回调的结果直接作为事务结果返回 - -4. **指令执行失败**: - - `canExecute()` 返回 false → 事务失败 - - `executeRemoteCall()` 抛异常 → 事务失败 - - `MethodCallbackConfig` 失败 → 事务失败 - -5. **超时处理**: - - 方法回调超时 → 事务失败 - - 状态回调超时 → 视为失败,执行 `onFailure` 或 `then` 配置的指令 - - 如果没有配置失败分支,则事务失败 - -6. **循环检测**: - - 框架不会自动检测循环 - - 请确保事务超时时间足够长 - - 避免无限循环(如 A → B → A) - -7. **指令复用**: - - 同一个指令实例可以被多个上游指令引用 - - 适用于多个分支最终汇聚到同一个指令的场景 - -## 调试技巧 - -1. **查看执行日志**: -``` -执行指令: instruction=CHECK_DEVICE -根据状态回调结果选择下一个指令: success=true, nextInstruction=TAKE_OFF -执行指令: instruction=TAKE_OFF -状态回调完成,无下一步指令,事务结束: success=true, instruction=TAKE_OFF -``` - -2. **使用 `onComplete` 回调记录指令执行结果**: -```java -@Override -public void onComplete(InstructionContext context, InstructionResult result) { - log.info("指令执行完成: instruction={}, success={}, error={}", - getName(), result.isSuccess(), result.getErrorMessage()); -} -``` - -3. **注册命令执行监听器**: -```java -commandManager.registerCommandListener("debug-listener", (sn, result) -> { - log.info("命令执行完成: sn={}, commandType={}, success={}, failedInstruction={}", - sn, result.getCommandType(), result.isSuccess(), result.getFailedInstructionName()); -}); -``` - -## 最佳实践 - -1. **合理设置超时时间**: - - 指令超时 < 事务超时 - - 考虑重试次数和等待时间 - -2. **避免过深的分支嵌套**: - - 建议分支深度不超过3层 - - 复杂流程可以拆分为多个事务 - -3. **提供失败分支**: - - 关键指令应该配置 `onFailure` 分支 - - 避免因为一个指令失败导致整个事务失败 - -4. **合理复用指令实例**: - - 多个分支汇聚到同一个指令时,复用同一个实例 - - 减少对象创建,提高性能 - -5. **记录状态变化**: - - 在指令的 `onComplete` 中记录执行结果 - - 便于排查问题和优化流程 - -6. **从叶子节点开始构建**: - - 复杂的指令树建议从叶子节点开始构建 - - 先创建所有指令实例,再配置它们之间的关系 - - 这样更容易理解和维护 - -## 架构优势 - -1. **职责清晰**:指令自己管理下游关系,符合单一职责原则 -2. **结构简单**:Transaction 只是一个容器,不需要维护复杂的节点映射 -3. **易于理解**:指令树的关系直接体现在指令对象上 -4. **灵活复用**:同一个指令实例可以被多个上游指令引用 -5. **面向对象**:指令成为了真正的"自包含"实体 - -## 完整示例代码 - -```java -// 示例:带重试的智能起飞 -public Transaction createSmartTakeoffTransaction() { - // 1. 创建所有指令实例 - TakeOffInstruction takeoffInstruction = new TakeOffInstruction(); - StartMissionInstruction startMissionInstruction = new StartMissionInstruction(); - EmergencyLandInstruction emergencyLandInstruction = new EmergencyLandInstruction(); - - // 2. 配置重试逻辑 - RetryTakeOffInstruction retryInstruction = new RetryTakeOffInstruction() - .onSuccess(startMissionInstruction) - .onFailure(emergencyLandInstruction); - - // 3. 配置主起飞逻辑 - CheckDeviceInstruction checkInstruction = new CheckDeviceInstruction() - .onSuccess(takeoffInstruction - .onSuccess(startMissionInstruction) - .onFailure(retryInstruction)) - .onFailure(new RepairDeviceInstruction() - .then(takeoffInstruction)); - - // 4. 创建事务 - return new Transaction("智能起飞", CommandType.TAKE_OFF) - .root(checkInstruction) - .setTimeout(180000); -} -``` diff --git a/src/main/java/com/tuoheng/old/action/airport/OfflineAction.java b/src/main/java/com/tuoheng/old/action/airport/OfflineAction.java deleted file mode 100644 index cf27de9..0000000 --- a/src/main/java/com/tuoheng/old/action/airport/OfflineAction.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.action.airport; - -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.AirportState; - -/** - * Base action for old offline handling; platform implementations extend this. - */ -public abstract class OfflineAction implements PlatformAction { -} - diff --git a/src/main/java/com/tuoheng/old/action/airport/OnlineAction.java b/src/main/java/com/tuoheng/old/action/airport/OnlineAction.java deleted file mode 100644 index 9bade0f..0000000 --- a/src/main/java/com/tuoheng/old/action/airport/OnlineAction.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.action.airport; - -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.AirportState; - -/** - * Base action for old online handling; platform implementations extend this. - */ -public abstract class OnlineAction implements PlatformAction { -} - diff --git a/src/main/java/com/tuoheng/old/action/cover/CloseCoverAction.java b/src/main/java/com/tuoheng/old/action/cover/CloseCoverAction.java deleted file mode 100644 index a3e2243..0000000 --- a/src/main/java/com/tuoheng/old/action/cover/CloseCoverAction.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.action.cover; - -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.CoverState; - -/** - * Base action for closing the cover; platform implementations extend this. - */ -public abstract class CloseCoverAction implements PlatformAction { -} - diff --git a/src/main/java/com/tuoheng/old/action/cover/CoverClosedAction.java b/src/main/java/com/tuoheng/old/action/cover/CoverClosedAction.java deleted file mode 100644 index c2a7163..0000000 --- a/src/main/java/com/tuoheng/old/action/cover/CoverClosedAction.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.action.cover; - -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.CoverState; - -/** - * Base action for cover-closed handling; platform implementations extend this. - */ -public abstract class CoverClosedAction implements PlatformAction { -} - diff --git a/src/main/java/com/tuoheng/old/action/cover/CoverOpenedAction.java b/src/main/java/com/tuoheng/old/action/cover/CoverOpenedAction.java deleted file mode 100644 index 7fe3efb..0000000 --- a/src/main/java/com/tuoheng/old/action/cover/CoverOpenedAction.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.action.cover; - -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.CoverState; - -/** - * Base action for cover-opened handling; platform implementations extend this. - */ -public abstract class CoverOpenedAction implements PlatformAction { -} - diff --git a/src/main/java/com/tuoheng/old/action/cover/OpenCoverAction.java b/src/main/java/com/tuoheng/old/action/cover/OpenCoverAction.java deleted file mode 100644 index de45d9d..0000000 --- a/src/main/java/com/tuoheng/old/action/cover/OpenCoverAction.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.action.cover; - -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.CoverState; - -/** - * Base action for opening the cover; platform implementations extend this. - */ -public abstract class OpenCoverAction implements PlatformAction { -} - diff --git a/src/main/java/com/tuoheng/old/action/debug/CloseDebugModeAction.java b/src/main/java/com/tuoheng/old/action/debug/CloseDebugModeAction.java deleted file mode 100644 index c21ad0e..0000000 --- a/src/main/java/com/tuoheng/old/action/debug/CloseDebugModeAction.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.action.debug; - -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.AirportState; - -/** - * Base action for closing debug mode; platform implementations extend this. - */ -public abstract class CloseDebugModeAction implements PlatformAction { -} - diff --git a/src/main/java/com/tuoheng/old/action/debug/OpenDebugModeAction.java b/src/main/java/com/tuoheng/old/action/debug/OpenDebugModeAction.java deleted file mode 100644 index 26bc88f..0000000 --- a/src/main/java/com/tuoheng/old/action/debug/OpenDebugModeAction.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.action.debug; - -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.AirportState; - -/** - * Base action for opening debug mode; platform implementations extend this. - */ -public abstract class OpenDebugModeAction implements PlatformAction { -} - diff --git a/src/main/java/com/tuoheng/old/action/drc/EnterAction.java b/src/main/java/com/tuoheng/old/action/drc/EnterAction.java deleted file mode 100644 index 0f5f255..0000000 --- a/src/main/java/com/tuoheng/old/action/drc/EnterAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.action.drc; - -import com.tuoheng.old.events.DrcEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.DrcState; - -/** - * Base action for DRC enter handling; platform implementations extend this. - */ -public abstract class EnterAction implements PlatformAction { -} diff --git a/src/main/java/com/tuoheng/old/action/drc/EnteredAction.java b/src/main/java/com/tuoheng/old/action/drc/EnteredAction.java deleted file mode 100644 index 7c58c3b..0000000 --- a/src/main/java/com/tuoheng/old/action/drc/EnteredAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.action.drc; - -import com.tuoheng.old.events.DrcEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.DrcState; - -/** - * Base action for DRC entered handling; platform implementations extend this. - */ -public abstract class EnteredAction implements PlatformAction { -} diff --git a/src/main/java/com/tuoheng/old/action/drc/ExitAction.java b/src/main/java/com/tuoheng/old/action/drc/ExitAction.java deleted file mode 100644 index cb386c8..0000000 --- a/src/main/java/com/tuoheng/old/action/drc/ExitAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.action.drc; - -import com.tuoheng.old.events.DrcEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.DrcState; - -/** - * Base action for DRC exit handling; platform implementations extend this. - */ -public abstract class ExitAction implements PlatformAction { -} diff --git a/src/main/java/com/tuoheng/old/action/drc/ExitedAction.java b/src/main/java/com/tuoheng/old/action/drc/ExitedAction.java deleted file mode 100644 index c65499b..0000000 --- a/src/main/java/com/tuoheng/old/action/drc/ExitedAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.action.drc; - -import com.tuoheng.old.events.DrcEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.DrcState; - -/** - * Base action for DRC exited handling; platform implementations extend this. - */ -public abstract class ExitedAction implements PlatformAction { -} diff --git a/src/main/java/com/tuoheng/old/action/drone/ArriveAction.java b/src/main/java/com/tuoheng/old/action/drone/ArriveAction.java deleted file mode 100644 index 21da193..0000000 --- a/src/main/java/com/tuoheng/old/action/drone/ArriveAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.action.drone; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.DroneState; - -/** - * Base action for drone arrive at destination handling; platform implementations extend this. - */ -public abstract class ArriveAction implements PlatformAction { -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/action/drone/CancelPointAction.java b/src/main/java/com/tuoheng/old/action/drone/CancelPointAction.java deleted file mode 100644 index fb9cfae..0000000 --- a/src/main/java/com/tuoheng/old/action/drone/CancelPointAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.action.drone; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.DroneState; - -/** - * Base action for drone cancel point operation handling; platform implementations extend this. - */ -public abstract class CancelPointAction implements PlatformAction { -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/action/drone/EmergencyStopAction.java b/src/main/java/com/tuoheng/old/action/drone/EmergencyStopAction.java deleted file mode 100644 index 5ab8163..0000000 --- a/src/main/java/com/tuoheng/old/action/drone/EmergencyStopAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.action.drone; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.DroneState; - -/** - * Base action for drone emergency stop handling; platform implementations extend this. - */ -public abstract class EmergencyStopAction implements PlatformAction { -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/action/drone/OfflineAction.java b/src/main/java/com/tuoheng/old/action/drone/OfflineAction.java deleted file mode 100644 index db703f9..0000000 --- a/src/main/java/com/tuoheng/old/action/drone/OfflineAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.action.drone; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.DroneState; - -/** - * Base action for drone offline handling; platform implementations extend this. - */ -public abstract class OfflineAction implements PlatformAction { -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/action/drone/PointFlyingCompletedAction.java b/src/main/java/com/tuoheng/old/action/drone/PointFlyingCompletedAction.java deleted file mode 100644 index 3c8fe0c..0000000 --- a/src/main/java/com/tuoheng/old/action/drone/PointFlyingCompletedAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.action.drone; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.DroneState; - -/** - * Base action for drone point flying completed handling; platform implementations extend this. - */ -public abstract class PointFlyingCompletedAction implements PlatformAction { -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/action/drone/PointPrepareCompletedAction.java b/src/main/java/com/tuoheng/old/action/drone/PointPrepareCompletedAction.java deleted file mode 100644 index 5c6750d..0000000 --- a/src/main/java/com/tuoheng/old/action/drone/PointPrepareCompletedAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.action.drone; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.DroneState; - -/** - * Base action for drone point prepare completed handling; platform implementations extend this. - */ -public abstract class PointPrepareCompletedAction implements PlatformAction { -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/action/drone/PointToFlyingAction.java b/src/main/java/com/tuoheng/old/action/drone/PointToFlyingAction.java deleted file mode 100644 index c3c1cd6..0000000 --- a/src/main/java/com/tuoheng/old/action/drone/PointToFlyingAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.action.drone; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.DroneState; - -/** - * Base action for drone point to flying handling; platform implementations extend this. - */ -public abstract class PointToFlyingAction implements PlatformAction { -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/action/drone/PointToReturnAction.java b/src/main/java/com/tuoheng/old/action/drone/PointToReturnAction.java deleted file mode 100644 index 6ee5325..0000000 --- a/src/main/java/com/tuoheng/old/action/drone/PointToReturnAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.action.drone; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.DroneState; - -/** - * Base action for drone point to return handling; platform implementations extend this. - */ -public abstract class PointToReturnAction implements PlatformAction { -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/action/drone/PrepareCompletedAction.java b/src/main/java/com/tuoheng/old/action/drone/PrepareCompletedAction.java deleted file mode 100644 index 791433a..0000000 --- a/src/main/java/com/tuoheng/old/action/drone/PrepareCompletedAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.action.drone; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.DroneState; - -/** - * Base action for drone prepare completed handling; platform implementations extend this. - */ -public abstract class PrepareCompletedAction implements PlatformAction { -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/action/drone/ResumeFlyingAction.java b/src/main/java/com/tuoheng/old/action/drone/ResumeFlyingAction.java deleted file mode 100644 index 9f70fff..0000000 --- a/src/main/java/com/tuoheng/old/action/drone/ResumeFlyingAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.action.drone; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.DroneState; - -/** - * Base action for drone resume flying handling; platform implementations extend this. - */ -public abstract class ResumeFlyingAction implements PlatformAction { -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/action/drone/ResumeReturnAction.java b/src/main/java/com/tuoheng/old/action/drone/ResumeReturnAction.java deleted file mode 100644 index 8956009..0000000 --- a/src/main/java/com/tuoheng/old/action/drone/ResumeReturnAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.action.drone; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.DroneState; - -/** - * Base action for drone resume return handling; platform implementations extend this. - */ -public abstract class ResumeReturnAction implements PlatformAction { -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/action/drone/ReturnCompletedAction.java b/src/main/java/com/tuoheng/old/action/drone/ReturnCompletedAction.java deleted file mode 100644 index 6c1d2e6..0000000 --- a/src/main/java/com/tuoheng/old/action/drone/ReturnCompletedAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.action.drone; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.DroneState; - -/** - * Base action for drone return completed handling; platform implementations extend this. - */ -public abstract class ReturnCompletedAction implements PlatformAction { -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/action/drone/ReturnEmergencyStopAction.java b/src/main/java/com/tuoheng/old/action/drone/ReturnEmergencyStopAction.java deleted file mode 100644 index d3667e5..0000000 --- a/src/main/java/com/tuoheng/old/action/drone/ReturnEmergencyStopAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.action.drone; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.DroneState; - -/** - * Base action for drone return emergency stop handling; platform implementations extend this. - */ -public abstract class ReturnEmergencyStopAction implements PlatformAction { -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/action/drone/StartFlyingAction.java b/src/main/java/com/tuoheng/old/action/drone/StartFlyingAction.java deleted file mode 100644 index 6a73c8f..0000000 --- a/src/main/java/com/tuoheng/old/action/drone/StartFlyingAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.action.drone; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.DroneState; - -/** - * Base action for drone start flying handling; platform implementations extend this. - */ -public abstract class StartFlyingAction implements PlatformAction { -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/action/drone/StartPointingAction.java b/src/main/java/com/tuoheng/old/action/drone/StartPointingAction.java deleted file mode 100644 index f30202f..0000000 --- a/src/main/java/com/tuoheng/old/action/drone/StartPointingAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.action.drone; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.DroneState; - -/** - * Base action for drone start pointing operation handling; platform implementations extend this. - */ -public abstract class StartPointingAction implements PlatformAction { -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/action/drone/StartPrepareAction.java b/src/main/java/com/tuoheng/old/action/drone/StartPrepareAction.java deleted file mode 100644 index 0fdf8ac..0000000 --- a/src/main/java/com/tuoheng/old/action/drone/StartPrepareAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.action.drone; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.DroneState; - -/** - * Base action for drone start prepare handling; platform implementations extend this. - */ -public abstract class StartPrepareAction implements PlatformAction { -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/action/drone/StartReturnAction.java b/src/main/java/com/tuoheng/old/action/drone/StartReturnAction.java deleted file mode 100644 index 425660d..0000000 --- a/src/main/java/com/tuoheng/old/action/drone/StartReturnAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.action.drone; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.DroneState; - -/** - * Base action for drone start return handling; platform implementations extend this. - */ -public abstract class StartReturnAction implements PlatformAction { -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/action/reboot/RebootAction.java b/src/main/java/com/tuoheng/old/action/reboot/RebootAction.java deleted file mode 100644 index acb405a..0000000 --- a/src/main/java/com/tuoheng/old/action/reboot/RebootAction.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.action.reboot; - -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.AirportState; - -/** - * Base action for rebooting; platform implementations extend this. - */ -public abstract class RebootAction implements PlatformAction { -} - diff --git a/src/main/java/com/tuoheng/old/action/reboot/RebootCompletedAction.java b/src/main/java/com/tuoheng/old/action/reboot/RebootCompletedAction.java deleted file mode 100644 index ab926b7..0000000 --- a/src/main/java/com/tuoheng/old/action/reboot/RebootCompletedAction.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.action.reboot; - -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.AirportState; - -/** - * Base action for completing reboot; platform implementations extend this. - */ -public abstract class RebootCompletedAction implements PlatformAction { -} - diff --git a/src/main/java/com/tuoheng/old/config/AirportMachineConfig.java b/src/main/java/com/tuoheng/old/config/AirportMachineConfig.java deleted file mode 100644 index 79b4a51..0000000 --- a/src/main/java/com/tuoheng/old/config/AirportMachineConfig.java +++ /dev/null @@ -1,215 +0,0 @@ -package com.tuoheng.old.config; - -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.platform.factory.PlatformStrategyFactory; -import com.tuoheng.old.platform.strategy.AirportPlatformStrategy; -import com.tuoheng.old.status.AirportState; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.statemachine.StateMachine; -import org.springframework.statemachine.config.StateMachineBuilder; -import org.springframework.statemachine.config.StateMachineFactory; - -import java.util.EnumSet; -import java.util.UUID; - -/** - * 机巢状态机配置(多平台支持版本) - * 通过PlatformStrategyFactory动态获取平台特定的Guard、Action和Listener - */ -@Configuration -@Slf4j -public class AirportMachineConfig { - - @Bean(name = "airportStateMachineFactory") - public StateMachineFactory stateMachineFactory( - PlatformStrategyFactory platformStrategyFactory) throws Exception { - - return new StateMachineFactory() { - @Override - public StateMachine getStateMachine() { - return null; - } - - @Override - public StateMachine getStateMachine(String machineId) { - try { - // 根据机巢SN获取平台策略 - AirportPlatformStrategy strategy = platformStrategyFactory.getAirportStrategy(machineId); - - StateMachineBuilder.Builder builder = StateMachineBuilder.builder(); - configureStateMachine(builder, strategy); - configureStates(builder); - configureTransitions(builder, strategy); - - StateMachine stateMachine = builder.build(); - stateMachine.getExtendedState().getVariables().put("machineId", machineId); - return stateMachine; - } catch (Exception e) { - log.error("创建AIRPORT机巢状态机失败 - 机器ID: {}", machineId, e); - throw new RuntimeException("Failed to create state old for: " + machineId, e); - } - } - - @Override - public StateMachine getStateMachine(UUID uuid) { - return null; - } - }; - } - - private void configureStateMachine( - StateMachineBuilder.Builder builder, - AirportPlatformStrategy strategy) throws Exception { - builder.configureConfiguration() - .withConfiguration() - .autoStartup(true) - .listener(strategy.getListener()); - } - - private void configureStates(StateMachineBuilder.Builder builder) throws Exception { - builder.configureStates() - .withStates() - .initial(AirportState.UNKNOWN) - .states(EnumSet.of( - AirportState.UNKNOWN, - AirportState.OFFLINE, - AirportState.ONLINE, - AirportState.REBOOTING - )) - .and() - .withStates() - .parent(AirportState.ONLINE) - .initial(AirportState.STANDBY) - .states(EnumSet.of( - AirportState.STANDBY, - AirportState.ENTERING_DEBUG_MODE, - AirportState.DEBUG_MODE, - AirportState.EXITING_DEBUG_MODE - )); - } - - private void configureTransitions( - StateMachineBuilder.Builder builder, - AirportPlatformStrategy strategy) throws Exception { - builder.configureTransitions() - // ========== 从 UNKNOWN 到所有状态的转换(服务器重启后状态同步) ========== - // UNKNOWN -> OFFLINE - .withExternal() - .source(AirportState.UNKNOWN) - .target(AirportState.OFFLINE) - .event(AirportEvent.AIRPORT_OFFLINE) - .and() - - // UNKNOWN -> ONLINE(STANDBY) - .withExternal() - .source(AirportState.UNKNOWN) - .target(AirportState.ONLINE) - .event(AirportEvent.AIRPORT_ONLINE) - .and() - - // UNKNOWN -> STANDBY - .withExternal() - .source(AirportState.UNKNOWN) - .target(AirportState.STANDBY) - .event(AirportEvent.AIRPORT_ONLINE) - .and() - - // UNKNOWN -> ENTERING_DEBUG_MODE - .withExternal() - .source(AirportState.UNKNOWN) - .target(AirportState.ENTERING_DEBUG_MODE) - .event(AirportEvent.DEBUG_MODE_OPEN) - .and() - - // UNKNOWN -> DEBUG_MODE - .withExternal() - .source(AirportState.UNKNOWN) - .target(AirportState.DEBUG_MODE) - .event(AirportEvent.DEBUG_MODE_ENTERED) - .and() - - // UNKNOWN -> EXITING_DEBUG_MODE - .withExternal() - .source(AirportState.UNKNOWN) - .target(AirportState.EXITING_DEBUG_MODE) - .event(AirportEvent.DEBUG_MODE_CLOSE) - .and() - - // UNKNOWN -> REBOOTING - .withExternal() - .source(AirportState.UNKNOWN) - .target(AirportState.REBOOTING) - .event(AirportEvent.AIRPORT_REBOOT) - .and() - - // ========== 正常状态转换(带 Guard 和 Action) ========== - // OFFLINE -> ONLINE(STANDBY) - .withExternal() - .source(AirportState.OFFLINE) - .target(AirportState.ONLINE) - .event(AirportEvent.AIRPORT_ONLINE) - .action(strategy.getOnlineAction()) - .guard(strategy.getCanOnlineGuard()) - .and() - - // ONLINE -> OFFLINE - .withExternal() - .source(AirportState.ONLINE) - .target(AirportState.OFFLINE) - .event(AirportEvent.AIRPORT_OFFLINE) - .action(strategy.getOfflineAction()) - .guard(strategy.getCanOfflineGuard()) - .and() - - // STANDBY -> ENTERING_DEBUG_MODE - .withExternal() - .source(AirportState.STANDBY) - .target(AirportState.ENTERING_DEBUG_MODE) - .event(AirportEvent.DEBUG_MODE_OPEN) - .action(strategy.getOpenDebugModeAction()) - .guard(strategy.getIsNotDebugModeGuard()) - .and() - - // ENTERING_DEBUG_MODE -> DEBUG_MODE - .withExternal() - .source(AirportState.ENTERING_DEBUG_MODE) - .target(AirportState.DEBUG_MODE) - .event(AirportEvent.DEBUG_MODE_ENTERED) - .and() - - // DEBUG_MODE -> EXITING_DEBUG_MODE - .withExternal() - .source(AirportState.DEBUG_MODE) - .target(AirportState.EXITING_DEBUG_MODE) - .event(AirportEvent.DEBUG_MODE_CLOSE) - .action(strategy.getCloseDebugModeAction()) - .guard(strategy.getCanCloseDebugModeGuard()) - .and() - - // EXITING_DEBUG_MODE -> STANDBY - .withExternal() - .source(AirportState.EXITING_DEBUG_MODE) - .target(AirportState.STANDBY) - .event(AirportEvent.DEBUG_MODE_EXITED) - .and() - - // DEBUG_MODE -> REBOOTING - .withExternal() - .source(AirportState.DEBUG_MODE) - .target(AirportState.REBOOTING) - .event(AirportEvent.AIRPORT_REBOOT) - .action(strategy.getRebootAction()) - .guard(strategy.getIsDebugModeGuard()) - .and() - - // REBOOTING -> ONLINE(STANDBY) - .withExternal() - .source(AirportState.REBOOTING) - .target(AirportState.ONLINE) - .event(AirportEvent.REBOOT_COMPLETED) - .action(strategy.getRebootCompletedAction()) - .guard(strategy.getIsRebootCompletedGuard()); - } -} diff --git a/src/main/java/com/tuoheng/old/config/CoverMachineConfig.java b/src/main/java/com/tuoheng/old/config/CoverMachineConfig.java deleted file mode 100644 index 3e2d4a4..0000000 --- a/src/main/java/com/tuoheng/old/config/CoverMachineConfig.java +++ /dev/null @@ -1,178 +0,0 @@ -package com.tuoheng.old.config; - -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.platform.factory.PlatformStrategyFactory; -import com.tuoheng.old.platform.strategy.CoverPlatformStrategy; -import com.tuoheng.old.status.CoverState; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.statemachine.StateMachine; -import org.springframework.statemachine.config.StateMachineBuilder; -import org.springframework.statemachine.config.StateMachineFactory; - -import java.util.EnumSet; -import java.util.UUID; - -/** - * 舱门状态机配置(多平台支持版本) - * 通过PlatformStrategyFactory动态获取平台特定的Guard、Action和Listener - */ -@Configuration -@Slf4j -public class CoverMachineConfig { - - @Bean - public StateMachineFactory coverStateMachineFactory( - PlatformStrategyFactory platformStrategyFactory) throws Exception { - return new StateMachineFactory() { - @Override - public StateMachine getStateMachine() { - return null; - } - - @Override - public StateMachine getStateMachine(String machineId) { - try { - // 根据机巢SN获取平台策略 - CoverPlatformStrategy strategy = platformStrategyFactory.getCoverStrategy(machineId); - - StateMachineBuilder.Builder builder = StateMachineBuilder.builder(); - configureCoverStateMachine(builder, strategy); - configureCoverStates(builder); - configureCoverTransitions(builder, strategy); - - StateMachine stateMachine = builder.build(); - stateMachine.getExtendedState().getVariables().put("machineId", machineId); - return stateMachine; - } catch (Exception e) { - log.error("创建COVER状态机失败 - 机器ID: {}", machineId, e); - throw new RuntimeException("Failed to create cover state old for: " + machineId, e); - } - } - - @Override - public StateMachine getStateMachine(UUID uuid) { - return null; - } - }; - } - - private void configureCoverStateMachine( - StateMachineBuilder.Builder builder, - CoverPlatformStrategy strategy) throws Exception { - builder.configureConfiguration() - .withConfiguration() - .autoStartup(true) - .listener(strategy.getListener()); - } - - private void configureCoverStates(StateMachineBuilder.Builder builder) throws Exception { - builder.configureStates() - .withStates() - .initial(CoverState.UNKNOWN) - .states(EnumSet.allOf(CoverState.class)); - } - - private void configureCoverTransitions( - StateMachineBuilder.Builder builder, - CoverPlatformStrategy strategy) throws Exception { - builder.configureTransitions() - // ========== 从 UNKNOWN 到所有状态的转换(服务器重启后状态同步) ========== - // UNKNOWN -> CLOSED - .withExternal() - .source(CoverState.UNKNOWN) - .target(CoverState.CLOSED) - .event(CoverEvent.CLOSED) - .and() - - // UNKNOWN -> OPENING - .withExternal() - .source(CoverState.UNKNOWN) - .target(CoverState.OPENING) - .event(CoverEvent.OPEN) - .and() - - // UNKNOWN -> OPENED - .withExternal() - .source(CoverState.UNKNOWN) - .target(CoverState.OPENED) - .event(CoverEvent.OPENED) - .and() - - // UNKNOWN -> CLOSING - .withExternal() - .source(CoverState.UNKNOWN) - .target(CoverState.CLOSING) - .event(CoverEvent.CLOSE) - .and() - - - - // UNKNOWN -> ERROR - .withExternal() - .source(CoverState.UNKNOWN) - .target(CoverState.ERROR) - .event(CoverEvent.ERROR) - .and() - - // ========== 正常状态转换(带 Guard 和 Action) ========== - // CLOSED -> OPENING - .withExternal() - .source(CoverState.CLOSED) - .target(CoverState.OPENING) - .event(CoverEvent.OPEN) - .action(strategy.getOpenAction()) - .guard(strategy.getCanOpenGuard()) - .and() - - // OPENING -> OPENED - .withExternal() - .source(CoverState.OPENING) - .target(CoverState.OPENED) - .event(CoverEvent.OPENED) - .action(strategy.getOpenedAction()) - .guard(strategy.getIsOpenedGuard()) - .and() - - // OPENED -> CLOSING - .withExternal() - .source(CoverState.OPENED) - .target(CoverState.CLOSING) - .event(CoverEvent.CLOSE) - .action(strategy.getCloseAction()) - .guard(strategy.getCanCloseGuard()) - .and() - - // CLOSING -> CLOSED - .withExternal() - .source(CoverState.CLOSING) - .target(CoverState.CLOSED) - .event(CoverEvent.CLOSED) - .action(strategy.getClosedAction()) - .guard(strategy.getIsClosedGuard()) - .and() - - // ERROR handling - .withExternal() - .source(CoverState.OPENING) - .target(CoverState.ERROR) - .event(CoverEvent.ERROR) - .action(strategy.getErrorAction()) - .and() - - .withExternal() - .source(CoverState.CLOSING) - .target(CoverState.ERROR) - .event(CoverEvent.ERROR) - .action(strategy.getErrorAction()) - .and() - - // RESET from ERROR - .withExternal() - .source(CoverState.ERROR) - .target(CoverState.CLOSED) - .event(CoverEvent.RESET) - .action(strategy.getResetAction()); - } -} diff --git a/src/main/java/com/tuoheng/old/config/DrcMachineConfig.java b/src/main/java/com/tuoheng/old/config/DrcMachineConfig.java deleted file mode 100644 index 63947e2..0000000 --- a/src/main/java/com/tuoheng/old/config/DrcMachineConfig.java +++ /dev/null @@ -1,145 +0,0 @@ -package com.tuoheng.old.config; - -import com.tuoheng.old.events.DrcEvent; -import com.tuoheng.old.platform.factory.PlatformStrategyFactory; -import com.tuoheng.old.platform.strategy.DrcPlatformStrategy; -import com.tuoheng.old.status.DrcState; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.statemachine.StateMachine; -import org.springframework.statemachine.config.StateMachineBuilder; -import org.springframework.statemachine.config.StateMachineFactory; - -import java.util.EnumSet; -import java.util.UUID; - -/** - * DRC(飞行控制模式)状态机配置(多平台支持版本) - * 通过PlatformStrategyFactory动态获取平台特定的Guard、Action和Listener - */ -@Configuration -@Slf4j -public class DrcMachineConfig { - - @Bean(name = "drcStateMachineFactory") - public StateMachineFactory drcStateMachineFactory( - PlatformStrategyFactory platformStrategyFactory) throws Exception { - - return new StateMachineFactory() { - @Override - public StateMachine getStateMachine() { - return null; - } - - @Override - public StateMachine getStateMachine(String machineId) { - try { - // 根据机巢SN获取平台策略 - DrcPlatformStrategy strategy = platformStrategyFactory.getDrcStrategy(machineId); - - StateMachineBuilder.Builder builder = StateMachineBuilder.builder(); - configureDrcStateMachine(builder, strategy); - configureDrcStates(builder); - configureDrcTransitions(builder, strategy); - - StateMachine stateMachine = builder.build(); - stateMachine.getExtendedState().getVariables().put("machineId", machineId); - return stateMachine; - } catch (Exception e) { - log.error("创建DRC状态机失败 - 机器ID: {}", machineId, e); - throw new RuntimeException("Failed to create DRC state old for: " + machineId, e); - } - } - - @Override - public StateMachine getStateMachine(UUID uuid) { - return null; - } - }; - } - - private void configureDrcStateMachine( - StateMachineBuilder.Builder builder, - DrcPlatformStrategy strategy) throws Exception { - builder.configureConfiguration() - .withConfiguration() - .autoStartup(true) - .listener(strategy.getListener()); - } - - private void configureDrcStates(StateMachineBuilder.Builder builder) throws Exception { - builder.configureStates() - .withStates() - .initial(DrcState.UNKNOWN) - .states(EnumSet.allOf(DrcState.class)); - } - - private void configureDrcTransitions( - StateMachineBuilder.Builder builder, - DrcPlatformStrategy strategy) throws Exception { - builder.configureTransitions() - // ========== 从 UNKNOWN 到所有状态的转换(服务器重启后状态同步) ========== - // UNKNOWN -> EXITED - .withExternal() - .source(DrcState.UNKNOWN) - .target(DrcState.EXITED) - .event(DrcEvent.EXITED) - .and() - - // UNKNOWN -> ENTERING - .withExternal() - .source(DrcState.UNKNOWN) - .target(DrcState.ENTERING) - .event(DrcEvent.ENTERING) - .and() - - // UNKNOWN -> ENTERED - .withExternal() - .source(DrcState.UNKNOWN) - .target(DrcState.ENTERED) - .event(DrcEvent.ENTERED) - .and() - - // UNKNOWN -> EXITING - .withExternal() - .source(DrcState.UNKNOWN) - .target(DrcState.EXITING) - .event(DrcEvent.EXITING) - .and() - - // ========== 正常状态转换(带 Guard 和 Action) ========== - // EXITED -> ENTERING - .withExternal() - .source(DrcState.EXITED) - .target(DrcState.ENTERING) - .event(DrcEvent.ENTERING) - .action(strategy.getEnterAction()) - .guard(strategy.getCanEnterGuard()) - .and() - - // ENTERING -> ENTERED - .withExternal() - .source(DrcState.ENTERING) - .target(DrcState.ENTERED) - .event(DrcEvent.ENTERED) - .action(strategy.getEnteredAction()) - .and() - - // ENTERED -> EXITING - .withExternal() - .source(DrcState.ENTERED) - .target(DrcState.EXITING) - .event(DrcEvent.EXITING) - .action(strategy.getExitAction()) - .guard(strategy.getCanExitGuard()) - .and() - - // EXITING -> EXITED - .withExternal() - .source(DrcState.EXITING) - .target(DrcState.EXITED) - .event(DrcEvent.EXITED) - .action(strategy.getExitedAction()); - } -} diff --git a/src/main/java/com/tuoheng/old/config/DroneMachineConfig.java b/src/main/java/com/tuoheng/old/config/DroneMachineConfig.java deleted file mode 100644 index 0cb3c37..0000000 --- a/src/main/java/com/tuoheng/old/config/DroneMachineConfig.java +++ /dev/null @@ -1,393 +0,0 @@ -package com.tuoheng.old.config; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.platform.factory.PlatformStrategyFactory; -import com.tuoheng.old.platform.strategy.DronePlatformStrategy; -import com.tuoheng.old.status.DroneState; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.statemachine.StateMachine; -import org.springframework.statemachine.config.StateMachineBuilder; -import org.springframework.statemachine.config.StateMachineFactory; - -import java.util.EnumSet; -import java.util.UUID; - -/** - * 无人机状态机配置(多平台支持版本) - * 通过PlatformStrategyFactory动态获取平台特定的Guard、Action和Listener - */ -@Configuration -@Slf4j -public class DroneMachineConfig { - - @Bean(name = "droneStateMachineFactory") - public StateMachineFactory droneStateMachineFactory( - PlatformStrategyFactory platformStrategyFactory) throws Exception { - return new StateMachineFactory() { - @Override - public StateMachine getStateMachine() { - return null; - } - - @Override - public StateMachine getStateMachine(String machineId) { - try { - // 根据无人机SN获取平台策略 - DronePlatformStrategy strategy = platformStrategyFactory.getDroneStrategy(machineId); - - StateMachineBuilder.Builder builder = StateMachineBuilder.builder(); - configureStateMachine(builder, strategy); - configureStates(builder); - configureTransitions(builder, strategy); - - StateMachine stateMachine = builder.build(); - stateMachine.getExtendedState().getVariables().put("machineId", machineId); - return stateMachine; - } catch (Exception e) { - log.error("创建DRONE状态机失败 - 机器ID: {}", machineId, e); - throw new RuntimeException("Failed to create drone state old for: " + machineId, e); - } - } - - @Override - public StateMachine getStateMachine(UUID uuid) { - return null; - } - }; - } - - private void configureStateMachine( - StateMachineBuilder.Builder builder, - DronePlatformStrategy strategy) throws Exception { - builder.configureConfiguration() - .withConfiguration() - .autoStartup(true) - .listener(strategy.getListener()); - } - - private void configureStates(StateMachineBuilder.Builder builder) throws Exception { - builder.configureStates() - .withStates() - .initial(DroneState.UNKNOWN) - .states(EnumSet.of( - DroneState.UNKNOWN, - DroneState.OFFLINE, - DroneState.PREPARING, - DroneState.FLYING_PARENT, - DroneState.RETURNING_PARENT, - DroneState.POINTING_PARENT - )) - // 飞行阶段子状态 - .and() - .withStates() - .parent(DroneState.FLYING_PARENT) - .initial(DroneState.FLYING) - .states(EnumSet.of( - DroneState.FLYING, - DroneState.EMERGENCY_STOP, - DroneState.ARRIVED - )) - // 返航阶段子状态 - .and() - .withStates() - .parent(DroneState.RETURNING_PARENT) - .initial(DroneState.RETURNING) - .states(EnumSet.of( - DroneState.RETURNING, - DroneState.RETURN_EMERGENCY_STOP, - DroneState.RETURN_COMPLETED - )) - // 指点操作子状态 - .and() - .withStates() - .parent(DroneState.POINTING_PARENT) - .initial(DroneState.POINT_PREPARING) - .states(EnumSet.of( - DroneState.POINT_PREPARING, - DroneState.POINT_FLYING, - DroneState.POINT_COMPLETED, - DroneState.POINT_CANCELLED - )); - } - - private void configureTransitions( - StateMachineBuilder.Builder builder, - DronePlatformStrategy strategy) throws Exception { - builder.configureTransitions() - // ========== 从 UNKNOWN 到所有状态的转换(服务器重启后状态同步) ========== - // UNKNOWN -> OFFLINE - .withExternal() - .source(DroneState.UNKNOWN) - .target(DroneState.OFFLINE) - .event(DroneEvent.DRONE_OFFLINE) - .and() - - // UNKNOWN -> PREPARING - .withExternal() - .source(DroneState.UNKNOWN) - .target(DroneState.PREPARING) - .event(DroneEvent.START_PREPARE) - .and() - - // UNKNOWN -> FLYING_PARENT - .withExternal() - .source(DroneState.UNKNOWN) - .target(DroneState.FLYING_PARENT) - .event(DroneEvent.START_FLYING) - .and() - - // UNKNOWN -> RETURNING_PARENT - .withExternal() - .source(DroneState.UNKNOWN) - .target(DroneState.RETURNING_PARENT) - .event(DroneEvent.START_RETURN) - .and() - - // ========== 基本状态转换 ========== - // OFFLINE -> PREPARING - .withExternal() - .source(DroneState.OFFLINE) - .target(DroneState.PREPARING) - .event(DroneEvent.START_PREPARE) - .action(strategy.getStartPrepareAction()) - .and() - - // PREPARING -> FLYING_PARENT - .withExternal() - .source(DroneState.PREPARING) - .target(DroneState.FLYING_PARENT) - .event(DroneEvent.PREPARE_COMPLETED) - .action(strategy.getPrepareCompletedAction()) - .and() - - // ========== 飞行阶段内部转换 ========== - // FLYING -> EMERGENCY_STOP - .withExternal() - .source(DroneState.FLYING) - .target(DroneState.EMERGENCY_STOP) - .event(DroneEvent.EMERGENCY_STOP) - .action(strategy.getEmergencyStopAction()) - .and() - - // EMERGENCY_STOP -> FLYING (恢复飞行) - .withExternal() - .source(DroneState.EMERGENCY_STOP) - .target(DroneState.FLYING) - .event(DroneEvent.RESUME_FLYING) - .action(strategy.getResumeFlyingAction()) - .and() - - // FLYING -> ARRIVED - .withExternal() - .source(DroneState.FLYING) - .target(DroneState.ARRIVED) - .event(DroneEvent.ARRIVE) - .action(strategy.getArriveAction()) - .and() - - // 注意:EMERGENCY_STOP 不能直接到 ARRIVED(根据注释限制) - - // ========== 飞行阶段 -> 指点操作 ========== - // FLYING -> POINTING_PARENT - .withExternal() - .source(DroneState.FLYING) - .target(DroneState.POINTING_PARENT) - .event(DroneEvent.START_POINTING) - .action(strategy.getStartPointingAction()) - .guard(strategy.getCanPointGuard()) - .and() - - // EMERGENCY_STOP -> POINTING_PARENT - .withExternal() - .source(DroneState.EMERGENCY_STOP) - .target(DroneState.POINTING_PARENT) - .event(DroneEvent.START_POINTING) - .action(strategy.getStartPointingAction()) - .guard(strategy.getCanPointGuard()) - .and() - - // ARRIVED -> POINTING_PARENT - .withExternal() - .source(DroneState.ARRIVED) - .target(DroneState.POINTING_PARENT) - .event(DroneEvent.START_POINTING) - .action(strategy.getStartPointingAction()) - .guard(strategy.getCanPointGuard()) - .and() - - // ========== 飞行阶段 -> 返航 ========== - // FLYING -> RETURNING_PARENT - .withExternal() - .source(DroneState.FLYING) - .target(DroneState.RETURNING_PARENT) - .event(DroneEvent.START_RETURN) - .action(strategy.getStartReturnAction()) - .and() - - // EMERGENCY_STOP -> RETURNING_PARENT - .withExternal() - .source(DroneState.EMERGENCY_STOP) - .target(DroneState.RETURNING_PARENT) - .event(DroneEvent.START_RETURN) - .action(strategy.getStartReturnAction()) - .and() - - // ARRIVED -> RETURNING_PARENT - .withExternal() - .source(DroneState.ARRIVED) - .target(DroneState.RETURNING_PARENT) - .event(DroneEvent.START_RETURN) - .action(strategy.getStartReturnAction()) - .and() - - // ========== 返航阶段内部转换 ========== - // RETURNING -> RETURN_EMERGENCY_STOP - .withExternal() - .source(DroneState.RETURNING) - .target(DroneState.RETURN_EMERGENCY_STOP) - .event(DroneEvent.RETURN_EMERGENCY_STOP) - .action(strategy.getReturnEmergencyStopAction()) - .and() - - // RETURN_EMERGENCY_STOP -> RETURNING (恢复返航) - .withExternal() - .source(DroneState.RETURN_EMERGENCY_STOP) - .target(DroneState.RETURNING) - .event(DroneEvent.RESUME_RETURN) - .action(strategy.getResumeReturnAction()) - .and() - - // RETURNING -> RETURN_COMPLETED - .withExternal() - .source(DroneState.RETURNING) - .target(DroneState.RETURN_COMPLETED) - .event(DroneEvent.RETURN_COMPLETED) - .action(strategy.getReturnCompletedAction()) - .and() - - // 注意:返航中不能指点(根据注释限制) - // 注意:RETURN_COMPLETED 不能回退到 RETURNING 或 RETURN_EMERGENCY_STOP(根据注释限制) - - // ========== 返航急停 -> 指点操作 ========== - // RETURN_EMERGENCY_STOP -> POINTING_PARENT (一键起飞和航线飞行都可以指点) - .withExternal() - .source(DroneState.RETURN_EMERGENCY_STOP) - .target(DroneState.POINTING_PARENT) - .event(DroneEvent.START_POINTING) - .action(strategy.getStartPointingAction()) - .guard(strategy.getCanPointGuard()) - .and() - - // ========== 指点操作内部转换 ========== - // POINT_PREPARING -> POINT_FLYING - .withExternal() - .source(DroneState.POINT_PREPARING) - .target(DroneState.POINT_FLYING) - .event(DroneEvent.POINT_PREPARE_COMPLETED) - .action(strategy.getPointPrepareCompletedAction()) - .and() - - // POINT_FLYING -> POINT_COMPLETED - .withExternal() - .source(DroneState.POINT_FLYING) - .target(DroneState.POINT_COMPLETED) - .event(DroneEvent.POINT_FLYING_COMPLETED) - .action(strategy.getPointFlyingCompletedAction()) - .and() - - // 任何指点阶段 -> POINT_CANCELLED - .withExternal() - .source(DroneState.POINT_PREPARING) - .target(DroneState.POINT_CANCELLED) - .event(DroneEvent.CANCEL_POINT) - .action(strategy.getCancelPointAction()) - .and() - - .withExternal() - .source(DroneState.POINT_FLYING) - .target(DroneState.POINT_CANCELLED) - .event(DroneEvent.CANCEL_POINT) - .action(strategy.getCancelPointAction()) - .and() - - .withExternal() - .source(DroneState.POINT_COMPLETED) - .target(DroneState.POINT_CANCELLED) - .event(DroneEvent.CANCEL_POINT) - .action(strategy.getCancelPointAction()) - .and() - - // ========== 指点操作 -> 飞行/返航 ========== - // POINT_COMPLETED -> FLYING - .withExternal() - .source(DroneState.POINT_COMPLETED) - .target(DroneState.FLYING) - .event(DroneEvent.POINT_TO_FLYING) - .action(strategy.getPointToFlyingAction()) - .and() - - // POINT_CANCELLED -> FLYING - .withExternal() - .source(DroneState.POINT_CANCELLED) - .target(DroneState.FLYING) - .event(DroneEvent.POINT_TO_FLYING) - .action(strategy.getPointToFlyingAction()) - .and() - - // POINT_COMPLETED -> RETURNING_PARENT - .withExternal() - .source(DroneState.POINT_COMPLETED) - .target(DroneState.RETURNING_PARENT) - .event(DroneEvent.POINT_TO_RETURN) - .action(strategy.getPointToReturnAction()) - .and() - - // POINT_CANCELLED -> RETURNING_PARENT - .withExternal() - .source(DroneState.POINT_CANCELLED) - .target(DroneState.RETURNING_PARENT) - .event(DroneEvent.POINT_TO_RETURN) - .action(strategy.getPointToReturnAction()) - .and() - - // POINT_COMPLETED -> RETURN_EMERGENCY_STOP - .withExternal() - .source(DroneState.POINT_COMPLETED) - .target(DroneState.RETURN_EMERGENCY_STOP) - .event(DroneEvent.RETURN_EMERGENCY_STOP) - .action(strategy.getReturnEmergencyStopAction()) - .and() - - // POINT_COMPLETED -> RETURN_COMPLETED - .withExternal() - .source(DroneState.POINT_COMPLETED) - .target(DroneState.RETURN_COMPLETED) - .event(DroneEvent.RETURN_COMPLETED) - .action(strategy.getReturnCompletedAction()) - .and() - - // ========== 离线处理 ========== - // 任何状态 -> OFFLINE - .withExternal() - .source(DroneState.FLYING_PARENT) - .target(DroneState.OFFLINE) - .event(DroneEvent.DRONE_OFFLINE) - .action(strategy.getOfflineAction()) - .and() - - .withExternal() - .source(DroneState.RETURNING_PARENT) - .target(DroneState.OFFLINE) - .event(DroneEvent.DRONE_OFFLINE) - .action(strategy.getOfflineAction()) - .and() - - .withExternal() - .source(DroneState.POINTING_PARENT) - .target(DroneState.OFFLINE) - .event(DroneEvent.DRONE_OFFLINE) - .action(strategy.getOfflineAction()); - } -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/demo/MultiPlatformDemo.java b/src/main/java/com/tuoheng/old/demo/MultiPlatformDemo.java deleted file mode 100644 index 46a0a14..0000000 --- a/src/main/java/com/tuoheng/old/demo/MultiPlatformDemo.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.tuoheng.old.demo; - -import com.tuoheng.old.manager.ISystemManager; -import com.tuoheng.old.manager.factory.AirportSystemManagerFactory; -import com.tuoheng.old.platform.factory.PlatformStrategyFactory; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -/** - * 演示程序(当前仅接入 DJI 平台) - */ -public class MultiPlatformDemo { - - public static void main(String[] args) throws InterruptedException { - - // 创建 Spring 上下文 - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); - - // 扫描所有组件 - context.scan("com.tuoheng.old"); - context.refresh(); - - // 获取必要的Bean - PlatformStrategyFactory strategyFactory = context.getBean(PlatformStrategyFactory.class); - AirportSystemManagerFactory managerFactory = context.getBean(AirportSystemManagerFactory.class); - - - System.out.println("\n========== DJI 机巢系统演示开始 ==========\n"); - - // ==================== 场景1: DJI 机巢上线 ==================== - System.out.println("【场景1】DJI 机巢上线"); - System.out.println("----------------------------------------"); - - String djiAirport = "airport-001"; // DJI平台 - - System.out.println("1. DJI机巢上线: " + djiAirport); - System.out.println(" 平台类型: " + strategyFactory.getPlatformType(djiAirport).getName()); - ISystemManager djiManager = managerFactory.getManager(djiAirport); - djiManager.airportOnline(djiAirport); - System.out.println(" " + djiManager.getFullStatus(djiAirport)); - System.out.println(); - Thread.sleep(500); - - // ==================== 场景2: DJI 开舱流程 ==================== - System.out.println("【场景2】DJI 开舱流程"); - System.out.println("----------------------------------------"); - - System.out.println("2. 开启调试模式: " + djiAirport); - djiManager.openDebugMode(djiAirport); - System.out.println(" " + djiManager.getFullStatus(djiAirport)); - System.out.println(); - Thread.sleep(500); - - System.out.println("3. 开舱: " + djiAirport); - djiManager.openCover(djiAirport); - System.out.println(" " + djiManager.getFullStatus(djiAirport)); - System.out.println(); - Thread.sleep(500); - - System.out.println("4. 舱门打开完成: " + djiAirport); - djiManager.coverOpened(djiAirport); - System.out.println(" " + djiManager.getFullStatus(djiAirport)); - System.out.println(); - Thread.sleep(500); - - // ==================== 场景3: DJI 关舱流程 ==================== - System.out.println("【场景3】DJI 关舱流程"); - System.out.println("----------------------------------------"); - - System.out.println("5. 关舱: " + djiAirport); - djiManager.closeCover(djiAirport); - System.out.println(" " + djiManager.getFullStatus(djiAirport)); - System.out.println(); - Thread.sleep(500); - - System.out.println("6. 舱门关闭完成: " + djiAirport); - djiManager.coverClosed(djiAirport); - System.out.println(" " + djiManager.getFullStatus(djiAirport)); - System.out.println(); - Thread.sleep(500); - - // ==================== 场景4: 当前状态汇总 ==================== - System.out.println("【场景4】当前状态汇总"); - System.out.println("----------------------------------------"); - System.out.println(String.format("%-20s %-15s %s", "机巢SN", "平台类型", "状态")); - System.out.println("------------------------------------------------------------"); - System.out.println(String.format("%-20s %-15s %s", - djiAirport, - strategyFactory.getPlatformType(djiAirport).getName(), - djiManager.getFullStatus(djiAirport))); - System.out.println(); - - System.out.println("\n========== DJI 机巢系统演示结束 ==========\n"); - - context.close(); - } -} diff --git a/src/main/java/com/tuoheng/old/events/AirportEvent.java b/src/main/java/com/tuoheng/old/events/AirportEvent.java deleted file mode 100644 index 57c3686..0000000 --- a/src/main/java/com/tuoheng/old/events/AirportEvent.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.tuoheng.old.events; - -/** - * 机巢事件枚举 - * 定义机巢状态机中的所有事件 - */ -public enum AirportEvent { - - // ==================== 机巢基本事件 ==================== - /** - * 机巢上线事件 - * 触发源: OSD心跳 - */ - AIRPORT_ONLINE, - - /** - * 机巢离线事件 - * 触发源: OSD心跳 - */ - AIRPORT_OFFLINE, - - // ==================== 调试模式事件 ==================== - /** - * 开启调试模式 - * 触发源: 用户指令 - */ - DEBUG_MODE_OPEN, - - /** - * 进入调试模式完成 - * 触发源: Events事件 - */ - DEBUG_MODE_ENTERED, - - /** - * 关闭调试模式 - * 触发源: 用户指令/自动 - */ - DEBUG_MODE_CLOSE, - - /** - * 退出调试模式完成 - * 触发源: Events事件 - */ - DEBUG_MODE_EXITED, - - // ==================== 机巢重启事件 ==================== - /** - * 机巢重启指令 - * 触发源: 用户指令 - */ - AIRPORT_REBOOT, - - /** - * 重启完成 - * 触发源: Events事件 - */ - REBOOT_COMPLETED -} diff --git a/src/main/java/com/tuoheng/old/events/CoverEvent.java b/src/main/java/com/tuoheng/old/events/CoverEvent.java deleted file mode 100644 index b5018ca..0000000 --- a/src/main/java/com/tuoheng/old/events/CoverEvent.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.tuoheng.old.events; - -/** - * 舱门事件枚举 - */ -public enum CoverEvent { - /** - * 开舱指令 - */ - OPEN, - - /** - * 开舱完成 - */ - OPENED, - - /** - * 关舱指令 - */ - CLOSE, - - /** - * 关舱完成 - */ - CLOSED, - - /** - * 舱门异常 - */ - ERROR, - - /** - * 重置舱门状态 - */ - RESET -} diff --git a/src/main/java/com/tuoheng/old/events/DrcEvent.java b/src/main/java/com/tuoheng/old/events/DrcEvent.java deleted file mode 100644 index bb9ac55..0000000 --- a/src/main/java/com/tuoheng/old/events/DrcEvent.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.tuoheng.old.events; - -/** - * DRC(飞行控制模式)事件枚举 - * 定义DRC状态机中的所有事件 - */ -public enum DrcEvent { - /** - * 进入DRC模式指令 - * 触发源: 用户指令 - */ - ENTERING, - - /** - * 进入DRC模式完成 - * 触发源: Events事件 - */ - ENTERED, - - /** - * 退出DRC模式指令 - * 触发源: 用户指令/自动 - */ - EXITING, - - /** - * 退出DRC模式完成 - * 触发源: Events事件 - */ - EXITED -} diff --git a/src/main/java/com/tuoheng/old/events/DroneEvent.java b/src/main/java/com/tuoheng/old/events/DroneEvent.java deleted file mode 100644 index 73ef3a0..0000000 --- a/src/main/java/com/tuoheng/old/events/DroneEvent.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.tuoheng.old.events; - -/** - * 无人机事件枚举 - * 定义无人机状态机中的所有事件 - */ -public enum DroneEvent { - - // ==================== 无人机基本事件 ==================== - /** - * 无人机上线事件 - * 触发源: OSD心跳 - */ - DRONE_ONLINE, - - /** - * 无人机离线事件 - * 触发源: OSD心跳 - */ - DRONE_OFFLINE, - - // ==================== 准备阶段事件 ==================== - /** - * 开始准备 - * 触发源: 用户指令 - */ - START_PREPARE, - - /** - * 准备完成 - * 触发源: Events事件 - */ - PREPARE_COMPLETED, - - // ==================== 飞行阶段事件 ==================== - /** - * 开始飞行 - * 触发源: 用户指令 - */ - START_FLYING, - - /** - * 急停(飞行阶段) - * 触发源: 用户指令/自动 - */ - EMERGENCY_STOP, - - /** - * 恢复飞行(从急停恢复) - * 触发源: 用户指令 - */ - RESUME_FLYING, - - /** - * 到达目的地 - * 触发源: Events事件 - */ - ARRIVE, - - // ==================== 返航阶段事件 ==================== - /** - * 开始返航 - * 触发源: 用户指令/自动 - */ - START_RETURN, - - /** - * 急停(返航阶段) - * 触发源: 用户指令/自动 - */ - RETURN_EMERGENCY_STOP, - - /** - * 恢复返航(从返航急停恢复) - * 触发源: 用户指令 - */ - RESUME_RETURN, - - /** - * 返航完成 - * 触发源: Events事件 - */ - RETURN_COMPLETED, - - // ==================== 指点操作事件 ==================== - /** - * 开始指点操作 - * 触发源: 用户指令 - */ - START_POINTING, - - /** - * 指点准备完成 - * 触发源: Events事件 - */ - POINT_PREPARE_COMPLETED, - - /** - * 指点飞行完成 - * 触发源: Events事件 - */ - POINT_FLYING_COMPLETED, - - /** - * 取消指点 - * 触发源: 用户指令 - */ - CANCEL_POINT, - - /** - * 指点完成后返回飞行 - * 触发源: 自动/用户指令 - */ - POINT_TO_FLYING, - - /** - * 指点完成后返航 - * 触发源: 用户指令 - */ - POINT_TO_RETURN -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/guard/airport/CanOfflineGuard.java b/src/main/java/com/tuoheng/old/guard/airport/CanOfflineGuard.java deleted file mode 100644 index 5940710..0000000 --- a/src/main/java/com/tuoheng/old/guard/airport/CanOfflineGuard.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.guard.airport; - -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.platform.strategy.PlatformGuard; -import com.tuoheng.old.status.AirportState; - -/** - * Base guard for checking if an old can go offline; platform implementations extend this. - */ -public abstract class CanOfflineGuard implements PlatformGuard { -} - diff --git a/src/main/java/com/tuoheng/old/guard/airport/CanOnlineGuard.java b/src/main/java/com/tuoheng/old/guard/airport/CanOnlineGuard.java deleted file mode 100644 index bf74029..0000000 --- a/src/main/java/com/tuoheng/old/guard/airport/CanOnlineGuard.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.guard.airport; - -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.platform.strategy.PlatformGuard; -import com.tuoheng.old.status.AirportState; - -/** - * Base guard for checking if an old can go online; platform implementations extend this. - */ -public abstract class CanOnlineGuard implements PlatformGuard { -} - diff --git a/src/main/java/com/tuoheng/old/guard/airport/IsAirportOnlineGuard.java b/src/main/java/com/tuoheng/old/guard/airport/IsAirportOnlineGuard.java deleted file mode 100644 index ecd1baf..0000000 --- a/src/main/java/com/tuoheng/old/guard/airport/IsAirportOnlineGuard.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.guard.airport; - -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.platform.strategy.PlatformGuard; -import com.tuoheng.old.status.AirportState; - -/** - * Base guard for checking old online status; platform implementations extend this. - */ -public abstract class IsAirportOnlineGuard implements PlatformGuard { -} - diff --git a/src/main/java/com/tuoheng/old/guard/cover/CanCloseCoverGuard.java b/src/main/java/com/tuoheng/old/guard/cover/CanCloseCoverGuard.java deleted file mode 100644 index 3a278e3..0000000 --- a/src/main/java/com/tuoheng/old/guard/cover/CanCloseCoverGuard.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.guard.cover; - -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.platform.strategy.PlatformGuard; -import com.tuoheng.old.status.CoverState; - -/** - * Base guard for closing the cover; platform implementations extend this. - */ -public abstract class CanCloseCoverGuard implements PlatformGuard { -} - diff --git a/src/main/java/com/tuoheng/old/guard/cover/CanOpenCoverGuard.java b/src/main/java/com/tuoheng/old/guard/cover/CanOpenCoverGuard.java deleted file mode 100644 index 6b6e78d..0000000 --- a/src/main/java/com/tuoheng/old/guard/cover/CanOpenCoverGuard.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.guard.cover; - -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.platform.strategy.PlatformGuard; -import com.tuoheng.old.status.CoverState; - -/** - * Base guard for opening the cover; platform implementations extend this. - */ -public abstract class CanOpenCoverGuard implements PlatformGuard { -} - diff --git a/src/main/java/com/tuoheng/old/guard/cover/IsCoverClosedGuard.java b/src/main/java/com/tuoheng/old/guard/cover/IsCoverClosedGuard.java deleted file mode 100644 index c31689b..0000000 --- a/src/main/java/com/tuoheng/old/guard/cover/IsCoverClosedGuard.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.guard.cover; - -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.platform.strategy.PlatformGuard; -import com.tuoheng.old.status.CoverState; - -/** - * Base guard for verifying the cover is closed; platform implementations extend this. - */ -public abstract class IsCoverClosedGuard implements PlatformGuard { -} - diff --git a/src/main/java/com/tuoheng/old/guard/cover/IsCoverOpenedGuard.java b/src/main/java/com/tuoheng/old/guard/cover/IsCoverOpenedGuard.java deleted file mode 100644 index be01f0c..0000000 --- a/src/main/java/com/tuoheng/old/guard/cover/IsCoverOpenedGuard.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.guard.cover; - -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.platform.strategy.PlatformGuard; -import com.tuoheng.old.status.CoverState; - -/** - * Base guard for verifying the cover is opened; platform implementations extend this. - */ -public abstract class IsCoverOpenedGuard implements PlatformGuard { -} - diff --git a/src/main/java/com/tuoheng/old/guard/debug/CanCloseDebugModeGuard.java b/src/main/java/com/tuoheng/old/guard/debug/CanCloseDebugModeGuard.java deleted file mode 100644 index 0334733..0000000 --- a/src/main/java/com/tuoheng/old/guard/debug/CanCloseDebugModeGuard.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.guard.debug; - -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.platform.strategy.PlatformGuard; -import com.tuoheng.old.status.AirportState; - -/** - * Base guard for closing debug mode; platform implementations extend this. - */ -public abstract class CanCloseDebugModeGuard implements PlatformGuard { -} - diff --git a/src/main/java/com/tuoheng/old/guard/debug/IsDebugModeGuard.java b/src/main/java/com/tuoheng/old/guard/debug/IsDebugModeGuard.java deleted file mode 100644 index c8938a0..0000000 --- a/src/main/java/com/tuoheng/old/guard/debug/IsDebugModeGuard.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.guard.debug; - -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.platform.strategy.PlatformGuard; -import com.tuoheng.old.status.AirportState; - -/** - * Base guard for checking debug mode; platform implementations extend this. - */ -public abstract class IsDebugModeGuard implements PlatformGuard { -} - diff --git a/src/main/java/com/tuoheng/old/guard/debug/IsNotDebugModeGuard.java b/src/main/java/com/tuoheng/old/guard/debug/IsNotDebugModeGuard.java deleted file mode 100644 index a1aee9b..0000000 --- a/src/main/java/com/tuoheng/old/guard/debug/IsNotDebugModeGuard.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.guard.debug; - -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.platform.strategy.PlatformGuard; -import com.tuoheng.old.status.AirportState; - -/** - * Base guard for checking non-debug mode; platform implementations extend this. - */ -public abstract class IsNotDebugModeGuard implements PlatformGuard { -} - diff --git a/src/main/java/com/tuoheng/old/guard/drc/CanEnterGuard.java b/src/main/java/com/tuoheng/old/guard/drc/CanEnterGuard.java deleted file mode 100644 index cbeef96..0000000 --- a/src/main/java/com/tuoheng/old/guard/drc/CanEnterGuard.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.guard.drc; - -import com.tuoheng.old.events.DrcEvent; -import com.tuoheng.old.platform.strategy.PlatformGuard; -import com.tuoheng.old.status.DrcState; - -/** - * Base guard for checking if can enter DRC mode; platform implementations extend this. - */ -public abstract class CanEnterGuard implements PlatformGuard { -} diff --git a/src/main/java/com/tuoheng/old/guard/drc/CanExitGuard.java b/src/main/java/com/tuoheng/old/guard/drc/CanExitGuard.java deleted file mode 100644 index 499bef0..0000000 --- a/src/main/java/com/tuoheng/old/guard/drc/CanExitGuard.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tuoheng.old.guard.drc; - -import com.tuoheng.old.events.DrcEvent; -import com.tuoheng.old.platform.strategy.PlatformGuard; -import com.tuoheng.old.status.DrcState; - -/** - * Base guard for checking if can exit DRC mode; platform implementations extend this. - */ -public abstract class CanExitGuard implements PlatformGuard { -} diff --git a/src/main/java/com/tuoheng/old/guard/drone/CanPointGuard.java b/src/main/java/com/tuoheng/old/guard/drone/CanPointGuard.java deleted file mode 100644 index f07fba1..0000000 --- a/src/main/java/com/tuoheng/old/guard/drone/CanPointGuard.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.tuoheng.old.guard.drone; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.platform.strategy.PlatformGuard; -import com.tuoheng.old.status.DroneState; - -/** - * Base guard for checking if drone can start pointing operation; platform implementations extend this. - * 检查无人机是否可以进行指点操作 - * 注意:返航中不可以指点 - */ -public abstract class CanPointGuard implements PlatformGuard { -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/guard/reboot/IsRebootCompletedGuard.java b/src/main/java/com/tuoheng/old/guard/reboot/IsRebootCompletedGuard.java deleted file mode 100644 index 4d63719..0000000 --- a/src/main/java/com/tuoheng/old/guard/reboot/IsRebootCompletedGuard.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.guard.reboot; - -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.platform.strategy.PlatformGuard; -import com.tuoheng.old.status.AirportState; - -/** - * Base guard for verifying reboot completion; platform implementations extend this. - */ -public abstract class IsRebootCompletedGuard implements PlatformGuard { -} - diff --git a/src/main/java/com/tuoheng/old/impl/dji/DjiAirportPlatformStrategy.java b/src/main/java/com/tuoheng/old/impl/dji/DjiAirportPlatformStrategy.java deleted file mode 100644 index ed1ba20..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/DjiAirportPlatformStrategy.java +++ /dev/null @@ -1,135 +0,0 @@ -package com.tuoheng.old.impl.dji; - - -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.impl.dji.action.airport.*; -import com.tuoheng.old.impl.dji.guard.airport.*; -import com.tuoheng.old.impl.dji.listener.DjiAirportListener; -import com.tuoheng.old.platform.PlatformType; -import com.tuoheng.old.platform.strategy.AirportPlatformStrategy; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.platform.strategy.PlatformGuard; -import com.tuoheng.old.platform.strategy.PlatformListener; -import com.tuoheng.old.status.AirportState; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -/** - * DJI平台机巢策略实现 - */ -@Component -public class DjiAirportPlatformStrategy implements AirportPlatformStrategy { - - @Autowired - private DjiCanOnlineGuard canOnlineGuard; - - @Autowired - private DjiCanOfflineGuard canOfflineGuard; - - @Autowired - private DjiIsDebugModeGuard isDebugModeGuard; - - @Autowired - private DjiIsNotDebugModeGuard isNotDebugModeGuard; - - @Autowired - private DjiCanCloseDebugModeGuard canCloseDebugModeGuard; - - @Autowired - private DjiIsRebootCompletedGuard isRebootCompletedGuard; - - @Autowired - private DjiOnlineAction onlineAction; - - @Autowired - private DjiOfflineAction offlineAction; - - @Autowired - private DjiOpenDebugModeAction openDebugModeAction; - - @Autowired - private DjiCloseDebugModeAction closeDebugModeAction; - - @Autowired - private DjiRebootAction rebootAction; - - @Autowired - private DjiRebootCompletedAction rebootCompletedAction; - /** - * DJI平台的Listener实例(单例,所有DJI机巢共享) - */ - @Autowired - private DjiAirportListener djiListener; - - @Override - public PlatformType getPlatformType() { - return PlatformType.DJI; - } - - @Override - public PlatformGuard getCanOnlineGuard() { - return canOnlineGuard; - } - - @Override - public PlatformGuard getCanOfflineGuard() { - return canOfflineGuard; - } - - @Override - public PlatformGuard getIsDebugModeGuard() { - return isDebugModeGuard; - } - - @Override - public PlatformGuard getIsNotDebugModeGuard() { - return isNotDebugModeGuard; - } - - @Override - public PlatformGuard getCanCloseDebugModeGuard() { - return canCloseDebugModeGuard; - } - - @Override - public PlatformGuard getIsRebootCompletedGuard() { - return isRebootCompletedGuard; - } - - @Override - public PlatformAction getOnlineAction() { - return onlineAction; - } - - @Override - public PlatformAction getOfflineAction() { - return offlineAction; - } - - @Override - public PlatformAction getOpenDebugModeAction() { - return openDebugModeAction; - } - - @Override - public PlatformAction getCloseDebugModeAction() { - return closeDebugModeAction; - } - - @Override - public PlatformAction getRebootAction() { - return rebootAction; - } - - @Override - public PlatformAction getRebootCompletedAction() { - return rebootCompletedAction; - } - - @Override - public PlatformListener getListener() { - // 返回DJI平台的Listener单例 - // 所有DJI机巢共享这个Listener实例 - return djiListener; - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/DjiAirportSystemManager.java b/src/main/java/com/tuoheng/old/impl/dji/DjiAirportSystemManager.java deleted file mode 100644 index b05b59b..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/DjiAirportSystemManager.java +++ /dev/null @@ -1,127 +0,0 @@ -package com.tuoheng.old.impl.dji; - -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.events.CoverEvent; - -import com.tuoheng.old.manager.AbsSystemManager; -import com.tuoheng.old.platform.PlatformType; -import com.tuoheng.old.status.AirportState; -import com.tuoheng.old.status.CoverState; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * 大疆平台机巢系统管理器实现 - */ -@Component -@Slf4j -public class DjiAirportSystemManager extends AbsSystemManager { - - @Override - public PlatformType getPlatformType() { - return PlatformType.DJI; - } - - /** - * @param airportSn - * @return - */ - @Override - public boolean airportOnline(String airportSn) { - return airportService.sendEvent(airportSn, AirportEvent.AIRPORT_ONLINE); - } - - /** - * @param airportSn - * @return - */ - @Override - public boolean airportOffline(String airportSn) { - return airportService.sendEvent(airportSn, AirportEvent.AIRPORT_OFFLINE); - } - - @Override - public boolean openDebugMode(String airportSn) { - if (!airportService.isInState(airportSn, AirportState.ONLINE)) { - log.warn("机巢未在线,无法开启调试模式"); - return false; - } - return airportService.sendEvent(airportSn, AirportEvent.DEBUG_MODE_OPEN); - } - - @Override - public boolean closeDebugMode(String airportSn) { - return airportService.sendEvent(airportSn, AirportEvent.DEBUG_MODE_CLOSE); - } - - @Override - public boolean openCover(String airportSn) { - if (!airportService.isInState(airportSn, AirportState.DEBUG_MODE)) { - log.warn("机巢: {} 必须在调试模式下才能开舱", airportSn); - return false; - } - if (coverService.isInState(airportSn, CoverState.OPENED)) { - log.info("舱门已经打开"); - return false; - } - return coverService.sendEvent(airportSn, CoverEvent.OPEN); - } - - @Override - public boolean coverOpened(String airportSn) { - return coverService.sendEvent(airportSn, CoverEvent.OPENED); - } - - @Override - public boolean closeCover(String airportSn) { - if (!airportService.isInState(airportSn, AirportState.DEBUG_MODE)) { - log.warn("必须在调试模式下才能关舱"); - return false; - } - if (coverService.isInState(airportSn, CoverState.CLOSED)) { - log.info("机巢: {} 舱门已经关闭", airportSn); - return false; - } - return coverService.sendEvent(airportSn, CoverEvent.CLOSE); - } - - @Override - public boolean coverClosed(String airportSn) { - return coverService.sendEvent(airportSn, CoverEvent.CLOSED); - } - - @Override - public boolean rebootAirport(String airportSn) { - if (!airportService.isInState(airportSn, AirportState.DEBUG_MODE)) { - log.warn("必须在调试模式下才能重启"); - return false; - } - return airportService.sendEvent(airportSn, AirportEvent.AIRPORT_REBOOT); - } - - @Override - public boolean rebootCompleted(String airportSn) { - return airportService.sendEvent(airportSn, AirportEvent.REBOOT_COMPLETED); - } - - @Override - public AirportState getAirportState(String airportSn) { - return airportService.getCurrentState(airportSn); - } - - @Override - public CoverState getCoverState(String airportSn) { - return coverService.getCurrentState(airportSn); - } - - @Override - public String getFullStatus(String airportSn) { - AirportState airportState = getAirportState(airportSn); - CoverState coverState = getCoverState(airportSn); - return String.format("机巢状态: %s, 舱门状态: %s", - airportState != null ? airportState : "未知", - coverState != null ? coverState : "未知"); - } -} - - diff --git a/src/main/java/com/tuoheng/old/impl/dji/DjiCoverPlatformStrategy.java b/src/main/java/com/tuoheng/old/impl/dji/DjiCoverPlatformStrategy.java deleted file mode 100644 index 7b2c8c5..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/DjiCoverPlatformStrategy.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.tuoheng.old.impl.dji; - - -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.impl.dji.action.cover.*; -import com.tuoheng.old.impl.dji.guard.cover.DjiCanCloseCoverGuard; -import com.tuoheng.old.impl.dji.guard.cover.DjiCanOpenCoverGuard; -import com.tuoheng.old.impl.dji.guard.cover.DjiIsCoverClosedGuard; -import com.tuoheng.old.impl.dji.guard.cover.DjiIsCoverOpenedGuard; -import com.tuoheng.old.impl.dji.listener.DjiCoverListener; -import com.tuoheng.old.platform.PlatformType; -import com.tuoheng.old.platform.strategy.CoverPlatformStrategy; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.platform.strategy.PlatformGuard; -import com.tuoheng.old.platform.strategy.PlatformListener; -import com.tuoheng.old.status.CoverState; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -/** - * DJI平台舱门策略实现 - */ -@Component -public class DjiCoverPlatformStrategy implements CoverPlatformStrategy { - - @Autowired - private DjiCanOpenCoverGuard canOpenGuard; - - @Autowired - private DjiCanCloseCoverGuard canCloseGuard; - - @Autowired - private DjiIsCoverOpenedGuard isOpenedGuard; - - @Autowired - private DjiIsCoverClosedGuard isClosedGuard; - - @Autowired - private DjiOpenCoverAction openAction; - - @Autowired - private DjiCoverOpenedAction openedAction; - - @Autowired - private DjiCloseCoverAction closeAction; - - @Autowired - private DjiCoverClosedAction closedAction; - - @Autowired - private DjiCoverErrorAction errorAction; - - @Autowired - private DjiCoverResetAction resetAction; - - /** - * DJI平台的舱门Listener实例(单例,所有DJI机巢共享) - */ - @Autowired - private DjiCoverListener djiCoverListener ; - - @Override - public PlatformType getPlatformType() { - return PlatformType.DJI; - } - - @Override - public PlatformGuard getCanOpenGuard() { - return canOpenGuard; - } - - @Override - public PlatformGuard getCanCloseGuard() { - return canCloseGuard; - } - - @Override - public PlatformGuard getIsOpenedGuard() { - return isOpenedGuard; - } - - @Override - public PlatformGuard getIsClosedGuard() { - return isClosedGuard; - } - - @Override - public PlatformAction getOpenAction() { - return openAction; - } - - @Override - public PlatformAction getOpenedAction() { - return openedAction; - } - - @Override - public PlatformAction getCloseAction() { - return closeAction; - } - - @Override - public PlatformAction getClosedAction() { - return closedAction; - } - - @Override - public PlatformAction getErrorAction() { - return errorAction; - } - - @Override - public PlatformAction getResetAction() { - return resetAction; - } - - @Override - public PlatformListener getListener() { - // 返回DJI平台的舱门Listener单例 - // 所有DJI机巢共享这个Listener实例 - return djiCoverListener; - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/DjiDrcPlatformStrategy.java b/src/main/java/com/tuoheng/old/impl/dji/DjiDrcPlatformStrategy.java deleted file mode 100644 index 8269be8..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/DjiDrcPlatformStrategy.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.tuoheng.old.impl.dji; - -import com.tuoheng.old.events.DrcEvent; -import com.tuoheng.old.platform.PlatformType; -import com.tuoheng.old.impl.dji.action.drc.DjiEnterAction; -import com.tuoheng.old.impl.dji.action.drc.DjiEnteredAction; -import com.tuoheng.old.impl.dji.action.drc.DjiExitAction; -import com.tuoheng.old.impl.dji.action.drc.DjiExitedAction; -import com.tuoheng.old.impl.dji.guard.drc.DjiCanEnterGuard; -import com.tuoheng.old.impl.dji.guard.drc.DjiCanExitGuard; -import com.tuoheng.old.impl.dji.listener.DjiDrcListener; -import com.tuoheng.old.platform.strategy.DrcPlatformStrategy; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.platform.strategy.PlatformGuard; -import com.tuoheng.old.platform.strategy.PlatformListener; -import com.tuoheng.old.status.DrcState; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -/** - * DJI平台DRC策略实现 - */ -@Component -public class DjiDrcPlatformStrategy implements DrcPlatformStrategy { - - @Autowired - private DjiCanEnterGuard canEnterGuard; - - @Autowired - private DjiCanExitGuard canExitGuard; - - @Autowired - private DjiEnterAction enterAction; - - @Autowired - private DjiEnteredAction enteredAction; - - @Autowired - private DjiExitAction exitAction; - - @Autowired - private DjiExitedAction exitedAction; - - @Autowired - private DjiDrcListener djiDrcListener; - - @Override - public PlatformType getPlatformType() { - return PlatformType.DJI; - } - - @Override - public PlatformGuard getCanEnterGuard() { - return canEnterGuard; - } - - @Override - public PlatformGuard getCanExitGuard() { - return canExitGuard; - } - - @Override - public PlatformAction getEnterAction() { - return enterAction; - } - - @Override - public PlatformAction getEnteredAction() { - return enteredAction; - } - - @Override - public PlatformAction getExitAction() { - return exitAction; - } - - @Override - public PlatformAction getExitedAction() { - return exitedAction; - } - - @Override - public PlatformListener getListener() { - return djiDrcListener; - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/DjiDronePlatformStrategy.java b/src/main/java/com/tuoheng/old/impl/dji/DjiDronePlatformStrategy.java deleted file mode 100644 index e8d5b21..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/DjiDronePlatformStrategy.java +++ /dev/null @@ -1,179 +0,0 @@ -package com.tuoheng.old.impl.dji; - - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.impl.dji.action.drone.*; -import com.tuoheng.old.platform.PlatformType; -import com.tuoheng.old.impl.dji.guard.drone.DjiCanPointGuard; -import com.tuoheng.old.impl.dji.listener.DjiDroneListener; -import com.tuoheng.old.platform.strategy.DronePlatformStrategy; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.platform.strategy.PlatformGuard; -import com.tuoheng.old.platform.strategy.PlatformListener; -import com.tuoheng.old.status.DroneState; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -/** - * DJI平台无人机策略实现 - */ -@Component -public class DjiDronePlatformStrategy implements DronePlatformStrategy { - - @Autowired - private DjiCanPointGuard canPointGuard; - - @Autowired - private DjiStartPrepareAction startPrepareAction; - - @Autowired - private DjiPrepareCompletedAction prepareCompletedAction; - - @Autowired - private DjiStartFlyingAction startFlyingAction; - - @Autowired - private DjiEmergencyStopAction emergencyStopAction; - - @Autowired - private DjiResumeFlyingAction resumeFlyingAction; - - @Autowired - private DjiArriveAction arriveAction; - - @Autowired - private DjiStartReturnAction startReturnAction; - - @Autowired - private DjiReturnEmergencyStopAction returnEmergencyStopAction; - - @Autowired - private DjiResumeReturnAction resumeReturnAction; - - @Autowired - private DjiReturnCompletedAction returnCompletedAction; - - @Autowired - private DjiStartPointingAction startPointingAction; - - @Autowired - private DjiPointPrepareCompletedAction pointPrepareCompletedAction; - - @Autowired - private DjiPointFlyingCompletedAction pointFlyingCompletedAction; - - @Autowired - private DjiCancelPointAction cancelPointAction; - - @Autowired - private DjiPointToFlyingAction pointToFlyingAction; - - @Autowired - private DjiPointToReturnAction pointToReturnAction; - - @Autowired - private DjiDroneOfflineAction offlineAction; - - @Autowired - private DjiDroneListener djiDroneListener; - - @Override - public PlatformType getPlatformType() { - return PlatformType.DJI; - } - - @Override - public PlatformGuard getCanPointGuard() { - return canPointGuard; - } - - @Override - public PlatformAction getStartPrepareAction() { - return startPrepareAction; - } - - @Override - public PlatformAction getPrepareCompletedAction() { - return prepareCompletedAction; - } - - @Override - public PlatformAction getStartFlyingAction() { - return startFlyingAction; - } - - @Override - public PlatformAction getEmergencyStopAction() { - return emergencyStopAction; - } - - @Override - public PlatformAction getResumeFlyingAction() { - return resumeFlyingAction; - } - - @Override - public PlatformAction getArriveAction() { - return arriveAction; - } - - @Override - public PlatformAction getStartReturnAction() { - return startReturnAction; - } - - @Override - public PlatformAction getReturnEmergencyStopAction() { - return returnEmergencyStopAction; - } - - @Override - public PlatformAction getResumeReturnAction() { - return resumeReturnAction; - } - - @Override - public PlatformAction getReturnCompletedAction() { - return returnCompletedAction; - } - - @Override - public PlatformAction getStartPointingAction() { - return startPointingAction; - } - - @Override - public PlatformAction getPointPrepareCompletedAction() { - return pointPrepareCompletedAction; - } - - @Override - public PlatformAction getPointFlyingCompletedAction() { - return pointFlyingCompletedAction; - } - - @Override - public PlatformAction getCancelPointAction() { - return cancelPointAction; - } - - @Override - public PlatformAction getPointToFlyingAction() { - return pointToFlyingAction; - } - - @Override - public PlatformAction getPointToReturnAction() { - return pointToReturnAction; - } - - @Override - public PlatformAction getOfflineAction() { - return offlineAction; - } - - @Override - public PlatformListener getListener() { - return djiDroneListener; - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiCloseDebugModeAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiCloseDebugModeAction.java deleted file mode 100644 index e85e118..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiCloseDebugModeAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.airport; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.debug.CloseDebugModeAction; -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiCloseDebugModeAction extends CloseDebugModeAction { - - @Override - public String getName() { - return "DjiCloseDebugModeAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 关闭调试模式: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiOfflineAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiOfflineAction.java deleted file mode 100644 index 5d8f36a..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiOfflineAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.airport; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.airport.OfflineAction; -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiOfflineAction extends OfflineAction { - - @Override - public String getName() { - return "DjiOfflineAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 机巢离线: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiOnlineAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiOnlineAction.java deleted file mode 100644 index d45fbfb..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiOnlineAction.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.tuoheng.old.impl.dji.action.airport; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.airport.OnlineAction; -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiOnlineAction extends OnlineAction { - - @Override - public String getName() { - return "DjiOnlineAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 机巢上线: %s", machineId); - // DJI平台特定的上线逻辑 - // 例如:初始化DJI SDK连接、注册设备等 - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiOpenDebugModeAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiOpenDebugModeAction.java deleted file mode 100644 index cf25e01..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiOpenDebugModeAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.airport; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.debug.OpenDebugModeAction; -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiOpenDebugModeAction extends OpenDebugModeAction { - - @Override - public String getName() { - return "DjiOpenDebugModeAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 开启调试模式: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiRebootAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiRebootAction.java deleted file mode 100644 index b885341..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiRebootAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.airport; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.reboot.RebootAction; -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiRebootAction extends RebootAction { - - @Override - public String getName() { - return "DjiRebootAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 机巢重启: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiRebootCompletedAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiRebootCompletedAction.java deleted file mode 100644 index 0032cc8..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/airport/DjiRebootCompletedAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.airport; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.reboot.RebootCompletedAction; -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiRebootCompletedAction extends RebootCompletedAction { - - @Override - public String getName() { - return "DjiRebootCompletedAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 重启完成: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiCloseCoverAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiCloseCoverAction.java deleted file mode 100644 index 9840703..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiCloseCoverAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.cover; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.cover.CloseCoverAction; -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.status.CoverState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiCloseCoverAction extends CloseCoverAction { - - @Override - public String getName() { - return "DjiCloseCoverAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 开始关舱: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiCoverClosedAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiCoverClosedAction.java deleted file mode 100644 index 7fcc3b7..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiCoverClosedAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.cover; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.cover.CoverClosedAction; -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.status.CoverState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiCoverClosedAction extends CoverClosedAction { - - @Override - public String getName() { - return "DjiCoverClosedAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 舱门已关闭: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiCoverErrorAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiCoverErrorAction.java deleted file mode 100644 index b5a23db..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiCoverErrorAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.cover; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.CoverState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiCoverErrorAction implements PlatformAction { - - @Override - public String getName() { - return "DjiCoverErrorAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 舱门错误: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiCoverOpenedAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiCoverOpenedAction.java deleted file mode 100644 index e775a6e..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiCoverOpenedAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.cover; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.cover.CoverOpenedAction; -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.status.CoverState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiCoverOpenedAction extends CoverOpenedAction { - - @Override - public String getName() { - return "DjiCoverOpenedAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 舱门已打开: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiCoverResetAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiCoverResetAction.java deleted file mode 100644 index 83f3031..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiCoverResetAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.cover; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.platform.strategy.PlatformAction; -import com.tuoheng.old.status.CoverState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiCoverResetAction implements PlatformAction { - - @Override - public String getName() { - return "DjiCoverResetAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 舱门重置: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiOpenCoverAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiOpenCoverAction.java deleted file mode 100644 index 8f7765f..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/cover/DjiOpenCoverAction.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.tuoheng.old.impl.dji.action.cover; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.cover.OpenCoverAction; -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.status.CoverState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiOpenCoverAction extends OpenCoverAction { - - @Override - public String getName() { - return "DjiOpenCoverAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 开始开舱: %s", machineId); - // DJI平台特定的开舱逻辑 - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/drc/DjiEnterAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/drc/DjiEnterAction.java deleted file mode 100644 index 1b55345..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/drc/DjiEnterAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.drc; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.drc.EnterAction; -import com.tuoheng.old.events.DrcEvent; -import com.tuoheng.old.status.DrcState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiEnterAction extends EnterAction { - - @Override - public String getName() { - return "DjiEnterAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 进入DRC模式: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/drc/DjiEnteredAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/drc/DjiEnteredAction.java deleted file mode 100644 index 0dc58ff..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/drc/DjiEnteredAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.drc; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.drc.EnteredAction; -import com.tuoheng.old.events.DrcEvent; -import com.tuoheng.old.status.DrcState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiEnteredAction extends EnteredAction { - - @Override - public String getName() { - return "DjiEnteredAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 已进入DRC模式: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/drc/DjiExitAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/drc/DjiExitAction.java deleted file mode 100644 index 09ecfd7..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/drc/DjiExitAction.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.tuoheng.old.impl.dji.action.drc; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.drc.ExitAction; -import com.tuoheng.old.events.DrcEvent; -import com.tuoheng.old.status.DrcState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiExitAction extends ExitAction { - - @Override - public String getName() { - return "DjiExitAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] {} 退出DRC模式: %s 外部命令执行", machineId); - /** - * DjiExitAction 执行远程方法,远程方法执行成功则不抛出异常,否则抛出异常 - */ - - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/drc/DjiExitedAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/drc/DjiExitedAction.java deleted file mode 100644 index 61ba535..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/drc/DjiExitedAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.drc; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.drc.ExitedAction; -import com.tuoheng.old.events.DrcEvent; -import com.tuoheng.old.status.DrcState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiExitedAction extends ExitedAction { - - @Override - public String getName() { - return "DjiExitedAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 已退出DRC模式: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiArriveAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiArriveAction.java deleted file mode 100644 index cbcdf10..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiArriveAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.drone; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.drone.ArriveAction; -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.status.DroneState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiArriveAction extends ArriveAction { - - @Override - public String getName() { - return "DjiArriveAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 无人机到达目的地: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiCancelPointAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiCancelPointAction.java deleted file mode 100644 index 461344a..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiCancelPointAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.drone; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.drone.CancelPointAction; -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.status.DroneState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiCancelPointAction extends CancelPointAction { - - @Override - public String getName() { - return "DjiCancelPointAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 无人机取消指点: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiDroneOfflineAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiDroneOfflineAction.java deleted file mode 100644 index 76c9eb4..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiDroneOfflineAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.drone; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.drone.OfflineAction; -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.status.DroneState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiDroneOfflineAction extends OfflineAction { - - @Override - public String getName() { - return "DjiDroneOfflineAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 无人机离线: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiEmergencyStopAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiEmergencyStopAction.java deleted file mode 100644 index add6271..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiEmergencyStopAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.drone; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.drone.EmergencyStopAction; -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.status.DroneState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiEmergencyStopAction extends EmergencyStopAction { - - @Override - public String getName() { - return "DjiEmergencyStopAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 无人机急停: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiPointFlyingCompletedAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiPointFlyingCompletedAction.java deleted file mode 100644 index ad12e2d..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiPointFlyingCompletedAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.drone; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.drone.PointFlyingCompletedAction; -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.status.DroneState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiPointFlyingCompletedAction extends PointFlyingCompletedAction { - - @Override - public String getName() { - return "DjiPointFlyingCompletedAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 无人机指点飞行完成: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiPointPrepareCompletedAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiPointPrepareCompletedAction.java deleted file mode 100644 index 68b05f9..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiPointPrepareCompletedAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.drone; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.drone.PointPrepareCompletedAction; -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.status.DroneState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiPointPrepareCompletedAction extends PointPrepareCompletedAction { - - @Override - public String getName() { - return "DjiPointPrepareCompletedAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 无人机指点准备完成: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiPointToFlyingAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiPointToFlyingAction.java deleted file mode 100644 index fa109bb..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiPointToFlyingAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.drone; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.drone.PointToFlyingAction; -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.status.DroneState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiPointToFlyingAction extends PointToFlyingAction { - - @Override - public String getName() { - return "DjiPointToFlyingAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 无人机从指点返回飞行: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiPointToReturnAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiPointToReturnAction.java deleted file mode 100644 index c1848f1..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiPointToReturnAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.drone; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.drone.PointToReturnAction; -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.status.DroneState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiPointToReturnAction extends PointToReturnAction { - - @Override - public String getName() { - return "DjiPointToReturnAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 无人机从指点开始返航: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiPrepareCompletedAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiPrepareCompletedAction.java deleted file mode 100644 index cebfd11..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiPrepareCompletedAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.drone; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.drone.PrepareCompletedAction; -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.status.DroneState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiPrepareCompletedAction extends PrepareCompletedAction { - - @Override - public String getName() { - return "DjiPrepareCompletedAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 无人机准备完成: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiResumeFlyingAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiResumeFlyingAction.java deleted file mode 100644 index 93e4355..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiResumeFlyingAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.drone; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.drone.ResumeFlyingAction; -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.status.DroneState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiResumeFlyingAction extends ResumeFlyingAction { - - @Override - public String getName() { - return "DjiResumeFlyingAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 无人机恢复飞行: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiResumeReturnAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiResumeReturnAction.java deleted file mode 100644 index 2595039..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiResumeReturnAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.drone; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.drone.ResumeReturnAction; -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.status.DroneState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiResumeReturnAction extends ResumeReturnAction { - - @Override - public String getName() { - return "DjiResumeReturnAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 无人机恢复返航: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiReturnCompletedAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiReturnCompletedAction.java deleted file mode 100644 index c568191..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiReturnCompletedAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.drone; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.drone.ReturnCompletedAction; -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.status.DroneState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiReturnCompletedAction extends ReturnCompletedAction { - - @Override - public String getName() { - return "DjiReturnCompletedAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 无人机返航完成: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiReturnEmergencyStopAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiReturnEmergencyStopAction.java deleted file mode 100644 index 8990da3..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiReturnEmergencyStopAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.drone; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.drone.ReturnEmergencyStopAction; -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.status.DroneState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiReturnEmergencyStopAction extends ReturnEmergencyStopAction { - - @Override - public String getName() { - return "DjiReturnEmergencyStopAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 无人机返航急停: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiStartFlyingAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiStartFlyingAction.java deleted file mode 100644 index 3d51ec3..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiStartFlyingAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.drone; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.drone.StartFlyingAction; -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.status.DroneState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiStartFlyingAction extends StartFlyingAction { - - @Override - public String getName() { - return "DjiStartFlyingAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 无人机开始飞行: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiStartPointingAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiStartPointingAction.java deleted file mode 100644 index aab8211..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiStartPointingAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.drone; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.drone.StartPointingAction; -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.status.DroneState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiStartPointingAction extends StartPointingAction { - - @Override - public String getName() { - return "DjiStartPointingAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 无人机开始指点操作: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiStartPrepareAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiStartPrepareAction.java deleted file mode 100644 index 0fb36bc..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiStartPrepareAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.drone; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.drone.StartPrepareAction; -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.status.DroneState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiStartPrepareAction extends StartPrepareAction { - - @Override - public String getName() { - return "DjiStartPrepareAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 无人机开始准备: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiStartReturnAction.java b/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiStartReturnAction.java deleted file mode 100644 index f2d0be4..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/action/drone/DjiStartReturnAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.action.drone; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.action.drone.StartReturnAction; -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.status.DroneState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiStartReturnAction extends StartReturnAction { - - @Override - public String getName() { - return "DjiStartReturnAction"; - } - - @Override - public void execute(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] 无人机开始返航: %s", machineId); - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiCanCloseDebugModeGuard.java b/src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiCanCloseDebugModeGuard.java deleted file mode 100644 index ff10d51..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiCanCloseDebugModeGuard.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.guard.airport; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.guard.debug.CanCloseDebugModeGuard; -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiCanCloseDebugModeGuard extends CanCloseDebugModeGuard { - - @Override - public String getName() { - return "DjiCanCloseDebugModeGuard"; - } - - @Override - public boolean evaluate(StateContext context) { - log.info("[DJI] 检查是否可以关闭调试模式"); - return true; - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiCanOfflineGuard.java b/src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiCanOfflineGuard.java deleted file mode 100644 index bea40ac..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiCanOfflineGuard.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.guard.airport; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.guard.airport.CanOfflineGuard; -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiCanOfflineGuard extends CanOfflineGuard { - - @Override - public String getName() { - return "DjiCanOfflineGuard"; - } - - @Override - public boolean evaluate(StateContext context) { - log.info("[DJI] 检查机巢是否可以离线"); - return true; - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiCanOnlineGuard.java b/src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiCanOnlineGuard.java deleted file mode 100644 index db83eb1..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiCanOnlineGuard.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.tuoheng.old.impl.dji.guard.airport; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.guard.airport.CanOnlineGuard; -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -/** - * DJI平台 - 机巢上线Guard - */ -@Slf4j -@Component -public class DjiCanOnlineGuard extends CanOnlineGuard { - - @Override - public String getName() { - return "DjiCanOnlineGuard"; - } - - @Override - public boolean evaluate(StateContext context) { - // DJI平台特定的上线检查逻辑 - log.info("[DJI] 检查机巢是否可以上线"); - // 这里可以添加DJI平台特定的检查逻辑,例如: - // - 检查DJI设备连接状态 - // - 检查DJI固件版本 - // - 检查DJI授权状态 - return true; - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiIsDebugModeGuard.java b/src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiIsDebugModeGuard.java deleted file mode 100644 index 95b974e..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiIsDebugModeGuard.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.guard.airport; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.guard.debug.IsDebugModeGuard; -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiIsDebugModeGuard extends IsDebugModeGuard { - - @Override - public String getName() { - return "DjiIsDebugModeGuard"; - } - - @Override - public boolean evaluate(StateContext context) { - log.info("[DJI] 检查是否处于调试模式"); - return true; - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiIsNotDebugModeGuard.java b/src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiIsNotDebugModeGuard.java deleted file mode 100644 index 8315f30..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiIsNotDebugModeGuard.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.guard.airport; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.guard.debug.IsNotDebugModeGuard; -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiIsNotDebugModeGuard extends IsNotDebugModeGuard { - - @Override - public String getName() { - return "DjiIsNotDebugModeGuard"; - } - - @Override - public boolean evaluate(StateContext context) { - log.info("[DJI] 检查是否不在调试模式"); - return true; - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiIsRebootCompletedGuard.java b/src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiIsRebootCompletedGuard.java deleted file mode 100644 index 274160f..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/guard/airport/DjiIsRebootCompletedGuard.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.guard.airport; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.guard.reboot.IsRebootCompletedGuard; -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiIsRebootCompletedGuard extends IsRebootCompletedGuard { - - @Override - public String getName() { - return "DjiIsRebootCompletedGuard"; - } - - @Override - public boolean evaluate(StateContext context) { - log.info("[DJI] 检查重启是否完成"); - return true; - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/guard/cover/DjiCanCloseCoverGuard.java b/src/main/java/com/tuoheng/old/impl/dji/guard/cover/DjiCanCloseCoverGuard.java deleted file mode 100644 index 16c0792..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/guard/cover/DjiCanCloseCoverGuard.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.guard.cover; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.guard.cover.CanCloseCoverGuard; -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.status.CoverState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiCanCloseCoverGuard extends CanCloseCoverGuard { - - @Override - public String getName() { - return "DjiCanCloseCoverGuard"; - } - - @Override - public boolean evaluate(StateContext context) { - log.info("[DJI] 检查舱门是否可以关闭"); - return true; - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/guard/cover/DjiCanOpenCoverGuard.java b/src/main/java/com/tuoheng/old/impl/dji/guard/cover/DjiCanOpenCoverGuard.java deleted file mode 100644 index 7646635..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/guard/cover/DjiCanOpenCoverGuard.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.guard.cover; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.guard.cover.CanOpenCoverGuard; -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.status.CoverState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiCanOpenCoverGuard extends CanOpenCoverGuard { - - @Override - public String getName() { - return "DjiCanOpenCoverGuard"; - } - - @Override - public boolean evaluate(StateContext context) { - log.info("[DJI] 检查舱门是否可以打开"); - return true; - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/guard/cover/DjiIsCoverClosedGuard.java b/src/main/java/com/tuoheng/old/impl/dji/guard/cover/DjiIsCoverClosedGuard.java deleted file mode 100644 index ec0060d..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/guard/cover/DjiIsCoverClosedGuard.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.guard.cover; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.guard.cover.IsCoverClosedGuard; -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.status.CoverState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiIsCoverClosedGuard extends IsCoverClosedGuard { - - @Override - public String getName() { - return "DjiIsCoverClosedGuard"; - } - - @Override - public boolean evaluate(StateContext context) { - log.info("[DJI] 检查舱门是否已关闭"); - return true; - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/guard/cover/DjiIsCoverOpenedGuard.java b/src/main/java/com/tuoheng/old/impl/dji/guard/cover/DjiIsCoverOpenedGuard.java deleted file mode 100644 index 2f479f8..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/guard/cover/DjiIsCoverOpenedGuard.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tuoheng.old.impl.dji.guard.cover; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.guard.cover.IsCoverOpenedGuard; -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.status.CoverState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DjiIsCoverOpenedGuard extends IsCoverOpenedGuard { - - @Override - public String getName() { - return "DjiIsCoverOpenedGuard"; - } - - @Override - public boolean evaluate(StateContext context) { - log.info("[DJI] 检查舱门是否已打开"); - return true; - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/guard/drc/DjiCanEnterGuard.java b/src/main/java/com/tuoheng/old/impl/dji/guard/drc/DjiCanEnterGuard.java deleted file mode 100644 index 74a0793..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/guard/drc/DjiCanEnterGuard.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.tuoheng.old.impl.dji.guard.drc; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.events.DrcEvent; -import com.tuoheng.old.guard.drc.CanEnterGuard; -import com.tuoheng.old.status.DrcState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -/** - * DJI平台:检查是否可以进入DRC模式 - */ -@Slf4j -@Component -public class DjiCanEnterGuard extends CanEnterGuard { - - @Override - public String getName() { - return "DjiCanEnterGuard"; - } - - @Override - public boolean evaluate(StateContext context) { - // DJI平台特定的进入DRC模式检查逻辑 - return true; - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/guard/drc/DjiCanExitGuard.java b/src/main/java/com/tuoheng/old/impl/dji/guard/drc/DjiCanExitGuard.java deleted file mode 100644 index 33c5963..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/guard/drc/DjiCanExitGuard.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.tuoheng.old.impl.dji.guard.drc; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.events.DrcEvent; -import com.tuoheng.old.guard.drc.CanExitGuard; -import com.tuoheng.old.status.DrcState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -/** - * DJI平台:检查是否可以退出DRC模式 - */ -@Slf4j -@Component -public class DjiCanExitGuard extends CanExitGuard { - - @Override - public String getName() { - return "DjiCanExitGuard"; - } - - @Override - public boolean evaluate(StateContext context) { - String machineId = (String) context.getExtendedState().getVariables().get("machineId"); - log.info("[DJI] {} 退出DRC模式: %s 判断是否具备执行条件", machineId); - //具备执行添加返回true,不具备执行条件返回false - return true; - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/guard/drone/DjiCanPointGuard.java b/src/main/java/com/tuoheng/old/impl/dji/guard/drone/DjiCanPointGuard.java deleted file mode 100644 index 81de2b9..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/guard/drone/DjiCanPointGuard.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.tuoheng.old.impl.dji.guard.drone; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.guard.drone.CanPointGuard; -import com.tuoheng.old.status.DroneState; -import org.springframework.statemachine.StateContext; -import org.springframework.stereotype.Component; - -/** - * DJI平台:检查无人机是否可以进行指点操作 - * 注意:返航中不可以指点 - */ -@Slf4j -@Component -public class DjiCanPointGuard extends CanPointGuard { - - @Override - public String getName() { - return "DjiCanPointGuard"; - } - - @Override - public boolean evaluate(StateContext context) { - DroneState currentState = context.getStateMachine().getState().getId(); - - // 返航中不能指点 - if (currentState == DroneState.RETURNING) { - log.info("[DJI] 返航中不能进行指点操作"); - return false; - } - - return true; - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/listener/DjiAirportListener.java b/src/main/java/com/tuoheng/old/impl/dji/listener/DjiAirportListener.java deleted file mode 100644 index 8bb0b42..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/listener/DjiAirportListener.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tuoheng.old.impl.dji.listener; - -import com.tuoheng.old.listener.DefaultAirportListener; -import org.springframework.stereotype.Component; - -@Component -public class DjiAirportListener extends DefaultAirportListener { - - public String getName() { - return "DjiAirportListener"; - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/listener/DjiCoverListener.java b/src/main/java/com/tuoheng/old/impl/dji/listener/DjiCoverListener.java deleted file mode 100644 index 219bd41..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/listener/DjiCoverListener.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.tuoheng.old.impl.dji.listener; - -import com.tuoheng.old.listener.DefaultCoverListener; -import org.springframework.stereotype.Component; - -@Component -public class DjiCoverListener extends DefaultCoverListener { - - @Override - public String getName(){ - return "DjiCoverListener"; - } - - -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/listener/DjiDrcListener.java b/src/main/java/com/tuoheng/old/impl/dji/listener/DjiDrcListener.java deleted file mode 100644 index a9bbf4d..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/listener/DjiDrcListener.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.tuoheng.old.impl.dji.listener; - -import com.tuoheng.old.events.DrcEvent; -import com.tuoheng.old.listener.DefaultDrcListener; -import com.tuoheng.old.service.DrcMachineService; -import com.tuoheng.old.status.DrcState; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Lazy; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.StateMachine; -import org.springframework.statemachine.state.State; -import org.springframework.statemachine.transition.Transition; -import org.springframework.stereotype.Component; - -/** - * DJI平台DRC状态监听器 - */ -@Component -@Slf4j -public class DjiDrcListener extends DefaultDrcListener { - - - @Autowired - @Lazy - DrcMachineService drcMachineService; - - @Override - public String getName() { - return "DJI-DRC"; - } - - @Override - public void stateEntered(State state) { - log.debug("[{}] 大疆进入状态: {}", getName(), state.getId()); - - } - - public void transitionEnded(Transition transition) { - if (transition.getSource() != null && transition.getTarget() != null) { - log.debug("[{}] 转换结束: {} -> {}", - getName(), transition.getSource().getId(), transition.getTarget().getId()); - } - // 获取状态机 - } - - @Override - public void stateContext(StateContext stateContext) { - // 默认不处理 - // 只处理状态进入阶段 - if (stateContext.getStage() == StateContext.Stage.STATE_ENTRY) { - DrcState currentState = stateContext.getTarget() != null ? - stateContext.getTarget().getId() : null; - // 当进入 EXITING 状态时,自动发送 EXITED 事件 - if (currentState == DrcState.EXITING) { - StateMachine stateMachine = stateContext.getStateMachine(); - String machineId = (String) stateMachine.getExtendedState() - .getVariables().get("machineId"); - - log.info("[{}] 进入 EXITING 状态,准备自动转换到 EXITED, 机巢ID: {}", - getName(), machineId); - /** - * 这个地方可以直接调用 drcMachineService 转换状态 - */ - drcMachineService.sendEvent(machineId, DrcEvent.EXITED); - } - } - } -} diff --git a/src/main/java/com/tuoheng/old/impl/dji/listener/DjiDroneListener.java b/src/main/java/com/tuoheng/old/impl/dji/listener/DjiDroneListener.java deleted file mode 100644 index 5d4349e..0000000 --- a/src/main/java/com/tuoheng/old/impl/dji/listener/DjiDroneListener.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.tuoheng.old.impl.dji.listener; - -import com.tuoheng.old.listener.DefaultDroneListener; -import org.springframework.stereotype.Component; - -/** - * DJI平台无人机状态监听器 - */ -@Component -public class DjiDroneListener extends DefaultDroneListener { - - @Override - public String getName() { - return "DJI-Drone"; - } -} diff --git a/src/main/java/com/tuoheng/old/listener/DefaultAirportListener.java b/src/main/java/com/tuoheng/old/listener/DefaultAirportListener.java deleted file mode 100644 index fc2a973..0000000 --- a/src/main/java/com/tuoheng/old/listener/DefaultAirportListener.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.tuoheng.old.listener; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.platform.strategy.PlatformListener; -import com.tuoheng.old.status.AirportState; -import org.springframework.messaging.Message; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.StateMachine; -import org.springframework.statemachine.state.State; -import org.springframework.statemachine.transition.Transition; - -/** - * 默认机巢状态监听器 - * 提供基础的状态变化监听功能,各平台可以继承并定制 - */ - -@Slf4j -public abstract class DefaultAirportListener implements PlatformListener { - - - @Override - public void stateChanged(State from, State to) { - if (from != null && to != null) { - log.debug("[{}] 状态变化: {} -> {}", getName(), from.getId(), to.getId()); - } - } - - @Override - public void stateEntered(State state) { - log.debug("[{}] 进入状态: {}", getName(), state.getId()); - } - - @Override - public void stateExited(State state) { - log.debug("[{}] 退出状态: {}", getName(), state.getId()); - } - - @Override - public void eventNotAccepted(Message event) { - log.warn("[{}] 事件未被接受: {}", getName(), event.getPayload()); - } - - @Override - public void transition(Transition transition) { - // 默认不处理 - } - - @Override - public void transitionStarted(Transition transition) { - if (transition.getSource() != null && transition.getTarget() != null) { - log.debug("[{}] 转换开始: {} -> {}", - getName(), transition.getSource().getId(), transition.getTarget().getId()); - } - } - - @Override - public void transitionEnded(Transition transition) { - if (transition.getSource() != null && transition.getTarget() != null) { - log.debug("[{}] 转换结束: {} -> {}", - getName(), transition.getSource().getId(), transition.getTarget().getId()); - } - } - - @Override - public void stateMachineStarted(StateMachine stateMachine) { - String machineId = (String) stateMachine.getExtendedState().getVariables().get("machineId"); - log.info("[{}] 状态机启动: {}", getName(), machineId); - } - - @Override - public void stateMachineStopped(StateMachine stateMachine) { - String machineId = (String) stateMachine.getExtendedState().getVariables().get("machineId"); - log.info("[{}] 状态机停止: {}", getName(), machineId); - } - - @Override - public void stateMachineError(StateMachine stateMachine, Exception exception) { - String machineId = (String) stateMachine.getExtendedState().getVariables().get("machineId"); - log.error("[{}] 状态机错误: {}, 异常信息: {}", - getName(), machineId, exception.getMessage()); - } - - @Override - public void extendedStateChanged(Object key, Object value) { - log.info("[{}] 扩展状态变化: {} = {}", getName(), key, value); - } - - @Override - public void stateContext(StateContext stateContext) { - // 默认不处理 - } -} diff --git a/src/main/java/com/tuoheng/old/listener/DefaultCoverListener.java b/src/main/java/com/tuoheng/old/listener/DefaultCoverListener.java deleted file mode 100644 index 99c0f6d..0000000 --- a/src/main/java/com/tuoheng/old/listener/DefaultCoverListener.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.tuoheng.old.listener; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.platform.strategy.PlatformListener; -import com.tuoheng.old.status.CoverState; -import org.springframework.messaging.Message; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.StateMachine; -import org.springframework.statemachine.state.State; -import org.springframework.statemachine.transition.Transition; - -/** - * 默认舱门状态监听器 - * 提供基础的状态变化监听功能,各平台可以继承并定制 - */ -@Slf4j -public abstract class DefaultCoverListener implements PlatformListener { - - @Override - public void stateChanged(State from, State to) { - if (from != null && to != null) { - log.debug("[{}] 状态变化: {} -> {}", getName(), from.getId(), to.getId()); - } - } - - @Override - public void stateEntered(State state) { - log.debug("[{}] 进入状态: {}", getName(), state.getId()); - } - - @Override - public void stateExited(State state) { - log.debug("[{}] 退出状态: {}", getName(), state.getId()); - } - - @Override - public void eventNotAccepted(Message event) { - log.warn("[{}] 事件未被接受: {}", getName(), event.getPayload()); - } - - @Override - public void transition(Transition transition) { - // 默认不处理 - } - - @Override - public void transitionStarted(Transition transition) { - if (transition.getSource() != null && transition.getTarget() != null) { - log.debug("[{}] 转换开始: {} -> {}", - getName(), transition.getSource().getId(), transition.getTarget().getId()); - } - } - - @Override - public void transitionEnded(Transition transition) { - if (transition.getSource() != null && transition.getTarget() != null) { - log.debug("[{}] 转换结束: {} -> {}", - getName(), transition.getSource().getId(), transition.getTarget().getId()); - } - } - - @Override - public void stateMachineStarted(StateMachine stateMachine) { - String machineId = (String) stateMachine.getExtendedState().getVariables().get("machineId"); - log.info("[{}] 状态机启动: {}", getName(), machineId); - } - - @Override - public void stateMachineStopped(StateMachine stateMachine) { - String machineId = (String) stateMachine.getExtendedState().getVariables().get("machineId"); - log.info("[{}] 状态机停止: {}", getName(), machineId); - } - - @Override - public void stateMachineError(StateMachine stateMachine, Exception exception) { - String machineId = (String) stateMachine.getExtendedState().getVariables().get("machineId"); - log.error("[{}] 状态机错误: {}, 异常信息: {}", - getName(), machineId, exception.getMessage()); - } - - @Override - public void extendedStateChanged(Object key, Object value) { - log.info("[{}] 扩展状态变化: {} = {}", getName(), key, value); - } - - @Override - public void stateContext(StateContext stateContext) { - // 默认不处理 - } -} diff --git a/src/main/java/com/tuoheng/old/listener/DefaultDrcListener.java b/src/main/java/com/tuoheng/old/listener/DefaultDrcListener.java deleted file mode 100644 index 2535c2a..0000000 --- a/src/main/java/com/tuoheng/old/listener/DefaultDrcListener.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.tuoheng.old.listener; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.events.DrcEvent; -import com.tuoheng.old.platform.strategy.PlatformListener; -import com.tuoheng.old.status.DrcState; -import org.springframework.messaging.Message; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.StateMachine; -import org.springframework.statemachine.state.State; -import org.springframework.statemachine.transition.Transition; - -/** - * 默认DRC状态监听器 - * 提供基础的状态变化监听功能,各平台可以继承并定制 - */ -@Slf4j -public abstract class DefaultDrcListener implements PlatformListener { - - - @Override - public void stateChanged(State from, State to) { - if (from != null && to != null) { - log.debug("[{}] 状态变化: {} -> {}", getName(), from.getId(), to.getId()); - } - } - - @Override - public void stateEntered(State state) { - log.debug("[{}] 进入状态: {}", getName(), state.getId()); - - } - - @Override - public void stateExited(State state) { - log.debug("[{}] 退出状态: {}", getName(), state.getId()); - } - - @Override - public void eventNotAccepted(Message event) { - log.warn("[{}] 事件未被接受: {}", getName(), event.getPayload()); - } - - @Override - public void transition(Transition transition) { - // 默认不处理 - } - - @Override - public void transitionStarted(Transition transition) { - if (transition.getSource() != null && transition.getTarget() != null) { - log.debug("[{}] 转换开始: {} -> {}", - getName(), transition.getSource().getId(), transition.getTarget().getId()); - } - } - - @Override - public void transitionEnded(Transition transition) { - if (transition.getSource() != null && transition.getTarget() != null) { - log.debug("[{}] 转换结束: {} -> {}", - getName(), transition.getSource().getId(), transition.getTarget().getId()); - } - } - - @Override - public void stateMachineStarted(StateMachine stateMachine) { - String machineId = (String) stateMachine.getExtendedState().getVariables().get("machineId"); - log.info("[{}] 状态机启动: {}", getName(), machineId); - } - - @Override - public void stateMachineStopped(StateMachine stateMachine) { - String machineId = (String) stateMachine.getExtendedState().getVariables().get("machineId"); - log.info("[{}] 状态机停止: {}", getName(), machineId); - } - - @Override - public void stateMachineError(StateMachine stateMachine, Exception exception) { - String machineId = (String) stateMachine.getExtendedState().getVariables().get("machineId"); - log.error("[{}] 状态机错误: {}, 异常信息: {}", - getName(), machineId, exception.getMessage()); - } - - @Override - public void extendedStateChanged(Object key, Object value) { - log.info("[{}] 扩展状态变化: {} = {}", getName(), key, value); - } - - @Override - public void stateContext(StateContext stateContext) { - // 默认不处理 - - } -} diff --git a/src/main/java/com/tuoheng/old/listener/DefaultDroneListener.java b/src/main/java/com/tuoheng/old/listener/DefaultDroneListener.java deleted file mode 100644 index 49d5617..0000000 --- a/src/main/java/com/tuoheng/old/listener/DefaultDroneListener.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.tuoheng.old.listener; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.platform.strategy.PlatformListener; -import com.tuoheng.old.status.DroneState; -import org.springframework.messaging.Message; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.StateMachine; -import org.springframework.statemachine.state.State; -import org.springframework.statemachine.transition.Transition; - -/** - * 默认无人机状态监听器 - * 提供基础的状态变化监听功能,各平台可以继承并定制 - */ -@Slf4j -public abstract class DefaultDroneListener implements PlatformListener { - - @Override - public void stateChanged(State from, State to) { - if (from != null && to != null) { - log.debug("[{}] 状态变化: {} -> {}", getName(), from.getId(), to.getId()); - } - } - - @Override - public void stateEntered(State state) { - log.debug("[{}] 进入状态: {}", getName(), state.getId()); - } - - @Override - public void stateExited(State state) { - log.debug("[{}] 退出状态: {}", getName(), state.getId()); - } - - @Override - public void eventNotAccepted(Message event) { - log.warn("[{}] 事件未被接受: {}", getName(), event.getPayload()); - } - - @Override - public void transition(Transition transition) { - // 默认不处理 - } - - @Override - public void transitionStarted(Transition transition) { - if (transition.getSource() != null && transition.getTarget() != null) { - log.debug("[{}] 转换开始: {} -> {}", - getName(), transition.getSource().getId(), transition.getTarget().getId()); - } - } - - @Override - public void transitionEnded(Transition transition) { - if (transition.getSource() != null && transition.getTarget() != null) { - log.debug("[{}] 转换结束: {} -> {}", - getName(), transition.getSource().getId(), transition.getTarget().getId()); - } - } - - @Override - public void stateMachineStarted(StateMachine stateMachine) { - String machineId = (String) stateMachine.getExtendedState().getVariables().get("machineId"); - log.info("[{}] 状态机启动: {}", getName(), machineId); - } - - @Override - public void stateMachineStopped(StateMachine stateMachine) { - String machineId = (String) stateMachine.getExtendedState().getVariables().get("machineId"); - log.info("[{}] 状态机停止: {}", getName(), machineId); - } - - @Override - public void stateMachineError(StateMachine stateMachine, Exception exception) { - String machineId = (String) stateMachine.getExtendedState().getVariables().get("machineId"); - log.error("[{}] 状态机错误: {}, 异常信息: {}", - getName(), machineId, exception.getMessage()); - } - - @Override - public void extendedStateChanged(Object key, Object value) { - log.info("[{}] 扩展状态变化: {} = {}", getName(), key, value); - } - - @Override - public void stateContext(StateContext stateContext) { - // 默认不处理 - } -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/manager/AbsSystemManager.java b/src/main/java/com/tuoheng/old/manager/AbsSystemManager.java deleted file mode 100644 index b672c3c..0000000 --- a/src/main/java/com/tuoheng/old/manager/AbsSystemManager.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.tuoheng.old.manager; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.events.DrcEvent; -import com.tuoheng.old.platform.PlatformType; -import com.tuoheng.old.service.AirportMachineService; -import com.tuoheng.old.service.CoverMachineService; -import com.tuoheng.old.service.DroneMachineService; -import com.tuoheng.old.service.DrcMachineService; -import com.tuoheng.old.status.AirportState; -import com.tuoheng.old.status.CoverState; -import com.tuoheng.old.status.DroneState; -import com.tuoheng.old.status.DrcState; -import org.springframework.beans.factory.annotation.Autowired; - -/** - * 机巢系统管理器抽象类 - * 提供通用的业务编排能力,具体实现可按需扩展 - */ -@Slf4j -public abstract class AbsSystemManager implements ISystemManager { - - /** - * 子类需要声明自己支持的平台类型 - */ - @Override - public abstract PlatformType getPlatformType(); - - @Autowired - protected AirportMachineService airportService; - - @Autowired - protected CoverMachineService coverService; - - @Autowired - protected DroneMachineService droneService; - - @Autowired - protected DrcMachineService drcService; - - - public boolean sendEvent(String airportSn, AirportEvent event) { - return airportService.sendEvent(airportSn, event); - } - - public boolean sendEvent(String airportSn, CoverEvent event) { - return coverService.sendEvent(airportSn, event); - } - - public boolean sendEvent(String droneSn, DroneEvent event) { - return droneService.sendEvent(droneSn, event); - } - - public boolean sendEvent(String airportSn, DrcEvent event) { - return drcService.sendEvent(airportSn, event); - } - - /** - * 同步机巢状态 - * 仅在当前状态为 UNKNOWN 时才同步到目标状态 - * - * @param airportSn 机巢序列号 - * @param targetState 目标状态 - * @return 是否同步成功 - */ - public boolean syncAirportState(String airportSn, AirportState targetState) { - AirportState currentState = airportService.getCurrentState(airportSn); - - if (currentState == null) { - log.error("同步机巢状态失败 - 机巢: {}, 状态机不存在", airportSn); - return false; - } - - if (currentState != AirportState.UNKNOWN) { - log.debug("同步机巢状态跳过 - 机巢: {}, 当前状态: {} (非UNKNOWN状态,无需同步)", - airportSn, currentState); - return false; - } - - // 根据目标状态发送相应的事件 - AirportEvent event = getAirportEventForState(targetState); - if (event == null) { - log.error("同步机巢状态失败 - 机巢: {}, 无法为目标状态 {} 找到对应事件", - airportSn, targetState); - return false; - } - - boolean result = airportService.sendEvent(airportSn, event); - if (result) { - log.info("同步机巢状态成功 - 机巢: {}, 从 UNKNOWN 同步到 {}", - airportSn, targetState); - } - return result; - } - - /** - * 同步舱门状态 - * 仅在当前状态为 UNKNOWN 时才同步到目标状态 - * - * @param airportSn 机巢序列号 - * @param targetState 目标状态 - * @return 是否同步成功 - */ - public boolean syncCoverState(String airportSn, CoverState targetState) { - CoverState currentState = coverService.getCurrentState(airportSn); - - if (currentState == null) { - log.error("同步舱门状态失败 - 机巢: {}, 状态机不存在", airportSn); - return false; - } - - if (currentState != CoverState.UNKNOWN) { - log.debug("同步舱门状态跳过 - 机巢: {}, 当前状态: {} (非UNKNOWN状态,无需同步)", - airportSn, currentState); - return false; - } - - // 根据目标状态发送相应的事件 - CoverEvent event = getCoverEventForState(targetState); - if (event == null) { - log.error("同步舱门状态失败 - 机巢: {}, 无法为目标状态 {} 找到对应事件", - airportSn, targetState); - return false; - } - - boolean result = coverService.sendEvent(airportSn, event); - if (result) { - log.info("同步舱门状态成功 - 机巢: {}, 从 UNKNOWN 同步到 {}", - airportSn, targetState); - } - return result; - } - - /** - * 根据目标状态获取对应的机巢事件 - * 子类可以重写此方法以提供自定义的状态到事件的映射 - * - * @param targetState 目标状态 - * @return 对应的事件,如果没有对应事件则返回null - */ - protected AirportEvent getAirportEventForState(AirportState targetState) { - switch (targetState) { - case ONLINE: - case STANDBY: - return AirportEvent.AIRPORT_ONLINE; - case OFFLINE: - return AirportEvent.AIRPORT_OFFLINE; - case ENTERING_DEBUG_MODE: - return AirportEvent.DEBUG_MODE_OPEN; - case DEBUG_MODE: - return AirportEvent.DEBUG_MODE_ENTERED; - case EXITING_DEBUG_MODE: - return AirportEvent.DEBUG_MODE_CLOSE; - case REBOOTING: - return AirportEvent.AIRPORT_REBOOT; - default: - return null; - } - } - - /** - * 根据目标状态获取对应的舱门事件 - * 子类可以重写此方法以提供自定义的状态到事件的映射 - * - * @param targetState 目标状态 - * @return 对应的事件,如果没有对应事件则返回null - */ - protected CoverEvent getCoverEventForState(CoverState targetState) { - switch (targetState) { - case CLOSED: - return CoverEvent.CLOSED; - case OPENED: - return CoverEvent.OPENED; - case OPENING: - return CoverEvent.OPEN; - case CLOSING: - return CoverEvent.CLOSE; - case ERROR: - return CoverEvent.ERROR; - default: - return null; - } - } - - /** - * 同步无人机状态 - * 仅在当前状态为 UNKNOWN 时才同步到目标状态 - * - * @param droneSn 无人机序列号 - * @param targetState 目标状态 - * @return 是否同步成功 - */ - public boolean syncDroneState(String droneSn, DroneState targetState) { - DroneState currentState = droneService.getCurrentState(droneSn); - - if (currentState == null) { - log.error("同步无人机状态失败 - 无人机: {}, 状态机不存在", droneSn); - return false; - } - - if (currentState != DroneState.UNKNOWN) { - log.debug("同步无人机状态跳过 - 无人机: {}, 当前状态: {} (非UNKNOWN状态,无需同步)", - droneSn, currentState); - return false; - } - - // 根据目标状态发送相应的事件 - DroneEvent event = getDroneEventForState(targetState); - if (event == null) { - log.error("同步无人机状态失败 - 无人机: {}, 无法为目标状态 {} 找到对应事件", - droneSn, targetState); - return false; - } - - boolean result = droneService.sendEvent(droneSn, event); - if (result) { - log.info("同步无人机状态成功 - 无人机: {}, 从 UNKNOWN 同步到 {}", - droneSn, targetState); - } - return result; - } - - /** - * 同步DRC状态 - * 仅在当前状态为 UNKNOWN 时才同步到目标状态 - * - * @param airportSn 机巢序列号 - * @param targetState 目标状态 - * @return 是否同步成功 - */ - public boolean syncDrcState(String airportSn, DrcState targetState) { - DrcState currentState = drcService.getCurrentState(airportSn); - - if (currentState == null) { - log.error("同步DRC状态失败 - 机巢: {}, 状态机不存在", airportSn); - return false; - } - - if (currentState != DrcState.UNKNOWN) { - log.debug("同步DRC状态跳过 - 机巢: {}, 当前状态: {} (非UNKNOWN状态,无需同步)", - airportSn, currentState); - return false; - } - - // 根据目标状态发送相应的事件 - DrcEvent event = getDrcEventForState(targetState); - if (event == null) { - log.error("同步DRC状态失败 - 机巢: {}, 无法为目标状态 {} 找到对应事件", - airportSn, targetState); - return false; - } - - boolean result = drcService.sendEvent(airportSn, event); - if (result) { - log.info("同步DRC状态成功 - 机巢: {}, 从 UNKNOWN 同步到 {}", - airportSn, targetState); - } - return result; - } - - /** - * 根据目标状态获取对应的无人机事件 - * 子类可以重写此方法以提供自定义的状态到事件的映射 - * - * @param targetState 目标状态 - * @return 对应的事件,如果没有对应事件则返回null - */ - protected DroneEvent getDroneEventForState(DroneState targetState) { - switch (targetState) { - case OFFLINE: - return DroneEvent.DRONE_OFFLINE; - case PREPARING: - return DroneEvent.START_PREPARE; - case FLYING_PARENT: - case FLYING: - return DroneEvent.START_FLYING; - case EMERGENCY_STOP: - return DroneEvent.EMERGENCY_STOP; - case ARRIVED: - return DroneEvent.ARRIVE; - case RETURNING_PARENT: - case RETURNING: - return DroneEvent.START_RETURN; - case RETURN_EMERGENCY_STOP: - return DroneEvent.RETURN_EMERGENCY_STOP; - case RETURN_COMPLETED: - return DroneEvent.RETURN_COMPLETED; - case POINTING_PARENT: - case POINT_PREPARING: - return DroneEvent.START_POINTING; - case POINT_FLYING: - return DroneEvent.POINT_PREPARE_COMPLETED; - case POINT_COMPLETED: - return DroneEvent.POINT_FLYING_COMPLETED; - case POINT_CANCELLED: - return DroneEvent.CANCEL_POINT; - default: - return null; - } - } - - /** - * 根据目标状态获取对应的DRC事件 - * 子类可以重写此方法以提供自定义的状态到事件的映射 - * - * @param targetState 目标状态 - * @return 对应的事件,如果没有对应事件则返回null - */ - protected DrcEvent getDrcEventForState(DrcState targetState) { - switch (targetState) { - case EXITED: - return DrcEvent.EXITED; - case ENTERING: - return DrcEvent.ENTERING; - case ENTERED: - return DrcEvent.ENTERED; - case EXITING: - return DrcEvent.EXITING; - default: - return null; - } - } -} - diff --git a/src/main/java/com/tuoheng/old/manager/ISystemManager.java b/src/main/java/com/tuoheng/old/manager/ISystemManager.java deleted file mode 100644 index 78d5cc6..0000000 --- a/src/main/java/com/tuoheng/old/manager/ISystemManager.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.tuoheng.old.manager; - -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.events.DrcEvent; -import com.tuoheng.old.platform.PlatformType; -import com.tuoheng.old.status.AirportState; -import com.tuoheng.old.status.CoverState; -import com.tuoheng.old.status.DroneState; -import com.tuoheng.old.status.DrcState; - -/** - * 机巢系统管理器接口 - * 抽象对外能力,便于后续扩展不同实现 - */ -public interface ISystemManager { - - /** - * 该Manager对应的平台类型 - */ - PlatformType getPlatformType(); - - public boolean sendEvent(String airportSn, AirportEvent event); - - public boolean sendEvent(String airportSn, CoverEvent event); - - public boolean sendEvent(String droneSn, DroneEvent event); - - public boolean sendEvent(String airportSn, DrcEvent event); - - public boolean syncAirportState(String airportSn, AirportState targetState); - - public boolean syncCoverState(String airportSn, CoverState targetState); - - public boolean syncDroneState(String droneSn, DroneState targetState); - - public boolean syncDrcState(String airportSn, DrcState targetState); - /** - * 有心跳的时候调用 - * @param airportSn - * @return - */ - boolean airportOnline(String airportSn); - - boolean airportOffline(String airportSn); - - boolean openDebugMode(String airportSn); - - boolean closeDebugMode(String airportSn); - - boolean openCover(String airportSn); - - boolean coverOpened(String airportSn); - - boolean closeCover(String airportSn); - - boolean coverClosed(String airportSn); - - boolean rebootAirport(String airportSn); - - boolean rebootCompleted(String airportSn); - - AirportState getAirportState(String airportSn); - - CoverState getCoverState(String airportSn); - - String getFullStatus(String airportSn); -} diff --git a/src/main/java/com/tuoheng/old/manager/factory/AirportSystemManagerFactory.java b/src/main/java/com/tuoheng/old/manager/factory/AirportSystemManagerFactory.java deleted file mode 100644 index 656bc87..0000000 --- a/src/main/java/com/tuoheng/old/manager/factory/AirportSystemManagerFactory.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.tuoheng.old.manager.factory; - -import com.tuoheng.old.manager.ISystemManager; -import com.tuoheng.old.platform.PlatformType; -import com.tuoheng.old.repository.MachinePlatTypeRepository; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * 机巢系统管理器工厂 - * 根据机巢SN从数据库查询平台类型,返回对应的系统管理器 - */ -@Slf4j -@Component -public class AirportSystemManagerFactory { - - @Autowired - private MachinePlatTypeRepository machinePlatTypeRepository; - - /** - * 存储所有平台的系统管理器实现 - * Key: PlatformType - * Value: AirportSystemManager实现 - */ - private final Map managerMap = new ConcurrentHashMap<>(); - - /** - * 注册所有系统管理器 - * Spring会自动注入所有实现了AirportSystemManager的Bean - */ - @Autowired - public void registerManagers(List managers) { - for (ISystemManager manager : managers) { - managerMap.put(manager.getPlatformType(), manager); - log.info("注册系统管理器: {} -> {}", - manager.getPlatformType().getName(), manager.getClass().getSimpleName()); - } - } - - /** - * 根据机巢SN获取对应的系统管理器 - * - * @param airportSn 机巢序列号 - * @return 对应平台的AirportSystemManager实现 - * @throws IllegalArgumentException 如果机巢未注册或系统管理器不存在 - */ - public ISystemManager getManager(String airportSn) { - PlatformType platformType = machinePlatTypeRepository.getPlatformType(airportSn); - - if (platformType == null) { - throw new IllegalArgumentException( - String.format("机巢未注册或平台类型未配置: %s", airportSn)); - } - - ISystemManager manager = managerMap.get(platformType); - - if (manager == null) { - throw new IllegalArgumentException( - String.format("未找到平台系统管理器: %s (机巢: %s)", platformType.getName(), airportSn)); - } - - return manager; - } - - /** - * 根据平台类型获取系统管理器 - * - * @param platformType 平台类型 - * @return 对应平台的AirportSystemManager实现 - */ - public ISystemManager getManagerByType(PlatformType platformType) { - return managerMap.get(platformType); - } -} diff --git a/src/main/java/com/tuoheng/old/platform/PlatformType.java b/src/main/java/com/tuoheng/old/platform/PlatformType.java deleted file mode 100644 index 660b66e..0000000 --- a/src/main/java/com/tuoheng/old/platform/PlatformType.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.tuoheng.old.platform; - -/** - * 无人机平台类型枚举 - */ -public enum PlatformType { - /** - * 大疆平台 - */ - DJI("DJI", "大疆"), - - /** - * 道通平台 - */ - AUTEL("AUTEL", "道通"), - - /** - * 昊翔平台 - */ - YUNEEC("YUNEEC", "昊翔"); - - private final String code; - private final String name; - - PlatformType(String code, String name) { - this.code = code; - this.name = name; - } - - public String getCode() { - return code; - } - - public String getName() { - return name; - } - - /** - * 根据code获取平台类型 - */ - public static PlatformType fromCode(String code) { - for (PlatformType type : values()) { - if (type.code.equalsIgnoreCase(code)) { - return type; - } - } - throw new IllegalArgumentException("Unknown platform code: " + code); - } -} diff --git a/src/main/java/com/tuoheng/old/platform/factory/PlatformStrategyFactory.java b/src/main/java/com/tuoheng/old/platform/factory/PlatformStrategyFactory.java deleted file mode 100644 index 505c2a7..0000000 --- a/src/main/java/com/tuoheng/old/platform/factory/PlatformStrategyFactory.java +++ /dev/null @@ -1,250 +0,0 @@ -package com.tuoheng.old.platform.factory; - -import com.tuoheng.old.platform.PlatformType; -import com.tuoheng.old.repository.MachinePlatTypeRepository; -import com.tuoheng.old.platform.strategy.AirportPlatformStrategy; -import com.tuoheng.old.platform.strategy.CoverPlatformStrategy; -import com.tuoheng.old.platform.strategy.DronePlatformStrategy; -import com.tuoheng.old.platform.strategy.DrcPlatformStrategy; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * 平台策略工厂 - * 根据机巢/无人机SN从数据库查询平台类型,返回对应的平台策略 - */ -@Slf4j -@Component -public class PlatformStrategyFactory { - - @Autowired - private MachinePlatTypeRepository machinePlatTypeRepository; - - /** - * 存储所有机巢平台策略实现 - * Key: PlatformType - * Value: AirportPlatformStrategy实现 - */ - private final Map airportStrategyMap = new ConcurrentHashMap<>(); - - /** - * 存储所有舱门平台策略实现 - * Key: PlatformType - * Value: CoverPlatformStrategy实现 - */ - private final Map coverStrategyMap = new ConcurrentHashMap<>(); - - /** - * 存储所有无人机平台策略实现 - * Key: PlatformType - * Value: DronePlatformStrategy实现 - */ - private final Map droneStrategyMap = new ConcurrentHashMap<>(); - - /** - * 存储所有DRC平台策略实现 - * Key: PlatformType - * Value: DrcPlatformStrategy实现 - */ - private final Map drcStrategyMap = new ConcurrentHashMap<>(); - - /** - * 注册所有平台策略 - * Spring会自动注入所有实现了AirportPlatformStrategy、CoverPlatformStrategy、DronePlatformStrategy和DrcPlatformStrategy的Bean - */ - @Autowired - public void registerStrategies( - List airportStrategies, - List coverStrategies, - List droneStrategies, - List drcStrategies) { - - // 注册机巢策略 - for (AirportPlatformStrategy strategy : airportStrategies) { - airportStrategyMap.put(strategy.getPlatformType(), strategy); - log.info("注册机巢平台策略: {} -> {}", - strategy.getPlatformType().getName(), strategy.getClass().getSimpleName()); - } - - // 注册舱门策略 - for (CoverPlatformStrategy strategy : coverStrategies) { - coverStrategyMap.put(strategy.getPlatformType(), strategy); - log.info("注册舱门平台策略: {} -> {}", - strategy.getPlatformType().getName(), strategy.getClass().getSimpleName()); - } - - // 注册无人机策略 - for (DronePlatformStrategy strategy : droneStrategies) { - droneStrategyMap.put(strategy.getPlatformType(), strategy); - log.info("注册无人机平台策略: {} -> {}", - strategy.getPlatformType().getName(), strategy.getClass().getSimpleName()); - } - - // 注册DRC策略 - for (DrcPlatformStrategy strategy : drcStrategies) { - drcStrategyMap.put(strategy.getPlatformType(), strategy); - log.info("注册DRC平台策略: {} -> {}", - strategy.getPlatformType().getName(), strategy.getClass().getSimpleName()); - } - } - - /** - * 根据机巢SN获取机巢平台策略 - * - * @param airportSn 机巢序列号 - * @return 机巢平台策略 - * @throws IllegalArgumentException 如果机巢未注册或平台策略不存在 - */ - public AirportPlatformStrategy getAirportStrategy(String airportSn) { - // 从数据库查询平台类型 - PlatformType platformType = machinePlatTypeRepository.getPlatformType(airportSn); - - if (platformType == null) { - throw new IllegalArgumentException( - String.format("机巢未注册或平台类型未配置: %s", airportSn)); - } - - AirportPlatformStrategy strategy = airportStrategyMap.get(platformType); - - if (strategy == null) { - throw new IllegalArgumentException( - String.format("未找到平台策略: %s (机巢: %s)", platformType.getName(), airportSn)); - } - - return strategy; - } - - /** - * 根据机巢SN获取舱门平台策略 - * - * @param airportSn 机巢序列号 - * @return 舱门平台策略 - * @throws IllegalArgumentException 如果机巢未注册或平台策略不存在 - */ - public CoverPlatformStrategy getCoverStrategy(String airportSn) { - // 从数据库查询平台类型 - PlatformType platformType = machinePlatTypeRepository.getPlatformType(airportSn); - - if (platformType == null) { - throw new IllegalArgumentException( - String.format("机巢未注册或平台类型未配置: %s", airportSn)); - } - - CoverPlatformStrategy strategy = coverStrategyMap.get(platformType); - - if (strategy == null) { - throw new IllegalArgumentException( - String.format("未找到平台策略: %s (机巢: %s)", platformType.getName(), airportSn)); - } - - return strategy; - } - - - /** - * 根据平台类型获取机巢平台策略 - * - * @param platformType 平台类型 - * @return 机巢平台策略 - */ - public AirportPlatformStrategy getAirportStrategyByType(PlatformType platformType) { - return airportStrategyMap.get(platformType); - } - - /** - * 根据平台类型获取舱门平台策略 - * - * @param platformType 平台类型 - * @return 舱门平台策略 - */ - public CoverPlatformStrategy getCoverStrategyByType(PlatformType platformType) { - return coverStrategyMap.get(platformType); - } - - /** - * 根据无人机SN获取无人机平台策略 - * - * @param droneSn 无人机序列号 - * @return 无人机平台策略 - * @throws IllegalArgumentException 如果无人机未注册或平台策略不存在 - */ - public DronePlatformStrategy getDroneStrategy(String droneSn) { - // 从数据库查询平台类型 - PlatformType platformType = machinePlatTypeRepository.getPlatformType(droneSn); - - if (platformType == null) { - throw new IllegalArgumentException( - String.format("无人机未注册或平台类型未配置: %s", droneSn)); - } - - DronePlatformStrategy strategy = droneStrategyMap.get(platformType); - - if (strategy == null) { - throw new IllegalArgumentException( - String.format("未找到平台策略: %s (无人机: %s)", platformType.getName(), droneSn)); - } - - return strategy; - } - - /** - * 根据平台类型获取无人机平台策略 - * - * @param platformType 平台类型 - * @return 无人机平台策略 - */ - public DronePlatformStrategy getDroneStrategyByType(PlatformType platformType) { - return droneStrategyMap.get(platformType); - } - - /** - * 根据机巢SN获取DRC平台策略 - * - * @param airportSn 机巢序列号 - * @return DRC平台策略 - * @throws IllegalArgumentException 如果机巢未注册或平台策略不存在 - */ - public DrcPlatformStrategy getDrcStrategy(String airportSn) { - // 从数据库查询平台类型 - PlatformType platformType = machinePlatTypeRepository.getPlatformType(airportSn); - - if (platformType == null) { - throw new IllegalArgumentException( - String.format("机巢未注册或平台类型未配置: %s", airportSn)); - } - - DrcPlatformStrategy strategy = drcStrategyMap.get(platformType); - - if (strategy == null) { - throw new IllegalArgumentException( - String.format("未找到DRC平台策略: %s (机巢: %s)", platformType.getName(), airportSn)); - } - - return strategy; - } - - /** - * 根据平台类型获取DRC平台策略 - * - * @param platformType 平台类型 - * @return DRC平台策略 - */ - public DrcPlatformStrategy getDrcStrategyByType(PlatformType platformType) { - return drcStrategyMap.get(platformType); - } - - /** - * 获取机巢的平台类型 - * - * @param airportSn 机巢序列号 - * @return 平台类型 - */ - public PlatformType getPlatformType(String airportSn) { - return machinePlatTypeRepository.getPlatformType(airportSn); - } -} diff --git a/src/main/java/com/tuoheng/old/platform/strategy/AirportPlatformStrategy.java b/src/main/java/com/tuoheng/old/platform/strategy/AirportPlatformStrategy.java deleted file mode 100644 index 41407da..0000000 --- a/src/main/java/com/tuoheng/old/platform/strategy/AirportPlatformStrategy.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.tuoheng.old.platform.strategy; - -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.platform.PlatformType; -import com.tuoheng.old.status.AirportState; - -/** - * 机巢平台策略接口 - * 定义各平台需要实现的Guard、Action和Listener - */ -public interface AirportPlatformStrategy { - - /** - * 获取平台类型 - */ - PlatformType getPlatformType(); - - // ==================== Guards ==================== - - PlatformGuard getCanOnlineGuard(); - - PlatformGuard getCanOfflineGuard(); - - PlatformGuard getIsDebugModeGuard(); - - PlatformGuard getIsNotDebugModeGuard(); - - PlatformGuard getCanCloseDebugModeGuard(); - - PlatformGuard getIsRebootCompletedGuard(); - - // ==================== Actions ==================== - - PlatformAction getOnlineAction(); - - PlatformAction getOfflineAction(); - - PlatformAction getOpenDebugModeAction(); - - PlatformAction getCloseDebugModeAction(); - - PlatformAction getRebootAction(); - - PlatformAction getRebootCompletedAction(); - - // ==================== Listener ==================== - - /** - * 获取平台Listener - * 每个平台有一个Listener实例,所有该平台的机巢共享 - */ - PlatformListener getListener(); -} diff --git a/src/main/java/com/tuoheng/old/platform/strategy/CoverPlatformStrategy.java b/src/main/java/com/tuoheng/old/platform/strategy/CoverPlatformStrategy.java deleted file mode 100644 index fd70e56..0000000 --- a/src/main/java/com/tuoheng/old/platform/strategy/CoverPlatformStrategy.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.tuoheng.old.platform.strategy; - -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.platform.PlatformType; -import com.tuoheng.old.status.CoverState; - -/** - * 舱门平台策略接口 - * 定义各平台需要实现的Guard、Action和Listener - */ -public interface CoverPlatformStrategy { - - /** - * 获取平台类型 - */ - PlatformType getPlatformType(); - - // ==================== Guards ==================== - - PlatformGuard getCanOpenGuard(); - - PlatformGuard getCanCloseGuard(); - - PlatformGuard getIsOpenedGuard(); - - PlatformGuard getIsClosedGuard(); - - // ==================== Actions ==================== - - PlatformAction getOpenAction(); - - PlatformAction getOpenedAction(); - - PlatformAction getCloseAction(); - - PlatformAction getClosedAction(); - - PlatformAction getErrorAction(); - - PlatformAction getResetAction(); - - // ==================== Listener ==================== - - /** - * 获取平台Listener - * 每个平台有一个Listener实例,所有该平台的机巢共享 - */ - PlatformListener getListener(); -} diff --git a/src/main/java/com/tuoheng/old/platform/strategy/DrcPlatformStrategy.java b/src/main/java/com/tuoheng/old/platform/strategy/DrcPlatformStrategy.java deleted file mode 100644 index 655de80..0000000 --- a/src/main/java/com/tuoheng/old/platform/strategy/DrcPlatformStrategy.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.tuoheng.old.platform.strategy; - -import com.tuoheng.old.events.DrcEvent; -import com.tuoheng.old.platform.PlatformType; -import com.tuoheng.old.status.DrcState; - -/** - * DRC(飞行控制模式)平台策略接口 - * 定义各平台需要实现的Guard、Action和Listener - */ -public interface DrcPlatformStrategy { - - /** - * 获取平台类型 - */ - PlatformType getPlatformType(); - - // ==================== Guards ==================== - - /** - * 是否可以进入DRC模式 - */ - PlatformGuard getCanEnterGuard(); - - /** - * 是否可以退出DRC模式 - */ - PlatformGuard getCanExitGuard(); - - // ==================== Actions ==================== - - /** - * 进入DRC模式动作 - */ - PlatformAction getEnterAction(); - - /** - * 进入DRC模式完成动作 - */ - PlatformAction getEnteredAction(); - - /** - * 退出DRC模式动作 - */ - PlatformAction getExitAction(); - - /** - * 退出DRC模式完成动作 - */ - PlatformAction getExitedAction(); - - // ==================== Listener ==================== - - /** - * 获取平台Listener - * 每个平台有一个Listener实例,所有该平台的DRC共享 - */ - PlatformListener getListener(); -} diff --git a/src/main/java/com/tuoheng/old/platform/strategy/DronePlatformStrategy.java b/src/main/java/com/tuoheng/old/platform/strategy/DronePlatformStrategy.java deleted file mode 100644 index b1c6a48..0000000 --- a/src/main/java/com/tuoheng/old/platform/strategy/DronePlatformStrategy.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.tuoheng.old.platform.strategy; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.platform.PlatformType; -import com.tuoheng.old.status.DroneState; - -/** - * 无人机平台策略接口 - * 定义各平台需要实现的Guard、Action和Listener - */ -public interface DronePlatformStrategy { - - /** - * 获取平台类型 - */ - PlatformType getPlatformType(); - - // ==================== Guards ==================== - - /** - * 是否可以指点 - */ - PlatformGuard getCanPointGuard(); - - // ==================== Actions ==================== - - // 准备阶段 - PlatformAction getStartPrepareAction(); - - PlatformAction getPrepareCompletedAction(); - - // 飞行阶段 - PlatformAction getStartFlyingAction(); - - PlatformAction getEmergencyStopAction(); - - PlatformAction getResumeFlyingAction(); - - PlatformAction getArriveAction(); - - // 返航阶段 - PlatformAction getStartReturnAction(); - - PlatformAction getReturnEmergencyStopAction(); - - PlatformAction getResumeReturnAction(); - - PlatformAction getReturnCompletedAction(); - - // 指点操作 - PlatformAction getStartPointingAction(); - - PlatformAction getPointPrepareCompletedAction(); - - PlatformAction getPointFlyingCompletedAction(); - - PlatformAction getCancelPointAction(); - - PlatformAction getPointToFlyingAction(); - - PlatformAction getPointToReturnAction(); - - // 离线 - PlatformAction getOfflineAction(); - - // ==================== Listener ==================== - - /** - * 获取平台Listener - * 每个平台有一个Listener实例,所有该平台的无人机共享 - */ - PlatformListener getListener(); -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/platform/strategy/PlatformAction.java b/src/main/java/com/tuoheng/old/platform/strategy/PlatformAction.java deleted file mode 100644 index 2daf40b..0000000 --- a/src/main/java/com/tuoheng/old/platform/strategy/PlatformAction.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.tuoheng.old.platform.strategy; - -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.action.Action; - -/** - * 平台Action接口 - * 各平台实现自己的Action逻辑 - */ -public interface PlatformAction extends Action { - - /** - * 获取Action名称 - */ - String getName(); - - /** - * 执行Action - */ - @Override - void execute(StateContext context); -} diff --git a/src/main/java/com/tuoheng/old/platform/strategy/PlatformGuard.java b/src/main/java/com/tuoheng/old/platform/strategy/PlatformGuard.java deleted file mode 100644 index 9a32275..0000000 --- a/src/main/java/com/tuoheng/old/platform/strategy/PlatformGuard.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.tuoheng.old.platform.strategy; - -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.guard.Guard; - -/** - * 平台Guard接口 - * 各平台实现自己的Guard逻辑 - */ -public interface PlatformGuard extends Guard { - - /** - * 获取Guard名称 - */ - String getName(); - - /** - * 评估Guard条件 - */ - @Override - boolean evaluate(StateContext context); -} diff --git a/src/main/java/com/tuoheng/old/platform/strategy/PlatformListener.java b/src/main/java/com/tuoheng/old/platform/strategy/PlatformListener.java deleted file mode 100644 index 3c6b79b..0000000 --- a/src/main/java/com/tuoheng/old/platform/strategy/PlatformListener.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.tuoheng.old.platform.strategy; - -import org.springframework.statemachine.listener.StateMachineListener; - -/** - * 平台Listener接口 - * 各平台可以定制自己的Listener逻辑 - */ -public interface PlatformListener extends StateMachineListener { - - /** - * 获取Listener名称 - */ - String getName(); -} diff --git a/src/main/java/com/tuoheng/old/redis/RedisStateStore.java b/src/main/java/com/tuoheng/old/redis/RedisStateStore.java deleted file mode 100644 index a7251fc..0000000 --- a/src/main/java/com/tuoheng/old/redis/RedisStateStore.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.tuoheng.old.redis; - -import com.tuoheng.old.status.AirportState; -import com.tuoheng.old.status.CoverState; -import com.tuoheng.old.status.DroneState; -import com.tuoheng.old.status.DrcState; -import org.springframework.stereotype.Component; - -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; - -/** - * 使用 Redis 记录和恢复机巢/舱门/无人机/DRC状态的存储组件。 - * - * 当前实现采用内存 Map 占位,便于无 Redis 环境下直接运行。 - * 如果接入真正的 Redis,只需将存取逻辑替换为 RedisTemplate 等实现。 - */ -@Component -public class RedisStateStore { - - private final Map airportStateMap = new ConcurrentHashMap<>(); - private final Map coverStateMap = new ConcurrentHashMap<>(); - private final Map droneStateMap = new ConcurrentHashMap<>(); - private final Map drcStateMap = new ConcurrentHashMap<>(); - - public void saveAirportState(String airportSn, AirportState state) { - if (airportSn != null && state != null) { - airportStateMap.put(airportSn, state); - } - } - - public void saveCoverState(String airportSn, CoverState state) { - if (airportSn != null && state != null) { - coverStateMap.put(airportSn, state); - } - } - - public void saveDroneState(String droneSn, DroneState state) { - if (droneSn != null && state != null) { - droneStateMap.put(droneSn, state); - } - } - - public void saveDrcState(String airportSn, DrcState state) { - if (airportSn != null && state != null) { - drcStateMap.put(airportSn, state); - } - } - - public Optional loadAirportState(String airportSn) { - return Optional.ofNullable(airportStateMap.get(airportSn)); - } - - public Optional loadCoverState(String airportSn) { - return Optional.ofNullable(coverStateMap.get(airportSn)); - } - - public Optional loadDroneState(String droneSn) { - return Optional.ofNullable(droneStateMap.get(droneSn)); - } - - public Optional loadDrcState(String airportSn) { - return Optional.ofNullable(drcStateMap.get(airportSn)); - } - - public Set allAirportIds() { - // 合并两张表的 key,防止有只存机场或只存舱门的情况 - Set ids = ConcurrentHashMap.newKeySet(); - ids.addAll(airportStateMap.keySet()); - ids.addAll(coverStateMap.keySet()); - return ids; - } - - public Set allDroneIds() { - return droneStateMap.keySet(); - } - - public Set allDrcIds() { - return drcStateMap.keySet(); - } -} - diff --git a/src/main/java/com/tuoheng/old/repository/MachinePlatTypeRepository.java b/src/main/java/com/tuoheng/old/repository/MachinePlatTypeRepository.java deleted file mode 100644 index 74eaa32..0000000 --- a/src/main/java/com/tuoheng/old/repository/MachinePlatTypeRepository.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.tuoheng.old.repository; - -import com.tuoheng.old.platform.PlatformType; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * 机巢平台映射仓储 - * 模拟数据库查询,存储机巢SN到平台类型的映射关系 - */ -@Slf4j -@Repository -public class MachinePlatTypeRepository { - - /** - * 模拟数据库存储 - * Key: 机巢SN - * Value: 平台类型 - */ - private final Map airportPlatformMap = new ConcurrentHashMap<>(); - - /** - * 初始化一些测试数据 - */ - public MachinePlatTypeRepository() { - // 模拟数据库中的数据 - airportPlatformMap.put("airport-001", PlatformType.DJI); - airportPlatformMap.put("airport-002", PlatformType.DJI); - airportPlatformMap.put("airport-003", PlatformType.DJI); - airportPlatformMap.put("airport-004", PlatformType.DJI); - } - - /** - * 根据机巢SN查询平台类型 - * - * @param airportSn 机巢序列号 - * @return 平台类型,如果不存在返回null - */ - public PlatformType getPlatformType(String airportSn) { - return airportPlatformMap.get(airportSn); - } - - /** - * 保存机巢平台映射关系 - * - * @param airportSn 机巢序列号 - * @param platformType 平台类型 - */ - public void savePlatformMapping(String airportSn, PlatformType platformType) { - airportPlatformMap.put(airportSn, platformType); - log.info("保存平台映射: {} -> {}", airportSn, platformType.getName()); - } - - /** - * 删除机巢平台映射关系 - * - * @param airportSn 机巢序列号 - */ - public void deletePlatformMapping(String airportSn) { - airportPlatformMap.remove(airportSn); - log.info("删除平台映射: {}", airportSn); - } - - /** - * 检查机巢是否已注册 - * - * @param airportSn 机巢序列号 - * @return 是否已注册 - */ - public boolean exists(String airportSn) { - return airportPlatformMap.containsKey(airportSn); - } -} diff --git a/src/main/java/com/tuoheng/old/service/AirportMachineService.java b/src/main/java/com/tuoheng/old/service/AirportMachineService.java deleted file mode 100644 index 84c9e97..0000000 --- a/src/main/java/com/tuoheng/old/service/AirportMachineService.java +++ /dev/null @@ -1,193 +0,0 @@ -package com.tuoheng.old.service; - -import com.tuoheng.old.events.AirportEvent; -import com.tuoheng.old.redis.RedisStateStore; -import com.tuoheng.old.status.AirportState; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.statemachine.StateMachine; -import org.springframework.statemachine.config.StateMachineFactory; -import org.springframework.stereotype.Component; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * 机巢状态机管理器 - * 负责管理多个机巢的状态机实例 - */ -@Slf4j -@Component -public class AirportMachineService { - - @Autowired - StateMachineFactory stateMachineFactory; - - @Autowired - private RedisStateStore redisStateStore; - - /** - * 存储所有机巢的状态机实例 - * Key: 机巢ID (airportSn) - * Value: 状态机实例 - */ - private final Map> stateMachineMap = new ConcurrentHashMap<>(); - - /** - * 获取或创建状态机 - * 如果状态机不存在,则创建新的状态机实例 - * - * @param airportSn 机巢序列号 - * @return 状态机实例 - */ - public StateMachine getOrCreateStateMachine(String airportSn) { - return stateMachineMap.computeIfAbsent(airportSn, id -> { - StateMachine stateMachine = stateMachineFactory.getStateMachine(id); - // 服务器重启后,状态机初始化为 UNKNOWN 状态 - // 不从 Redis 恢复旧状态,等待第一次心跳同步真实状态 - // 这样可以避免服务器重启期间丢失心跳导致的状态不一致问题 - stateMachine.start(); - log.info("创建并启动状态机: {}, 初始状态: UNKNOWN (等待心跳同步)", id); - return stateMachine; - }); - } - - /** - * 获取状态机(不创建) - * - * @param airportSn 机巢序列号 - * @return 状态机实例,如果不存在返回null - */ - public StateMachine getStateMachine(String airportSn) { - return stateMachineMap.get(airportSn); - } - - /** - * 获取状态机的当前状态 - * - * @param airportSn 机巢序列号 - * @return 当前状态,如果状态机不存在返回null - */ - public AirportState getCurrentState(String airportSn) { - StateMachine stateMachine = stateMachineMap.get(airportSn); - if (stateMachine == null) { - log.warn("状态机不存在: {}", airportSn); - return null; - } - return stateMachine.getState().getId(); - } - - /** - * 获取状态机的所有当前状态(包括子状态) - * - * @param airportSn 机巢序列号 - * @return 当前状态集合的字符串表示 - */ - public String getCurrentStates(String airportSn) { - StateMachine stateMachine = stateMachineMap.get(airportSn); - if (stateMachine == null) { - return "状态机不存在"; - } - - StringBuilder states = new StringBuilder(); - stateMachine.getState().getIds().forEach(state -> { - if (states.length() > 0) { - states.append(" -> "); - } - states.append(state); - }); - - return states.toString(); - } - - /** - * 发送事件到状态机 - * - * @param airportSn 机巢序列号 - * @param event 事件 - * @return 是否发送成功 - */ - public boolean sendEvent(String airportSn, AirportEvent event) { - StateMachine stateMachine = getOrCreateStateMachine(airportSn); - boolean result = stateMachine.sendEvent(event); - - if (result) { - // 持久化最新状态 - redisStateStore.saveAirportState(airportSn, stateMachine.getState().getId()); - log.info("事件发送成功 - 机巢: {}, 事件: {}, 当前状态: {}", - airportSn, event, getCurrentStates(airportSn)); - } else { - log.warn("事件发送失败 - 机巢: {}, 事件: {}, 当前状态: {}", - airportSn, event, getCurrentStates(airportSn)); - } - - return result; - } - - /** - * 移除状态机 - * - * @param airportSn 机巢序列号 - */ - public void removeStateMachine(String airportSn) { - StateMachine stateMachine = stateMachineMap.remove(airportSn); - if (stateMachine != null) { - stateMachine.stop(); - log.info("停止并移除状态机: {}", airportSn); - } - } - - /** - * 检查状态机是否存在 - * - * @param airportSn 机巢序列号 - * @return 是否存在 - */ - public boolean hasStateMachine(String airportSn) { - return stateMachineMap.containsKey(airportSn); - } - - /** - * 获取所有状态机的数量 - * - * @return 状态机数量 - */ - public int getStateMachineCount() { - return stateMachineMap.size(); - } - - /** - * 获取所有机巢ID - * - * @return 机巢ID集合 - */ - public java.util.Set getAllAirportIds() { - return stateMachineMap.keySet(); - } - - /** - * 检查状态机是否处于指定状态 - * - * @param airportSn 机巢序列号 - * @param state 要检查的状态 - * @return 是否处于指定状态 - */ - public boolean isInState(String airportSn, AirportState state) { - StateMachine stateMachine = stateMachineMap.get(airportSn); - if (stateMachine == null) { - return false; - } - return stateMachine.getState().getIds().contains(state); - } - - /** - * 重启状态机 - * - * @param airportSn 机巢序列号 - */ - public void restartStateMachine(String airportSn) { - removeStateMachine(airportSn); - getOrCreateStateMachine(airportSn); - log.info("重启状态机: {}", airportSn); - } -} diff --git a/src/main/java/com/tuoheng/old/service/CoverMachineService.java b/src/main/java/com/tuoheng/old/service/CoverMachineService.java deleted file mode 100644 index 0734d6e..0000000 --- a/src/main/java/com/tuoheng/old/service/CoverMachineService.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.tuoheng.old.service; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.events.CoverEvent; -import com.tuoheng.old.redis.RedisStateStore; -import com.tuoheng.old.status.CoverState; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.statemachine.StateMachine; -import org.springframework.statemachine.config.StateMachineFactory; -import org.springframework.stereotype.Component; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * 舱门状态机管理器 - */ -@Slf4j -@Component -public class CoverMachineService { - - @Autowired - StateMachineFactory coverStateMachineFactory; - - @Autowired - private RedisStateStore redisStateStore; - - private final Map> stateMachineMap = new ConcurrentHashMap<>(); - - public StateMachine getOrCreateStateMachine(String airportSn) { - return stateMachineMap.computeIfAbsent(airportSn, id -> { - StateMachine stateMachine = coverStateMachineFactory.getStateMachine(id); - // 服务器重启后,状态机初始化为 UNKNOWN 状态 - // 不从 Redis 恢复旧状态,等待第一次心跳同步真实状态 - // 这样可以避免服务器重启期间丢失心跳导致的状态不一致问题 - stateMachine.start(); - log.info("创建并启动舱门状态机: %s, 初始状态: UNKNOWN (等待心跳同步)", id); - return stateMachine; - }); - } - - public CoverState getCurrentState(String airportSn) { - StateMachine stateMachine = stateMachineMap.get(airportSn); - if (stateMachine == null) { - return null; - } - return stateMachine.getState().getId(); - } - - public boolean sendEvent(String airportSn, CoverEvent event) { - StateMachine stateMachine = getOrCreateStateMachine(airportSn); - boolean result = stateMachine.sendEvent(event); - - if (result) { - // 持久化最新状态 - redisStateStore.saveCoverState(airportSn, stateMachine.getState().getId()); - log.info("舱门事件发送成功 - 机巢: {}, 事件: {}, 当前状态: {}", - airportSn, event, getCurrentState(airportSn)); - } else { - log.error("舱门事件发送失败 - 机巢: {}, 事件: {}, 当前状态: {}", - airportSn, event, getCurrentState(airportSn)); - } - - return result; - } - - public boolean isInState(String airportSn, CoverState state) { - StateMachine stateMachine = stateMachineMap.get(airportSn); - if (stateMachine == null) { - return false; - } - return stateMachine.getState().getId() == state; - } - - public void removeStateMachine(String airportSn) { - StateMachine stateMachine = stateMachineMap.remove(airportSn); - if (stateMachine != null) { - stateMachine.stop(); - log.info("停止并移除舱门状态机: {}", airportSn); - } - } -} diff --git a/src/main/java/com/tuoheng/old/service/DrcMachineService.java b/src/main/java/com/tuoheng/old/service/DrcMachineService.java deleted file mode 100644 index 23e5b98..0000000 --- a/src/main/java/com/tuoheng/old/service/DrcMachineService.java +++ /dev/null @@ -1,194 +0,0 @@ -package com.tuoheng.old.service; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.events.DrcEvent; -import com.tuoheng.old.redis.RedisStateStore; -import com.tuoheng.old.status.DrcState; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.statemachine.StateMachine; -import org.springframework.statemachine.config.StateMachineFactory; -import org.springframework.stereotype.Component; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * DRC状态机管理器 - * 负责管理多个机巢的DRC状态机实例 - */ -@Slf4j -@Component -public class DrcMachineService { - - @Autowired - StateMachineFactory drcStateMachineFactory; - - @Autowired - private RedisStateStore redisStateStore; - - /** - * 存储所有机巢的DRC状态机实例 - * Key: 机巢ID (airportSn) - * Value: 状态机实例 - */ - private final Map> stateMachineMap = new ConcurrentHashMap<>(); - - /** - * 获取或创建状态机 - * 如果状态机不存在,则创建新的状态机实例 - * - * @param airportSn 机巢序列号 - * @return 状态机实例 - */ - public StateMachine getOrCreateStateMachine(String airportSn) { - return stateMachineMap.computeIfAbsent(airportSn, id -> { - StateMachine stateMachine = drcStateMachineFactory.getStateMachine(id); - // 服务器重启后,状态机初始化为 UNKNOWN 状态 - // 不从 Redis 恢复旧状态,等待第一次心跳同步真实状态 - // 这样可以避免服务器重启期间丢失心跳导致的状态不一致问题 - stateMachine.start(); - log.info("创建并启动DRC状态机: %s, 初始状态: UNKNOWN (等待心跳同步)", id); - return stateMachine; - }); - } - - /** - * 获取状态机(不创建) - * - * @param airportSn 机巢序列号 - * @return 状态机实例,如果不存在返回null - */ - public StateMachine getStateMachine(String airportSn) { - return stateMachineMap.get(airportSn); - } - - /** - * 获取状态机的当前状态 - * - * @param airportSn 机巢序列号 - * @return 当前状态,如果状态机不存在返回null - */ - public DrcState getCurrentState(String airportSn) { - StateMachine stateMachine = stateMachineMap.get(airportSn); - if (stateMachine == null) { - log.info("DRC状态机不存在: {}", airportSn); - return null; - } - return stateMachine.getState().getId(); - } - - /** - * 获取状态机的所有当前状态(包括子状态) - * - * @param airportSn 机巢序列号 - * @return 当前状态集合的字符串表示 - */ - public String getCurrentStates(String airportSn) { - StateMachine stateMachine = stateMachineMap.get(airportSn); - if (stateMachine == null) { - return "状态机不存在"; - } - - StringBuilder states = new StringBuilder(); - stateMachine.getState().getIds().forEach(state -> { - if (states.length() > 0) { - states.append(" -> "); - } - states.append(state); - }); - - return states.toString(); - } - - /** - * 发送事件到状态机 - * - * @param airportSn 机巢序列号 - * @param event 事件 - * @return 是否发送成功 - */ - public boolean sendEvent(String airportSn, DrcEvent event) { - StateMachine stateMachine = getOrCreateStateMachine(airportSn); - boolean result = stateMachine.sendEvent(event); - - if (result) { - // 持久化最新状态 - redisStateStore.saveDrcState(airportSn, stateMachine.getState().getId()); - log.info("DRC事件发送成功 - 机巢: {}, 事件: {}, 当前状态: {}", - airportSn, event, getCurrentStates(airportSn)); - } else { - log.error("DRC事件发送失败 - 机巢: {}, 事件: {}, 当前状态: {}", - airportSn, event, getCurrentStates(airportSn)); - } - - return result; - } - - /** - * 移除状态机 - * - * @param airportSn 机巢序列号 - */ - public void removeStateMachine(String airportSn) { - StateMachine stateMachine = stateMachineMap.remove(airportSn); - if (stateMachine != null) { - stateMachine.stop(); - log.info("停止并移除DRC状态机: {}", airportSn); - } - } - - /** - * 检查状态机是否存在 - * - * @param airportSn 机巢序列号 - * @return 是否存在 - */ - public boolean hasStateMachine(String airportSn) { - return stateMachineMap.containsKey(airportSn); - } - - /** - * 获取所有状态机的数量 - * - * @return 状态机数量 - */ - public int getStateMachineCount() { - return stateMachineMap.size(); - } - - /** - * 获取所有机巢ID - * - * @return 机巢ID集合 - */ - public java.util.Set getAllAirportIds() { - return stateMachineMap.keySet(); - } - - /** - * 检查状态机是否处于指定状态 - * - * @param airportSn 机巢序列号 - * @param state 要检查的状态 - * @return 是否处于指定状态 - */ - public boolean isInState(String airportSn, DrcState state) { - StateMachine stateMachine = stateMachineMap.get(airportSn); - if (stateMachine == null) { - return false; - } - return stateMachine.getState().getIds().contains(state); - } - - /** - * 重启状态机 - * - * @param airportSn 机巢序列号 - */ - public void restartStateMachine(String airportSn) { - removeStateMachine(airportSn); - getOrCreateStateMachine(airportSn); - log.info("重启DRC状态机: {}", airportSn); - } -} diff --git a/src/main/java/com/tuoheng/old/service/DroneMachineService.java b/src/main/java/com/tuoheng/old/service/DroneMachineService.java deleted file mode 100644 index c31a404..0000000 --- a/src/main/java/com/tuoheng/old/service/DroneMachineService.java +++ /dev/null @@ -1,194 +0,0 @@ -package com.tuoheng.old.service; - -import lombok.extern.slf4j.Slf4j; - -import com.tuoheng.old.events.DroneEvent; -import com.tuoheng.old.redis.RedisStateStore; -import com.tuoheng.old.status.DroneState; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.statemachine.StateMachine; -import org.springframework.statemachine.config.StateMachineFactory; -import org.springframework.stereotype.Component; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * 无人机状态机管理器 - * 负责管理多个无人机的状态机实例 - */ -@Slf4j -@Component -public class DroneMachineService { - - @Autowired - StateMachineFactory droneStateMachineFactory; - - @Autowired - private RedisStateStore redisStateStore; - - /** - * 存储所有无人机的状态机实例 - * Key: 无人机ID (droneSn) - * Value: 状态机实例 - */ - private final Map> stateMachineMap = new ConcurrentHashMap<>(); - - /** - * 获取或创建状态机 - * 如果状态机不存在,则创建新的状态机实例 - * - * @param droneSn 无人机序列号 - * @return 状态机实例 - */ - public StateMachine getOrCreateStateMachine(String droneSn) { - return stateMachineMap.computeIfAbsent(droneSn, id -> { - StateMachine stateMachine = droneStateMachineFactory.getStateMachine(id); - // 服务器重启后,状态机初始化为 UNKNOWN 状态 - // 不从 Redis 恢复旧状态,等待第一次心跳同步真实状态 - // 这样可以避免服务器重启期间丢失心跳导致的状态不一致问题 - stateMachine.start(); - log.info("创建并启动状态机: %s, 初始状态: UNKNOWN (等待心跳同步)", id); - return stateMachine; - }); - } - - /** - * 获取状态机(不创建) - * - * @param droneSn 无人机序列号 - * @return 状态机实例,如果不存在返回null - */ - public StateMachine getStateMachine(String droneSn) { - return stateMachineMap.get(droneSn); - } - - /** - * 获取状态机的当前状态 - * - * @param droneSn 无人机序列号 - * @return 当前状态,如果状态机不存在返回null - */ - public DroneState getCurrentState(String droneSn) { - StateMachine stateMachine = stateMachineMap.get(droneSn); - if (stateMachine == null) { - log.info("状态机不存在: {}", droneSn); - return null; - } - return stateMachine.getState().getId(); - } - - /** - * 获取状态机的所有当前状态(包括子状态) - * - * @param droneSn 无人机序列号 - * @return 当前状态集合的字符串表示 - */ - public String getCurrentStates(String droneSn) { - StateMachine stateMachine = stateMachineMap.get(droneSn); - if (stateMachine == null) { - return "状态机不存在"; - } - - StringBuilder states = new StringBuilder(); - stateMachine.getState().getIds().forEach(state -> { - if (states.length() > 0) { - states.append(" -> "); - } - states.append(state); - }); - - return states.toString(); - } - - /** - * 发送事件到状态机 - * - * @param droneSn 无人机序列号 - * @param event 事件 - * @return 是否发送成功 - */ - public boolean sendEvent(String droneSn, DroneEvent event) { - StateMachine stateMachine = getOrCreateStateMachine(droneSn); - boolean result = stateMachine.sendEvent(event); - - if (result) { - // 持久化最新状态 - redisStateStore.saveDroneState(droneSn, stateMachine.getState().getId()); - log.info("事件发送成功 - 无人机: {}, 事件: {}, 当前状态: {}", - droneSn, event, getCurrentStates(droneSn)); - } else { - log.error("事件发送失败 - 无人机: {}, 事件: {}, 当前状态: {}", - droneSn, event, getCurrentStates(droneSn)); - } - - return result; - } - - /** - * 移除状态机 - * - * @param droneSn 无人机序列号 - */ - public void removeStateMachine(String droneSn) { - StateMachine stateMachine = stateMachineMap.remove(droneSn); - if (stateMachine != null) { - stateMachine.stop(); - log.info("停止并移除状态机: {}", droneSn); - } - } - - /** - * 检查状态机是否存在 - * - * @param droneSn 无人机序列号 - * @return 是否存在 - */ - public boolean hasStateMachine(String droneSn) { - return stateMachineMap.containsKey(droneSn); - } - - /** - * 获取所有状态机的数量 - * - * @return 状态机数量 - */ - public int getStateMachineCount() { - return stateMachineMap.size(); - } - - /** - * 获取所有无人机ID - * - * @return 无人机ID集合 - */ - public java.util.Set getAllDroneIds() { - return stateMachineMap.keySet(); - } - - /** - * 检查状态机是否处于指定状态 - * - * @param droneSn 无人机序列号 - * @param state 要检查的状态 - * @return 是否处于指定状态 - */ - public boolean isInState(String droneSn, DroneState state) { - StateMachine stateMachine = stateMachineMap.get(droneSn); - if (stateMachine == null) { - return false; - } - return stateMachine.getState().getIds().contains(state); - } - - /** - * 重启状态机 - * - * @param droneSn 无人机序列号 - */ - public void restartStateMachine(String droneSn) { - removeStateMachine(droneSn); - getOrCreateStateMachine(droneSn); - log.info("重启状态机: {}", droneSn); - } -} \ No newline at end of file diff --git a/src/main/java/com/tuoheng/old/status/AirportState.java b/src/main/java/com/tuoheng/old/status/AirportState.java deleted file mode 100644 index a5137b0..0000000 --- a/src/main/java/com/tuoheng/old/status/AirportState.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.tuoheng.old.status; - -/** - * 机巢状态枚举(简化版 - 舱门状态已分离) - */ -public enum AirportState { - /** - * 未知状态(服务器重启后的初始状态,等待第一次心跳同步) - */ - UNKNOWN, - - /** - * 离线 - */ - OFFLINE, - - /** - * 在线(父状态) - */ - ONLINE, - - /** - * 待机 - */ - STANDBY, - - /** - * 进入调试模式中 - */ - ENTERING_DEBUG_MODE, - - /** - * 调试模式 - */ - DEBUG_MODE, - - /** - * 退出调试模式中 - */ - EXITING_DEBUG_MODE, - - /** - * 重启中 - */ - REBOOTING -} diff --git a/src/main/java/com/tuoheng/old/status/CoverState.java b/src/main/java/com/tuoheng/old/status/CoverState.java deleted file mode 100644 index ded72ab..0000000 --- a/src/main/java/com/tuoheng/old/status/CoverState.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.tuoheng.old.status; - -/** - * 舱门状态枚举 - */ -public enum CoverState { - /** - * 未知状态(服务器重启后的初始状态,等待第一次心跳同步) - */ - UNKNOWN, - - /** - * 舱门已关闭 - */ - CLOSED, - - /** - * 舱门打开中 - */ - OPENING, - - /** - * 舱门已打开 - */ - OPENED, - - /** - * 舱门关闭中 - */ - CLOSING, - - /** - * 舱门状态异常 - */ - ERROR -} diff --git a/src/main/java/com/tuoheng/old/status/DrcState.java b/src/main/java/com/tuoheng/old/status/DrcState.java deleted file mode 100644 index efecde7..0000000 --- a/src/main/java/com/tuoheng/old/status/DrcState.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.tuoheng.old.status; - -/** - * 飞行控制模式(DRC) - * 未知状态 退出状态 进入中 进入状态 退出中 - */ -public enum DrcState { - /** - * 未知状态(服务器重启后的初始状态,等待第一次心跳同步) - */ - UNKNOWN, - - /** - * 退出状态(DRC模式已退出) - */ - EXITED, - - /** - * 进入中(正在进入DRC模式) - */ - ENTERING, - - /** - * 进入状态(已进入DRC模式) - */ - ENTERED, - - /** - * 退出中(正在退出DRC模式) - */ - EXITING -} diff --git a/src/main/java/com/tuoheng/old/status/DroneState.java b/src/main/java/com/tuoheng/old/status/DroneState.java deleted file mode 100644 index 9bc04f8..0000000 --- a/src/main/java/com/tuoheng/old/status/DroneState.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.tuoheng.old.status; - -/** - * 分为:准备中 -> 飞行中 -> 返航 三个大状态 - * - * 飞行中 - * 飞行中 (可以变到指点) - * 指点操作 (可以返航,指点 和 飞行中) - * 急停 (可以返航,指点,飞行中) - * 到达目的地 (可以指点和返航) - * - * 返航 - * 返航中 (不可以指点) - * 急停 (一键起飞和航线飞行都可以指点) - * 指点操作 (可以返航中,急停,返航完成) - * 返航完成 (不可往回变为返航中和急停) - * - * 指点操作细分为:准备指点 指点飞行中 指点完成 指点被取消 - */ -public enum DroneState { - /** - * 未知状态(服务器重启后的初始状态,等待第一次心跳同步) - */ - UNKNOWN, - - /** - * 离线 - */ - OFFLINE, - - // ==================== 准备阶段 ==================== - /** - * 准备中 - */ - PREPARING, - - // ==================== 飞行阶段(父状态) ==================== - /** - * 飞行中(父状态) - */ - FLYING_PARENT, - - /** - * 飞行中 - */ - FLYING, - - /** - * 急停(飞行阶段) - */ - EMERGENCY_STOP, - - /** - * 到达目的地 - */ - ARRIVED, - - // ==================== 返航阶段(父状态) ==================== - /** - * 返航(父状态) - */ - RETURNING_PARENT, - - /** - * 返航中 - */ - RETURNING, - - /** - * 急停(返航阶段) - */ - RETURN_EMERGENCY_STOP, - - /** - * 返航完成 - */ - RETURN_COMPLETED, - - // ==================== 指点操作(可在飞行和返航阶段使用) ==================== - /** - * 指点操作(父状态) - */ - POINTING_PARENT, - - /** - * 准备指点 - */ - POINT_PREPARING, - - /** - * 指点飞行中 - */ - POINT_FLYING, - - /** - * 指点完成 - */ - POINT_COMPLETED, - - /** - * 指点被取消 - */ - POINT_CANCELLED -}