# 出库任务 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);` 之后,`}` 之前)添加方法声明**
```csharp
///
/// 查询是否有正在执行的去往指定 TargetAddress 的输送线任务
///
/// 巷道号
/// 目标地址
/// 存在返回 true
bool HasExecutingTaskToTarget(string roadway, string targetAddress);
```
- [ ] **Step 2: Commit**
```bash
git add WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
git commit -m "feat(ITaskService): 新增 HasExecutingTaskToTarget 接口方法
查询是否有正在执行的去往指定 TargetAddress 的输送线任务
Co-Authored-By: Claude Opus 4.7 "
```
---
## 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` 之前)插入:
```csharp
///
/// 查询是否有正在执行的去往指定 TargetAddress 的输送线任务
///
/// 巷道号
/// 目标地址
/// 存在返回 true
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**
```bash
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 "
```
---
## Task 3: 在 TrySelectOutboundTask 中调用新方法
**Files:**
- Modify: `WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs`
- [ ] **Step 1: 在 `TrySelectOutboundTask` 方法中,NextAddress 检查通过之后、WMS 移库检查之前插入**
当前代码(约 line 203-235):
```csharp
// 判断 NextAddress 出库站台是否可用
if (!IsOutTaskStationAvailable(outboundTask))
{
return null;
}
// 站台检查通过后,调用 WMS 判断是否需要移库
```
在 `// 站台检查通过后` 注释之前插入:
```csharp
// 检查是否有正在执行的输送线任务去往同一 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**
```bash
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 "
```
---
## Task 4: 验证构建
- [ ] **Step 1: 执行构建验证**
```bash
cd D:/Git/ShanMeiXinNengYuan/Code
dotnet build WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj
```
预期:0 个错误
- [ ] **Step 2: 如有错误,分析并修复**