# 出库任务 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: 如有错误,分析并修复**