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

出库任务 TargetAddress 输送线任务冲突检查 设计文档

1. 背景与目标

TrySelectOutboundTask 方法中,当 TargetAddress 输送线站台空闲且 NextAddress 出库站台可用时,需要额外检查是否存在正在执行的输送线任务去往同一 TargetAddress。如果存在,说明 TargetAddress 即将被占用,不应选择该出库任务。

2. 设计方案

2.1 新增 ITaskService 方法

ITaskService 接口中新增方法:

/// <summary>
/// 查询是否有正在执行的去往指定 TargetAddress 的输送线任务
/// </summary>
/// <param name="roadway">巷道号</param>
/// <param name="targetAddress">目标地址</param>
/// <returns>存在返回 true</returns>
bool HasExecutingTaskToTarget(string roadway, string targetAddress);

2.2 TaskService 实现

查询条件:
- TaskStatus == (int)TaskOutStatusEnum.Line_OutExecuting(状态 = 120)
- Roadway == roadway
- TargetAddress == targetAddress

2.3 StackerCraneTaskSelector 调用

TrySelectOutboundTask 方法中,两个站台检查通过后、WMS 移库检查前插入:

// 检查是否有正在执行的输送线任务去往同一 TargetAddress
if (_taskService.HasExecutingTaskToTarget(outboundTask.Roadway, outboundTask.TargetAddress))
{
    return null;
}

2.4 更新后的检查顺序

1. TargetAddress 输送线站台空闲(PLC 读取)
2. NextAddress 出库站台可用(PLC 读取)
3. 无正在执行的输送线任务去同一 TargetAddress(数据库查询)  ← 新增
4. WMS 移库检查(HTTP 调用)

3. 涉及文件

  • 修改: WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs(新增接口方法)
  • 修改: WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Query.cs(新增实现)
  • 修改: WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs(新增调用点)