You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
401 lines
16 KiB
401 lines
16 KiB
using EFCore.BulkExtensions;
|
|
using Magicodes.ExporterAndImporter.Core.Models;
|
|
using Magicodes.ExporterAndImporter.Excel;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.EntityFrameworkCore.Storage;
|
|
using Microsoft.Extensions.Configuration;
|
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
|
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
|
|
using Omu.ValueInjecter;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Linq.Expressions;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Transactions;
|
|
using TaskManager.Entity;
|
|
using TaskManager.EntityFramework;
|
|
using TaskManager.EntityFramework.Repository;
|
|
using Wood.Service.Controllers;
|
|
using Wood.Util;
|
|
using static Dapper.SqlMapper;
|
|
|
|
namespace Wood.Service.Datas
|
|
{
|
|
public class SupplierEmployeeDtService : NormalBaseController<SUPPLIER_EMPLOYEE_DT>
|
|
{
|
|
const string _taskName = "人员资质信息";
|
|
|
|
private readonly IRepository<TaskSub> _taskSubRepository;
|
|
private readonly IRepository<SUPPLIER_EMPLOYEE> _supplierEmployeeRepository;
|
|
private readonly IRepository<TaskConifgure> _taskConfigureRepository;
|
|
private readonly CommonService _commonService;
|
|
|
|
|
|
public SupplierEmployeeDtService(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository<SUPPLIER_EMPLOYEE_DT> repository, IRepository<TaskSub> taskSubRepository, IRepository<SUPPLIER_EMPLOYEE> supplierEmployeeRepository, IRepository<TaskConifgure> 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]
|
|
[Route("import")]
|
|
public override async Task<IActionResult> Import(IFormFile file)
|
|
{
|
|
if (file == null || file.Length == 0)
|
|
{
|
|
return NotFound();
|
|
}
|
|
MemoryStream memStream = new MemoryStream();
|
|
await file.CopyToAsync(memStream);
|
|
|
|
var importer = new ExcelImporter();
|
|
ImportResult<SUPPLIER_EMPLOYEE_DT> impResult = await importer.Import<SUPPLIER_EMPLOYEE_DT>(memStream);
|
|
if (impResult.HasError)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
foreach (var rowErr in impResult.RowErrors)
|
|
{
|
|
string temp = string.Join(";", rowErr.FieldErrors.Select(itm => $"第{rowErr.RowIndex}行:{itm.Key}-{itm.Value}"));
|
|
sb.AppendLine(temp);
|
|
}
|
|
foreach (var templateErr in impResult.TemplateErrors)
|
|
{
|
|
string temp = $"列名:{templateErr.RequireColumnName},错误信息:{templateErr.Message}";
|
|
sb.AppendLine(temp);
|
|
}
|
|
throw new Exception(sb.ToString());
|
|
}
|
|
var entityLst = impResult.Data.ToList();
|
|
|
|
// 校验数据长度
|
|
var validationErrors = ValidationHelper.ValidateDataLength(entityLst, _context);
|
|
if (validationErrors.Any())
|
|
{
|
|
throw new Exception("数据校验失败:" + string.Join(", ", validationErrors));
|
|
}
|
|
|
|
using var transaction = _context.Database.BeginTransaction();
|
|
|
|
var tran = transaction.GetDbTransaction();
|
|
try
|
|
{
|
|
#region 数据库操作
|
|
//添加任务
|
|
TaskSub taskSubObj = _commonService.BuildTaskSub(entityLst.Count, _taskName);
|
|
await _context.TaskSub.AddAsync(taskSubObj);
|
|
//添加任务明细
|
|
|
|
List<SUPPLIER_EMPLOYEE> emps = new List<SUPPLIER_EMPLOYEE>();
|
|
foreach (var empDtObj in entityLst)
|
|
{
|
|
empDtObj.SupplierCode = VendCode;
|
|
empDtObj.ReadState = true;
|
|
SUPPLIER_EMPLOYEE empObj = new SUPPLIER_EMPLOYEE();
|
|
empObj.InjectFrom(empDtObj);
|
|
empObj.ReadState = true;
|
|
|
|
//SUPPLIER_EMPLOYEE empObj = EntityMapper<SUPPLIER_EMPLOYEE_DT, SUPPLIER_EMPLOYEE>.Trans(empDtObj);
|
|
|
|
empObj.TaskId = taskSubObj.TaskId;
|
|
//await _supplierEmployeeRepository.AddAsync(empObj);
|
|
emps.Add(empObj);
|
|
|
|
}
|
|
_context.BulkInsert(emps);
|
|
|
|
|
|
|
|
|
|
foreach (var empDtObj in entityLst)
|
|
{
|
|
empDtObj.SupplierCode = VendCode;
|
|
//以“供应商代码+工厂代码+车间代码+产线代码+工位代码+操作人员账号”为唯一标识,做新增或者更新存储
|
|
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
|
|
{
|
|
empDtObj.UId = firstObj.UId;
|
|
empDtObj.CreationTime = CommonHelper.CurrentTime;
|
|
var ret = await base.Update(empDtObj);
|
|
}
|
|
}
|
|
|
|
//_context.BulkMerge(entityLst,
|
|
// itm=> itm.SupplierCode,
|
|
// itm=> itm.PlantId,
|
|
// itm=> itm.WorkshopId,
|
|
// itm=> itm.ProductionLineId,
|
|
// itm=> itm.StationId
|
|
// );
|
|
|
|
|
|
//_context.BulkMerge(entityLst, options => {
|
|
// options.ColumnPrimaryKeyExpression = itm =>
|
|
//new
|
|
//{
|
|
// itm.SupplierCode,
|
|
// itm.PlantId,
|
|
// itm.WorkshopId,
|
|
// itm.ProductionLineId,
|
|
// itm.StationId
|
|
//}; options.Transaction = tran;
|
|
//}
|
|
//);
|
|
|
|
//foreach (var empDtObj in entityLst)
|
|
//{
|
|
// empDtObj.SupplierCode = VendCode;
|
|
// //以“供应商代码+工厂代码+车间代码+产线代码+工位代码+操作人员账号”为唯一标识,做新增或者更新存储
|
|
// 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
|
|
// {
|
|
// empDtObj.UId = firstObj.UId;
|
|
// empDtObj.CreationTime = CommonHelper.CurrentTime;
|
|
// var ret = await base.Update(empDtObj);
|
|
// }
|
|
//}
|
|
#endregion
|
|
_context.SaveChanges();
|
|
transaction.Commit();
|
|
return Ok(true);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
transaction.Rollback();
|
|
throw new Exception("方法体执行报错,事务回滚:" + ex.Message);
|
|
}
|
|
}
|
|
|
|
public override async Task<ActionResult<SUPPLIER_EMPLOYEE_DT>> Create(SUPPLIER_EMPLOYEE_DT entity)
|
|
{
|
|
using var transaction = _context.Database.BeginTransaction();
|
|
|
|
var tran = transaction.GetDbTransaction();
|
|
try
|
|
{
|
|
#region 数据库操作
|
|
//添加任务
|
|
|
|
TaskSub taskSubObj = _commonService.BuildTaskSub(1, _taskName);
|
|
await _context.TaskSub.AddAsync(taskSubObj);
|
|
entity.ReadState = true;
|
|
entity.WriteState = false;
|
|
entity.TaskId = taskSubObj.TaskId;
|
|
|
|
|
|
//添加任务明细
|
|
SUPPLIER_EMPLOYEE empObj = new SUPPLIER_EMPLOYEE();
|
|
|
|
empObj.SupplierCode = entity.SupplierCode;
|
|
empObj.SupplierName = entity.SupplierName;
|
|
empObj.PlantId = entity.PlantId;
|
|
empObj.PlantName = entity.PlantName;
|
|
empObj.WorkshopId = entity.WorkshopId;
|
|
empObj.WorkshopName = entity.WorkshopName;
|
|
empObj.ProductionLineId = entity.ProductionLineId;
|
|
empObj.ProductionLineName = entity.ProductionLineName;
|
|
empObj.StationId = entity.StationId;
|
|
empObj.StationName = entity.StationName;
|
|
empObj.OperatorId = entity.OperatorId;
|
|
empObj.OperatorName = entity.OperatorName;
|
|
empObj.HaveQuantity = entity.HaveQuantity;
|
|
empObj.DataUpdateTime = entity.DataUpdateTime;
|
|
empObj.PositionId = entity.PositionId;
|
|
empObj.PositionName = entity.PositionName;
|
|
empObj.QualificationLevel = entity.QualificationLevel;
|
|
empObj.CheckInTime = entity.CheckInTime;
|
|
empObj.CheckOutTime = entity.CheckOutTime;
|
|
empObj.TaskId = taskSubObj.TaskId;
|
|
empObj.ReadState = true;
|
|
|
|
await _context.AddAsync(empObj);
|
|
|
|
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("数据库已经存在,不能重复插入");
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// _context.BulkMerge(new List<SUPPLIER_EMPLOYEE_DT> { entity },
|
|
|
|
//itm => itm.SupplierCode,
|
|
//itm => itm.PlantId,
|
|
//itm => itm.WorkshopId,
|
|
//itm => itm.ProductionLineId,
|
|
//itm => itm.StationId
|
|
|
|
// );
|
|
|
|
//await _context.BulkMergeAsync(new List<SUPPLIER_EMPLOYEE_DT> { entity }, options =>
|
|
//{
|
|
// options.ColumnPrimaryKeyExpression = itm =>
|
|
//new { itm.SupplierCode, itm.PlantId, itm.WorkshopId, itm.ProductionLineId, itm.StationId, itm.OperatorId }; options.Transaction = tran;
|
|
//}
|
|
//);
|
|
|
|
_context.SaveChanges();
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
transaction.Commit();
|
|
return Ok(true);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
transaction.Rollback();
|
|
throw new Exception("方法体执行报错,事务回滚:" + ex.Message);
|
|
}
|
|
}
|
|
|
|
public override async Task<IActionResult> Update(SUPPLIER_EMPLOYEE_DT entity)
|
|
{
|
|
using var transaction = _context.Database.BeginTransaction();
|
|
var tran = transaction.GetDbTransaction();
|
|
|
|
|
|
try
|
|
{
|
|
#region 数据库操作
|
|
//添加任务
|
|
|
|
TaskSub taskSubObj = _commonService.BuildTaskSub(1, _taskName);
|
|
await _context.TaskSub.AddAsync(taskSubObj);
|
|
entity.ReadState = true;
|
|
entity.WriteState = false;
|
|
entity.TaskId = taskSubObj.TaskId;
|
|
|
|
|
|
//添加任务明细
|
|
SUPPLIER_EMPLOYEE empObj = new SUPPLIER_EMPLOYEE();
|
|
|
|
empObj.SupplierCode = entity.SupplierCode;
|
|
empObj.SupplierName = entity.SupplierName;
|
|
empObj.PlantId = entity.PlantId;
|
|
empObj.PlantName = entity.PlantName;
|
|
empObj.WorkshopId = entity.WorkshopId;
|
|
empObj.WorkshopName = entity.WorkshopName;
|
|
empObj.ProductionLineId = entity.ProductionLineId;
|
|
empObj.ProductionLineName = entity.ProductionLineName;
|
|
empObj.StationId = entity.StationId;
|
|
empObj.StationName = entity.StationName;
|
|
empObj.OperatorId = entity.OperatorId;
|
|
empObj.OperatorName = entity.OperatorName;
|
|
empObj.HaveQuantity = entity.HaveQuantity;
|
|
empObj.DataUpdateTime = entity.DataUpdateTime;
|
|
empObj.PositionId = entity.PositionId;
|
|
empObj.PositionName = entity.PositionName;
|
|
empObj.QualificationLevel = entity.QualificationLevel;
|
|
empObj.CheckInTime = entity.CheckInTime;
|
|
empObj.CheckOutTime = entity.CheckOutTime;
|
|
empObj.TaskId = taskSubObj.TaskId;
|
|
empObj.ReadState = true;
|
|
|
|
await _context.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);
|
|
}
|
|
|
|
|
|
|
|
|
|
//_context.BulkMerge(new List<SUPPLIER_EMPLOYEE_DT> { entity },
|
|
// itm=> itm.SupplierCode,
|
|
// itm=> itm.PlantId,
|
|
// itm=> itm.WorkshopId,
|
|
// itm=> itm.ProductionLineId,
|
|
// itm=> itm.StationId,
|
|
// itm=> itm.OperatorId
|
|
|
|
|
|
// );
|
|
|
|
|
|
//await _context.BulkMergeAsync(new List<SUPPLIER_EMPLOYEE_DT> { entity }, options =>
|
|
//{
|
|
// options.ColumnPrimaryKeyExpression = itm =>
|
|
//new { itm.SupplierCode, itm.PlantId, itm.WorkshopId, itm.ProductionLineId, itm.StationId, itm.OperatorId }; options.Transaction = tran;
|
|
//}
|
|
//);
|
|
|
|
_context.SaveChanges();
|
|
|
|
#endregion
|
|
|
|
transaction.Commit();
|
|
return Ok(true);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
transaction.Rollback();
|
|
throw new Exception("方法体执行报错,事务回滚:" + ex.Message);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|