internal static void WriteStayHourHist(FabLot lot) { if (lot.QtimeInfo == null) { return; } DateTime planEndTime = ModelContext.Current.EndTime; foreach (StayHour item in lot.QtimeInfo.List) { if (item.FromStepOutTime == DateTime.MinValue) { continue; } if (IsTraverseStep(item, lot) == false) { continue; } Outputs.QTimeHistory row = new QTimeHistory(); row.VERSION_NO = ModelContext.Current.VersionNo; row.FACTORY_ID = item.FatoryID; row.LOT_ID = lot.LotID; row.PRODUCT_ID = lot.CurrentProductID; row.Q_TYPE = item.QType.ToString(); row.FROM_SHOP_ID = item.FromStep.ShopID; row.FROM_PROCESS_ID = item.FromStep.ProcessID; row.FROM_STEP_ID = item.FromStep.StepID; row.TO_SHOP_ID = item.ToStep.ShopID; row.TO_PROCESS_ID = item.ToStep.ProcessID; row.TO_STEP_ID = item.ToStep.StepID; row.FROM_STEP_OUT_TIME = item.FromStepOutTime.DbNullDateTime(); row.TO_STEP_IN_TIME = item.ToStepInTime.DbNullDateTime(); row.Q_TIME = item.QTime.TotalMinutes; DateTime lastStateTime = item.ToStepInTime.IsMinValue() ? planEndTime : item.ToStepInTime; var stayTime = (lastStateTime - item.FromStepOutTime).TotalMinutes; row.STAY_TIME = LcdHelper.ToRound(stayTime, 3); row.ISSUE = "N"; if (item.QType == QTimeType.MAX) { if (stayTime > item.QTime.TotalMinutes) { row.ISSUE = "Y"; } } else if (item.QType == QTimeType.MIN) { if (item.ToStepInTime.IsMinValue() == false) { if (stayTime < item.QTime.TotalMinutes) { row.ISSUE = "Y"; } } } OutputMart.Instance.QTimeHistory.Add(row); } }