using Mesnac.Compressor.Data; using Mesnac.Compressor.Entity; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; namespace Mesnac.Compressor.Station { public class Common:BasePLC { /// /// 需要条码绑定时用这个函数 /// /// /// 系统内部生成的条码 /// 物料上面扫的条码 /// /// /// public bool UpdateTray(string RFID, string barcode, string semibarcode,string stationID,int OKNG) { try { DbHandler dbHelper = new DbHandler(); StringBuilder sb = new StringBuilder(); sb.Append("UPDATE dbo.T_RP_WorkTrayRealTimeInfo SET "); sb.Append("barCode='").Append(barcode).Append("',"); sb.Append("SemiBarcode='").Append(semibarcode).Append("',"); sb.Append("CurrentStation='").Append(stationID).Append("',"); sb.Append("State='").Append(OKNG.ToString()).Append("',"); sb.Append("updateTime='").Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")).Append("' "); sb.Append("WHERE RFIDNum='").Append(RFID).Append("'"); dbHelper.ExecSql(sb.ToString()); return true; } catch { return false; } } /// /// /// /// /// /// /// /// public bool UpdateTray(string RFID, string barcode, string stationID, int OKNG) { try { DbHandler dbHelper = new DbHandler(); StringBuilder sb = new StringBuilder(); sb.Append("UPDATE dbo.T_RP_WorkTrayRealTimeInfo SET "); sb.Append("barCode='").Append(barcode).Append("',"); sb.Append("CurrentStation='").Append(stationID).Append("',"); sb.Append("State='").Append(OKNG.ToString()).Append("',"); sb.Append("updateTime='").Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")).Append("' "); sb.Append("WHERE RFIDNum='").Append(RFID).Append("'"); dbHelper.ExecSql(sb.ToString()); return true; } catch { return false; } } /// /// 重投更新条码信息,重投需要根据拆解时的指定工位来 /// /// /// /// /// /// public bool UpdateTrayChongtou(string RFID, string barcode) { StringBuilder sb = new StringBuilder(); DbHandler db = new DbHandler(); try { db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; sb.Append("EXEC SP_Pro_ChongTou '"); sb.Append(RFID).Append("','"); sb.Append(barcode).Append("'"); db.dbHelper.CommandText = sb.ToString(); return Convert.ToInt32(db.dbHelper.ToScalar()) == 0; } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString())); return false; } } public bool InsertHistoryTray(string RFID, string barcode, string stationid) { try { StringBuilder sb = new StringBuilder(); sb.Append("INSERT INTO dbo.T_RP_WorkTrayHistoryInfo(barCode,RFIDNum,CurrentStation) VALUES('"); sb.Append(barcode).Append("', '").Append(RFID).Append("', '").Append(stationid).Append("')"); DbHandler db = new DbHandler(); db.ExecSql(sb.ToString()); return true; } catch { return false; } } /// /// 通过壳体条码,查找内部M主条码 /// /// /// public string GetMainBarcode(string semibarcode) { StringBuilder sb = new StringBuilder(); try { sb.Append("select top(1)barcode from T_SY_TraceState "); sb.Append(" where SemiBarcode_A='").Append(semibarcode).Append("' order by BeginTime desc"); DbHandler db = new DbHandler(); db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; db.dbHelper.CommandText = sb.ToString(); var obj = db.dbHelper.ToScalar(); if (obj != null) { return obj.ToString(); } else { return ""; } } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("获取系统条码语句错误:" + sb.ToString() + "/r/n" + e.ToString()); return ""; } } public string GetCurrentStationByRFID(string RFID) { StringBuilder sb = new StringBuilder(); try { sb.Append("SELECT CurrentStation FROM dbo.T_RP_WorkTrayRealTimeInfo "); sb.Append(" where RFIDNum='").Append(RFID).Append("'"); DbHandler db = new DbHandler(); db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; db.dbHelper.CommandText = sb.ToString(); var obj = db.dbHelper.ToScalar(); if (obj != null) { return obj.ToString(); } else { return ""; } } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("GetCurrentStationByRFID获取当前工位语句错误:" + sb.ToString() + "/r/n" + e.ToString()); return ""; } } /// /// /// /// /// public string GetTraySemiBarcode(string RFID) { StringBuilder sb = new StringBuilder(); try { sb.Append("select semibarcode from T_RP_WorkTrayRealTimeInfo "); sb.Append(" where RFIDNum='").Append(RFID).Append("'"); DbHandler db = new DbHandler(); db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; db.dbHelper.CommandText = sb.ToString(); var obj = db.dbHelper.ToScalar(); if (obj != null) { return obj.ToString(); } else { return ""; } } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("获取条码语句错误:" + sb.ToString() + "/r/n" + e.ToString()); return ""; } } /// /// 判断数据是否数已经上传 /// /// /// public bool CheckNewData(StationInfo station, string barcode) { return true; if (string.IsNullOrEmpty(barcode)) { barcode = GetTraySemiBarcode(station.Data.RFIDNo); } if (string.IsNullOrEmpty(barcode)) { ICSharpCode.Core.LoggingService.Warn("CheckNewData-" + station.StationCode + " 通过RFID号:" + station.Data.RFIDNo + "未找到对应条码"); return false; } station.Data.semibacode = barcode; if (!JuadgeMaskID(barcode, station.Data.MaskID.ToString(), station.TableName)) { //ICSharpCode.Core.LoggingService.Debug("工位:" + station.StationCode + "的RFID:" + station.Data.RFIDNo + "数据已上传。条码号:" + barcode + " 任务号:" + station.Data.MaskID.ToString()); return false; } return true; } public void SaveData(StationInfo station) { SqlHelper sh = new SqlHelper(); DbHandler db = new DbHandler(); //获取系统A条码 string barcode = GetTraySemiBarcode(station.Data.RFIDNo); //获取系统M码 string Mainbarcode = GetMainBarcode(barcode); string martercode = station.Data.MaterialBarcode; if (string.IsNullOrEmpty(barcode)) { ICSharpCode.Core.LoggingService.Warn(station.StationCode + " 通过RFID号:" + station.Data.RFIDNo + "未找到对应条码" + barcode); return; } station.Data.semibacode = barcode; station.Data.MainBarcode = Mainbarcode; ICSharpCode.Core.LoggingService.Warn("开始更新当前工位信息:" + station.StationCode + " RFID号:" + station.Data.RFIDNo + "产品码:" + station.Data.semibacode + "主线码:" + station.Data.MainBarcode); UpdateTraceStation(station.stationID, Mainbarcode); //支线条码 if (station.Data.MaterialBarcodeUpdate) { station.Data.semibacode = barcode; station.Data.MainBarcode = Mainbarcode; station.Data.MaterialBarcode = martercode; if (station.Data.MaterialBarcode != "") { ICSharpCode.Core.LoggingService.Warn("开始更新物料信息:" + station.StationCode + " RFID号:" + station.Data.RFIDNo + "产品码:" + station.Data.semibacode + "主线码:" + station.Data.MainBarcode); UpdateMaterialCode(station); } ICSharpCode.Core.LoggingService.Warn("开始上传支线信息:" + station.StationCode + " RFID号:" + station.Data.RFIDNo + "产品码:" + station.Data.semibacode + "主线码:" + station.Data.MainBarcode); updateSubInfo(station); } //更新当前工位 ///这里要看看换线是否会重复插入数据 if (station.Data.BarcodeUpdate) { if (station.IfMainline) { UpdateTraceBarcodeStation(station); } //updatebarcode(station); } //插入新数据 string InsertSql = sh.DataInsertSql2(station); db.ExecSql(InsertSql); //如果是重投品,跟新重投次数 //if (station.Data.Restart && !string.IsNullOrEmpty(station.Data.ProductBarcode)) //{ // UpdaterestartCount(station.Data.ProductBarcode); // ICSharpCode.Core.LoggingService.Debug("更新重投次数成功"); //} //不合格插入不合格工位 if (station.Data.ProductOkNg == 2) { UpdateTraceNgStation(station); //UnbandTray(station); } //更新托盘信息 UpdateTray(station.Data.RFIDNo, Mainbarcode, station.Data.semibacode, station.stationID, station.Data.ProductOkNg); ICSharpCode.Core.LoggingService.Debug("工位:" + station.StationCode + " 保存数据成功。托盘号:" + station.Data.RFIDNo); } /// /// /// public void SaveStationData(StationInfo station, StationType stationType) { switch (stationType) { case StationType.FirstStation: SaveData(station); break; case StationType.NormarlStation: SaveData(station); break; case StationType.ChangeLineStation: SaveData(station); break; case StationType.LineEnd: SaveData(station); break; default: SaveData(station); break; } } ///上传支线信息 private void updateSubInfo(StationInfo station) { foreach (var sub in station.Data.subLineList) { if (!string.IsNullOrEmpty(sub.barcode)) { //判断是否存在信息,存在则更新 ICSharpCode.Core.LoggingService.Warn("上传支线信息:" + station.StationCode + " RFID号:" + station.Data.RFIDNo + "产品码:" + station.Data.semibacode + "主线码:" + station.Data.MainBarcode + "支线条码:"+ sub.barcode); SubInfoUpdate(sub.barcode, sub.lineID, station.Data.semibacode); } } } /// /// 上传支线信息 /// /// /// /// /// public bool SubInfoUpdate(string barcode, string lineid, string semibacode) { StringBuilder sb = new StringBuilder(); DbHandler db = new DbHandler(); try { db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; sb.Append("EXEC SP_Pro_SubLineInfo '"); sb.Append(barcode).Append("','"); sb.Append(lineid).Append("','"); sb.Append(semibacode).Append("'"); db.dbHelper.CommandText = sb.ToString(); return Convert.ToInt32(db.dbHelper.ToScalar()) == 0; } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString())); return false; } } /// /// 更新trace表产品条码和T_RP_SemiProInfo表产品条码 /// /// private void updatebarcode(StationInfo station) { if (string.IsNullOrEmpty(station.Data.ProductBarcode)) { return; } UpdateSemiInfo(station); if (station.IfMainline) { //这个现在好像没用 UpdateTraceBarcodeStation(station); //这边是个坑啊 yinzf 2023-3-4 delete if (station.stationID != "18" || station.stationID != "24") { ICSharpCode.Core.LoggingService.Warn("更新trace表产品条码和T_RP_SemiProInfo表产品条码,工位:"+ station.stationID) ; SubInfoUpdate(station.Data.ProductBarcode, station.lineID, station.Data.semibacode); } } } private void UpdateSemiInfo(StationInfo station) { StringBuilder sb = new StringBuilder(); try { //去掉换行符 if (!string.IsNullOrEmpty(station.Data.semibacode)) { string barcode = station.Data.semibacode.Replace("\r", "").Replace("\n", "").Replace("\t", ""); sb.Append(" UPDATE dbo.T_RP_SemiProInfo SET ProductBarcode='").Append(station.Data.ProductBarcode); sb.Append("' WHERE SemiBarcode='").Append(barcode).Append("' "); DbHandler db = new DbHandler(); db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; db.dbHelper.CommandText = sb.ToString(); db.dbHelper.ExecuteNonQuery(); } else { ICSharpCode.Core.LoggingService.Error("Trace表NG工位更新错误,station.Data.semibacode为null!"); } } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("Trace表NG工位更新错误:" + sb.ToString() + "/r/n" + e.ToString()); } } /// /// 更新物料信息 /// /// private void UpdateMaterialCode(StationInfo station) { StringBuilder sb = new StringBuilder(); try { sb.Append(" insert into dbo.T_RP_MaterialBarcode(barcode,productCode,stationID) values('"); sb.Append(station.Data.MainBarcode).Append("','"); sb.Append(station.Data.MaterialBarcode).Append("','"); sb.Append(station.stationID).Append("')"); DbHandler db = new DbHandler(); db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = sb.ToString(); ICSharpCode.Core.LoggingService.Info("更新物料信息:" + sb.ToString() + station.Data.MainBarcode +","+ station.Data.MaterialBarcode + "," + station.stationID); db.dbHelper.ExecuteNonQuery(); } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("物料条码更新出错:" + sb.ToString() + "/r/n" + e.ToString()); } } /// /// 插入物料关系表 /// /// public void InsertBarcodeRelationShip(string SemiBarcode,string ProductBarcode,string SemiBarcode_Line,int LineID) { StringBuilder sb = new StringBuilder(); try { sb.Append(" insert into dbo.T_RP_BarcodeRelationShip(SemiBarcode,ProductBarcode,SemiBarcode_Line,LineID,StateFlag) values('"); sb.Append(SemiBarcode).Append("','"); sb.Append(ProductBarcode).Append("','"); sb.Append(SemiBarcode_Line).Append("','"); sb.Append(LineID).Append("','"); sb.Append(1).Append("')"); DbHandler db = new DbHandler(); db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = sb.ToString(); ICSharpCode.Core.LoggingService.Info("插入物料信息:" + sb.ToString() + SemiBarcode + "," + ProductBarcode + "," + LineID); db.dbHelper.ExecuteNonQuery(); } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("物料信息插入出错:" + sb.ToString() + "/r/n" + e.ToString()); } } public void UpdateTraceNgStation(StationInfo station) { StringBuilder sb = new StringBuilder(); try { sb.Append(" UPDATE dbo.T_SY_TraceState SET NGStationID='").Append(station.stationID); sb.Append("' WHERE barcode='").Append(station.Data.MainBarcode).Append("' "); DbHandler db = new DbHandler(); db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; db.dbHelper.CommandText = sb.ToString(); db.dbHelper.ExecuteNonQuery(); } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("Trace表NG工位更新错误:" + sb.ToString() + "/r/n" + e.ToString()); } } /// /// 更新当前工位 /// /// public void UpdateTraceStation(string stationID,string MainBarcode) { DbHandler db = new DbHandler(); if (db.dbHelper == null) { return; } try { db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; string sql = "Exec SP_Pro_UpdateTraceStationBybarcode @CurrentStationID,@MainBarcode"; db.dbHelper.AddParameter("@CurrentStationID", stationID); db.dbHelper.AddParameter("@MainBarcode", MainBarcode); db.dbHelper.CommandText = sql; ICSharpCode.Core.LoggingService.Info("更新当前工位信息:" + sql + stationID + MainBarcode); db.dbHelper.ExecuteNonQuery(); } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString())); } } /// /// 更新当前工位 /// /// public void UpdateTraceBarcodeStation(StationInfo station) { StringBuilder sb = new StringBuilder(); DbHandler db = new DbHandler(); try { db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; sb.Append(" UPDATE dbo.T_SY_TraceState SET ProductBarcode='").Append(station.Data.ProductBarcode); sb.Append("' WHERE barcode='").Append(station.Data.MainBarcode).Append("' "); db.dbHelper.CommandText = sb.ToString(); db.dbHelper.ExecuteNonQuery(); } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("Trace工位更新错误:" + sb.ToString() + "/r/n" + e.ToString()); } } /// /// 判断当前条码和任务号是否上传过 /// /// /// /// /// 上传过返回false public bool JuadgeMaskID(string barcode, string MaskID, string TableName) { StringBuilder sb = new StringBuilder(); DbHandler db = new DbHandler(); try { db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; sb.Append("EXEC SP_Pro_Changeflag '"); sb.Append(barcode).Append("','"); sb.Append(MaskID).Append("','"); sb.Append(TableName).Append("'"); db.dbHelper.CommandText = sb.ToString(); return Convert.ToInt32(db.dbHelper.ToScalar()) == 0; } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString())); return false; } } /// /// 更新当前工位 /// /// public void UpdaterestartCount(string Barcode) { StringBuilder sb = new StringBuilder(); try { sb.Append(" exec SP_Pro_UpdateRestartCount '").Append(Barcode).Append("'"); DbHandler db = new DbHandler(); db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; db.dbHelper.CommandText = sb.ToString(); db.dbHelper.ExecuteNonQuery(); } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("更新重投次数错误:" + sb.ToString() + "/r/n" + e.ToString()); } } /// /// 生成新的产品信息 /// /// public string CreatNewProduct(StationInfo station) { string MainBarcode = ""; try { DbHandler db = new DbHandler(); //StationInsertInfo sinsert = new StationInsertInfo(); //生成系统条码, MainBarcode = db.GetLastMainBarcode("M"); } catch (Exception e) { ICSharpCode.Core.LoggingService.Error(e.ToString()); } return MainBarcode; } /// /// 生成新的产品信息 /// /// public string CreatNewSemibarcode(string Head, string lineID) { string semibarcode = ""; try { DbHandler db = new DbHandler(); //生成系统条码, semibarcode = db.GetLastSemiBarcode(Head, lineID); } catch (Exception e) { ICSharpCode.Core.LoggingService.Error(e.ToString()); } return semibarcode; } /// /// 解除绑定 /// /// public void UnbandTray(StationInfo station) { StringBuilder sb = new StringBuilder(); try { sb.Append("Update T_RP_WorkTrayRealTimeInfo set barcode='',Semibarcode='',state='0' "); sb.Append(" where RFIDNum='").Append(station.Data.RFIDNo).Append("'"); DbHandler db = new DbHandler(); db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; db.dbHelper.CommandText = sb.ToString(); db.dbHelper.ExecuteNonQuery(); } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("获取条码语句错误:" + sb.ToString() + "/r/n" + e.ToString()); } } public string getChongTouState(string productbarcode , string abarcode) { StringBuilder sb = new StringBuilder(); try { if (abarcode == "" && productbarcode!= "") { sb.Append(" SELECT TOP(1) ISDis FROM dbo.T_SY_TraceState WHERE productbarcode='").Append(productbarcode).Append("' order by BeginTime desc"); } else if (productbarcode == "" && abarcode != "") { sb.Append(" SELECT TOP(1) ISDis FROM dbo.T_SY_TraceState WHERE SemiBarcode_A='").Append(abarcode).Append("' order by BeginTime desc"); } DbHandler db = new DbHandler(); db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; db.dbHelper.CommandText = sb.ToString(); var obj = db.dbHelper.ToScalar(); if (obj != null) { return obj.ToString(); } else { return ""; } } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("Trace工位查询错误:" + sb.ToString() + "/r/n" + e.ToString()); return ""; } } public string getSemiBacode(string productbarcode) { StringBuilder sb = new StringBuilder(); try { sb.Append(" SELECT TOP(1) semibarcode_A FROM dbo.T_SY_TraceState WHERE productbarcode='").Append(productbarcode).Append("' order by BeginTime desc"); DbHandler db = new DbHandler(); db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; db.dbHelper.CommandText = sb.ToString(); var obj = db.dbHelper.ToScalar(); if (obj != null) { return obj.ToString(); } else { return ""; } } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("Trace工位查询错误:" + sb.ToString() + "/r/n" + e.ToString()); return ""; } } #region 判断是否工作代码,yinzf 2023-3-1 public bool PreStationState(StationInfo station) { return false; } public string GetFirstStationIDByStationID(string StationID) { string Flag = ""; StringBuilder sb = new StringBuilder(); try { sb.Append(" select PreStationID from T_BD_SubStation where StationID ='").Append(StationID).Append("' "); DbHandler db = new DbHandler(); db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; db.dbHelper.CommandText = sb.ToString(); var obj = db.dbHelper.ToScalar(); if (obj != null) { return obj.ToString(); } else { return ""; } } catch (Exception ex) { return Flag; } } /// /// 换线工位互锁验证 /// /// /// /// public bool ChangeLineStationHaveWork(StationInfo station) { StringBuilder sb = new StringBuilder(); DbHandler db = new DbHandler(); try { db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; sb.Append("EXEC SP_Pro_ChangeLineCurruntState '"); sb.Append(station.Data.ProductBarcode).Append("','"); sb.Append(station.stationID).Append("'"); db.dbHelper.CommandText = sb.ToString(); var obj = db.dbHelper.ToScalar(); int result = Convert.ToInt32(obj); if (result > 1) { return false; } else { return true; } } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString())); return false; } } public bool IsReStartWork(StationInfo stat) { bool bFlag = false; try { //先根据托盘号查询A码 string Abarcode = GetTraySemiBarcode(stat.Data.RFIDNo); if (!string.IsNullOrEmpty(Abarcode)) { string ISDis = getChongTouState("", Abarcode); if (!string.IsNullOrEmpty(ISDis)) { //重投 if (ISDis == "1") { ICSharpCode.Core.LoggingService.Debug(stat.StationCode + "开始查询[" + stat.Data.RFIDNo + "]托盘的产品为重投"); bFlag = true; } else { bFlag = false; } } } return bFlag; } catch (Exception ex) { return bFlag; } } /// /// 判断托盘是否为空 /// state=0则表示空,state=2表示不合格,state=1表示合格 /// /// /// public bool TrayIsNull(StationInfo stat,out WorkTray tray) { tray = new WorkTray(); try { DbHandler db = new DbHandler(); //判断产品当前状态 ICSharpCode.Core.LoggingService.Debug(stat.StationCode + "开始查询["+ stat.Data.RFIDNo + "]托盘信息"); tray = db.GetProductQuality(stat.Data.RFIDNo); if (!tray.SemiBarcode.Equals(string.Empty)) { return false; } else { ICSharpCode.Core.LoggingService.Warn("查询[" + stat.Data.RFIDNo + "]托盘所属产品主码未绑定"); return true; } } catch (Exception e) { ICSharpCode.Core.LoggingService.Warn("TrayIsNull函数错误" + e.ToString()); return false; } } /// /// 通过RFID获取当前托盘信息 /// /// /// public WorkTray GetTrayInfoByRFID(StationInfo stat) { WorkTray tray = new WorkTray(); try { DbHandler db = new DbHandler(); //判断产品当前状态 tray = db.GetProductQuality(stat.Data.RFIDNo); return tray; } catch (Exception e) { ICSharpCode.Core.LoggingService.Warn("TrayIsNull函数错误" + e.ToString()); return tray; } } /// /// 通过物料条码获取当前托盘信息 /// /// /// public WorkTray GetTrayInfoByBarcode(StationInfo stat) { WorkTray tray = new WorkTray(); try { DbHandler db = new DbHandler(); //判断产品当前状态 tray = db.GetTrayInfoByBarcode(stat.Data.MainBarcode); return tray; } catch (Exception e) { ICSharpCode.Core.LoggingService.Warn("TrayIsNull函数错误" + e.ToString()); return tray; } } /// /// 判断产品当前质量 /// /// /// public bool ProductQuality(WorkTray workTray) { return workTray.OKNG == 1; } /// /// 上一工位是否已经做了,看currentstion /// /// /// public bool PreStationInfo(StationInfo stat,string Epc) { DbHandler db = new DbHandler(); bool pre = db.GetPreWorkInfo(Epc, stat.stationID); if (!pre) { ICSharpCode.Core.LoggingService.Warn("工位:" + stat.StationName + ",信息:托盘 " + Epc + ":没有上一工位工作信息"); } return pre; } /// /// 获取当前工位质量 /// /// /// public bool CurrentStationInfo(StationInfo stat,string epc) { DbHandler db = new DbHandler(); bool workready = db.CurrentStationHaveWork(stat.stationID, epc); if (workready) { ICSharpCode.Core.LoggingService.Warn("工位:" + stat.StationName + ",信息:托盘 " + epc + "当前工位已完工" ); } return workready; } public string LastWorkProductionInfo(string barcode,string TableName) { string iflag = ""; try { StringBuilder sb = new StringBuilder(); sb.Append(" SELECT TOP(1) State FROM " + TableName + " WHERE ScanBarcode='").Append(barcode).Append("' order by InsertTime desc "); DbHandler db = new DbHandler(); db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; db.dbHelper.CommandText = sb.ToString(); var obj = db.dbHelper.ToScalar(); if (obj != null) { return obj.ToString(); } else { return ""; } } catch (Exception ex) { return iflag; } } public bool IsReStartProduction(string barcode) { bool iflag = false; //根据主线码查询是否重投 StringBuilder sb = new StringBuilder(); try { sb.Append(" SELECT TOP(1) ISDis FROM dbo.T_SY_TraceState WHERE SemiBarcode_A='").Append(barcode).Append("' "); DbHandler db = new DbHandler(); db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; db.dbHelper.CommandText = sb.ToString(); var obj = db.dbHelper.ToScalar(); if (obj != null) { if (obj.ToString() != "0") { iflag = true; } return iflag; } else { return iflag; } } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("Trace工位查询错误:" + sb.ToString() + "/r/n" + e.ToString()); return iflag; } } public bool Chongtou(StationInfo station) { ICSharpCode.Core.LoggingService.Debug("重投数据"); //判断是否为重投 string ISDis = getChongTouState(station.Data.ProductBarcode, ""); if (ISDis == "2") { //获取A码 ICSharpCode.Core.LoggingService.Debug("获取产品码:"+ station.Data.ProductBarcode); station.Data.semibacode = getSemiBacode(station.Data.ProductBarcode); UpdateTrayChongtou(station.Data.RFIDNo, station.Data.semibacode); //判断当前工位是否可以过滤 if (this.CurrentStationInfo(station, station.Data.RFIDNo)) { this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.NG); return true; } else { return false; } } //没查询到绑定信息 else if (ISDis == "") { //插入trace表 string ABarCode = CreatNewSemibarcode("A", "1"); //创建新的产品 string mainBarcode = CreatNewProduct(station); DbHandler db = new DbHandler(); //查询当前的机种型号,不是机种要具体到型号 string machineID = db.GetNowProductionInfo(); db.InsertTrace(mainBarcode, ABarCode, station.Data.ProductBarcode, machineID); return false; } else { return false; } } public bool IsSelectAllStationData(string stationID) { bool iflag = false; StringBuilder sb = new StringBuilder(); try { sb.Append(" select IsNGStation from T_BD_SubStation WHERE StationID='").Append(stationID).Append("' "); DbHandler db = new DbHandler(); db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; db.dbHelper.CommandText = sb.ToString(); var obj = db.dbHelper.ToScalar(); if (obj != null) { if (obj.ToString() != "0") { iflag = true; } return iflag; } else { return iflag; } } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("MES功能开关状态查询错误:" + sb.ToString() + "/r/n" + e.ToString()); return iflag; } } public bool IsOpen(string stationID) { bool iflag = false; StringBuilder sb = new StringBuilder(); try { sb.Append(" select IsShow from T_BD_SubStation WHERE StationID='").Append(stationID).Append("' "); DbHandler db = new DbHandler(); db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; db.dbHelper.CommandText = sb.ToString(); var obj = db.dbHelper.ToScalar(); if (obj != null) { if (obj.ToString() != "0") { iflag = true; } return iflag; } else { return iflag; } } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("MES功能开关状态查询错误:" + sb.ToString() + "/r/n" + e.ToString()); return iflag; } } /// /// 静盘工位检验质量 /// /// /// public bool GetJPProductionQuality(string barcode) { bool iflag = false; StringBuilder sb = new StringBuilder(); try { sb.Append(" SELECT TOP(1) State FROM dbo.T_RP_StationPara_S320 WHERE ScanBarcode= '").Append(barcode).Append("' ").Append(" order by InsertTime desc"); DbHandler db = new DbHandler(); db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; db.dbHelper.CommandText = sb.ToString(); var obj = db.dbHelper.ToScalar(); if (obj != null) { if (obj.ToString() == "1") { iflag = true; } return iflag; } else { return iflag; } } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("静盘工位信息查询错误:"+ barcode + sb.ToString() + "/r/n" + e.ToString()); return iflag; } } /// /// 通过静盘码查询动静盘绑定关系 /// /// /// public DJPBarCodeRelationShip GetProductQuality(string JPBarCode) { DJPBarCodeRelationShip dJPBarCodeRelationShip = new DJPBarCodeRelationShip(); bool iflag = false; StringBuilder sb = new StringBuilder(); try { sb.Append(" SELECT TOP(1) * FROM dbo.T_DJP_BarCodeRelationShip WHERE JPBarCode= '").Append(JPBarCode).Append("' ").Append(" order by RecordTime desc"); DbHandler db = new DbHandler(); db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; db.dbHelper.CommandText = sb.ToString(); DataTable dt = db.dbHelper.ToDataTable(); if (dt != null && dt.Rows.Count > 0) { dJPBarCodeRelationShip.DPBarCode = dt.Rows[0]["DPBarCode"].ToString(); dJPBarCodeRelationShip.JPBarCode = dt.Rows[0]["JPBarCode"].ToString(); } else { return dJPBarCodeRelationShip; } return dJPBarCodeRelationShip; } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("静盘工位信息查询错误:" + JPBarCode + sb.ToString() + "/r/n" + e.ToString()); return null; } } public string GetSemiBarcodeByProductBarCode(string KT_BarCode) { string SemiBarcode = ""; StringBuilder sb = new StringBuilder(); try { sb.Append(" SELECT TOP(1) SemiBarcode_A FROM dbo.T_SY_TraceState WHERE ProductBarcode= '").Append(KT_BarCode).Append("' ").Append(" order by BeginTime desc"); DbHandler db = new DbHandler(); db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; db.dbHelper.CommandText = sb.ToString(); var obj = db.dbHelper.ToScalar(); if (obj != null) { SemiBarcode = obj.ToString(); return SemiBarcode; } else { return SemiBarcode; } } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("A码信息查询错误:" + KT_BarCode + sb.ToString() + "/r/n" + e.ToString()); return SemiBarcode; } } public string GetMBarcodeByProductBarCode(string KT_BarCode) { string SemiBarcode = ""; StringBuilder sb = new StringBuilder(); try { sb.Append(" SELECT TOP(1) Barcode FROM dbo.T_SY_TraceState WHERE ProductBarcode= '").Append(KT_BarCode).Append("' ").Append(" order by BeginTime desc"); DbHandler db = new DbHandler(); db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; db.dbHelper.CommandText = sb.ToString(); var obj = db.dbHelper.ToScalar(); if (obj != null) { SemiBarcode = obj.ToString(); return SemiBarcode; } else { return SemiBarcode; } } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("M码信息查询错误:" + KT_BarCode + sb.ToString() + "/r/n" + e.ToString()); return SemiBarcode; } } public bool GetStationNGBySemiBarCode(string SemiBarCode) { bool iflag = false; try { DbHandler db = new DbHandler(); if (db.dbHelper == null) { return iflag; } db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; string sql = "Exec pro_AllProductionQualityInfo @BarCode"; db.dbHelper.AddParameter("@BarCode", SemiBarCode); db.dbHelper.CommandText = sql; DataSet ds = (DataSet)db.dbHelper.ToDataSet(); DataTable dt = ds.Tables[0]; if (dt != null && dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { //这里如果要判断最后一工位与倒数第二个工位互锁,取ID=16 string s = dt.Rows[i]["State"].ToString(); if (dt.Rows[i]["State"].ToString() == "2") { iflag = true; return iflag; } else if (dt.Rows[i]["State"].ToString() == null || dt.Rows[i]["State"].ToString() == "") { iflag = true; return iflag; } } } return iflag; } catch (Exception ex) { return iflag; } } /// /// 获取产品信息 /// /// /// public TSyTracestate GetTraceStateInfoByProductBarCode(string ProductBarCode) { //ICSharpCode.Core.LoggingService.Fatal("获取托盘信息"); DbHandler db = new DbHandler(); TSyTracestate TSyTracestate = new TSyTracestate(); try { if (db.dbHelper == null) { return null; } db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = ""; StringBuilder sb = new StringBuilder(); sb.Append("SELECT TOP 1 Barcode,t1.ProductID,t2.ProductName,BeginTime,EndTime,ShiftID,GroupID,ShiftNo,SemiBarcode_A,SemiBarcode_B,SemiBarcode_C,ProductBarcode,SemiBarcode2,shellbarcode,NameplateInfo,MarkRecord,Attr1,Attr2,ISDis,DisChecker,DisTime,State,CurrentStationID,NGStationID,RestartStation,FinishFlag,D9Remark FROM [JYD_shengjie].[dbo].[T_SY_TraceState] T1 left join dbo.T_BD_ProductInfo T2 on t1.ProductID = t2.ProductID where ProductBarcode='").Append(ProductBarCode).Append("' order by BeginTime desc"); db.dbHelper.CommandText = sb.ToString(); DataTable dt = db.dbHelper.ToDataTable(); if (dt != null && dt.Rows.Count > 0) { TSyTracestate.ProductID = dt.Rows[0]["ProductID"].ToString(); TSyTracestate.ProductName = dt.Rows[0]["ProductName"].ToString(); TSyTracestate.ProductBarcode = dt.Rows[0]["ProductBarcode"].ToString(); TSyTracestate.ShiftID = dt.Rows[0]["ShiftID"].ToString(); TSyTracestate.GroupID = dt.Rows[0]["GroupID"].ToString(); TSyTracestate.Barcode = dt.Rows[0]["Barcode"].ToString(); TSyTracestate.BeginTime = dt.Rows[0]["BeginTime"].ToString(); TSyTracestate.EndTime = dt.Rows[0]["EndTime"].ToString(); return TSyTracestate; } return TSyTracestate; } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("获取产品信息失败" + e.Message); return TSyTracestate; } } public void InsertScanBarCodePrintRecord(TSyTracestate syTracestate) { StringBuilder sb = new StringBuilder(); try { sb.Append(" insert into dbo.base_scanbarcode_record(MCode,ProductCode) values('"); sb.Append(syTracestate.Barcode).Append("','"); sb.Append(syTracestate.ProductBarcode).Append("')"); DbHandler db = new DbHandler(); db.dbHelper.ClearParameter(); db.dbHelper.CommandType = CommandType.Text; db.dbHelper.CommandText = sb.ToString(); ICSharpCode.Core.LoggingService.Info("铭牌打印记录:" + sb.ToString() + "流水号:"+ syTracestate.Barcode + ",产品码" + syTracestate.ProductBarcode); db.dbHelper.ExecuteNonQuery(); } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("铭牌打印记录出错:" + sb.ToString() + "/r/n" + e.ToString()); } } #endregion } /// /// 托盘到位请求结果 /// public enum DaoWeiResult { OK = 1,//可以工作 NG = 2,//直接放行 PreNoWork = 3,//上一工位未工作 MachineNoMatch=4,//机种不匹配 TakeNG=5,//NG物料拿取 NoBarCode = 6, //没读到条码 MaterialNoMatch = 7//物料不匹配 } }