| | |
| | | private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep; |
| | | private readonly ISysExcelTemplateService _sysExcelTemplateService; |
| | | private readonly static object _lock = new(); |
| | | |
| | | private readonly IRepository<WmsMaterialCustomer, MasterDbContextLocator> _wmsMaterialCustomerRep; |
| | | private readonly IRepository<WmsSubstituteGood, MasterDbContextLocator> _wmsSubstituteGoodRep; |
| | | public WmsMaterialService( |
| | | IRepository<WmsMaterial,MasterDbContextLocator> wmsMaterialRep |
| | | ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep |
| | | ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep |
| | | ,ISysExcelTemplateService sysExcelTemplateService |
| | | , IRepository<WmsMaterialCustomer, MasterDbContextLocator> wmsMaterialCustomerRep |
| | | , IRepository<WmsSubstituteGood, MasterDbContextLocator> wmsSubstituteGoodRep |
| | | ) |
| | | { |
| | | _wmsMaterialRep = wmsMaterialRep; |
| | | _sysDictTypeRep = sysDictTypeRep; |
| | | _sysDictDataRep = sysDictDataRep; |
| | | _sysExcelTemplateService = sysExcelTemplateService; |
| | | _wmsMaterialCustomerRep = wmsMaterialCustomerRep; |
| | | _wmsSubstituteGoodRep = wmsSubstituteGoodRep; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 分页查询物料信息表 |
| | | /// 分页查询物料信息 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | |
| | | 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.MaterialName), u => u.MaterialName == input.MaterialName) |
| | | .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(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(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)) |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 不分页查询物料信息表列表 |
| | | /// 不分页查询物料信息列表 |
| | | /// </summary> |
| | | /// <param name="input">物料信息表查询参数</param> |
| | | /// <returns>(物料信息表)实例列表</returns> |
| | | /// <param name="input">物料信息查询参数</param> |
| | | /// <returns>(物料信息)实例列表</returns> |
| | | [HttpGet("WmsMaterial/listNonPage")] |
| | | public async Task<List<WmsMaterialOutput>> ListNonPageAsync([FromQuery] WmsMaterialSearchNonPage input) |
| | | { |
| | |
| | | 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(pMaterialName), u => 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(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(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)) |
| | |
| | | return wmsMaterials; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取物料信息表 |
| | | /// <summary> |
| | | /// 获取物料信息 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取物料信息表列表 |
| | | /// 获取物料信息列表 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | [HttpPost("WmsMaterial/add")] |
| | | [UnitOfWork] |
| | | 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>(); |
| | | wmsMaterial.ControlRuleId = controlRuleld; |
| | | |
| | | //往来关系信息 |
| | | var baseCustomerList = input.BaseCustomerList.Adapt<List<BaseCustomer>>(); |
| | | //物料客户关联关系 |
| | | var materialCustomerList=new List<WmsMaterialCustomer>(); |
| | | foreach (var baseCustomer in baseCustomerList) |
| | | { |
| | | materialCustomerList.Add(new WmsMaterialCustomer() |
| | | { |
| | | CreatedTime = DateTime.Now, |
| | | CreatedUserId = CurrentUserInfo.UserId, |
| | | CreatedUserName = CurrentUserInfo.Name, |
| | | CustChinaName = baseCustomer.CustChinaName, |
| | | CustCode = baseCustomer.CustCode, |
| | | CustEnglishName = baseCustomer.CustEnglishName, |
| | | CustId = baseCustomer.Id, |
| | | MaterialCode = wmsMaterial.MaterialCode, |
| | | MaterialId = wmsMaterial.Id, |
| | | MaterialName = wmsMaterial.MaterialName, |
| | | UpdatedTime = DateTime.Now, |
| | | UpdatedUserId = CurrentUserInfo.UserId, |
| | | UpdatedUserName = CurrentUserInfo.Name |
| | | |
| | | }); |
| | | } |
| | | //验证 |
| | | await CheckExisit(wmsMaterial); |
| | | |
| | | wmsMaterial.CreatedUserId = wmsMaterial.UpdatedUserId = SysHelper.GetUserId(); |
| | | wmsMaterial.CreatedUserName = wmsMaterial.UpdatedUserName = SysHelper.GetUserName(); |
| | | wmsMaterial.CreatedTime = wmsMaterial.UpdatedTime = SysHelper.GetNowTime(); |
| | | //替代品信息 |
| | | var substituteGoodList = input.SubstituteGoodList.Adapt<List<WmsSubstituteGood>>(); |
| | | |
| | | wmsMaterial.UpdatedUserId = SysHelper.GetUserId(); |
| | | wmsMaterial.UpdatedUserName = SysHelper.GetUserName(); |
| | | wmsMaterial.UpdatedTime = SysHelper.GetNowTime(); |
| | | |
| | | |
| | | await _wmsMaterialRep.InsertAsync(wmsMaterial); |
| | | if (materialCustomerList?.Count > 0) |
| | | { |
| | | await _wmsMaterialCustomerRep.InsertAsync(materialCustomerList); |
| | | } |
| | | if (substituteGoodList?.Count > 0) |
| | | { |
| | | await _wmsSubstituteGoodRep.InsertAsync(substituteGoodList); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 删除物料信息表 |
| | | /// 删除物料信息 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | |
| | | { |
| | | 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) |
| | | [UnitOfWork] |
| | | public async Task Update(UpdateWmsMaterialInfoInput input) |
| | | { |
| | | var isExist = await _wmsMaterialRep.AnyAsync(u => u.Id == input.Id, false); |
| | | //物料信息 |
| | | var wmsMaterial = input.MaterialInput.Adapt<WmsMaterial>(); |
| | | var isExist = await _wmsMaterialRep.AnyAsync(u => u.Id == wmsMaterial.Id, false); |
| | | if (!isExist) throw Oops.Oh(ErrorCode.D1002); |
| | | |
| | | var wmsMaterial = input.Adapt<WmsMaterial>(); |
| | | //验证 |
| | | await CheckExisit(wmsMaterial,true); |
| | | await CheckExisit(wmsMaterial, true); |
| | | |
| | | //控制规则信息 |
| | | var controlRuleld = input.ControlRuleld; |
| | | wmsMaterial.ControlRuleId = controlRuleld; |
| | | |
| | | |
| | | //删除物料客户关联关系 |
| | | var oldaterialCustomerList = await _wmsMaterialCustomerRep.DetachedEntities.Where(w => w.MaterialId == wmsMaterial.Id).ToListAsync(); |
| | | if (oldaterialCustomerList?.Count > 0) |
| | | { |
| | | await _wmsMaterialCustomerRep.DeleteAsync(oldaterialCustomerList); |
| | | } |
| | | |
| | | |
| | | //往来关系信息 |
| | | var baseCustomerList = input.BaseCustomerList.Adapt<List<BaseCustomer>>(); |
| | | //物料客户关联关系 |
| | | var materialCustomerList = new List<WmsMaterialCustomer>(); |
| | | foreach (var baseCustomer in baseCustomerList) |
| | | { |
| | | materialCustomerList.Add(new WmsMaterialCustomer() |
| | | { |
| | | CreatedTime = DateTime.Now, |
| | | CreatedUserId = CurrentUserInfo.UserId, |
| | | CreatedUserName = CurrentUserInfo.Name, |
| | | CustChinaName = baseCustomer.CustChinaName, |
| | | CustCode = baseCustomer.CustCode, |
| | | CustEnglishName = baseCustomer.CustEnglishName, |
| | | CustId = baseCustomer.Id, |
| | | MaterialCode = wmsMaterial.MaterialCode, |
| | | MaterialId = wmsMaterial.Id, |
| | | MaterialName = wmsMaterial.MaterialName, |
| | | UpdatedTime = DateTime.Now, |
| | | UpdatedUserId = CurrentUserInfo.UserId, |
| | | UpdatedUserName = CurrentUserInfo.Name |
| | | |
| | | }); |
| | | } |
| | | |
| | | //删除替代品信息 |
| | | var oldSubstituteGoodList = await _wmsSubstituteGoodRep.DetachedEntities.Where(w => w.MaterialCode == wmsMaterial.MaterialCode).ToListAsync(); |
| | | if (oldSubstituteGoodList?.Count > 0) |
| | | { |
| | | await _wmsSubstituteGoodRep.DeleteAsync(oldSubstituteGoodList); |
| | | } |
| | | |
| | | |
| | | //替代品信息 |
| | | var substituteGoodList = input.SubstituteGoodList.Adapt<List<WmsSubstituteGood>>(); |
| | | |
| | | if (materialCustomerList?.Count > 0) |
| | | { |
| | | await _wmsMaterialCustomerRep.InsertAsync(materialCustomerList); |
| | | } |
| | | if (substituteGoodList?.Count > 0) |
| | | { |
| | | await _wmsSubstituteGoodRep.InsertAsync(substituteGoodList); |
| | | } |
| | | |
| | | wmsMaterial.UpdatedUserId = SysHelper.GetUserId(); |
| | | wmsMaterial.UpdatedUserName = SysHelper.GetUserName(); |
| | | wmsMaterial.UpdatedTime = SysHelper.GetNowTime(); |
| | | await _wmsMaterialRep.UpdateAsync(wmsMaterial,ignoreNullValues:true); |
| | | await _wmsMaterialRep.UpdateAsync(wmsMaterial, ignoreNullValues: true); |
| | | |
| | | |
| | | } |
| | | |
| | | #endregion |
| | |
| | | #region 导入 |
| | | |
| | | /// <summary> |
| | | /// Excel模板导入物料信息表功能 |
| | | /// 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); |
| | | var addList = await CommonImport(importDataTable, _DataStartLine); |
| | | |
| | | lock (_lock) |
| | | { |
| | | _wmsMaterialRep.InsertAsync(addList); |
| | | |
| | | |
| | | } |
| | | await Task.CompletedTask; |
| | | return addList.Count; |
| | |
| | | { |
| | | 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 |
| | | |
| | | //导入模版定制化代码(替换模版使用) |
| | | |
| | | |
| | | 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)) |
| | | { |
| | | throw Oops.Oh($"第{index}行[物料类型]{_MaterialType}不能为空!"); |
| | | } |
| | | |
| | | if (!string.IsNullOrEmpty(_MaterialType)) |
| | | { |
| | | System.Int32 enumMaterialType = default(System.Int32); |
| | | |
| | | if (!Enum.TryParse<System.Int32>(_MaterialType, out enumMaterialType) && !string.IsNullOrEmpty(_MaterialType)) |
| | | { |
| | | throw Oops.Oh($"第{index}行[物料类型]{_MaterialType}值不正确!"); |
| | | } |
| | | else |
| | | { |
| | | addItem.MaterialType = enumMaterialType; |
| | | } |
| | | |
| | | } |
| | | if (!string.IsNullOrEmpty(_MaterialGroup)) |
| | | { |
| | | addItem.MaterialGroup = (string)_MaterialGroup; |
| | | } |
| | | if (!string.IsNullOrEmpty(_ABCClassName)) |
| | | { |
| | | addItem.ABCClassName = (string)_ABCClassName; |
| | | } |
| | | if (!string.IsNullOrEmpty(_ABCClass)) |
| | | { |
| | | Admin.NET.Core.ABCClassEnum enumABCClass = default(Admin.NET.Core.ABCClassEnum); |
| | | |
| | | if (!Enum.TryParse < Admin.NET.Core.ABCClassEnum > (_ABCClass, out enumABCClass)&& !string.IsNullOrEmpty(_ABCClass)) |
| | | { |
| | | throw Oops.Oh($"第{index}行[ABC分类]{_ABCClass}值不正确!"); |
| | | } else |
| | | { |
| | | addItem.ABCClass = enumABCClass; |
| | | } |
| | | |
| | | } |
| | | 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); |
| | | |
| | | //验重 |
| | | await CheckExisitForImport(details); |
| | | |
| | | return details; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据版本下载物料信息表的Excel导入模板 |
| | | /// 根据版本下载物料信息的Excel导入模板 |
| | | /// </summary> |
| | | /// <param name="version">模板版本</param> |
| | | /// <returns>下载的模板文件</returns> |
| | |
| | | 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")); |
| | | var fileName = HttpUtility.UrlEncode($"导入模板(物料信息).xlsx", Encoding.GetEncoding("UTF-8")); |
| | | return new FileStreamResult(new FileStream(_path, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName }; |
| | | } |
| | | |
| | |
| | | /// <param name="input"></param> |
| | | /// <param name="isEdit"></param> |
| | | /// <returns></returns> |
| | | private async Task CheckExisit( WmsMaterial input,bool isEdit=false) |
| | | 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); |
| | | } |
| | | |
| | | |
| | | |
| | | bool isExist = false; |
| | | if (!isEdit)//新增 |
| | | { |
| | | //物料编号是否存在重复 |
| | | isExist = await _wmsMaterialRep.AnyAsync(u => |
| | | u.MaterialCode.Equals(input.MaterialCode) |
| | | , false); |
| | | |
| | | //物料名称是否存在重复 |
| | | isExist = await _wmsMaterialRep.AnyAsync(u => |
| | | u.MaterialName.Equals(input.MaterialName) |
| | | , false); |
| | | } |
| | | else//编辑 |
| | | { |
| | | |
| | | |
| | | |
| | | //当前编辑物料编号以外是否存在重复 |
| | | isExist = await _wmsMaterialRep.AnyAsync(u => |
| | | u.Id != input.Id |
| | | && u.MaterialCode.Equals(input.MaterialCode) |
| | | , false); |
| | | //当前编辑物料名称以外是否存在重复 |
| | | isExist = await _wmsMaterialRep.AnyAsync(u => |
| | | u.Id != input.Id |
| | | && u.MaterialName.Equals(input.MaterialName) |
| | | , 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}]已存在"); |
| | | } |
| | | |
| | | 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 existExcelItem2 = inputs.GroupBy(g => new { |
| | | g.MaterialName |
| | | }) |
| | | .Where(g => g.Count() > 1) |
| | | .Select(s => new { |
| | | s.Key.MaterialName |
| | | }).FirstOrDefault(); |
| | | if (existExcelItem2 != null) |
| | | { |
| | | var wmsMaterial = existExcelItem2.Adapt<WmsMaterial>(); |
| | | var item = existExcelItem2.Adapt<WmsMaterial>(); |
| | | throw Oops.Oh($"导入的表格中,物料名称[{item.MaterialName}]已存在"); |
| | | } |
| | | |
| | | |
| | | //根据联合主键验证数据库中是否已存在相同数据 |
| | | 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}]已存在"); |
| | | } |
| | | |
| | | //根据联合主键验证数据库中是否已存在相同数据 |
| | | 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}]已存在"); |
| | | } |
| | | //根据联合主键验证数据库中是否已存在相同数据 |
| | | var existDBItem2 = await _wmsMaterialRep.DetachedEntities.FirstOrDefaultAsync(w => |
| | | inputs.Select(s => "" |
| | | + s.MaterialName |
| | | ) |
| | | .Contains("" |
| | | + w.MaterialName |
| | | )); |
| | | if (existDBItem2 != null) |
| | | { |
| | | var wmsMaterial = existExcelItem2.Adapt<WmsMaterial>(); |
| | | var item = existExcelItem.Adapt<WmsMaterial>(); |
| | | throw Oops.Oh($"系统中,物料编号[{item.MaterialName}]已存在"); |
| | | } |
| | | } |
| | | |
| | | #endregion |