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

MES 电芯绑定解绑集成设计

概述

StockService 的组盘、换盘、拆盘操作中,将 MES 电芯绑定/解绑调用纳入 WMS 事务内,确保库存数据与 MES 状态一致。

事务策略

MES 调用纳入 WMS 事务内 — 如果 MES 调用失败,整个事务回滚,WMS 库存数据不会变化。

数据流

操作 MES 调用 时机
组盘 BindContainer WMS 库存写入后
换盘 UnBindContainerBindContainer 解绑在换出前,绑定在换入后
拆盘 UnBindContainer 库存明细删除前

涉及文件

  • WIDESEA_StockService/StockSerivce.cs

详细设计

1. 组盘 (GroupPalletAsync)

现有逻辑:
- 在事务内执行 WMS 库存写入
- 第 166 行已存在 _mesService.BindContainer() 调用,但缺少 await 和结果处理

修改后:
- 修复为 await _mesService.BindContainer(bindRequest)
- 检查返回结果,result.Success == false 时事务回滚
- 错误返回:"组盘成功,但MES调用失败: {MES错误}"

2. 换盘 (ChangePalletAsync)

现有逻辑:
- 事务内:查询源托盘和目标托盘 → 更新库存明细的 StockId

修改后:
- 在更新库存明细前,调用 UnBindContainer 解绑源托盘电芯
- 在更新库存明细后,调用 BindContainer 绑定到目标托盘
- MES 失败 → 事务回滚

UnBindContainer 请求构建:
csharp var unbindRequest = new UnBindContainerRequest { EquipmentCode = "STK-GROUP-001", ResourceCode = "STK-GROUP-001", LocalTime = DateTime.Now, ContainCode = stock.SourcePalletNo, SfcList = detailEntities.Select(d => d.SerialNumber).ToList() };

3. 拆盘 (SplitPalletAsync)

现有逻辑:
- 事务内:查询库存明细 → 删除明细记录

修改后:
- 删除前,调用 UnBindContainer 解绑电芯
- MES 失败 → 事务回滚

UnBindContainer 请求构建:
csharp var unbindRequest = new UnBindContainerRequest { EquipmentCode = "STK-GROUP-001", ResourceCode = "STK-GROUP-001", LocalTime = DateTime.Now, ContainCode = stock.SourcePalletNo, SfcList = detailEntities.Select(d => d.SerialNumber).ToList() };

错误处理

统一错误处理策略:
- MES 调用失败时,事务回滚
- 返回:"{操作}成功,但MES调用失败: {MES错误}"

其中 {MES错误} 来自 result.Message

设备编码

硬编码 EquipmentCode = "STK-GROUP-001"ResourceCode = "STK-GROUP-001",与组盘现有逻辑保持一致。

实现要点

  • 所有 MES 调用使用 await
  • 检查 HttpResponseResult<MesResponse>Success 属性
  • MES 调用失败时返回错误信息,事务自动回滚(ExecuteWithinTransactionAsyncresult.Status != true 时回滚)