using Aitex.Core.RT.DBCore; using Aitex.Core.RT.Log; using MECF.Framework.Common.DataCenter; using MECF.Framework.Common.DBCore; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MECF.Framework.UI.Core.TrayCoating { /// /// CoatingSqlHelp,提供下列功能 /// /// tray_thickness_data表,存放Tray名称和设置的每个环名称 /// tray_thickness_main表,存放每个环实际的生产数据 /// 1:查询整个Tray对象数据,操作两个数据库表 /// 2:界面点击单个SET时,插入或者更新数据库,操作两个数据库表 /// 3:界面点击Clear时,修改数据库,操作一个数据库表 /// 4:工艺完成后,更新数据库Tray和pm生长厚度,操作一个数据库表 /// 5:数据库查询Tray对象,返回当前厚度和最大厚度的集合,操作一个数据库表 /// public class CoatingSqlHelp : WaferDataRecorder { private static readonly object Lock_TrayCoatingThickness = new object(); private string tray_number, tray_inner_number, ring_inner_number, ring_outer_number; public TrayCoatingThickness GetCoatingData(string _trayID)//获取所有对象数据 { TrayCoatingThickness trayCoatingThickness=new TrayCoatingThickness(); lock (Lock_TrayCoatingThickness) { try { //根据TrayID获取对应内外编号 string cmdID = $"select * from tray_thickness_data where wafer_guid = '{_trayID}'"; DataSet dataSet = DB.ExecuteDataset(cmdID); if (dataSet.Tables.Count != 0 && dataSet.Tables[0].Rows.Count != 0) { tray_number = dataSet.Tables[0].Rows[0]["tray_number"].ToString(); tray_inner_number = dataSet.Tables[0].Rows[0]["tray_inner_number"].ToString(); ring_inner_number = dataSet.Tables[0].Rows[0]["ring_inner_number"].ToString(); ring_outer_number = dataSet.Tables[0].Rows[0]["ring_outer_number"].ToString(); trayCoatingThickness.Tray.Update(GetData(tray_number)); trayCoatingThickness.TrayInner.Update(GetData(tray_inner_number)); trayCoatingThickness.RingInner.Update(GetData(ring_inner_number)); trayCoatingThickness.RingOuter.Update(GetData(ring_outer_number)); } return trayCoatingThickness; } catch (Exception ex) { return trayCoatingThickness; } } } private CoatingData GetData(string _coatingName)//获取单个对象数据 { string cmd = $"select * from tray_thickness_main where tray_number = '{_coatingName}'"; DataSet dataSet = DB.ExecuteDataset(cmd); try { if (dataSet.Tables.Count != 0 && dataSet.Tables[0].Rows.Count != 0) { CoatingData coatingData = new CoatingData() { Number = dataSet.Tables[0].Rows[0]["tray_number"].ToString(), MAX = dataSet.Tables[0].Rows[0]["tray_max_thickness"].ToString(), PM_Model = dataSet.Tables[0].Rows[0]["pm_number"].ToString(), Current = dataSet.Tables[0].Rows[0]["tray_coating_thickness"].ToString() }; return coatingData; } } catch (Exception) { } return new CoatingData(); } public void Cmd_Clear_Coating(string number,out string result)//清除当前生长数据 { try { string cmd_update = $"update tray_thickness_main set " + $"tray_coating_thickness = '0' " + $"where tray_number = '{number}'"; DataSet dataSet = DB.ExecuteDataset(cmd_update); result = "OK"; } catch (Exception ex) { result = ex.ToString(); } } /// /// 更新一行数据 /// /// 要更新的数据对象 /// 环的名称 /// 数据库执行结果 public void Cmd_Set_update(CoatingData coatingData, string propertyName, out string result) { try { string cmdID = $"select * from tray_thickness_data where wafer_guid = '{coatingData.ID}'"; DataSet dataSet = DB.ExecuteDataset(cmdID); if (dataSet.Tables.Count != 0 && dataSet.Tables[0].Rows.Count != 0) DB.ExecuteDataset(Cmd_update(coatingData.ID, coatingData.Number, propertyName)); else DB.ExecuteDataset(Cmd_data_insert(coatingData.ID, coatingData.Number, propertyName)); cmdID = $"select * from tray_thickness_main where tray_number = '{coatingData.Number}'"; dataSet = DB.ExecuteDataset(cmdID); if (dataSet.Tables.Count != 0 && dataSet.Tables[0].Rows.Count != 0) DB.ExecuteDataset(Cmd_main_update(coatingData)); else DB.ExecuteDataset(Cmd_main_insert(coatingData)); result = "OK"; } catch (Exception ex) { result = ex.ToString(); } } /// /// Set时Tray中对象编号插入 /// /// /// /// private string Cmd_data_insert(string trayID,string value,string propertyName) { string cmd_data_insert = "insert into tray_thickness_data" + $"(wafer_guid,{propertyName})" + $"values ('{trayID}'," + $"'{value}')"; return cmd_data_insert; } /// /// Set时Tray中对象编号更新 /// /// /// /// private string Cmd_update(string trayID, string value, string propertyName) { string cmd_update = $"update tray_thickness_data set " + $"{propertyName}= '{value}' " + $"where wafer_guid = '{trayID}'"; return cmd_update; } /// /// Set时插入一行数据 /// /// /// private string Cmd_main_insert(CoatingData coatingData) { string cmd_main_insert = "insert into tray_thickness_main" + "(tray_number,pm_number, tray_coating_thickness, tray_max_thickness,last_date,last_time)" + $"values ('{coatingData.Number}'," + $"'{coatingData.PM_Model}'," + $"'{coatingData.Current}'," + $"'{coatingData.MAX}'," + $"'{DateTime.Now.ToString("yyyy-MM-dd")}'," + $"'{DateTime.Now.ToString("HH:mm:ss")}')"; return cmd_main_insert; } /// /// Set时更新一行数据 /// /// /// private string Cmd_main_update(CoatingData coatingData) { string cmd_main_update = $"update tray_thickness_main set " + $"pm_number= '{coatingData.PM_Model}'," + $"tray_coating_thickness= '{coatingData.Current}'," + $"tray_max_thickness= '{coatingData.MAX}'," + $"last_date= '{DateTime.Now.ToString("yyyy-MM-dd")}'," + $"last_time= '{DateTime.Now.ToString("HH:mm:ss")}' " + $"where tray_number = '{coatingData.Number}'"; return cmd_main_update; } public bool GrowTray(string wafer_guid, double GrowthRate, double Seconds)//Tray更新增长厚度 { if (GrowthRate <= 0.0 || Seconds <= 0) { return false; } // try { string tray_numbers = ""; string sSql = "select * from tray_thickness_data where wafer_guid like '" + wafer_guid.Trim() + "'"; DataSet ds = DB.ExecuteDataset(sSql); if (ds == null) { return false; } if (ds.Tables[0].Rows.Count == 0) { return false; } tray_numbers = "'" + ds.Tables[0].Rows[0]["tray_number"].ToString() + "','" + ds.Tables[0].Rows[0]["tray_inner_number"].ToString() + "','" + ds.Tables[0].Rows[0]["ring_inner_number"].ToString() + "','" + ds.Tables[0].Rows[0]["ring_outer_number"].ToString() + "'"; // double GrowthValue = GrowthRate * Seconds / 3600; //μm string sGrowthValue = string.Format("{0:N2}", GrowthValue); string sDate = DateTime.Now.ToLongDateString(); string sTime = DateTime.Now.ToLongTimeString(); string[] gCmd = {string.Format("update tray_thickness_main set tray_coating_thickness = tray_coating_thickness + {0} where tray_number in ({1}) ",sGrowthValue,tray_numbers) }; return DB.ExcuteTransAction(gCmd.ToList()); } catch (Exception ex) { LOG.Write(ex, 2, "WaferDataRecorderEx.cs", "UpdatePMInfoByPMNumberTrans"); return false; } } public bool GrowPM(string pmName, double GrowthRate, double Seconds)//PM更新增长厚度 { if (GrowthRate <= 0.0 || Seconds <= 0) { return false; } try { string tray_numbers = ""; string sSql = "select * from tray_thickness_data where wafer_guid like 'PM' "; DataSet ds = DB.ExecuteDataset(sSql); if (ds == null) { return false; } if (ds.Tables[0].Rows.Count == 0) { return false; } if (pmName=="PM1") { tray_numbers = $"'{ ds.Tables[0].Rows[0]["tray_number"].ToString()}','{ ds.Tables[0].Rows[0]["tray_inner_number"].ToString()}'"; } else { tray_numbers = $"'{ ds.Tables[0].Rows[0]["ring_inner_number"].ToString()}','{ ds.Tables[0].Rows[0]["ring_outer_number"].ToString()}'"; } // double GrowthValue = GrowthRate * Seconds / 3600; //μm string sGrowthValue = string.Format("{0:N2}", GrowthValue); string sDate = DateTime.Now.ToLongDateString(); string sTime = DateTime.Now.ToLongTimeString(); string[] gCmd = { string.Format("update tray_thickness_main set tray_coating_thickness = tray_coating_thickness + {0} where tray_number in ({1}) ",sGrowthValue,tray_numbers) }; return DB.ExcuteTransAction(gCmd.ToList()); } catch (Exception ex) { LOG.Write(ex, 2, "WaferDataRecorderEx.cs", "UpdatePMInfoByPMNumberTrans"); return false; } } public List MustCleanTray(string wafer_guid) { List inforList =new List();//返回查询到的数据集合 string sSql = "select * from tray_thickness_data where wafer_guid like '" + wafer_guid.Trim() + "'"; DataSet ds = DB.ExecuteDataset(sSql); if (ds == null) { return null; } if (ds.Tables[0].Rows.Count == 0) { return null; } string cmd = $"select tray_coating_thickness , tray_max_thickness from tray_thickness_main where " + $"tray_number='{ds.Tables[0].Rows[0]["tray_number"].ToString()}' " + $"or tray_number = '{ds.Tables[0].Rows[0]["tray_inner_number"].ToString()}' " + $"OR tray_number = '{ds.Tables[0].Rows[0]["ring_inner_number"].ToString()}' " + $"or tray_number = '{ds.Tables[0].Rows[0]["ring_outer_number"].ToString()}'"; ds = DB.ExecuteDataset(cmd); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { string str = ds.Tables[0].Rows[i]["tray_coating_thickness"].ToString(); string tray_max_thickness = ds.Tables[0].Rows[i]["tray_max_thickness"].ToString(); inforList.Add(str); inforList.Add(tray_max_thickness); } return inforList; } } }