Example #1
0
        public void StationInput(Newtonsoft.Json.Linq.JObject requestValue, Newtonsoft.Json.Linq.JObject Data, MESStationReturn StationReturn)
        {
            string          DisplayName = Data["Station"]["DisplayName"]?.ToString();
            string          Token       = requestValue["Token"]?.ToString();
            JToken          RCurrInput  = Data["Input"];
            MESStationInput CurrInput   = null;
            OleExec         SFCDB       = this.DBPools["SFCDB"].Borrow();
            OleExec         APDB        = this.DBPools["APDB"].Borrow();
            //將工站返回的值加載入工站模型中
            MESStationBase Station = null;

            if (StationPool.ContainsKey(Token + DisplayName))
            {
                Station = StationPool[Token + DisplayName];
            }
            Station.StationMessages.Clear();
            Station.NextInput = null;
            Station.SFCDB     = SFCDB;
            Station.APDB      = APDB;
            Station.IP        = requestValue["IP"]["Value"].ToString();

            Station.LabelPrint.Clear();
            Station.ScanKP.Clear();
            try
            {
                for (int i = 0; i < Data["Station"]["Inputs"].Count(); i++)
                {
                    JToken          rinput = Data["Station"]["Inputs"][i];
                    MESStationInput input  = Station.Inputs.Find(t => t.DisplayName == rinput["DisplayName"].ToString());
                    if (input == null)
                    {
                        continue;
                    }
                    input.Value = rinput["Value"].ToString();
                    if (Data["ScanType"].ToString() == "Pass" && input.DisplayName == RCurrInput["DisplayName"].ToString())
                    {
                        CurrInput = input;
                    }
                }
                if (Station.FailStation != null)
                {
                    //2018/02/05 肖倫 failStation的db以及dbPool為空的情況 Begin
                    Station.FailStation.DBS   = Station.DBS;
                    Station.FailStation.SFCDB = SFCDB;
                    Station.FailStation.APDB  = APDB;
                    //2018/02/05 肖倫 failStation的db以及dbPool為空的情況 End
                    for (int i = 0; i < Data["Station"]["FailStation"]["Inputs"].Count(); i++)
                    {
                        JToken          rinput = Data["Station"]["FailStation"]["Inputs"][i];
                        MESStationInput input  = Station.FailStation.Inputs.Find(t => t.DisplayName == rinput["DisplayName"].ToString());
                        if (input == null)
                        {
                            continue;
                        }
                        input.Value = rinput["Value"].ToString();
                        if (Data["ScanType"].ToString() == "Fail" && input.DisplayName == RCurrInput["DisplayName"].ToString())
                        {
                            CurrInput = input;
                        }
                    }
                }

                MESStation.MESReturnView.Station.CallStationReturn ret = new MESReturnView.Station.CallStationReturn();
                ret.ScanType = Data["ScanType"].ToString();
                //add by ZGJ 2018-03-19 清空之前的輸入動作執行後輸出到前台的消息
                CurrInput.Station.StationMessages.Clear();
                //調用處理邏輯
                CurrInput.Run();

                Station.MakeOutput();

                if (Data["ScanType"].ToString() == "Pass")
                {
                    if (Station.NextInput == null)
                    {
                        for (int i = 0; i < Station.Inputs.Count; i++)
                        {
                            if (Station.Inputs[i] == CurrInput)
                            {
                                if (i != Station.Inputs.Count - 1)
                                {
                                    ret.NextInput = Station.Inputs[i + 1];
                                }
                                else
                                {
                                    ret.NextInput = Station.Inputs[0];
                                }
                            }
                        }
                    }
                    else
                    {
                        ret.NextInput = Station.NextInput;
                    }
                }
                else if (Station.FailStation != null)
                {
                    if (Station.FailStation.NextInput == null)
                    {
                        for (int i = 0; i < Station.FailStation.Inputs.Count; i++)
                        {
                            if (Station.FailStation.Inputs[i] == CurrInput)
                            {
                                if (i != Station.FailStation.Inputs.Count - 1)
                                {
                                    ret.NextInput = Station.FailStation.Inputs[i + 1];
                                }
                                else
                                {
                                    ret.NextInput = Station.FailStation.Inputs[0];
                                }
                            }
                        }
                    }
                    else
                    {
                        ret.NextInput = Station.FailStation.NextInput;
                    }
                }


                //2018/02/05 肖倫 failStation的db以及dbPool為空的情況 Begin
                if (Station.FailStation != null)
                {
                    Station.FailStation.DBS   = null;
                    Station.FailStation.SFCDB = null;
                }
                //2018/02/05 肖倫 failStation的db以及dbPool為空的情況 end
                this.DBPools["SFCDB"].Return(SFCDB);
                this.DBPools["APDB"].Return(APDB);

                Station.SFCDB = null;
                Station.APDB  = null;

                ret.Station           = Station;
                StationReturn.Data    = ret;
                StationReturn.Status  = StationReturnStatusValue.Pass;
                StationReturn.Message = "Station '" + DisplayName + "' Input successfull.";
            }
            catch (Exception ee)
            {
                Station.MakeOutput();
                this.DBPools["SFCDB"].Return(SFCDB);
                this.DBPools["APDB"].Return(APDB);

                Station.SFCDB = null;
                Station.APDB  = null;
                MESStation.MESReturnView.Station.CallStationReturn ret = new MESReturnView.Station.CallStationReturn();
                ret.Station = Station;
                Station.StationMessages.Add(new MESReturnView.Station.StationMessage()
                {
                    Message = ee.Message, State = MESReturnView.Station.StationMessageState.Fail
                });
                Station.NextInput = CurrInput;

                StationReturn.Data    = ret;
                StationReturn.Status  = StationReturnStatusValue.Pass;
                StationReturn.Message = "Station '" + DisplayName + "' Input not successfull.";
            }
        }
Example #2
0
        public void InitStation(Newtonsoft.Json.Linq.JObject requestValue, Newtonsoft.Json.Linq.JObject Data, MESStationReturn StationReturn)
        {
            string  DisplayName = Data["DisplayStationName"]?.ToString();
            string  Token       = requestValue["Token"]?.ToString();
            string  Line        = Data["Line"]?.ToString();
            OleExec SFCDB       = this.DBPools["SFCDB"].Borrow();
            OleExec APDB        = this.DBPools["APDB"].Borrow();

            try
            {
                //從對象池中取工站,如不存在則新建一個
                MESStationBase retStation = null;
                if (StationPool.ContainsKey(Token + DisplayName))
                {
                    retStation = StationPool[Token + DisplayName];
                }
                else
                {
                    retStation = new MESStationBase();
                    StationPool.Add(Token + DisplayName, retStation);
                }
                retStation.StationOutputs.Clear();
                retStation.StationMessages.Clear();
                retStation.StationSession.Clear();
                retStation.DisplayOutput.Clear();
                retStation.Inputs.Clear();
                retStation.IP = this.IP;
                //add by 張官軍 2018-1-4 不添加的話,後面獲取該信息的時候回傳空
                retStation.LoginUser = LoginUser;
                //給工站對象賦公共值
                retStation.Init(DisplayName, Line, BU, DBPools);
                MESStation.MESReturnView.Station.CallStationReturn ret = new MESReturnView.Station.CallStationReturn();
                ret.Station = retStation;
                //用以執行InitInput.Run()  2018/01/30 SDL
                retStation.SFCDB = SFCDB;
                retStation.APDB  = APDB;
                //調用工站初始配置
                MESStationInput InitInput = retStation.Inputs.Find(t => t.Name == "StationINIT");
                if (InitInput != null)
                {
                    InitInput.Run();
                    retStation.Inputs.Remove(InitInput);
                }
                if (retStation.FailStation != null)
                {
                    InitInput = null;
                    InitInput = retStation.FailStation.Inputs.Find(t => t.Name == "StationINIT");
                    if (InitInput != null)
                    {
                        InitInput.Run();
                        retStation.FailStation.Inputs.Remove(InitInput);
                    }
                }

                StationReturn.Data    = ret;
                StationReturn.Status  = StationReturnStatusValue.Pass;
                StationReturn.Message = "Station '" + DisplayName + "'Init successfull.";
            } catch (Exception ee)
            {
                throw ee;
            }
            finally
            {
                this.DBPools["APDB"].Return(APDB);
                this.DBPools["SFCDB"].Return(SFCDB);
            }
        }