# 出库任务 TargetAddress 输送线任务冲突检查 设计文档 ## 1. 背景与目标 在 `TrySelectOutboundTask` 方法中,当 TargetAddress 输送线站台空闲且 NextAddress 出库站台可用时,需要额外检查是否存在正在执行的输送线任务去往同一 TargetAddress。如果存在,说明 TargetAddress 即将被占用,不应选择该出库任务。 ## 2. 设计方案 ### 2.1 新增 ITaskService 方法 在 `ITaskService` 接口中新增方法: ```csharp /// /// 查询是否有正在执行的去往指定 TargetAddress 的输送线任务 /// /// 巷道号 /// 目标地址 /// 存在返回 true 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`(新增调用点)