编辑 | blame | 历史 | 原始文档

批量 MES 绑定与解绑接口设计

背景

当前 StockSerivceGroupPalletAsyncChangePalletAsyncSplitPalletAsync 每次调用都会触发一次 MES 接口。

WCS 机器人任务按批次取放,一个托盘可能需要多次 MES 调用(如换盘需要先解绑再绑定)。为减少 MES 调用次数,新增两个批量确认接口供 WCS 在任务阶段完成时一次性上传托盘级别的绑定/解绑数据。

新增接口

1. SplitPalletConfirm — 批量拆盘确认

触发时机:WCS 拆盘任务/换盘任务全部取完

WCS 调用方式POST /api/Stock/SplitPalletConfirm

请求参数
csharp public class SplitPalletConfirmRequest { /// <summary> /// 源托盘号 /// </summary> 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 { /// <summary> /// 目标托盘号 /// </summary> public string PalletCode { get; set; } }

处理流程
1. WMS 根据 PalletCode 查询 Dt_StockInfoDetail 中该托盘下的所有电芯明细
2. 调用 MES BindContainer(一次性上传整托电芯绑定)
3. 返回结果

注意:电芯数据在组盘任务放货过程中已由 WCS 通过其他接口写入 Dt_StockInfoDetail,WMS 不需要额外存储


换盘任务完整流程

换盘任务:
  全部取完 → SplitPalletConfirm(源托盘) → MES UnBindContainer
  全部放完 → GroupPalletConfirm(目标托盘) → MES BindContainer

现有接口处理

  • GroupPalletAsyncChangePalletAsyncSplitPalletAsync 保留
  • 新接口与现有接口并存,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 侧幂等支持