编辑 | blame | 历史 | 原始文档

任务库存历史记录设计

概述

TaskService 中注入任务历史和库存历史服务,在所有任务完成方法中保存历史记录。

涉及文件

  • WIDESEA_TaskInfoService/TaskService.cs

详细设计

1. 注入服务

TaskService 中添加:
csharp private readonly ITask_HtyService _task_HtyService; private readonly IStockInfo_HtyService _stockInfo_HtyService;

构造函数添加参数并赋值。

2. 修改 CompleteTaskAsync

InboundFinishTaskAsyncOutboundFinishTaskAsyncRelocationFinishTaskAsync 都调用了 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,需要在事务内、删除任务前添加任务历史和库存历史保存:

// 任务历史
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>() 进行对象映射
  • 历史保存必须在删除原记录**之前**执行