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 IRepository _taskRepository; private readonly IMapper _mapper; // AutoMapper实例 public Task_HtyService(IRepository BaseDal, IMapper mapper, ILogger logger, IRepository taskRepository) : base(BaseDal) { _mapper = mapper; _logger = logger; _taskRepository = taskRepository; } public bool DeleteAndMoveIntoHty(Dt_Task task, OperateTypeEnum operateType) { // using var transaction = Db.Ado.UseTran(); try { _taskRepository.DeleteAndMoveIntoHty(task, operateType); return true; //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; } } }