public static void OnStateChanged(this FabAoEquipment eqp, LoadingStates state, FabLot lot = null, bool isDone = false) { //if (eqp.EqpID == "FHUPH100" && lot != null && lot.LotID == "TH011010N0F") // Console.WriteLine("B"); DateTime now = eqp.NowDT; bool isAheadSetup = false; if (IsAhead(eqp, state, now)) { if (state == LoadingStates.SETUP) { now = eqp.AvailableSetupTime; } if (state == LoadingStates.PM) { now = eqp.AvailablePMTime; } isAheadSetup = true; } eqp.UpdateLastLoadInfo(now, state); eqp.SetLastFabLoadInfo(state, now, lot, isDone, isAheadSetup); UpdateAheadSetupInfo(eqp, state, now); if (eqp.IsParallelChamber) { if (state == LoadingStates.BUSY && lot != null) { FabPlanInfo plan = lot.CurrentFabPlan; if (plan.IsInitRunWip == false) { plan.TrackInTime = now; plan.InQty = lot.UnitQty; } } } else { if (state == LoadingStates.BUSY && lot != null) { lot.CurrentFabPlan.TrackInTime = now; } } OnChamberStateChanged(eqp, lot, state, now, isDone); if (state == LoadingStates.IDLERUN || state == LoadingStates.IDLE) { if (state == LoadingStates.IDLERUN) { if (eqp.LastIdleRunStartTime == DateTime.MinValue) { eqp.LastIdleRunStartTime = now; } } if (eqp.LastIdleStartTime == DateTime.MinValue) { eqp.LastIdleStartTime = now; } } else { //reset (not idle state) eqp.LastIdleRunStartTime = DateTime.MinValue; eqp.LastIdleStartTime = DateTime.MinValue; } }