# 任务库存历史记录设计 ## 概述 在 `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 CompleteTaskAsync(Dt_Task task, string operateType) ``` **修改后代码:** ```csharp var historyTask = _mapper.Map(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(task); historyTask.InsertTime = DateTime.Now; historyTask.OperateType = "空托盘入库完成"; // 或"空托盘出库完成" if (await _task_HtyService.Repository.AddDataAsync(historyTask) <= 0) return content.Error("任务历史保存失败"); // 库存历史 var historyStock = _mapper.Map(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()` 进行对象映射 - 历史保存必须在删除原记录**之前**执行