private void RecursivelyConstructHierarchicalBOM(IBOMNode node, ModelBOM modelBom, IList<IBOMNode> allNodes, IList<ModelBOM> allModelBom, int iDeepLimit, int level, IDictionary<int, IList<IPart>> allPartList) { IList<ModelBOM> rootChildren = allModelBom.Where(x => x.Level == level && x.Material == modelBom.Component && x.Flag == 1).ToList(); if (rootChildren != null && rootChildren.Count > 0) { if (iDeepLimit == 0) { throw new FisException("BOML01", new string[] { "", "" }); } IList<IPart> nodePartList = null; if (allPartList.ContainsKey(level)) { nodePartList = allPartList[level]; } else { var partNoList = allModelBom.Where(x => x.Level == level && x.Flag == 1).Select(x => x.Component).Distinct().ToList(); nodePartList = PrtRepository.FindPart(partNoList); allPartList.Add(level, nodePartList); } foreach (ModelBOM childItem in rootChildren) { //IPart nodePart = PrtRepository.Find(childItem.Component); IPart nodePart = nodePartList.Where(x => x != null && x.PN == childItem.Component).FirstOrDefault(); if (nodePart != null) { IBOMNode newNode = new BOMNode(nodePart, int.Parse(childItem.Quantity), childItem.Alternative_item_group); node.AddChild(newNode); allNodes.Add(newNode); RecursivelyConstructHierarchicalBOM(newNode, childItem, allNodes, allModelBom, iDeepLimit - 1, level + 1, allPartList); } } } }
private void RecursivelyConstructHierarchicalBOM(IBOMNode node, MoBOMInfo peerInfo, IList<IBOMNode> allNodes, int iDeepLimit) { IList<MoBOMInfo> rootChildren = GetChildrenInModelBOM(peerInfo.component); if (rootChildren != null && rootChildren.Count > 0) { if (iDeepLimit == 0) { throw new FisException("BOML01", new string[] { "", "" }); } foreach (MoBOMInfo childItem in rootChildren) { IPart nodePart = PrtRepository.Find(childItem.component); if (nodePart != null) { IBOMNode newNode = new BOMNode(nodePart, int.Parse(childItem.quantity), childItem.alternative_item_group); node.AddChild(newNode); allNodes.Add(newNode); RecursivelyConstructHierarchicalBOM(newNode, childItem, allNodes, iDeepLimit - 1); } } } }