public int RecordPanelStationDetail(string PanelNo, string Line, string StationName, string DeviceName, string Bu, OleExec DB, DB_TYPE_ENUM DBType) { int result = 0; string strSql = string.Empty; DataTable dt = new DataTable(); string errMsg = string.Empty; T_R_SN RSN = new T_R_SN(DB, DBType); if (DBType.Equals(DB_TYPE_ENUM.Oracle)) { strSql = $@"SELECT * FROM R_SN WHERE ID IN (SELECT SN FROM R_PANEL_SN WHERE PANEL='{PanelNo}')"; dt = DB.ExecSelect(strSql, null).Tables[0]; foreach (DataRow dr in dt.Rows) { RSN.RecordPassStationDetail(dr["SN"].ToString(), Line, StationName, DeviceName, Bu, DB); } } else { errMsg = MESReturnMessage.GetMESReturnMessage("MES00000019", new string[] { DBType.ToString() }); throw new MESReturnMessage(errMsg); } return(result); }
public static void OutLot(MESPubLab.MESStation.MESStationBase Station, MESPubLab.MESStation.MESStationInput Input, List <R_Station_Action_Para> Paras) { OleExec DB = Station.SFCDB; string strSql = ""; var SN_Session = Station.StationSession.Find(t => t.MESDataType == "SN" && t.SessionKey == "1"); SN sn = (SN)SN_Session.Value; var LotStates = DB.ORM.Queryable <R_LOT_STATUS, R_LOT_DETAIL> ((lot, detail) => lot.LOT_NO == detail.LOT_ID) .Where((lot, detail) => detail.SN == sn.SerialNo && detail.STATUS == "0" && SqlFunc.StartsWith(lot.LOT_NO, "LOT-")) .Select((lot, detail) => new { LOT = lot, Detail = detail }).ToList(); if (LotStates.Count == 0) { throw new Exception($@"{sn.SerialNo } not in Lot"); } T_R_SN TRS = new T_R_SN(DB, DB_TYPE_ENUM.Oracle); for (int i = 0; i < LotStates.Count; i++) { var LS = LotStates[i]; LS.Detail.STATUS = "1"; LS.Detail.EDIT_EMP = Station.LoginUser.EMP_NO; LS.Detail.EDIT_TIME = DateTime.Now; DB.ORM.Updateable <R_LOT_DETAIL>(LS.Detail).Where(t => t.ID == LS.Detail.ID).ExecuteCommand(); TRS.RecordPassStationDetail(sn.SerialNo, Station.Line, Station.StationName, LS.LOT.SAMPLE_STATION, Station.BU, DB); Station.StationMessages.Add(new StationMessage() { Message = $@"'{sn.SerialNo}' Scanout Lot'{LS.LOT.LOT_NO}','{LS.LOT.SAMPLE_STATION}'", State = StationMessageState.Message }); } }
public static void SNLinkPassAction_Old(MESPubLab.MESStation.MESStationBase Station, MESPubLab.MESStation.MESStationInput Input, List <R_Station_Action_Para> Paras) { SN SN = null; string ErrMessage = string.Empty; string wo = Station.Inputs.Find(s => s.DisplayName == "WO").Value.ToString(); string sn = Station.Inputs.Find(s => s.DisplayName == "SUB_SN").Value.ToString(); if (Paras.Count == 0) { throw new Exception("參數數量不正確!"); } MESStationSession SNLoadPoint = Station.StationSession.Find(t => t.MESDataType == Paras[0].SESSION_TYPE && t.SessionKey == Paras[0].SESSION_KEY); if (SNLoadPoint == null) { ErrMessage = MESReturnMessage.GetMESReturnMessage("MES00000052", new string[] { Paras[0].SESSION_TYPE + Paras[0].SESSION_KEY }); throw new MESReturnMessage(ErrMessage); } SN = (SN)SNLoadPoint.Value; T_R_SN TRS = new T_R_SN(Station.SFCDB, DB_TYPE_ENUM.Oracle); Row_R_SN RRS = (Row_R_SN)TRS.NewRow(); T_R_SN_STATION_DETAIL tr_sd = new T_R_SN_STATION_DETAIL(Station.SFCDB, DB_TYPE_ENUM.Oracle); Row_R_SN_STATION_DETAIL rr_sd = (Row_R_SN_STATION_DETAIL)tr_sd.NewRow(); RRS = TRS.getR_SNbySN(sn, Station.SFCDB); RRS.CURRENT_STATION = Station.StationName; RRS.NEXT_STATION = TRS.GetNextStation(SN.RouteID, Station.StationName, Station.SFCDB); RRS.VALID_FLAG = "0"; RRS.EDIT_EMP = Station.LoginUser.EMP_NO; RRS.EDIT_TIME = DateTime.Now; if (RRS.NEXT_STATION.ToUpper() == "JOBFINISH") { RRS.COMPLETED_FLAG = "1"; RRS.COMPLETED_TIME = DateTime.Now; } Station.SFCDB.ExecSQL(RRS.GetUpdateString(DB_TYPE_ENUM.Oracle)); TRS.RecordPassStationDetail(sn, Station.Line, Station.StationName, Station.StationName, Station.BU, Station.SFCDB); }
/// <summary> /// JOBSTOCK STATION PASS ACTION /// </summary> /// <param name="objWorkorder">wo obj</param> /// <param name="objSN">sn obj</param> /// <param name="Station">Station</param> /// <param name="confirmed_flag">confirmed_flag</param> public void JobStockPass(WorkOrder objWorkorder, SN objSN, MESPubLab.MESStation.MESStationBase Station, string confirmed_flag) { T_R_STOCK t_r_stock = new T_R_STOCK(Station.SFCDB, Station.DBType); T_R_SN t_r_sn = new T_R_SN(Station.SFCDB, Station.DBType); T_R_WO_BASE t_r_wo_base = new T_R_WO_BASE(Station.SFCDB, Station.DBType); T_R_STOCK_GT t_r_stock_gt = new T_R_STOCK_GT(Station.SFCDB, Station.DBType); T_C_SAP_STATION_MAP t_c_sap_station_map = new T_C_SAP_STATION_MAP(Station.SFCDB, Station.DBType); string gt_id = ""; #region write r_stock,r_stock_gt List <C_SAP_STATION_MAP> sapCodeList = t_c_sap_station_map.GetSAPStationMapBySkuOrderBySAPCodeASC(objWorkorder.SkuNO, Station.SFCDB); if (sapCodeList.Count == 0) { throw new MESDataObject.MESReturnMessage(MESDataObject.MESReturnMessage.GetMESReturnMessage("MES00000224", new string[] { objWorkorder.SkuNO })); } Row_R_STOCK_GT rowStockGT; R_STOCK_GT objGT = t_r_stock_gt.GetNotGTbjByWO(objWorkorder.WorkorderNo, confirmed_flag, Station.SFCDB); if (objGT == null) { gt_id = t_r_stock_gt.GetNewID(Station.BU, Station.SFCDB); rowStockGT = (Row_R_STOCK_GT)t_r_stock_gt.NewRow(); rowStockGT.ID = gt_id; rowStockGT.WORKORDERNO = objWorkorder.WorkorderNo; rowStockGT.SKUNO = objWorkorder.SkuNO; rowStockGT.TOTAL_QTY = 1; rowStockGT.FROM_STORAGE = objWorkorder.WorkorderNo; rowStockGT.TO_STORAGE = objWorkorder.STOCK_LOCATION; rowStockGT.SAP_FLAG = "0"; rowStockGT.CONFIRMED_FLAG = confirmed_flag; rowStockGT.SAP_STATION_CODE = sapCodeList.Last().SAP_STATION_CODE; rowStockGT.EDIT_EMP = Station.LoginUser.EMP_NO; rowStockGT.EDIT_TIME = Station.GetDBDateTime(); Station.SFCDB.ExecSQL(rowStockGT.GetInsertString(Station.DBType)); } else { rowStockGT = (Row_R_STOCK_GT)t_r_stock_gt.GetObjByID(objGT.ID, Station.SFCDB); gt_id = rowStockGT.ID; rowStockGT.TOTAL_QTY = rowStockGT.TOTAL_QTY + 1; rowStockGT.EDIT_EMP = Station.LoginUser.EMP_NO; rowStockGT.EDIT_TIME = Station.GetDBDateTime(); Station.SFCDB.ExecSQL(rowStockGT.GetUpdateString(Station.DBType)); } Row_R_STOCK rowStock = (Row_R_STOCK)t_r_stock.NewRow(); rowStock.ID = t_r_stock.GetNewID(Station.BU, Station.SFCDB); rowStock.SN = objSN.SerialNo; rowStock.WORKORDERNO = objWorkorder.WorkorderNo; rowStock.SKUNO = objWorkorder.SkuNO; rowStock.NEXT_STATION = objSN.NextStation; rowStock.FROM_STORAGE = objWorkorder.WorkorderNo; rowStock.TO_STORAGE = objWorkorder.STOCK_LOCATION; rowStock.CONFIRMED_FLAG = confirmed_flag; rowStock.SAP_FLAG = "0"; rowStock.EDIT_EMP = Station.LoginUser.EMP_NO; rowStock.EDIT_TIME = Station.GetDBDateTime(); rowStock.GT_ID = gt_id; Station.SFCDB.ExecSQL(rowStock.GetInsertString(Station.DBType)); #endregion #region update status Row_R_SN rowSN = (Row_R_SN)t_r_sn.GetObjByID(objSN.ID, Station.SFCDB); rowSN.NEXT_STATION = "JOBFINISH"; rowSN.STOCK_STATUS = "1"; rowSN.COMPLETED_FLAG = "1"; rowSN.COMPLETED_TIME = Station.GetDBDateTime(); rowSN.STOCK_IN_TIME = Station.GetDBDateTime(); rowSN.EDIT_EMP = Station.LoginUser.EMP_NO; rowSN.EDIT_TIME = Station.GetDBDateTime(); Station.SFCDB.ExecSQL(rowSN.GetUpdateString(Station.DBType)); t_r_sn.RecordPassStationDetail(rowSN.SN, Station.Line, Station.StationName, Station.StationName, Station.BU, Station.SFCDB); t_r_wo_base.UpdateFinishQty(objWorkorder.WorkorderNo, 1, Station.SFCDB); #endregion }
public static void SNInputToLot(MESPubLab.MESStation.MESStationBase Station, MESPubLab.MESStation.MESStationInput Input, List <R_Station_Action_Para> Paras) { OleExec DB = Station.SFCDB; string strSql = ""; var LOT_session = Station.StationSession.Find(t => t.MESDataType == "LOTNO" && t.SessionKey == "1"); if (LOT_session == null) { LOT_session = new MESStationSession() { MESDataType = "LOTNO", SessionKey = "1" }; Station.StationSession.Add(LOT_session); } var LOT_COUNT_session = Station.StationSession.Find(t => t.MESDataType == "LOT_COUNT" && t.SessionKey == "1"); if (LOT_COUNT_session == null) { LOT_COUNT_session = new MESStationSession() { MESDataType = "LOT_COUNT", SessionKey = "1", Value = 0 }; Station.StationSession.Add(LOT_COUNT_session); } var SN_Session = Station.StationSession.Find(t => t.MESDataType == "SN" && t.SessionKey == "1"); SN sn = (SN)SN_Session.Value; if (sn.CompletedFlag != "1") { throw new Exception($@"'{sn.SerialNo}' is not Completed"); } string lotno = "";//LOT_session.Value.ToString(); T_R_LOT_STATUS TRLS = new T_R_LOT_STATUS(DB, DB_TYPE_ENUM.Oracle); Row_R_LOT_STATUS RRLS = (Row_R_LOT_STATUS)TRLS.NewRow(); if (LOT_session.Value == null) { RRLS.ID = TRLS.GetNewID(Station.BU, DB); RRLS.SKUNO = sn.SkuNo; RRLS.LOT_QTY = 0; RRLS.LOT_STATUS_FLAG = "0"; RRLS.SAMPLE_STATION = Station.DisplayName; RRLS.CLOSED_FLAG = "0"; RRLS.LOT_NO = SNMaker.SNmaker.GetNextSN("HWDLOT", DB); RRLS.EDIT_TIME = DateTime.Now; RRLS.EDIT_EMP = Station.LoginUser.EMP_NO; DB.ExecSQL(RRLS.GetInsertString(DB_TYPE_ENUM.Oracle)); RRLS.AcceptChange(); lotno = RRLS.LOT_NO; } else { lotno = LOT_session.Value.ToString(); strSql = $@"select * from R_LOT_STATUS where lot_no = '{lotno}'"; var d = DB.RunSelect(strSql); RRLS.loadData(d.Tables[0].Rows[0]); } LOT_session.Value = lotno; if (RRLS.CLOSED_FLAG == "1") { throw new Exception($@"LotNo '{RRLS.LOT_NO}' is closed"); } strSql = $@"select l.lot_no from r_lot_status l inner join r_lot_detail d on l.lot_no = d.lot_id where sn = '{sn.SerialNo}' and l.lot_no like 'LOT-%' and d.status = '0'"; var data = DB.RunSelect(strSql); if (data.Tables[0].Rows.Count > 0) { throw new Exception($@"'{sn.SerialNo}' is in lot'{data.Tables[0].Rows[0]["lot_no"].ToString()}'"); } if (sn.SkuNo != RRLS.SKUNO) { throw new Exception($@"'{sn.SerialNo}': '{sn.SkuNo}' but lot is '{RRLS.SKUNO}'"); } T_R_LOT_DETAIL TRLD = new T_R_LOT_DETAIL(DB, DB_TYPE_ENUM.Oracle); R_LOT_DETAIL R = new R_LOT_DETAIL(); R.ID = TRLD.GetNewID(Station.BU, DB); R.LOT_ID = RRLS.LOT_NO; R.SN = sn.SerialNo; R.STATUS = "0"; R.EDIT_EMP = Station.LoginUser.EMP_NO; R.EDIT_TIME = DateTime.Now; DB.ORM.Insertable <R_LOT_DETAIL>(R).ExecuteCommand(); T_R_SN TRS = new T_R_SN(DB, DB_TYPE_ENUM.Oracle); TRS.RecordPassStationDetail(sn.SerialNo, Station.Line, Station.StationName, Station.DisplayName, Station.BU, DB); int count = DB.ORM.Queryable <R_LOT_DETAIL>().Where(t => t.LOT_ID == R.LOT_ID).Count(); RRLS.LOT_QTY = count; RRLS.EDIT_TIME = DateTime.Now; RRLS.EDIT_EMP = Station.LoginUser.EMP_NO; DB.ExecSQL(RRLS.GetUpdateString(DB_TYPE_ENUM.Oracle)); RRLS.AcceptChange(); LOT_COUNT_session.Value = count; Station.NextInput = Station.Inputs[1]; }