/// <summary> /// </summary> /// <param name="wstep"/> /// <param name="context"/> /// <param name="handled"/> /// <param name="prevReturnValue"/> /// <returns/> public IEnumerable <AoEquipment> SELECT_DOWN_EQP0(WorkStep wstep, JobChangeContext context, ref bool handled, IEnumerable <AoEquipment> prevReturnValue) { MicronBEAssyWorkStep ws = wstep as MicronBEAssyWorkStep; DateTime availableDownTime = ws.AvailableDownTime; DateTime nowDt = FindHelper.GetNowDT(); if (nowDt < availableDownTime) { return(null); } else { var t = wstep.LoadedEqps.FirstOrDefault(); if (t != null) { Logger.MonitorInfo(string.Format("Down Eqp -> STEP : {0}, EQP_ID : {1}, NowDT : {2}", ws.Key.ToString(), t.Target.EqpID, DateUtility.DbToString(FindHelper.GetNowDT()))); return(new AoEquipment[] { t.Target }); } else { return(null); } } }
private DataTable CreateDataTable(Dictionary <Tuple <string, string>, ResultData> resultDatas) { DataTable dt = new DataTable("RESULT"); DataColumn colProductID = new DataColumn("PRODUCT_ID", typeof(string)); DataColumn colProductName = new DataColumn("PRODUCT_NAME", typeof(string)); DataColumn colDemandQty = new DataColumn("DEMAND(P)", typeof(decimal)); DataColumn colActQty = new DataColumn("ACT(P)", typeof(decimal)); DataColumn colRemaninQty = new DataColumn("REMAIN(P)", typeof(decimal)); DataColumn colProcess = new DataColumn("B/N_STEPS", typeof(string)); DataColumn colSequence = new DataColumn("COMP_SEQ", typeof(int)); DataColumn colDieAttach = new DataColumn("DIE_ATTACH", typeof(string)); DataColumn colInProductName = new DataColumn("ASSY_IN_PROD_NAME", typeof(string)); DataColumn colCompQty = new DataColumn("COMP_QTY", typeof(int)); DataColumn colEPEWipQty = new DataColumn("EPE(P)", typeof(decimal)); DataColumn colEPEInQty = new DataColumn("NEED_EPE(P)", typeof(decimal)); DataColumn colCR2WipQty = new DataColumn("CR2(C)", typeof(decimal)); DataColumn colCR1WipQty = new DataColumn("CR1(C)", typeof(decimal)); DataColumn colStockWipQty = new DataColumn("STOCK(C)", typeof(decimal)); DataColumn colInQty = new DataColumn("NEED_STOCK(C)", typeof(decimal)); DataColumn colCutOff = new DataColumn("RELEASE_CUT_OFF", typeof(string)); DataColumn colFabProductNames = new DataColumn("FAB_PRODUCT_NAMES", typeof(string)); DataColumn colNoKitQty = new DataColumn("NO_KIT_INV(C)", typeof(decimal)); DataColumn colNeedWaferQty = new DataColumn("NEED_WAFER(C)", typeof(decimal)); dt.Columns.Add(colProductID); dt.Columns.Add(colProductName); dt.Columns.Add(colDemandQty); dt.Columns.Add(colActQty); dt.Columns.Add(colRemaninQty); dt.Columns.Add(colProcess); dt.Columns.Add(colSequence); dt.Columns.Add(colDieAttach); dt.Columns.Add(colInProductName); dt.Columns.Add(colCompQty); dt.Columns.Add(colEPEWipQty); dt.Columns.Add(colEPEInQty); dt.Columns.Add(colCR2WipQty); dt.Columns.Add(colCR1WipQty); dt.Columns.Add(colStockWipQty); dt.Columns.Add(colInQty); dt.Columns.Add(colCutOff); dt.Columns.Add(colFabProductNames); dt.Columns.Add(colNoKitQty); dt.Columns.Add(colNeedWaferQty); foreach (ResultData result in resultDatas.Values) { #if DEBUG if (result.ProductID == "144868") { Console.WriteLine(); } #endif List <ResultDataAssyPart> assyResultList = new List <ResultDataAssyPart>(result.AssyInResultData.Values); assyResultList.Sort((x, y) => x.Product.CompSeq.CompareTo(y.Product.CompSeq)); if (assyResultList.Count > 0) { foreach (ResultDataAssyPart rdap in assyResultList) { DataRow row = dt.NewRow(); row[colProductID] = result.ProductID; row[colProductName] = result.ProductName; row[colDemandQty] = result.DemandQty; row[colActQty] = result.ActQty; row[colRemaninQty] = result.RemainQty; row[colProcess] = result.Process; row[colSequence] = rdap.Product.CompSeq; row[colDieAttach] = rdap.DAStep != null ? rdap.DAStep.StepID : string.Empty; if (rdap.Product.ProductDetail != null) { row[colInProductName] = rdap.Product.ProductDetail.ProductName; } row[colCompQty] = rdap.Product.CompQty; row[colEPEWipQty] = rdap.EPEWipQty; row[colEPEInQty] = rdap.EPEInQty; row[colCR2WipQty] = rdap.CR2WipQty; row[colCR1WipQty] = rdap.CR1WipQty; row[colStockWipQty] = rdap.StockWipQty; row[colInQty] = rdap.InQty; if (rdap.CutOffDate != DateTime.MinValue) { row[colCutOff] = DateUtility.DbToString(rdap.CutOffDate); } row[colFabProductNames] = rdap.WaferProductNames; row[colNoKitQty] = rdap.NoKitQty; row[colNeedWaferQty] = rdap.NeedWaferQty; dt.Rows.Add(row); } } else { DataRow row = dt.NewRow(); row[colProductID] = result.ProductID; row[colProductName] = result.ProductName; row[colDemandQty] = result.DemandQty; row[colActQty] = result.ActQty; row[colRemaninQty] = result.RemainQty; row[colProcess] = result.Process; dt.Rows.Add(row); } } return(dt); }
/// <summary> /// </summary> /// <param name="upWorkStep"/> /// <param name="assignEqps"/> /// <param name="context"/> /// <param name="handled"/> /// <param name="prevReturnValue"/> /// <returns/> public List <AssignEqp> DO_FILTER_ASSIGN_EQP0(WorkStep upWorkStep, List <AssignEqp> assignEqps, JobChangeContext context, ref bool handled, List <AssignEqp> prevReturnValue) { try { List <AssignEqp> list = new List <AssignEqp>(); foreach (AssignEqp eqp in assignEqps) { if (eqp.WorkStep == null || eqp.WorkStep.OperationType == OperationType.Down) { list.Add(eqp); continue; } int properEqpCount = SimulationHelper.CalculateProperEqpCount(eqp); bool canFilter = false; canFilter = SimulationHelper.CanFilterAssignEqp(eqp); if (properEqpCount < eqp.WorkStep.LoadedEqpCount && canFilter) { #if DEBUG DateTime nowDt = FindHelper.GetNowDT(); MicronBEAssyWorkStep ws = eqp.WorkStep as MicronBEAssyWorkStep; if (eqp.WorkStep.Key.ToString() == "S0250") { Console.WriteLine(); } Logger.MonitorInfo(string.Format("Filtered -> STEP : {0}, EQP_ID : {1}, NowDT : {2}, Available Down : {3}", eqp.WorkStep.Key.ToString(), eqp.Target.EqpID, DateUtility.DbToString(FindHelper.GetNowDT()), DateUtility.DbToString(ws.AvailableDownTime))); #endif list.Add(eqp); } } return(list); } catch (Exception e) { WriteHelper.WriteErrorHistory(ErrorLevel.FATAL, string.Format("ErrorMessage : {0} MethodName : {1}", e.Message, System.Reflection.MethodInfo.GetCurrentMethod().Name)); return(default(List <AssignEqp>)); } }
/// <summary> /// </summary> /// <param name="step"/> /// <param name="assignedEqps"/> /// <param name="context"/> /// <param name="handled"/> public void ON_AFTER_ASSIGN_EQP0(WorkStep step, List <AssignEqp> assignedEqps, JobChangeContext context, ref bool handled) { try { Logger.MonitorInfo(string.Format("Assign Eqp -> STEP : {0}, EQP_ID : {1}, NowDT : {2}", step.Key.ToString(), assignedEqps.ElementAt(0).Target.EqpID, DateUtility.DbToString(FindHelper.GetNowDT()))); MicronBEAssyWorkStep ws = step as MicronBEAssyWorkStep; double setupTime = 0d; ws.AvailableDownTime = SimulationHelper.CalculateAvailableDownTime(step, assignedEqps.ElementAt(0), ref setupTime); Logger.MonitorInfo(string.Format("Available Down Time : {0}, Setup Time : {1}", ws.AvailableDownTime, setupTime)); } catch (Exception e) { WriteHelper.WriteErrorHistory(ErrorLevel.FATAL, string.Format("ErrorMessage : {0} MethodName : {1}", e.Message, System.Reflection.MethodInfo.GetCurrentMethod().Name)); } //foreach (AssignEqp eqp in assignedEqps) //{ // eqp.Target.WakeUp(); //} }