编辑 | blame | 历史 | 原始文档

堆垛机命令配置系统

概述

通过配置文件灵活管理 Roadway 到命令类型的映射关系,支持动态扩展,无需修改代码。

核心设计

  • 策略模式: 根据 Roadway 动态选择命令类型
  • 工厂模式: 统一创建不同类型的命令对象
  • 泛型编程: 通用方法处理所有命令类型
  • 配置驱动: 映射关系由配置文件管理

配置文件

位置

{应用程序根目录}/StackerCraneJob/stackercrane-command-config.json

格式

{
  "RoadwayCommandMapping": {
    "HC": "Formation",
    "GW": "Standard",
    "CW": "Standard"
  },
  "DefaultCommandType": "Standard"
}

说明

  • RoadwayCommandMapping: Roadway 关键字 → 命令类型映射
  • DefaultCommandType: 默认命令类型(不匹配时使用)

使用示例

// 自动从配置文件加载
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. 创建命令类

public class CustomStackerCraneTaskCommand : DeviceCommand
{
    public int TaskNum { get; set; }
    public string Barcode { get; set; }
}

2. 添加工厂方法

CommonStackerCraneJob 中添加:

private static CustomStackerCraneTaskCommand CreateCustomCommand(Dt_Task task)
{
    return new CustomStackerCraneTaskCommand
    {
        Barcode = task.PalletCode,
        TaskNum = task.TaskNum
    };
}

3. 修改 ConvertToStackerCraneTaskCommand

在 switch 表达式中添加新分支:

return commandType switch
{
    "Formation" => BuildCommand(task, CreateFormationCommand(task)),
    "Custom" => BuildCommand(task, CreateCustomCommand(task)),
    _ => BuildCommand(task, CreateStandardCommand(task))
};

4. 更新配置文件

{
  "RoadwayCommandMapping": {
    "HC": "Formation",
    "GW": "Standard",
    "XX": "Custom"
  }
}

优势

  1. 简洁: 核心逻辑清晰,易于理解
  2. 灵活: 配置文件管理映射关系
  3. 可扩展: 添加新类型只需 4 步
  4. 可维护: 代码结构简单,职责明确
  5. 容错: 配置加载失败自动使用默认值

注意事项

  • Roadway 关键字按顺序匹配,先匹配先生效
  • 配置文件必须是有效的 JSON 格式
  • 命令类型名称区分大小写
  • 配置加载失败会输出警告并使用默认配置