2023-04-18 16:04:18 +08:00
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 ) //获取所有对象数据
{
2023-05-04 17:05:12 +08:00
2023-04-18 16:04:18 +08:00
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 ( ) ;
2023-05-04 17:05:12 +08:00
//整体一个对象所有数据,但是未命名的查询不到,不适用此处
//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());
//}
2023-04-18 16:04:18 +08:00
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}'" ;
2023-05-04 17:05:12 +08:00
DB . ExcuteTransAction ( new List < string > { cmd_update } ) ;
2023-04-18 16:04:18 +08:00
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
{
2023-05-04 17:05:12 +08:00
List < string > cmdList = new List < string > ( ) ;
2023-04-18 16:04:18 +08:00
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 )
2023-05-04 17:05:12 +08:00
cmdList . Add ( Cmd_update ( coatingData . ID , coatingData . Number , propertyName ) ) ;
2023-04-18 16:04:18 +08:00
else
2023-05-04 17:05:12 +08:00
cmdList . Add ( Cmd_data_insert ( coatingData . ID , coatingData . Number , propertyName ) ) ;
2023-04-18 16:04:18 +08:00
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 )
2023-05-04 17:05:12 +08:00
cmdList . Add ( Cmd_main_update ( coatingData ) ) ;
2023-04-18 16:04:18 +08:00
else
2023-05-04 17:05:12 +08:00
cmdList . Add ( Cmd_main_insert ( coatingData ) ) ;
2023-04-18 16:04:18 +08:00
2023-05-04 17:05:12 +08:00
DB . ExcuteTransAction ( cmdList ) ;
2023-04-18 16:04:18 +08:00
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 ;
}
}
2023-05-04 17:05:12 +08:00
public List < string > Get_Coating_MAX ( string wafer_guid )
2023-04-18 16:04:18 +08:00
{
List < string > inforList = new List < string > ( ) ; //返回查询到的数据集合
2023-05-04 17:05:12 +08:00
string _id = wafer_guid . Contains ( "PM" ) ? "PM" : wafer_guid ;
string sSql = $"select * from tray_thickness_data where wafer_guid like '{_id}'" ;
2023-04-18 16:04:18 +08:00
DataSet ds = DB . ExecuteDataset ( sSql ) ;
if ( ds = = null )
{
return null ;
}
if ( ds . Tables [ 0 ] . Rows . Count = = 0 )
{
return null ;
2023-05-04 17:05:12 +08:00
}
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()}' " +
2023-04-18 16:04:18 +08:00
$"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()}'" ;
2023-05-04 17:05:12 +08:00
}
2023-04-18 16:04:18 +08:00
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 ;
}
2023-05-04 17:05:12 +08:00
2023-04-18 16:04:18 +08:00
}
}