using AutoMapper; using Microsoft.Extensions.Logging; using System.Transactions; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Enums; using WIDESEA_ITaskInfoService; using WIDESEA_Model.Models; namespace WIDESEA_TaskInfoService; public class Task_HtyService : ServiceBase>, ITask_HtyService { private readonly ILogger _logger; private readonly IMapper _mapper; // AutoMapper实例 public Task_HtyService(IRepository BaseDal, IMapper mapper, ILogger logger) : base(BaseDal) { _mapper = mapper; _logger = logger; } public bool DeleteAndMoveIntoHty(Dt_Task task, OperateTypeEnum operateType) { // using var transaction = Db.Ado.UseTran(); try { var historyEntity = _mapper.Map(task); // 2. 填充历史实体核心字段 historyEntity.SourceId = task.TaskId; historyEntity.OperateType = App.User?.UserName != null ? OperateTypeEnum.自动完成.ToString() : OperateTypeEnum.人工完成.ToString(); historyEntity.Creater = App.User?.UserName != null ? App.User.UserName : "System"; // 覆盖修改人/修改时间(优先级高于映射) // historyEntity.Modifier = App.User?.UserId > 0 ? App.User?.UserName : "System"; // historyEntity.ModifyDate = DateTime.Now; // 3. 插入历史表(类型安全,无反射拼接表名) int insertCount = Db.Insertable(historyEntity).ExecuteCommand(); if (insertCount <= 0) { _logger.LogError($"任务历史表Dt_Task_Hty [{task.TaskNum}]插入失败,影响行数为0"); // transaction.RollbackTran(); return false; } // 4. 删除原实体(类型安全) int deleteCount = Db.Deleteable(task).ExecuteCommand(); if (deleteCount <= 0) { _logger.LogError("任务业务实体[{0}]删除失败,影响行数为0", task.TaskNum); // transaction.RollbackTran(); return false; } //transaction.CommitTran(); _logger.LogInformation("任务实体[{0}]已成功移入历史表[{1}]并删除原数据", task.TaskNum); return true; } catch (Exception ex) { // transaction.RollbackTran(); _logger.LogError(ex, "任务删除实体[{0}]并移入历史表失败", task.TaskNum); return false; } } }