private void MatchHutoMapping(IEnumerable<HuToMapping> huToMappingList, MrpMiPlan mrpMiPlan) { //胶料没有匹配上,只匹配胶料为空的来源组织 var itemHuToMappings = huToMappingList.Where(p => string.IsNullOrWhiteSpace(p.Item)); //匹配路线 var sourceFlowHuToMapping = itemHuToMappings.Where(p => p.Flow == mrpMiPlan.SourceFlow).FirstOrDefault(); if (sourceFlowHuToMapping != null) { //找到匹配路线返回 mrpMiPlan.HuTo = sourceFlowHuToMapping.HuTo; } else { //没有匹配上路线,就匹配路线路线为空的 sourceFlowHuToMapping = itemHuToMappings.Where(p => string.IsNullOrWhiteSpace(p.Flow)).FirstOrDefault(); if (sourceFlowHuToMapping != null) { //找到匹配路线为空的返回 mrpMiPlan.HuTo = sourceFlowHuToMapping.HuTo; } else { //没有找到,返回默认 } } }
public JsonResult _WebMrpMiPlan(string flow, string itemCode) { if (!string.IsNullOrEmpty(flow) && !string.IsNullOrEmpty(itemCode)) { var plan = new MrpMiPlan(); var item = itemMgr.GetCacheItem(itemCode); plan.Item = item.Code; plan.ItemDescription = item.Description; plan.Uom = item.Uom; var flowDetails = genericMgr.FindAll<FlowDetail>("from FlowDetail where Flow = ? and Item = ?", new object[] { flow, itemCode }); if (flowDetails == null || flowDetails.Count() == 0) { SaveErrorMessage(string.Format(Resources.EXT.ControllerLan.Con_TheItemIsNotInFlowNow, item, flow)); return null; } else { plan.UnitCount = (float)flowDetails.First().UnitCount; } return this.Json(plan); } return null; }
public void SetHuTo(IList<HuToMapping> huToMappingList, MrpMiPlan mrpMiPlan) { foreach (var huToMapping in huToMappingList) { if (huToMapping.FgList == null) { if (!string.IsNullOrWhiteSpace(huToMapping.Fg)) { var item = this.itemMgr.GetCacheItem(huToMapping.Fg); //支持断面和车型 if (item.ItemCategory == "MODEL" || item.ItemCategory == "ZHDM") { huToMapping.FgList = this.bomMgr.GetFlatBomDetail(huToMapping.Fg, DateTime.Now).Select(p => p.Item).ToList(); } else { huToMapping.FgList = new List<string>(); huToMapping.FgList.Add(huToMapping.Fg); } } else { huToMapping.FgList = new List<string>(); } } } var sourcePartyHuToMappings = huToMappingList.Where(p => p.Party == mrpMiPlan.SourceParty); //匹配胶料 var itemHuToMappings = sourcePartyHuToMappings.Where(p => p.Item == mrpMiPlan.Item); if (itemHuToMappings != null && itemHuToMappings.Count() > 0) { //匹配来源物料 var parentItemHuToMappings = itemHuToMappings.Where(p => p.FgList.Contains(mrpMiPlan.ParentItem)); if (parentItemHuToMappings != null && parentItemHuToMappings.Count() > 0) { //匹配来源路线 var sourceFlowHuToMapping = parentItemHuToMappings.Where(p => p.Flow == mrpMiPlan.SourceFlow).FirstOrDefault(); if (sourceFlowHuToMapping != null) { //最严格的匹配:匹配了来源路线 mrpMiPlan.HuTo = sourceFlowHuToMapping.HuTo; } else { //没有匹配上来源路线,找来源路线为空的 var flowHuToMapping = parentItemHuToMappings.Where(p => string.IsNullOrWhiteSpace(p.Flow)).FirstOrDefault(); if (flowHuToMapping != null) { //匹配上了来源路线为空的 mrpMiPlan.HuTo = flowHuToMapping.HuTo; } else { //没有匹配上,找上一级的匹配:来源物料为空的 var parentItemHuToMapping = itemHuToMappings.Where(p => p.FgList.Count() == 0).FirstOrDefault(); if (parentItemHuToMapping != null) { //找到为空的物料 就返回 mrpMiPlan.HuTo = parentItemHuToMapping.HuTo; } else { //没有找到取默认的 MatchHutoMapping(sourcePartyHuToMappings, mrpMiPlan); } } } } else { //匹配来源物料为空 var parentItemHuToMapping = itemHuToMappings.Where(p => p.FgList.Count() == 0).FirstOrDefault(); if (parentItemHuToMapping != null) { //找到为空的物料 就返回 mrpMiPlan.HuTo = parentItemHuToMapping.HuTo; } else { //没有找到取默认的 MatchHutoMapping(sourcePartyHuToMappings, mrpMiPlan); } } } else { //没有找到取默认的 MatchHutoMapping(sourcePartyHuToMappings, mrpMiPlan); } }
private IList<MrpMiPlan> GetMrpMiPlanList(int[] Ids, int[] Sequences, string[] Items, string[] HuTos, double[] CurrentQtys) { var planList = genericMgr.FindAllIn<MrpMiPlan> ("from MrpMiPlan where Id in(? ", Ids.Where(p => p > 0).Select(p => (object)p)); for (int i = 0; i < Ids.Length; i++) { if (Ids[i] > 0) { var plan = planList.Single(p => p.Id == Ids[i]); plan.Sequence = Sequences[i]; plan.HuTo = HuTos[i]; plan.CurrentCheQty = CurrentQtys[i]; } else { var newPlan = new MrpMiPlan(); newPlan.Item = Items[i]; var flowDetails = genericMgr.FindAll<FlowDetail>("from FlowDetail where Flow = ? and Item = ?", new object[] { planList.First().ProductLine, newPlan.Item }); if (flowDetails == null || flowDetails.Count() == 0) { throw new BusinessException(string.Format(Resources.EXT.ControllerLan.Con_TheItemIsNotInFlowNow, newPlan.Item, planList.First().ProductLine)); } //newPlan.AdjustQty = 0; newPlan.Bom = string.IsNullOrWhiteSpace(flowDetails.First().Bom) ? newPlan.Item : flowDetails.First().Bom; //newPlan.CheQty = 0; newPlan.UnitCount = (double)flowDetails.First().UnitCount; newPlan.InvQty = 0; newPlan.LocationFrom = flowDetails.First().LocationFrom; newPlan.LocationTo = flowDetails.First().LocationTo; if (string.IsNullOrWhiteSpace(newPlan.LocationFrom) || string.IsNullOrWhiteSpace(newPlan.LocationTo)) { var flowMaster = this.genericMgr.FindById<FlowMaster>(flowDetails.First().Flow); if (string.IsNullOrWhiteSpace(newPlan.LocationFrom)) { newPlan.LocationFrom = flowMaster.LocationFrom; } if (string.IsNullOrWhiteSpace(newPlan.LocationTo)) { newPlan.LocationTo = flowMaster.LocationTo; } } newPlan.MaxStock = (double)flowDetails.First().MaxStock; newPlan.MrpPriority = flowDetails.First().MrpPriority; //newPlan.ParentItem = null; newPlan.PlanDate = planList.First().PlanDate; newPlan.PlanVersion = planList.First().PlanVersion; newPlan.ProductLine = planList.First().ProductLine; //newPlan.Qty =0; newPlan.SafeStock = (double)flowDetails.First().SafeStock; //newPlan.Sequence = flowDetails.First().Sequence; newPlan.Uom = flowDetails.First().Uom; newPlan.WorkHour = itemMgr.GetCacheItem(newPlan.Item).WorkHour; newPlan.Sequence = Sequences[i]; newPlan.HuTo = HuTos[i]; newPlan.CurrentCheQty = CurrentQtys[i]; planList.Add(newPlan); } } return planList; }