当前 StockSerivce 中 GroupPalletAsync、ChangePalletAsync、SplitPalletAsync 每次调用都会触发一次 MES 接口。
WCS 机器人任务按批次取放,一个托盘可能需要多次 MES 调用(如换盘需要先解绑再绑定)。为减少 MES 调用次数,新增两个批量确认接口供 WCS 在任务阶段完成时一次性上传托盘级别的绑定/解绑数据。
触发时机: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 | 创建时间 |
触发时机: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
GroupPalletAsync、ChangePalletAsync、SplitPalletAsync 保留SplitPalletAsync 接口;WMS 在 SplitPalletAsync 内部先检查 Dt_SplitTemp 是否已有该托盘记录,无则写入,有则跳过(幂等写入)GroupPalletConfirmSplitPalletConfirm,全部放完时调用 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 需要有清理机制,防止异常情况下数据残留