# MES 托盘进站出站集成设计 ## 概述 在 `TaskService` 的入库完成/出库完成方法中集成 MES 托盘进站/出站调用,新增空托盘入库/出库完成方法。 ## 事务策略 MES 调用纳入 `ExecuteWithinTransactionAsync` 内 — MES 失败时事务回滚,WMS 数据不落库。 ## 数据流 | 方法 | 操作 | MES 调用 | |------|------|----------| | `InboundFinishTaskAsync` | 入库完成 | `InboundInContainer` | | `OutboundFinishTaskAsync` | 出库完成 | `OutboundInContainer` | | `InboundFinishTaskTrayAsync`(新增) | 空托盘入库完成 | 无 | | `OutboundFinishTaskTrayAsync`(新增) | 空托盘出库完成 | 无 | ## 涉及文件 - `WIDESEA_TaskInfoService/TaskService.cs` ## 详细设计 ### 1. 入库完成 (InboundFinishTaskAsync) **现有逻辑(事务内):** - 更新库存信息(LocationCode, OutboundDate, StockStatus) - 更新货位状态为 InStock - 调用 CompleteTaskAsync 删除任务 **修改后:** - 在 `CompleteTaskAsync` 之前添加 MES `InboundInContainer` 调用 - 请求参数: - `EquipmentCode = "STK-GROUP-001"` - `ResourceCode = "STK-GROUP-001"` - `ContainerCode = taskDto.PalletCode` - `LocalTime = DateTime.Now` - MES 失败 → 事务回滚,返回错误 ### 2. 出库完成 (OutboundFinishTaskAsync) **现有逻辑(事务内):** - 更新库存信息(LocationId=0, LocationCode=null, OutboundDate) - 更新货位状态为 Free - 调用 CompleteTaskAsync 删除任务 **修改后:** - 在 `CompleteTaskAsync` 之前添加 MES `OutboundInContainer` 调用 - 请求参数: - `EquipmentCode = "STK-GROUP-001"` - `ResourceCode = "STK-GROUP-001"` - `ContainerCode = taskDto.PalletCode` - `LocalTime = DateTime.Now` - `OutboundInContainerRequest` 有 `ParamList` 字段,目前为空列表 `new List()` - MES 失败 → 事务回滚,返回错误 ### 3. 新增空托盘入库完成 (InboundFinishTaskTrayAsync) **方法签名:** ```csharp public async Task InboundFinishTaskTrayAsync(CreateTaskDto taskDto) ``` **逻辑:** 1. 查询任务(托盘号 = taskDto.PalletCode) 2. 查询货位信息 3. 查询库存信息 4. 事务内: - 更新库存 LocationCode/LocationId - 更新货位状态为 InStock - 更新库存状态为空托盘库存 - 删除任务(不调用 CompleteTaskAsync,自己实现) 5. 无需 MES 调用 ### 4. 新增空托盘出库完成 (OutboundFinishTaskTrayAsync) **方法签名:** ```csharp public async Task OutboundFinishTaskTrayAsync(CreateTaskDto taskDto) ``` **逻辑:** 1. 查询任务(托盘号 = taskDto.PalletCode) 2. 查询货位信息 3. 查询库存信息 4. 事务内: - 更新库存 LocationId=0, LocationCode=null - 更新货位状态为 Free - 更新库存状态为出库完成 - 删除任务(自己实现) 5. 无需 MES 调用 ## 错误处理 - MES 调用检查 `mesResult.Data?.IsSuccess`(MES 业务层成功) - 错误返回:`"任务完成失败:MES进站失败: {mesResult?.Data?.Msg ?? mesResult?.ErrorMessage ?? "未知错误"}"` - 空托盘方法无 MES 错误处理 ## 设备编码 统一使用 `STK-GROUP-001`,与组盘保持一致。