private static bool ExistInflowWip(FabAoEquipment eqp, JobFilterInfo info) { var wf = WeightHelper.GetWeightFactor(eqp.Target.Preset, Constants.WF_ALLOW_RUN_DOWN_TIME); if (wf == null || wf.Factor == 0) { return(false); } decimal inflowHour = (decimal)wf.Criteria[0]; if (inflowHour <= 0) { return(false); } var idleTime = eqp.GetIdleRunTime(); decimal adjustHour = inflowHour - Convert.ToDecimal(idleTime.TotalHours); if (adjustHour <= 0) { return(false); } var inflowQty = InFlowMaster.GetAllowRunDownWip(eqp, info.ProductID, info.ProductVersion, info.OwnerType, info.Step, adjustHour); return(inflowQty > 0); }
public static FabLot NeedAllowRunDown_Dummy(AoEquipment aeqp, IList <IHandlingBatch> wips) { //TODO : Current Wait + PreviousStep Run + Inflow Arrivedin FabAoEquipment eqp = aeqp.ToFabAoEquipment(); //if (eqp.EqpID == "THCVD400" && eqp.NowDT >= LcdHelper.StringToDateTime("20200211 091146")) // Console.WriteLine("B"); decimal inflowHours; if (CanMakeDummy(eqp, wips, out inflowHours) == false) { return(null); } var last = eqp.GetLastPlan(); //eqp.LastPlan as FabPlanInfo; FabStep lastStep = last.Step as FabStep; FabLot dummy = CreateHelper.CreateDispatchDummyLot(lastStep, last); if (IsLoadableDummy(eqp, dummy, inflowHours) == false) { return(null); } var idleTime = eqp.GetIdleRunTime(); decimal adjustHour = inflowHours - Convert.ToDecimal(idleTime.TotalHours); //직전 Step에 Run Wip이 존재하는 경우는 대기함 bool isExistPrevStepRunWip = InFlowMaster.ExistPrevStepRunWip(eqp, last.ProductID, last.ProductVersion, last.OwnerType, lastStep, adjustHour); if (isExistPrevStepRunWip == false) { //AllowRunDown Factor decimal inflowQty = InFlowMaster.GetAllowRunDownWip(eqp, last.ProductID, last.ProductVersion, last.OwnerType, lastStep, adjustHour); if (inflowQty <= 0) { inflowQty += eqp.GetFilteredWipQty(last); } if (inflowQty <= 0) { return(null); } } dummy.DispatchInTime = eqp.NowDT; return(dummy); }