334 lines
13 KiB
C#
334 lines
13 KiB
C#
|
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
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// CoatingSqlHelp,提供下列功能
|
|||
|
///
|
|||
|
/// tray_thickness_data表,存放Tray名称和设置的每个环名称
|
|||
|
/// tray_thickness_main表,存放每个环实际的生产数据
|
|||
|
/// 1:查询整个Tray对象数据,操作两个数据库表
|
|||
|
/// 2:界面点击单个SET时,插入或者更新数据库,操作两个数据库表
|
|||
|
/// 3:界面点击Clear时,修改数据库,操作一个数据库表
|
|||
|
/// 4:工艺完成后,更新数据库Tray和pm生长厚度,操作一个数据库表
|
|||
|
/// 5:数据库查询Tray对象,返回当前厚度和最大厚度的集合,操作一个数据库表
|
|||
|
/// </summary>
|
|||
|
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();
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 更新一行数据
|
|||
|
/// </summary>
|
|||
|
/// <param name="coatingData">要更新的数据对象</param>
|
|||
|
/// <param name="propertyName">环的名称</param>
|
|||
|
/// <param name="result">数据库执行结果</param>
|
|||
|
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();
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Set时Tray中对象编号插入
|
|||
|
/// </summary>
|
|||
|
/// <param name="trayCoatingThickness"></param>
|
|||
|
/// <param name="trayID"></param>
|
|||
|
/// <returns></returns>
|
|||
|
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;
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// Set时Tray中对象编号更新
|
|||
|
/// </summary>
|
|||
|
/// <param name="trayCoatingThickness"></param>
|
|||
|
/// <param name="trayID"></param>
|
|||
|
/// <returns></returns>
|
|||
|
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;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Set时插入一行数据
|
|||
|
/// </summary>
|
|||
|
/// <param name="coatingData"></param>
|
|||
|
/// <returns></returns>
|
|||
|
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;
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// Set时更新一行数据
|
|||
|
/// </summary>
|
|||
|
/// <param name="coatingData"></param>
|
|||
|
/// <returns></returns>
|
|||
|
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<string>());
|
|||
|
|
|||
|
}
|
|||
|
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<string>());
|
|||
|
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LOG.Write(ex, 2, "WaferDataRecorderEx.cs", "UpdatePMInfoByPMNumberTrans");
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public List<string> MustCleanTray(string wafer_guid)
|
|||
|
{
|
|||
|
List<string> inforList =new List<string>();//返回查询到的数据集合
|
|||
|
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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|