在 TaskService 中注入任务历史和库存历史服务,在所有任务完成方法中保存历史记录。
WIDESEA_TaskInfoService/TaskService.cs在 TaskService 中添加:csharp private readonly ITask_HtyService _task_HtyService; private readonly IStockInfo_HtyService _stockInfo_HtyService;
构造函数添加参数并赋值。
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, "移库完成")
这两个方法**不调用** CompleteTaskAsync,需要在事务内、删除任务前添加任务历史和库存历史保存:
// 任务历史
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("库存历史保存失败");
| 方法 | OperateType |
|---|---|
InboundFinishTaskAsync |
"入库完成" |
OutboundFinishTaskAsync |
"出库完成" |
RelocationFinishTaskAsync |
"移库完成" |
InboundFinishTaskTrayAsync |
"空托盘入库完成" |
OutboundFinishTaskTrayAsync |
"空托盘出库完成" |
Dt_Task_Hty 继承自 Dt_Task,包含 SourceId(原表主键)、OperateType(操作类型)、InsertTime(插入时间)MapsterMapper 的 _mapper.Map<T>() 进行对象映射