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.
202 lines
8.7 KiB
202 lines
8.7 KiB
using Magicodes.ExporterAndImporter.Excel;
|
|
using Microsoft.AspNetCore.Http;
|
|
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.Linq.Expressions;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using TaskManager.Entity;
|
|
using TaskManager.EntityFramework.Repository;
|
|
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
|
|
{
|
|
public class SupplierProProcessEquipmentDtService : NormalBaseController<SUPPLIER_PRO_PROCESS_EQUIPMENT_DT>
|
|
{
|
|
const string _taskName = "工艺装备";
|
|
|
|
private readonly IRepository<TaskSub> _taskSubRepository;
|
|
private readonly IRepository<SUPPLIER_PRO_PROCESS_EQUIPMENT> _supplierProProcessEquipmentRepository;
|
|
private readonly IRepository<TaskConifgure> _taskConfigureRepository;
|
|
private readonly CommonService _commonService;
|
|
|
|
|
|
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, 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]
|
|
[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_PRO_PROCESS_EQUIPMENT_DT> impResult = await importer.Import<SUPPLIER_PRO_PROCESS_EQUIPMENT_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;
|
|
|
|
using var transaction = _context.Database.BeginTransaction();
|
|
try
|
|
{
|
|
#region 数据库操作
|
|
//添加任务
|
|
TaskSub taskSubObj = _commonService.BuildTaskSub(entityLst.Count, _taskName);
|
|
await _taskSubRepository.AddAsync(taskSubObj);
|
|
//添加任务明细
|
|
foreach (var empDtObj in entityLst)
|
|
{
|
|
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 entityLst)
|
|
{
|
|
//以供应商代码+奇瑞零件号+工艺编码+工艺版本为唯一数据,做新增或者更新存储
|
|
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
|
|
{
|
|
empDtObj.UId = firstObj.UId;
|
|
empDtObj.CreationTime = CommonHelper.CurrentTime;
|
|
var ret = await base.Update(empDtObj);
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
transaction.Commit();
|
|
return Ok(true);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
transaction.Rollback();
|
|
throw new Exception("方法体执行报错,事务回滚:" + ex.Message);
|
|
}
|
|
}
|
|
|
|
public override async Task<ActionResult<SUPPLIER_PRO_PROCESS_EQUIPMENT_DT>> Create(SUPPLIER_PRO_PROCESS_EQUIPMENT_DT entity)
|
|
{
|
|
using var transaction = _context.Database.BeginTransaction();
|
|
try
|
|
{
|
|
#region 数据库操作
|
|
//添加任务
|
|
TaskSub taskSubObj = _commonService.BuildTaskSub(1, _taskName);
|
|
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
|
|
|
|
transaction.Commit();
|
|
return Ok(true);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
transaction.Rollback();
|
|
throw new Exception("方法体执行报错,事务回滚:" + ex.Message);
|
|
}
|
|
}
|
|
|
|
public override async Task<IActionResult> Update(SUPPLIER_PRO_PROCESS_EQUIPMENT_DT entity)
|
|
{
|
|
using var transaction = _context.Database.BeginTransaction();
|
|
try
|
|
{
|
|
#region 数据库操作
|
|
//添加任务
|
|
TaskSub taskSubObj = _commonService.BuildTaskSub(1, _taskName);
|
|
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
|
|
|
|
transaction.Commit();
|
|
return Ok(true);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
transaction.Rollback();
|
|
throw new Exception("方法体执行报错,事务回滚:" + ex.Message);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|