コード例 #1
0
        public RealLot(LotActivity activity, LotActivityRaw raw, DateTime?startTime, DateTime?endTime, DateTime?snapshotTime = null)
        {
            SnapshotTime = snapshotTime;
            StartTime    = startTime;
            EndTime      = endTime;
            IRDGroup     = activity.IRDGroup;
            StepName     = raw.Stepname;
            LotID        = activity.LotId;
            Qty          = activity.QtyIn;
            Location     = raw.Location;
            DeviceType   = raw.ProductType;

            Status = raw.Status;

            LotActivity = activity;
        }
コード例 #2
0
ファイル: EPTCalculator.cs プロジェクト: paatrickd/OUTPUT
        public List <LotActivity> CalculateEPTs(List <LotActivity> lotActivities)
        {
            LotActivities = lotActivities.ToList();

            allSortedOnDeparture = LotActivities.OrderBy(x => x.Departure).ToList();

            subsetNoDeparture = LotActivities.Where(x => x.Arrival != null && x.Departure == null).ToList();

            subsetNoArrivalDeparture = LotActivities.Where(x => x.Arrival == null && x.Departure == null).ToList();

            DateTime?prevDepart = null;

            for (int i = 0; i < allSortedOnDeparture.Count; i++)
            {
                LotActivity act = allSortedOnDeparture[i];

                if (act.Departure != null && prevDepart != null && act.WIPIn > -1)
                {
                    TimeSpan ept = new TimeSpan();

                    // Calculate EPT
                    if (act.WIPIn > 0)
                    {
                        ept = (DateTime)act.Departure - (DateTime)prevDepart;
                    }
                    else if (act.WIPIn == 0)
                    {
                        ept = (DateTime)act.Departure - (DateTime)act.Arrival;
                    }

                    act.EPT = ept.TotalSeconds;

                    // Calculate overtaken lots (this operation is slow)
                    act.OvertakenLots = subsetNoArrivalDeparture.Count + subsetNoDeparture.Where(x => x.Arrival < act.Arrival).Count() + allSortedOnDeparture.GetRange(i, allSortedOnDeparture.Count - i).Where(x => x.Arrival < act.Arrival).Count();
                }
                prevDepart = act.Departure;
            }

            return(LotActivities);
        }