Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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();
            });
        }
Пример #3
0
        /// <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);
            }
        }