# 批量 MES 绑定与解绑接口设计 ## 背景 当前 `StockSerivce` 中 `GroupPalletAsync`、`ChangePalletAsync`、`SplitPalletAsync` 每次调用都会触发一次 MES 接口。 WCS 机器人任务按批次取放,一个托盘可能需要多次 MES 调用(如换盘需要先解绑再绑定)。为减少 MES 调用次数,新增两个批量确认接口供 WCS 在任务阶段完成时一次性上传托盘级别的绑定/解绑数据。 ## 新增接口 ### 1. SplitPalletConfirm — 批量拆盘确认 **触发时机**:WCS 拆盘任务/换盘任务全部取完 **WCS 调用方式**:`POST /api/Stock/SplitPalletConfirm` **请求参数**: ```csharp public class SplitPalletConfirmRequest { /// /// 源托盘号 /// public string PalletCode { get; set; } } ``` **处理流程**: 1. WMS 根据 `PalletCode` 从临时表 `Dt_SplitTemp` 读取预存电芯列表 2. 调用 MES `UnBindContainer`(一次性上传整托电芯) 3. 删除临时表 `Dt_SplitTemp` 中对应记录 **临时表写入时机**:`SplitPalletAsync` 每次被调用时,先检查 `Dt_SplitTemp` 中是否存在该托盘记录;不存在则将当前托盘对应的所有电芯条码写入临时表;已存在则跳过写入。 **临时表结构**(`Dt_SplitTemp`): | 字段 | 类型 | 说明 | |------|------|------| | Id | int | 主键 | | PalletCode | string | 托盘号 | | SfcList | string | 电芯条码列表(JSON数组) | | CreateTime | DateTime | 创建时间 | --- ### 2. GroupPalletConfirm — 批量组盘确认 **触发时机**:WCS 组盘任务/换盘任务全部放完 **WCS 调用方式**:`POST /api/Stock/GroupPalletConfirm` **请求参数**: ```csharp public class GroupPalletConfirmRequest { /// /// 目标托盘号 /// public string PalletCode { get; set; } } ``` **处理流程**: 1. WMS 根据 `PalletCode` 查询 `Dt_StockInfoDetail` 中该托盘下的所有电芯明细 2. 调用 MES `BindContainer`(一次性上传整托电芯绑定) 3. 返回结果 **注意**:电芯数据在组盘任务放货过程中已由 WCS 通过其他接口写入 `Dt_StockInfoDetail`,WMS 不需要额外存储 --- ## 换盘任务完整流程 ``` 换盘任务: 全部取完 → SplitPalletConfirm(源托盘) → MES UnBindContainer 全部放完 → GroupPalletConfirm(目标托盘) → MES BindContainer ``` ## 现有接口处理 - `GroupPalletAsync`、`ChangePalletAsync`、`SplitPalletAsync` 保留 - 新接口与现有接口并存,WCS 根据任务场景选择调用 - 现有接口继续承担单次/非批量场景的 MES 调用 ## WCS 侧改造要点 - 拆盘/换盘任务开始时,WCS 调用现有 `SplitPalletAsync` 接口;WMS 在 `SplitPalletAsync` 内部先检查 `Dt_SplitTemp` 是否已有该托盘记录,无则写入,有则跳过(幂等写入) - 组盘任务全部放完时调用 `GroupPalletConfirm` - 换盘任务全部取完时调用 `SplitPalletConfirm`,全部放完时调用 `GroupPalletConfirm` ## 文件变更 | 操作 | 文件 | |------|------| | 新增 | `WIDESEA_DTO/Stock/SplitPalletConfirmRequestDto.cs` | | 新增 | `WIDESEA_DTO/Stock/GroupPalletConfirmRequestDto.cs` | | 新增 | `WIDESEA_Model/Models/Dt_SplitTemp.cs` | | 修改 | `WIDESEA_IStockService/IStockService.cs`(新增接口定义) | | 修改 | `WIDESEA_StockService/StockService.cs`(实现批量确认逻辑) | | 修改 | `WIDESEA_WMSServer/Controllers/Stock/StockInfoDetailController.cs`(新增 API 路由) | | 修改 | 数据库:新增 `Dt_SplitTemp` 表 | ## 风险与约束 - 临时表 `Dt_SplitTemp` 需要有清理机制,防止异常情况下数据残留 - MES 接口调用失败时,临时表数据不回滚,下次重试时可能重复解绑,需 MES 侧幂等支持