/// <summary> /// 取得預約工作站的序號 /// </summary> /// <param name="lot"></param> /// <param name="ruleName"></param> /// <returns></returns> public static string GetAppointmentOperationSequence(string lot, string ruleName) { var lotData = LotInfo.GetLotByLot(lot).ChangeTo <LotInfoEx>(); string nextOperationSequence = ""; //依據傳入的批號去取得預約表資訊 var WIPReserveCheckInDataList = CSTWIPReserveCheckInInfo.GetDataByLot(lotData.Lot); //用批號去客製表找出所有預約紀錄,先比較currentRule是否存在於客製表,若有,則拋錯 if (WIPReserveCheckInDataList.Count > 0) { //從預約表中找出相同的RuleName List <CSTWIPReserveCheckInInfo> matchReserveList = WIPReserveCheckInDataList.FindAll(x => x.RuleName == ruleName); if (matchReserveList.Count > 0) { //批號:{0}已進行站點:{1}預約進站作業,請遵循作業規範 throw new Exception(RuleMessage.Error.C10001(lotData.Lot, lotData.OperationName)); } //取得最後一次預約的工作站點名稱 var lastAppointmentOperation = WIPReserveCheckInDataList[0].OperationName; //取得目前批號的流程線上版本 RouteVersionInfo RouteVersion = RouteVersionInfo.GetRouteActiveVersion(lotData.RouteName); //以目前工作站名稱去查詢在所有流程中的序號 var routeOperation = RouteOperationInfo.GetRouteAllOperations(RouteVersion).Find(p => p.OperationName == lastAppointmentOperation); //取得下一個工作站序號 nextOperationSequence = string.Format("{0:000}", (Convert.ToDecimal(routeOperation.OperationSequence) + 1)); } return(nextOperationSequence); }
/// <summary> /// 依據傳入批號資料及工作站來更新預約資料 /// </summary> /// <param name="txnLotData"></param> /// <param name="operationName"></param> /// <param name="txnStamp"></param> public void UpdateReserveCheckInData(LotInfoEx txnLotData, string operationName, TransactionStamp txnStamp) { //取得預約資料 var WIPReserveList = CSTWIPReserveCheckInInfo.GetDataByLotAndOper(txnLotData.Lot, operationName); WIPReserveList.ForEach(reserveData => { //記錄出站時間 reserveData.OutTime = DBCenter.GetSystemTime(); //記錄LOG CSTWIPReserveCheckInLogInfo reserveDataLog = InfoCenter.Create <CSTWIPReserveCheckInLogInfo>(); reserveDataLog = reserveData.Fill <CSTWIPReserveCheckInLogInfo>(); reserveDataLog.LinkSID = txnStamp.LinkSID; reserveData.DeleteFromDB(); reserveDataLog.InsertToDB(); }); }
/// <summary> /// 確認出站後是否有下一站的預約紀錄,如果有,則將批號進站至下一個工作站 /// </summary> /// <param name="txnLotData">機加批號</param> /// <param name="txnStamp"></param> public void CheckNextReserveCheckIn(LotInfoEx txnLotData, TransactionStamp txnStamp) { //取得預約工作站資料 var WIPNextReserveList = CSTWIPReserveCheckInInfo.GetDataByLot(txnLotData.Lot); if (WIPNextReserveList.Count > 0) { //下一個預約工作站資料 var reserveData = WIPNextReserveList[0]; //將預約的進站時間回寫到hist的Remark01 txnStamp.Remark01 = reserveData.InTime; //取得機台資料 var equipData = EquipmentInfo.GetEquipmentByName(reserveData.Equipment); if (equipData == null) { //[00885]機台{0}不存在! throw new Exception(TextMessage.Error.T00885(reserveData.Equipment)); } //取得機台狀態資料 var newStateInfo = EquipmentStateInfo.GetEquipmentStateByState("RUN"); if (equipData.CurrentState != "RUN") { //更新機台狀態 EMSTransaction.ChangeState(equipData, newStateInfo, txnStamp); } //批號上機台 EMSTxn.Default.AddLotToEquipment(txnLotData, equipData, txnStamp); //批號進站 WIPTransaction.CheckIn(txnLotData, equipData.EquipmentName, "", "", LotDefaultStatus.Run.ToString(), txnStamp); //將批號Dispatch到下一規則 WIPTransaction.DispatchLot(txnLotData, txnStamp); } }