/// <summary> /// 更新FAI,檢驗完成回壓FAICount,第一次首件回壓FAIDevice /// </summary> /// <param name="equipmentName"></param> /// <param name="lot"></param> public static void UpdateFAI(string equipmentName, string lot, bool initFlag, TransactionStamp txs) { //取得批號資料 var lotData = LotInfo.GetLotByLot(lot); var faiData = CSTEquipmentFAIInfo.GetDataByEquipmentAndDevice(equipmentName, lotData.DeviceName); if (faiData == null) { return; } if (faiData.INSPTYPE == FAIType.CN.ToCimesString()) { #region 連N測試,只要一支NG,就要reset檢驗次數,重新送件 //判定NG的時候回壓初始化FAICount,判定OK則WAITFAICOUNT減1 if (initFlag) //NG { //取得料號版本的資料 var deviceVerExData = DeviceVersionInfo.GetDeviceVersion(lotData.DeviceName, lotData.DeviceVersion).ChangeTo <DeviceVersionInfoEx>(); //檢查料號的FAICount有無設定 if (deviceVerExData.FAICount.ToString().IsNullOrTrimEmpty()) { //T00541 //料號:xxx的系統屬性:xxx 未設定,請洽IT人員!) error code:T00031 throw new Exception(TextMessage.Error.T00541(deviceVerExData.DeviceName, "FAICount")); } faiData.WAITFAICOUNT = deviceVerExData.FAICount; } else //OK { faiData.WAITFAICOUNT = faiData.WAITFAICOUNT - 1; } #endregion } else { //首N測試,判定OK將WAITFAICOUNT減1就好,判定NG不須動作 if (!initFlag) { faiData.WAITFAICOUNT = faiData.WAITFAICOUNT - 1; } } faiData.UpdateToDB(txs.UserID, txs.RecordTime); LogCenter.LogToDB(faiData, LogCenter.LogIndicator.Create(ActionType.Set, txs.UserID, txs.RecordTime)); }
/// <summary> /// 檢查PPK是否完成,true: 表示完成、false: 表示未完成 /// </summary> /// <param name="equipmentName"></param> /// <param name="deviceName"></param> /// <param name="deviceVersion"></param> /// <returns></returns> public static void UpdatePPK(string equipmentName, string deviceName, decimal deviceVersion, string resultFlag = null, string updateStatus = null) { //取得PPK資料 var ppkData = CSTWipPPKInfo.GetPPKDataByEqpAndDevice(equipmentName, deviceName); var deviceVerExData = DeviceVersionInfo.GetDeviceVersion(deviceName, deviceVersion).ChangeTo <DeviceVersionInfoEx>(); if (ppkData == null) { #region 新增PPK資料 var ppkItem = InfoCenter.Create <CSTWipPPKInfo>(); ppkItem.EquipmentName = equipmentName; ppkItem.DeviceName = deviceName; ppkItem.Status = "NonActive"; ppkItem.PPKCOUNT = deviceVerExData.PPKCount - 1; ppkItem.InsertToDB(); #endregion } else { //PPKCount不等於0,Count - 1 if (ppkData.PPKCOUNT != 0) { ppkData.PPKCOUNT = ppkData.PPKCOUNT - 1; } else { if (resultFlag != null) { //檢驗結果 if (resultFlag.ToBool()) { ppkData.Status = "Active"; } else { //回壓PPKConut為初始化 ppkData.PPKCOUNT = deviceVerExData.PPKCount; } } } ppkData.UpdateToDB(); } }
/// <summary> /// 確定 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnOK_Click(object sender, EventArgs e) { try { //確認是否輸入工件序號 ttbCompLot.Must(lblCompLot); //確認是否有選擇流程 ddlRoute.Must(lblRoute); //確認是否有選擇流程工作站 ddlRouteOperation.Must(lblRouteOperation); TransactionStamp txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName); using (var cts = CimesTransactionScope.Create()) { //以第一個工件序號為拆批的母批 var txnLotData = _MergeLotDataList[0]; //取得原因碼資料 var reasonData = ReasonCategoryInfo.GetReasonCategoryByCategoryNameAndReason("Common", "OTHER"); #region 執行拆批 //批號子單元清單 var lsComponetData = ComponentInfoEx.GetDataByCurrentLot(txnLotData.Lot); //取得併批批號名稱 var splitLotNaming = GetNamingRule("SplitLot", txnStamp.UserID, txnLotData); //批號拆批 var splitLot = SplitLotInfo.CreateSplitLotByLotAndQuantity(txnLotData.Lot, splitLotNaming.First[0], lsComponetData, reasonData, reasonData.Description); WIPTxn.Default.SplitLot(txnLotData, splitLot, WIPTxn.SplitIndicator.Create(null, null, null, TerminateBehavior.TerminateWithHistory), txnStamp); //將批號的UDC08註記N WIPTransaction.ModifyLotSystemAttribute(splitLot, "USERDEFINECOL08", "N", txnStamp); if (splitLotNaming.Second != null && splitLotNaming.Second.Count != 0) { DBCenter.ExecuteSQL(splitLotNaming.Second); } #endregion #region 執行併批 //移除第一個工件序號(因為拆批已處理過了) _MergeLotDataList.RemoveAt(0); List <MergeLotInfo> lsMergeLots = new List <MergeLotInfo>(); foreach (var mergeLot in _MergeLotDataList) { //批號子單元清單 var componetDataList = ComponentInfoEx.GetDataByCurrentLot(mergeLot.Lot); //加入併批清單 lsMergeLots.Add(MergeLotInfo.GetMergeLotByLotAndQuantity(mergeLot.Lot, componetDataList, reasonData, reasonData.Description)); } //將數量合併到在狀態為Run的批號上 if (lsMergeLots.Count > 0) { WIPTransaction.MergeLot(splitLot, lsMergeLots, txnStamp); } #endregion #region 變更流程 //取得料號版本資料 var deviceVersionData = DeviceVersionInfo.GetDeviceVersion(splitLot.DeviceName, splitLot.DeviceVersion); //取得所選擇的流程資料 var routeData = InfoCenter.GetBySID <RouteInfo>(ddlRoute.SelectedValue); //取得所選擇流程目前線上版本資料 var routeVersionData = RouteVersionInfo.GetActiveRouteVersion(routeData); //取得所選擇的流程工作站資料 var routeOpeartionData = InfoCenter.GetBySID <RouteOperationInfo>(ddlRouteOperation.SelectedValue); WIPTransaction.ReassignRoute(splitLot, deviceVersionData, routeVersionData, routeOpeartionData, reasonData, reasonData.Description, txnStamp); #endregion cts.Complete(); } ClearField(); AjaxFocus(ttbCompLot); _ProgramInformationBlock.ShowMessage(TextMessage.Hint.T00614("")); } catch (Exception ex) { HandleError(ex); } }