Refactor TIBCO transport classes to integrate IQS connection string; update Job and RunDataSheet constructors to accommodate new parameters
This commit is contained in:
@ -19,6 +19,7 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
public const string BarcodeHostFileShare = @"\\mesfs.infineon.com\EC_Metrology_Si\BarcodeHost\API";
|
public const string BarcodeHostFileShare = @"\\mesfs.infineon.com\EC_Metrology_Si\BarcodeHost\API";
|
||||||
public const string MetrologyFileShare = @"\\mesfs.infineon.com\EC_Metrology_Si\WorkMaterialOut\API";
|
public const string MetrologyFileShare = @"\\mesfs.infineon.com\EC_Metrology_Si\WorkMaterialOut\API";
|
||||||
public const string OpenInsightApplicationProgrammingInterface = @"http://oi-metrology-viewer-api.mes.infineon.com:8080/api/oiWizard";
|
public const string OpenInsightApplicationProgrammingInterface = @"http://oi-metrology-viewer-api.mes.infineon.com:8080/api/oiWizard";
|
||||||
|
public const string IQSConnectionString = @"Data Source=messqlec1.infineon.com\PROD1,53959;Initial Catalog=IRMNSPC;Integrated Security=True";
|
||||||
public const string LSL2SQLConnectionString = @"Data Source=messqlec1.infineon.com\PROD1,53959;Initial Catalog=LSL2SQL;Persist Security Info=True;User ID=srpadmin;Password=0okm9ijn;";
|
public const string LSL2SQLConnectionString = @"Data Source=messqlec1.infineon.com\PROD1,53959;Initial Catalog=LSL2SQL;Persist Security Info=True;User ID=srpadmin;Password=0okm9ijn;";
|
||||||
|
|
||||||
private long? _TickOffset;
|
private long? _TickOffset;
|
||||||
@ -38,6 +39,9 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
string barcodeHostFileShare = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Barcode.Host.FileShare");
|
string barcodeHostFileShare = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Barcode.Host.FileShare");
|
||||||
if (barcodeHostFileShare != BarcodeHostFileShare)
|
if (barcodeHostFileShare != BarcodeHostFileShare)
|
||||||
throw new NotSupportedException($"Update configuration for [{nameof(BarcodeHostFileShare)}]");
|
throw new NotSupportedException($"Update configuration for [{nameof(BarcodeHostFileShare)}]");
|
||||||
|
string iqsConnectionString = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "IQS.ConnectionString");
|
||||||
|
if (iqsConnectionString != IQSConnectionString)
|
||||||
|
throw new NotSupportedException($"Update configuration for [{nameof(IQSConnectionString)}]");
|
||||||
string lsl2SQLConnectionString = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "ConnectionString.LSL2SQL");
|
string lsl2SQLConnectionString = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "ConnectionString.LSL2SQL");
|
||||||
if (lsl2SQLConnectionString != LSL2SQLConnectionString)
|
if (lsl2SQLConnectionString != LSL2SQLConnectionString)
|
||||||
throw new NotSupportedException($"Update configuration for [{nameof(LSL2SQLConnectionString)}]");
|
throw new NotSupportedException($"Update configuration for [{nameof(LSL2SQLConnectionString)}]");
|
||||||
@ -53,14 +57,14 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
string tibcoParameterSubjectPrefix = GetPropertyValue(cellInstanceConnectionName, tibcoParameters, "TIBCO.IFX_SUBJECT_PREFIX");
|
string tibcoParameterSubjectPrefix = GetPropertyValue(cellInstanceConnectionName, tibcoParameters, "TIBCO.IFX_SUBJECT_PREFIX");
|
||||||
string tibcoParameterConfigurationLocation = GetPropertyValue(cellInstanceConnectionName, tibcoParameters, "TIBCO.IFX_CONFIGURATION_LOCATION");
|
string tibcoParameterConfigurationLocation = GetPropertyValue(cellInstanceConnectionName, tibcoParameters, "TIBCO.IFX_CONFIGURATION_LOCATION");
|
||||||
string tibcoParameterConfigurationLocationCopy = GetPropertyValue(cellInstanceConnectionName, tibcoParameters, "TIBCO.IFX_CONFIGURATION_LOCATION_LOCAL_COPY");
|
string tibcoParameterConfigurationLocationCopy = GetPropertyValue(cellInstanceConnectionName, tibcoParameters, "TIBCO.IFX_CONFIGURATION_LOCATION_LOCAL_COPY");
|
||||||
if (!Directory.Exists(MetrologyFileShare))
|
if (!Directory.Exists(metrologyFileShare))
|
||||||
throw new Exception($"Unable to access file-share <{MetrologyFileShare}>");
|
throw new Exception($"Unable to access file-share <{MetrologyFileShare}>");
|
||||||
if (!Directory.Exists(BarcodeHostFileShare))
|
if (!Directory.Exists(barcodeHostFileShare))
|
||||||
throw new Exception($"Unable to access file-share <{BarcodeHostFileShare}>");
|
throw new Exception($"Unable to access file-share <{BarcodeHostFileShare}>");
|
||||||
if (_IsEAFHosted)
|
if (_IsEAFHosted)
|
||||||
{
|
{
|
||||||
HttpClient httpClient = new() { BaseAddress = new(OpenInsightApplicationProgrammingInterface) };
|
HttpClient httpClient = new() { BaseAddress = new(openInsightApplicationProgrammingInterface) };
|
||||||
Transport.Main.Initialize(smtp, cellInstanceName, fileConnectorConfiguration, LSL2SQLConnectionString, MetrologyFileShare, BarcodeHostFileShare, httpClient);
|
Transport.Main.Initialize(smtp, cellInstanceName, fileConnectorConfiguration, iqsConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient);
|
||||||
if (!string.IsNullOrEmpty(fileConnectorConfiguration.SourceFileLocation))
|
if (!string.IsNullOrEmpty(fileConnectorConfiguration.SourceFileLocation))
|
||||||
_ = Transport.Main.Setup(useSleep: true, setIfxTransport: true, tibcoParameterChannel, tibcoParameterSubjectPrefix, tibcoParameterConfigurationLocation, tibcoParameterConfigurationLocationCopy, tibcoParameterSubject);
|
_ = Transport.Main.Setup(useSleep: true, setIfxTransport: true, tibcoParameterChannel, tibcoParameterSubjectPrefix, tibcoParameterConfigurationLocation, tibcoParameterConfigurationLocationCopy, tibcoParameterSubject);
|
||||||
else
|
else
|
||||||
|
@ -41,7 +41,7 @@ public partial class Job
|
|||||||
public DateTime DateTime { get; }
|
public DateTime DateTime { get; }
|
||||||
public List<Item> Items { get; }
|
public List<Item> Items { get; }
|
||||||
|
|
||||||
public Job(string lsl2SQLConnectionString, string metrologyFileShare, string barcodeHostFileShare, HttpClient httpClient, string mid, DateTime enteredDateTimeFilter, DateTime loadSignatureDateTimeFilter)
|
public Job(string iqsSQLConnectionString, string lsl2SQLConnectionString, string metrologyFileShare, string barcodeHostFileShare, HttpClient httpClient, string mid, DateTime enteredDateTimeFilter, DateTime loadSignatureDateTimeFilter)
|
||||||
{
|
{
|
||||||
const int zero = 0;
|
const int zero = 0;
|
||||||
Items = new List<Item>();
|
Items = new List<Item>();
|
||||||
@ -108,6 +108,20 @@ public partial class Job
|
|||||||
catch (Exception)
|
catch (Exception)
|
||||||
{ runDataSheetRoot = null; }
|
{ runDataSheetRoot = null; }
|
||||||
}
|
}
|
||||||
|
string? basicType;
|
||||||
|
string? jobNames = GetJobNames(input);
|
||||||
|
if (string.IsNullOrEmpty(jobNames) || commonB.RDSNumber is null || commonB.ReactorNumber is null || string.IsNullOrEmpty(commonB.PSN))
|
||||||
|
basicType = hyphen;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int? runCount;
|
||||||
|
string commandText = GetCommandText(commonB, jobNames);
|
||||||
|
try
|
||||||
|
{ runCount = GetScalar(iqsSQLConnectionString, commandText); }
|
||||||
|
catch (Exception)
|
||||||
|
{ runCount = null; }
|
||||||
|
basicType = runCount is null ? hyphen : runCount.ToString();
|
||||||
|
}
|
||||||
Qty = "1";
|
Qty = "1";
|
||||||
Status = hyphen; // INFO
|
Status = hyphen; // INFO
|
||||||
CreationUser = hyphen; // ?
|
CreationUser = hyphen; // ?
|
||||||
@ -116,10 +130,10 @@ public partial class Job
|
|||||||
PackageName = hyphen; // WAFER_ID
|
PackageName = hyphen; // WAFER_ID
|
||||||
Qty2 = input.Sequence; // SEQUENCE
|
Qty2 = input.Sequence; // SEQUENCE
|
||||||
RecipeName = input.Recipe; // PPID
|
RecipeName = input.Recipe; // PPID
|
||||||
|
BasicType = basicType; // BASIC_TYPE
|
||||||
IsAreaSi = input.Area == "Si"; // N/A
|
IsAreaSi = input.Area == "Si"; // N/A
|
||||||
StateModel = input.EquipmentType; // ?
|
StateModel = input.EquipmentType; // ?
|
||||||
JobName = DateTime.Ticks.ToString(); // ?
|
JobName = DateTime.Ticks.ToString(); // ?
|
||||||
BasicType = GetComment(hyphen, runDataSheetRoot, commonB); // BASIC_TYPE
|
|
||||||
AutomationMode = string.Concat(DateTime.Ticks, ".", input.MesEntity); // ?
|
AutomationMode = string.Concat(DateTime.Ticks, ".", input.MesEntity); // ?
|
||||||
SpecName = !string.IsNullOrEmpty(commonB.Layer) ? commonB.Layer : hyphen; // LAYER
|
SpecName = !string.IsNullOrEmpty(commonB.Layer) ? commonB.Layer : hyphen; // LAYER
|
||||||
ProductName = !string.IsNullOrEmpty(commonB.PSN) ? commonB.PSN : hyphen; // PRODUCT
|
ProductName = !string.IsNullOrEmpty(commonB.PSN) ? commonB.PSN : hyphen; // PRODUCT
|
||||||
@ -131,27 +145,6 @@ public partial class Job
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string GetComment(string hyphen, RunDataSheetRoot? runDataSheetRoot, CommonB commonB)
|
|
||||||
{
|
|
||||||
string result;
|
|
||||||
string? loadLockSide = commonB.LoadLockSide;
|
|
||||||
if (string.IsNullOrEmpty(loadLockSide) && commonB.RDSNumber is not null)
|
|
||||||
loadLockSide = runDataSheetRoot?.RunDataSheet?.LoadLockSide;
|
|
||||||
if (string.IsNullOrEmpty(loadLockSide) || string.IsNullOrEmpty(commonB.ReactorType))
|
|
||||||
result = hyphen;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
string loadLockSideFull = loadLockSide switch
|
|
||||||
{
|
|
||||||
"L" => "Left",
|
|
||||||
"R" => "Right",
|
|
||||||
_ => loadLockSide,
|
|
||||||
};
|
|
||||||
result = $"{loadLockSideFull} - {commonB.ReactorType}";
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static int? GetReactorNumber(Input input)
|
private static int? GetReactorNumber(Input input)
|
||||||
{
|
{
|
||||||
int? result;
|
int? result;
|
||||||
@ -564,12 +557,12 @@ public partial class Job
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string GetRunJson(string lsl2SQLConnectionString, string commandText)
|
private static string GetRunJson(string connectionString, string commandText)
|
||||||
{
|
{
|
||||||
StringBuilder result = new();
|
StringBuilder result = new();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using SqlConnection sqlConnection = new(lsl2SQLConnectionString);
|
using SqlConnection sqlConnection = new(connectionString);
|
||||||
sqlConnection.Open();
|
sqlConnection.Open();
|
||||||
using SqlCommand sqlCommand = new(commandText, sqlConnection);
|
using SqlCommand sqlCommand = new(commandText, sqlConnection);
|
||||||
SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(CommandBehavior.SequentialAccess);
|
SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(CommandBehavior.SequentialAccess);
|
||||||
@ -788,4 +781,62 @@ public partial class Job
|
|||||||
zone: zone);
|
zone: zone);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static string? GetJobNames(Input input) =>
|
||||||
|
input.EquipmentType switch
|
||||||
|
{
|
||||||
|
"MET08ANLYSDIFAAST230" => "'SPV01'",
|
||||||
|
"MET08DDUPSFS6420" => "'TENCOR1','TENCOR2','TENCOR3'",
|
||||||
|
"MET08DDUPSP1TBI" => "'SP101'",
|
||||||
|
"MET08RESIHGCV" => "'HGCV1','HGCV2','HGCV3'",
|
||||||
|
"MET08RESIMAPCDE" => "'CDE1','CDE2','CDE3','CDE4','CDE5','CDE6'",
|
||||||
|
"MET08RESISRP2100" => "'SRP'",
|
||||||
|
"MET08THFTIRQS408M" => "'BIORAD2','BIORAD3','BIORAD4','BIORAD5'",
|
||||||
|
"MET08THFTIRSTRATUS" => "'BIORAD4','BIORAD5'",
|
||||||
|
_ => null,
|
||||||
|
};
|
||||||
|
|
||||||
|
private static string GetCommandText(CommonB commonB, string jobNames)
|
||||||
|
{ // cSpell:disable
|
||||||
|
List<string> results = new();
|
||||||
|
results.Add(" select count(distinct(se.f_sgrp)) count_se_sgrp ");
|
||||||
|
results.Add(" from [spcepiworld].[dbo].[sgrp_ext] se ");
|
||||||
|
results.Add(" join [spcepiworld].[dbo].[prcs_dat] pr ");
|
||||||
|
results.Add(" on se.f_prcs = pr.f_prcs ");
|
||||||
|
results.Add(" join [spcepiworld].[dbo].[job_dat] jd ");
|
||||||
|
results.Add(" on se.f_job = jd.f_job ");
|
||||||
|
results.Add(" join [spcepiworld].[dbo].[part_lot] pl ");
|
||||||
|
results.Add(" on se.f_lot = pl.f_lot ");
|
||||||
|
results.Add(" join [spcepiworld].[dbo].[part_dat] pd ");
|
||||||
|
results.Add(" on se.f_part = pd.f_part ");
|
||||||
|
results.Add(" join [spcepiworld].[dbo].[test_dat] td ");
|
||||||
|
results.Add(" on se.f_test = td.f_test ");
|
||||||
|
results.Add(" where se.f_flag = 0 ");
|
||||||
|
results.Add($" and pl.f_name = '{commonB.RDSNumber}' ");
|
||||||
|
results.Add($" and pr.f_name = '{commonB.ReactorNumber}' ");
|
||||||
|
results.Add($" and pd.f_name = '{commonB.PSN}' ");
|
||||||
|
results.Add($" and jd.f_name in ({jobNames}) ");
|
||||||
|
return string.Join(Environment.NewLine, results);
|
||||||
|
} // cSpell:restore
|
||||||
|
|
||||||
|
private static int? GetScalar(string connectionString, string commandText)
|
||||||
|
{
|
||||||
|
int? result;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using SqlConnection sqlConnection = new(connectionString);
|
||||||
|
sqlConnection.Open();
|
||||||
|
using SqlCommand sqlCommand = new(commandText, sqlConnection);
|
||||||
|
object scalar = sqlCommand.ExecuteScalar();
|
||||||
|
if (scalar is null || !int.TryParse(scalar.ToString(), out int value))
|
||||||
|
result = null;
|
||||||
|
else
|
||||||
|
result = value;
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
result = null;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -17,19 +17,21 @@ internal partial class Main
|
|||||||
private static object _IfxTransport;
|
private static object _IfxTransport;
|
||||||
private static string _CellInstanceName;
|
private static string _CellInstanceName;
|
||||||
private static string _MetrologyFileShare;
|
private static string _MetrologyFileShare;
|
||||||
|
private static string _IQSConnectionString;
|
||||||
private static string _BarcodeHostFileShare;
|
private static string _BarcodeHostFileShare;
|
||||||
private static string _LSL2SQLConnectionString;
|
private static string _LSL2SQLConnectionString;
|
||||||
private static string _TibcoParameterSubjectPrefix;
|
private static string _TibcoParameterSubjectPrefix;
|
||||||
private static HttpClient _HttpClient;
|
private static HttpClient _HttpClient;
|
||||||
private static FileConnectorConfiguration _FileConnectorConfiguration;
|
private static FileConnectorConfiguration _FileConnectorConfiguration;
|
||||||
|
|
||||||
internal static void Initialize(ISMTP smtp, string cellInstanceName, FileConnectorConfiguration fileConnectorConfiguration, string lsl2SQLConnectionString, string metrologyFileShare, string barcodeHostFileShare, HttpClient httpClient)
|
internal static void Initialize(ISMTP smtp, string cellInstanceName, FileConnectorConfiguration fileConnectorConfiguration, string iqsConnectionString, string lsl2SQLConnectionString, string metrologyFileShare, string barcodeHostFileShare, HttpClient httpClient)
|
||||||
{
|
{
|
||||||
_SMTP = smtp;
|
_SMTP = smtp;
|
||||||
_IfxTransport = null;
|
_IfxTransport = null;
|
||||||
_HttpClient = httpClient;
|
_HttpClient = httpClient;
|
||||||
_CellInstanceName = cellInstanceName;
|
_CellInstanceName = cellInstanceName;
|
||||||
_MetrologyFileShare = metrologyFileShare;
|
_MetrologyFileShare = metrologyFileShare;
|
||||||
|
_IQSConnectionString = iqsConnectionString;
|
||||||
_TibcoParameterSubjectPrefix = string.Empty;
|
_TibcoParameterSubjectPrefix = string.Empty;
|
||||||
_BarcodeHostFileShare = barcodeHostFileShare;
|
_BarcodeHostFileShare = barcodeHostFileShare;
|
||||||
_LSL2SQLConnectionString = lsl2SQLConnectionString;
|
_LSL2SQLConnectionString = lsl2SQLConnectionString;
|
||||||
@ -190,7 +192,7 @@ internal partial class Main
|
|||||||
string mid = GetJobsMID(envelopeDocument);
|
string mid = GetJobsMID(envelopeDocument);
|
||||||
DateTime enteredDateTimeFilter = dateTime.AddDays(-356);
|
DateTime enteredDateTimeFilter = dateTime.AddDays(-356);
|
||||||
DateTime loadSignatureDateTimeFilter = dateTime.AddDays(-4);
|
DateTime loadSignatureDateTimeFilter = dateTime.AddDays(-4);
|
||||||
Job job = new(_LSL2SQLConnectionString, _MetrologyFileShare, _BarcodeHostFileShare, _HttpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
|
Job job = new(_IQSConnectionString, _LSL2SQLConnectionString, _MetrologyFileShare, _BarcodeHostFileShare, _HttpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
|
||||||
if (job.IsAreaSi)
|
if (job.IsAreaSi)
|
||||||
{
|
{
|
||||||
IfxDoc sendReply = GetJobsReply(job);
|
IfxDoc sendReply = GetJobsReply(job);
|
||||||
|
@ -6,15 +6,17 @@ public class RunDataSheet
|
|||||||
{
|
{
|
||||||
|
|
||||||
[JsonConstructor]
|
[JsonConstructor]
|
||||||
public RunDataSheet(string loadLockSide, int psn, int reactor)
|
public RunDataSheet(string loadLockSide, int psn, int reactor, string reactorType)
|
||||||
{
|
{
|
||||||
PSN = psn;
|
PSN = psn;
|
||||||
LoadLockSide = loadLockSide;
|
LoadLockSide = loadLockSide;
|
||||||
Reactor = reactor;
|
Reactor = reactor;
|
||||||
|
ReactorType = reactorType;
|
||||||
}
|
}
|
||||||
|
|
||||||
[JsonPropertyName("loadLockSide")] public string LoadLockSide { get; } // { init; get; }
|
[JsonPropertyName("loadLockSide")] public string LoadLockSide { get; } // { init; get; }
|
||||||
[JsonPropertyName("PSN")] public int PSN { get; } // { init; get; }
|
[JsonPropertyName("PSN")] public int PSN { get; } // { init; get; }
|
||||||
[JsonPropertyName("reactor")] public int Reactor { get; } // { init; get; }
|
[JsonPropertyName("reactor")] public int Reactor { get; } // { init; get; }
|
||||||
|
[JsonPropertyName("reactorType")] public string ReactorType { get; } // { init; get; }
|
||||||
|
|
||||||
}
|
}
|
Reference in New Issue
Block a user