wanshenmean
5 小时以前 b0442e9b2f9e19bd6b1be1a9eb876d6f4b90a729
docs: 更新MES上传状态实现计划,补充Tasks 11-16

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
已添加1个文件
206 ■■■■■ 文件已修改
Code/docs/superpowers/plans/2026-04-20-MES上传状态与异步上传实现计划.md 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/docs/superpowers/plans/2026-04-20-MESÉÏ´«×´Ì¬ÓëÒì²½ÉÏ´«ÊµÏּƻ®.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,206 @@
# 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 (`- [x]`) syntax for tracking.
**Goal:** åœ¨åº“存表添加 MES ä¸Šä¼ çŠ¶æ€å­—æ®µï¼Œé€šè¿‡ `Task.Run` å¼‚步方式上传 MES æ•°æ®ä¸å¹²æ‰°ä¸»é€»è¾‘,所有 MES è°ƒç”¨è®°å½•详细日志,前端显示状态并提供组盘/拆盘按钮,所有 MES å‡­è¯æ”¹ä¸ºåŠ¨æ€èŽ·å–ã€‚
**Architecture:**
- `Dt_StockInfo.MesUploadStatus` å•字段记录最近一次 MES æ“ä½œç»“果状态
- æ‰€æœ‰ MES è°ƒç”¨ç»Ÿä¸€é€šè¿‡ `Task.Run` å¼‚步执行,不阻塞主逻辑
- ä¸Šä¼ å®ŒæˆåŽæ›´æ–° `MesUploadStatus`,并通过 `IMesLogService.LogAsync` è®°å½•详细日志
- æ‰€æœ‰ MES å‡­è¯ï¼ˆEquipmentCode、ResourceCode、Token)改为从 `Dt_MESDeviceConfig` è¡¨åŠ¨æ€èŽ·å–
- å‰ç«¯ `stockInfo.vue` æ–°å¢žçŠ¶æ€åˆ—ï¼Œ`stock.jsx` æ–°å¢žç»„盘/拆盘按钮
**Tech Stack:** .NET 6/8, C#, SqlSugar ORM, ASP.NET Core WebAPI, Vue 3, Element Plus
---
## æ–‡ä»¶å˜æ›´æ¦‚览
| æ“ä½œ | æ–‡ä»¶ |
|------|------|
| æ–°å¢ž | `WIDESEA_Common/StockEnum/MesUploadStatusEnum.cs` |
| ä¿®æ”¹ | `WIDESEA_Model/Models/Stock/Dt_StockInfo.cs` - æ–°å¢ž `MesUploadStatus` å­—段 |
| ä¿®æ”¹ | `WIDESEA_IStockService/IStockInfoService.cs` - æ–°å¢ž `UpdateMesUploadStatusAsync` |
| ä¿®æ”¹ | `WIDESEA_StockService/StockInfoService.cs` - å®žçް `UpdateMesUploadStatusAsync` |
| ä¿®æ”¹ | `WIDESEA_DTO/MES/MesApiLogDto.cs` - æ–°å¢ž `PalletCode` å­—段 |
| ä¿®æ”¹ | `WIDESEA_TaskInfoService/TaskService.cs` - æ–°å¢ž `MesUploadAsync` + `LogMesCallAsync` |
| ä¿®æ”¹ | `WIDESEA_TaskInfoService/WCS/TaskService_Outbound.cs` - å‡ºç«™ MES æ”¹ä¸ºå¼‚æ­¥ |
| ä¿®æ”¹ | `WIDESEA_TaskInfoService/WCS/TaskService_Inbound.cs` - è¿›ç«™ MES æ”¹ä¸ºå¼‚æ­¥ |
| ä¿®æ”¹ | `WIDESEA_StockService/StockSerivce.cs` - ç»„盘/拆盘 MES æ”¹ä¸ºå¼‚æ­¥ |
| ä¿®æ”¹ | `WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs` - è¿›ç«™/出站 MES æ”¹ä¸ºå¼‚æ­¥ + åŠ¨æ€å‡­è¯ |
| ä¿®æ”¹ | `WIDESEA_WMSServer/Controllers/Stock/StockInfoDetailController.cs` - ç»‘定/解绑/NG MES æ”¹ä¸ºå¼‚æ­¥ + åŠ¨æ€å‡­è¯ |
| ä¿®æ”¹ | `WIDESEA_WMSClient/src/views/stock/stockInfo.vue` - æ–°å¢ž `mesUploadStatus` åˆ— |
| ä¿®æ”¹ | `WIDESEA_WMSClient/src/extension/stock/stock.jsx` - æ–°å¢žç»„盘/拆盘按钮 |
| æ–°å¢ž | æ•°æ®åº“变更脚本 |
---
## Phase 1: åŸºç¡€è®¾æ–½
### Task 1: æ–°å¢ž MesUploadStatusEnum æžšä¸¾ âœ…
**Files:** Create `WIDESEA_Common/StockEnum/MesUploadStatusEnum.cs`
- [x] åˆ›å»ºæžšä¸¾ç±»ï¼ˆ11个值:0=未上传, 1/2=组盘, 3/4=拆盘, 5/6=进站, 7/8=出站, 9/10=NG上报)
- [x] Commit: `b21d0f2`
### Task 2: ä¿®æ”¹ Dt_StockInfo å®žä½“ âœ…
**Files:** Modify `WIDESEA_Model/Models/Stock/Dt_StockInfo.cs`
- [x] åœ¨ `Remark` å’Œ `OutboundDate` ä¹‹é—´æ–°å¢ž `MesUploadStatus` å­—段(int, é»˜è®¤0)
- [x] Commit: `58759d4`
### Task 3: ä¿®æ”¹ IStockInfoService æŽ¥å£ âœ…
**Files:** Modify `WIDESEA_IStockService/IStockInfoService.cs`
- [x] æ–°å¢ž `UpdateMesUploadStatusAsync(string palletCode, int status)` æ–¹æ³•声明
- [x] Commit: `18e0765`
### Task 4: ä¿®æ”¹ StockInfoService å®žçް âœ…
**Files:** Modify `WIDESEA_StockService/StockInfoService.cs`
- [x] å®žçް `UpdateMesUploadStatusAsync`:按托盘号查询 â†’ æ›´æ–° MesUploadStatus
- [x] Commit: `25a246f`(后修复缺失闭合括号 â†’ `c329a05`)
### Task 5: ä¿®æ”¹ TaskService æ–°å¢žå¼‚步方法 âœ…
**Files:** Modify `WIDESEA_TaskInfoService/TaskService.cs`
- [x] æ·»åŠ  using: `WIDESEA_Common.StockEnum`, `System.Diagnostics`, `Newtonsoft.Json`
- [x] æ–°å¢ž `MesUploadAsync` ç§æœ‰å¼‚步方法(Task.Run è°ƒç”¨ MES + æ›´æ–°çŠ¶æ€ + æ—¥å¿—)
- [x] æ–°å¢ž `LogMesCallAsync` ç§æœ‰æ—¥å¿—方法
- [x] Commit: `1330eff`
### Task 9: æ•°æ®åº“变更脚本 âœ…
**Files:** Create `Database/Scripts/20260420_Dt_StockInfo_MesUploadStatus.sql`
- [x] ALTER TABLE æ–°å¢ž MesUploadStatus TINYINT NOT NULL DEFAULT 0
- [x] Commit: `eec94e8`
### é™„加修复: MesApiLogDto æ–°å¢ž PalletCode âœ…
**Files:** Modify `WIDESEA_DTO/MES/MesApiLogDto.cs`
- [x] æ–°å¢ž `PalletCode` å±žæ€§æ”¯æŒæŒ‰æ‰˜ç›˜å·æŸ¥è¯¢æ—¥å¿—
- [x] Commit: `32ece02`
---
## Phase 2: åŽç«¯ MES è°ƒç”¨æ”¹é€ 
### Task 6: TaskService_Outbound å‡ºç«™ MES å¼‚æ­¥ âœ…
**Files:** Modify `WIDESEA_TaskInfoService/WCS/TaskService_Outbound.cs`
- [x] `OutboundInContainer` æ”¹ä¸º `Task.Run` å¼‚步执行
- [x] ä½¿ç”¨ `MesUploadStatusEnum.出站上传成功`(7)/ `出站上传失败`(8)
- [x] Commit: `91e3264`
### Task 11: StockService ç»„盘/拆盘 MES å¼‚æ­¥ âœ…
**Files:** Modify `WIDESEA_StockService/StockSerivce.cs`
- [x] `GroupPalletConfirmAsync` â†’ `BindContainer` æ”¹ä¸º `Task.Run` å¼‚æ­¥
  - æˆåŠŸ: `MesUploadStatusEnum.组盘上传成功`(1)
  - å¤±è´¥: `MesUploadStatusEnum.组盘上传失败`(2)
- [x] `SplitPalletConfirmAsync` â†’ `UnBindContainer` æ”¹ä¸º `Task.Run` å¼‚æ­¥
  - æˆåŠŸ: `MesUploadStatusEnum.拆盘上传成功`(3)
  - å¤±è´¥: `MesUploadStatusEnum.拆盘上传失败`(4)
- [x] ä¿ç•™åŠ¨æ€ Token èŽ·å–é€»è¾‘ï¼ˆ`ResolveMesConfig`)
- [x] Commit: `4506a1e`
### Task 12: StockInfoDetailController MES å¼‚æ­¥ + åŠ¨æ€å‡­è¯ âœ…
**Files:** Modify `WIDESEA_WMSServer/Controllers/Stock/StockInfoDetailController.cs`
- [x] `BindContainer` æ”¹ä¸º `Task.Run` å¼‚æ­¥ â†’ `MesUploadStatusEnum.组盘上传成功/失败`
- [x] `UnbindContainer` æ”¹ä¸º `Task.Run` å¼‚æ­¥ â†’ `MesUploadStatusEnum.拆盘上传成功/失败`
- [x] `ContainerNgReport` æ”¹ä¸º `Task.Run` å¼‚æ­¥ â†’ `MesUploadStatusEnum.NG上报成功/失败`
- [x] ç¡¬ç¼–码 `"STK-GROUP-001"` æ”¹ä¸º `_mesDeviceConfigService.GetByDeviceName()` åŠ¨æ€èŽ·å–
- [x] æ³¨å…¥ `IMESDeviceConfigService`
- [x] Commit: `57feefd` â†’ `c36c5c6`
### Task 13: StockInfoController MES å¼‚æ­¥ + åŠ¨æ€å‡­è¯ âœ…
**Files:** Modify `WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs`
- [x] `InboundInContainer` æ”¹ä¸º `Task.Run` å¼‚æ­¥ â†’ `MesUploadStatusEnum.进站上传成功/失败`
- [x] `OutboundInContainer` æ”¹ä¸º `Task.Run` å¼‚æ­¥ â†’ `MesUploadStatusEnum.出站上传成功/失败`
- [x] ç¡¬ç¼–码 `"STK-GROUP-001"` æ”¹ä¸ºåŸºäºŽ `stockInfo.Remark` åŠ¨æ€é€‰æ‹©è®¾å¤‡åæŸ¥è¯¢ MES å‡­è¯
- [x] æ³¨å…¥ `IMESDeviceConfigService` å’Œ `IStockInfoService`
- [x] Commit: `343d512` â†’ `fba665e`
### Task 14: TaskService_Inbound è¿›ç«™ MES å¼‚æ­¥ âœ…
**Files:** Modify `WIDESEA_TaskInfoService/WCS/TaskService_Inbound.cs`
- [x] `InboundInContainer` æ”¹ä¸º `Task.Run` å¼‚步执行
- [x] ä½¿ç”¨ `MesUploadStatusEnum.进站上传成功`(5)/ `进站上传失败`(6)
- [x] ä¿ç•™åŠ¨æ€ MES å‡­è¯èŽ·å–é€»è¾‘ï¼ˆ`_mesDeviceConfigService.GetByDeviceName`)
- [x] `CompleteTaskAsync` ç«‹å³è¿”回,不等待 MES ç»“æžœ
- [x] Commit: `63ca4ac`
---
## Phase 3: å‰ç«¯
### Task 7: stockInfo.vue æ–°å¢ž MES çŠ¶æ€åˆ— âœ…
**Files:** Modify `WIDESEA_WMSClient/src/views/stock/stockInfo.vue`
- [x] columns ä¸­ `stockStatus` ä¹‹åŽæ–°å¢ž `mesUploadStatus` åˆ—(bind: mesUploadStatusEnum)
- [x] `loadStockStatusOptions` æ”¹ä¸ºåŒæ—¶åŠ è½½ `stockStatusEmun` + `mesUploadStatusEnum`
- [x] Commit: `9a1c82a`
### Task 8: stock.jsx æ–°å¢žç»„盘/拆盘按钮 âœ…
**Files:** Modify `WIDESEA_WMSClient/src/extension/stock/stock.jsx`
- [x] `onInited` ä¸­æ³¨å…¥ `editTableButtons`:组盘 + æ‹†ç›˜
- [x] `onGroupPallet` â†’ POST `/Stock/GroupPalletConfirm`
- [x] `onSplitPallet` â†’ POST `/Stock/SplitPalletConfirm`
- [x] Commit: `0be9278`
---
## Phase 4: æž„建验证
### Task 10: æž„建验证 âœ…
- [x] åŽç«¯ `dotnet build WIDESEA_WMSServer.sln` â†’ 0 é”™è¯¯
- [x] å‰ç«¯ `npm run build` â†’ 0 é”™è¯¯
---
## MES è°ƒç”¨ç‚¹å…¨è¦†ç›–
| ä½ç½® | æ–¹æ³• | MES接口 | çŠ¶æ€æžšä¸¾ | åŠ¨æ€å‡­è¯ | å¼‚æ­¥ |
|------|------|---------|---------|---------|------|
| `StockSerivce.cs` | `GroupPalletConfirmAsync` | `BindContainer` | 1成功/2失败 | âœ… ResolveMesConfig | âœ… |
| `StockSerivce.cs` | `SplitPalletConfirmAsync` | `UnBindContainer` | 3成功/4失败 | âœ… ResolveMesConfig | âœ… |
| `TaskService_Inbound.cs` | `InboundFinishTaskAsync` | `InboundInContainer` | 5成功/6失败 | âœ… MESDeviceConfigService | âœ… |
| `TaskService_Outbound.cs` | `OutboundFinishTaskAsync` | `OutboundInContainer` | 7成功/8失败 | âœ… MESDeviceConfigService | âœ… |
| `StockInfoController.cs` | `InboundInContainer` | `InboundInContainer` | 5成功/6失败 | âœ… MESDeviceConfigService | âœ… |
| `StockInfoController.cs` | `OutboundInContainer` | `OutboundInContainer` | 7成功/8失败 | âœ… MESDeviceConfigService | âœ… |
| `StockInfoDetailController.cs` | `BindContainer` | `BindContainer` | 1成功/2失败 | âœ… MESDeviceConfigService | âœ… |
| `StockInfoDetailController.cs` | `UnbindContainer` | `UnBindContainer` | 3成功/4失败 | âœ… MESDeviceConfigService | âœ… |
| `StockInfoDetailController.cs` | `ContainerNgReport` | `ContainerNgReport` | 9成功/10失败 | âœ… MESDeviceConfigService | âœ… |
---
## è‡ªæ£€æ¸…单
- [x] `MesUploadStatusEnum` æžšä¸¾å€¼å¥‡æ•°ä¸ºæˆåŠŸï¼Œå¶æ•°ä¸ºå¤±è´¥
- [x] æ‰€æœ‰ MES è°ƒç”¨é€šè¿‡ `Task.Run` å¼‚步执行,不阻塞主逻辑
- [x] æ‰€æœ‰ MES è°ƒç”¨è®°å½•详细日志(托盘号、接口类型、请求JSON、响应JSON、耗时、状态、错误原因)
- [x] æ‰€æœ‰ MES å‡­è¯åŠ¨æ€èŽ·å–ï¼Œä¸å†ç¡¬ç¼–ç  `"STK-GROUP-001"`
- [x] å‰ç«¯ç»„盘/拆盘按钮正确调用 `GroupPalletConfirmAsync` / `SplitPalletConfirmAsync`
- [x] `stockInfo.vue` æ­£ç¡®æ˜¾ç¤º `mesUploadStatus` å­—段
- [x] æ‰€æœ‰ public æ–¹æ³•均有 XML æ–‡æ¡£æ³¨é‡Š
- [x] æ•°æ®åº“脚本含 IF NOT EXISTS é˜²æ­¢é‡å¤æ·»åŠ 
- [x] åŽç«¯å’Œå‰ç«¯å‡å¯æ­£å¸¸ç¼–译构建(0 é”™è¯¯ï¼‰