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."; } }
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); } }