예제 #1
0
        /// <summary>
        /// 獲取Panel未分板數量
        /// </summary>
        /// <param name="Station"></param>
        /// <param name="Input"></param>
        /// <param name="Paras"></param>
        public static void PanelNoBIPQtyDataloader(MESStation.BaseClass.MESStationBase Station, MESStation.BaseClass.MESStationInput Input, List <MESDataObject.Module.R_Station_Action_Para> Paras)
        {
            Panel        PanelObj   = new Panel();
            T_R_PANEL_SN TablePanel = new T_R_PANEL_SN(Station.SFCDB, Station.DBType);

            if (Paras.Count < 0)
            {
                throw new Exception(MESReturnMessage.GetMESReturnMessage("MES00000050"));
            }

            MESStationSession PanelSession = Station.StationSession.Find(t => t.MESDataType == Paras[0].SESSION_TYPE && t.SessionKey == Paras[0].SESSION_KEY);

            if (PanelSession == null)
            {
                throw new MESReturnMessage(MESReturnMessage.GetMESReturnMessage("MES00000052", new string[] { Paras[0].SESSION_TYPE + Paras[0].SESSION_KEY }));
            }
            PanelObj = (Panel)PanelSession.Value;

            MESStationSession PanelNoBIPQtySession = Station.StationSession.Find(t => t.MESDataType == Paras[1].SESSION_TYPE && t.SessionKey == Paras[1].SESSION_KEY);

            if (PanelNoBIPQtySession == null)
            {
                PanelNoBIPQtySession = new MESStationSession()
                {
                    MESDataType = Paras[1].SESSION_TYPE, InputValue = Input.Value.ToString(), SessionKey = Paras[1].SESSION_KEY, ResetInput = Input
                };
                Station.StationSession.Add(PanelNoBIPQtySession);
            }

            int PanelNoBipQty = TablePanel.PanelNoBIPQty(PanelObj.PanelNo, Station.SFCDB, Station.DBType);

            PanelNoBIPQtySession.Value = PanelNoBipQty;
        }
예제 #2
0
        /// <summary>
        /// 檢查該 Panel 是不是在指定站位
        /// </summary>
        /// <param name="Station"></param>
        /// <param name="Input"></param>
        /// <param name="Paras"></param>
        public static void CheckPanelInSmtLoading(MESStationBase Station, MESStationInput Input, List <R_Station_Action_Para> Paras)
        {
            string       PanelSn       = string.Empty;
            T_R_PANEL_SN RPanelSn      = new T_R_PANEL_SN(Station.SFCDB, Station.DBType);
            string       ErrMessage    = string.Empty;
            string       UniqueStation = string.Empty;

            if (Paras.Count < 1)
            {
                ErrMessage = MESReturnMessage.GetMESReturnMessage("MES00000057");
                throw new MESReturnMessage(ErrMessage);
            }

            PanelSn       = Input.Value.ToString();
            UniqueStation = Paras[0].VALUE;
            if (UniqueStation.Length == 0)
            {
                ErrMessage = MESReturnMessage.GetMESReturnMessage("MES00000050");
                throw new MESReturnMessage(ErrMessage);
            }

            if (!RPanelSn.GetPanelUniqueStation(PanelSn, Station.SFCDB).ToUpper().Equals(UniqueStation))
            {
                ErrMessage = MESReturnMessage.GetMESReturnMessage("MES00000206", new string[] { PanelSn, UniqueStation });
                throw new MESReturnMessage(ErrMessage);
            }
        }
예제 #3
0
 public Boolean CreatePanel(Hashtable temp, MESDBHelper.OleExec SFCDB, MESDataObject.DB_TYPE_ENUM _DBType)
 {
     try
     {
         T_R_PANEL_SN   tPanel = new T_R_PANEL_SN(SFCDB, _DBType);
         Row_R_PANEL_SN rPanel = (Row_R_PANEL_SN)tPanel.NewRow();
         rPanel.ID          = tPanel.GetNewID(temp["BU"].ToString(), SFCDB);
         rPanel.PANEL       = temp["Panel"].ToString();
         rPanel.SN          = rPanel.ID;
         rPanel.WORKORDERNO = temp["WO"].ToString();
         rPanel.SEQ_NO      = 0;
         rPanel.EDIT_EMP    = temp["User"].ToString();
         rPanel.EDIT_TIME   = DateTime.Now;
         string strRet = SFCDB.ExecSQL(rPanel.GetInsertString(_DBType));
         if (Convert.ToInt32(strRet) > 0)
         {
             return(true);
         }
         return(false);
     }
     catch (Exception e)
     {
         throw e;
     }
 }
예제 #4
0
        public Boolean AddSnToPanel(Hashtable temp, MESDBHelper.OleExec SFCDB, MESDataObject.DB_TYPE_ENUM _DBType)
        {
            string strSn = temp["SN"].ToString();
            SN     sn    = new SN(strSn, SFCDB, _DBType);
            string wo    = sn.WorkorderNo;

            if (wo != this.PanelCollection[0].WORKORDERNO)
            {
                return(false);
            }
            T_R_PANEL_SN   tPanel = new T_R_PANEL_SN(SFCDB, _DBType);
            Row_R_PANEL_SN rPanel = (Row_R_PANEL_SN)tPanel.NewRow();

            rPanel.ID          = tPanel.GetNewID(temp["BU"].ToString(), SFCDB);
            rPanel.SN          = temp["SNID"].ToString();
            rPanel.PANEL       = this.PanelNo;
            rPanel.WORKORDERNO = wo;
            rPanel.SEQ_NO      = this.PanelCollection.Count;
            rPanel.EDIT_EMP    = temp["User"].ToString();
            rPanel.EDIT_TIME   = DateTime.Now;
            string strRet = SFCDB.ExecSQL(rPanel.GetInsertString(_DBType));

            if (Convert.ToInt32(strRet) > 0)
            {
                this.PanelCollection.Add(rPanel.GetDataObject());
                return(true);
            }
            return(false);
        }
예제 #5
0
        /// <summary>
        /// 獲取虛擬SN add by LLF 2018-02-05
        /// </summary>
        /// <param name="StrSN"></param>
        /// <param name="sfcdb"></param>
        /// <param name="_DBType"></param>
        /// <returns></returns>
        public R_PANEL_SN GetPanelVirtualSN(string StrSN, OleExec sfcdb, MESDataObject.DB_TYPE_ENUM _DBType)
        {
            R_PANEL_SN   Row        = null;
            T_R_PANEL_SN R_PANEL_SN = new T_R_PANEL_SN(sfcdb, DBType);

            Row = R_PANEL_SN.GetPanelVirtualSN(StrSN, sfcdb);
            return(Row);
        }
예제 #6
0
        public bool CheckPanelVirtualSNExist(string StrSN, OleExec sfcdb, MESDataObject.DB_TYPE_ENUM _DBType)
        {
            bool         CheckFlag  = false;
            T_R_PANEL_SN R_PANEL_SN = new T_R_PANEL_SN(sfcdb, DBType);

            CheckFlag = R_PANEL_SN.CheckPanelVirtualSN(StrSN, sfcdb);
            return(CheckFlag);
        }
예제 #7
0
        public R_PANEL_SN LoadPanelBySN(string StrSN, OleExec sfcdb, MESDataObject.DB_TYPE_ENUM _DBType)
        {
            R_PANEL_SN   R_Panel_SN = null;
            T_R_PANEL_SN R_PANEL_SN = new T_R_PANEL_SN(sfcdb, DBType);

            R_Panel_SN = R_PANEL_SN.GetPanelBySn(StrSN, sfcdb);
            return(R_Panel_SN);
        }
예제 #8
0
 public List <R_SN> GetSnDetail(string strPanel, MESDBHelper.OleExec SFCDB, MESDataObject.DB_TYPE_ENUM _DBType)
 {
     try
     {
         DBType = _DBType;
         T_R_PANEL_SN TRWB = new T_R_PANEL_SN(SFCDB, DBType);
         this.PanelSnList = TRWB.GetSn(strPanel, SFCDB);
         return(PanelSnList);
     }
     catch (Exception e)
     {
         throw e;
     }
 }
예제 #9
0
 public void Reload(MESDBHelper.OleExec SFCDB, MESDataObject.DB_TYPE_ENUM _DBType)
 {
     try
     {
         DBType = _DBType;
         T_R_PANEL_SN TRWB = new T_R_PANEL_SN(SFCDB, DBType);
         RPanelList = TRWB.GetPanel(this.PanelNo, SFCDB);
         foreach (R_PANEL_SN item in RPanelList)
         {
             this.PanelCollection.Add(item);
         }
     }
     catch (Exception e)
     {
         throw e;
     }
 }
예제 #10
0
 public Boolean DeletePanelByID(string strID, MESDBHelper.OleExec SFCDB, MESDataObject.DB_TYPE_ENUM _DBType)
 {
     try
     {
         T_R_PANEL_SN   tPanel = new T_R_PANEL_SN(SFCDB, _DBType);
         Row_R_PANEL_SN rPanel = (Row_R_PANEL_SN)tPanel.GetObjByID(strID, SFCDB, _DBType);
         string         strRet = SFCDB.ExecSQL(rPanel.GetDeleteString(_DBType));
         if (Convert.ToInt32(strRet) > 0)
         {
             return(true);
         }
         return(false);
     }
     catch (Exception e)
     {
         throw e;
     }
 }
예제 #11
0
        /// <summary>
        /// 從輸入加載Panel
        /// </summary>
        /// <param name="Station"></param>
        /// <param name="Input"></param>
        /// <param name="Paras">1個參數,Panel的保存位置</param>
        public static void PanelFromInputDataloader(MESStation.BaseClass.MESStationBase Station, MESStation.BaseClass.MESStationInput Input, List <MESDataObject.Module.R_Station_Action_Para> Paras)
        {
            if (Paras.Count != 1)
            {
                throw new Exception(MESReturnMessage.GetMESReturnMessage("MES00000050"));
            }

            string strPanel = Input.Value.ToString().Trim().ToUpper();

            MESStationSession PanelSession = Station.StationSession.Find(t => t.MESDataType == Paras[0].SESSION_TYPE && t.SessionKey == Paras[0].SESSION_KEY);

            if (PanelSession == null)
            {
                PanelSession = new MESStationSession()
                {
                    MESDataType = Paras[0].SESSION_TYPE, InputValue = Input.Value.ToString(), SessionKey = Paras[0].SESSION_KEY, ResetInput = Input
                };
                Station.StationSession.Add(PanelSession);
            }
            else //add by LLF 2018-02-06
            {
                PanelSession.InputValue = strPanel;
                PanelSession.ResetInput = Input;
            }


            MESDBHelper.OleExec SFCDB = Station.SFCDB;



            MESDataObject.Module.T_R_PANEL_SN TRPS = new T_R_PANEL_SN(SFCDB, MESDataObject.DB_TYPE_ENUM.Oracle);
            List <R_PANEL_SN> PanelSNs             = TRPS.GetPanel(strPanel, SFCDB);

            if (PanelSNs.Count == 0)
            {
                string errMsg = MESReturnMessage.GetMESReturnMessage("MES00000038", new string[] { strPanel });
                throw new MESReturnMessage(errMsg);
            }
            Panel panel = new Panel(strPanel, SFCDB, DB_TYPE_ENUM.Oracle);

            PanelSession.Value = panel;
        }
예제 #12
0
        //add by LLF 2018-01-26
        //加載Panel待過工站
        //modify by ZGJ 2018-03-07
        public static void PanelSNNextStationDataloader(MESPubLab.MESStation.MESStationBase Station, MESPubLab.MESStation.MESStationInput Input, List <R_Station_Action_Para> Paras)
        {
            //MESStationSession WipStationSave = new MESStationSession() { MESDataType = "WIPSTATION", InputValue = Input.Value.ToString(), SessionKey = "1", ResetInput = Input };
            MESStationSession NextStationSave = Station.StationSession.Find(t => t.MESDataType == Paras[0].SESSION_TYPE && t.SessionKey == Paras[0].SESSION_KEY);

            if (NextStationSave == null)
            {
                NextStationSave = new MESStationSession()
                {
                    MESDataType = Paras[0].SESSION_TYPE, InputValue = Input.Value.ToString(), SessionKey = Paras[0].SESSION_KEY, ResetInput = Input
                };
                Station.StationSession.Add(NextStationSave);
            }
            string       PanelSn = Input.Value.ToString();
            T_R_PANEL_SN table   = new T_R_PANEL_SN(Station.SFCDB, Station.DBType);

            NextStationSave.Value = new List <string>()
            {
                table.GetPanelNextStation(PanelSn, Station.SFCDB)
            };
            //SN sn = new SN();

            //sn.PanelSN(strSn, Station.SFCDB, MESDataObject.DB_TYPE_ENUM.Oracle);

            //Route routeDetail = new Route(sn.RouteID, GetRouteType.ROUTEID, Station.SFCDB, MESDataObject.DB_TYPE_ENUM.Oracle);
            //List<string> snStationList = new List<string>();
            //List<RouteDetail> routeDetailList = routeDetail.DETAIL;
            //RouteDetail R = routeDetailList.Where(r => r.STATION_NAME == sn.CurrentStation).FirstOrDefault();
            ////Modify By LLF 2018-01-29
            ////string nextStation1 = routeDetailList.Where(r => r.SEQ_NO == R.SEQ_NO + 10).FirstOrDefault().STATION_NAME;
            //string nextStation1 = routeDetailList.Where(r => r.SEQ_NO > R.SEQ_NO).FirstOrDefault().STATION_NAME;
            //snStationList.Add(nextStation1);
            //if (R.DIRECTLINKLIST != null)
            //{
            //    foreach (var item in R.DIRECTLINKLIST)
            //    {
            //        snStationList.Add(item.STATION_NAME);
            //    }
            //}
            Station.AddMessage("MES00000029", new string[] { "NextStationList", "NextStation" }, MESPubLab.MESStation.MESReturnView.Station.StationMessageState.Pass);
        }
예제 #13
0
        /// <summary>
        /// 從輸入加載SN對象集合
        /// </summary>
        /// <param name="Station"></param>
        /// <param name="Input"></param>
        /// <param name="Paras"></param>
        public static void GetSnObjectListDataloader(MESStationBase Station, MESStationInput Input, List <R_Station_Action_Para> Paras)
        {
            if (Paras.Count != 4)
            {
                throw new MESReturnMessage(MESReturnMessage.GetMESReturnMessage("MES00000057"));
            }
            MESStationSession sessionWO = Station.StationSession.Find(t => t.MESDataType == Paras[0].SESSION_TYPE && t.SessionKey == Paras[0].SESSION_KEY);

            if (sessionWO == null)
            {
                throw new MESReturnMessage(MESReturnMessage.GetMESReturnMessage("MES00000052", new string[] { Paras[0].SESSION_TYPE }));
            }
            MESStationSession sessionInputType = Station.StationSession.Find(t => t.MESDataType == Paras[1].SESSION_TYPE && t.SessionKey == Paras[1].SESSION_KEY);

            if (sessionInputType == null)
            {
                throw new MESReturnMessage(MESReturnMessage.GetMESReturnMessage("MES00000052", new string[] { Paras[1].SESSION_TYPE }));
            }
            if (sessionInputType.Value.ToString() == "")
            {
                throw new MESReturnMessage(MESReturnMessage.GetMESReturnMessage("MES00000052", new string[] { Paras[1].SESSION_TYPE }));
            }
            MESStationSession sessionInputString = Station.StationSession.Find(t => t.MESDataType == Paras[2].SESSION_TYPE && t.SessionKey == Paras[2].SESSION_KEY);

            if (sessionInputString == null)
            {
                throw new MESReturnMessage(MESReturnMessage.GetMESReturnMessage("MES00000052", new string[] { Paras[2].SESSION_TYPE }));
            }
            if (sessionInputString.Value.ToString() == "")
            {
                throw new MESReturnMessage(MESReturnMessage.GetMESReturnMessage("MES00000052", new string[] { Paras[2].SESSION_TYPE }));
            }
            MESStationSession snObjectList = Station.StationSession.Find(t => t.MESDataType == Paras[3].SESSION_KEY && t.SessionKey == Paras[3].SESSION_KEY);

            if (snObjectList == null)
            {
                snObjectList = new MESStationSession()
                {
                    MESDataType = Paras[3].SESSION_TYPE, InputValue = Input.Value.ToString(), SessionKey = Paras[3].SESSION_KEY, ResetInput = Input
                };
                Station.StationSession.Add(snObjectList);
            }
            try
            {
                WorkOrder objWorkorder = new WorkOrder();
                objWorkorder = (WorkOrder)sessionWO.Value;
                string      inputType   = sessionInputType.Value.ToString();
                string      inputString = sessionInputString.Value.ToString();
                List <R_SN> snList      = new List <R_SN>();
                T_R_SN_KP   t_r_sn_kp   = new T_R_SN_KP(Station.SFCDB, Station.DBType);
                if (inputType.Equals("SN"))
                {
                    T_R_SN t_r_sn = new T_R_SN(Station.SFCDB, Station.DBType);
                    snList.Add(t_r_sn.LoadSN(inputString, Station.SFCDB));
                }
                else if (inputType.Equals("PANEL"))
                {
                    T_R_PANEL_SN t_r_panel_sn = new T_R_PANEL_SN(Station.SFCDB, Station.DBType);
                    snList = t_r_panel_sn.GetValidSnByPanel(inputString, Station.SFCDB);
                }
                else
                {
                    throw new MESReturnMessage(MESReturnMessage.GetMESReturnMessage("MSGCODE20180529094259"));
                }
                snObjectList.Value = snList;
                Station.AddMessage("MES00000001", new string[] { sessionInputString.Value.ToString() }, MESPubLab.MESStation.MESReturnView.Station.StationMessageState.Pass);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
예제 #14
0
        public static void HWDBIPSNFailAction(MESStation.BaseClass.MESStationBase Station, MESStation.BaseClass.MESStationInput Input, List <R_Station_Action_Para> Paras)
        {
            string     ErrMessage  = "";
            string     StrSn       = "";
            string     APVirtualSn = "";
            string     VirtualSn   = "";
            AP_DLL     APObj       = new AP_DLL();
            OleExec    APDB        = null;
            R_PANEL_SN PANELObj    = null;
            Int16      FailCount   = 0;
            List <Dictionary <string, string> > FailList = null;
            string        R_SN_STATION_DETAIL_ID         = "";
            StringBuilder ReturnMessage = new StringBuilder();
            string        RepairmainID  = "";//add by LLF 2018-04-12

            if (Paras.Count < 5)
            {
                throw new Exception(MESReturnMessage.GetMESReturnMessage("MES00000050"));
            }

            MESStationSession SNSession = Station.StationSession.Find(t => t.MESDataType == Paras[0].SESSION_TYPE && t.SessionKey == Paras[0].SESSION_KEY);

            if (SNSession == null)
            {
                ErrMessage = MESReturnMessage.GetMESReturnMessage("MES00000052", new string[] { Paras[0].SESSION_TYPE + Paras[0].SESSION_KEY });
                throw new MESReturnMessage(ErrMessage);
            }

            MESStationSession FailCountSession = Station.StationSession.Find(t => t.MESDataType == Paras[1].SESSION_TYPE && t.SessionKey == Paras[1].SESSION_KEY);

            if (FailCountSession == null)
            {
                ErrMessage = MESReturnMessage.GetMESReturnMessage("MES00000052", new string[] { Paras[1].SESSION_TYPE + Paras[1].SESSION_KEY });
                throw new MESReturnMessage(ErrMessage);
            }

            MESStationSession FailListSession = Station.StationSession.Find(t => t.MESDataType == Paras[2].SESSION_TYPE && t.SessionKey == Paras[2].SESSION_KEY);

            if (FailListSession == null)
            {
                ErrMessage = MESReturnMessage.GetMESReturnMessage("MES00000052", new string[] { Paras[2].SESSION_TYPE + Paras[2].SESSION_KEY });
                throw new MESReturnMessage(ErrMessage);
            }

            MESStationSession PanelVitualSNSession = Station.StationSession.Find(t => t.MESDataType == Paras[3].SESSION_TYPE && t.SessionKey == Paras[3].SESSION_KEY);

            if (PanelVitualSNSession == null)
            {
                ErrMessage = MESReturnMessage.GetMESReturnMessage("MES00000052", new string[] { Paras[3].SESSION_TYPE + Paras[3].SESSION_KEY });
                throw new MESReturnMessage(ErrMessage);
            }

            MESStationSession StatusSession = Station.StationSession.Find(t => t.MESDataType == Paras[4].SESSION_TYPE && t.SessionKey == Paras[4].SESSION_KEY);

            if (StatusSession == null)
            {
                StatusSession = new MESStationSession()
                {
                    MESDataType = Paras[4].SESSION_TYPE, InputValue = Input.Value.ToString(), Value = Paras[4].VALUE, SessionKey = Paras[4].SESSION_KEY, ResetInput = Input
                };
                Station.StationSession.Add(StatusSession);
                if (StatusSession.Value.ToString() == "")
                {
                    StatusSession.Value = "FAIL";
                }
            }

            MESStationSession ClearInputSession = null;

            if (Paras.Count >= 6)
            {
                ClearInputSession = Station.StationSession.Find(t => t.MESDataType.Equals(Paras[5].SESSION_TYPE) && t.SessionKey.Equals(Paras[5].SESSION_KEY));
                if (ClearInputSession == null)
                {
                    ClearInputSession = new MESStationSession()
                    {
                        MESDataType = Paras[5].SESSION_TYPE, SessionKey = Paras[5].SESSION_KEY
                    };
                    Station.StationSession.Add(ClearInputSession);
                }
            }

            FailCount = Convert.ToInt16(FailCountSession.Value.ToString());
            FailList  = (List <Dictionary <string, string> >)FailListSession.Value;

            T_R_SN   rSn      = new T_R_SN(Station.SFCDB, DB_TYPE_ENUM.Oracle);
            DateTime FailTime = rSn.GetDBDateTime(Station.SFCDB);

            StrSn = SNSession.Value.ToString();
            if (FailList.Count >= FailCount && FailCount != 0) //允許掃描多個Fail
            {
                #region 業務邏輯

                OleExec oleDB = null;
                oleDB = Station.SFCDB;
                //oleDB = this.DBPools["SFCDB"].Borrow();
                //oleDB.BeginTrain();
                //OleExecPool APDBPool = Station.DBS["APDB"];
                //APDB = APDBPool.Borrow();
                //APDB.BeginTrain();
                APDB = Station.APDB;
                try
                {
                    Row_R_SN rrSn = (Row_R_SN)rSn.NewRow();
                    for (int i = 0; i < FailList.Count; i++)
                    {
                        //獲取頁面傳過來的數據
                        string failCode        = FailList[i]["FailCode"].ToString();
                        string failLocation    = FailList[i]["FailLocation"].ToString();
                        string failProcess     = FailList[i]["FailProcess"].ToString();
                        string failDescription = FailList[i]["FailDesc"].ToString();



                        //黃楊盛 2018年4月24日14:14:28 模擬自動做維修的動作,修正時間
                        //更新R_SN REPAIR_FAILED_FLAG=’1’
                        //modify by ZGJ 2018-03-22 BIP Fail 的產品自動清除待維修狀態,但是記錄不良

                        PANELObj = (R_PANEL_SN)PanelVitualSNSession.Value;
                        if (i == 0)
                        {
                            VirtualSn = PANELObj.SN.ToString();
                            R_SN r = rSn.GetDetailBySN(VirtualSn, Station.SFCDB);
                            rrSn = (Row_R_SN)rSn.GetObjByID(r.ID, Station.SFCDB);
                            //rrSn.REPAIR_FAILED_FLAG = "0";
                            rrSn.REPAIR_FAILED_FLAG = "1";
                            rrSn.SN        = StrSn;
                            rrSn.EDIT_EMP  = Station.LoginUser.EMP_NO; //add by LLF 2018-03-17
                            rrSn.EDIT_TIME = FailTime;                 //add by LLF 2018-03-17
                            string strRet = (Station.SFCDB).ExecSQL(rrSn.GetUpdateString(DB_TYPE_ENUM.Oracle));
                            if (!(Convert.ToInt32(strRet) > 0))
                            {
                                throw new MESReturnMessage("update repair failed flag error!");
                            }

                            // Update R_PANEL_SN
                            T_R_PANEL_SN   RPanelSN  = new T_R_PANEL_SN(Station.SFCDB, DB_TYPE_ENUM.Oracle);
                            Row_R_PANEL_SN Row_Panel = (Row_R_PANEL_SN)RPanelSN.NewRow();
                            Row_Panel    = (Row_R_PANEL_SN)RPanelSN.GetObjByID(PANELObj.ID, Station.SFCDB);
                            Row_Panel.SN = StrSn;
                            strRet       = (Station.SFCDB).ExecSQL(Row_Panel.GetUpdateString(DB_TYPE_ENUM.Oracle));
                            if (!(Convert.ToInt32(strRet) > 0))
                            {
                                throw new MESReturnMessage("update r_panel_sn error!");
                            }

                            //Update AP

                            //黄杨盛 2018年4月14日09:10:50 修正不能超过9连板的情况.同时加上不支持3位数连板的约束
                            //APVirtualSn = PANELObj.PANEL + "0" + PANELObj.SEQ_NO.ToString();
                            if (PANELObj.SEQ_NO > 99)
                            {
                                throw new MESReturnMessage(MESReturnMessage.GetMESReturnMessage("MES00000226",
                                                                                                new string[] { DB_TYPE_ENUM.Oracle.ToString() }));
                            }
                            APVirtualSn = PANELObj.PANEL + Convert.ToInt16(PANELObj.SEQ_NO).ToString("00");


                            string result = APObj.APUpdatePanlSN(APVirtualSn, StrSn, APDB);
                            //APDBPool.Return(APDB);
                            if (!result.Equals("OK"))
                            {
                                //2018年4月24日13:56:14 黃楊盛
                                //throw new MESReturnMessage("already be binded to other serial number");
                                throw new MESReturnMessage(result);
                            }


                            //新增一筆FAIL記錄到R_SN_STATION_DETAIL
                            T_R_SN_STATION_DETAIL rSnStationDetail =
                                new T_R_SN_STATION_DETAIL(Station.SFCDB, DB_TYPE_ENUM.Oracle);
                            //Add by LLF 2018-03-19
                            R_SN_STATION_DETAIL_ID = rSnStationDetail.GetNewID(Station.BU, Station.SFCDB);
                            //string detailResult = rSnStationDetail.AddDetailToRSnStationDetail(R_SN_STATION_DETAIL_ID,rrSn.GetDataObject(), Station.Line, Station.StationName, Station.StationName, Station.SFCDB);
                            string detailResult = rSnStationDetail.AddDetailToBipStationFailDetail(
                                R_SN_STATION_DETAIL_ID, rrSn.GetDataObject(), Station.Line, Station.StationName,
                                Station.StationName, Station.SFCDB, "1");
                            if (!(Convert.ToInt32(detailResult) > 0))
                            {
                                throw new MESReturnMessage("Insert sn station detail error!");
                            }

                            //update R_SN_STATION_DETAIL
                            rSnStationDetail.UpdateRSnStationDetailBySNID(StrSn, PANELObj.SN, Station.SFCDB);

                            //新增一筆到R_REPAIR_MAIN
                            T_R_REPAIR_MAIN   tRepairMain = new T_R_REPAIR_MAIN(Station.SFCDB, DB_TYPE_ENUM.Oracle);
                            Row_R_REPAIR_MAIN rRepairMain = (Row_R_REPAIR_MAIN)tRepairMain.NewRow();

                            RepairmainID = tRepairMain.GetNewID(Station.BU, Station.SFCDB);
                            //rRepairMain.ID = tRepairMain.GetNewID(Station.BU, Station.SFCDB);
                            rRepairMain.ID           = RepairmainID;
                            rRepairMain.SN           = StrSn;
                            rRepairMain.WORKORDERNO  = rrSn.WORKORDERNO;
                            rRepairMain.SKUNO        = rrSn.SKUNO;
                            rRepairMain.FAIL_LINE    = Station.Line;
                            rRepairMain.FAIL_STATION = Station.StationName;
                            rRepairMain.FAIL_EMP     = Station.LoginUser.EMP_NO;
                            //rRepairMain.FAIL_TIME = Station.GetDBDateTime();//Modify by LLF 2018-03-17
                            rRepairMain.FAIL_TIME   = FailTime; //Modify by LLF 2018-03-17
                            rRepairMain.EDIT_EMP    = Station.LoginUser.EMP_NO;
                            rRepairMain.EDIT_TIME   = Station.GetDBDateTime();
                            rRepairMain.CLOSED_FLAG = "1";
                            string insertResult =
                                (Station.SFCDB).ExecSQL(rRepairMain.GetInsertString(DB_TYPE_ENUM.Oracle));
                            if (!(Convert.ToInt32(insertResult) > 0))
                            {
                                throw new Exception("Insert repair main error!");
                            }
                        }

                        //新增一筆到R_REPAIR_FAILCODE
                        T_R_REPAIR_FAILCODE tRepairFailCode =
                            new T_R_REPAIR_FAILCODE(Station.SFCDB, DB_TYPE_ENUM.Oracle);
                        Row_R_REPAIR_FAILCODE rRepairFailCode = (Row_R_REPAIR_FAILCODE)tRepairFailCode.NewRow();
                        rRepairFailCode.ID = tRepairFailCode.GetNewID(Station.BU, Station.SFCDB);
                        //rRepairFailCode.REPAIR_MAIN_ID = rRepairMain.ID; //Modify by LLF 2018-04-11 多筆FAIL 取1一個RepairMainID
                        rRepairFailCode.REPAIR_MAIN_ID = RepairmainID;
                        rRepairFailCode.SN             = StrSn;
                        rRepairFailCode.FAIL_CODE      = failCode;
                        rRepairFailCode.FAIL_EMP       = Station.LoginUser.EMP_NO;
                        rRepairFailCode.FAIL_TIME      = FailTime;
                        rRepairFailCode.FAIL_CATEGORY  = "SYMPTOM";
                        rRepairFailCode.FAIL_LOCATION  = failLocation;
                        rRepairFailCode.FAIL_PROCESS   = failProcess;
                        rRepairFailCode.DESCRIPTION    = failDescription;
                        rRepairFailCode.REPAIR_FLAG    = "1";
                        rRepairFailCode.EDIT_EMP       = Station.LoginUser.EMP_NO;
                        rRepairFailCode.EDIT_TIME      = Station.GetDBDateTime();

                        string strResult =
                            (Station.SFCDB).ExecSQL(rRepairFailCode.GetInsertString(DB_TYPE_ENUM.Oracle));
                        if (!(Convert.ToInt32(strResult) > 0))
                        {
                            throw new MESReturnMessage("Insert repair failcode error!");
                        }


                        //oleDB.CommitTrain();

                        ReturnMessage.Append(failDescription).Append("|");
                    }


                    //黃楊盛 2018年4月24日14:11:42 做一筆出來的記錄
                    R_SN snOut = rSn.GetDetailBySN(StrSn, Station.SFCDB);
                    rrSn = (Row_R_SN)rSn.GetObjByID(snOut.ID, Station.SFCDB);
                    rrSn.CURRENT_STATION    = rrSn.NEXT_STATION;
                    rrSn.NEXT_STATION       = rSn.GetNextStation(snOut.ROUTE_ID, snOut.NEXT_STATION, oleDB);
                    rrSn.REPAIR_FAILED_FLAG = "0";
                    rrSn.SN        = StrSn;
                    rrSn.EDIT_EMP  = Station.LoginUser.EMP_NO;
                    rrSn.EDIT_TIME = FailTime;
                    var count = (Station.SFCDB).ExecSQL(rrSn.GetUpdateString(DB_TYPE_ENUM.Oracle));
                    if (!(Convert.ToInt32(count) > 0))
                    {
                        throw new MESReturnMessage("update rsn failed flag error!");
                    }

                    // 方國剛 2018.05.02 11:45:30
                    // 因拋賬計算過站數量時,不計算REPAIR_FAILED_FLAG=1的數量,故BIP Fail 的產品自動清除待維修狀態后再在過站記錄表記錄一筆REPAIR_FAILED_FLAG=0的記錄
                    T_R_SN_STATION_DETAIL rSnStationDetailRepaired = new T_R_SN_STATION_DETAIL(Station.SFCDB, DB_TYPE_ENUM.Oracle);
                    R_SN_STATION_DETAIL_ID = rSnStationDetailRepaired.GetNewID(Station.BU, Station.SFCDB);
                    string detailResultRepaired = rSnStationDetailRepaired.AddDetailToBipStationFailDetail(
                        R_SN_STATION_DETAIL_ID, rrSn.GetDataObject(), Station.Line, Station.StationName,
                        Station.StationName, Station.SFCDB, "0");
                    if (!(Convert.ToInt32(detailResultRepaired) > 0))
                    {
                        throw new MESReturnMessage("Insert sn station detail error!");
                    }
                }
                catch (Exception e)
                {
                    try
                    {
                        //APDB.RollbackTrain();
                        //oleDB.RollbackTrain();
                    }
                    catch (Exception x)
                    {
                        ;
                    }

                    throw new MESReturnMessage(e.Message + e.StackTrace);
                }
                finally
                {
                    //APDBPool.Return(APDB);
                }



                #endregion
                //add by zgj 2018-03-14
                //當記錄完當前 SN 不良後,清除保存在 session 中的不良信息
                //((List<Dictionary<string, string>>)FailListSession.Value).Clear();

                if (ClearInputSession != null)
                {
                    ClearInputSession.Value = "true";
                }

                ReturnMessage.Remove(ReturnMessage.Length - 1, 1);
                Station.NextInput = Station.FindInputByName("PanelSn");
                Station.AddMessage("MES00000158", new string[] { StrSn, ReturnMessage.ToString() }, MESReturnView.Station.StationMessageState.Pass);
            }
            else
            {
                Station.NextInput = Station.FindInputByName("Location");
                Station.AddMessage("MES00000162", new string[] { StrSn, FailCount.ToString(), FailList.Count.ToString() }, MESReturnView.Station.StationMessageState.Message);
            }
        }