| | |
| | | using System.Web; |
| | | using System.ComponentModel; |
| | | using System.Data; |
| | | using Microsoft.CodeAnalysis; |
| | | namespace Admin.NET.Application |
| | | { |
| | | /// <summary> |
| | |
| | | private readonly ISysExcelTemplateService _sysExcelTemplateService; |
| | | private readonly static object _lock = new(); |
| | | private readonly IRepository<WmsMaterialCustomer, MasterDbContextLocator> _wmsMaterialCustomerRep; |
| | | private readonly IRepository<BaseCustomer, MasterDbContextLocator> _baseCustomerRep; |
| | | private readonly IRepository<WmsSubstituteGood, MasterDbContextLocator> _wmsSubstituteGoodRep; |
| | | private readonly IRepository<WmsControlRuleDetail, MasterDbContextLocator> _wmsControlRuleDetailRep; |
| | | private readonly IRepository<WmsMaterialType, MasterDbContextLocator> _wmsMaterialTypeRep; |
| | | private readonly IRepository<WmsUnit, MasterDbContextLocator> _wmsUnitRep; |
| | | public WmsMaterialService( |
| | | IRepository<WmsMaterial,MasterDbContextLocator> wmsMaterialRep |
| | | ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep |
| | | ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep |
| | | ,ISysExcelTemplateService sysExcelTemplateService |
| | | , IRepository<WmsMaterialCustomer, MasterDbContextLocator> wmsMaterialCustomerRep |
| | | , IRepository<BaseCustomer, MasterDbContextLocator> baseCustomerRep |
| | | , IRepository<WmsSubstituteGood, MasterDbContextLocator> wmsSubstituteGoodRep |
| | | , IRepository<WmsControlRuleDetail, MasterDbContextLocator> wmsControlRuleDetailRep |
| | | , IRepository<WmsMaterialType, MasterDbContextLocator> wmsMaterialTypeRep |
| | | , IRepository<WmsUnit, MasterDbContextLocator> wmsUnitRep |
| | | ) |
| | | { |
| | | _wmsMaterialRep = wmsMaterialRep; |
| | |
| | | _sysDictDataRep = sysDictDataRep; |
| | | _sysExcelTemplateService = sysExcelTemplateService; |
| | | _wmsMaterialCustomerRep = wmsMaterialCustomerRep; |
| | | _baseCustomerRep = baseCustomerRep; |
| | | _wmsSubstituteGoodRep = wmsSubstituteGoodRep; |
| | | _wmsControlRuleDetailRep = wmsControlRuleDetailRep; |
| | | _wmsMaterialTypeRep = wmsMaterialTypeRep; |
| | | _wmsUnitRep = wmsUnitRep; |
| | | } |
| | | /// <summary> |
| | | /// 分页查询物料信息 |
| | |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | [HttpGet("WmsMaterial/detail")] |
| | | public async Task<WmsMaterialOutput> Get([FromQuery] QueryeWmsMaterialInput input) |
| | | public async Task<WmsMaterialInfoOutput> Get([FromQuery] QueryeWmsMaterialInput input) |
| | | { |
| | | return (await _wmsMaterialRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsMaterialOutput>(); |
| | | WmsMaterialInfoOutput resultInfo = new WmsMaterialInfoOutput(); |
| | | //获取物料信息 |
| | | var wmsMaterialInfo =(await _wmsMaterialRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsMaterialOutput>(); |
| | | //获取替换物料信息 |
| | | var wmsSubstituteGoods = await _wmsSubstituteGoodRep.DetachedEntities |
| | | .Where(u => u.MaterialCode == wmsMaterialInfo.MaterialName) |
| | | .Where(u => u.IsDeleted == false) |
| | | .Where(u => u.IsDisabled == false) |
| | | .OrderBy(o => o.CreatedTime) |
| | | .ProjectToType<WmsSubstituteGoodOutput>() |
| | | .ToListAsync(); |
| | | //获取控制属性规则 |
| | | var wmsControlRuleDetails = await _wmsControlRuleDetailRep.DetachedEntities |
| | | .Where(u => u.Id == wmsMaterialInfo.ControlRuleId) |
| | | .Where(u => u.IsDeleted == false) |
| | | .Where(u => u.IsDisabled == false) |
| | | .OrderBy(o=>o.CreatedTime) |
| | | .ProjectToType<WmsControlRuleDetailOutput>() |
| | | .ToListAsync(); |
| | | |
| | | //根据物料客户关联表获取往来信息 |
| | | var baseCustomers = await _baseCustomerRep.DetachedEntities.Join(_wmsMaterialCustomerRep.DetachedEntities, bc => bc.Id, mc => mc.CustId, (bc, mc) => new { bc, mc }) |
| | | .Where(p =>p.mc.MaterialId== wmsMaterialInfo.Id) |
| | | .OrderBy(o => o.mc.CreatedTime) |
| | | .ProjectToType<BaseCustomerOutput>() |
| | | .ToListAsync(); |
| | | |
| | | resultInfo.MaterialInfo = wmsMaterialInfo; |
| | | resultInfo.SubstituteGoodList = wmsSubstituteGoods; |
| | | resultInfo.ControlRuleDetailList = wmsControlRuleDetails; |
| | | return resultInfo; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | //控制规则信息 |
| | | var controlRuleld = input.ControlRuleld; |
| | | wmsMaterial.ControlRuleId = controlRuleld; |
| | | |
| | | //获取物料类型 |
| | | var wmsMaterialType = (await _wmsMaterialTypeRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == wmsMaterial.MaterialType)).Adapt<WmsMaterialTypeOutput>(); |
| | | if(wmsMaterialType==null) throw Oops.Oh($"ID{wmsMaterial.MaterialType}物料类型不存在"); |
| | | |
| | | //客户档案信息 |
| | | wmsMaterial.MaterialTypeName = wmsMaterialType.MaterialTypeName; |
| | | |
| | | //往来关系信息 |
| | | var baseCustomerList = input.BaseCustomerList.Adapt<List<BaseCustomer>>(); |
| | | //物料客户关联关系 |
| | | var materialCustomerList=new List<WmsMaterialCustomer>(); |
| | | foreach (var baseCustomer in baseCustomerList) |
| | | { |
| | | |
| | | var _custCode= await SerialUtil.GetSerial(EnumSerialType.客户编号); |
| | | materialCustomerList.Add(new WmsMaterialCustomer() |
| | | { |
| | | CreatedTime = DateTime.Now, |
| | | CreatedUserId = CurrentUserInfo.UserId, |
| | | CreatedUserName = CurrentUserInfo.Name, |
| | | CustChinaName = baseCustomer.CustChinaName, |
| | | CustCode = baseCustomer.CustCode, |
| | | CustCode = _custCode, |
| | | CustEnglishName = baseCustomer.CustEnglishName, |
| | | CustId = baseCustomer.Id, |
| | | MaterialCode = wmsMaterial.MaterialCode, |
| | |
| | | |
| | | //替代品信息 |
| | | var substituteGoodList = input.SubstituteGoodList.Adapt<List<WmsSubstituteGood>>(); |
| | | List<string> materialCodes = substituteGoodList.Select(s => s.SubstituteMaterialCode).ToList(); |
| | | var wmsSubstituteMaterialInfoList = await _wmsMaterialRep.DetachedEntities.Where(u => materialCodes.Contains(u.MaterialCode)&&u.IsDeleted==false&&u.IsDisabled==false).ProjectToType<WmsMaterialOutput>().ToListAsync(); |
| | | foreach (var item in substituteGoodList) |
| | | { |
| | | var substituteMaterialInfo = wmsSubstituteMaterialInfoList.FirstOrDefault(f=>f.MaterialCode== item.SubstituteMaterialCode); |
| | | item.SubstituteCode = await SerialUtil.GetSerial(EnumSerialType.替代品编号); |
| | | item.SubstituteMaterialName = substituteMaterialInfo.MaterialName;//替代品物料名称 |
| | | } |
| | | |
| | | wmsMaterial.CreatedUserId = wmsMaterial.UpdatedUserId = SysHelper.GetUserId(); |
| | | wmsMaterial.CreatedUserName = wmsMaterial.UpdatedUserName = SysHelper.GetUserName(); |
| | | wmsMaterial.CreatedTime = wmsMaterial.UpdatedTime = SysHelper.GetNowTime(); |
| | | wmsMaterial.UpdatedUserId = SysHelper.GetUserId(); |
| | | wmsMaterial.UpdatedUserName = SysHelper.GetUserName(); |
| | | wmsMaterial.UpdatedTime = SysHelper.GetNowTime(); |
| | | |
| | | |
| | | await _wmsMaterialRep.InsertAsync(wmsMaterial); |
| | |
| | | /// <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); |
| | | |
| | | //控制规则信息 |
| | | var controlRuleld = input.ControlRuleld; |
| | | wmsMaterial.ControlRuleId = controlRuleld; |
| | | //获取物料类型 |
| | | var wmsMaterialType = (await _wmsMaterialTypeRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == wmsMaterial.MaterialType)).Adapt<WmsMaterialTypeOutput>(); |
| | | if (wmsMaterialType == null) throw Oops.Oh($"ID{wmsMaterial.MaterialType}物料类型不存在"); |
| | | |
| | | wmsMaterial.MaterialTypeName = wmsMaterialType.MaterialTypeName; |
| | | |
| | | //删除物料客户关联关系 |
| | | 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) |
| | | { |
| | | var _custCode = await SerialUtil.GetSerial(EnumSerialType.客户编号); |
| | | materialCustomerList.Add(new WmsMaterialCustomer() |
| | | { |
| | | CreatedTime = DateTime.Now, |
| | | CreatedUserId = CurrentUserInfo.UserId, |
| | | CreatedUserName = CurrentUserInfo.Name, |
| | | CustChinaName = baseCustomer.CustChinaName, |
| | | CustCode = _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>>(); |
| | | List<string> materialCodes = substituteGoodList.Select(s => s.SubstituteMaterialCode).ToList(); |
| | | var wmsSubstituteMaterialInfoList = await _wmsMaterialRep.DetachedEntities.Where(u => materialCodes.Contains(u.MaterialCode) && u.IsDeleted == false && u.IsDisabled == false).ProjectToType<WmsMaterialOutput>().ToListAsync(); |
| | | foreach (var item in substituteGoodList) |
| | | { |
| | | var substituteMaterialInfo = wmsSubstituteMaterialInfoList.FirstOrDefault(f => f.MaterialCode == item.SubstituteMaterialCode); |
| | | item.SubstituteCode = await SerialUtil.GetSerial(EnumSerialType.替代品编号); |
| | | item.SubstituteMaterialName = substituteMaterialInfo.MaterialName;//替代品物料名称 |
| | | } |
| | | |
| | | |
| | | 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); |
| | | |
| | | |
| | | } |
| | | |
| | | #endregion |
| | |
| | | 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 = "";//默认入库库位 |
| | |
| | | _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(); |
| | |
| | | { |
| | | 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 (!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; |
| | | } |
| | | |
| | | //TODO 根据物料类型ID获取物料类型 |
| | | addItem.MaterialType = 0; |
| | | addItem.MaterialTypeName = ""; |
| | | } |
| | | 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 (!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("否")) |
| | |
| | | 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); |
| | | } |
| | | |
| | |
| | | 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 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 |