diff --git a/API/TaskManager.EntityFramework/IRepository/IRepository.cs b/API/TaskManager.EntityFramework/IRepository/IRepository.cs index 2244f0e..4b956ac 100644 --- a/API/TaskManager.EntityFramework/IRepository/IRepository.cs +++ b/API/TaskManager.EntityFramework/IRepository/IRepository.cs @@ -13,6 +13,8 @@ namespace TaskManager.EntityFramework { public interface IRepository where TEntity : BaseEntity { + void SetDbContext(JobDbContext context); + Task GetByIdAsync(long id); Task> GetAllAsync(); Task AddAsync(TEntity entity); diff --git a/API/TaskManager.EntityFramework/Repository/Repository.cs b/API/TaskManager.EntityFramework/Repository/Repository.cs index 6a34dfa..2e3a95f 100644 --- a/API/TaskManager.EntityFramework/Repository/Repository.cs +++ b/API/TaskManager.EntityFramework/Repository/Repository.cs @@ -18,8 +18,8 @@ namespace TaskManager.EntityFramework.Repository public class Repository : IRepository where TEntity : BaseEntity { - private readonly JobDbContext _context; - private readonly DbSet _dbSet; + private JobDbContext _context; + private DbSet _dbSet; public Repository(JobDbContext context) { @@ -27,6 +27,12 @@ namespace TaskManager.EntityFramework.Repository _dbSet = context.Set(); } + public void SetDbContext(JobDbContext context) + { + _context = context; + _dbSet = context.Set(); + } + public async Task GetByIdAsync(long id) { return await _dbSet.FindAsync(id); diff --git a/API/Wood.Service/Commons/CommonService.cs b/API/Wood.Service/Commons/CommonService.cs new file mode 100644 index 0000000..0e609e9 --- /dev/null +++ b/API/Wood.Service/Commons/CommonService.cs @@ -0,0 +1,65 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TaskManager.Entity; +using TaskManager.EntityFramework; +using Wood.Entity; +using Wood.Util; + +namespace Wood.Service +{ + public class CommonService : ControllerBase, IScoped + { + protected readonly JobDbContext _context; + protected readonly IServiceProvider _builder; + protected readonly IConfiguration _configuration; + + public CommonService(JobDbContext context, IServiceProvider builder, IConfiguration configuration) + { + _builder = builder; + _context = context; + _configuration = configuration; + } + /// + /// 生成TaskSub + /// + /// 任务明细数量 + /// + /// + [HttpGet] + public TaskSub BuildTaskSub(int dataCount, string taskName) + { + TaskConifgure? taskConfigureObj = _context.Set().FirstOrDefault(itm => itm.TaskName == taskName); + if (taskConfigureObj == null) + { + throw new Exception($"任务配置表没有'{taskName}'任务"); + } + + TaskSub taskSub = new TaskSub(); + taskSub.TableName = taskConfigureObj.TableName; //关联的数据表名称(如:订单表、用户表等,可为空) + taskSub.TaskName = taskConfigureObj.TaskName; //任务名称(用于业务层面标识任务,如:数据同步任务、报表生成任务) + taskSub.DataCount = dataCount; //数据总量(任务处理的数据条目数) + taskSub.Subscriber = taskConfigureObj.Client; //发布给那个客户 + taskSub.FailedCount = 0; //失败次数(任务执行失败的累计次数) + taskSub.FailedInfo = ""; //失败详情(记录失败原因、异常堆栈等信息,支持长文本) + taskSub.Domain = ""; //所属域(多租户场景下标识租户,如:租户A、租户B) + taskSub.Site = ""; //站点标识(多站点部署时标识所属站点,如:Site1、Site2) + taskSub.CreateUser = CommonHelper.UserName; //从那个内部系统创建系统 + taskSub.CreateTime = CommonHelper.CurrentTime; //创建时间(任务创建的时间戳) + taskSub.Remark = ""; //备注信息(任务相关的补充说明,支持长文本) + taskSub.UpdateUser = ""; //最后更新人(记录任务最后修改者) + taskSub.UpdateTime = null; //最后更新时间(任务最后修改的时间戳,可为空) + taskSub.SyncedPageCount = 0; //已同步页数 + taskSub.ReadState = true; + taskSub.CreationTime = CommonHelper.CurrentTime; + taskSub.TaskId = CommonHelper.NewGuid; + return taskSub; + } + + } +} diff --git a/API/Wood.Service/Controllers/NormalBaseController.cs b/API/Wood.Service/Controllers/NormalBaseController.cs index 9d17b03..a85e18a 100644 --- a/API/Wood.Service/Controllers/NormalBaseController.cs +++ b/API/Wood.Service/Controllers/NormalBaseController.cs @@ -25,7 +25,7 @@ using Wood.Util.Filters; namespace Wood.Service.Controllers { [AllowAnonymous] - public class NormalBaseController:ControllerBase,IScoped where T:BaseEntity ,new() + public class NormalBaseController:ControllerBase,ITransient where T:BaseEntity ,new() { protected readonly JobDbContext _context; diff --git a/API/Wood.Service/Datas/SupplierEmployeeDtService.cs b/API/Wood.Service/Datas/SupplierEmployeeDtService.cs index 86ed989..a6bb2b5 100644 --- a/API/Wood.Service/Datas/SupplierEmployeeDtService.cs +++ b/API/Wood.Service/Datas/SupplierEmployeeDtService.cs @@ -22,15 +22,24 @@ namespace Wood.Service.Datas { public class SupplierEmployeeDtService : NormalBaseController { + const string _taskName = "人员资质信息"; + private readonly IRepository _taskSubRepository; private readonly IRepository _supplierEmployeeRepository; private readonly IRepository _taskConfigureRepository; + private readonly CommonService _commonService; + - public SupplierEmployeeDtService(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository repository, IRepository taskSubRepository, IRepository supplierEmployeeRepository, IRepository taskConfigureRepository) : base(context, builder, configuration, repository) + public SupplierEmployeeDtService(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository repository, IRepository taskSubRepository, IRepository supplierEmployeeRepository, IRepository taskConfigureRepository, CommonService commonService) : base(context, builder, configuration, repository) { _taskSubRepository = taskSubRepository; _supplierEmployeeRepository = supplierEmployeeRepository; _taskConfigureRepository = taskConfigureRepository; + + _taskSubRepository.SetDbContext(_context); + _supplierEmployeeRepository.SetDbContext(_context); + _taskConfigureRepository.SetDbContext(_context); + _commonService = commonService; } [HttpPost] @@ -61,24 +70,24 @@ namespace Wood.Service.Datas } throw new Exception(sb.ToString()); } - var empDtLst = impResult.Data; + var entityLst = impResult.Data; - using TransactionScope scope = new TransactionScope(); + using var transaction = _context.Database.BeginTransaction(); try { #region 数据库操作 //添加任务 - TaskSub taskSubObj = await BuildTaskSub(empDtLst.Count); + TaskSub taskSubObj = _commonService.BuildTaskSub(entityLst.Count, _taskName); await _taskSubRepository.AddAsync(taskSubObj); //添加任务明细 - foreach (var empDtObj in empDtLst) + foreach (var empDtObj in entityLst) { SUPPLIER_EMPLOYEE empObj = ExpressionGenericMapper.Trans(empDtObj); empObj.TaskId = taskSubObj.TaskId; await _supplierEmployeeRepository.AddAsync(empObj); } - foreach (var empDtObj in empDtLst) + foreach (var empDtObj in entityLst) { //以“供应商代码+工厂代码+车间代码+产线代码+工位代码+操作人员账号”为唯一标识,做新增或者更新存储 var firstObj = _context.Set().FirstOrDefault( @@ -95,28 +104,30 @@ namespace Wood.Service.Datas } else { + var ret = await base.Update(empDtObj); } } #endregion - scope.Complete(); + transaction.Commit(); return Ok(true); } catch (Exception ex) { + transaction.Rollback(); throw new Exception("方法体执行报错,事务回滚:" + ex.Message); } } public override async Task> Create(SUPPLIER_EMPLOYEE_DT entity) { - using TransactionScope scope = new TransactionScope(); + using var transaction = _context.Database.BeginTransaction(); try { #region 数据库操作 //添加任务 - TaskSub taskSubObj = await BuildTaskSub(1); + TaskSub taskSubObj = _commonService.BuildTaskSub(1, _taskName); await _taskSubRepository.AddAsync(taskSubObj); //添加任务明细 SUPPLIER_EMPLOYEE empObj = ExpressionGenericMapper.Trans(entity); @@ -141,23 +152,24 @@ namespace Wood.Service.Datas } #endregion - scope.Complete(); + transaction.Commit(); return Ok(true); } catch (Exception ex) { + transaction.Rollback(); throw new Exception("方法体执行报错,事务回滚:" + ex.Message); } } public override async Task Update(SUPPLIER_EMPLOYEE_DT entity) { - using TransactionScope scope = new TransactionScope(); + using var transaction = _context.Database.BeginTransaction(); try { #region 数据库操作 //添加任务 - TaskSub taskSubObj = await BuildTaskSub(1); + TaskSub taskSubObj = _commonService.BuildTaskSub(1, _taskName); await _taskSubRepository.AddAsync(taskSubObj); //添加任务明细 SUPPLIER_EMPLOYEE empObj = ExpressionGenericMapper.Trans(entity); @@ -182,50 +194,14 @@ namespace Wood.Service.Datas } #endregion - scope.Complete(); + transaction.Commit(); return Ok(true); } catch (Exception ex) { + transaction.Rollback(); throw new Exception("方法体执行报错,事务回滚:" + ex.Message); } } - - /// - /// 生成TaskSub - /// - /// 任务明细数量 - /// - /// - private async Task BuildTaskSub(int dataCount) - { - List taskConfigureLst = (await _taskConfigureRepository.GetAllAsync()).ToList(); - - TaskConifgure? taskConfigureObj = taskConfigureLst.FirstOrDefault(itm => itm.TaskName == "人员资质信息"); - if (taskConfigureObj == null) - { - throw new Exception("任务配置表没有'人员资质信息'任务"); - } - - TaskSub taskSub = new TaskSub(); - taskSub.TableName = taskConfigureObj.TableName; //关联的数据表名称(如:订单表、用户表等,可为空) - taskSub.TaskName = taskConfigureObj.TaskName; //任务名称(用于业务层面标识任务,如:数据同步任务、报表生成任务) - taskSub.DataCount = dataCount; //数据总量(任务处理的数据条目数) - taskSub.Subscriber = taskConfigureObj.Client; //发布给那个客户 - taskSub.FailedCount = 0; //失败次数(任务执行失败的累计次数) - taskSub.FailedInfo = ""; //失败详情(记录失败原因、异常堆栈等信息,支持长文本) - taskSub.Domain = ""; //所属域(多租户场景下标识租户,如:租户A、租户B) - taskSub.Site = ""; //站点标识(多站点部署时标识所属站点,如:Site1、Site2) - taskSub.CreateUser = CommonHelper.UserName; //从那个内部系统创建系统 - taskSub.CreateTime = CommonHelper.CurrentTime; //创建时间(任务创建的时间戳) - taskSub.Remark = ""; //备注信息(任务相关的补充说明,支持长文本) - taskSub.UpdateUser = ""; //最后更新人(记录任务最后修改者) - taskSub.UpdateTime = null; //最后更新时间(任务最后修改的时间戳,可为空) - taskSub.SyncedPageCount = 0; //已同步页数 - taskSub.ReadState = true; - taskSub.CreationTime = CommonHelper.CurrentTime; - taskSub.TaskId = CommonHelper.NewGuid; - return taskSub; - } } } diff --git a/API/Wood.Service/Datas/SupplierInfoDtService.cs b/API/Wood.Service/Datas/SupplierInfoDtService.cs index aa31203..a673528 100644 --- a/API/Wood.Service/Datas/SupplierInfoDtService.cs +++ b/API/Wood.Service/Datas/SupplierInfoDtService.cs @@ -21,15 +21,24 @@ namespace Wood.Service.Datas { public class SupplierInfoDtService : NormalBaseController { + const string _taskName = "供应商基础信息"; + private readonly IRepository _taskSubRepository; private readonly IRepository _supplierInfoRepository; private readonly IRepository _taskConfigureRepository; + private readonly CommonService _commonService; - public SupplierInfoDtService(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository repository, IRepository taskSubRepository, IRepository supplierInfoRepository, IRepository taskConfigureRepository) : base(context, builder, configuration, repository) + public SupplierInfoDtService(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository repository, IRepository taskSubRepository, IRepository supplierInfoRepository, IRepository taskConfigureRepository, CommonService commonService) : base(context, builder, configuration, repository) { _taskSubRepository = taskSubRepository; _supplierInfoRepository = supplierInfoRepository; _taskConfigureRepository = taskConfigureRepository; + _commonService = commonService; + + _taskSubRepository.SetDbContext(_context); + _supplierInfoRepository.SetDbContext(_context); + _taskConfigureRepository.SetDbContext(_context); + } [HttpPost] @@ -60,24 +69,24 @@ namespace Wood.Service.Datas } throw new Exception(sb.ToString()); } - var empDtLst = impResult.Data; + var entityLst = impResult.Data; - using TransactionScope scope = new TransactionScope(); + using var transaction = _context.Database.BeginTransaction(); try { #region 数据库操作 //添加任务 - TaskSub taskSubObj = await BuildTaskSub(empDtLst.Count); + TaskSub taskSubObj = _commonService.BuildTaskSub(entityLst.Count, _taskName); await _taskSubRepository.AddAsync(taskSubObj); //添加任务明细 - foreach (var empDtObj in empDtLst) + foreach (var empDtObj in entityLst) { SUPPLIER_INFO empObj = ExpressionGenericMapper.Trans(empDtObj); empObj.TaskId = taskSubObj.TaskId; await _supplierInfoRepository.AddAsync(empObj); } - foreach (var empDtObj in empDtLst) + foreach (var empDtObj in entityLst) { //以“供应商代码+工厂代码+车间代码+产线代码+工位代码”为唯一标识,做新增或更新存储 var firstObj = _context.Set().FirstOrDefault( @@ -98,24 +107,27 @@ namespace Wood.Service.Datas } #endregion - scope.Complete(); + transaction.Commit(); return Ok(true); } catch (Exception ex) { + transaction.Rollback(); throw new Exception("方法体执行报错,事务回滚:" + ex.Message); } } public override async Task> Create(SUPPLIER_INFO_DT entity) { - using TransactionScope scope = new TransactionScope(); + using var transaction = _context.Database.BeginTransaction(); try { #region 数据库操作 //添加任务 - TaskSub taskSubObj = await BuildTaskSub(1); + TaskSub taskSubObj = _commonService.BuildTaskSub(1, _taskName); + await _taskSubRepository.AddAsync(taskSubObj); + //添加任务明细 SUPPLIER_INFO empObj = ExpressionGenericMapper.Trans(entity); empObj.TaskId = taskSubObj.TaskId; @@ -138,23 +150,24 @@ namespace Wood.Service.Datas } #endregion - scope.Complete(); + transaction.Commit(); return Ok(true); } catch (Exception ex) { + transaction.Rollback(); throw new Exception("方法体执行报错,事务回滚:" + ex.Message); } } public override async Task Update(SUPPLIER_INFO_DT entity) { - using TransactionScope scope = new TransactionScope(); + using var transaction = _context.Database.BeginTransaction(); try { #region 数据库操作 //添加任务 - TaskSub taskSubObj = await BuildTaskSub(1); + TaskSub taskSubObj = _commonService.BuildTaskSub(1, _taskName); await _taskSubRepository.AddAsync(taskSubObj); //添加任务明细 SUPPLIER_INFO empObj = ExpressionGenericMapper.Trans(entity); @@ -178,50 +191,14 @@ namespace Wood.Service.Datas } #endregion - scope.Complete(); + transaction.Commit(); return Ok(true); } catch (Exception ex) { + transaction.Rollback(); throw new Exception("方法体执行报错,事务回滚:" + ex.Message); } } - - /// - /// 生成TaskSub - /// - /// 任务明细数量 - /// - /// - private async Task BuildTaskSub(int dataCount) - { - List taskConfigureLst = (await _taskConfigureRepository.GetAllAsync()).ToList(); - - TaskConifgure? taskConfigureObj = taskConfigureLst.FirstOrDefault(itm => itm.TaskName == "供应商基础信息"); - if (taskConfigureObj == null) - { - throw new Exception("任务配置表没有'供应商基础信息'任务"); - } - - TaskSub taskSub = new TaskSub(); - taskSub.TableName = taskConfigureObj.TableName; //关联的数据表名称(如:订单表、用户表等,可为空) - taskSub.TaskName = taskConfigureObj.TaskName; //任务名称(用于业务层面标识任务,如:数据同步任务、报表生成任务) - taskSub.DataCount = dataCount; //数据总量(任务处理的数据条目数) - taskSub.Subscriber = taskConfigureObj.Client; //发布给那个客户 - taskSub.FailedCount = 0; //失败次数(任务执行失败的累计次数) - taskSub.FailedInfo = ""; //失败详情(记录失败原因、异常堆栈等信息,支持长文本) - taskSub.Domain = ""; //所属域(多租户场景下标识租户,如:租户A、租户B) - taskSub.Site = ""; //站点标识(多站点部署时标识所属站点,如:Site1、Site2) - taskSub.CreateUser = CommonHelper.UserName; //从那个内部系统创建系统 - taskSub.CreateTime = CommonHelper.CurrentTime; //创建时间(任务创建的时间戳) - taskSub.Remark = ""; //备注信息(任务相关的补充说明,支持长文本) - taskSub.UpdateUser = ""; //最后更新人(记录任务最后修改者) - taskSub.UpdateTime = null; //最后更新时间(任务最后修改的时间戳,可为空) - taskSub.SyncedPageCount = 0; //已同步页数 - taskSub.ReadState = true; - taskSub.CreationTime = CommonHelper.CurrentTime; - taskSub.TaskId = CommonHelper.NewGuid; - return taskSub; - } } } diff --git a/API/Wood.Service/Datas/SupplierProAttachmentDataDtService.cs b/API/Wood.Service/Datas/SupplierProAttachmentDataDtService.cs index d9ba37c..81e0c11 100644 --- a/API/Wood.Service/Datas/SupplierProAttachmentDataDtService.cs +++ b/API/Wood.Service/Datas/SupplierProAttachmentDataDtService.cs @@ -20,19 +20,26 @@ using Wood.Util; namespace Wood.Service.Datas { - - public class SupplierProAttachmentDataDtService : NormalBaseController { + const string _taskName = "附件类数据"; + private readonly IRepository _taskSubRepository; private readonly IRepository _supplierProAttachmentDataRepository; private readonly IRepository _taskConfigureRepository; + private readonly CommonService _commonService; + - public SupplierProAttachmentDataDtService(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository repository, IRepository taskSubRepository, IRepository supplierProAttachmentDataRepository, IRepository taskConfigureRepository) : base(context, builder, configuration, repository) + public SupplierProAttachmentDataDtService(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository repository, IRepository taskSubRepository, IRepository supplierProAttachmentDataRepository, IRepository taskConfigureRepository, CommonService commonService) : base(context, builder, configuration, repository) { _taskSubRepository = taskSubRepository; _supplierProAttachmentDataRepository = supplierProAttachmentDataRepository; _taskConfigureRepository = taskConfigureRepository; + + _taskSubRepository.SetDbContext(_context); + _supplierProAttachmentDataRepository.SetDbContext(_context); + _taskConfigureRepository.SetDbContext(_context); + _commonService = commonService; } [HttpPost] @@ -63,47 +70,48 @@ namespace Wood.Service.Datas } throw new Exception(sb.ToString()); } - var empDtLst = impResult.Data; + var entityLst = impResult.Data; - using TransactionScope scope = new TransactionScope(); + using var transaction = _context.Database.BeginTransaction(); try { #region 数据库操作 //添加任务 - TaskSub taskSubObj = await BuildTaskSub(empDtLst.Count); + TaskSub taskSubObj = _commonService.BuildTaskSub(entityLst.Count, _taskName); await _taskSubRepository.AddAsync(taskSubObj); //添加任务明细 - foreach (var empDtObj in empDtLst) + foreach (var empDtObj in entityLst) { SUPPLIER_PRO_ATTACHMENT_DATA empObj = ExpressionGenericMapper.Trans(empDtObj); empObj.TaskId = taskSubObj.TaskId; await _supplierProAttachmentDataRepository.AddAsync(empObj); } - foreach (var empDtObj in empDtLst) + foreach (var empDtObj in entityLst) { //存储新增数据 var ret = await base.Create(empDtObj); } #endregion - scope.Complete(); + transaction.Commit(); return Ok(true); } catch (Exception ex) { + transaction.Rollback(); throw new Exception("方法体执行报错,事务回滚:" + ex.Message); } } public override async Task> Create(SUPPLIER_PRO_ATTACHMENT_DATA_DT entity) { - using TransactionScope scope = new TransactionScope(); + using var transaction = _context.Database.BeginTransaction(); try { #region 数据库操作 //添加任务 - TaskSub taskSubObj = await BuildTaskSub(1); + TaskSub taskSubObj = _commonService.BuildTaskSub(1, _taskName); await _taskSubRepository.AddAsync(taskSubObj); //添加任务明细 SUPPLIER_PRO_ATTACHMENT_DATA empObj = ExpressionGenericMapper.Trans(entity); @@ -114,51 +122,15 @@ namespace Wood.Service.Datas #endregion - scope.Complete(); + transaction.Commit(); return Ok(true); } catch (Exception ex) { + transaction.Rollback(); throw new Exception("方法体执行报错,事务回滚:" + ex.Message); } } - /// - /// 生成TaskSub - /// - /// 任务明细数量 - /// - /// - private async Task BuildTaskSub(int dataCount) - { - List taskConfigureLst = (await _taskConfigureRepository.GetAllAsync()).ToList(); - - TaskConifgure? taskConfigureObj = taskConfigureLst.FirstOrDefault(itm => itm.TaskName == "附件类数据"); - if (taskConfigureObj == null) - { - throw new Exception("任务配置表没有'附件类数据'任务"); - } - - TaskSub taskSub = new TaskSub(); - taskSub.TableName = taskConfigureObj.TableName; //关联的数据表名称(如:订单表、用户表等,可为空) - taskSub.TaskName = taskConfigureObj.TaskName; //任务名称(用于业务层面标识任务,如:数据同步任务、报表生成任务) - taskSub.DataCount = dataCount; //数据总量(任务处理的数据条目数) - taskSub.Subscriber = taskConfigureObj.Client; //发布给那个客户 - taskSub.FailedCount = 0; //失败次数(任务执行失败的累计次数) - taskSub.FailedInfo = ""; //失败详情(记录失败原因、异常堆栈等信息,支持长文本) - taskSub.Domain = ""; //所属域(多租户场景下标识租户,如:租户A、租户B) - taskSub.Site = ""; //站点标识(多站点部署时标识所属站点,如:Site1、Site2) - taskSub.CreateUser = CommonHelper.UserName; //从那个内部系统创建系统 - taskSub.CreateTime = CommonHelper.CurrentTime; //创建时间(任务创建的时间戳) - taskSub.Remark = ""; //备注信息(任务相关的补充说明,支持长文本) - taskSub.UpdateUser = ""; //最后更新人(记录任务最后修改者) - taskSub.UpdateTime = null; //最后更新时间(任务最后修改的时间戳,可为空) - taskSub.SyncedPageCount = 0; //已同步页数 - taskSub.ReadState = true; - taskSub.CreationTime = CommonHelper.CurrentTime; - taskSub.TaskId = CommonHelper.NewGuid; - return taskSub; - } } - } diff --git a/API/Wood.Service/Datas/SupplierProProcessEquipmentDtService.cs b/API/Wood.Service/Datas/SupplierProProcessEquipmentDtService.cs index e86d90d..e58a1ab 100644 --- a/API/Wood.Service/Datas/SupplierProProcessEquipmentDtService.cs +++ b/API/Wood.Service/Datas/SupplierProProcessEquipmentDtService.cs @@ -20,19 +20,26 @@ using Wood.Util; namespace Wood.Service.Datas { - - public class SupplierProProcessEquipmentDtService : NormalBaseController { + const string _taskName = "工艺装备"; + private readonly IRepository _taskSubRepository; private readonly IRepository _supplierProProcessEquipmentRepository; private readonly IRepository _taskConfigureRepository; + private readonly CommonService _commonService; + - public SupplierProProcessEquipmentDtService(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository repository, IRepository taskSubRepository, IRepository supplierProProcessEquipmentRepository, IRepository taskConfigureRepository) : base(context, builder, configuration, repository) + public SupplierProProcessEquipmentDtService(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository repository, IRepository taskSubRepository, IRepository supplierProProcessEquipmentRepository, IRepository taskConfigureRepository, CommonService commonService) : base(context, builder, configuration, repository) { _taskSubRepository = taskSubRepository; _supplierProProcessEquipmentRepository = supplierProProcessEquipmentRepository; _taskConfigureRepository = taskConfigureRepository; + + _taskSubRepository.SetDbContext(_context); + _supplierProProcessEquipmentRepository.SetDbContext(_context); + _taskConfigureRepository.SetDbContext(_context); + _commonService = commonService; } [HttpPost] @@ -63,24 +70,24 @@ namespace Wood.Service.Datas } throw new Exception(sb.ToString()); } - var empDtLst = impResult.Data; + var entityLst = impResult.Data; - using TransactionScope scope = new TransactionScope(); + using var transaction = _context.Database.BeginTransaction(); try { #region 数据库操作 //添加任务 - TaskSub taskSubObj = await BuildTaskSub(empDtLst.Count); + TaskSub taskSubObj = _commonService.BuildTaskSub(entityLst.Count, _taskName); await _taskSubRepository.AddAsync(taskSubObj); //添加任务明细 - foreach (var empDtObj in empDtLst) + foreach (var empDtObj in entityLst) { SUPPLIER_PRO_PROCESS_EQUIPMENT empObj = ExpressionGenericMapper.Trans(empDtObj); empObj.TaskId = taskSubObj.TaskId; await _supplierProProcessEquipmentRepository.AddAsync(empObj); } - foreach (var empDtObj in empDtLst) + foreach (var empDtObj in entityLst) { //以供应商代码+奇瑞零件号+工艺编码+工艺版本为唯一数据,做新增或者更新存储 var firstObj = _context.Set().FirstOrDefault( @@ -100,23 +107,24 @@ namespace Wood.Service.Datas } #endregion - scope.Complete(); + transaction.Commit(); return Ok(true); } catch (Exception ex) { + transaction.Rollback(); throw new Exception("方法体执行报错,事务回滚:" + ex.Message); } } public override async Task> Create(SUPPLIER_PRO_PROCESS_EQUIPMENT_DT entity) { - using TransactionScope scope = new TransactionScope(); + using var transaction = _context.Database.BeginTransaction(); try { #region 数据库操作 //添加任务 - TaskSub taskSubObj = await BuildTaskSub(1); + TaskSub taskSubObj = _commonService.BuildTaskSub(1, _taskName); await _taskSubRepository.AddAsync(taskSubObj); //添加任务明细 SUPPLIER_PRO_PROCESS_EQUIPMENT empObj = ExpressionGenericMapper.Trans(entity); @@ -139,23 +147,24 @@ namespace Wood.Service.Datas } #endregion - scope.Complete(); + transaction.Commit(); return Ok(true); } catch (Exception ex) { + transaction.Rollback(); throw new Exception("方法体执行报错,事务回滚:" + ex.Message); } } public override async Task Update(SUPPLIER_PRO_PROCESS_EQUIPMENT_DT entity) { - using TransactionScope scope = new TransactionScope(); + using var transaction = _context.Database.BeginTransaction(); try { #region 数据库操作 //添加任务 - TaskSub taskSubObj = await BuildTaskSub(1); + TaskSub taskSubObj = _commonService.BuildTaskSub(1, _taskName); await _taskSubRepository.AddAsync(taskSubObj); //添加任务明细 SUPPLIER_PRO_PROCESS_EQUIPMENT empObj = ExpressionGenericMapper.Trans(entity); @@ -178,51 +187,14 @@ namespace Wood.Service.Datas } #endregion - scope.Complete(); + transaction.Commit(); return Ok(true); } catch (Exception ex) { + transaction.Rollback(); throw new Exception("方法体执行报错,事务回滚:" + ex.Message); } } - - /// - /// 生成TaskSub - /// - /// 任务明细数量 - /// - /// - private async Task BuildTaskSub(int dataCount) - { - List taskConfigureLst = (await _taskConfigureRepository.GetAllAsync()).ToList(); - - TaskConifgure? taskConfigureObj = taskConfigureLst.FirstOrDefault(itm => itm.TaskName == "工艺装备"); - if (taskConfigureObj == null) - { - throw new Exception("任务配置表没有'工艺装备'任务"); - } - - TaskSub taskSub = new TaskSub(); - taskSub.TableName = taskConfigureObj.TableName; //关联的数据表名称(如:订单表、用户表等,可为空) - taskSub.TaskName = taskConfigureObj.TaskName; //任务名称(用于业务层面标识任务,如:数据同步任务、报表生成任务) - taskSub.DataCount = dataCount; //数据总量(任务处理的数据条目数) - taskSub.Subscriber = taskConfigureObj.Client; //发布给那个客户 - taskSub.FailedCount = 0; //失败次数(任务执行失败的累计次数) - taskSub.FailedInfo = ""; //失败详情(记录失败原因、异常堆栈等信息,支持长文本) - taskSub.Domain = ""; //所属域(多租户场景下标识租户,如:租户A、租户B) - taskSub.Site = ""; //站点标识(多站点部署时标识所属站点,如:Site1、Site2) - taskSub.CreateUser = CommonHelper.UserName; //从那个内部系统创建系统 - taskSub.CreateTime = CommonHelper.CurrentTime; //创建时间(任务创建的时间戳) - taskSub.Remark = ""; //备注信息(任务相关的补充说明,支持长文本) - taskSub.UpdateUser = ""; //最后更新人(记录任务最后修改者) - taskSub.UpdateTime = null; //最后更新时间(任务最后修改的时间戳,可为空) - taskSub.SyncedPageCount = 0; //已同步页数 - taskSub.ReadState = true; - taskSub.CreationTime = CommonHelper.CurrentTime; - taskSub.TaskId = CommonHelper.NewGuid; - return taskSub; - } } - }