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 - 新增组盘/拆盘按钮 |
| 新增 | 数据库变更脚本 |
Files: Create WIDESEA_Common/StockEnum/MesUploadStatusEnum.cs
b21d0f2Files: Modify WIDESEA_Model/Models/Stock/Dt_StockInfo.cs
Remark 和 OutboundDate 之间新增 MesUploadStatus 字段(int, 默认0)58759d4Files: Modify WIDESEA_IStockService/IStockInfoService.cs
UpdateMesUploadStatusAsync(string palletCode, int status) 方法声明18e0765Files: Modify WIDESEA_StockService/StockInfoService.cs
UpdateMesUploadStatusAsync:按托盘号查询 → 更新 MesUploadStatus25a246f(后修复缺失闭合括号 → c329a05)Files: Modify WIDESEA_TaskInfoService/TaskService.cs
WIDESEA_Common.StockEnum, System.Diagnostics, Newtonsoft.JsonMesUploadAsync 私有异步方法(Task.Run 调用 MES + 更新状态 + 日志)LogMesCallAsync 私有日志方法1330effFiles: Create Database/Scripts/20260420_Dt_StockInfo_MesUploadStatus.sql
eec94e8Files: Modify WIDESEA_DTO/MES/MesApiLogDto.cs
PalletCode 属性支持按托盘号查询日志32ece02Files: Modify WIDESEA_TaskInfoService/WCS/TaskService_Outbound.cs
OutboundInContainer 改为 Task.Run 异步执行MesUploadStatusEnum.出站上传成功(7)/ 出站上传失败(8)91e3264Files: Modify WIDESEA_StockService/StockSerivce.cs
GroupPalletConfirmAsync → BindContainer 改为 Task.Run 异步MesUploadStatusEnum.组盘上传成功(1)MesUploadStatusEnum.组盘上传失败(2)SplitPalletConfirmAsync → UnBindContainer 改为 Task.Run 异步MesUploadStatusEnum.拆盘上传成功(3)MesUploadStatusEnum.拆盘上传失败(4)ResolveMesConfig)4506a1eFiles: Modify WIDESEA_WMSServer/Controllers/Stock/StockInfoDetailController.cs
BindContainer 改为 Task.Run 异步 → MesUploadStatusEnum.组盘上传成功/失败UnbindContainer 改为 Task.Run 异步 → MesUploadStatusEnum.拆盘上传成功/失败ContainerNgReport 改为 Task.Run 异步 → MesUploadStatusEnum.NG上报成功/失败"STK-GROUP-001" 改为 _mesDeviceConfigService.GetByDeviceName() 动态获取IMESDeviceConfigService57feefd → c36c5c6Files: Modify WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs
InboundInContainer 改为 Task.Run 异步 → MesUploadStatusEnum.进站上传成功/失败OutboundInContainer 改为 Task.Run 异步 → MesUploadStatusEnum.出站上传成功/失败"STK-GROUP-001" 改为基于 stockInfo.Remark 动态选择设备名查询 MES 凭证IMESDeviceConfigService 和 IStockInfoService343d512 → fba665eFiles: Modify WIDESEA_TaskInfoService/WCS/TaskService_Inbound.cs
InboundInContainer 改为 Task.Run 异步执行MesUploadStatusEnum.进站上传成功(5)/ 进站上传失败(6)_mesDeviceConfigService.GetByDeviceName)CompleteTaskAsync 立即返回,不等待 MES 结果63ca4acFiles: Modify WIDESEA_WMSClient/src/views/stock/stockInfo.vue
stockStatus 之后新增 mesUploadStatus 列(bind: mesUploadStatusEnum)loadStockStatusOptions 改为同时加载 stockStatusEmun + mesUploadStatusEnum9a1c82aFiles: Modify WIDESEA_WMSClient/src/extension/stock/stock.jsx
onInited 中注入 editTableButtons:组盘 + 拆盘onGroupPallet → POST /Stock/GroupPalletConfirmonSplitPallet → POST /Stock/SplitPalletConfirm0be9278dotnet build WIDESEA_WMSServer.sln → 0 错误npm run build → 0 错误| 位置 | 方法 | 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 | ✅ |
MesUploadStatusEnum 枚举值奇数为成功,偶数为失败Task.Run 异步执行,不阻塞主逻辑"STK-GROUP-001"GroupPalletConfirmAsync / SplitPalletConfirmAsyncstockInfo.vue 正确显示 mesUploadStatus 字段