wanshenmean
昨天 cec41c128790361d51668e61001f00bab38955e4
docs: 添加TargetAddress输送线任务冲突检查实施计划

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
已添加1个文件
145 ■■■■■ 文件已修改
Code/docs/superpowers/plans/2026-04-22-stacker-crane-executing-task-check.md 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/docs/superpowers/plans/2026-04-22-stacker-crane-executing-task-check.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,145 @@
# å‡ºåº“任务 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
/// <summary>
/// æŸ¥è¯¢æ˜¯å¦æœ‰æ­£åœ¨æ‰§è¡Œçš„去往指定 TargetAddress çš„输送线任务
/// </summary>
/// <param name="roadway">巷道号</param>
/// <param name="targetAddress">目标地址</param>
/// <returns>存在返回 true</returns>
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 <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` ä¹‹å‰ï¼‰æ’入:
```csharp
/// <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**
```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 <noreply@anthropic.com>"
```
---
## 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 <noreply@anthropic.com>"
```
---
## Task 4: éªŒè¯æž„建
- [ ] **Step 1: æ‰§è¡Œæž„建验证**
```bash
cd D:/Git/ShanMeiXinNengYuan/Code
dotnet build WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj
```
预期:0 ä¸ªé”™è¯¯
- [ ] **Step 2: å¦‚有错误,分析并修复**