384 lines
16 KiB
C#
384 lines
16 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();
|
||
|
||
|
||
|
||
//整体一个对象所有数据,但是未命名的查询不到,不适用此处
|
||
//List<CoatingData> listCoatingData = new List<CoatingData>();
|
||
//string cmd = "select * from tray_thickness_main where " +
|
||
// $"tray_number='{tray_number}' " +
|
||
// $"or tray_number = '{tray_inner_number}' " +
|
||
// $"OR tray_number = '{ring_inner_number}' " +
|
||
// $"or tray_number = '{ring_outer_number}'";
|
||
|
||
//DataSet ds = DB.ExecuteDataset(cmd);
|
||
//for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
|
||
//{
|
||
|
||
// if (ds.Tables[0].Rows[i].ItemArray.Length != 0)
|
||
// {
|
||
// string str = ds.Tables[0].Rows[i]["tray_number"].ToString();
|
||
// CoatingData coatingData = new CoatingData()
|
||
// {
|
||
// Number = ds.Tables[0].Rows[i]["tray_number"].ToString(),
|
||
// MAX = ds.Tables[0].Rows[i]["tray_max_thickness"].ToString(),
|
||
// PM_Model = ds.Tables[0].Rows[i]["pm_number"].ToString(),
|
||
// Current = ds.Tables[0].Rows[i]["tray_coating_thickness"].ToString()
|
||
// };
|
||
// listCoatingData.Add(coatingData);
|
||
// }
|
||
// else
|
||
// listCoatingData.Add(new CoatingData());
|
||
//}
|
||
|
||
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}'";
|
||
DB.ExcuteTransAction(new List<string> { 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
|
||
{
|
||
List<string> cmdList = new List<string>();
|
||
string cmdID = $"select * from tray_thickness_data where wafer_guid = '{coatingData.GUID}'";
|
||
DataSet dataSet = DB.ExecuteDataset(cmdID);
|
||
if (dataSet.Tables.Count != 0 && dataSet.Tables[0].Rows.Count != 0)
|
||
cmdList.Add(Cmd_update(coatingData.GUID, coatingData.Number, propertyName));
|
||
else
|
||
cmdList.Add(Cmd_data_insert(coatingData.GUID, 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)
|
||
cmdList.Add(Cmd_main_update(coatingData));
|
||
else
|
||
cmdList.Add(Cmd_main_insert(coatingData));
|
||
|
||
DB.ExcuteTransAction(cmdList);
|
||
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> Get_Coating_MAX(string wafer_guid)
|
||
{
|
||
List<string> inforList = new List<string>();//返回查询到的数据集合
|
||
string _id = wafer_guid.Contains("PM") ? "PM" : wafer_guid;
|
||
string sSql = $"select * from tray_thickness_data where wafer_guid like '{_id}'";
|
||
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 ";
|
||
|
||
if (wafer_guid == "PM1")
|
||
{
|
||
cmd += $"tray_number='{ds.Tables[0].Rows[0]["tray_number"].ToString()}' " +
|
||
$"or tray_number = '{ds.Tables[0].Rows[0]["tray_inner_number"].ToString()}'";
|
||
}
|
||
else if (wafer_guid == "PM2")
|
||
{
|
||
cmd += $"tray_number = '{ds.Tables[0].Rows[0]["ring_inner_number"].ToString()}' " +
|
||
$"or tray_number = '{ds.Tables[0].Rows[0]["ring_outer_number"].ToString()}'";
|
||
}
|
||
else
|
||
{
|
||
cmd += $"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;
|
||
}
|
||
|
||
|
||
}
|
||
}
|
||
|