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

出库任务 TargetAddress 输送线任务冲突检查 实施计划

For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.

Goal: 在出库任务选择时,检查是否有正在执行的输送线任务去往同一 TargetAddress,避免冲突。

Architecture:ITaskService 新增 HasExecutingTaskToTarget 方法,在 TaskService 中实现数据库查询,在 StackerCraneTaskSelector.TrySelectOutboundTask 中调用。

Tech Stack: C# / .NET 8,SqlSugar ORM,Serilog


涉及文件

  • 修改: WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
  • 修改: WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Query.cs
  • 修改: WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs

Task 1: 新增 ITaskService 接口方法

Files:
- Modify: WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs

  • [ ] Step 1: 在接口末尾(public Dt_Task QueryByTaskNum(int taskNum); 之后,} 之前)添加方法声明
/// <summary>
/// 查询是否有正在执行的去往指定 TargetAddress 的输送线任务
/// </summary>
/// <param name="roadway">巷道号</param>
/// <param name="targetAddress">目标地址</param>
/// <returns>存在返回 true</returns>
bool HasExecutingTaskToTarget(string roadway, string targetAddress);
  • [ ] Step 2: Commit
git add WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
git commit -m "feat(ITaskService): 新增 HasExecutingTaskToTarget 接口方法

查询是否有正在执行的去往指定 TargetAddress 的输送线任务

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>"

Task 2: 实现 TaskService 方法

Files:
- Modify: WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Query.cs

  • [ ] Step 1: 在 QueryExecutingConveyorLineTask 方法之后添加实现

TaskService.Query.cs 文件中,找到 QueryExecutingConveyorLineTask 方法(约 line 28-34),在其之后(QueryCompletedConveyorLineTask 之前)插入:

/// <summary>
/// 查询是否有正在执行的去往指定 TargetAddress 的输送线任务
/// </summary>
/// <param name="roadway">巷道号</param>
/// <param name="targetAddress">目标地址</param>
/// <returns>存在返回 true</returns>
public bool HasExecutingTaskToTarget(string roadway, string targetAddress)
{
    return BaseDal.QueryFirst(x =>
        x.Roadway == roadway &&
        x.TargetAddress == targetAddress &&
        x.TaskStatus == (int)TaskOutStatusEnum.Line_OutExecuting,
        TaskOrderBy) != null;
}
  • [ ] Step 2: Commit
git add WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Query.cs
git commit -m "feat(TaskService): 实现 HasExecutingTaskToTarget 方法

查询 TaskStatus == Line_OutExecuting 且 Roadway 和 TargetAddress 匹配的任务

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>"

Task 3: 在 TrySelectOutboundTask 中调用新方法

Files:
- Modify: WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs

  • [ ] Step 1: 在 TrySelectOutboundTask 方法中,NextAddress 检查通过之后、WMS 移库检查之前插入

当前代码(约 line 203-235):

// 判断 NextAddress 出库站台是否可用
if (!IsOutTaskStationAvailable(outboundTask))
{
    return null;
}

// 站台检查通过后,调用 WMS 判断是否需要移库

// 站台检查通过后 注释之前插入:

// 检查是否有正在执行的输送线任务去往同一 TargetAddress
if (_taskService.HasExecutingTaskToTarget(outboundTask.Roadway, outboundTask.TargetAddress))
{
    QuartzLogHelper.LogInfo(_logger, "TrySelectOutboundTask:TargetAddress: {TargetAddress} 已有正在执行的输送线任务,任务号: {TaskNum}",
        $"TrySelectOutboundTask:TargetAddress: {outboundTask.TargetAddress} 已有正在执行的输送线任务", outboundTask.Roadway, outboundTask.TargetAddress, outboundTask.TaskNum);
    return null;
}
  • [ ] Step 2: Commit
git add WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
git commit -m "feat(StackerCraneTaskSelector): 出库任务选择时检查 TargetAddress 输送线任务冲突

站台可用后、WMS 移库检查前,查询是否有 Line_OutExecuting 状态的任务去同一 TargetAddress

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>"

Task 4: 验证构建

  • [ ] Step 1: 执行构建验证
cd D:/Git/ShanMeiXinNengYuan/Code
dotnet build WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj

预期:0 个错误

  • [ ] Step 2: 如有错误,分析并修复