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

手动创建任务功能设计

1. 需求概述

在 WMS 界面上添加手动创建任务功能。用户输入起点、终点、条码、仓库ID,系统自动生成任务号等字段,发送给 WCS。WCS 根据起点是否为线体点位(11068/11010/11001)判断是否需要写入输送线任务。

2. 整体流程

用户(WMS界面)
    ↓ 输入:任务类型/起点/终点/条码/仓库ID
WMS后端
    ↓ 调用 BaseDal.GetTaskNo() 生成 TaskNum
    ↓ 根据任务类型设置状态
    ↓ 调用 WCS ReceiveTask
WCS后端
    ↓ 判断起点是否为线体点位(11068/11010/11001)
    ↓ 是 → 查 Storage.Devices 获取输送线实例
    ↓ 写入输送线任务(起点/终点/任务号等)
    ↓ 返回成功

3. WMS 前端改动

3.1 任务页面 (task.vue)

在现有任务管理页面添加**手动创建任务**按钮,弹出对话框。

3.2 对话框字段

字段 类型 说明
任务类型 下拉框 入库 / 出库 / 移库
起点地址 输入框 用户输入,如 11068
终点地址 输入框 用户输入
条码 输入框 用户输入
仓库ID 输入框 用户输入
优先级 只读 默认值 1

4. WMS 后端改动

4.1 新增接口

Controller: TaskController.cs
POST /api/Task/CreateManualTask

4.2 Service 方法

TaskService.cs 新增 CreateManualTaskAsync 方法:

public async Task<WebResponseContent> CreateManualTaskAsync(CreateManualTaskDto dto)
{
    // 1. 调用 BaseDal.GetTaskNo() 生成 TaskNum
    // 2. 根据任务类型设置状态
    //    - 入库 → InNew (200)
    //    - 出库 → OutNew (100)
    //    - 移库 → RelocationNew (300)
    // 3. 构建 Dt_Task 实体
    // 4. 调用 WCS ReceiveTask (POST /api/Task/ReceiveTask)
    // 5. 返回结果
}

4.3 DTO 定义

public class CreateManualTaskDto
{
    public int TaskType { get; set; }      // 1=入库, 2=出库, 3=移库
    public string SourceAddress { get; set; }
    public string TargetAddress { get; set; }
    public string Barcode { get; set; }
    public int WarehouseId { get; set; }
    public int Grade { get; set; } = 1;    // 默认优先级1
}

5. WCS 后端改动

5.1 已有逻辑复用

ReceiveWMSTask 方法已支持接收 WMS 任务并分发到对应 FlowService:
- 入库任务 → InboundTaskFlowService.InitializeOnReceive()
- 出库任务 → OutboundTaskFlowService.InitializeOnReceive()
- 移库任务 → RelocationTaskFlowService.InitializeOnReceive()

5.2 线体点位判断

InboundTaskFlowService.InitializeOnReceive() 中,判断 SourceAddress 是否为线体点位(11068/11010/11001)。这三个点位均为**入库线体点位**。

5.3 获取输送线实例

var conveyorLine = Storage.Devices
    .FirstOrDefault(x => x.DeviceProDTOs.Any(d => d.DeviceChildCode == sourceAddress));

5.4 新增:写入输送线任务

此逻辑为新增,目前 FlowService 中不存在写入输送线的逻辑,需要在判断为线体点位后新增:

  1. 获取输送线实例成功后,读取源线体号
  2. 构造 ConveyorLineTaskCommandNew 对象
  3. 调用 conveyorLine.WriteCustomer(sourceLineNo, command) 写入 PLC

写入字段:
- TaskNo = WCS 分配的任务号
- Source = 起点地址
- Target = 终点地址
- Barcode = 条码
- WCS_STB = 1 (标记WCS已发送)

5.5 重复任务处理

ReceiveWMSTask 中已有重复任务检查逻辑(根据 TaskNum 或 PalletCode),手动创建时如遇重复返回错误。

6. 任务状态枚举

类型 新建状态 状态值
入库 InNew 200
出库 OutNew 100
移库 RelocationNew 300

7. 错误处理

  • 任务号获取失败 → 返回错误
  • WCS 查找输送线实例失败 → 返回错误给 WMS
  • 写入 PLC 失败 → 返回错误,WMS 任务状态保持新建
  • WCS 返回重复任务 → 返回错误给 WMS

8. 涉及的源文件

WMS 前端

  • WMS/WIDESEA_WMSClient/src/views/taskinfo/task.vue
  • WMS/WIDESEA_WMSClient/src/extension/taskinfo/task.js

WMS 后端

  • WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
  • WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs

WCS 后端

  • WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
  • WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/InboundTaskFlowService.cs
  • WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs
  • WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/RelocationTaskFlowService.cs
  • WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineDispatchHandler.cs (参考写入模式)
  • WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLine/ConveyorLineTaskCommandNew.cs (任务命令结构)