/// <summary> /// </summary> /// <param name="pegPart"/> /// <param name="isRun"/> /// <param name="handled"/> /// <param name="prevReturnValue"/> /// <returns/> public List <object> GET_PART_CHANGE_INFOS0(Mozart.SeePlan.Pegging.PegPart pegPart, bool isRun, ref bool handled, List <object> prevReturnValue) { try { MicronBEAssyBEStep currentStep = pegPart.CurrentStep as MicronBEAssyBEStep; MicronBEAssyBEPegPart pp = pegPart as MicronBEAssyBEPegPart; List <object> list = new List <object>(); if (isRun) { if (pp.Product is AssyMcpProduct) { AssyMcpProduct mcpProduct = pp.Product as AssyMcpProduct; string stepID = string.Empty; if (mcpProduct.HasPrevs && mcpProduct.Prevs.ElementAt(0) is AssyMcpPart) { stepID = (mcpProduct.Prevs.ElementAt(0) as AssyMcpPart).PartChangeStep; } if (stepID == currentStep.StepID) { list.AddRange(mcpProduct.Prevs); } } else if (pp.Product is AssyMcpPart) { #if DEBUG if (currentStep.StepID == "DIE ATTACH") { Console.WriteLine(); } #endif AssyMcpPart mcpPart = pp.Product as AssyMcpPart; if (mcpPart.IsMidPart) { string stepID = string.Empty; if (mcpPart.HasPrevs && mcpPart.Prevs.ElementAt(0) is AssyMcpPart) { stepID = (mcpPart.Prevs.ElementAt(0) as AssyMcpPart).PartChangeStep; } if (stepID == currentStep.StepID) { list.AddRange(mcpPart.Prevs); } } } } return(list); } catch (Exception e) { WriteHelper.WriteErrorHistory(ErrorLevel.FATAL, string.Format("ErrorMessage : {0} MethodName : {1}", e.Message, System.Reflection.MethodInfo.GetCurrentMethod().Name)); return(new List <object>()); } }
/// <summary> /// </summary> /// <param name="hb"/> /// <param name="handled"/> /// <param name="prevReturnValue"/> /// <returns/> public WorkStep ADD_WORK_LOT0(IHandlingBatch hb, ref bool handled, WorkStep prevReturnValue) { try { MicronBEAssyBELot lot = hb as MicronBEAssyBELot; AssyMcpPart mcpPart = lot.Product as AssyMcpPart; if (mcpPart != null && mcpPart.IsBase == false) { return(null); } var agentInitControl = ServiceLocator.Resolve <JobChangeInit>(); var wagentName = agentInitControl.GetWorkAgentName(hb); if (string.IsNullOrEmpty(wagentName)) { return(null); } var wmanager = AoFactory.Current.JobChangeManger; var wagent = wmanager.GetAgent(wagentName); if (wagent == null) { return(null); } var wgroupKey = agentInitControl.GetWorkGroupKey(hb, wagent); if (wgroupKey == null) { return(null); } var wgroup = wagent.GetGroup(wgroupKey); var wstepKey = agentInitControl.GetWorkStepKey(hb, wgroup); if (wstepKey == null) { return(null); } var targetStep = agentInitControl.GetTargetStep(hb, wgroup, wstepKey); if (targetStep == null) { return(null); } var wstep = wgroup.GetStep(wstepKey, targetStep); var availableTime = agentInitControl.GetAvailableTime(hb, wstep, targetStep); MicronBEAssyWorkLot wlot = CreateHelper.CreateWorkLot(hb, availableTime, wstepKey, targetStep, lot.ReservationEqp); wstep.AddWip(wlot); return(wstep); } catch (Exception e) { WriteHelper.WriteErrorHistory(ErrorLevel.FATAL, string.Format("ErrorMessage : {0} MethodName : {1}", e.Message, System.Reflection.MethodInfo.GetCurrentMethod().Name)); return(default(WorkStep)); } }
/// <summary> /// </summary> /// <param name="da"/> /// <param name="hb"/> /// <param name="handled"/> /// <param name="prevReturnValue"/> /// <returns/> public bool INTERCEPT_IN0(DispatchingAgent da, IHandlingBatch hb, ref bool handled, bool prevReturnValue) { try { MicronBEAssyBEStep currentStep = hb.CurrentStep as MicronBEAssyBEStep; MicronBEAssyBELot lot = hb as MicronBEAssyBELot; if (lot.Product is AssyMcpPart) { AssyMcpPart mcpPart = lot.Product as AssyMcpPart; AssyMcpProduct mcpProduct = mcpPart.FinalProduct as AssyMcpProduct; if (mcpPart.PartChangeStep == lot.CurrentStepID) { Tuple <AssyMcpProduct, AssyMcpPart> baseKey = null; Tuple <AssyMcpProduct, AssyMcpPart> sourceKey = null; AssyMcpPart mergeMcpPart = McpHelper.GetMergeMcpPart(mcpPart); if (mcpPart.IsBase) { baseKey = Tuple.Create(mcpProduct, mcpPart); sourceKey = Tuple.Create(mcpProduct, mergeMcpPart); InputMart.Instance.MatchingLotList.Add(baseKey, lot); } else { baseKey = Tuple.Create(mcpProduct, mergeMcpPart); sourceKey = Tuple.Create(mcpProduct, mcpPart); InputMart.Instance.MatchingLotList.Add(sourceKey, lot); } List <MicronBEAssyBELot> matchLotList = SimulationHelper.MatchingMcpLot(da, baseKey, sourceKey); foreach (MicronBEAssyBELot matchLot in matchLotList) { da.ReEnter(matchLot); } return(true); } } return(false); } catch (Exception e) { WriteHelper.WriteErrorHistory(ErrorLevel.FATAL, string.Format("ErrorMessage : {0} MethodName : {1}", e.Message, System.Reflection.MethodInfo.GetCurrentMethod().Name)); return(default(bool)); } }
/// <summary> /// </summary> /// <param name="pegPart"/> /// <param name="partChangeInfo"/> /// <param name="isRun"/> /// <param name="handled"/> /// <param name="prevReturnValue"/> /// <returns/> public PegPart APPLY_PART_CHANGE_INFO0(PegPart pegPart, object partChangeInfo, bool isRun, ref bool handled, PegPart prevReturnValue) { try { MicronBEAssyBEPegPart pp = pegPart as MicronBEAssyBEPegPart; pp.Product = partChangeInfo as Product; #if DEBUG if (pp.Product.ProductID == "328622") { Console.WriteLine(); } #endif AssyMcpPart mcpPart = pp.Product as AssyMcpPart; BEStep step = null; if (mcpPart.FinalProduct == null) { return(pegPart); } if (mcpPart.FinalProduct.MaxSequence == 1 || mcpPart.IsMidPart) { step = pp.Product.Process.FindStep(pp.CurrentStep.StepID); } else { step = pp.Product.Process.LastStep; } pp.CurrentStep = step; if (mcpPart.IsMidPart == false) { foreach (PegTarget target in pp.PegTargetList) { target.Qty = target.Qty * mcpPart.CompQty; } } return(pp); } catch (Exception e) { WriteHelper.WriteErrorHistory(ErrorLevel.FATAL, string.Format("ErrorMessage : {0} MethodName : {1}", e.Message, System.Reflection.MethodInfo.GetCurrentMethod().Name)); return(pegPart); } }
/// <summary> /// </summary> /// <param name="weqp"/> /// <param name="wstep"/> /// <param name="list"/> /// <param name="handled"/> /// <param name="prevReturnValue"/> /// <returns/> public List <WorkLot> DO_FILTER_LOT0(WorkEqp weqp, WorkStep wstep, List <WorkLot> list, ref bool handled, List <WorkLot> prevReturnValue) { try { #if DEBUG if (weqp.Target.EqpID == "DA03" && wstep.Key.ToString() == "S0100") { Console.WriteLine(); } #endif MicronBEAssyWorkStep ws = wstep as MicronBEAssyWorkStep; List <WorkLot> lotList = new List <WorkLot>(); foreach (MicronBEAssyWorkLot lot in list) { AssyMcpPart mcpPart = lot.Product as AssyMcpPart; if (mcpPart != null && mcpPart.IsBase == false) { continue; } MicronBEAssyBELot beLot = lot.Batch as MicronBEAssyBELot; if (lot.ReservationEqp != null && lot.ReservationEqp != weqp.Target) { continue; } lotList.Add(lot); } if (lotList.IsNullOrEmpty()) { weqp.Stop = true; } return(lotList); } catch (Exception e) { WriteHelper.WriteErrorHistory(ErrorLevel.FATAL, string.Format("ErrorMessage : {0} MethodName : {1}", e.Message, System.Reflection.MethodInfo.GetCurrentMethod().Name)); return(default(List <WorkLot>)); } }
/// <summary> /// </summary> /// <param name="pegPart"/> /// <returns/> public PegPart UPDATE_TARGET_INFO(PegPart pegPart) { try { MicronBEAssyBEPegPart pp = pegPart as MicronBEAssyBEPegPart; BEStep step = pp.Product.Process.FindStep(pp.CurrentStep.StepID); if (pp.Product is AssyMcpPart) { AssyMcpPart mcpPart = pp.Product as AssyMcpPart; } return(pp); } catch (Exception e) { WriteHelper.WriteErrorHistory(ErrorLevel.FATAL, string.Format("ErrorMessage : {0} MethodName : {1}", e.Message, System.Reflection.MethodInfo.GetCurrentMethod().Name)); return(default(PegPart)); } }
public static AssyMcpProduct GetAssyOutProduct(this Product product) { try { AssyMcpProduct aoProd = null; if (product is AssyMcpPart) { AssyMcpPart part = product as AssyMcpPart; aoProd = part.FinalProduct; } if (product is AssyMcpProduct) { AssyMcpProduct prod = product as AssyMcpProduct; aoProd = prod; } return(aoProd); } catch (Exception e) { WriteHelper.WriteErrorHistory(ErrorLevel.FATAL, string.Format("ErrorMessage : {0} MethodName : {1}", e.Message, System.Reflection.MethodInfo.GetCurrentMethod().Name)); return(null); } }
internal static Product FindWipProduct(Wip entity, MicronBEAssyProcess process, MicronBEAssyBEStep step, Mozart.SeePlan.Simulation.EntityState state, out string unpegReason) { Product product = null; unpegReason = string.Empty; #if DEBUG if (entity.PRODUCT_ID == "264153") { Console.WriteLine(); } if (entity.PRODUCT_ID == "264157") { Console.WriteLine(); } #endif int daThroughtCnt = step.DaThroughCount; if (step.StepGroup == Constants.DieAttach && state != EntityState.RUN) { daThroughtCnt = daThroughtCnt - 1;//DA 대기중인 재공은 DA를 진행하지 않은 상태로 판단 } Product wipProduct = FindHelper.FindProduct(entity.LINE_ID, entity.PRODUCT_ID); if (wipProduct is MicronBEAssyProduct) { product = wipProduct; } else if (wipProduct != null && wipProduct is AssyMcpProduct && daThroughtCnt >= 1) { AssyMcpProduct mcpProduct = wipProduct as AssyMcpProduct; if (daThroughtCnt == mcpProduct.MaxSequence) { product = mcpProduct; } else { AssyMcpPart midPart = FindHelper.FindProduct(entity.LINE_ID, entity.PRODUCT_ID, true, true, daThroughtCnt) as AssyMcpPart; if (midPart != null) { product = midPart; } #if DEBUG if (midPart == null) { Console.WriteLine(); } #endif } } else { //임시로직 - 로직이 정해지먼 재정의 해야함. //초기화시 CompSeq가 확정된 Part를 찾을 수 없기 때문에 대표로 Part를 하나 찾아서 정의를 해야함. ICollection <AssyMcpPart> products = FindHelper.FindAssyInParts(entity.LINE_ID, entity.PRODUCT_ID); if (products != null && products.Count > 0) { product = products.ElementAt(0); } } if (product == null) { if (step.StepID == Constants.LOTSRECEIVED) { unpegReason = "Cannot find McpBom or ProductRoute"; } else { unpegReason = "Cannot find McpBom"; } } return(product); }
/// <summary> /// </summary> /// <param name="context"/> public void OnAction_McpBom(IPersistContext context) { try { HashSet <AssyMcpProduct> mcpProductList = new HashSet <AssyMcpProduct>(); InputMart.Instance.McpBom.DefaultView.Sort = "COMP_SEQ"; foreach (McpBom bom in InputMart.Instance.McpBom.DefaultView) { #if DEBUG if (bom.FINAL_PROD_ID == "357937") { Console.WriteLine(); } #endif Tuple <string, string, bool, bool, int> key = new Tuple <string, string, bool, bool, int>(bom.LINE_ID, bom.FINAL_PROD_ID, false, false, 1); AssyMcpProduct mcpProduct = FindHelper.FindProduct(bom.LINE_ID, bom.FINAL_PROD_ID) as AssyMcpProduct; if (mcpProduct == null) { continue; } mcpProductList.Add(mcpProduct); AssyMcpPart inMcpPart = FindHelper.FindProduct(bom.LINE_ID, bom.ASSY_IN_PROD_ID, true, false, bom.COMP_SEQ) as AssyMcpPart; if (inMcpPart == null) { continue; } AssyMcpPart fromMcpPart = null; if (bom.FROM_PROD_ID == bom.ASSY_IN_PROD_ID && bom.COMP_SEQ == 1) { fromMcpPart = null; } else { fromMcpPart = FindHelper.FindProduct(bom.LINE_ID, bom.FROM_PROD_ID, true, true, bom.COMP_SEQ - 1) as AssyMcpPart; if (fromMcpPart == null) { continue; } fromMcpPart.PartChangeStep = bom.STEP_ID; } #if DEBUG try { if (mcpProduct.MaxSequence > bom.COMP_QTY) { Console.WriteLine(); } } catch { Console.WriteLine(); } #endif if (mcpProduct.MaxSequence > bom.COMP_SEQ) { AssyMcpPart toMcpPart = FindHelper.FindProduct(bom.LINE_ID, bom.TO_PROD_ID, true, true, bom.COMP_SEQ) as AssyMcpPart; if (toMcpPart == null) { ProductDetail midProductDetail = FindHelper.FindProductDetail(bom.LINE_ID, bom.TO_PROD_ID); if (midProductDetail == null) { continue; } Tuple <string, string, bool, bool, int> midKey = new Tuple <string, string, bool, bool, int>(bom.LINE_ID, bom.TO_PROD_ID, true, true, bom.COMP_SEQ); if (InputMart.Instance.MicronBEProducts.ContainsKey(midKey) == false) { toMcpPart = NewHelper.NewAssyMcpPart(bom.LINE_ID, bom.TO_PROD_ID, mcpProduct, true, bom.COMP_SEQ, 1, midProductDetail); InputMart.Instance.MicronBEProducts.Add(midKey, toMcpPart); toMcpPart.AddPrev(inMcpPart); inMcpPart.AddNext(toMcpPart); if (fromMcpPart != null) { fromMcpPart.AddNext(toMcpPart); toMcpPart.AddPrev(fromMcpPart); } mcpProduct.AllParts.Add(toMcpPart); } } } else { if (fromMcpPart != null) { mcpProduct.AddPrev(fromMcpPart); } mcpProduct.AddPrev(inMcpPart); } } foreach (AssyMcpProduct mcpProduct in mcpProductList) { foreach (AssyMcpPart mcpPart in mcpProduct.AllParts) { if (mcpPart.IsMidPart || mcpPart.CompSeq == 1) { mcpPart.IsBase = true; } } } } catch (Exception e) { WriteHelper.WriteErrorHistory(ErrorLevel.FATAL, string.Format("ErrorMessage : {0} MethodName : {1}", e.Message, System.Reflection.MethodInfo.GetCurrentMethod().Name)); } }