2023-04-13 11:51:03 +08:00
using System ;
using System.Collections.Generic ;
using System.Data ;
using Aitex.Core.RT.DBCore ;
using Aitex.Core.RT.Log ;
using Aitex.Sorter.Common ;
namespace MECF.Framework.Common.DBCore
{
public class RecipeDataRecorder
{
public static void RecipeStart ( string guid , string waferDataGuid , string recipeName , string settingTime , string chamber )
{
string sql = string . Format ( "INSERT INTO \"recipe_data\"(\"guid\", \"wafer_data_guid\", \"recipe_begin_time\", \"recipe_name\", \"recipe_setting_time\" , \"chamber\" )VALUES ('{0}', '{1}', '{2}' , '{3}', '{4}', '{5}' );" , guid , waferDataGuid , DateTime . Now . ToString ( "yyyy/MM/dd HH:mm:ss.fff" ) , recipeName , settingTime , chamber ) ;
2023-06-27 15:46:42 +08:00
DB . InsertSql ( sql ) ;
2023-04-13 11:51:03 +08:00
}
public static void RecipeEnd ( string guid )
{
string sql = string . Format ( "UPDATE \"recipe_data\" SET \"recipe_end_time\"='{0}' WHERE \"guid\"='{1}';" , DateTime . Now . ToString ( "yyyy/MM/dd HH:mm:ss.fff" ) , guid ) ;
2023-06-27 15:46:42 +08:00
DB . InsertSql ( sql ) ;
2023-04-13 11:51:03 +08:00
}
public static void RecipeStepStart ( string guid , int recipeStepNo , string recipeStepName , string settingTime )
{
string sql = string . Format ( "INSERT INTO \"recipe_step_data\"(\"guid\", \"recipe_step_no\", \"recipe_step_name\", \"recipe_step_setting_time\" , \"recipe_step_begin_time\")VALUES ('{0}', '{1}', '{2}' , '{3}', '{4}' );" , guid , recipeStepNo , recipeStepName , settingTime , DateTime . Now . ToString ( "yyyy/MM/dd HH:mm:ss.fff" ) ) ;
2023-06-27 15:46:42 +08:00
DB . InsertSql ( sql ) ;
2023-04-13 11:51:03 +08:00
}
public static void RecipeStepEnd ( string guid , int recipeStepNo )
{
string sql = string . Format ( "UPDATE \"recipe_step_data\" SET \"recipe_step_end_time\"='{0}' WHERE \"guid\"='{1}' AND \"recipe_step_no\"='{2}';" , DateTime . Now . ToString ( "yyyy/MM/dd HH:mm:ss.fff" ) , guid , recipeStepNo ) ;
2023-06-27 15:46:42 +08:00
DB . InsertSql ( sql ) ;
2023-04-13 11:51:03 +08:00
}
public static WaferHistoryRecipe GetWaferHistoryRecipe ( string id )
{
WaferHistoryRecipe waferHistoryRecipe = new WaferHistoryRecipe ( ) ;
try
{
string cmdText = $"SELECT * FROM \" recipe_data \ " where \"guid\" = '{id}' limit 1000;" ;
2023-06-27 15:46:42 +08:00
DataSet dataSet = DB . ExecuteDataSet ( cmdText ) ;
2023-04-13 11:51:03 +08:00
if ( dataSet = = null )
{
return waferHistoryRecipe ;
}
if ( dataSet . Tables . Count = = 0 | | dataSet . Tables [ 0 ] . Rows . Count = = 0 )
{
return waferHistoryRecipe ;
}
for ( int i = 0 ; i < dataSet . Tables [ 0 ] . Rows . Count ; i + + )
{
waferHistoryRecipe . ID = dataSet . Tables [ 0 ] . Rows [ i ] [ "guid" ] . ToString ( ) ;
waferHistoryRecipe . Type = WaferHistoryItemType . Recipe ;
waferHistoryRecipe . Chamber = dataSet . Tables [ 0 ] . Rows [ i ] [ "chamber" ] . ToString ( ) ;
waferHistoryRecipe . SettingTime = dataSet . Tables [ 0 ] . Rows [ i ] [ "recipe_setting_time" ] . ToString ( ) ;
if ( ! dataSet . Tables [ 0 ] . Rows [ i ] [ "recipe_begin_time" ] . Equals ( DBNull . Value ) )
{
waferHistoryRecipe . StartTime = DateTime . Parse ( dataSet . Tables [ 0 ] . Rows [ i ] [ "recipe_begin_time" ] . ToString ( ) ) ;
}
if ( ! dataSet . Tables [ 0 ] . Rows [ i ] [ "recipe_end_time" ] . Equals ( DBNull . Value ) )
{
waferHistoryRecipe . EndTime = DateTime . Parse ( dataSet . Tables [ 0 ] . Rows [ i ] [ "recipe_end_time" ] . ToString ( ) ) ;
}
waferHistoryRecipe . ActualTime = ( ( waferHistoryRecipe . EndTime . CompareTo ( waferHistoryRecipe . StartTime ) < = 0 ) ? "" : waferHistoryRecipe . EndTime . Subtract ( waferHistoryRecipe . StartTime ) . ToString ( ) ) ;
waferHistoryRecipe . Recipe = dataSet . Tables [ 0 ] . Rows [ i ] [ "recipe_name" ] . ToString ( ) ;
waferHistoryRecipe . Name = dataSet . Tables [ 0 ] . Rows [ i ] [ "recipe_name" ] . ToString ( ) ;
waferHistoryRecipe . Steps = GetRecipeStepInfoList ( id ) ;
}
}
catch ( Exception ex )
{
LOG . Write ( ex ) ;
}
return waferHistoryRecipe ;
}
public static List < WaferHistoryWafer > GetWaferHistoryWafers ( string id )
{
List < WaferHistoryWafer > list = new List < WaferHistoryWafer > ( ) ;
try
{
string cmdText = $"SELECT * FROM \" wafer_data \ " where \"carrier_data_guid\" = '{id}' and \"lot_id\" <> '' order by \"wafer_id\" ASC limit 1000;" ;
2023-06-27 15:46:42 +08:00
DataSet dataSet = DB . ExecuteDataSet ( cmdText ) ;
2023-04-13 11:51:03 +08:00
if ( dataSet = = null )
{
return list ;
}
if ( dataSet . Tables . Count = = 0 | | dataSet . Tables [ 0 ] . Rows . Count = = 0 )
{
return list ;
}
for ( int i = 0 ; i < dataSet . Tables [ 0 ] . Rows . Count ; i + + )
{
WaferHistoryWafer waferHistoryWafer = new WaferHistoryWafer ( ) ;
waferHistoryWafer . ID = dataSet . Tables [ 0 ] . Rows [ i ] [ "guid" ] . ToString ( ) ;
waferHistoryWafer . Type = WaferHistoryItemType . Wafer ;
waferHistoryWafer . Name = dataSet . Tables [ 0 ] . Rows [ i ] [ "wafer_id" ] . ToString ( ) ;
if ( ! dataSet . Tables [ 0 ] . Rows [ i ] [ "sequence_name" ] . Equals ( DBNull . Value ) )
{
waferHistoryWafer . ProcessJob = dataSet . Tables [ 0 ] . Rows [ i ] [ "sequence_name" ] . ToString ( ) ;
}
if ( ! dataSet . Tables [ 0 ] . Rows [ i ] [ "create_time" ] . Equals ( DBNull . Value ) )
{
waferHistoryWafer . StartTime = DateTime . Parse ( dataSet . Tables [ 0 ] . Rows [ i ] [ "create_time" ] . ToString ( ) ) ;
}
if ( ! dataSet . Tables [ 0 ] . Rows [ i ] [ "delete_time" ] . Equals ( DBNull . Value ) )
{
waferHistoryWafer . EndTime = DateTime . Parse ( dataSet . Tables [ 0 ] . Rows [ i ] [ "delete_time" ] . ToString ( ) ) ;
}
list . Add ( waferHistoryWafer ) ;
}
}
catch ( Exception ex )
{
LOG . Write ( ex ) ;
}
return list ;
}
private static List < RecipeStep > GetRecipeStepInfoList ( string guid )
{
List < RecipeStep > list = new List < RecipeStep > ( ) ;
2023-06-27 15:46:42 +08:00
DataSet dataSet = DB . ExecuteDataSet ( $"SELECT * FROM \" recipe_step_data \ " where \"guid\" = '{guid}' limit 1000;" ) ;
2023-04-13 11:51:03 +08:00
if ( dataSet ! = null & & dataSet . Tables . Count ! = 0 & & dataSet . Tables [ 0 ] . Rows . Count ! = 0 )
{
for ( int i = 0 ; i < dataSet . Tables [ 0 ] . Rows . Count ; i + + )
{
RecipeStep recipeStep = new RecipeStep ( ) ;
recipeStep . No = int . Parse ( dataSet . Tables [ 0 ] . Rows [ i ] [ "recipe_step_no" ] . ToString ( ) ) ;
recipeStep . Name = dataSet . Tables [ 0 ] . Rows [ i ] [ "recipe_step_name" ] . ToString ( ) ;
recipeStep . SettingTime = dataSet . Tables [ 0 ] . Rows [ i ] [ "recipe_step_setting_time" ] . ToString ( ) ;
if ( ! dataSet . Tables [ 0 ] . Rows [ i ] [ "recipe_step_begin_time" ] . Equals ( DBNull . Value ) )
{
recipeStep . StartTime = DateTime . Parse ( dataSet . Tables [ 0 ] . Rows [ i ] [ "recipe_step_begin_time" ] . ToString ( ) ) ;
}
if ( ! dataSet . Tables [ 0 ] . Rows [ i ] [ "recipe_step_end_time" ] . Equals ( DBNull . Value ) )
{
recipeStep . EndTime = DateTime . Parse ( dataSet . Tables [ 0 ] . Rows [ i ] [ "recipe_step_end_time" ] . ToString ( ) ) ;
}
recipeStep . ActualTime = ( ( recipeStep . EndTime . CompareTo ( recipeStep . StartTime ) < = 0 ) ? "" : recipeStep . EndTime . Subtract ( recipeStep . StartTime ) . ToString ( ) ) ;
list . Add ( recipeStep ) ;
}
}
return list ;
}
public static List < WaferHistoryRecipe > GetWaferHistoryRecipes ( string id )
{
List < WaferHistoryRecipe > list = new List < WaferHistoryRecipe > ( ) ;
try
{
string cmdText = $"SELECT * FROM \" process_data \ " where \"wafer_data_guid\" = '{id}' limit 1000;" ;
2023-06-27 15:46:42 +08:00
DataSet dataSet = DB . ExecuteDataSet ( cmdText ) ;
2023-04-13 11:51:03 +08:00
if ( dataSet = = null )
{
return list ;
}
if ( dataSet . Tables . Count = = 0 | | dataSet . Tables [ 0 ] . Rows . Count = = 0 )
{
return list ;
}
for ( int i = 0 ; i < dataSet . Tables [ 0 ] . Rows . Count ; i + + )
{
list . Add ( GetWaferHistoryRecipe ( dataSet . Tables [ 0 ] . Rows [ i ] [ "guid" ] . ToString ( ) ) ) ;
}
}
catch ( Exception ex )
{
LOG . Write ( ex ) ;
}
return list ;
}
public static List < WaferHistorySecquence > GetWaferHistorySecquences ( string id )
{
List < WaferHistorySecquence > list = new List < WaferHistorySecquence > ( ) ;
try
{
string cmdText = $"SELECT * FROM \" wafer_data \ " where \"guid\" = '{id}' and \"lot_id\" <> '' order by \"wafer_id\" ASC limit 1000;" ;
2023-06-27 15:46:42 +08:00
DataSet dataSet = DB . ExecuteDataSet ( cmdText ) ;
2023-04-13 11:51:03 +08:00
if ( dataSet = = null )
{
return list ;
}
if ( dataSet . Tables . Count = = 0 | | dataSet . Tables [ 0 ] . Rows . Count = = 0 )
{
return list ;
}
int num = 0 ;
try
{
cmdText = $"SELECT * FROM \" wafer_move_history \ " where \"wafer_data_guid\" = '{id}' order by \"arrive_time\" ASC limit 1000;" ;
2023-06-27 15:46:42 +08:00
DataSet dataSet2 = DB . ExecuteDataSet ( cmdText ) ;
2023-04-13 11:51:03 +08:00
if ( dataSet2 . Tables . Count = = 0 | | dataSet2 . Tables [ 0 ] . Rows . Count = = 0 )
{
return list ;
}
for ( int i = 0 ; i < dataSet2 . Tables [ 0 ] . Rows . Count ; i + + )
{
if ( dataSet2 . Tables [ 0 ] . Rows [ i ] [ "station" ] . ToString ( ) = = "Cassette" )
{
num = i + 1 ;
break ;
}
if ( i = = dataSet2 . Tables [ 0 ] . Rows . Count - 1 )
{
num = i + 1 ;
}
}
num = ( ( dataSet2 . Tables [ 0 ] . Rows . Count % num < = 0 ) ? ( dataSet2 . Tables [ 0 ] . Rows . Count / num ) : ( dataSet2 . Tables [ 0 ] . Rows . Count / num + 1 ) ) ;
}
catch ( Exception ex )
{
LOG . Write ( ex ) ;
}
for ( int j = 0 ; j < num ; j + + )
{
list . Add ( GetWaferHistorySecquence ( id , dataSet . Tables [ 0 ] . Rows [ 0 ] [ "sequence_name" ] . ToString ( ) , j ) ) ;
}
}
catch ( Exception ex2 )
{
LOG . Write ( ex2 ) ;
}
return list ;
}
public static WaferHistorySecquence GetWaferHistorySecquence ( string id , string SecquenceName , int count )
{
WaferHistorySecquence waferHistorySecquence = new WaferHistorySecquence ( ) ;
try
{
string cmdText = $"SELECT * FROM \" wafer_move_history \ " where \"wafer_data_guid\" = '{id}' order by \"arrive_time\" ASC limit 1000;" ;
2023-06-27 15:46:42 +08:00
DataSet dataSet = DB . ExecuteDataSet ( cmdText ) ;
2023-04-13 11:51:03 +08:00
if ( dataSet = = null )
{
return waferHistorySecquence ;
}
if ( dataSet . Tables . Count = = 0 | | dataSet . Tables [ 0 ] . Rows . Count = = 0 )
{
return waferHistorySecquence ;
}
int num = 0 ;
for ( int i = 0 ; i < dataSet . Tables [ 0 ] . Rows . Count ; i + + )
{
if ( dataSet . Tables [ 0 ] . Rows [ i ] [ "station" ] . ToString ( ) = = "Cassette" )
{
num = i ;
break ;
}
if ( i = = dataSet . Tables [ 0 ] . Rows . Count - 1 )
{
num = i ;
}
}
int num2 = 0 ;
if ( num2 < dataSet . Tables [ 0 ] . Rows . Count )
{
num2 = ( ( count > 0 ) ? ( num * count + count - 1 ) : ( num * count + count ) ) ;
waferHistorySecquence . SecquenceName = SecquenceName ;
waferHistorySecquence . Recipe = SecquenceName ;
waferHistorySecquence . SecQuenceStartTime = dataSet . Tables [ 0 ] . Rows [ num2 ] [ "arrive_time" ] . ToString ( ) ;
waferHistorySecquence . StartTime = DateTime . Parse ( dataSet . Tables [ 0 ] . Rows [ num2 ] [ "arrive_time" ] . ToString ( ) ) ;
num2 = num * count + count ;
num2 + = num ;
if ( num2 > = dataSet . Tables [ 0 ] . Rows . Count )
{
waferHistorySecquence . SecQuenceEndTime = dataSet . Tables [ 0 ] . Rows [ dataSet . Tables [ 0 ] . Rows . Count - 1 ] [ "arrive_time" ] . ToString ( ) ;
waferHistorySecquence . EndTime = DateTime . Parse ( dataSet . Tables [ 0 ] . Rows [ dataSet . Tables [ 0 ] . Rows . Count - 1 ] [ "arrive_time" ] . ToString ( ) ) ;
}
else
{
waferHistorySecquence . SecQuenceEndTime = dataSet . Tables [ 0 ] . Rows [ num2 ] [ "arrive_time" ] . ToString ( ) ;
waferHistorySecquence . EndTime = DateTime . Parse ( dataSet . Tables [ 0 ] . Rows [ num2 ] [ "arrive_time" ] . ToString ( ) ) ;
}
waferHistorySecquence . ActualTime = ( ( waferHistorySecquence . EndTime . CompareTo ( waferHistorySecquence . StartTime ) < = 0 ) ? "" : waferHistorySecquence . EndTime . Subtract ( waferHistorySecquence . StartTime ) . ToString ( ) ) ;
}
}
catch ( Exception ex )
{
LOG . Write ( ex ) ;
}
return waferHistorySecquence ;
}
}
}