wanshenmean
2026-03-30 ff5bfc0035fc61121570889d4f3c9aac63364a1b
docs: 添加 MES 电芯绑定解绑集成实现计划

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
已添加1个文件
213 ■■■■■ 文件已修改
Code/WMS/docs/superpowers/plans/2026-03-30-MES电芯绑定解绑集成实现计划.md 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WMS/docs/superpowers/plans/2026-03-30-MESµçо°ó¶¨½â°ó¼¯³ÉʵÏּƻ®.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,213 @@
# MES ç”µèŠ¯ç»‘å®šè§£ç»‘é›†æˆå®žçŽ°è®¡åˆ’
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** åœ¨ StockService çš„组盘、换盘、拆盘操作中正确调用 MES ç”µèŠ¯ç»‘å®š/解绑接口,并将 MES è°ƒç”¨çº³å…¥ WMS äº‹åŠ¡å†…ã€‚
**Architecture:** ä¿®æ”¹ `StockService` ä¸‰ä¸ªæ–¹æ³•,将 `_mesService.BindContainer()` / `_mesService.UnBindContainer()` æ­£ç¡®åœ°ç”¨ `await` è°ƒç”¨å¹¶æ£€æŸ¥è¿”回结果,MES å¤±è´¥åˆ™äº‹åŠ¡å›žæ»šã€‚
**Tech Stack:** ASP.NET Core 6.0, SqlSugar, IMesService
---
## ä»»åŠ¡æ€»è§ˆ
| ä»»åŠ¡ | æ–¹æ³• | æ“ä½œ |
|------|------|------|
| Task 1 | `GroupPalletAsync` | ä¿®å¤ `_mesService.BindContainer()` ç¼ºå°‘ await å’Œç»“果检查 |
| Task 2 | `ChangePalletAsync` | æ·»åŠ è§£ç»‘æºæ‰˜ç›˜ + ç»‘定目标托盘 |
| Task 3 | `SplitPalletAsync` | æ·»åŠ è§£ç»‘ç”µèŠ¯ |
---
## Task 1: ä¿®å¤ GroupPalletAsync ä¸­çš„ MES è°ƒç”¨
**Files:**
- Modify: `WIDESEA_StockService/StockSerivce.cs:132-176`
- [ ] **Step 1: æŸ¥çœ‹å½“前代码确认上下文**
读取 `StockSerivce.cs` ç¬¬ 132-176 è¡Œï¼Œç¡®è®¤ `bindRequest` å¯¹è±¡çš„æž„建和 `_mesService.BindContainer()` è°ƒç”¨çš„位置。
- [ ] **Step 2: ä¿®æ”¹ BindContainer è°ƒç”¨ä¸º await å¹¶æ£€æŸ¥ç»“æžœ**
将第 166 è¡Œï¼š
```csharp
_mesService.BindContainer()
```
修改为:
```csharp
var mesResult = await _mesService.BindContainer(bindRequest);
if (mesResult == null || !mesResult.Success)
{
    return content.Error($"组盘成功,但MES绑定失败: {mesResult?.Message ?? "未知错误"}");
}
```
- [ ] **Step 3: æž„建验证**
```bash
cd WIDESEA_WMSServer && dotnet build WIDESEA_StockService/WIDESEA_StockService.csproj
```
确认无编译错误。
- [ ] **Step 4: æäº¤**
```bash
git add WIDESEA_StockService/StockSerivce.cs
git commit -m "fix(StockService): GroupPalletAsync正确await MES BindContainer调用并检查结果"
```
---
## Task 2: ä¿®æ”¹ ChangePalletAsync æ·»åŠ  MES è§£ç»‘和绑定调用
**Files:**
- Modify: `WIDESEA_StockService/StockSerivce.cs:181-240`
- [ ] **Step 1: æŸ¥çœ‹å½“前代码确认上下文**
读取 `StockSerivce.cs` ç¬¬ 181-240 è¡Œï¼Œç¡®è®¤ï¼š
- `detailEntities` å˜é‡å®šä¹‰ä½ç½®ï¼ˆåŒ…含要换盘的电芯明细)
- `targetStock.Id` èµ‹å€¼ä½ç½®
- `return content.OK("换盘成功")` ä¹‹å‰çš„逻辑
- [ ] **Step 2: åœ¨æ›´æ–°åº“存明细前添加 UnBindContainer è°ƒç”¨**
在第 231 è¡Œ `var result = await StockInfoDetailService.Repository.UpdateDataAsync(detailEntities);` ä¹‹å‰æ·»åŠ ï¼š
```csharp
// è°ƒç”¨MES解绑源托盘电芯
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()
};
var unbindResult = await _mesService.UnBindContainer(unbindRequest);
if (unbindResult == null || !unbindResult.Success)
{
    return content.Error($"换盘成功,但MES解绑失败: {unbindResult?.Message ?? "未知错误"}");
}
```
- [ ] **Step 3: åœ¨æ›´æ–°åº“存明细后添加 BindContainer è°ƒç”¨**
在第 231 è¡Œä¹‹åŽã€`return content.OK("换盘成功");` ä¹‹å‰æ·»åŠ ï¼š
```csharp
// è°ƒç”¨MES绑定目标托盘电芯
var bindRequest = new BindContainerRequest
{
    ContainerCode = stock.TargetPalletNo,
    EquipmentCode = "STK-GROUP-001",
    ResourceCode = "STK-GROUP-001",
    LocalTime = DateTime.Now,
    OperationType = 0,
    ContainerSfcList = detailEntities.Select(d => new ContainerSfcItem
    {
        Sfc = d.SerialNumber,
        Location = d.InboundOrderRowNo.ToString()
    }).ToList()
};
var bindResult = await _mesService.BindContainer(bindRequest);
if (bindResult == null || !bindResult.Success)
{
    return content.Error($"换盘成功,但MES绑定失败: {bindResult?.Message ?? "未知错误"}");
}
```
- [ ] **Step 4: æž„建验证**
```bash
cd WIDESEA_WMSServer && dotnet build WIDESEA_StockService/WIDESEA_StockService.csproj
```
确认无编译错误。
- [ ] **Step 5: æäº¤**
```bash
git add WIDESEA_StockService/StockSerivce.cs
git commit -m "feat(StockService): ChangePalletAsync添加MES解绑和绑定调用"
```
---
## Task 3: ä¿®æ”¹ SplitPalletAsync æ·»åŠ  MES è§£ç»‘调用
**Files:**
- Modify: `WIDESEA_StockService/StockSerivce.cs:245-286`
- [ ] **Step 1: æŸ¥çœ‹å½“前代码确认上下文**
读取 `StockSerivce.cs` ç¬¬ 245-286 è¡Œï¼Œç¡®è®¤ï¼š
- `detailEntities` å˜é‡å®šä¹‰å’ŒåŒ…含的电芯列表
- `return content.OK("拆盘成功");` ä¹‹å‰çš„逻辑
- [ ] **Step 2: åœ¨åˆ é™¤åº“存明细前添加 UnBindContainer è°ƒç”¨**
在第 277 è¡Œ `var result = await StockInfoDetailService.Repository.DeleteDataAsync(detailEntities);` ä¹‹å‰æ·»åŠ ï¼š
```csharp
// è°ƒç”¨MES解绑电芯
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()
};
var unbindResult = await _mesService.UnBindContainer(unbindRequest);
if (unbindResult == null || !unbindResult.Success)
{
    return content.Error($"拆盘成功,但MES解绑失败: {unbindResult?.Message ?? "未知错误"}");
}
```
- [ ] **Step 3: æž„建验证**
```bash
cd WIDESEA_WMSServer && dotnet build WIDESEA_StockService/WIDESEA_StockService.csproj
```
确认无编译错误。
- [ ] **Step 4: æäº¤**
```bash
git add WIDESEA_StockService/StockSerivce.cs
git commit -m "feat(StockService): SplitPalletAsync添加MES解绑调用"
```
---
## Task 4: æ•´ä½“构建验证
- [ ] **Step 1: æž„建整个解决方案**
```bash
cd WIDESEA_WMSServer && dotnet build WIDESEA_WMSServer.sln
```
确认无编译错误、无警告。
- [ ] **Step 2: æäº¤æ‰€æœ‰æ›´æ”¹**
如果之前没有合并提交,在此执行最终提交。
---
## éªŒè¯æ£€æŸ¥æ¸…单
- [ ] `GroupPalletAsync` ä¸­ `await _mesService.BindContainer()` æ­£ç¡® await
- [ ] `ChangePalletAsync` ä¸­å…ˆ UnBind å† Bind,顺序正确
- [ ] `SplitPalletAsync` ä¸­ UnBind åœ¨ Delete ä¹‹å‰
- [ ] æ‰€æœ‰ MES è°ƒç”¨æ£€æŸ¥ `Success` å±žæ€§
- [ ] é”™è¯¯ä¿¡æ¯æ ¼å¼ç»Ÿä¸€ï¼š`"{操作}成功,但MES{操作}失败: {错误信息}"`
- [ ] è§£å†³æ–¹æ¡ˆæž„建无错误