在 StockService 的组盘、换盘、拆盘操作中,将 MES 电芯绑定/解绑调用纳入 WMS 事务内,确保库存数据与 MES 状态一致。
MES 调用纳入 WMS 事务内 — 如果 MES 调用失败,整个事务回滚,WMS 库存数据不会变化。
| 操作 | MES 调用 | 时机 |
|---|---|---|
| 组盘 | BindContainer |
WMS 库存写入后 |
| 换盘 | UnBindContainer → BindContainer |
解绑在换出前,绑定在换入后 |
| 拆盘 | UnBindContainer |
库存明细删除前 |
WIDESEA_StockService/StockSerivce.cs现有逻辑:
- 在事务内执行 WMS 库存写入
- 第 166 行已存在 _mesService.BindContainer() 调用,但缺少 await 和结果处理
修改后:
- 修复为 await _mesService.BindContainer(bindRequest)
- 检查返回结果,result.Success == false 时事务回滚
- 错误返回:"组盘成功,但MES调用失败: {MES错误}"
现有逻辑:
- 事务内:查询源托盘和目标托盘 → 更新库存明细的 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() };
现有逻辑:
- 事务内:查询库存明细 → 删除明细记录
修改后:
- 删除前,调用 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",与组盘现有逻辑保持一致。
awaitHttpResponseResult<MesResponse> 的 Success 属性ExecuteWithinTransactionAsync 在 result.Status != true 时回滚)