# 堆垛机命令配置系统 ## 概述 通过配置文件灵活管理 Roadway 到命令类型的映射关系,支持动态扩展,无需修改代码。 ## 核心设计 - **策略模式**: 根据 Roadway 动态选择命令类型 - **工厂模式**: 统一创建不同类型的命令对象 - **泛型编程**: 通用方法处理所有命令类型 - **配置驱动**: 映射关系由配置文件管理 ## 配置文件 ### 位置 ```text {应用程序根目录}/StackerCraneJob/stackercrane-command-config.json ``` ### 格式 ```json { "RoadwayCommandMapping": { "HC": "Formation", "GW": "Standard", "CW": "Standard" }, "DefaultCommandType": "Standard" } ``` ### 说明 - **RoadwayCommandMapping**: Roadway 关键字 → 命令类型映射 - **DefaultCommandType**: 默认命令类型(不匹配时使用) ## 使用示例 ```csharp // 自动从配置文件加载 var job = new CommonStackerCraneJob(taskService, taskExecuteDetailService, taskRepository, routerService); // 创建任务 var task = new Dt_Task { Roadway = "HC-01", // 包含 "HC" → 使用 Formation 命令 PalletCode = "P001", TaskNum = 12345 }; // 转换为命令 var command = job.ConvertToStackerCraneTaskCommand(task); ``` ## 扩展新命令类型 ### 1. 创建命令类 ```csharp public class CustomStackerCraneTaskCommand : DeviceCommand { public int TaskNum { get; set; } public string Barcode { get; set; } } ``` ### 2. 添加工厂方法 在 `CommonStackerCraneJob` 中添加: ```csharp private static CustomStackerCraneTaskCommand CreateCustomCommand(Dt_Task task) { return new CustomStackerCraneTaskCommand { Barcode = task.PalletCode, TaskNum = task.TaskNum }; } ``` ### 3. 修改 ConvertToStackerCraneTaskCommand 在 switch 表达式中添加新分支: ```csharp return commandType switch { "Formation" => BuildCommand(task, CreateFormationCommand(task)), "Custom" => BuildCommand(task, CreateCustomCommand(task)), _ => BuildCommand(task, CreateStandardCommand(task)) }; ``` ### 4. 更新配置文件 ```json { "RoadwayCommandMapping": { "HC": "Formation", "GW": "Standard", "XX": "Custom" } } ``` ## 优势 1. **简洁**: 核心逻辑清晰,易于理解 2. **灵活**: 配置文件管理映射关系 3. **可扩展**: 添加新类型只需 4 步 4. **可维护**: 代码结构简单,职责明确 5. **容错**: 配置加载失败自动使用默认值 ## 注意事项 - Roadway 关键字按顺序匹配,先匹配先生效 - 配置文件必须是有效的 JSON 格式 - 命令类型名称区分大小写 - 配置加载失败会输出警告并使用默认配置