wanshenmean
2026-03-30 4c4f4de76d118f0f66f3f1d9510b6e6199574318
docs: 添加 MES 电芯绑定解绑集成设计

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
已添加1个文件
95 ■■■■■ 文件已修改
Code/WMS/docs/superpowers/specs/2026-03-30-MES电芯绑定解绑集成设计.md 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WMS/docs/superpowers/specs/2026-03-30-MESµçо°ó¶¨½â°ó¼¯³ÉÉè¼Æ.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,95 @@
# MES ç”µèŠ¯ç»‘å®šè§£ç»‘é›†æˆè®¾è®¡
## æ¦‚è¿°
在 `StockService` çš„组盘、换盘、拆盘操作中,将 MES ç”µèŠ¯ç»‘å®š/解绑调用纳入 WMS äº‹åŠ¡å†…ï¼Œç¡®ä¿åº“å­˜æ•°æ®ä¸Ž MES çŠ¶æ€ä¸€è‡´ã€‚
## äº‹åŠ¡ç­–ç•¥
**MES è°ƒç”¨çº³å…¥ WMS äº‹åС内** â€” å¦‚æžœ MES è°ƒç”¨å¤±è´¥ï¼Œæ•´ä¸ªäº‹åŠ¡å›žæ»šï¼ŒWMS åº“存数据不会变化。
## æ•°æ®æµ
| æ“ä½œ | MES è°ƒç”¨ | æ—¶æœº |
|------|----------|------|
| **组盘** | `BindContainer` | WMS åº“存写入后 |
| **换盘** | `UnBindContainer` â†’ `BindContainer` | è§£ç»‘在换出前,绑定在换入后 |
| **拆盘** | `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 è°ƒç”¨å¤±è´¥æ—¶è¿”回错误信息,事务自动回滚(`ExecuteWithinTransactionAsync` åœ¨ `result.Status != true` æ—¶å›žæ»šï¼‰