MET08DDUPSP1TBI - v2.47.0 - Job - Zone Rev B

This commit is contained in:
Mike Phares 2022-10-11 09:56:53 -07:00
parent 73b88fed0b
commit 963082a769
3 changed files with 60 additions and 69 deletions

View File

@ -12,19 +12,26 @@ namespace Adaptation.FileHandlers.TIBCO.Transport;
public class Job
{
#nullable restore
public string AutomationMode { get; }
public string BasicType { get; }
public string EpiLayer { get; }
public string CreationUser { get; }
public string Equipment { get; }
public string JobName { get; }
public string LastUpdateUser { get; }
public string LotName { get; }
public string LotState { get; }
public string PackageName { get; }
public string ProcessSpecName { get; }
public string ProcessType { get; }
public string ProductName { get; }
public string Qty { get; }
public string Qty2 { get; }
public string RecipeName { get; }
public string SpecName { get; }
public string StateModel { get; }
public string Status { get; }
//
public bool IsAreaSi { get; }
public DateTime DateTime { get; }
@ -41,8 +48,7 @@ public class Job
string psn;
string zone;
int? rdsNumber;
string epiLayer;
string basicType;
string comment;
const string hyphen = "-";
Input input = JsonSerializer.Deserialize<Input>(mid);
if (!long.TryParse(input.Sequence, out long sequence))
@ -57,36 +63,31 @@ public class Job
(psn, rdsNumber, reactorNumber) = Get(input);
else
(psn, rdsNumber, reactorNumber) = Get(metrologyFileShare, input);
Equipment = input.MesEntity;
IsAreaSi = input.Area == "Si";
JobName = DateTime.Ticks.ToString();
AutomationMode = string.Concat(DateTime.Ticks, ".", input.MesEntity);
if (IsValid(rdsNumber))
(basicType, rdsNumber, psn, reactorNumber, epiLayer, zone) = GetWithValidRDS(lsl2SQLConnectionString, psn, rdsNumber, reactorNumber);
(comment, rdsNumber, psn, reactorNumber, zone) = GetWithValidRDS(lsl2SQLConnectionString, psn, rdsNumber, reactorNumber);
else if (isWorkOrder || reactorNumber.HasValue)
(basicType, rdsNumber, psn, reactorNumber, epiLayer, zone) = Get(lsl2SQLConnectionString, reactorNumber, slotNumber, workOrderNumber, workOrderCassette);
(comment, rdsNumber, psn, reactorNumber, zone) = Get(lsl2SQLConnectionString, reactorNumber, slotNumber, workOrderNumber, workOrderCassette);
else
{
zone = hyphen;
epiLayer = "1";
basicType = hyphen;
}
(comment, zone) = (hyphen, hyphen);
Qty = "1";
ProductName = psn;
EpiLayer = epiLayer;
BasicType = basicType;
RecipeName = input.Recipe;
StateModel = input.EquipmentType;
PackageName = hyphen; //WAFER_ID WaferLot
ProcessSpecName = zone; //WAFER_POS PocketNumber
if (rdsNumber is null)
LotName = input.MID;
else
LotName = rdsNumber.Value.ToString();
if (reactorNumber is null)
ProcessType = string.Empty;
else
ProcessType = reactorNumber.Value.ToString();
Status = hyphen; // INFO
CreationUser = hyphen; // ?
SpecName = hyphen; // LAYER
LotState = hyphen; // LAYER2
LastUpdateUser = hyphen; // ?
Equipment = input.MesEntity; // ?
PackageName = hyphen; // WAFER_ID
Qty2 = input.Sequence; // SEQUENCE
RecipeName = input.Recipe; // PPID
IsAreaSi = input.Area == "Si"; // N/A
StateModel = input.EquipmentType; // ?
JobName = DateTime.Ticks.ToString(); // ?
ProductName = !string.IsNullOrEmpty(psn) ? psn : hyphen; // PRODUCT
AutomationMode = string.Concat(DateTime.Ticks, ".", input.MesEntity); // ?
ProcessSpecName = !string.IsNullOrEmpty(zone) ? zone : hyphen; // WAFER_POS
BasicType = !string.IsNullOrEmpty(comment) ? comment : hyphen; // BASIC_TYPE
LotName = rdsNumber is not null ? rdsNumber.Value.ToString() : hyphen; // MID
ProcessType = reactorNumber is not null ? reactorNumber.Value.ToString() : hyphen; // PROCESS_JOBID
Items.Add(new Item { Name = "0", Type = "NA", Number = (0 + 1).ToString(), Qty = "1", CarrierName = hyphen });
}
}
@ -310,20 +311,19 @@ public class Job
return result;
}
private static (string, int?, string, int?, string, string) Get(string lsl2SQLConnectionString, int? reactorNumber, int? slotNumber, int? workOrderNumber, int? workOrderCassette)
private static (string, int?, string, int?, string) Get(string lsl2SQLConnectionString, int? reactorNumber, int? slotNumber, int? workOrderNumber, int? workOrderCassette)
{
string psn;
string zone;
int? rdsNumber;
string basicType;
string comment;
const int zero = 0;
string epiLayer = "1";
const string hyphen = "-";
string json = GetRunJson(lsl2SQLConnectionString, rds: -1, workOrderNumber, workOrderCassette, slotNumber, reactorNumber);
string json = GetRunJson(lsl2SQLConnectionString, rds: null, workOrderNumber, workOrderCassette, slotNumber, reactorNumber);
if (string.IsNullOrEmpty(json))
{
rdsNumber = null;
basicType = hyphen;
comment = hyphen;
psn = string.Empty;
zone = string.Empty;
}
@ -337,7 +337,7 @@ public class Job
if (!runs.Any())
{
rdsNumber = null;
basicType = hyphen;
comment = hyphen;
psn = string.Empty;
zone = string.Empty;
}
@ -346,8 +346,7 @@ public class Job
psn = runs[zero].PSN;
zone = runs[zero].Zone;
rdsNumber = runs[zero].RdsNo;
if (reactorNumber is null)
reactorNumber = runs[zero].Reactor;
reactorNumber = runs[zero].Reactor;
string loadLockSide = runs[zero].LoadLockSide;
string loadLockSideFull = loadLockSide switch
{
@ -355,23 +354,22 @@ public class Job
"R" => "Right",
_ => loadLockSide,
};
basicType = $"{loadLockSideFull} - {runs[zero].ReactorType}";
comment = $"{loadLockSideFull} - {runs[zero].ReactorType}";
}
}
return new(basicType, rdsNumber, psn, reactorNumber, epiLayer, zone);
return new(comment, rdsNumber, psn, reactorNumber, zone);
}
private static (string, int?, string, int?, string, string) GetWithValidRDS(string lsl2SQLConnectionString, string psn, int? rdsNumber, int? reactorNumber)
private static (string, int?, string, int?, string) GetWithValidRDS(string lsl2SQLConnectionString, string psn, int? rdsNumber, int? reactorNumber)
{
string zone;
string basicType;
string comment;
const int zero = 0;
string epiLayer = "1";
const string hyphen = "-";
string json = GetRunJson(lsl2SQLConnectionString, rdsNumber, workOrderNumber: -1, workOrderCassette: -1, slot: -1, reactor: -1);
string json = GetRunJson(lsl2SQLConnectionString, rdsNumber, workOrderNumber: null, workOrderCassette: null, slot: null, reactor: null);
if (string.IsNullOrEmpty(json))
{
basicType = hyphen;
comment = hyphen;
zone = string.Empty;
}
else
@ -383,16 +381,14 @@ public class Job
{ runs = Array.Empty<Run>(); }
if (!runs.Any())
{
basicType = hyphen;
comment = hyphen;
zone = string.Empty;
}
else
{
if (string.IsNullOrEmpty(psn))
psn = runs[zero].PSN;
if (reactorNumber is null)
reactorNumber = runs[zero].Reactor;
psn = runs[zero].PSN;
zone = runs[zero].Zone;
reactorNumber = runs[zero].Reactor;
string loadLockSide = runs[zero].LoadLockSide;
string loadLockSideFull = loadLockSide switch
{
@ -400,10 +396,10 @@ public class Job
"R" => "Right",
_ => loadLockSide,
};
basicType = $"{loadLockSideFull} - {runs[zero].ReactorType}";
comment = $"{loadLockSideFull} - {runs[zero].ReactorType}";
}
}
return new(basicType, rdsNumber, psn, reactorNumber, epiLayer, zone);
return new(comment, rdsNumber, psn, reactorNumber, zone);
}
}

View File

@ -119,26 +119,26 @@ internal partial class Main
List<IfxDoc> itemDocs = new();
jobDoc.Add(nameof(Job.AutomationMode), job.AutomationMode);
jobDoc.Add("CreationTimestamp", job.DateTime);
jobDoc.Add("CreationUser", "-");
jobDoc.Add(nameof(Job.CreationUser), job.CreationUser);
jobDoc.Add("CurrentState", true);
jobDoc.Add(nameof(Job.Equipment), job.Equipment);
jobDoc.Add(nameof(Job.JobName), job.JobName);
jobDoc.Add("LastUpdateTimestamp", job.DateTime);
jobDoc.Add("LastUpdateUser", "-");
jobDoc.Add(nameof(Job.ProcessType), job.ProcessType); //Key.Process_JobId
jobDoc.Add(nameof(Job.LastUpdateUser), job.LastUpdateUser);
jobDoc.Add(nameof(Job.ProcessType), job.ProcessType);
jobDoc.Add(nameof(Job.StateModel), job.StateModel);
jobDoc.Add("Status", "-"); //Key.Info
lotDoc.Add(nameof(Job.BasicType), job.BasicType); //Key.BasicType
jobDoc.Add(nameof(Job.Status), job.Status);
lotDoc.Add(nameof(Job.BasicType), job.BasicType);
lotDoc.Add("IsActive", true);
lotDoc.Add(nameof(Job.LotName), job.LotName); //Key.MID
lotDoc.Add("LotState", "-"); //Key.Layer2
lotDoc.Add(nameof(Job.PackageName), job.PackageName); //Key.WaferId
lotDoc.Add(nameof(Job.ProcessSpecName), job.ProcessSpecName); //Key.Chamber
lotDoc.Add(nameof(Job.ProductName), job.ProductName); //Key.Product
lotDoc.Add(nameof(Job.LotName), job.LotName);
lotDoc.Add(nameof(Job.LotState), job.LotState);
lotDoc.Add(nameof(Job.PackageName), job.PackageName);
lotDoc.Add(nameof(Job.ProcessSpecName), job.ProcessSpecName);
lotDoc.Add(nameof(Job.ProductName), job.ProductName);
lotDoc.Add(nameof(Job.Qty), job.Qty);
lotDoc.Add("Qty2", "-"); //Key.Sequence
recipeDoc.Add(nameof(Job.RecipeName), job.RecipeName); //Key.PPID
lotDoc.Add("SpecName", job.EpiLayer); //Key.Layer
lotDoc.Add(nameof(Job.Qty2), job.Qty2);
recipeDoc.Add(nameof(Job.RecipeName), job.RecipeName);
lotDoc.Add(nameof(Job.SpecName), job.SpecName);
foreach (Item item in job.Items)
{
itemDoc = new IfxDoc();

View File

@ -53,27 +53,22 @@ public class Job : LoggingUnitTesting, IDisposable
Assert.IsTrue(!string.IsNullOrEmpty(job.ProcessType)); // == "21");
Assert.IsTrue(job.LotName == "123456");
Assert.IsTrue(!string.IsNullOrEmpty(job.ProductName)); // == "4609");
Assert.IsTrue(job.EpiLayer == "1");
job = new(conn, string.Empty, "{\"Area\": \"Si\", \"EquipmentType\": \"MET08RESIMAPCDE\", \"MesEntity\": \"CDE4\", \"Sequence\": \"123456789\", \"MID\": \"-544481-\", \"Recipe\": \"Recipe\"}");
Assert.IsTrue(!string.IsNullOrEmpty(job.ProcessType)); // == "51");
Assert.IsTrue(job.LotName == "544481");
Assert.IsTrue(!string.IsNullOrEmpty(job.ProductName)); // == "5158");
Assert.IsTrue(job.EpiLayer == "1");
job = new(conn, string.Empty, "{\"Area\": \"Si\", \"EquipmentType\": \"MET08RESIMAPCDE\", \"MesEntity\": \"CDE4\", \"Sequence\": \"123456789\", \"MID\": \"00-544481-0000\", \"Recipe\": \"Recipe\"}");
Assert.IsTrue(!string.IsNullOrEmpty(job.ProcessType)); // == "51");
Assert.IsTrue(job.LotName == "544481");
Assert.IsTrue(!string.IsNullOrEmpty(job.ProductName)); // == "5158");
Assert.IsTrue(job.EpiLayer == "1");
job = new(conn, string.Empty, "{\"Area\": \"Si\", \"EquipmentType\": \"MET08RESIMAPCDE\", \"MesEntity\": \"CDE4\", \"Sequence\": \"123456789\", \"MID\": \"37\", \"Recipe\": \"Recipe\"}");
Assert.IsTrue(job.ProcessType == "37");
Assert.IsTrue(!string.IsNullOrEmpty(job.LotName)); // == "549918");
Assert.IsTrue(!string.IsNullOrEmpty(job.ProductName)); // == "5101");
Assert.IsTrue(job.EpiLayer == "1");
job = new(conn, string.Empty, "{\"Area\": \"Si\", \"EquipmentType\": \"MET08RESIMAPCDE\", \"MesEntity\": \"CDE4\", \"Sequence\": \"123456789\", \"MID\": \"00-o171308.1.51-0000\", \"Recipe\": \"Recipe\", \"Slot\": \"11\"}");
Assert.IsTrue(!string.IsNullOrEmpty(job.ProcessType)); // == "54");
Assert.IsTrue(!string.IsNullOrEmpty(job.LotName)); // == "547000");
Assert.IsTrue(!string.IsNullOrEmpty(job.ProductName)); // == "4445");
Assert.IsTrue(job.EpiLayer == "1");
LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
}