wanshenmean
昨天 142771b3ac36645a4b6ef62006e257f6c8324a1c
docs: 添加出库任务TargetAddress输送线任务冲突检查设计文档

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
已添加1个文件
55 ■■■■■ 文件已修改
Code/docs/superpowers/specs/2026-04-22-stacker-crane-executing-task-check-design.md 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/docs/superpowers/specs/2026-04-22-stacker-crane-executing-task-check-design.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,55 @@
# å‡ºåº“任务 TargetAddress è¾“送线任务冲突检查 è®¾è®¡æ–‡æ¡£
## 1. èƒŒæ™¯ä¸Žç›®æ ‡
在 `TrySelectOutboundTask` æ–¹æ³•中,当 TargetAddress è¾“送线站台空闲且 NextAddress å‡ºåº“站台可用时,需要额外检查是否存在正在执行的输送线任务去往同一 TargetAddress。如果存在,说明 TargetAddress å³å°†è¢«å ç”¨ï¼Œä¸åº”选择该出库任务。
## 2. è®¾è®¡æ–¹æ¡ˆ
### 2.1 æ–°å¢ž ITaskService æ–¹æ³•
在 `ITaskService` æŽ¥å£ä¸­æ–°å¢žæ–¹æ³•:
```csharp
/// <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 ç§»åº“检查前插入:
```csharp
// æ£€æŸ¥æ˜¯å¦æœ‰æ­£åœ¨æ‰§è¡Œçš„输送线任务去往同一 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`(新增调用点)