using System; using System.Collections.Generic; using System.Linq; using System.Text; using Mesnac.Basic; using Mesnac.Codd.Session; using System.Data; using Mesnac.Compressor.Entity; using Mesnac.Compressor.Unity; using System.Windows.Forms; using System.Data.SqlClient; namespace Mesnac.Compressor.Data { public class DbHandler { public DbHelper dbHelper; public DataBHandler localDB = new DataBHandler(); private DataSourceFactory dsFactory = DataSourceFactory.Instance; public DbHandler() { if (Common.Instance.ReadLocalDB) { return; } try { //网络服务器 dbHelper = dsFactory.GetDbHelper("DataSource2"); if (dbHelper == null) { string constr = System.Configuration.ConfigurationManager.AppSettings["SqlString"]; DbSession dbsession = new DbSession(SqlClientFactory.Instance, constr); dbHelper = new DbHelper(dbsession); } } catch { //ConnectShow(); throw; } } private void ConnectShow() { Common.Instance.ServerConnect = false; FrmConnnectFlag frm = new FrmConnnectFlag(); frm.ShowDialog(); } public void ExecSql(string sql) { if (dbHelper == null || Common.Instance.ReadLocalDB) { localDB.ExecSql(sql); return; } try { dbHelper.CommandText = sql; dbHelper.ExecuteNonQuery(); } catch (Exception e) { ICSharpCode.Core.LoggingService.Error("Insert语句错误:" + e.ToString()); ICSharpCode.Core.LoggingService.Error("Insert语句错误:" + sql); localDB.ExecSql(sql); } } public string GetLastMainBarcode(string code) { if (dbHelper == null || Common.Instance.ReadLocalDB) { return localDB.GetLastMainBarcode(code); } try { dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; StringBuilder sb = new StringBuilder(); sb.Append("EXEC SP_Pro_GetNewMainBarcode '"); sb.Append(code).Append("'"); dbHelper.CommandText = sb.ToString(); return dbHelper.ToScalar().ToString(); } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString())); //ConnectShow(); return localDB.GetLastMainBarcode(code); } } public String GetNowProductionInfo() { if (dbHelper == null || Common.Instance.ReadLocalDB) { return null; } try { dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; string sql = " SELECT top(1) ProductId FROM dbo.T_RP_ProductChangeInfo WHERE LineName='A'"; dbHelper.CommandText = sql; return dbHelper.ToScalar().ToString(); } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString())); return null; } } public string GetLastSemiBarcode(string code, string lineID) { if (dbHelper == null || Common.Instance.ReadLocalDB) { return localDB.GetLastSemiBarcode(code); } try { dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; StringBuilder sb = new StringBuilder(); sb.Append("EXEC SP_Pro_GetNewSemiBarcode '"); sb.Append(code).Append("','").Append(lineID).Append("'"); dbHelper.CommandText = sb.ToString(); return dbHelper.ToScalar().ToString(); } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("GetLastSemiBarcode" + ex.ToString()); //ConnectShow(); return localDB.GetLastSemiBarcode(code); } } public void InsertTrace(string barcode, string SemiACode, string ProductBarCode, string machineID) { if (dbHelper == null) { return; } try { dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; string sql = "EXEC SP_Pro_ChongtouInsertTraceStation @semiBarcode,@mainBarcode,@ProductBarCode,@MachineID"; dbHelper.AddParameter("@semiBarcode", SemiACode); dbHelper.AddParameter("@mainBarcode", barcode); dbHelper.AddParameter("@ProductBarCode", ProductBarCode); dbHelper.AddParameter("@MachineID", machineID); dbHelper.CommandText = sql; dbHelper.ExecuteNonQuery(); //localDB.InsertTrace(barcode, SemiACode, 1); } catch (Exception ex) { return; } } public void InsertTrace(string barcode, string SemiACode, string machineID) { if (dbHelper == null || Common.Instance.ReadLocalDB) { //localDB.InsertTrace(barcode, SemiACode, 0); return; } try { dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; string sql = "EXEC SP_Pro_InsertTraceStation @semiBarcode,@mainBarcode,@MachineID"; dbHelper.AddParameter("@semiBarcode", SemiACode); dbHelper.AddParameter("@mainBarcode", barcode); dbHelper.AddParameter("@MachineID", machineID); dbHelper.CommandText = sql; dbHelper.ExecuteNonQuery(); //localDB.InsertTrace(barcode, SemiACode, 1); } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString())); //localDB.InsertTrace(barcode, SemiACode, 0); //ConnectShow(); return; } } /// /// 获取当前机种信息 /// /// public string GetCurrentMachineInfo() { //MachineInfo Minfo = new MachineInfo(); if (dbHelper == null || Common.Instance.ReadLocalDB) { return ""; //return Minfo; } try { dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; string sql = "Exec SP_Pro_ChangeProduct"; dbHelper.CommandText = sql; return dbHelper.ToScalar().ToString(); } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString())); return ""; } } /// /// 插入报警信息 /// /// 电脑名字 /// public void InsertAlarmInfo(string WorkName, AlarmInfo info) { if (dbHelper == null || Common.Instance.ReadLocalDB) { return; } try { dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; StringBuilder sb = new StringBuilder(); sb.Append("INSERT INTO dbo.T_BD_UniteAlarmInfo(ComputerName,UniteID,AlarmInfo,AlarmIndex,RecordTime )VALUES ('"); sb.Append(WorkName).Append("','"); sb.Append(info.AlarmUnit.ToString()).Append("','"); sb.Append(info.AlarmString).Append("','"); sb.Append(info.AlarmIndex.ToString()).Append("',"); sb.Append("GETDATE()").Append(")"); dbHelper.CommandText = sb.ToString(); dbHelper.ExecuteNonQuery(); } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString())); return; } } #region ActionDb public DataTable SelectAlarmInfo(string ComputerName) { if (dbHelper == null) { return null; } try { dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; StringBuilder sb = new StringBuilder(); sb.Append("select 序号 = row_number() over(order by RecordTime desc),AlarmIndex as '报警单元',AlarmInfo as '报警信息 (一小时)' ,RecordTime as '报警时间' from dbo.T_BD_UniteAlarmInfo where ComputerName= '"); sb.Append(ComputerName).Append("'"); sb.Append(" AND RecordTime>=DATEADD(HH,-1,GETDATE())"); dbHelper.CommandText = sb.ToString(); DataTable dt = dbHelper.ToDataTable(); return dt; } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString())); return null; } } #endregion //工作完成 public void WorkFinish(string RFID, string bigcode, string serialnum) { if (dbHelper == null || Common.Instance.ReadLocalDB) { localDB.WorkFinish(RFID, bigcode, serialnum, 0); return; } try { dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; StringBuilder sb = new StringBuilder(); sb.Append("Exec SP_Pro_ProductionInfo '").Append(RFID).Append("','"); sb.Append(bigcode).Append("','"); sb.Append(serialnum).Append("'"); dbHelper.CommandText = sb.ToString(); ICSharpCode.Core.LoggingService.Info(string.Format(sb.ToString())); dbHelper.ExecuteNonQuery(); } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString())); //ConnectShow(); localDB.WorkFinish(RFID, bigcode, serialnum, 0); } } /// /// 获取最新交接班信息 /// /// /// public ShiftInfo GetShiftInfo() { if (dbHelper == null || Common.Instance.ReadLocalDB) { return localDB.GetShiftInfo(); //return null; } try { dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; string sql = "SELECT TOP(1)ShiftNo,GroupID,a.ShiftID, b.ShiftName,a.CarryTime FROM dbo.T_RP_ShiftInfo a LEFT JOIN dbo.T_HR_Shift b ON a.ShiftID=b.ShiftID ORDER BY CarryTime DESC "; dbHelper.CommandText = sql; DataTable dt = dbHelper.ToDataTable(); ShiftInfo shift = new ShiftInfo(); shift.carryTime = dt.Rows[0]["CarryTime"].ToString(); shift.shiftNo = dt.Rows[0]["ShiftNo"].ToString(); shift.shiftID = dt.Rows[0]["ShiftID"].ToString(); shift.groupID = dt.Rows[0]["GroupID"].ToString(); shift.shiftName = dt.Rows[0]["ShiftName"].ToString(); return shift; } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString())); return localDB.GetShiftInfo(); //return null; } } public int GetCurrentMachine() { if (dbHelper == null || Common.Instance.ReadLocalDB) { return localDB.GetCurrentMachine(); //return 0; } try { dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; string sql = "SELECT TOP(1) ProductChangingID FROM dbo.T_RP_ProductChangeLog ORDER BY ChangeTime DESC "; dbHelper.CommandText = sql; return Convert.ToInt32(dbHelper.ToScalar()); } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString())); ////ConnectShow(); return localDB.GetCurrentMachine(); //return 0; } } /// /// 获取当前机种 /// /// /// public DataTable GetCurrentMachine(int MachineID) { if (dbHelper == null || Common.Instance.ReadLocalDB) { return localDB.GetCurrentMachine(MachineID); //return null; } try { dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; string sql = " SELECT * FROM dbo.T_BD_ProductInfo WHERE ProductID='" + MachineID.ToString() + "'"; dbHelper.CommandText = sql; return dbHelper.ToDataTable(); } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString())); ////ConnectShow(); return localDB.GetCurrentMachine(MachineID); //return null; } } public string GetProductInfoByBarCode(string barcode) { if (dbHelper == null || Common.Instance.ReadLocalDB) { return null; } try { dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; string sql = " SELECT top(1) ProductID FROM dbo.T_SY_TraceState WHERE ProductBarcode='" + barcode + "'"; dbHelper.CommandText = sql; return dbHelper.ToScalar().ToString(); } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString())); return null; } } /// /// 获取当前产品的投产时间 /// /// /// public string GetProductBeginTime(string mainbarcode) { if (dbHelper == null || Common.Instance.ReadLocalDB) { localDB.GetProductBeginTime(mainbarcode); return null; } try { dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; string sql = " SELECT top(1) BeginTime FROM dbo.T_SY_TraceState WHERE Barcode='" + mainbarcode + "'"; dbHelper.CommandText = sql; return dbHelper.ToScalar().ToString(); } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString())); //ConnectShow(); localDB.GetProductBeginTime(mainbarcode); return null; } } public object GetStationData(string stationID) { if (dbHelper == null) { return null; } try { dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; StringBuilder sb = new StringBuilder(); sb.Append("Exec SP_Pro_StationDataNew '").Append(stationID).Append("','"); sb.Append(DateTime.Now.ToString("yyyy-MM-dd")).Append("','"); sb.Append(DateTime.Now.AddDays(1).ToString("yyyy-MM-dd")).Append("'"); dbHelper.CommandText = sb.ToString(); //ICSharpCode.Core.LoggingService.Info(string.Format(sb.ToString())); return dbHelper.ToDataSet(); } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString())); return null; } } /// /// 获取产品是否合格 /// /// /// public WorkTray GetProductQuality(string Rfid) { string CurrentStation = ""; ICSharpCode.Core.LoggingService.Fatal("开始获取产品是否合格"); WorkTray tray = new WorkTray(); try { if (dbHelper == null) { return null; } dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; StringBuilder sb = new StringBuilder(); sb.Append("SELECT [RFIDNum],[barCode],[SemiBarcode],[CurrentStation],t2.StationName,[State],t1.[updateTime],[UsedFlag],[InsertTime],[DeleteTime] FROM T_RP_WorkTrayRealTimeInfo t1 LEFT JOIN dbo.T_BD_SubStation t2 ON t1.CurrentStation = t2.StationID where RFIDNum='").Append(Rfid).Append("'"); //ICSharpCode.Core.LoggingService.Debug("sql语句:"+sb.ToString()); dbHelper.CommandText = sb.ToString(); DataTable dt = dbHelper.ToDataTable(); if (dt != null && dt.Rows.Count > 0) { tray.RfidNum = dt.Rows[0]["RFIDNum"].ToString(); tray.MainBarcode = dt.Rows[0]["barCode"].ToString(); tray.SemiBarcode = dt.Rows[0]["SemiBarcode"].ToString(); string Okng = dt.Rows[0]["State"].ToString(); if (dt.Rows[0]["State"] != null && dt.Rows[0]["State"] != DBNull.Value) { CurrentStation = dt.Rows[0]["CurrentStation"].ToString(); } tray.InsertTime = dt.Rows[0]["updateTime"].ToString(); int outvalue = 0; //调试用 //ICSharpCode.Core.LoggingService.Debug(dt.Rows[0]["RFIDNum"].ToString() + " barcode:" + dt.Rows[0]["barcode"].ToString() + " SemiBarcode:" + dt.Rows[0]["SemiBarcode"].ToString() + " State:" + dt.Rows[0]["State"].ToString() + " CurrentStation:" + dt.Rows[0]["CurrentStation"].ToString()); //调试完成 if (int.TryParse(Okng.Trim(), out outvalue)) { tray.OKNG = outvalue; //ICSharpCode.Core.LoggingService.Debug("检测到产品在[" + CurrentStation + "]工位合格"); } else { //质量转换错误,默认为1 ICSharpCode.Core.LoggingService.Info("产品是否合格,质量转换错误,默认为1"); tray.OKNG = 1; } } } catch (Exception e) { ICSharpCode.Core.LoggingService.Error(string.Format(e.ToString())); ////ConnectShow(); } return tray; } /// /// 获取托盘信息 /// /// /// public WorkTray GetTrayInfoByBarcode(string Rfid) { ICSharpCode.Core.LoggingService.Fatal("获取托盘信息"); WorkTray tray = new WorkTray(); try { if (dbHelper == null) { return null; } dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; StringBuilder sb = new StringBuilder(); sb.Append("select * from T_RP_WorkTrayRealTimeInfo where SemiBarcode='").Append(Rfid).Append("'"); dbHelper.CommandText = sb.ToString(); DataTable dt = dbHelper.ToDataTable(); if (dt != null && dt.Rows.Count > 0) { tray.RfidNum = dt.Rows[0]["RFIDNum"].ToString(); tray.MainBarcode = dt.Rows[0]["barCode"].ToString(); tray.SemiBarcode = dt.Rows[0]["SemiBarcode"].ToString(); string Okng = dt.Rows[0]["State"].ToString(); tray.InsertTime = dt.Rows[0]["updateTime"].ToString(); int outvalue = 0; if (int.TryParse(Okng.Trim(), out outvalue)) { tray.OKNG = outvalue; } else { //质量转换错误,默认为1 ICSharpCode.Core.LoggingService.Info("质量转换错误,默认为1"); tray.OKNG = 1; } } } catch (Exception e) { ICSharpCode.Core.LoggingService.Error(string.Format(e.ToString())); ////ConnectShow(); } return tray; } #region 尹治丰 2023-3-2 public bool CurrentStationHaveWork(string stationID, string RFID) { ICSharpCode.Core.LoggingService.Debug("校验工位" + stationID + "校验托盘" + RFID); if (dbHelper == null || Common.Instance.ReadLocalDB) { //return localDB.CurrentStationHaveWork(stationID, RFID); return false; } try { dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; string sql = "Exec SP_Pro_CurruntState @RFID,@stationID"; dbHelper.AddParameter("@RFID", RFID); dbHelper.AddParameter("@stationID", stationID); dbHelper.CommandText = sql; var obj = dbHelper.ToScalar(); int result = Convert.ToInt32(obj); if (result <= 1) { return false; } else { return true; } } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(ex.ToString()); ////ConnectShow(); //return localDB.CurrentStationHaveWork(stationID, RFID); return false; } } public bool Chongtou(string barcode, string RFID) { //ICSharpCode.Core.LoggingService.Debug("校验工位" + stationID + "校验托盘" + RFID); //if (dbHelper == null || Common.Instance.ReadLocalDB) //{ // //return localDB.CurrentStationHaveWork(stationID, RFID); // return false; //} try { dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; string sql = "Exec SP_Pro_ChongTou @RFID,@SemiBarcode"; dbHelper.AddParameter("@RFID", RFID); dbHelper.AddParameter("@SemiBarcode", barcode); dbHelper.CommandText = sql; var obj = dbHelper.ToScalar(); int result = Convert.ToInt32(obj); if (result < 1) { return false; } else { return true; } } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("重投" + ex.ToString()); ////ConnectShow(); //return localDB.CurrentStationHaveWork(stationID, RFID); return false; } } /// /// 获取上一工位信息 /// /// /// /// public bool GetPreWorkInfo(string Rfid, string stationid) { //根据当前工位获取前一工位数据 //然后获取前一工位信息 if (dbHelper == null || Common.Instance.ReadLocalDB) { return false; //return localDB.GetPreWorkInfo(Rfid, stationid); } try { dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; StringBuilder sb = new StringBuilder(); sb.Append("SELECT StationID FROM dbo.T_BD_SubStation a LEFT JOIN dbo.T_RP_WorkTrayRealTimeInfo b ON a.PreStationID=b.CurrentStation WHERE b.RFIDNum='").Append(Rfid).Append("'"); dbHelper.CommandText = sb.ToString(); DataTable dt = dbHelper.ToDataTable(); if (dt.Rows.Count < 1) { ICSharpCode.Core.LoggingService.Warn("工位:" + stationid + " 信息:托盘 " + Rfid + ":上工位信息为空"); return false; } string currentStation = dt.Rows[0]["StationID"].ToString(); if (stationid == currentStation) { return true; } else { ICSharpCode.Core.LoggingService.Warn("工位:" + stationid + " 信息:托盘 " + Rfid + ":不等于"+ currentStation); return false; } } catch { return false; } } #endregion /// /// 动静盘关系绑定插库 /// public void InsertDJRelationShip(string DPBarCode,string JPBarCode) { if (dbHelper == null || Common.Instance.ReadLocalDB) { return; } try { dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; StringBuilder sb = new StringBuilder(); sb.Append("INSERT INTO dbo.T_DJP_BarCodeRelationShip(DPBarCode,JPBarCode )VALUES ('"); sb.Append(DPBarCode.ToString()).Append("','"); sb.Append(JPBarCode.ToString()).Append("')"); dbHelper.CommandText = sb.ToString(); dbHelper.ExecuteNonQuery(); } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString())); return; } } /// /// 通过壳体条码查系统M码 /// /// /// public string GetMbarcode(string barcode) { if (dbHelper == null) { return null; } try { dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = ""; string sql = "select top(1)* from T_SY_TraceState where ProductBarcode='" + barcode + "' order by BeginTime desc "; dbHelper.CommandText = sql; DataTable dt = dbHelper.ToDataTable(); string Mbarcode = dt.Rows[0]["Barcode"].ToString(); return Mbarcode; } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString())); return null; } } } }