Browse Source

完成datas4个服务,任务 任务明细入库

master
me 1 week ago
parent
commit
00f16e91dd
  1. 12
      API/Wood.Service/Controllers/NormalBaseController.cs
  2. 180
      API/Wood.Service/Datas/SupplierEmployeeDtService.cs
  3. 177
      API/Wood.Service/Datas/SupplierInfoDtService.cs
  4. 107
      API/Wood.Service/Datas/SupplierProAttachmentDataDtService.cs
  5. 171
      API/Wood.Service/Datas/SupplierProProcessEquipmentDtService.cs
  6. 99
      API/Wood.Util/CommonHelper.cs

12
API/Wood.Service/Controllers/NormalBaseController.cs

@ -49,7 +49,7 @@ namespace Wood.Service.Controllers
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("{id}")]
public async Task<ActionResult<T>> GetById(int id)
public virtual async Task<ActionResult<T>> GetById(int id)
{
var entity = await _repository.GetByIdAsync(id);
if (entity == null) return NotFound();
@ -62,7 +62,7 @@ namespace Wood.Service.Controllers
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost]
public async Task<ActionResult<T>> Create(T entity)
public virtual async Task<ActionResult<T>> Create(T entity)
{
entity.CreationTime = DateTime.Now;
var createdEntity = await _repository.AddAsync(entity);
@ -74,7 +74,7 @@ namespace Wood.Service.Controllers
/// <param name="entity"></param>
/// <returns></returns>
[HttpPut("{id}")]
public async Task<IActionResult> Update(T entity)
public virtual async Task<IActionResult> Update(T entity)
{
var _first = await _repository.GetByIdAsync(entity.UId);
if (_first == null)
@ -92,7 +92,7 @@ namespace Wood.Service.Controllers
/// <param name="id"></param>
/// <returns></returns>
[HttpDelete("{id}")]
public async Task<IActionResult> Delete(int id)
public virtual async Task<IActionResult> Delete(int id)
{
await _repository.DeleteAsync(id);
return new JsonResult(new { Code = 200, Message = "删除成功!" }); ;
@ -111,7 +111,7 @@ namespace Wood.Service.Controllers
/// <param name="filters"></param>
/// <returns></returns>
[HttpGet]
public async Task<ActionResult> GetPaged(
public virtual async Task<ActionResult> GetPaged(
[FromQuery] int pageNumber = 1,
[FromQuery] int pageSize = 10,
[FromQuery] string sortBy = "",
@ -145,7 +145,7 @@ namespace Wood.Service.Controllers
/// <returns></returns>
[HttpGet]
public async Task<FileStreamResult> Export([FromQuery] int pageNumber = 1,
public virtual async Task<FileStreamResult> Export([FromQuery] int pageNumber = 1,
[FromQuery] int pageSize = 10,
[FromQuery] string sortBy = "",
[FromQuery] bool isAscending = true,

180
API/Wood.Service/Datas/SupplierEmployeeDtService.cs

@ -14,16 +14,23 @@ using TaskManager.EntityFramework.Repository;
using TaskManager.EntityFramework;
using Wood.Service.Controllers;
using Magicodes.ExporterAndImporter.Core.Models;
using Wood.Util;
using static Dapper.SqlMapper;
using System.Transactions;
namespace Wood.Service.Datas
{
public class SupplierEmployeeDtService : NormalBaseController<SUPPLIER_EMPLOYEE_DT>
{
private readonly IRepository<TaskSub> _taskSubRepository;
private readonly IRepository<SUPPLIER_EMPLOYEE> _supplierEmployeeRepository;
private readonly IRepository<TaskConifgure> _taskConfigureRepository;
public SupplierEmployeeDtService(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository<SUPPLIER_EMPLOYEE_DT> repository) : base(context, builder, configuration, repository)
public SupplierEmployeeDtService(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository<SUPPLIER_EMPLOYEE_DT> repository, IRepository<TaskSub> taskSubRepository, IRepository<SUPPLIER_EMPLOYEE> supplierEmployeeRepository, IRepository<TaskConifgure> taskConfigureRepository) : base(context, builder, configuration, repository)
{
_taskSubRepository = taskSubRepository;
_supplierEmployeeRepository = supplierEmployeeRepository;
_taskConfigureRepository = taskConfigureRepository;
}
[HttpPost]
@ -54,12 +61,171 @@ namespace Wood.Service.Datas
}
throw new Exception(sb.ToString());
}
foreach (var item in impResult.Data) //??增加批量插入
var empDtLst = impResult.Data;
using TransactionScope scope = new TransactionScope();
try
{
await Create(item);
#region 数据库操作
//添加任务
TaskSub taskSubObj = await BuildTaskSub(empDtLst.Count);
await _taskSubRepository.AddAsync(taskSubObj);
//添加任务明细
foreach (var empDtObj in empDtLst)
{
SUPPLIER_EMPLOYEE empObj = ExpressionGenericMapper<SUPPLIER_EMPLOYEE_DT, SUPPLIER_EMPLOYEE>.Trans(empDtObj);
empObj.TaskId = taskSubObj.TaskId;
await _supplierEmployeeRepository.AddAsync(empObj);
}
foreach (var empDtObj in empDtLst)
{
//以“供应商代码+工厂代码+车间代码+产线代码+工位代码+操作人员账号”为唯一标识,做新增或者更新存储
var firstObj = _context.Set<SUPPLIER_EMPLOYEE_DT>().FirstOrDefault(
itm => itm.SupplierCode == empDtObj.SupplierCode
&& itm.PlantId == empDtObj.PlantId
&& itm.WorkshopId == empDtObj.WorkshopId
&& itm.ProductionLineId == empDtObj.ProductionLineId
&& itm.StationId == empDtObj.StationId
&& itm.OperatorId == empDtObj.OperatorId
);
if (firstObj == null)
{
var ret = await base.Create(empDtObj);
}
else
{
var ret = await base.Update(empDtObj);
}
}
#endregion
scope.Complete();
return Ok(true);
}
catch (Exception ex)
{
throw new Exception("方法体执行报错,事务回滚:" + ex.Message);
}
return Ok(true);
}
}
public override async Task<ActionResult<SUPPLIER_EMPLOYEE_DT>> Create(SUPPLIER_EMPLOYEE_DT entity)
{
using TransactionScope scope = new TransactionScope();
try
{
#region 数据库操作
//添加任务
TaskSub taskSubObj = await BuildTaskSub(1);
await _taskSubRepository.AddAsync(taskSubObj);
//添加任务明细
SUPPLIER_EMPLOYEE empObj = ExpressionGenericMapper<SUPPLIER_EMPLOYEE_DT, SUPPLIER_EMPLOYEE>.Trans(entity);
empObj.TaskId = taskSubObj.TaskId;
await _supplierEmployeeRepository.AddAsync(empObj);
var firstObj = _context.Set<SUPPLIER_EMPLOYEE_DT>().FirstOrDefault(
itm => itm.SupplierCode == entity.SupplierCode
&& itm.PlantId == entity.PlantId
&& itm.WorkshopId == entity.WorkshopId
&& itm.ProductionLineId == entity.ProductionLineId
&& itm.StationId == entity.StationId
&& itm.OperatorId == entity.OperatorId
);
if (firstObj == null)
{
var ret = await base.Create(entity);
}
else
{
throw new Exception("数据库已经存在,不能重复插入");
}
#endregion
scope.Complete();
return Ok(true);
}
catch (Exception ex)
{
throw new Exception("方法体执行报错,事务回滚:" + ex.Message);
}
}
public override async Task<IActionResult> Update(SUPPLIER_EMPLOYEE_DT entity)
{
using TransactionScope scope = new TransactionScope();
try
{
#region 数据库操作
//添加任务
TaskSub taskSubObj = await BuildTaskSub(1);
await _taskSubRepository.AddAsync(taskSubObj);
//添加任务明细
SUPPLIER_EMPLOYEE empObj = ExpressionGenericMapper<SUPPLIER_EMPLOYEE_DT, SUPPLIER_EMPLOYEE>.Trans(entity);
empObj.TaskId = taskSubObj.TaskId;
await _supplierEmployeeRepository.AddAsync(empObj);
var firstObj = _context.Set<SUPPLIER_EMPLOYEE_DT>().FirstOrDefault(
itm => itm.SupplierCode == entity.SupplierCode
&& itm.PlantId == entity.PlantId
&& itm.WorkshopId == entity.WorkshopId
&& itm.ProductionLineId == entity.ProductionLineId
&& itm.StationId == entity.StationId
&& itm.OperatorId == entity.OperatorId
);
if (firstObj == null)
{
throw new Exception("数据库不存在,不能更新");
}
else
{
var ret = await base.Update(entity);
}
#endregion
scope.Complete();
return Ok(true);
}
catch (Exception ex)
{
throw new Exception("方法体执行报错,事务回滚:" + ex.Message);
}
}
/// <summary>
/// 生成TaskSub
/// </summary>
/// <param name="dataCount">任务明细数量</param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
private async Task<TaskSub> BuildTaskSub(int dataCount)
{
List<TaskConifgure> 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;
}
}
}

177
API/Wood.Service/Datas/SupplierInfoDtService.cs

@ -14,15 +14,22 @@ using TaskManager.EntityFramework.Repository;
using TaskManager.EntityFramework;
using Wood.Service.Controllers;
using Magicodes.ExporterAndImporter.Core.Models;
using System.Transactions;
using Wood.Util;
namespace Wood.Service.Datas
{
public class SupplierInfoDtService : NormalBaseController<SUPPLIER_INFO_DT>
{
public SupplierInfoDtService(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository<SUPPLIER_INFO_DT> repository) : base(context, builder, configuration, repository)
private readonly IRepository<TaskSub> _taskSubRepository;
private readonly IRepository<SUPPLIER_INFO> _supplierInfoRepository;
private readonly IRepository<TaskConifgure> _taskConfigureRepository;
public SupplierInfoDtService(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository<SUPPLIER_INFO_DT> repository, IRepository<TaskSub> taskSubRepository, IRepository<SUPPLIER_INFO> supplierInfoRepository, IRepository<TaskConifgure> taskConfigureRepository) : base(context, builder, configuration, repository)
{
_taskSubRepository = taskSubRepository;
_supplierInfoRepository = supplierInfoRepository;
_taskConfigureRepository = taskConfigureRepository;
}
[HttpPost]
@ -53,12 +60,168 @@ namespace Wood.Service.Datas
}
throw new Exception(sb.ToString());
}
foreach (var item in impResult.Data) //??增加批量插入
var empDtLst = impResult.Data;
using TransactionScope scope = new TransactionScope();
try
{
#region 数据库操作
//添加任务
TaskSub taskSubObj = await BuildTaskSub(empDtLst.Count);
await _taskSubRepository.AddAsync(taskSubObj);
//添加任务明细
foreach (var empDtObj in empDtLst)
{
SUPPLIER_INFO empObj = ExpressionGenericMapper<SUPPLIER_INFO_DT, SUPPLIER_INFO>.Trans(empDtObj);
empObj.TaskId = taskSubObj.TaskId;
await _supplierInfoRepository.AddAsync(empObj);
}
foreach (var empDtObj in empDtLst)
{
//以“供应商代码+工厂代码+车间代码+产线代码+工位代码”为唯一标识,做新增或更新存储
var firstObj = _context.Set<SUPPLIER_INFO_DT>().FirstOrDefault(
itm => itm.SupplierCode == empDtObj.SupplierCode
&& itm.PlantId == empDtObj.PlantId
&& itm.WorkshopId == empDtObj.WorkshopId
&& itm.ProductionLineId == empDtObj.ProductionLineId
&& itm.StationId == empDtObj.StationId
);
if (firstObj == null)
{
var ret = await base.Create(empDtObj);
}
else
{
var ret = await base.Update(empDtObj);
}
}
#endregion
scope.Complete();
return Ok(true);
}
catch (Exception ex)
{
await Create(item);
throw new Exception("方法体执行报错,事务回滚:" + ex.Message);
}
return Ok(true);
}
}
public override async Task<ActionResult<SUPPLIER_INFO_DT>> Create(SUPPLIER_INFO_DT entity)
{
using TransactionScope scope = new TransactionScope();
try
{
#region 数据库操作
//添加任务
TaskSub taskSubObj = await BuildTaskSub(1);
await _taskSubRepository.AddAsync(taskSubObj);
//添加任务明细
SUPPLIER_INFO empObj = ExpressionGenericMapper<SUPPLIER_INFO_DT, SUPPLIER_INFO>.Trans(entity);
empObj.TaskId = taskSubObj.TaskId;
await _supplierInfoRepository.AddAsync(empObj);
var firstObj = _context.Set<SUPPLIER_INFO_DT>().FirstOrDefault(
itm => itm.SupplierCode == entity.SupplierCode
&& itm.PlantId == entity.PlantId
&& itm.WorkshopId == entity.WorkshopId
&& itm.ProductionLineId == entity.ProductionLineId
&& itm.StationId == entity.StationId
);
if (firstObj == null)
{
var ret = await base.Create(entity);
}
else
{
throw new Exception("数据库已经存在,不能重复插入");
}
#endregion
scope.Complete();
return Ok(true);
}
catch (Exception ex)
{
throw new Exception("方法体执行报错,事务回滚:" + ex.Message);
}
}
public override async Task<IActionResult> Update(SUPPLIER_INFO_DT entity)
{
using TransactionScope scope = new TransactionScope();
try
{
#region 数据库操作
//添加任务
TaskSub taskSubObj = await BuildTaskSub(1);
await _taskSubRepository.AddAsync(taskSubObj);
//添加任务明细
SUPPLIER_INFO empObj = ExpressionGenericMapper<SUPPLIER_INFO_DT, SUPPLIER_INFO>.Trans(entity);
empObj.TaskId = taskSubObj.TaskId;
await _supplierInfoRepository.AddAsync(empObj);
var firstObj = _context.Set<SUPPLIER_INFO_DT>().FirstOrDefault(
itm => itm.SupplierCode == entity.SupplierCode
&& itm.PlantId == entity.PlantId
&& itm.WorkshopId == entity.WorkshopId
&& itm.ProductionLineId == entity.ProductionLineId
&& itm.StationId == entity.StationId
);
if (firstObj == null)
{
throw new Exception("数据库不存在,不能更新");
}
else
{
var ret = await base.Update(entity);
}
#endregion
scope.Complete();
return Ok(true);
}
catch (Exception ex)
{
throw new Exception("方法体执行报错,事务回滚:" + ex.Message);
}
}
/// <summary>
/// 生成TaskSub
/// </summary>
/// <param name="dataCount">任务明细数量</param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
private async Task<TaskSub> BuildTaskSub(int dataCount)
{
List<TaskConifgure> 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;
}
}
}

107
API/Wood.Service/Datas/SupplierProAttachmentDataDtService.cs

@ -15,6 +15,8 @@ using TaskManager.EntityFramework;
using Wood.Service.Controllers;
using Magicodes.ExporterAndImporter.Core.Models;
using TaskManager.Entity.Entitys;
using System.Transactions;
using Wood.Util;
namespace Wood.Service.Datas
{
@ -22,8 +24,15 @@ namespace Wood.Service.Datas
public class SupplierProAttachmentDataDtService : NormalBaseController<SUPPLIER_PRO_ATTACHMENT_DATA_DT>
{
public SupplierProAttachmentDataDtService(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository<SUPPLIER_PRO_ATTACHMENT_DATA_DT> repository) : base(context, builder, configuration, repository)
private readonly IRepository<TaskSub> _taskSubRepository;
private readonly IRepository<SUPPLIER_PRO_ATTACHMENT_DATA> _supplierProAttachmentDataRepository;
private readonly IRepository<TaskConifgure> _taskConfigureRepository;
public SupplierProAttachmentDataDtService(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository<SUPPLIER_PRO_ATTACHMENT_DATA_DT> repository, IRepository<TaskSub> taskSubRepository, IRepository<SUPPLIER_PRO_ATTACHMENT_DATA> supplierProAttachmentDataRepository, IRepository<TaskConifgure> taskConfigureRepository) : base(context, builder, configuration, repository)
{
_taskSubRepository = taskSubRepository;
_supplierProAttachmentDataRepository = supplierProAttachmentDataRepository;
_taskConfigureRepository = taskConfigureRepository;
}
[HttpPost]
@ -54,11 +63,101 @@ namespace Wood.Service.Datas
}
throw new Exception(sb.ToString());
}
foreach (var item in impResult.Data) //??增加批量插入
var empDtLst = impResult.Data;
using TransactionScope scope = new TransactionScope();
try
{
#region 数据库操作
//添加任务
TaskSub taskSubObj = await BuildTaskSub(empDtLst.Count);
await _taskSubRepository.AddAsync(taskSubObj);
//添加任务明细
foreach (var empDtObj in empDtLst)
{
SUPPLIER_PRO_ATTACHMENT_DATA empObj = ExpressionGenericMapper<SUPPLIER_PRO_ATTACHMENT_DATA_DT, SUPPLIER_PRO_ATTACHMENT_DATA>.Trans(empDtObj);
empObj.TaskId = taskSubObj.TaskId;
await _supplierProAttachmentDataRepository.AddAsync(empObj);
}
foreach (var empDtObj in empDtLst)
{
//存储新增数据
var ret = await base.Create(empDtObj);
}
#endregion
scope.Complete();
return Ok(true);
}
catch (Exception ex)
{
await Create(item);
throw new Exception("方法体执行报错,事务回滚:" + ex.Message);
}
return Ok(true);
}
public override async Task<ActionResult<SUPPLIER_PRO_ATTACHMENT_DATA_DT>> Create(SUPPLIER_PRO_ATTACHMENT_DATA_DT entity)
{
using TransactionScope scope = new TransactionScope();
try
{
#region 数据库操作
//添加任务
TaskSub taskSubObj = await BuildTaskSub(1);
await _taskSubRepository.AddAsync(taskSubObj);
//添加任务明细
SUPPLIER_PRO_ATTACHMENT_DATA empObj = ExpressionGenericMapper<SUPPLIER_PRO_ATTACHMENT_DATA_DT, SUPPLIER_PRO_ATTACHMENT_DATA>.Trans(entity);
empObj.TaskId = taskSubObj.TaskId;
await _supplierProAttachmentDataRepository.AddAsync(empObj);
var ret = await base.Create(entity);
#endregion
scope.Complete();
return Ok(true);
}
catch (Exception ex)
{
throw new Exception("方法体执行报错,事务回滚:" + ex.Message);
}
}
/// <summary>
/// 生成TaskSub
/// </summary>
/// <param name="dataCount">任务明细数量</param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
private async Task<TaskSub> BuildTaskSub(int dataCount)
{
List<TaskConifgure> 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;
}
}

171
API/Wood.Service/Datas/SupplierProProcessEquipmentDtService.cs

@ -15,6 +15,8 @@ using TaskManager.EntityFramework;
using Wood.Service.Controllers;
using Magicodes.ExporterAndImporter.Core.Models;
using TaskManager.Entity.Entitys;
using System.Transactions;
using Wood.Util;
namespace Wood.Service.Datas
{
@ -22,8 +24,15 @@ namespace Wood.Service.Datas
public class SupplierProProcessEquipmentDtService : NormalBaseController<SUPPLIER_PRO_PROCESS_EQUIPMENT_DT>
{
public SupplierProProcessEquipmentDtService(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository<SUPPLIER_PRO_PROCESS_EQUIPMENT_DT> repository) : base(context, builder, configuration, repository)
private readonly IRepository<TaskSub> _taskSubRepository;
private readonly IRepository<SUPPLIER_PRO_PROCESS_EQUIPMENT> _supplierProProcessEquipmentRepository;
private readonly IRepository<TaskConifgure> _taskConfigureRepository;
public SupplierProProcessEquipmentDtService(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository<SUPPLIER_PRO_PROCESS_EQUIPMENT_DT> repository, IRepository<TaskSub> taskSubRepository, IRepository<SUPPLIER_PRO_PROCESS_EQUIPMENT> supplierProProcessEquipmentRepository, IRepository<TaskConifgure> taskConfigureRepository) : base(context, builder, configuration, repository)
{
_taskSubRepository = taskSubRepository;
_supplierProProcessEquipmentRepository = supplierProProcessEquipmentRepository;
_taskConfigureRepository = taskConfigureRepository;
}
[HttpPost]
@ -54,11 +63,165 @@ namespace Wood.Service.Datas
}
throw new Exception(sb.ToString());
}
foreach (var item in impResult.Data) //??增加批量插入
var empDtLst = impResult.Data;
using TransactionScope scope = new TransactionScope();
try
{
#region 数据库操作
//添加任务
TaskSub taskSubObj = await BuildTaskSub(empDtLst.Count);
await _taskSubRepository.AddAsync(taskSubObj);
//添加任务明细
foreach (var empDtObj in empDtLst)
{
SUPPLIER_PRO_PROCESS_EQUIPMENT empObj = ExpressionGenericMapper<SUPPLIER_PRO_PROCESS_EQUIPMENT_DT, SUPPLIER_PRO_PROCESS_EQUIPMENT>.Trans(empDtObj);
empObj.TaskId = taskSubObj.TaskId;
await _supplierProProcessEquipmentRepository.AddAsync(empObj);
}
foreach (var empDtObj in empDtLst)
{
//以供应商代码+奇瑞零件号+工艺编码+工艺版本为唯一数据,做新增或者更新存储
var firstObj = _context.Set<SUPPLIER_PRO_PROCESS_EQUIPMENT_DT>().FirstOrDefault(
itm => itm.SupplierCode == empDtObj.SupplierCode
&& itm.CheryProductNo == empDtObj.CheryProductNo
&& itm.DeviceCode == empDtObj.DeviceCode
&& itm.DeviceType == empDtObj.DeviceType
);
if (firstObj == null)
{
var ret = await base.Create(empDtObj);
}
else
{
var ret = await base.Update(empDtObj);
}
}
#endregion
scope.Complete();
return Ok(true);
}
catch (Exception ex)
{
throw new Exception("方法体执行报错,事务回滚:" + ex.Message);
}
}
public override async Task<ActionResult<SUPPLIER_PRO_PROCESS_EQUIPMENT_DT>> Create(SUPPLIER_PRO_PROCESS_EQUIPMENT_DT entity)
{
using TransactionScope scope = new TransactionScope();
try
{
await Create(item);
#region 数据库操作
//添加任务
TaskSub taskSubObj = await BuildTaskSub(1);
await _taskSubRepository.AddAsync(taskSubObj);
//添加任务明细
SUPPLIER_PRO_PROCESS_EQUIPMENT empObj = ExpressionGenericMapper<SUPPLIER_PRO_PROCESS_EQUIPMENT_DT, SUPPLIER_PRO_PROCESS_EQUIPMENT>.Trans(entity);
empObj.TaskId = taskSubObj.TaskId;
await _supplierProProcessEquipmentRepository.AddAsync(empObj);
var firstObj = _context.Set<SUPPLIER_PRO_PROCESS_EQUIPMENT_DT>().FirstOrDefault(
itm => itm.SupplierCode == entity.SupplierCode
&& itm.CheryProductNo == entity.CheryProductNo
&& itm.DeviceCode == entity.DeviceCode
&& itm.DeviceType == entity.DeviceType
);
if (firstObj == null)
{
var ret = await base.Create(entity);
}
else
{
throw new Exception("数据库已经存在,不能重复插入");
}
#endregion
scope.Complete();
return Ok(true);
}
return Ok(true);
catch (Exception ex)
{
throw new Exception("方法体执行报错,事务回滚:" + ex.Message);
}
}
public override async Task<IActionResult> Update(SUPPLIER_PRO_PROCESS_EQUIPMENT_DT entity)
{
using TransactionScope scope = new TransactionScope();
try
{
#region 数据库操作
//添加任务
TaskSub taskSubObj = await BuildTaskSub(1);
await _taskSubRepository.AddAsync(taskSubObj);
//添加任务明细
SUPPLIER_PRO_PROCESS_EQUIPMENT empObj = ExpressionGenericMapper<SUPPLIER_PRO_PROCESS_EQUIPMENT_DT, SUPPLIER_PRO_PROCESS_EQUIPMENT>.Trans(entity);
empObj.TaskId = taskSubObj.TaskId;
await _supplierProProcessEquipmentRepository.AddAsync(empObj);
var firstObj = _context.Set<SUPPLIER_PRO_PROCESS_EQUIPMENT_DT>().FirstOrDefault(
itm => itm.SupplierCode == entity.SupplierCode
&& itm.CheryProductNo == entity.CheryProductNo
&& itm.DeviceCode == entity.DeviceCode
&& itm.DeviceType == entity.DeviceType
);
if (firstObj == null)
{
throw new Exception("数据库不存在,不能更新");
}
else
{
var ret = await base.Update(entity);
}
#endregion
scope.Complete();
return Ok(true);
}
catch (Exception ex)
{
throw new Exception("方法体执行报错,事务回滚:" + ex.Message);
}
}
/// <summary>
/// 生成TaskSub
/// </summary>
/// <param name="dataCount">任务明细数量</param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
private async Task<TaskSub> BuildTaskSub(int dataCount)
{
List<TaskConifgure> 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;
}
}

99
API/Wood.Util/CommonHelper.cs

@ -0,0 +1,99 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
namespace Wood.Util
{
public static class CommonHelper
{
public static Guid NewGuid
{
get
{
return Guid.NewGuid();
}
}
public static string NewGuidStr
{
get
{
return Guid.NewGuid().ToString();
}
}
public static DateTime CurrentTime
{
get
{
return DateTime.Now;
}
}
public static string CurrentTimeStr
{
get
{
DateTime dt = CurrentTime;
return dt.ToString("yyyy-MM-dd HH:mm:ss");
}
}
public static string CurrentMachineName
{
get
{
return Environment.MachineName;
}
}
public static string UserName
{
get
{
return "Admin";
}
}
}
/// <summary>
/// Expression动态拼接+泛型缓存
/// </summary>
/// <typeparam name="TIn"></typeparam>
/// <typeparam name="TOut"></typeparam>
public class ExpressionGenericMapper<TIn, TOut>//Mapper`2
{
private static Func<TIn, TOut> _FUNC = null;
static ExpressionGenericMapper()
{
ParameterExpression parameterExpression = Expression.Parameter(typeof(TIn), "p");
List<MemberBinding> memberBindingList = new List<MemberBinding>();
foreach (var item in typeof(TOut).GetProperties())
{
MemberExpression property = Expression.Property(parameterExpression, typeof(TIn).GetProperty(item.Name));
MemberBinding memberBinding = Expression.Bind(item, property);
memberBindingList.Add(memberBinding);
}
foreach (var item in typeof(TOut).GetFields())
{
MemberExpression property = Expression.Field(parameterExpression, typeof(TIn).GetField(item.Name));
MemberBinding memberBinding = Expression.Bind(item, property);
memberBindingList.Add(memberBinding);
}
MemberInitExpression memberInitExpression = Expression.MemberInit(Expression.New(typeof(TOut)), memberBindingList.ToArray());
Expression<Func<TIn, TOut>> lambda = Expression.Lambda<Func<TIn, TOut>>(memberInitExpression, new ParameterExpression[]
{
parameterExpression
});
_FUNC = lambda.Compile();//拼装是一次性的
}
public static TOut Trans(TIn t)
{
return _FUNC(t);
}
}
}
Loading…
Cancel
Save