wanshenmean
2026-03-30 5fbc2143bbc408cab50bbb0deb2b36e81f8d8f4c
docs: 添加任务库存历史记录设计

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
已添加1个文件
83 ■■■■■ 文件已修改
Code/WMS/docs/superpowers/specs/2026-03-30-任务库存历史记录设计.md 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WMS/docs/superpowers/specs/2026-03-30-ÈÎÎñ¿â´æÀúÊ·¼Ç¼Éè¼Æ.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
# ä»»åŠ¡åº“å­˜åŽ†å²è®°å½•è®¾è®¡
## æ¦‚è¿°
在 `TaskService` ä¸­æ³¨å…¥ä»»åŠ¡åŽ†å²å’Œåº“å­˜åŽ†å²æœåŠ¡ï¼Œåœ¨æ‰€æœ‰ä»»åŠ¡å®Œæˆæ–¹æ³•ä¸­ä¿å­˜åŽ†å²è®°å½•ã€‚
## æ¶‰åŠæ–‡ä»¶
- `WIDESEA_TaskInfoService/TaskService.cs`
## è¯¦ç»†è®¾è®¡
### 1. æ³¨å…¥æœåŠ¡
在 `TaskService` ä¸­æ·»åŠ ï¼š
```csharp
private readonly ITask_HtyService _task_HtyService;
private readonly IStockInfo_HtyService _stockInfo_HtyService;
```
构造函数添加参数并赋值。
### 2. ä¿®æ”¹ CompleteTaskAsync
`InboundFinishTaskAsync`、`OutboundFinishTaskAsync`、`RelocationFinishTaskAsync` éƒ½è°ƒç”¨äº† `CompleteTaskAsync`,因此只需修改 `CompleteTaskAsync` å³å¯ã€‚
由于 `Dt_Task` æ²¡æœ‰ `OperateType` å­—段,需要给 `CompleteTaskAsync` æ·»åŠ å‚æ•°ï¼š
**修改方法签名:**
```csharp
private async Task<WebResponseContent> CompleteTaskAsync(Dt_Task task, string operateType)
```
**修改后代码:**
```csharp
var historyTask = _mapper.Map<Dt_Task_Hty>(task);
historyTask.InsertTime = DateTime.Now;
historyTask.OperateType = operateType;
var saveResult = await _task_HtyService.Repository.AddDataAsync(historyTask) > 0;
if (!saveResult) return WebResponseContent.Instance.Error("任务历史保存失败");
return WebResponseContent.Instance.OK("任务完成");
```
**调用方修改(3处):**
- `InboundFinishTaskAsync`:调用 `await CompleteTaskAsync(task, "入库完成")`
- `OutboundFinishTaskAsync`:调用 `await CompleteTaskAsync(task, "出库完成")`
- `RelocationFinishTaskAsync`:调用 `await CompleteTaskAsync(task, "移库完成")`
### 3. InboundFinishTaskTrayAsync å’Œ OutboundFinishTaskTrayAsync
这两个方法**不调用** `CompleteTaskAsync`,需要在事务内、删除任务前添加任务历史和库存历史保存:
```csharp
// ä»»åŠ¡åŽ†å²
var historyTask = _mapper.Map<Dt_Task_Hty>(task);
historyTask.InsertTime = DateTime.Now;
historyTask.OperateType = "空托盘入库完成"; // æˆ–"空托盘出库完成"
if (await _task_HtyService.Repository.AddDataAsync(historyTask) <= 0)
    return content.Error("任务历史保存失败");
// åº“存历史
var historyStock = _mapper.Map<Dt_StockInfo_Hty>(stockInfo);
historyStock.InsertTime = DateTime.Now;
historyStock.OperateType = "空托盘入库完成"; // æˆ–"空托盘出库完成"
if (await _stockInfo_HtyService.Repository.AddDataAsync(historyStock) <= 0)
    return content.Error("库存历史保存失败");
```
### 4. æ“ä½œç±»åž‹æžšä¸¾
| æ–¹æ³• | OperateType |
|------|-------------|
| `InboundFinishTaskAsync` | "入库完成" |
| `OutboundFinishTaskAsync` | "出库完成" |
| `RelocationFinishTaskAsync` | "移库完成" |
| `InboundFinishTaskTrayAsync` | "空托盘入库完成" |
| `OutboundFinishTaskTrayAsync` | "空托盘出库完成" |
## å…³é”®ç‚¹
- `Dt_Task_Hty` ç»§æ‰¿è‡ª `Dt_Task`,包含 `SourceId`(原表主键)、`OperateType`(操作类型)、`InsertTime`(插入时间)
- ä½¿ç”¨ `MapsterMapper` çš„ `_mapper.Map<T>()` è¿›è¡Œå¯¹è±¡æ˜ å°„
- åŽ†å²ä¿å­˜å¿…é¡»åœ¨åˆ é™¤åŽŸè®°å½•**之前**执行