payne
2024-04-26 472ae45885f426cb92db6185dd3c6bf377004fab
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/WmsMaterialService.cs
@@ -191,16 +191,26 @@
                                              .ProjectToType<WmsControlRuleDetailOutput>()
                                              .ToListAsync();
            //物料客户关联
            var wmsMaterialCustomerList = await _wmsMaterialCustomerRep.DetachedEntities
                                              .Where(u => u.MaterialId == wmsMaterialInfo.Id)
                                              .Where(u => u.IsDeleted == false)
                                              .OrderBy(o => o.CreatedTime)
                                              .ProjectToType<WmsMaterialCustomerOutput>()
                                              .ToListAsync();
            List<long> custIds = wmsMaterialCustomerList.Select(s => s.CustId).ToList();
            //根据物料客户关联表获取往来信息
            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)
            var baseCustomers = await _baseCustomerRep.DetachedEntities
                                      .Where(p => custIds.Contains(p.Id))
                                      .OrderBy(o => o.CreatedTime)
                                      .ProjectToType<BaseCustomerOutput>()
                                      .ToListAsync();
            resultInfo.MaterialInfo = wmsMaterialInfo;
            resultInfo.SubstituteGoodList = wmsSubstituteGoods;
            resultInfo.ControlRuleDetailList = wmsControlRuleDetails;
            resultInfo.BaseCustomerList = baseCustomers;
            return resultInfo;
        }
@@ -235,48 +245,76 @@
            wmsMaterial.ControlRuleId = controlRuleld;
            
            //获取物料类型
            var wmsMaterialType = (await _wmsMaterialTypeRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == wmsMaterial.MaterialType)).Adapt<WmsMaterialTypeOutput>();
            var wmsMaterialType = (await _wmsMaterialTypeRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == wmsMaterial.MaterialType && u.IsDeleted == false)).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)
            wmsMaterial.MaterialTypeName = wmsMaterialType.MaterialTypeName;
            var materialCustomerList = new List<WmsMaterialCustomer>();
            if (input.BaseCustomerList?.Count > 0)
            {
                materialCustomerList.Add(new WmsMaterialCustomer()
                //往来单位
               var   wmsBaseCustomerList = await _baseCustomerRep.DetachedEntities.Where(u => input.BaseCustomerList.Contains(u.Id) && u.IsDeleted == false).ProjectToType<BaseCustomerOutput>().ToListAsync();
                if (wmsBaseCustomerList?.Count() <= 0)
                {
                    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
                });
                    throw Oops.Oh($"往来单位不存在");
                }
                //物料客户关联关系
                 materialCustomerList = new List<WmsMaterialCustomer>();
                foreach (var baseCustomer in wmsBaseCustomerList)
                {
                    if (baseCustomer.IsDisabled == true)
                    {
                        throw Oops.Oh($"不能使用已禁用的往来单位");
                    }
                    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);
            //替代品信息
            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)
            if (materialCodes?.Count > 0)
            {
                var substituteMaterialInfo = wmsSubstituteMaterialInfoList.FirstOrDefault(f=>f.MaterialCode== item.SubstituteMaterialCode);
                item.SubstituteCode =  await SerialUtil.GetSerial(EnumSerialType.替代品编号);
                item.SubstituteMaterialName = substituteMaterialInfo.MaterialName;//替代品物料名称
                var wmsSubstituteMaterialInfoList = await _wmsMaterialRep.DetachedEntities.Where(u => materialCodes.Contains(u.MaterialCode) && u.IsDeleted == false).ProjectToType<WmsMaterialOutput>().ToListAsync();
                if (wmsSubstituteMaterialInfoList?.Count <= 0)
                {
                    throw Oops.Oh($"替代品物料不存在");
                }
                foreach (var item in substituteGoodList)
                {
                    if (item.IsDisabled == true)
                    {
                        throw Oops.Oh($"不能使用已禁用的替代品物料");
                    }
                    var substituteMaterialInfo = wmsSubstituteMaterialInfoList.FirstOrDefault(f => f.MaterialCode == item.SubstituteMaterialCode);
                    item.SubstituteCode = await SerialUtil.GetSerial(EnumSerialType.替代品编号);
                    item.SubstituteMaterialName = substituteMaterialInfo.MaterialName;//替代品物料名称
                }
            }
            wmsMaterial.UpdatedUserId = SysHelper.GetUserId();
            wmsMaterial.UpdatedUserName = SysHelper.GetUserName();
@@ -327,7 +365,7 @@
            var controlRuleld = input.ControlRuleld;
            wmsMaterial.ControlRuleId = controlRuleld;
            //获取物料类型
            var wmsMaterialType = (await _wmsMaterialTypeRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == wmsMaterial.MaterialType)).Adapt<WmsMaterialTypeOutput>();
            var wmsMaterialType = (await _wmsMaterialTypeRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == wmsMaterial.MaterialType && u.IsDeleted == false)).Adapt<WmsMaterialTypeOutput>();
            if (wmsMaterialType == null) throw Oops.Oh($"ID{wmsMaterial.MaterialType}物料类型不存在");
            wmsMaterial.MaterialTypeName = wmsMaterialType.MaterialTypeName;
@@ -339,31 +377,44 @@
                await _wmsMaterialCustomerRep.DeleteAsync(oldaterialCustomerList);
            }
            //往来关系信息
            var baseCustomerList = input.BaseCustomerList.Adapt<List<BaseCustomer>>();
            //物料客户关联关系
            var materialCustomerList = new List<WmsMaterialCustomer>();
            foreach (var baseCustomer in baseCustomerList)
            if (input.BaseCustomerList?.Count > 0)
            {
                materialCustomerList.Add(new WmsMaterialCustomer()
                //往来单位
                var wmsBaseCustomerList = await _baseCustomerRep.DetachedEntities.Where(u => input.BaseCustomerList.Contains(u.Id) && u.IsDeleted == false).ProjectToType<BaseCustomerOutput>().ToListAsync();
                if (wmsBaseCustomerList?.Count() <= 0)
                {
                    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
                    throw Oops.Oh($"往来单位不存在");
                }
                });
                //物料客户关联关系
                 materialCustomerList = new List<WmsMaterialCustomer>();
                foreach (var baseCustomer in wmsBaseCustomerList)
                {
                    if (baseCustomer.IsDisabled == true)
                    {
                        throw Oops.Oh($"不能使用已禁用的往来单位");
                    }
                    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();
@@ -376,15 +427,27 @@
            //替代品信息
            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)
            if(materialCodes?.Count > 0)
            {
                var substituteMaterialInfo = wmsSubstituteMaterialInfoList.FirstOrDefault(f => f.MaterialCode == item.SubstituteMaterialCode);
                item.SubstituteCode = await SerialUtil.GetSerial(EnumSerialType.替代品编号);
                item.SubstituteMaterialName = substituteMaterialInfo.MaterialName;//替代品物料名称
                var wmsSubstituteMaterialInfoList = await _wmsMaterialRep.DetachedEntities.Where(u => materialCodes.Contains(u.MaterialCode) && u.IsDeleted == false).ProjectToType<WmsMaterialOutput>().ToListAsync();
                if (wmsSubstituteMaterialInfoList?.Count <= 0)
                {
                    throw Oops.Oh($"替代品物料不存在");
                }
                foreach (var item in substituteGoodList)
                {
                    if (item.IsDisabled == true)
                    {
                        throw Oops.Oh($"不能使用已禁用的替代品物料");
                    }
                    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);