Exemple #1
0
        /// <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>());
            }
        }
Exemple #2
0
        /// <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));
            }
        }
Exemple #3
0
        /// <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));
            }
        }
Exemple #4
0
        /// <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);
            }
        }
Exemple #5
0
        /// <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>));
            }
        }
Exemple #6
0
        /// <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));
            }
        }
Exemple #7
0
        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);
            }
        }
Exemple #8
0
        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);
        }
Exemple #9
0
        /// <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));
            }
        }