using Furion.DatabaseAccessor;
|
using Furion.DatabaseAccessor.Extensions;
|
using Furion.DependencyInjection;
|
using Furion.DynamicApiController;
|
using Furion.FriendlyException;
|
using Admin.NET.Core;
|
using Mapster;
|
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.EntityFrameworkCore;
|
using System.Linq.Dynamic.Core;
|
using Microsoft.AspNetCore.Http;
|
using System.Text;
|
using System.Web;
|
using System.ComponentModel;
|
using System.Data;
|
namespace Admin.NET.Application
|
{
|
/// <summary>
|
/// 物料信息表服务
|
/// </summary>
|
[ApiDescriptionSettings("WmsBase", Name = "WmsMaterial", Order = 100)]
|
[Route("api")]
|
public class WmsMaterialService : IWmsMaterialService, IDynamicApiController, ITransient
|
{
|
private readonly IRepository<WmsMaterial,MasterDbContextLocator> _wmsMaterialRep;
|
private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep;
|
private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep;
|
private readonly ISysExcelTemplateService _sysExcelTemplateService;
|
private readonly static object _lock = new();
|
|
public WmsMaterialService(
|
IRepository<WmsMaterial,MasterDbContextLocator> wmsMaterialRep
|
,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep
|
,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep
|
,ISysExcelTemplateService sysExcelTemplateService
|
)
|
{
|
_wmsMaterialRep = wmsMaterialRep;
|
_sysDictTypeRep = sysDictTypeRep;
|
_sysDictDataRep = sysDictDataRep;
|
_sysExcelTemplateService = sysExcelTemplateService;
|
}
|
|
/// <summary>
|
/// 分页查询物料信息表
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpGet("WmsMaterial/page")]
|
public async Task<PageResult<WmsMaterialOutput>> Page([FromQuery] WmsMaterialSearch input)
|
{
|
var wmsMaterials = await _wmsMaterialRep.DetachedEntities
|
.Where(!string.IsNullOrEmpty(input.MaterialName), u => EF.Functions.Like(u.MaterialName, $"%{input.MaterialName.Trim()}%"))
|
.Where(!string.IsNullOrEmpty(input.MaterialCode), u => u.MaterialCode == input.MaterialCode)
|
.Where(!string.IsNullOrEmpty(input.ErpCode), u => u.ErpCode == input.ErpCode)
|
.Where(!string.IsNullOrEmpty(input.MaterialTypeName), u => u.MaterialTypeName == input.MaterialTypeName)
|
.Where(!string.IsNullOrEmpty(input.MaterialTypeDescr), u => u.MaterialTypeDescr == input.MaterialTypeDescr)
|
.Where(input.MaterialType != null, u => u.MaterialType == input.MaterialType)
|
.Where(!string.IsNullOrEmpty(input.MaterialGroup), u => u.MaterialGroup == input.MaterialGroup)
|
.Where(!string.IsNullOrEmpty(input.ABCClassName), u => u.ABCClassName == input.ABCClassName)
|
.Where(input.ABCClass != null, u => u.ABCClass == input.ABCClass)
|
.Where(!string.IsNullOrEmpty(input.MaterialSpec), u => u.MaterialSpec == input.MaterialSpec)
|
.Where(!string.IsNullOrEmpty(input.InPlaceCode), u => u.InPlaceCode == input.InPlaceCode)
|
.Where(!string.IsNullOrEmpty(input.MaterialUnit), u => u.MaterialUnit == input.MaterialUnit)
|
.Where(!string.IsNullOrEmpty(input.POUnit), u => u.POUnit == input.POUnit)
|
.Where(!string.IsNullOrEmpty(input.Color), u => u.Color == input.Color)
|
.Where(!string.IsNullOrEmpty(input.Weight), u => u.Weight == input.Weight)
|
.Where(input.SNP != null, u => u.SNP == input.SNP)
|
.Where(input.TranslateRate != null, u => u.TranslateRate == input.TranslateRate)
|
.Where(input.BatchRuleId != null, u => u.BatchRuleId == input.BatchRuleId)
|
.Where(input.ControlRuleId != null, u => u.ControlRuleId == input.ControlRuleId)
|
.Where(input.IsDisabled != null, u => u.IsDisabled == input.IsDisabled)
|
.Where(!string.IsNullOrEmpty(input.MaterialDesc), u => u.MaterialDesc == input.MaterialDesc)
|
.Where(input.CreatedTime!=null, u => u.CreatedTime>= Convert.ToDateTime(input.CreatedTime[0]) && u.CreatedTime<= Convert.ToDateTime(input.CreatedTime[1]))
|
.Where(input.UpdatedTime!=null, u => u.UpdatedTime>= Convert.ToDateTime(input.UpdatedTime[0]) && u.UpdatedTime<= Convert.ToDateTime(input.UpdatedTime[1]))
|
.Where(!string.IsNullOrEmpty(input.CreatedUserName), u => u.CreatedUserName == input.CreatedUserName)
|
.Where(!string.IsNullOrEmpty(input.UpdatedUserName), u => u.UpdatedUserName == input.UpdatedUserName)
|
.OrderBy(PageInputOrder.OrderBuilder<WmsMaterialSearch>(input))
|
.ProjectToType<WmsMaterialOutput>()
|
.ToADPagedListAsync(input.PageNo, input.PageSize);
|
return wmsMaterials;
|
}
|
|
/// <summary>
|
/// 不分页查询物料信息表列表
|
/// </summary>
|
/// <param name="input">物料信息表查询参数</param>
|
/// <returns>(物料信息表)实例列表</returns>
|
[HttpGet("WmsMaterial/listNonPage")]
|
public async Task<List<WmsMaterialOutput>> ListNonPageAsync([FromQuery] WmsMaterialSearchNonPage input)
|
{
|
var pMaterialName = input.MaterialName?.Trim() ?? "";
|
var pMaterialCode = input.MaterialCode?.Trim() ?? "";
|
var pErpCode = input.ErpCode?.Trim() ?? "";
|
var pMaterialTypeName = input.MaterialTypeName?.Trim() ?? "";
|
var pMaterialTypeDescr = input.MaterialTypeDescr?.Trim() ?? "";
|
var pMaterialType = input.MaterialType;
|
var pMaterialGroup = input.MaterialGroup?.Trim() ?? "";
|
var pABCClassName = input.ABCClassName?.Trim() ?? "";
|
var pABCClass = input.ABCClass;
|
var pMaterialSpec = input.MaterialSpec?.Trim() ?? "";
|
var pInPlaceCode = input.InPlaceCode?.Trim() ?? "";
|
var pMaterialUnit = input.MaterialUnit?.Trim() ?? "";
|
var pPOUnit = input.POUnit?.Trim() ?? "";
|
var pColor = input.Color?.Trim() ?? "";
|
var pWeight = input.Weight?.Trim() ?? "";
|
var pSNP = input.SNP;
|
var pTranslateRate = input.TranslateRate;
|
var pBatchRuleId = input.BatchRuleId;
|
var pControlRuleId = input.ControlRuleId;
|
var pIsDisabled = input.IsDisabled;
|
var pMaterialDesc = input.MaterialDesc?.Trim() ?? "";
|
var pCreatedTime = input.CreatedTime;
|
var pUpdatedTime = input.UpdatedTime;
|
var pCreatedUserName = input.CreatedUserName?.Trim() ?? "";
|
var pUpdatedUserName = input.UpdatedUserName?.Trim() ?? "";
|
var wmsMaterials = await _wmsMaterialRep.DetachedEntities
|
.Where(!string.IsNullOrEmpty(pMaterialName), u => EF.Functions.Like(u.MaterialName, $"%{pMaterialName}%"))
|
.Where(!string.IsNullOrEmpty(pMaterialCode), u => u.MaterialCode == pMaterialCode)
|
.Where(!string.IsNullOrEmpty(pErpCode), u => u.ErpCode == pErpCode)
|
.Where(!string.IsNullOrEmpty(pMaterialTypeName), u => u.MaterialTypeName == pMaterialTypeName)
|
.Where(!string.IsNullOrEmpty(pMaterialTypeDescr), u => u.MaterialTypeDescr == pMaterialTypeDescr)
|
.Where(pMaterialType != null, u => u.MaterialType == pMaterialType)
|
.Where(!string.IsNullOrEmpty(pMaterialGroup), u => u.MaterialGroup == pMaterialGroup)
|
.Where(!string.IsNullOrEmpty(pABCClassName), u => u.ABCClassName == pABCClassName)
|
.Where(pABCClass != null, u => u.ABCClass == pABCClass)
|
.Where(!string.IsNullOrEmpty(pMaterialSpec), u => u.MaterialSpec == pMaterialSpec)
|
.Where(!string.IsNullOrEmpty(pInPlaceCode), u => u.InPlaceCode == pInPlaceCode)
|
.Where(!string.IsNullOrEmpty(pMaterialUnit), u => u.MaterialUnit == pMaterialUnit)
|
.Where(!string.IsNullOrEmpty(pPOUnit), u => u.POUnit == pPOUnit)
|
.Where(!string.IsNullOrEmpty(pColor), u => u.Color == pColor)
|
.Where(!string.IsNullOrEmpty(pWeight), u => u.Weight == pWeight)
|
.Where(pSNP != null, u => u.SNP == pSNP)
|
.Where(pTranslateRate != null, u => u.TranslateRate == pTranslateRate)
|
.Where(pBatchRuleId != null, u => u.BatchRuleId == pBatchRuleId)
|
.Where(pControlRuleId != null, u => u.ControlRuleId == pControlRuleId)
|
.Where(pIsDisabled != null, u => u.IsDisabled == pIsDisabled)
|
.Where(!string.IsNullOrEmpty(pMaterialDesc), u => u.MaterialDesc == pMaterialDesc)
|
.Where(input.CreatedTime!=null, u => u.CreatedTime>= Convert.ToDateTime(input.CreatedTime[0]) && u.CreatedTime<= Convert.ToDateTime(input.CreatedTime[1]))
|
.Where(input.UpdatedTime!=null, u => u.UpdatedTime>= Convert.ToDateTime(input.UpdatedTime[0]) && u.UpdatedTime<= Convert.ToDateTime(input.UpdatedTime[1]))
|
.Where(!string.IsNullOrEmpty(pCreatedUserName), u => u.CreatedUserName == pCreatedUserName)
|
.Where(!string.IsNullOrEmpty(pUpdatedUserName), u => u.UpdatedUserName == pUpdatedUserName)
|
.OrderBy(PageInputOrder.OrderNonPageBuilder(input))
|
.ProjectToType<WmsMaterialOutput>()
|
.ToListAsync();
|
return wmsMaterials;
|
}
|
|
/// <summary>
|
/// 获取物料信息表
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpGet("WmsMaterial/detail")]
|
public async Task<WmsMaterialOutput> Get([FromQuery] QueryeWmsMaterialInput input)
|
{
|
return (await _wmsMaterialRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsMaterialOutput>();
|
}
|
|
/// <summary>
|
/// 获取物料信息表列表
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpGet("WmsMaterial/list")]
|
public async Task<List<WmsMaterialOutput>> List([FromQuery] WmsMaterialInput input)
|
{
|
return await _wmsMaterialRep.DetachedEntities.ProjectToType<WmsMaterialOutput>().ToListAsync();
|
}
|
|
#region 增、删、改
|
|
|
/// <summary>
|
/// 增加物料信息表
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpPost("WmsMaterial/add")]
|
public async Task Add(AddWmsMaterialInfoInput input)
|
{
|
|
|
//物料信息
|
var wmsMaterial = input.MaterialInput.Adapt<WmsMaterial>();
|
//控制规则信息
|
var controlRuleld = input.ControlRuleld;
|
//物料客户关联信息
|
var materialCustomerList = input.MaterialCustomerList.Adapt<WmsMaterialCustomer>();
|
//替代品信息
|
var substituteGoodList = input.SubstituteGoodList.Adapt<WmsSubstituteGood>();
|
//验证
|
await CheckExisit(wmsMaterial);
|
|
wmsMaterial.CreatedUserId = wmsMaterial.UpdatedUserId = SysHelper.GetUserId();
|
wmsMaterial.CreatedUserName = wmsMaterial.UpdatedUserName = SysHelper.GetUserName();
|
wmsMaterial.CreatedTime = wmsMaterial.UpdatedTime = SysHelper.GetNowTime();
|
await _wmsMaterialRep.InsertAsync(wmsMaterial);
|
}
|
|
/// <summary>
|
/// 删除物料信息表
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpPost("WmsMaterial/delete")]
|
public async Task Delete(DeleteWmsMaterialInput input)
|
{
|
var wmsMaterial = await _wmsMaterialRep.FirstOrDefaultAsync(u => u.Id == input.Id);
|
await _wmsMaterialRep.DeleteAsync(wmsMaterial);
|
|
}
|
|
/// <summary>
|
/// 更新物料信息表
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpPost("WmsMaterial/edit")]
|
public async Task Update(UpdateWmsMaterialInput input)
|
{
|
var isExist = await _wmsMaterialRep.AnyAsync(u => u.Id == input.Id, false);
|
if (!isExist) throw Oops.Oh(ErrorCode.D1002);
|
|
var wmsMaterial = input.Adapt<WmsMaterial>();
|
//验证
|
await CheckExisit(wmsMaterial,true);
|
|
wmsMaterial.UpdatedUserId = SysHelper.GetUserId();
|
wmsMaterial.UpdatedUserName = SysHelper.GetUserName();
|
wmsMaterial.UpdatedTime = SysHelper.GetNowTime();
|
await _wmsMaterialRep.UpdateAsync(wmsMaterial,ignoreNullValues:true);
|
}
|
|
#endregion
|
|
#region 导入
|
|
/// <summary>
|
/// Excel模板导入物料信息表功能
|
/// </summary>
|
/// <param name="file">Excel模板文件</param>
|
/// <returns>导入的记录数</returns>
|
[HttpPost("WmsMaterial/importExcel")]
|
public async Task<int> ImportExcelAsync(IFormFile file)
|
{
|
int _HeadStartLine = 2;//第1行是说明,第2行是列名
|
int _DataStartLine = 3;//第3行开始是数据
|
|
DataTable importDataTable = ExcelUtil.ImportExcelToDataTable(file, _HeadStartLine, _DataStartLine);
|
var addList =await CommonImport(importDataTable, _DataStartLine);
|
|
lock (_lock)
|
{
|
_wmsMaterialRep.InsertAsync(addList);
|
|
}
|
await Task.CompletedTask;
|
return addList.Count;
|
}
|
|
/// <summary>
|
/// DataTable转换实体对象列表
|
/// </summary>
|
/// <param name="dataTable"></param>
|
/// <param name="dataStartLine">模版列名开始行</param>
|
/// <returns></returns>
|
private async Task<List<WmsMaterial>> CommonImport(DataTable dataTable, int dataStartLine)
|
{
|
|
var details = new List<WmsMaterial>();
|
int index = dataStartLine;//模版列名开始行
|
foreach (System.Data.DataRow row in dataTable.Rows)
|
{
|
index++;
|
|
//导入模版定制化代码(替换模版使用)
|
|
var addItem = new WmsMaterial()
|
{
|
CreatedTime = SysHelper.GetNowTime(),
|
CreatedUserId = SysHelper.GetUserId(),
|
CreatedUserName = SysHelper.GetUserName(),
|
UpdatedTime = SysHelper.GetNowTime(),
|
UpdatedUserId = SysHelper.GetUserId(),
|
UpdatedUserName = SysHelper.GetUserName()
|
};
|
#region 定义变量
|
var _MaterialName = "";//物料名称
|
var _MaterialCode = "";//物料编号
|
var _ErpCode = "";//ERP编号
|
var _MaterialTypeName = "";//物料类型名称
|
var _MaterialTypeDescr = "";//物料类型描述
|
var _MaterialType = "";//物料类型
|
var _MaterialGroup = "";//物料组
|
var _ABCClassName = "";//ABC分类名称
|
var _ABCClass = "";//ABC分类
|
var _MaterialSpec = "";//物料规格
|
var _InPlaceCode = "";//默认入库库位
|
var _MaterialUnit = "";//库存单位
|
var _POUnit = "";//采购单位
|
var _Color = "";//颜色
|
var _Weight = "";//重量
|
var _SNP = "";//标包数量
|
var _TranslateRate = "";//换算率
|
var _BatchRuleId = "";//批次属性规则
|
var _ControlRuleId = "";//控制属性规则
|
var _IsDisabled = "";//是否禁用
|
var _MaterialDesc = "";//描述
|
var _Id = "";//Id主键
|
#endregion
|
|
|
#region 取值
|
_MaterialName = row["物料名称"]?.ToString() ;
|
_MaterialCode = row["物料编号"]?.ToString() ;
|
_ErpCode = row["ERP编号"]?.ToString() ;
|
_MaterialTypeName = row["物料类型名称"]?.ToString() ;
|
_MaterialTypeDescr = row["物料类型描述"]?.ToString() ;
|
_MaterialType = row["物料类型"]?.ToString() ;
|
_MaterialGroup = row["物料组"]?.ToString() ;
|
_ABCClassName = row["ABC分类名称"]?.ToString() ;
|
_ABCClass = row["ABC分类"]?.ToString() ;
|
_MaterialSpec = row["物料规格"]?.ToString() ;
|
_InPlaceCode = row["默认入库库位"]?.ToString() ;
|
_MaterialUnit = row["库存单位"]?.ToString() ;
|
_POUnit = row["采购单位"]?.ToString() ;
|
_Color = row["颜色"]?.ToString() ;
|
_Weight = row["重量"]?.ToString() ;
|
_SNP = row["标包数量"]?.ToString() ;
|
_TranslateRate = row["换算率"]?.ToString() ;
|
_BatchRuleId = row["批次属性规则"]?.ToString() ;
|
_ControlRuleId = row["控制属性规则"]?.ToString() ;
|
_IsDisabled = row["是否禁用"]?.ToString() ;
|
_MaterialDesc = row["描述"]?.ToString() ;
|
_Id = row["Id主键"]?.ToString() ;
|
#endregion
|
|
|
#region 验证
|
|
if (string.IsNullOrEmpty(_MaterialName))
|
{
|
throw Oops.Oh($"第{index}行[物料名称]{_MaterialName}不能为空!");
|
}
|
|
if(!string.IsNullOrEmpty(_MaterialName))
|
{
|
addItem.MaterialName = (string)_MaterialName;
|
}
|
|
if (string.IsNullOrEmpty(_MaterialCode))
|
{
|
throw Oops.Oh($"第{index}行[物料编号]{_MaterialCode}不能为空!");
|
}
|
|
if(!string.IsNullOrEmpty(_MaterialCode))
|
{
|
addItem.MaterialCode = (string)_MaterialCode;
|
}
|
if(!string.IsNullOrEmpty(_ErpCode))
|
{
|
addItem.ErpCode = (string)_ErpCode;
|
}
|
if(!string.IsNullOrEmpty(_MaterialTypeName))
|
{
|
addItem.MaterialTypeName = (string)_MaterialTypeName;
|
}
|
if(!string.IsNullOrEmpty(_MaterialTypeDescr))
|
{
|
addItem.MaterialTypeDescr = (string)_MaterialTypeDescr;
|
}
|
if(!string.IsNullOrEmpty(_MaterialType))
|
{
|
if (!int.TryParse(_MaterialType, out int outMaterialType)&&!string.IsNullOrEmpty(_MaterialType))
|
{
|
throw Oops.Oh($"第{index}行[物料类型]{_MaterialType}值不正确!");
|
}
|
if (outMaterialType <= 0&&!string.IsNullOrEmpty(_MaterialType))
|
{
|
throw Oops.Oh($"第{index}行[物料类型]{_MaterialType}值不能小于等于0!");
|
}
|
else
|
{
|
addItem.MaterialType = outMaterialType;
|
}
|
|
}
|
if(!string.IsNullOrEmpty(_MaterialGroup))
|
{
|
addItem.MaterialGroup = (string)_MaterialGroup;
|
}
|
if(!string.IsNullOrEmpty(_ABCClassName))
|
{
|
addItem.ABCClassName = (string)_ABCClassName;
|
}
|
if(!string.IsNullOrEmpty(_ABCClass))
|
{
|
if (!int.TryParse(_ABCClass, out int outABCClass)&&!string.IsNullOrEmpty(_ABCClass))
|
{
|
throw Oops.Oh($"第{index}行[ABC分类]{_ABCClass}值不正确!");
|
}
|
if (outABCClass <= 0&&!string.IsNullOrEmpty(_ABCClass))
|
{
|
throw Oops.Oh($"第{index}行[ABC分类]{_ABCClass}值不能小于等于0!");
|
}
|
else
|
{
|
addItem.ABCClass = outABCClass;
|
}
|
|
}
|
if(!string.IsNullOrEmpty(_MaterialSpec))
|
{
|
addItem.MaterialSpec = (string)_MaterialSpec;
|
}
|
if(!string.IsNullOrEmpty(_InPlaceCode))
|
{
|
addItem.InPlaceCode = (string)_InPlaceCode;
|
}
|
if(!string.IsNullOrEmpty(_MaterialUnit))
|
{
|
addItem.MaterialUnit = (string)_MaterialUnit;
|
}
|
if(!string.IsNullOrEmpty(_POUnit))
|
{
|
addItem.POUnit = (string)_POUnit;
|
}
|
if(!string.IsNullOrEmpty(_Color))
|
{
|
addItem.Color = (string)_Color;
|
}
|
if(!string.IsNullOrEmpty(_Weight))
|
{
|
addItem.Weight = (string)_Weight;
|
}
|
if(!string.IsNullOrEmpty(_SNP))
|
{
|
if (!decimal.TryParse(_SNP, out decimal outSNP)&&!string.IsNullOrEmpty(_SNP))
|
{
|
throw Oops.Oh($"第{index}行[标包数量]{_SNP}值不正确!");
|
}
|
if (outSNP <= 0&&!string.IsNullOrEmpty(_SNP))
|
{
|
throw Oops.Oh($"第{index}行[标包数量]{_SNP}值不能小于等于0!");
|
}
|
else
|
{
|
addItem.SNP = outSNP;
|
}
|
|
}
|
if(!string.IsNullOrEmpty(_TranslateRate))
|
{
|
if (!decimal.TryParse(_TranslateRate, out decimal outTranslateRate)&&!string.IsNullOrEmpty(_TranslateRate))
|
{
|
throw Oops.Oh($"第{index}行[换算率]{_TranslateRate}值不正确!");
|
}
|
if (outTranslateRate <= 0&&!string.IsNullOrEmpty(_TranslateRate))
|
{
|
throw Oops.Oh($"第{index}行[换算率]{_TranslateRate}值不能小于等于0!");
|
}
|
else
|
{
|
addItem.TranslateRate = outTranslateRate;
|
}
|
|
}
|
if(!string.IsNullOrEmpty(_BatchRuleId))
|
{
|
if (!long.TryParse(_BatchRuleId, out long outBatchRuleId)&&!string.IsNullOrEmpty(_BatchRuleId))
|
{
|
throw Oops.Oh($"第{index}行[批次属性规则]{_BatchRuleId}值不正确!");
|
}
|
if (outBatchRuleId <= 0&&!string.IsNullOrEmpty(_BatchRuleId))
|
{
|
throw Oops.Oh($"第{index}行[批次属性规则]{_BatchRuleId}值不能小于等于0!");
|
}
|
else
|
{
|
addItem.BatchRuleId = outBatchRuleId;
|
}
|
|
}
|
if(!string.IsNullOrEmpty(_ControlRuleId))
|
{
|
if (!long.TryParse(_ControlRuleId, out long outControlRuleId)&&!string.IsNullOrEmpty(_ControlRuleId))
|
{
|
throw Oops.Oh($"第{index}行[控制属性规则]{_ControlRuleId}值不正确!");
|
}
|
if (outControlRuleId <= 0&&!string.IsNullOrEmpty(_ControlRuleId))
|
{
|
throw Oops.Oh($"第{index}行[控制属性规则]{_ControlRuleId}值不能小于等于0!");
|
}
|
else
|
{
|
addItem.ControlRuleId = outControlRuleId;
|
}
|
|
}
|
if(!string.IsNullOrEmpty(_IsDisabled))
|
{
|
if(!_IsDisabled.Equals("是") && !_IsDisabled.Equals("否"))
|
{
|
throw Oops.Oh($"第{index}行[是否禁用]{_IsDisabled}值不正确!");
|
}
|
else
|
{
|
bool outIsDisabled = _IsDisabled.Equals("是") ? true : false;
|
addItem.IsDisabled = outIsDisabled;
|
}
|
}
|
|
if(!string.IsNullOrEmpty(_MaterialDesc))
|
{
|
addItem.MaterialDesc = (string)_MaterialDesc;
|
}
|
if(!string.IsNullOrEmpty(_Id))
|
{
|
if (!long.TryParse(_Id, out long outId)&&!string.IsNullOrEmpty(_Id))
|
{
|
throw Oops.Oh($"第{index}行[Id主键]{_Id}值不正确!");
|
}
|
if (outId <= 0&&!string.IsNullOrEmpty(_Id))
|
{
|
throw Oops.Oh($"第{index}行[Id主键]{_Id}值不能小于等于0!");
|
}
|
else
|
{
|
addItem.Id = outId;
|
}
|
|
}
|
#endregion
|
|
|
|
details.Add(addItem);
|
}
|
//验重
|
await CheckExisitForImport(details);
|
|
return details;
|
}
|
|
/// <summary>
|
/// 根据版本下载物料信息表的Excel导入模板
|
/// </summary>
|
/// <param name="version">模板版本</param>
|
/// <returns>下载的模板文件</returns>
|
[HttpGet("WmsMaterial/downloadExcelTemplate")]
|
public IActionResult DownloadExcelTemplate([FromQuery] string version)
|
{
|
string _path = TemplateConst.EXCEL_TEMPLATEFILE_导入模版路径 + $"\\WmsMaterial{TemplateConst.EXCEL_TEMPLATEFILE_导入模版名称后缀}.xlsx";
|
var fileName = HttpUtility.UrlEncode($"导入模板(物料信息表).xlsx", Encoding.GetEncoding("UTF-8"));
|
return new FileStreamResult(new FileStream(_path, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
|
}
|
|
#endregion
|
|
#region 私有方法
|
|
/// <summary>
|
/// 根据联合主键验证数据是否已存在-数据库
|
/// </summary>
|
/// <param name="input"></param>
|
/// <param name="isEdit"></param>
|
/// <returns></returns>
|
private async Task CheckExisit( WmsMaterial input,bool isEdit=false)
|
{
|
|
|
|
bool isExist = false;
|
if (!isEdit)//新增
|
{
|
//数据是否存在重复
|
isExist = await _wmsMaterialRep.AnyAsync(u =>
|
u.MaterialCode.Equals(input.MaterialCode)
|
,false);
|
}
|
else//编辑
|
{
|
|
|
|
//当前编辑数据以外是否存在重复
|
isExist = await _wmsMaterialRep.AnyAsync(u =>
|
u.Id != input.Id
|
&&u.MaterialCode.Equals(input.MaterialCode)
|
,false);
|
}
|
|
|
|
if (isExist) throw Oops.Oh(ErrorCode.E0001);
|
}
|
|
/// <summary>
|
/// 根据联合主键验证数据是否已存在-导入时验证
|
/// </summary>
|
/// <param name="inputs"></param>
|
/// <returns></returns>
|
private async Task CheckExisitForImport(List<WmsMaterial> inputs)
|
{
|
//根据联合主键验证表格中中是否已存在相同数据
|
if (inputs?.Count <= 0)
|
{
|
throw Oops.Oh($"导入数据不能为空");
|
}
|
//数据是否重复
|
var existExcelItem = inputs.GroupBy(g => new {
|
g.MaterialCode
|
})
|
.Where(g => g.Count() > 1)
|
.Select(s => new {
|
s.Key.MaterialCode
|
}).FirstOrDefault();
|
if (existExcelItem != null)
|
{
|
var wmsMaterial = existExcelItem.Adapt<WmsMaterial>();
|
var item= existExcelItem.Adapt<WmsMaterial>();
|
throw Oops.Oh($"导入的表格中,物料编号[{item.MaterialCode}]已存在");
|
}
|
|
|
|
|
//根据联合主键验证数据库中是否已存在相同数据
|
var existDBItem = await _wmsMaterialRep.DetachedEntities.FirstOrDefaultAsync(w=>
|
inputs.Select(s=>""
|
+s.MaterialCode
|
)
|
.Contains(""
|
+w.MaterialCode
|
));
|
if (existDBItem != null)
|
{
|
var wmsMaterial = existExcelItem.Adapt<WmsMaterial>();
|
var item= existExcelItem.Adapt<WmsMaterial>();
|
throw Oops.Oh($"系统中,物料编号[{item.MaterialCode}]已存在");
|
}
|
}
|
|
#endregion
|
}
|
}
|