/// <summary> /// </summary> /// <param name="db"/> /// <param name="aeqp"/> /// <param name="wips"/> /// <param name="ctx"/> /// <param name="handled"/> /// <param name="prevReturnValue"/> /// <returns/> public IHandlingBatch[] DO_SELECT0(Mozart.SeePlan.Simulation.DispatcherBase db, Mozart.SeePlan.Simulation.AoEquipment aeqp, IList <Mozart.SeePlan.Simulation.IHandlingBatch> wips, Mozart.SeePlan.Simulation.IDispatchContext ctx, ref bool handled, Mozart.SeePlan.Simulation.IHandlingBatch[] prevReturnValue) { WeightPreset preset = aeqp.Target.Preset; FabAoEquipment eqp = aeqp as FabAoEquipment; //InPort Wip 처리 if (eqp.HasInPortWip) { //여러 Lot을 넘길 경우 첫번째 투입, 나머지는 설비의 Buffer에 넣음. IHandlingBatch[] list = eqp.InitInPortWips.ToArray(); eqp.InitInPortWips.Clear(); return(list); } IHandlingBatch[] selected = null; if (wips.Count > 0) { List <IHandlingBatch> newlist = new List <IHandlingBatch>(wips); var control = DispatchControl.Instance; //if (eqp.EqpID == "FHRPH100" && eqp.NowDT >= LcdHelper.StringToDateTime("20200113 073000")) // Console.WriteLine("B"); var dummy = WeightHelper.NeedAllowRunDown_Dummy(eqp, wips); if (dummy != null) { newlist.Add(dummy); dummy.DispatchFilterInfo = eqp.LastPlanFilterInfo; } var dummyList = FilterMaster.WaitForPrevStepWip_Dummy(ctx, eqp); if (dummyList != null && dummyList.Count > 0) { newlist.AddRange(dummyList); } var lotList = control.Evaluate(db, newlist, ctx); selected = control.Select(db, eqp, lotList); if (control.IsWriteDispatchLog(eqp)) { DispatchLogHelper.AddDispatchInfo(eqp, lotList, selected, preset); //eqp.EqpDispatchInfo.AddDispatchInfo(lotList, selected, preset); } } if (selected == null) { eqp.CheckAvailableSubEqps(); } return(selected); }