예제 #1
0
        private static void SetWipStayHours(this QTimeInfo info, string lotID, DateTime planStartTime)
        {
            if (info.HasQTime() == false)
            {
                return;
            }

            foreach (var it in info.List)
            {
                string fromStepID = it.FromStep.StepID;
                var    finds      = InputMart.Instance.WipStayHoursDict.FindRows(lotID, fromStepID);
                if (finds == null)
                {
                    continue;
                }

                var find = finds.FirstOrDefault();
                if (find == null)
                {
                    continue;
                }

                DateTime fromStepOutTime = LcdHelper.Min(find.FROM_STEP_OUT_TIME, planStartTime);
                if (fromStepOutTime == DateTime.MinValue)
                {
                    continue;
                }

                it.FromStepOutTime = fromStepOutTime;
            }
        }
예제 #2
0
        public static bool HasMaxQTime(this QTimeInfo info)
        {
            if (info.MaxList != null && info.MaxList.Count > 0)
            {
                return(true);
            }

            return(false);
        }
예제 #3
0
        private static void StepChange_Curr(this QTimeInfo info, FabStep currStep, DateTime now)
        {
            if (info.HasMinQTime())
            {
                info.MinList.ForEach(t => t.StepChange_Curr(currStep, now));
            }

            if (info.HasMaxQTime())
            {
                info.MaxList.ForEach(t => t.StepChange_Curr(currStep, now));
            }
        }
예제 #4
0
        private static void SetMatchedList(this QTimeInfo info, FabStep step)
        {
            if (step == null)
            {
                return;
            }

            if (info.HasQTime() == false)
            {
                return;
            }

            info.MinList = info.List.FindAll(t => t.IsMatched(step, QTimeType.MIN));
            info.MaxList = info.List.FindAll(t => t.IsMatched(step, QTimeType.MAX));
        }
예제 #5
0
        private static void StepChange(this QTimeInfo info, FabStep prevStep, FabStep currStep, DateTime now)
        {
            var lot = info.Lot;

            if (lot == null)
            {
                return;
            }

            if (info.HasQTime() == false)
            {
                return;
            }

            info.StepChange_Prev(prevStep, now);

            info.SetMatchedList(currStep);
            info.StepChange_Curr(currStep, now);
        }
예제 #6
0
        internal static void SetQTimeInfo(FabLot lot, FabStep initStep)
        {
            if (lot == null)
            {
                return;
            }

            FabStep currStep = initStep;

            if (currStep == null)
            {
                return;
            }

            FabProduct      prod  = lot.FabProduct;
            List <StayHour> finds = QTimeMaster.GetStayHours(prod);

            if (finds == null)
            {
                return;
            }

            QTimeInfo info = CreateHelper.CreateQTimeInfo(lot);

            lot.QtimeInfo = info;

            foreach (var it in finds)
            {
                var clone = it.Clone();
                clone.Lot = lot;

                info.List.Add(clone);
            }

            DateTime now = AoFactory.Current.NowDT;

            info.StepChange(null, currStep, now);
        }
예제 #7
0
        internal static StayHour FindMaximumMinHoldTime(this QTimeInfo info, DateTime now)
        {
            if (info.HasMinQTime() == false)
            {
                return(null);
            }

            var lot      = info.Lot;
            var currStep = lot.CurrentFabStep;

            var list = info.MinList.FindAll(x => x.ToStep == currStep);

            if (list.Count == 0)
            {
                return(null);
            }

            if (list.Count > 1)
            {
                list.Sort(new CompareHelper.MinQTimeComparer(lot, currStep, now, OrderType.DESC));
            }

            return(list[0]);
        }
예제 #8
0
        internal static StayHour FindMinimumRemainTime(this QTimeInfo info, DateTime now)
        {
            if (info.HasMaxQTime() == false)
            {
                return(null);
            }

            var list = info.MaxList.FindAll(x => x.FromStepOutTime != DateTime.MinValue);

            if (list == null || list.Count == 0)
            {
                return(null);
            }

            var lot      = info.Lot;
            var currStep = lot.CurrentFabStep;

            if (list.Count > 1)
            {
                list.Sort(new CompareHelper.MaxQTimeComparer(lot, currStep, now, OrderType.ASC));
            }

            return(list[0]);
        }