From 85b744b0f9e4686b809372977cca6ecffe4f18eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=B0=8F=E4=BA=91?= Date: Mon, 15 Dec 2025 18:48:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=BD=E8=B1=A1=E5=87=BA=E7=AD=96=E7=95=A5?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=EF=BC=8C=E5=B0=86=E5=A4=A7=E7=96=86=E7=9A=84?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E5=8D=95=E7=8B=AC=E6=8B=BF=E5=87=BA=E6=9D=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../airport/action/airport/OfflineAction.java | 16 +- .../airport/action/airport/OnlineAction.java | 18 +-- .../action/cover/CloseCoverAction.java | 20 +-- .../action/cover/CoverClosedAction.java | 21 +-- .../action/cover/CoverOpenedAction.java | 21 +-- .../airport/action/cover/OpenCoverAction.java | 20 +-- .../action/debug/CloseDebugModeAction.java | 16 +- .../action/debug/OpenDebugModeAction.java | 16 +- .../airport/action/reboot/RebootAction.java | 16 +- .../action/reboot/RebootCompletedAction.java | 17 +- .../airport/demo/AirportSystemDemo.java | 128 --------------- .../airport/demo/MultiPlatformDemo.java | 64 ++++---- .../guard/airport/CanOfflineGuard.java | 17 +- .../airport/guard/airport/CanOnlineGuard.java | 17 +- .../guard/airport/IsAirportOnlineGuard.java | 17 +- .../guard/cover/CanCloseCoverGuard.java | 22 +-- .../guard/cover/CanOpenCoverGuard.java | 22 +-- .../guard/cover/IsCoverClosedGuard.java | 22 +-- .../guard/cover/IsCoverOpenedGuard.java | 22 +-- .../guard/debug/CanCloseDebugModeGuard.java | 17 +- .../airport/guard/debug/IsDebugModeGuard.java | 17 +- .../guard/debug/IsNotDebugModeGuard.java | 17 +- .../guard/reboot/IsRebootCompletedGuard.java | 17 +- .../listener/DefaultAirportListener.java | 8 +- .../listener/DefaultCoverListener.java | 4 +- .../manager/AbstractAirportSystemManager.java | 26 +++ .../airport/manager/AirportSystemManager.java | 149 +++--------------- .../factory/PlatformStrategyFactory.java | 42 ++++- .../impl/dji/DjiAirportPlatformStrategy.java | 14 +- .../impl/dji/DjiAirportSystemManager.java | 117 ++++++++++++++ .../impl/dji/DjiCoverPlatformStrategy.java | 10 +- .../airport/DjiCloseDebugModeAction.java | 4 +- .../dji/action/airport/DjiOfflineAction.java | 4 +- .../dji/action/airport/DjiOnlineAction.java | 4 +- .../airport/DjiOpenDebugModeAction.java | 4 +- .../dji/action/airport/DjiRebootAction.java | 4 +- .../airport/DjiRebootCompletedAction.java | 4 +- .../dji/action/cover/DjiCloseCoverAction.java | 4 +- .../action/cover/DjiCoverClosedAction.java | 4 +- .../action/cover/DjiCoverOpenedAction.java | 4 +- .../dji/action/cover/DjiOpenCoverAction.java | 4 +- .../airport/DjiCanCloseDebugModeGuard.java | 4 +- .../dji/guard/airport/DjiCanOfflineGuard.java | 4 +- .../dji/guard/airport/DjiCanOnlineGuard.java | 4 +- .../guard/airport/DjiIsDebugModeGuard.java | 4 +- .../guard/airport/DjiIsNotDebugModeGuard.java | 4 +- .../airport/DjiIsRebootCompletedGuard.java | 4 +- .../guard/cover/DjiCanCloseCoverGuard.java | 4 +- .../dji/guard/cover/DjiCanOpenCoverGuard.java | 4 +- .../guard/cover/DjiIsCoverClosedGuard.java | 4 +- .../guard/cover/DjiIsCoverOpenedGuard.java | 4 +- .../impl/dji/listener/DjiAirportListener.java | 12 ++ .../impl/dji/listener/DjiCoverListener.java | 15 ++ 53 files changed, 415 insertions(+), 642 deletions(-) delete mode 100644 src/main/java/com/tuoheng/status/airport/demo/AirportSystemDemo.java create mode 100644 src/main/java/com/tuoheng/status/airport/manager/AbstractAirportSystemManager.java create mode 100644 src/main/java/com/tuoheng/status/airport/platform/impl/dji/DjiAirportSystemManager.java create mode 100644 src/main/java/com/tuoheng/status/airport/platform/impl/dji/listener/DjiAirportListener.java create mode 100644 src/main/java/com/tuoheng/status/airport/platform/impl/dji/listener/DjiCoverListener.java diff --git a/src/main/java/com/tuoheng/status/airport/action/airport/OfflineAction.java b/src/main/java/com/tuoheng/status/airport/action/airport/OfflineAction.java index 21be67f..46d837b 100644 --- a/src/main/java/com/tuoheng/status/airport/action/airport/OfflineAction.java +++ b/src/main/java/com/tuoheng/status/airport/action/airport/OfflineAction.java @@ -1,20 +1,12 @@ package com.tuoheng.status.airport.action.airport; import com.tuoheng.status.airport.events.AirportEvent; +import com.tuoheng.status.airport.platform.strategy.PlatformAction; import com.tuoheng.status.airport.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.action.Action; -import org.springframework.stereotype.Component; /** - * 机巢离线动作 + * Base action for airport offline handling; platform implementations extend this. */ -@Component -public class OfflineAction implements Action { - - @Override - public void execute(StateContext stateContext) { - System.out.println("执行机巢离线操作"); - // TODO: 实现机巢离线的具体逻辑 - } +public abstract class OfflineAction implements PlatformAction { } + diff --git a/src/main/java/com/tuoheng/status/airport/action/airport/OnlineAction.java b/src/main/java/com/tuoheng/status/airport/action/airport/OnlineAction.java index 2348773..681c572 100644 --- a/src/main/java/com/tuoheng/status/airport/action/airport/OnlineAction.java +++ b/src/main/java/com/tuoheng/status/airport/action/airport/OnlineAction.java @@ -1,18 +1,12 @@ package com.tuoheng.status.airport.action.airport; import com.tuoheng.status.airport.events.AirportEvent; +import com.tuoheng.status.airport.platform.strategy.PlatformAction; import com.tuoheng.status.airport.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.action.Action; -import org.springframework.statemachine.guard.Guard; -import org.springframework.stereotype.Component; - -@Component -public class OnlineAction implements Action { - - @Override - public void execute(StateContext stateContext) { - - } +/** + * Base action for airport online handling; platform implementations extend this. + */ +public abstract class OnlineAction implements PlatformAction { } + diff --git a/src/main/java/com/tuoheng/status/airport/action/cover/CloseCoverAction.java b/src/main/java/com/tuoheng/status/airport/action/cover/CloseCoverAction.java index 9d3a0c7..3bca989 100644 --- a/src/main/java/com/tuoheng/status/airport/action/cover/CloseCoverAction.java +++ b/src/main/java/com/tuoheng/status/airport/action/cover/CloseCoverAction.java @@ -1,20 +1,12 @@ package com.tuoheng.status.airport.action.cover; -import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.action.Action; -import org.springframework.stereotype.Component; +import com.tuoheng.status.airport.events.CoverEvent; +import com.tuoheng.status.airport.platform.strategy.PlatformAction; +import com.tuoheng.status.airport.status.CoverState; /** - * 关舱动作 + * Base action for closing the cover; platform implementations extend this. */ -@Component -public class CloseCoverAction implements Action { - - @Override - public void execute(StateContext stateContext) { - System.out.println("执行关舱操作"); - // TODO: 发送 cover_close 指令 - } +public abstract class CloseCoverAction implements PlatformAction { } + diff --git a/src/main/java/com/tuoheng/status/airport/action/cover/CoverClosedAction.java b/src/main/java/com/tuoheng/status/airport/action/cover/CoverClosedAction.java index fb9d647..b89224d 100644 --- a/src/main/java/com/tuoheng/status/airport/action/cover/CoverClosedAction.java +++ b/src/main/java/com/tuoheng/status/airport/action/cover/CoverClosedAction.java @@ -1,21 +1,12 @@ package com.tuoheng.status.airport.action.cover; -import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.action.Action; -import org.springframework.stereotype.Component; +import com.tuoheng.status.airport.events.CoverEvent; +import com.tuoheng.status.airport.platform.strategy.PlatformAction; +import com.tuoheng.status.airport.status.CoverState; /** - * 舱门关闭完成动作 - * 处理舱门完全关闭后的逻辑 + * Base action for cover-closed handling; platform implementations extend this. */ -@Component -public class CoverClosedAction implements Action { - - @Override - public void execute(StateContext stateContext) { - System.out.println("舱门已完全关闭,执行后续处理"); - // TODO: 舱门关闭完成后的处理逻辑(例如:记录日志、自动关闭调试模式等) - } +public abstract class CoverClosedAction implements PlatformAction { } + diff --git a/src/main/java/com/tuoheng/status/airport/action/cover/CoverOpenedAction.java b/src/main/java/com/tuoheng/status/airport/action/cover/CoverOpenedAction.java index 7b948a9..53a6aac 100644 --- a/src/main/java/com/tuoheng/status/airport/action/cover/CoverOpenedAction.java +++ b/src/main/java/com/tuoheng/status/airport/action/cover/CoverOpenedAction.java @@ -1,21 +1,12 @@ package com.tuoheng.status.airport.action.cover; -import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.action.Action; -import org.springframework.stereotype.Component; +import com.tuoheng.status.airport.events.CoverEvent; +import com.tuoheng.status.airport.platform.strategy.PlatformAction; +import com.tuoheng.status.airport.status.CoverState; /** - * 舱门打开完成动作 - * 处理舱门完全打开后的逻辑 + * Base action for cover-opened handling; platform implementations extend this. */ -@Component -public class CoverOpenedAction implements Action { - - @Override - public void execute(StateContext stateContext) { - System.out.println("舱门已完全打开,执行后续处理"); - // TODO: 舱门打开完成后的处理逻辑(例如:记录日志、通知相关模块等) - } +public abstract class CoverOpenedAction implements PlatformAction { } + diff --git a/src/main/java/com/tuoheng/status/airport/action/cover/OpenCoverAction.java b/src/main/java/com/tuoheng/status/airport/action/cover/OpenCoverAction.java index 77370f7..816efb5 100644 --- a/src/main/java/com/tuoheng/status/airport/action/cover/OpenCoverAction.java +++ b/src/main/java/com/tuoheng/status/airport/action/cover/OpenCoverAction.java @@ -1,20 +1,12 @@ package com.tuoheng.status.airport.action.cover; -import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.action.Action; -import org.springframework.stereotype.Component; +import com.tuoheng.status.airport.events.CoverEvent; +import com.tuoheng.status.airport.platform.strategy.PlatformAction; +import com.tuoheng.status.airport.status.CoverState; /** - * 开舱动作 + * Base action for opening the cover; platform implementations extend this. */ -@Component -public class OpenCoverAction implements Action { - - @Override - public void execute(StateContext stateContext) { - System.out.println("执行开舱操作"); - // TODO: 发送 cover_open 指令 - } +public abstract class OpenCoverAction implements PlatformAction { } + diff --git a/src/main/java/com/tuoheng/status/airport/action/debug/CloseDebugModeAction.java b/src/main/java/com/tuoheng/status/airport/action/debug/CloseDebugModeAction.java index ab7ecf4..cd53398 100644 --- a/src/main/java/com/tuoheng/status/airport/action/debug/CloseDebugModeAction.java +++ b/src/main/java/com/tuoheng/status/airport/action/debug/CloseDebugModeAction.java @@ -1,20 +1,12 @@ package com.tuoheng.status.airport.action.debug; import com.tuoheng.status.airport.events.AirportEvent; +import com.tuoheng.status.airport.platform.strategy.PlatformAction; import com.tuoheng.status.airport.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.action.Action; -import org.springframework.stereotype.Component; /** - * 关闭调试模式动作 + * Base action for closing debug mode; platform implementations extend this. */ -@Component -public class CloseDebugModeAction implements Action { - - @Override - public void execute(StateContext stateContext) { - System.out.println("执行关闭调试模式操作"); - // TODO: 发送 debug_mode_close 指令 - } +public abstract class CloseDebugModeAction implements PlatformAction { } + diff --git a/src/main/java/com/tuoheng/status/airport/action/debug/OpenDebugModeAction.java b/src/main/java/com/tuoheng/status/airport/action/debug/OpenDebugModeAction.java index 5a6fa70..d86baef 100644 --- a/src/main/java/com/tuoheng/status/airport/action/debug/OpenDebugModeAction.java +++ b/src/main/java/com/tuoheng/status/airport/action/debug/OpenDebugModeAction.java @@ -1,20 +1,12 @@ package com.tuoheng.status.airport.action.debug; import com.tuoheng.status.airport.events.AirportEvent; +import com.tuoheng.status.airport.platform.strategy.PlatformAction; import com.tuoheng.status.airport.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.action.Action; -import org.springframework.stereotype.Component; /** - * 开启调试模式动作 + * Base action for opening debug mode; platform implementations extend this. */ -@Component -public class OpenDebugModeAction implements Action { - - @Override - public void execute(StateContext stateContext) { - System.out.println("执行开启调试模式操作"); - // TODO: 发送 debug_mode_open 指令 - } +public abstract class OpenDebugModeAction implements PlatformAction { } + diff --git a/src/main/java/com/tuoheng/status/airport/action/reboot/RebootAction.java b/src/main/java/com/tuoheng/status/airport/action/reboot/RebootAction.java index 8a41802..7a9e9ce 100644 --- a/src/main/java/com/tuoheng/status/airport/action/reboot/RebootAction.java +++ b/src/main/java/com/tuoheng/status/airport/action/reboot/RebootAction.java @@ -1,20 +1,12 @@ package com.tuoheng.status.airport.action.reboot; import com.tuoheng.status.airport.events.AirportEvent; +import com.tuoheng.status.airport.platform.strategy.PlatformAction; import com.tuoheng.status.airport.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.action.Action; -import org.springframework.stereotype.Component; /** - * 机巢重启动作 + * Base action for rebooting; platform implementations extend this. */ -@Component -public class RebootAction implements Action { - - @Override - public void execute(StateContext stateContext) { - System.out.println("执行机巢重启操作"); - // TODO: 发送 device_reboot 指令 - } +public abstract class RebootAction implements PlatformAction { } + diff --git a/src/main/java/com/tuoheng/status/airport/action/reboot/RebootCompletedAction.java b/src/main/java/com/tuoheng/status/airport/action/reboot/RebootCompletedAction.java index 67553a1..807d9ff 100644 --- a/src/main/java/com/tuoheng/status/airport/action/reboot/RebootCompletedAction.java +++ b/src/main/java/com/tuoheng/status/airport/action/reboot/RebootCompletedAction.java @@ -1,21 +1,12 @@ package com.tuoheng.status.airport.action.reboot; import com.tuoheng.status.airport.events.AirportEvent; +import com.tuoheng.status.airport.platform.strategy.PlatformAction; import com.tuoheng.status.airport.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.action.Action; -import org.springframework.stereotype.Component; /** - * 机巢重启完成动作 - * 处理机巢重启完成后的逻辑 + * Base action for completing reboot; platform implementations extend this. */ -@Component -public class RebootCompletedAction implements Action { - - @Override - public void execute(StateContext stateContext) { - System.out.println("机巢重启完成,执行初始化处理"); - // TODO: 机巢重启完成后的处理逻辑(例如:重新初始化、恢复状态等) - } +public abstract class RebootCompletedAction implements PlatformAction { } + diff --git a/src/main/java/com/tuoheng/status/airport/demo/AirportSystemDemo.java b/src/main/java/com/tuoheng/status/airport/demo/AirportSystemDemo.java deleted file mode 100644 index 09d0a58..0000000 --- a/src/main/java/com/tuoheng/status/airport/demo/AirportSystemDemo.java +++ /dev/null @@ -1,128 +0,0 @@ -package com.tuoheng.status.airport.demo; - -import com.tuoheng.status.airport.manager.AirportSystemManager; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -/** - * 机巢系统演示(组合状态机方案) - */ -public class AirportSystemDemo { - - public static void main(String[] args) throws InterruptedException { - - // 创建 Spring 上下文 - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); - - // 扫描配置类、服务类和监听器类 - context.scan("com.tuoheng.status.airport"); - context.refresh(); - - // 获取 AirportSystemManager - AirportSystemManager systemManager = context.getBean(AirportSystemManager.class); - - System.out.println("\n========== 机巢系统演示开始(组合状态机方案) ==========\n"); - - String airportSn = "airport-001"; - - // ==================== 场景1: 机巢上线 ==================== - System.out.println("【场景1】机巢上线"); - System.out.println("----------------------------------------"); - systemManager.airportOnline(airportSn); - System.out.println(" " + systemManager.getFullStatus(airportSn)); - System.out.println(); - Thread.sleep(500); - - // ==================== 场景2: 开舱流程 ==================== - System.out.println("【场景2】开舱流程"); - System.out.println("----------------------------------------"); - - System.out.println("1. 开启调试模式"); - systemManager.openDebugMode(airportSn); - System.out.println(" " + systemManager.getFullStatus(airportSn)); - System.out.println(); - Thread.sleep(500); - - System.out.println("2. 开舱"); - systemManager.openCover(airportSn); - System.out.println(" " + systemManager.getFullStatus(airportSn)); - System.out.println(); - Thread.sleep(500); - - System.out.println("3. 舱门打开完成"); - systemManager.coverOpened(airportSn); - System.out.println(" " + systemManager.getFullStatus(airportSn)); - System.out.println(); - Thread.sleep(500); - - // ==================== 场景3: 关舱流程 ==================== - System.out.println("【场景3】关舱流程"); - System.out.println("----------------------------------------"); - - System.out.println("4. 关舱"); - systemManager.closeCover(airportSn); - System.out.println(" " + systemManager.getFullStatus(airportSn)); - System.out.println(); - Thread.sleep(500); - - System.out.println("5. 舱门关闭完成"); - systemManager.coverClosed(airportSn); - System.out.println(" " + systemManager.getFullStatus(airportSn)); - System.out.println(); - Thread.sleep(500); - - System.out.println("6. 关闭调试模式"); - systemManager.closeDebugMode(airportSn); - System.out.println(" " + systemManager.getFullStatus(airportSn)); - System.out.println(); - Thread.sleep(500); - - // ==================== 场景4: 状态查询 ==================== - System.out.println("【场景4】状态查询"); - System.out.println("----------------------------------------"); - System.out.println("机巢状态: " + systemManager.getAirportState(airportSn)); - System.out.println("舱门状态: " + systemManager.getCoverState(airportSn)); - System.out.println("完整状态: " + systemManager.getFullStatus(airportSn)); - System.out.println(); - - // ==================== 场景5: 机巢重启 ==================== - System.out.println("【场景5】机巢重启"); - System.out.println("----------------------------------------"); - - System.out.println("7. 开启调试模式"); - systemManager.openDebugMode(airportSn); - System.out.println(" " + systemManager.getFullStatus(airportSn)); - System.out.println(); - Thread.sleep(500); - - System.out.println("8. 机巢重启"); - systemManager.rebootAirport(airportSn); - System.out.println(" " + systemManager.getFullStatus(airportSn)); - System.out.println(); - Thread.sleep(500); - - System.out.println("9. 重启完成"); - systemManager.rebootCompleted(airportSn); - System.out.println(" " + systemManager.getFullStatus(airportSn)); - System.out.println(); - - // ==================== 场景6: 错误处理 ==================== - System.out.println("【场景6】错误处理(Guard拦截)"); - System.out.println("----------------------------------------"); - - System.out.println("10. 尝试在待机状态下开舱(应该失败)"); - boolean result = systemManager.openCover(airportSn); - System.out.println(" 操作结果: " + (result ? "成功" : "失败")); - System.out.println(" " + systemManager.getFullStatus(airportSn)); - System.out.println(); - - System.out.println("\n========== 机巢系统演示结束 ==========\n"); - - System.out.println("✅ 组合状态机方案优势:"); - System.out.println(" 1. 机巢状态和舱门状态独立管理"); - System.out.println(" 2. 状态层级扁平,易于理解"); - System.out.println(" 3. 易于扩展(可添加推杆、无人机等状态机)"); - System.out.println(" 4. 职责清晰,维护方便"); - - context.close(); - } -} diff --git a/src/main/java/com/tuoheng/status/airport/demo/MultiPlatformDemo.java b/src/main/java/com/tuoheng/status/airport/demo/MultiPlatformDemo.java index d716097..a6b7c83 100644 --- a/src/main/java/com/tuoheng/status/airport/demo/MultiPlatformDemo.java +++ b/src/main/java/com/tuoheng/status/airport/demo/MultiPlatformDemo.java @@ -1,7 +1,6 @@ package com.tuoheng.status.airport.demo; import com.tuoheng.status.airport.manager.AirportSystemManager; -import com.tuoheng.status.airport.platform.PlatformType; import com.tuoheng.status.airport.platform.factory.PlatformStrategyFactory; import com.tuoheng.status.airport.platform.repository.AirportPlatformRepository; import org.springframework.context.annotation.AnnotationConfigApplicationContext; @@ -22,7 +21,6 @@ public class MultiPlatformDemo { context.refresh(); // 获取必要的Bean - AirportSystemManager systemManager = context.getBean(AirportSystemManager.class); PlatformStrategyFactory strategyFactory = context.getBean(PlatformStrategyFactory.class); AirportPlatformRepository repository = context.getBean(AirportPlatformRepository.class); @@ -38,22 +36,25 @@ public class MultiPlatformDemo { System.out.println("1. DJI机巢上线: " + djiAirport); System.out.println(" 平台类型: " + strategyFactory.getPlatformType(djiAirport).getName()); - systemManager.airportOnline(djiAirport); - System.out.println(" " + systemManager.getFullStatus(djiAirport)); + AirportSystemManager djiManager = strategyFactory.getSystemManager(djiAirport); + djiManager.airportOnline(djiAirport); + System.out.println(" " + djiManager.getFullStatus(djiAirport)); System.out.println(); Thread.sleep(500); System.out.println("2. AUTEL机巢上线: " + autelAirport); System.out.println(" 平台类型: " + strategyFactory.getPlatformType(autelAirport).getName()); - systemManager.airportOnline(autelAirport); - System.out.println(" " + systemManager.getFullStatus(autelAirport)); + AirportSystemManager autelManager = strategyFactory.getSystemManager(autelAirport); + autelManager.airportOnline(autelAirport); + System.out.println(" " + autelManager.getFullStatus(autelAirport)); System.out.println(); Thread.sleep(500); System.out.println("3. 另一个DJI机巢上线: " + djiAirport2); System.out.println(" 平台类型: " + strategyFactory.getPlatformType(djiAirport2).getName()); - systemManager.airportOnline(djiAirport2); - System.out.println(" " + systemManager.getFullStatus(djiAirport2)); + AirportSystemManager djiManager2 = strategyFactory.getSystemManager(djiAirport2); + djiManager2.airportOnline(djiAirport2); + System.out.println(" " + djiManager2.getFullStatus(djiAirport2)); System.out.println(); Thread.sleep(500); @@ -62,20 +63,20 @@ public class MultiPlatformDemo { System.out.println("----------------------------------------"); System.out.println("4. DJI机巢开启调试模式: " + djiAirport); - systemManager.openDebugMode(djiAirport); - System.out.println(" " + systemManager.getFullStatus(djiAirport)); + djiManager.openDebugMode(djiAirport); + System.out.println(" " + djiManager.getFullStatus(djiAirport)); System.out.println(); Thread.sleep(500); System.out.println("5. DJI机巢开舱: " + djiAirport); - systemManager.openCover(djiAirport); - System.out.println(" " + systemManager.getFullStatus(djiAirport)); + djiManager.openCover(djiAirport); + System.out.println(" " + djiManager.getFullStatus(djiAirport)); System.out.println(); Thread.sleep(500); System.out.println("6. DJI机巢舱门打开完成: " + djiAirport); - systemManager.coverOpened(djiAirport); - System.out.println(" " + systemManager.getFullStatus(djiAirport)); + djiManager.coverOpened(djiAirport); + System.out.println(" " + djiManager.getFullStatus(djiAirport)); System.out.println(); Thread.sleep(500); @@ -84,23 +85,23 @@ public class MultiPlatformDemo { System.out.println("----------------------------------------"); System.out.println("7. AUTEL机巢开启调试模式: " + autelAirport); - systemManager.openDebugMode(autelAirport); - System.out.println(" " + systemManager.getFullStatus(autelAirport)); + autelManager.openDebugMode(autelAirport); + System.out.println(" " + autelManager.getFullStatus(autelAirport)); System.out.println(); Thread.sleep(500); System.out.println("8. AUTEL机巢开舱: " + autelAirport); - systemManager.openCover(autelAirport); - System.out.println(" " + systemManager.getFullStatus(autelAirport)); + autelManager.openCover(autelAirport); + System.out.println(" " + autelManager.getFullStatus(autelAirport)); System.out.println(); Thread.sleep(500); // ==================== 场景4: 查看所有机巢状态 ==================== System.out.println("【场景4】查看所有机巢当前状态"); System.out.println("----------------------------------------"); - System.out.println("DJI机巢-001: " + systemManager.getFullStatus(djiAirport)); - System.out.println("AUTEL机巢-002: " + systemManager.getFullStatus(autelAirport)); - System.out.println("DJI机巢-003: " + systemManager.getFullStatus(djiAirport2)); + System.out.println("DJI机巢-001: " + djiManager.getFullStatus(djiAirport)); + System.out.println("AUTEL机巢-002: " + autelManager.getFullStatus(autelAirport)); + System.out.println("DJI机巢-003: " + djiManager2.getFullStatus(djiAirport2)); System.out.println(); Thread.sleep(500); @@ -109,14 +110,14 @@ public class MultiPlatformDemo { System.out.println("----------------------------------------"); System.out.println("9. DJI机巢关舱: " + djiAirport); - systemManager.closeCover(djiAirport); - System.out.println(" " + systemManager.getFullStatus(djiAirport)); + djiManager.closeCover(djiAirport); + System.out.println(" " + djiManager.getFullStatus(djiAirport)); System.out.println(); Thread.sleep(500); System.out.println("10. DJI机巢舱门关闭完成: " + djiAirport); - systemManager.coverClosed(djiAirport); - System.out.println(" " + systemManager.getFullStatus(djiAirport)); + djiManager.coverClosed(djiAirport); + System.out.println(" " + djiManager.getFullStatus(djiAirport)); System.out.println(); Thread.sleep(500); @@ -127,8 +128,9 @@ public class MultiPlatformDemo { String yuneecAirport = "airport-004"; System.out.println("11. 注册YUNEEC平台机巢: " + yuneecAirport); System.out.println(" 平台类型: " + strategyFactory.getPlatformType(yuneecAirport).getName()); - systemManager.airportOnline(yuneecAirport); - System.out.println(" " + systemManager.getFullStatus(yuneecAirport)); + AirportSystemManager yuneecManager = strategyFactory.getSystemManager(yuneecAirport); + yuneecManager.airportOnline(yuneecAirport); + System.out.println(" " + yuneecManager.getFullStatus(yuneecAirport)); System.out.println(); // ==================== 场景7: 最终状态汇总 ==================== @@ -139,19 +141,19 @@ public class MultiPlatformDemo { System.out.println(String.format("%-20s %-15s %s", djiAirport, strategyFactory.getPlatformType(djiAirport).getName(), - systemManager.getFullStatus(djiAirport))); + djiManager.getFullStatus(djiAirport))); System.out.println(String.format("%-20s %-15s %s", autelAirport, strategyFactory.getPlatformType(autelAirport).getName(), - systemManager.getFullStatus(autelAirport))); + autelManager.getFullStatus(autelAirport))); System.out.println(String.format("%-20s %-15s %s", djiAirport2, strategyFactory.getPlatformType(djiAirport2).getName(), - systemManager.getFullStatus(djiAirport2))); + djiManager2.getFullStatus(djiAirport2))); System.out.println(String.format("%-20s %-15s %s", yuneecAirport, strategyFactory.getPlatformType(yuneecAirport).getName(), - systemManager.getFullStatus(yuneecAirport))); + yuneecManager.getFullStatus(yuneecAirport))); System.out.println(); System.out.println("\n========== 多平台机巢系统演示结束 ==========\n"); diff --git a/src/main/java/com/tuoheng/status/airport/guard/airport/CanOfflineGuard.java b/src/main/java/com/tuoheng/status/airport/guard/airport/CanOfflineGuard.java index bbb0ef8..0585be3 100644 --- a/src/main/java/com/tuoheng/status/airport/guard/airport/CanOfflineGuard.java +++ b/src/main/java/com/tuoheng/status/airport/guard/airport/CanOfflineGuard.java @@ -1,21 +1,12 @@ package com.tuoheng.status.airport.guard.airport; import com.tuoheng.status.airport.events.AirportEvent; +import com.tuoheng.status.airport.platform.strategy.PlatformGuard; import com.tuoheng.status.airport.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.guard.Guard; -import org.springframework.stereotype.Component; /** - * 检查机巢是否可以离线 + * Base guard for checking if an airport can go offline; platform implementations extend this. */ -@Component -public class CanOfflineGuard implements Guard { - - @Override - public boolean evaluate(StateContext stateContext) { - // TODO: 检查机巢是否可以安全离线(例如:无人机已降落、舱门已关闭等) - System.out.println("检查机巢是否可以离线"); - return true; - } +public abstract class CanOfflineGuard implements PlatformGuard { } + diff --git a/src/main/java/com/tuoheng/status/airport/guard/airport/CanOnlineGuard.java b/src/main/java/com/tuoheng/status/airport/guard/airport/CanOnlineGuard.java index 2c35ac9..a6ab3fb 100644 --- a/src/main/java/com/tuoheng/status/airport/guard/airport/CanOnlineGuard.java +++ b/src/main/java/com/tuoheng/status/airport/guard/airport/CanOnlineGuard.java @@ -1,21 +1,12 @@ package com.tuoheng.status.airport.guard.airport; import com.tuoheng.status.airport.events.AirportEvent; +import com.tuoheng.status.airport.platform.strategy.PlatformGuard; import com.tuoheng.status.airport.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.guard.Guard; -import org.springframework.stereotype.Component; /** - * 检查机巢是否可以上线 + * Base guard for checking if an airport can go online; platform implementations extend this. */ -@Component -public class CanOnlineGuard implements Guard { - - @Override - public boolean evaluate(StateContext stateContext) { - // TODO: 检查机巢是否可以上线(例如:设备状态正常、网络连接正常等) - System.out.println("检查机巢是否可以上线"); - return true; - } +public abstract class CanOnlineGuard implements PlatformGuard { } + diff --git a/src/main/java/com/tuoheng/status/airport/guard/airport/IsAirportOnlineGuard.java b/src/main/java/com/tuoheng/status/airport/guard/airport/IsAirportOnlineGuard.java index fd260f5..39ed05e 100644 --- a/src/main/java/com/tuoheng/status/airport/guard/airport/IsAirportOnlineGuard.java +++ b/src/main/java/com/tuoheng/status/airport/guard/airport/IsAirportOnlineGuard.java @@ -1,21 +1,12 @@ package com.tuoheng.status.airport.guard.airport; import com.tuoheng.status.airport.events.AirportEvent; +import com.tuoheng.status.airport.platform.strategy.PlatformGuard; import com.tuoheng.status.airport.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.guard.Guard; -import org.springframework.stereotype.Component; /** - * 检查机巢是否在线 + * Base guard for checking airport online status; platform implementations extend this. */ -@Component -public class IsAirportOnlineGuard implements Guard { - - @Override - public boolean evaluate(StateContext stateContext) { - // TODO: 检查机巢是否在线 - System.out.println("检查机巢是否在线"); - return true; - } +public abstract class IsAirportOnlineGuard implements PlatformGuard { } + diff --git a/src/main/java/com/tuoheng/status/airport/guard/cover/CanCloseCoverGuard.java b/src/main/java/com/tuoheng/status/airport/guard/cover/CanCloseCoverGuard.java index 43d200b..1f29e13 100644 --- a/src/main/java/com/tuoheng/status/airport/guard/cover/CanCloseCoverGuard.java +++ b/src/main/java/com/tuoheng/status/airport/guard/cover/CanCloseCoverGuard.java @@ -1,22 +1,12 @@ package com.tuoheng.status.airport.guard.cover; -import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.guard.Guard; -import org.springframework.stereotype.Component; +import com.tuoheng.status.airport.events.CoverEvent; +import com.tuoheng.status.airport.platform.strategy.PlatformGuard; +import com.tuoheng.status.airport.status.CoverState; /** - * 检查是否可以关舱 - * 条件:舱门状态不是已关闭 + * Base guard for closing the cover; platform implementations extend this. */ -@Component -public class CanCloseCoverGuard implements Guard { - - @Override - public boolean evaluate(StateContext stateContext) { - // TODO: 检查当前舱门状态不是已关闭 - System.out.println("检查是否可以关舱"); - return true; - } +public abstract class CanCloseCoverGuard implements PlatformGuard { } + diff --git a/src/main/java/com/tuoheng/status/airport/guard/cover/CanOpenCoverGuard.java b/src/main/java/com/tuoheng/status/airport/guard/cover/CanOpenCoverGuard.java index 0245630..357d44f 100644 --- a/src/main/java/com/tuoheng/status/airport/guard/cover/CanOpenCoverGuard.java +++ b/src/main/java/com/tuoheng/status/airport/guard/cover/CanOpenCoverGuard.java @@ -1,22 +1,12 @@ package com.tuoheng.status.airport.guard.cover; -import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.guard.Guard; -import org.springframework.stereotype.Component; +import com.tuoheng.status.airport.events.CoverEvent; +import com.tuoheng.status.airport.platform.strategy.PlatformGuard; +import com.tuoheng.status.airport.status.CoverState; /** - * 检查是否可以开舱 - * 条件:舱门状态不是已打开 + * Base guard for opening the cover; platform implementations extend this. */ -@Component -public class CanOpenCoverGuard implements Guard { - - @Override - public boolean evaluate(StateContext stateContext) { - // TODO: 检查当前舱门状态不是已打开 - System.out.println("检查是否可以开舱"); - return true; - } +public abstract class CanOpenCoverGuard implements PlatformGuard { } + diff --git a/src/main/java/com/tuoheng/status/airport/guard/cover/IsCoverClosedGuard.java b/src/main/java/com/tuoheng/status/airport/guard/cover/IsCoverClosedGuard.java index 4d32dbb..b850984 100644 --- a/src/main/java/com/tuoheng/status/airport/guard/cover/IsCoverClosedGuard.java +++ b/src/main/java/com/tuoheng/status/airport/guard/cover/IsCoverClosedGuard.java @@ -1,22 +1,12 @@ package com.tuoheng.status.airport.guard.cover; -import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.guard.Guard; -import org.springframework.stereotype.Component; +import com.tuoheng.status.airport.events.CoverEvent; +import com.tuoheng.status.airport.platform.strategy.PlatformGuard; +import com.tuoheng.status.airport.status.CoverState; /** - * 检查舱门是否已完全关闭 - * 用于验证 COVER_CLOSED 事件的有效性 + * Base guard for verifying the cover is closed; platform implementations extend this. */ -@Component -public class IsCoverClosedGuard implements Guard { - - @Override - public boolean evaluate(StateContext stateContext) { - // TODO: 检查舱门是否已完全关闭(通过OSD状态确认) - System.out.println("检查舱门是否已完全关闭"); - return true; - } +public abstract class IsCoverClosedGuard implements PlatformGuard { } + diff --git a/src/main/java/com/tuoheng/status/airport/guard/cover/IsCoverOpenedGuard.java b/src/main/java/com/tuoheng/status/airport/guard/cover/IsCoverOpenedGuard.java index ddac6f2..22d6e9c 100644 --- a/src/main/java/com/tuoheng/status/airport/guard/cover/IsCoverOpenedGuard.java +++ b/src/main/java/com/tuoheng/status/airport/guard/cover/IsCoverOpenedGuard.java @@ -1,22 +1,12 @@ package com.tuoheng.status.airport.guard.cover; -import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.guard.Guard; -import org.springframework.stereotype.Component; +import com.tuoheng.status.airport.events.CoverEvent; +import com.tuoheng.status.airport.platform.strategy.PlatformGuard; +import com.tuoheng.status.airport.status.CoverState; /** - * 检查舱门是否已完全打开 - * 用于验证 COVER_OPENED 事件的有效性 + * Base guard for verifying the cover is opened; platform implementations extend this. */ -@Component -public class IsCoverOpenedGuard implements Guard { - - @Override - public boolean evaluate(StateContext stateContext) { - // TODO: 检查舱门是否已完全打开(通过OSD状态确认) - System.out.println("检查舱门是否已完全打开"); - return true; - } +public abstract class IsCoverOpenedGuard implements PlatformGuard { } + diff --git a/src/main/java/com/tuoheng/status/airport/guard/debug/CanCloseDebugModeGuard.java b/src/main/java/com/tuoheng/status/airport/guard/debug/CanCloseDebugModeGuard.java index ff0faa2..61ca62f 100644 --- a/src/main/java/com/tuoheng/status/airport/guard/debug/CanCloseDebugModeGuard.java +++ b/src/main/java/com/tuoheng/status/airport/guard/debug/CanCloseDebugModeGuard.java @@ -1,21 +1,12 @@ package com.tuoheng.status.airport.guard.debug; import com.tuoheng.status.airport.events.AirportEvent; +import com.tuoheng.status.airport.platform.strategy.PlatformGuard; import com.tuoheng.status.airport.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.guard.Guard; -import org.springframework.stereotype.Component; /** - * 检查是否可以关闭调试模式 + * Base guard for closing debug mode; platform implementations extend this. */ -@Component -public class CanCloseDebugModeGuard implements Guard { - - @Override - public boolean evaluate(StateContext stateContext) { - // TODO: 检查是否可以关闭调试模式(例如:没有正在进行的操作) - System.out.println("检查是否可以关闭调试模式"); - return true; - } +public abstract class CanCloseDebugModeGuard implements PlatformGuard { } + diff --git a/src/main/java/com/tuoheng/status/airport/guard/debug/IsDebugModeGuard.java b/src/main/java/com/tuoheng/status/airport/guard/debug/IsDebugModeGuard.java index 7b897c3..e6f4ebc 100644 --- a/src/main/java/com/tuoheng/status/airport/guard/debug/IsDebugModeGuard.java +++ b/src/main/java/com/tuoheng/status/airport/guard/debug/IsDebugModeGuard.java @@ -1,21 +1,12 @@ package com.tuoheng.status.airport.guard.debug; import com.tuoheng.status.airport.events.AirportEvent; +import com.tuoheng.status.airport.platform.strategy.PlatformGuard; import com.tuoheng.status.airport.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.guard.Guard; -import org.springframework.stereotype.Component; /** - * 检查是否处于调试模式 + * Base guard for checking debug mode; platform implementations extend this. */ -@Component -public class IsDebugModeGuard implements Guard { - - @Override - public boolean evaluate(StateContext stateContext) { - // TODO: 检查当前是否处于调试模式 - System.out.println("检查是否处于调试模式"); - return true; - } +public abstract class IsDebugModeGuard implements PlatformGuard { } + diff --git a/src/main/java/com/tuoheng/status/airport/guard/debug/IsNotDebugModeGuard.java b/src/main/java/com/tuoheng/status/airport/guard/debug/IsNotDebugModeGuard.java index 74426c7..9768fd3 100644 --- a/src/main/java/com/tuoheng/status/airport/guard/debug/IsNotDebugModeGuard.java +++ b/src/main/java/com/tuoheng/status/airport/guard/debug/IsNotDebugModeGuard.java @@ -1,21 +1,12 @@ package com.tuoheng.status.airport.guard.debug; import com.tuoheng.status.airport.events.AirportEvent; +import com.tuoheng.status.airport.platform.strategy.PlatformGuard; import com.tuoheng.status.airport.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.guard.Guard; -import org.springframework.stereotype.Component; /** - * 检查是否不处于调试模式 + * Base guard for checking non-debug mode; platform implementations extend this. */ -@Component -public class IsNotDebugModeGuard implements Guard { - - @Override - public boolean evaluate(StateContext stateContext) { - // TODO: 检查当前不处于调试模式 - System.out.println("检查是否不处于调试模式"); - return true; - } +public abstract class IsNotDebugModeGuard implements PlatformGuard { } + diff --git a/src/main/java/com/tuoheng/status/airport/guard/reboot/IsRebootCompletedGuard.java b/src/main/java/com/tuoheng/status/airport/guard/reboot/IsRebootCompletedGuard.java index 2e5c414..d8e9da5 100644 --- a/src/main/java/com/tuoheng/status/airport/guard/reboot/IsRebootCompletedGuard.java +++ b/src/main/java/com/tuoheng/status/airport/guard/reboot/IsRebootCompletedGuard.java @@ -1,21 +1,12 @@ package com.tuoheng.status.airport.guard.reboot; import com.tuoheng.status.airport.events.AirportEvent; +import com.tuoheng.status.airport.platform.strategy.PlatformGuard; import com.tuoheng.status.airport.status.AirportState; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.guard.Guard; -import org.springframework.stereotype.Component; /** - * 检查机巢重启是否完成 + * Base guard for verifying reboot completion; platform implementations extend this. */ -@Component -public class IsRebootCompletedGuard implements Guard { - - @Override - public boolean evaluate(StateContext stateContext) { - // TODO: 检查机巢重启是否完成(通过Events事件确认) - System.out.println("检查机巢重启是否完成"); - return true; - } +public abstract class IsRebootCompletedGuard implements PlatformGuard { } + diff --git a/src/main/java/com/tuoheng/status/airport/listener/DefaultAirportListener.java b/src/main/java/com/tuoheng/status/airport/listener/DefaultAirportListener.java index a315e6d..78740e5 100644 --- a/src/main/java/com/tuoheng/status/airport/listener/DefaultAirportListener.java +++ b/src/main/java/com/tuoheng/status/airport/listener/DefaultAirportListener.java @@ -14,13 +14,9 @@ import org.springframework.stereotype.Component; * 默认机巢状态监听器 * 提供基础的状态变化监听功能,各平台可以继承并定制 */ -@Component -public class DefaultAirportListener implements PlatformListener { - @Override - public String getName() { - return "DefaultAirportListener"; - } +public abstract class DefaultAirportListener implements PlatformListener { + @Override public void stateChanged(State from, State to) { diff --git a/src/main/java/com/tuoheng/status/airport/listener/DefaultCoverListener.java b/src/main/java/com/tuoheng/status/airport/listener/DefaultCoverListener.java index 68b2dc7..0d2979b 100644 --- a/src/main/java/com/tuoheng/status/airport/listener/DefaultCoverListener.java +++ b/src/main/java/com/tuoheng/status/airport/listener/DefaultCoverListener.java @@ -14,8 +14,8 @@ import org.springframework.stereotype.Component; * 默认舱门状态监听器 * 提供基础的状态变化监听功能,各平台可以继承并定制 */ -@Component -public class DefaultCoverListener implements PlatformListener { + +public abstract class DefaultCoverListener implements PlatformListener { @Override public String getName() { diff --git a/src/main/java/com/tuoheng/status/airport/manager/AbstractAirportSystemManager.java b/src/main/java/com/tuoheng/status/airport/manager/AbstractAirportSystemManager.java new file mode 100644 index 0000000..b21e757 --- /dev/null +++ b/src/main/java/com/tuoheng/status/airport/manager/AbstractAirportSystemManager.java @@ -0,0 +1,26 @@ +package com.tuoheng.status.airport.manager; + +import com.tuoheng.status.airport.platform.PlatformType; +import com.tuoheng.status.airport.service.AirportMachineService; +import com.tuoheng.status.airport.service.CoverMachineService; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 机巢系统管理器抽象类 + * 提供通用的业务编排能力,具体实现可按需扩展 + */ +public abstract class AbstractAirportSystemManager implements AirportSystemManager { + + /** + * 子类需要声明自己支持的平台类型 + */ + @Override + public abstract PlatformType getPlatformType(); + + @Autowired + protected AirportMachineService airportService; + + @Autowired + protected CoverMachineService coverService; +} + diff --git a/src/main/java/com/tuoheng/status/airport/manager/AirportSystemManager.java b/src/main/java/com/tuoheng/status/airport/manager/AirportSystemManager.java index ccb4d45..625e682 100644 --- a/src/main/java/com/tuoheng/status/airport/manager/AirportSystemManager.java +++ b/src/main/java/com/tuoheng/status/airport/manager/AirportSystemManager.java @@ -1,154 +1,43 @@ package com.tuoheng.status.airport.manager; -import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.events.CoverEvent; -import com.tuoheng.status.airport.service.AirportMachineService; -import com.tuoheng.status.airport.service.CoverMachineService; +import com.tuoheng.status.airport.platform.PlatformType; import com.tuoheng.status.airport.status.AirportState; import com.tuoheng.status.airport.status.CoverState; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; /** - * 机巢系统管理器 - * 协调机巢状态机和舱门状态机 + * 机巢系统管理器接口 + * 抽象对外能力,便于后续扩展不同实现 */ -@Component -public class AirportSystemManager { - - @Autowired - private AirportMachineService airportService; - - @Autowired - private CoverMachineService coverService; +public interface AirportSystemManager { /** - * 机巢上线 + * 该Manager对应的平台类型 */ - public boolean airportOnline(String airportSn) { - return airportService.sendEvent(airportSn, AirportEvent.AIRPORT_ONLINE); - } + PlatformType getPlatformType(); - /** - * 机巢离线 - */ - public boolean airportOffline(String airportSn) { - return airportService.sendEvent(airportSn, AirportEvent.AIRPORT_OFFLINE); - } + boolean airportOnline(String airportSn); - /** - * 开启调试模式 - */ - public boolean openDebugMode(String airportSn) { - if (!airportService.isInState(airportSn, AirportState.ONLINE)) { - System.out.println("机巢未在线,无法开启调试模式"); - return false; - } - return airportService.sendEvent(airportSn, AirportEvent.DEBUG_MODE_OPEN); - } + boolean airportOffline(String airportSn); - /** - * 关闭调试模式 - */ - public boolean closeDebugMode(String airportSn) { - return airportService.sendEvent(airportSn, AirportEvent.DEBUG_MODE_CLOSE); - } + boolean openDebugMode(String airportSn); - /** - * 开舱 - */ - public boolean openCover(String airportSn) { - // 检查机巢是否在调试模式 - if (!airportService.isInState(airportSn, AirportState.DEBUG_MODE)) { - System.out.println("必须在调试模式下才能开舱"); - return false; - } + boolean closeDebugMode(String airportSn); - // 检查舱门是否已经打开 - if (coverService.isInState(airportSn, CoverState.OPENED)) { - System.out.println("舱门已经打开"); - return false; - } + boolean openCover(String airportSn); - // 发送开舱指令到舱门状态机 - return coverService.sendEvent(airportSn, CoverEvent.OPEN); - } + boolean coverOpened(String airportSn); - /** - * 舱门打开完成 - */ - public boolean coverOpened(String airportSn) { - return coverService.sendEvent(airportSn, CoverEvent.OPENED); - } + boolean closeCover(String airportSn); - /** - * 关舱 - */ - public boolean closeCover(String airportSn) { - // 检查机巢是否在调试模式 - if (!airportService.isInState(airportSn, AirportState.DEBUG_MODE)) { - System.out.println("必须在调试模式下才能关舱"); - return false; - } + boolean coverClosed(String airportSn); - // 检查舱门是否已经关闭 - if (coverService.isInState(airportSn, CoverState.CLOSED)) { - System.out.println("舱门已经关闭"); - return false; - } + boolean rebootAirport(String airportSn); - // 发送关舱指令到舱门状态机 - return coverService.sendEvent(airportSn, CoverEvent.CLOSE); - } + boolean rebootCompleted(String airportSn); - /** - * 舱门关闭完成 - */ - public boolean coverClosed(String airportSn) { - return coverService.sendEvent(airportSn, CoverEvent.CLOSED); - } + AirportState getAirportState(String airportSn); - /** - * 机巢重启 - */ - public boolean rebootAirport(String airportSn) { - if (!airportService.isInState(airportSn, AirportState.DEBUG_MODE)) { - System.out.println("必须在调试模式下才能重启"); - return false; - } - return airportService.sendEvent(airportSn, AirportEvent.AIRPORT_REBOOT); - } + CoverState getCoverState(String airportSn); - /** - * 重启完成 - */ - public boolean rebootCompleted(String airportSn) { - return airportService.sendEvent(airportSn, AirportEvent.REBOOT_COMPLETED); - } - - /** - * 获取机巢状态 - */ - public AirportState getAirportState(String airportSn) { - return airportService.getCurrentState(airportSn); - } - - /** - * 获取舱门状态 - */ - public CoverState getCoverState(String airportSn) { - return coverService.getCurrentState(airportSn); - } - - /** - * 获取完整状态信息 - */ - public String getFullStatus(String airportSn) { - AirportState airportState = getAirportState(airportSn); - CoverState coverState = getCoverState(airportSn); - - return String.format("机巢状态: %s, 舱门状态: %s", - airportState != null ? airportState : "未知", - coverState != null ? coverState : "未知"); - } + String getFullStatus(String airportSn); } diff --git a/src/main/java/com/tuoheng/status/airport/platform/factory/PlatformStrategyFactory.java b/src/main/java/com/tuoheng/status/airport/platform/factory/PlatformStrategyFactory.java index 80949c4..4a0e431 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/factory/PlatformStrategyFactory.java +++ b/src/main/java/com/tuoheng/status/airport/platform/factory/PlatformStrategyFactory.java @@ -1,5 +1,6 @@ package com.tuoheng.status.airport.platform.factory; +import com.tuoheng.status.airport.manager.AirportSystemManager; import com.tuoheng.status.airport.platform.PlatformType; import com.tuoheng.status.airport.platform.repository.AirportPlatformRepository; import com.tuoheng.status.airport.platform.strategy.AirportPlatformStrategy; @@ -35,6 +36,13 @@ public class PlatformStrategyFactory { */ private final Map coverStrategyMap = new ConcurrentHashMap<>(); + /** + * 存储各平台对应的系统管理器实现 + * Key: PlatformType + * Value: AirportSystemManager实现 + */ + private final Map managerMap = new ConcurrentHashMap<>(); + /** * 注册所有平台策略 * Spring会自动注入所有实现了AirportPlatformStrategy和CoverPlatformStrategy的Bean @@ -42,7 +50,8 @@ public class PlatformStrategyFactory { @Autowired public void registerStrategies( List airportStrategies, - List coverStrategies) { + List coverStrategies, + List systemManagers) { // 注册机巢策略 for (AirportPlatformStrategy strategy : airportStrategies) { @@ -57,6 +66,13 @@ public class PlatformStrategyFactory { System.out.println(String.format("注册舱门平台策略: %s -> %s", strategy.getPlatformType().getName(), strategy.getClass().getSimpleName())); } + + // 注册系统管理器 + for (AirportSystemManager manager : systemManagers) { + managerMap.put(manager.getPlatformType(), manager); + System.out.println(String.format("注册系统管理器: %s -> %s", + manager.getPlatformType().getName(), manager.getClass().getSimpleName())); + } } /** @@ -111,6 +127,30 @@ public class PlatformStrategyFactory { return strategy; } + /** + * 根据机巢SN获取对应的平台系统管理器 + * + * @param airportSn 机巢序列号 + * @return 对应平台的AirportSystemManager实现 + */ + public AirportSystemManager getSystemManager(String airportSn) { + PlatformType platformType = airportPlatformRepository.getPlatformType(airportSn); + + if (platformType == null) { + throw new IllegalArgumentException( + String.format("机巢未注册或平台类型未配置: %s", airportSn)); + } + + AirportSystemManager manager = managerMap.get(platformType); + + if (manager == null) { + throw new IllegalArgumentException( + String.format("未找到平台系统管理器: %s (机巢: %s)", platformType.getName(), airportSn)); + } + + return manager; + } + /** * 根据平台类型获取机巢平台策略 * diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/DjiAirportPlatformStrategy.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/DjiAirportPlatformStrategy.java index cd3686d..26688a7 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/DjiAirportPlatformStrategy.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/DjiAirportPlatformStrategy.java @@ -1,7 +1,7 @@ package com.tuoheng.status.airport.platform.impl.dji; import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.listener.DefaultAirportListener; +import com.tuoheng.status.airport.platform.impl.dji.listener.DjiAirportListener; import com.tuoheng.status.airport.platform.PlatformType; import com.tuoheng.status.airport.platform.impl.dji.action.airport.*; import com.tuoheng.status.airport.platform.impl.dji.guard.airport.*; @@ -13,9 +13,6 @@ import com.tuoheng.status.airport.status.AirportState; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - /** * DJI平台机巢策略实现 */ @@ -57,16 +54,11 @@ public class DjiAirportPlatformStrategy implements AirportPlatformStrategy { @Autowired private DjiRebootCompletedAction rebootCompletedAction; - /** * DJI平台的Listener实例(单例,所有DJI机巢共享) */ - private final PlatformListener djiListener = new DefaultAirportListener() { - @Override - public String getName() { - return "DjiAirportListener"; - } - }; + @Autowired + private DjiAirportListener djiListener; @Override public PlatformType getPlatformType() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/DjiAirportSystemManager.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/DjiAirportSystemManager.java new file mode 100644 index 0000000..3446229 --- /dev/null +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/DjiAirportSystemManager.java @@ -0,0 +1,117 @@ +package com.tuoheng.status.airport.platform.impl.dji; + +import com.tuoheng.status.airport.events.AirportEvent; +import com.tuoheng.status.airport.events.CoverEvent; + +import com.tuoheng.status.airport.manager.AbstractAirportSystemManager; +import com.tuoheng.status.airport.platform.PlatformType; +import com.tuoheng.status.airport.status.AirportState; +import com.tuoheng.status.airport.status.CoverState; +import org.springframework.stereotype.Component; + +/** + * 大疆平台机巢系统管理器实现 + */ +@Component +public class DjiAirportSystemManager extends AbstractAirportSystemManager { + + @Override + public PlatformType getPlatformType() { + return PlatformType.DJI; + } + + @Override + public boolean airportOnline(String airportSn) { + return airportService.sendEvent(airportSn, AirportEvent.AIRPORT_ONLINE); + } + + @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)) { + System.out.println("机巢未在线,无法开启调试模式"); + 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)) { + System.out.println("必须在调试模式下才能开舱"); + return false; + } + if (coverService.isInState(airportSn, CoverState.OPENED)) { + System.out.println("舱门已经打开"); + 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)) { + System.out.println("必须在调试模式下才能关舱"); + return false; + } + if (coverService.isInState(airportSn, CoverState.CLOSED)) { + System.out.println("舱门已经关闭"); + 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)) { + System.out.println("必须在调试模式下才能重启"); + 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/status/airport/platform/impl/dji/DjiCoverPlatformStrategy.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/DjiCoverPlatformStrategy.java index b8d0318..4194526 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/DjiCoverPlatformStrategy.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/DjiCoverPlatformStrategy.java @@ -1,7 +1,7 @@ package com.tuoheng.status.airport.platform.impl.dji; import com.tuoheng.status.airport.events.CoverEvent; -import com.tuoheng.status.airport.listener.DefaultCoverListener; +import com.tuoheng.status.airport.platform.impl.dji.listener.DjiCoverListener; import com.tuoheng.status.airport.platform.PlatformType; import com.tuoheng.status.airport.platform.impl.dji.action.cover.*; import com.tuoheng.status.airport.platform.impl.dji.guard.cover.*; @@ -52,12 +52,8 @@ public class DjiCoverPlatformStrategy implements CoverPlatformStrategy { /** * DJI平台的舱门Listener实例(单例,所有DJI机巢共享) */ - private final PlatformListener djiCoverListener = new com.tuoheng.status.airport.listener.DefaultCoverListener() { - @Override - public String getName() { - return "DjiCoverListener"; - } - }; + @Autowired + private DjiCoverListener djiCoverListener ; @Override public PlatformType getPlatformType() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiCloseDebugModeAction.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiCloseDebugModeAction.java index 21e5c56..ca8d090 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiCloseDebugModeAction.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiCloseDebugModeAction.java @@ -1,13 +1,13 @@ package com.tuoheng.status.airport.platform.impl.dji.action.airport; +import com.tuoheng.status.airport.action.debug.CloseDebugModeAction; import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.platform.strategy.PlatformAction; import com.tuoheng.status.airport.status.AirportState; import org.springframework.statemachine.StateContext; import org.springframework.stereotype.Component; @Component -public class DjiCloseDebugModeAction implements PlatformAction { +public class DjiCloseDebugModeAction extends CloseDebugModeAction { @Override public String getName() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiOfflineAction.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiOfflineAction.java index e0aa5c8..0051436 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiOfflineAction.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiOfflineAction.java @@ -1,13 +1,13 @@ package com.tuoheng.status.airport.platform.impl.dji.action.airport; +import com.tuoheng.status.airport.action.airport.OfflineAction; import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.platform.strategy.PlatformAction; import com.tuoheng.status.airport.status.AirportState; import org.springframework.statemachine.StateContext; import org.springframework.stereotype.Component; @Component -public class DjiOfflineAction implements PlatformAction { +public class DjiOfflineAction extends OfflineAction { @Override public String getName() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiOnlineAction.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiOnlineAction.java index f3ecb69..a7505f0 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiOnlineAction.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiOnlineAction.java @@ -1,13 +1,13 @@ package com.tuoheng.status.airport.platform.impl.dji.action.airport; +import com.tuoheng.status.airport.action.airport.OnlineAction; import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.platform.strategy.PlatformAction; import com.tuoheng.status.airport.status.AirportState; import org.springframework.statemachine.StateContext; import org.springframework.stereotype.Component; @Component -public class DjiOnlineAction implements PlatformAction { +public class DjiOnlineAction extends OnlineAction { @Override public String getName() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiOpenDebugModeAction.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiOpenDebugModeAction.java index 2677be9..78ec04f 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiOpenDebugModeAction.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiOpenDebugModeAction.java @@ -1,13 +1,13 @@ package com.tuoheng.status.airport.platform.impl.dji.action.airport; +import com.tuoheng.status.airport.action.debug.OpenDebugModeAction; import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.platform.strategy.PlatformAction; import com.tuoheng.status.airport.status.AirportState; import org.springframework.statemachine.StateContext; import org.springframework.stereotype.Component; @Component -public class DjiOpenDebugModeAction implements PlatformAction { +public class DjiOpenDebugModeAction extends OpenDebugModeAction { @Override public String getName() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiRebootAction.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiRebootAction.java index c38c726..121990f 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiRebootAction.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiRebootAction.java @@ -1,13 +1,13 @@ package com.tuoheng.status.airport.platform.impl.dji.action.airport; +import com.tuoheng.status.airport.action.reboot.RebootAction; import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.platform.strategy.PlatformAction; import com.tuoheng.status.airport.status.AirportState; import org.springframework.statemachine.StateContext; import org.springframework.stereotype.Component; @Component -public class DjiRebootAction implements PlatformAction { +public class DjiRebootAction extends RebootAction { @Override public String getName() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiRebootCompletedAction.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiRebootCompletedAction.java index f56ec1a..05a37b9 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiRebootCompletedAction.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/airport/DjiRebootCompletedAction.java @@ -1,13 +1,13 @@ package com.tuoheng.status.airport.platform.impl.dji.action.airport; +import com.tuoheng.status.airport.action.reboot.RebootCompletedAction; import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.platform.strategy.PlatformAction; import com.tuoheng.status.airport.status.AirportState; import org.springframework.statemachine.StateContext; import org.springframework.stereotype.Component; @Component -public class DjiRebootCompletedAction implements PlatformAction { +public class DjiRebootCompletedAction extends RebootCompletedAction { @Override public String getName() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/cover/DjiCloseCoverAction.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/cover/DjiCloseCoverAction.java index 28c3693..5c03270 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/cover/DjiCloseCoverAction.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/cover/DjiCloseCoverAction.java @@ -1,13 +1,13 @@ package com.tuoheng.status.airport.platform.impl.dji.action.cover; +import com.tuoheng.status.airport.action.cover.CloseCoverAction; import com.tuoheng.status.airport.events.CoverEvent; -import com.tuoheng.status.airport.platform.strategy.PlatformAction; import com.tuoheng.status.airport.status.CoverState; import org.springframework.statemachine.StateContext; import org.springframework.stereotype.Component; @Component -public class DjiCloseCoverAction implements PlatformAction { +public class DjiCloseCoverAction extends CloseCoverAction { @Override public String getName() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/cover/DjiCoverClosedAction.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/cover/DjiCoverClosedAction.java index 6e832c7..befd1f6 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/cover/DjiCoverClosedAction.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/cover/DjiCoverClosedAction.java @@ -1,13 +1,13 @@ package com.tuoheng.status.airport.platform.impl.dji.action.cover; +import com.tuoheng.status.airport.action.cover.CoverClosedAction; import com.tuoheng.status.airport.events.CoverEvent; -import com.tuoheng.status.airport.platform.strategy.PlatformAction; import com.tuoheng.status.airport.status.CoverState; import org.springframework.statemachine.StateContext; import org.springframework.stereotype.Component; @Component -public class DjiCoverClosedAction implements PlatformAction { +public class DjiCoverClosedAction extends CoverClosedAction { @Override public String getName() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/cover/DjiCoverOpenedAction.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/cover/DjiCoverOpenedAction.java index 0c26e9e..2e408a2 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/cover/DjiCoverOpenedAction.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/cover/DjiCoverOpenedAction.java @@ -1,13 +1,13 @@ package com.tuoheng.status.airport.platform.impl.dji.action.cover; +import com.tuoheng.status.airport.action.cover.CoverOpenedAction; import com.tuoheng.status.airport.events.CoverEvent; -import com.tuoheng.status.airport.platform.strategy.PlatformAction; import com.tuoheng.status.airport.status.CoverState; import org.springframework.statemachine.StateContext; import org.springframework.stereotype.Component; @Component -public class DjiCoverOpenedAction implements PlatformAction { +public class DjiCoverOpenedAction extends CoverOpenedAction { @Override public String getName() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/cover/DjiOpenCoverAction.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/cover/DjiOpenCoverAction.java index 1b1236e..851cf25 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/cover/DjiOpenCoverAction.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/action/cover/DjiOpenCoverAction.java @@ -1,13 +1,13 @@ package com.tuoheng.status.airport.platform.impl.dji.action.cover; +import com.tuoheng.status.airport.action.cover.OpenCoverAction; import com.tuoheng.status.airport.events.CoverEvent; -import com.tuoheng.status.airport.platform.strategy.PlatformAction; import com.tuoheng.status.airport.status.CoverState; import org.springframework.statemachine.StateContext; import org.springframework.stereotype.Component; @Component -public class DjiOpenCoverAction implements PlatformAction { +public class DjiOpenCoverAction extends OpenCoverAction { @Override public String getName() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiCanCloseDebugModeGuard.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiCanCloseDebugModeGuard.java index 024ed74..4dc2835 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiCanCloseDebugModeGuard.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiCanCloseDebugModeGuard.java @@ -1,13 +1,13 @@ package com.tuoheng.status.airport.platform.impl.dji.guard.airport; +import com.tuoheng.status.airport.guard.debug.CanCloseDebugModeGuard; import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.platform.strategy.PlatformGuard; import com.tuoheng.status.airport.status.AirportState; import org.springframework.statemachine.StateContext; import org.springframework.stereotype.Component; @Component -public class DjiCanCloseDebugModeGuard implements PlatformGuard { +public class DjiCanCloseDebugModeGuard extends CanCloseDebugModeGuard { @Override public String getName() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiCanOfflineGuard.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiCanOfflineGuard.java index bfeb737..5706493 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiCanOfflineGuard.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiCanOfflineGuard.java @@ -1,13 +1,13 @@ package com.tuoheng.status.airport.platform.impl.dji.guard.airport; +import com.tuoheng.status.airport.guard.airport.CanOfflineGuard; import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.platform.strategy.PlatformGuard; import com.tuoheng.status.airport.status.AirportState; import org.springframework.statemachine.StateContext; import org.springframework.stereotype.Component; @Component -public class DjiCanOfflineGuard implements PlatformGuard { +public class DjiCanOfflineGuard extends CanOfflineGuard { @Override public String getName() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiCanOnlineGuard.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiCanOnlineGuard.java index baf4bab..2abb0d2 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiCanOnlineGuard.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiCanOnlineGuard.java @@ -1,7 +1,7 @@ package com.tuoheng.status.airport.platform.impl.dji.guard.airport; +import com.tuoheng.status.airport.guard.airport.CanOnlineGuard; import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.platform.strategy.PlatformGuard; import com.tuoheng.status.airport.status.AirportState; import org.springframework.statemachine.StateContext; import org.springframework.stereotype.Component; @@ -10,7 +10,7 @@ import org.springframework.stereotype.Component; * DJI平台 - 机巢上线Guard */ @Component -public class DjiCanOnlineGuard implements PlatformGuard { +public class DjiCanOnlineGuard extends CanOnlineGuard { @Override public String getName() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiIsDebugModeGuard.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiIsDebugModeGuard.java index 6a6b721..ec0430a 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiIsDebugModeGuard.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiIsDebugModeGuard.java @@ -1,13 +1,13 @@ package com.tuoheng.status.airport.platform.impl.dji.guard.airport; +import com.tuoheng.status.airport.guard.debug.IsDebugModeGuard; import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.platform.strategy.PlatformGuard; import com.tuoheng.status.airport.status.AirportState; import org.springframework.statemachine.StateContext; import org.springframework.stereotype.Component; @Component -public class DjiIsDebugModeGuard implements PlatformGuard { +public class DjiIsDebugModeGuard extends IsDebugModeGuard { @Override public String getName() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiIsNotDebugModeGuard.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiIsNotDebugModeGuard.java index d57f25a..13edde7 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiIsNotDebugModeGuard.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiIsNotDebugModeGuard.java @@ -1,13 +1,13 @@ package com.tuoheng.status.airport.platform.impl.dji.guard.airport; +import com.tuoheng.status.airport.guard.debug.IsNotDebugModeGuard; import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.platform.strategy.PlatformGuard; import com.tuoheng.status.airport.status.AirportState; import org.springframework.statemachine.StateContext; import org.springframework.stereotype.Component; @Component -public class DjiIsNotDebugModeGuard implements PlatformGuard { +public class DjiIsNotDebugModeGuard extends IsNotDebugModeGuard { @Override public String getName() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiIsRebootCompletedGuard.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiIsRebootCompletedGuard.java index f9cd241..cfc77ba 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiIsRebootCompletedGuard.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/airport/DjiIsRebootCompletedGuard.java @@ -1,13 +1,13 @@ package com.tuoheng.status.airport.platform.impl.dji.guard.airport; +import com.tuoheng.status.airport.guard.reboot.IsRebootCompletedGuard; import com.tuoheng.status.airport.events.AirportEvent; -import com.tuoheng.status.airport.platform.strategy.PlatformGuard; import com.tuoheng.status.airport.status.AirportState; import org.springframework.statemachine.StateContext; import org.springframework.stereotype.Component; @Component -public class DjiIsRebootCompletedGuard implements PlatformGuard { +public class DjiIsRebootCompletedGuard extends IsRebootCompletedGuard { @Override public String getName() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/cover/DjiCanCloseCoverGuard.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/cover/DjiCanCloseCoverGuard.java index a97e92d..f6ff011 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/cover/DjiCanCloseCoverGuard.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/cover/DjiCanCloseCoverGuard.java @@ -1,13 +1,13 @@ package com.tuoheng.status.airport.platform.impl.dji.guard.cover; +import com.tuoheng.status.airport.guard.cover.CanCloseCoverGuard; import com.tuoheng.status.airport.events.CoverEvent; -import com.tuoheng.status.airport.platform.strategy.PlatformGuard; import com.tuoheng.status.airport.status.CoverState; import org.springframework.statemachine.StateContext; import org.springframework.stereotype.Component; @Component -public class DjiCanCloseCoverGuard implements PlatformGuard { +public class DjiCanCloseCoverGuard extends CanCloseCoverGuard { @Override public String getName() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/cover/DjiCanOpenCoverGuard.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/cover/DjiCanOpenCoverGuard.java index c98de91..3e36215 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/cover/DjiCanOpenCoverGuard.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/cover/DjiCanOpenCoverGuard.java @@ -1,13 +1,13 @@ package com.tuoheng.status.airport.platform.impl.dji.guard.cover; +import com.tuoheng.status.airport.guard.cover.CanOpenCoverGuard; import com.tuoheng.status.airport.events.CoverEvent; -import com.tuoheng.status.airport.platform.strategy.PlatformGuard; import com.tuoheng.status.airport.status.CoverState; import org.springframework.statemachine.StateContext; import org.springframework.stereotype.Component; @Component -public class DjiCanOpenCoverGuard implements PlatformGuard { +public class DjiCanOpenCoverGuard extends CanOpenCoverGuard { @Override public String getName() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/cover/DjiIsCoverClosedGuard.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/cover/DjiIsCoverClosedGuard.java index fb80606..8670cfc 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/cover/DjiIsCoverClosedGuard.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/cover/DjiIsCoverClosedGuard.java @@ -1,13 +1,13 @@ package com.tuoheng.status.airport.platform.impl.dji.guard.cover; +import com.tuoheng.status.airport.guard.cover.IsCoverClosedGuard; import com.tuoheng.status.airport.events.CoverEvent; -import com.tuoheng.status.airport.platform.strategy.PlatformGuard; import com.tuoheng.status.airport.status.CoverState; import org.springframework.statemachine.StateContext; import org.springframework.stereotype.Component; @Component -public class DjiIsCoverClosedGuard implements PlatformGuard { +public class DjiIsCoverClosedGuard extends IsCoverClosedGuard { @Override public String getName() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/cover/DjiIsCoverOpenedGuard.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/cover/DjiIsCoverOpenedGuard.java index cf28d1d..d78d206 100644 --- a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/cover/DjiIsCoverOpenedGuard.java +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/guard/cover/DjiIsCoverOpenedGuard.java @@ -1,13 +1,13 @@ package com.tuoheng.status.airport.platform.impl.dji.guard.cover; +import com.tuoheng.status.airport.guard.cover.IsCoverOpenedGuard; import com.tuoheng.status.airport.events.CoverEvent; -import com.tuoheng.status.airport.platform.strategy.PlatformGuard; import com.tuoheng.status.airport.status.CoverState; import org.springframework.statemachine.StateContext; import org.springframework.stereotype.Component; @Component -public class DjiIsCoverOpenedGuard implements PlatformGuard { +public class DjiIsCoverOpenedGuard extends IsCoverOpenedGuard { @Override public String getName() { diff --git a/src/main/java/com/tuoheng/status/airport/platform/impl/dji/listener/DjiAirportListener.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/listener/DjiAirportListener.java new file mode 100644 index 0000000..cc73abb --- /dev/null +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/listener/DjiAirportListener.java @@ -0,0 +1,12 @@ +package com.tuoheng.status.airport.platform.impl.dji.listener; + +import com.tuoheng.status.airport.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/status/airport/platform/impl/dji/listener/DjiCoverListener.java b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/listener/DjiCoverListener.java new file mode 100644 index 0000000..ca28760 --- /dev/null +++ b/src/main/java/com/tuoheng/status/airport/platform/impl/dji/listener/DjiCoverListener.java @@ -0,0 +1,15 @@ +package com.tuoheng.status.airport.platform.impl.dji.listener; + +import com.tuoheng.status.airport.listener.DefaultCoverListener; +import org.springframework.stereotype.Component; + +@Component +public class DjiCoverListener extends DefaultCoverListener { + + @Override + public String getName(){ + return "DjiCoverListener"; + } + + +}