Match TFS Changeset 303336

This commit is contained in:
2022-02-01 16:49:48 -07:00
parent f93cca0b32
commit 6259bd1996
97 changed files with 11624 additions and 13 deletions

182
Shared/Description.cs Normal file
View File

@ -0,0 +1,182 @@
using Adaptation.Shared.Metrology;
using Eaf.Core;
using Eaf.EquipmentCore.Control;
using Eaf.EquipmentCore.DataCollection.Reporting;
using Eaf.EquipmentCore.SelfDescription.ElementDescription;
using Eaf.EquipmentCore.SelfDescription.ParameterTypes;
using Ifx.Eaf.EquipmentConnector.File.SelfDescription;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
namespace Shared
{
public class Description
{
public enum RowColumn
{
Test = 1000,
Count,
Index
}
public enum LogisticsColumn
{
EventName = 2000,
NullData,
JobID,
Sequence,
MesEntity,
ReportFullPath,
ProcessJobID,
MID
}
public enum Param
{
String = 0,
Integer = 2,
Double = 3,
Boolean = 4,
StructuredType = 5
}
internal const string FileFound = "FileFound";
public List<EquipmentParameter> EquipmentParameters { get; private set; }
public List<ParameterTypeDefinition> ParameterTypeDefinitions { get; private set; }
private readonly bool _UseCyclical;
private readonly List<string> _HeaderNames;
private readonly Dictionary<string, int> _KeyIndexPairs;
private readonly ParameterTypeDefinition _StructuredType;
private readonly FileConnectorParameterTypeDefinitionProvider _FileConnectorParameterTypeDefinitionProvider;
public Description(ILogic logic, ConfigDataBase configDataBase, IEquipmentControl equipmentControl)
{
_KeyIndexPairs = new Dictionary<string, int>();
_HeaderNames = configDataBase.GetHeaderNames(logic);
_UseCyclical = configDataBase.UseCyclicalForDescription;
_StructuredType = new StructuredType(nameof(StructuredType), string.Empty, new List<Field>());
_FileConnectorParameterTypeDefinitionProvider = new FileConnectorParameterTypeDefinitionProvider();
EquipmentParameters = new List<EquipmentParameter>();
ParameterTypeDefinitions = new List<ParameterTypeDefinition> { _StructuredType };
Dictionary<string, List<Tuple<Enum, string, string, object>>> keyValuePairsCollection = configDataBase.GetParameterInfo(logic, allowNull: false);
List<ParameterValue> results = GetParameterValues(equipmentControl, keyValuePairsCollection);
}
private List<ParameterValue> GetParameterValues(IEquipmentControl equipmentControl, Dictionary<string, List<Tuple<Enum, string, string, object>>> keyValuePairsCollection)
{
List<ParameterValue> results = new List<ParameterValue>();
Enum param;
object value;
Enum[] @params;
string description;
List<object[]> list;
EquipmentParameter equipmentParameter;
ParameterTypeDefinition parameterTypeDefinition;
bool addToEquipmentParameters = !EquipmentParameters.Any();
foreach (KeyValuePair<string, List<Tuple<Enum, string, string, object>>> keyValuePair in keyValuePairsCollection)
{
if (!addToEquipmentParameters && !_KeyIndexPairs.ContainsKey(keyValuePair.Key))
continue;
@params = (from l in keyValuePair.Value select l.Item1).Distinct().ToArray();
if (@params.Length != 1)
throw new Exception();
if (keyValuePair.Value[0].Item2 != keyValuePair.Key)
throw new Exception();
param = @params[0];
if (!addToEquipmentParameters)
equipmentParameter = EquipmentParameters[_KeyIndexPairs[keyValuePair.Key]];
else
{
description = keyValuePair.Value[0].Item3;
_KeyIndexPairs.Add(keyValuePair.Key, EquipmentParameters.Count());
if (param is Param.StructuredType || (_UseCyclical && !_HeaderNames.Contains(keyValuePair.Key)))
parameterTypeDefinition = _StructuredType;
else
parameterTypeDefinition = _FileConnectorParameterTypeDefinitionProvider.GetParameterTypeDefinition(param.ToString());
equipmentParameter = new EquipmentParameter(keyValuePair.Key, parameterTypeDefinition, description);
EquipmentParameters.Add(equipmentParameter);
}
if (!_UseCyclical || _HeaderNames.Contains(keyValuePair.Key))
value = keyValuePair.Value[0].Item4;
else
{
list = new List<object[]>();
for (int i = 0; i < keyValuePair.Value.Count; i++)
list.Add(new object[] { i, keyValuePair.Value[i].Item4 });
value = list;
}
if (equipmentControl is null || !(param is Param.StructuredType))
results.Add(new ParameterValue(equipmentParameter, value, DateTime.Now));
else
results.Add(equipmentControl.DataCollection.CreateParameterValue(equipmentParameter, value));
}
return results;
}
public List<ParameterValue> GetParameterValues(ILogic logic, IEquipmentControl equipmentControl, JsonElement jsonElement, int? i = null, Dictionary<string, object> keyValuePairs = null)
{
List<ParameterValue> results = new List<ParameterValue>();
if (_UseCyclical && (i is null || i.Value > 0))
throw new Exception();
if (jsonElement.ValueKind != JsonValueKind.Array)
throw new Exception();
Enum param;
Tuple<Enum, string, string, object> tuple;
JsonElement[] jsonElements = jsonElement.EnumerateArray().ToArray();
Dictionary<string, List<Tuple<Enum, string, string, object>>> keyValuePairsCollection = new Dictionary<string, List<Tuple<Enum, string, string, object>>>();
for (int r = i.Value; r < jsonElements.Length; r++)
{
foreach (JsonProperty jsonProperty in jsonElement[r].EnumerateObject())
{
if (jsonProperty.Value.ValueKind == JsonValueKind.Object || jsonProperty.Value.ValueKind == JsonValueKind.Array)
{
param = Param.StructuredType;
//jValue = jObject.Value<JValue>("Item1");
throw new NotImplementedException("Item1");
}
else
{
switch (jsonProperty.Value.ValueKind)
{
case JsonValueKind.String: param = Param.String; break;
case JsonValueKind.Number: param = Param.Double; break;
case JsonValueKind.True:
case JsonValueKind.False: param = Param.Boolean; break;
case JsonValueKind.Null: param = Param.String; break;
default: param = Param.StructuredType; break;
}
}
tuple = new Tuple<Enum, string, string, object>(param, jsonProperty.Name, string.Empty, jsonProperty.Value.ToString());
if (!keyValuePairsCollection.ContainsKey(jsonProperty.Name))
keyValuePairsCollection.Add(jsonProperty.Name, new List<Tuple<Enum, string, string, object>>());
keyValuePairsCollection[jsonProperty.Name].Add(tuple);
}
if (!_UseCyclical)
break;
}
results = GetParameterValues(equipmentControl, keyValuePairsCollection);
return results;
}
public static string GetCellName()
{
string result;
if (Backbone.Instance?.CellName is null)
result = string.Empty;
else
result = Backbone.Instance.CellName;
if (result.Contains("-IO"))
result = result.Replace("-IO", string.Empty);
return result;
}
}
}

178
Shared/ExtendedParameter.cs Normal file
View File

@ -0,0 +1,178 @@
using Shared.Metrology;
using System;
using System.Collections.Generic;
namespace Shared
{
public class ExtendedParameter
{
public string DiplayName { get; set; }
public string ControlPlanName { get; set; }
public bool? CriticalToShip { get; set; }
public string Unit { get; set; }
public double? LSL { get; set; }
public double? TSL { get; set; }
public double? USL { get; set; }
public string Value { get; set; }
public bool? Ignore { get; set; }
//public class ExtractorKeys
public string Lot { get; set; } //1
public string ToolID { get; set; } //2
public string Process { get; set; } //3
public string WaferID { get; set; } //4
public string Part { get; set; } //5
public string Recipe { get; set; } //6
public string ProcessFlow { get; set; } //7
//public class DataKeys
public string Employee { get; set; } //1
public string SID { get; set; } //2
public string WaferRegion { get; set; } //3
public string WaferScribe { get; set; } //4
public string WaferPosition { get; set; } //5
public string X { get; set; } //6
public string Y { get; set; } //7
public string EAFCellInstance { get; set; } //8
public string EAFReference { get; set; } //9
public string IQSReference { get; set; } //10
public ExtendedParameter(Logistics logistics, string diplayName, string controlPlanName)
{
DiplayName = diplayName;
ControlPlanName = controlPlanName;
CriticalToShip = null;
Unit = string.Empty;
LSL = null;
TSL = null;
USL = null;
Ignore = null;
Value = string.Empty;
//public class ExtractorKeys
Lot = string.Empty; //1
ToolID = string.Empty; //2
Process = string.Empty; //3
WaferID = string.Empty; //4
Part = string.Empty; //5
Recipe = string.Empty; //6
ProcessFlow = string.Empty; //7
//public class DataKeys
Employee = string.Empty; //1
SID = string.Empty; //2
WaferRegion = string.Empty; //3
WaferScribe = string.Empty; //4
WaferPosition = string.Empty; //5
X = string.Empty; //6
Y = string.Empty; //7
EAFCellInstance = string.Empty; //8
EAFReference = string.Empty; //9
IQSReference = string.Empty; //10
//
Lot = "-";
SID = "-";
Part = "-";
if (!(logistics is null))
{
ToolID = logistics.MesEntity;
EAFCellInstance = logistics.JobID;
}
}
public override string ToString()
{
return Value;
}
internal void Set(EquipmentConnection equipmentConnection, string queryFilter, Dictionary<Enum, string> allColumnCollection)
{
Column key;
EAFReference = equipmentConnection.ToString();
if (string.IsNullOrEmpty(queryFilter))
IQSReference = null;
else
IQSReference = queryFilter;
//
key = Column.SID;
if (!allColumnCollection.ContainsKey(key))
SID = "-";
else
SID = allColumnCollection[key];
key = Column.Employee;
if (!allColumnCollection.ContainsKey(key))
Employee = "AUTO";
else
Employee = allColumnCollection[key];
//
key = Column.Lot;
if (allColumnCollection.ContainsKey(key))
Lot = allColumnCollection[key];
//
key = Column.Part;
if (allColumnCollection.ContainsKey(key))
Part = allColumnCollection[key];
//
key = Column.Process;
if (allColumnCollection.ContainsKey(key))
Process = allColumnCollection[key];
//
key = Column.Recipe;
if (allColumnCollection.ContainsKey(key))
Recipe = allColumnCollection[key];
//
key = Column.Wafer_ID;
if (allColumnCollection.ContainsKey(key))
WaferID = allColumnCollection[key];
key = Column.Denton_Gun_Pocket;
if (allColumnCollection.ContainsKey(key))
WaferID = allColumnCollection[key];
key = Column.WaferPocket_Candela;
if (allColumnCollection.ContainsKey(key))
WaferID = allColumnCollection[key];
key = Column.WaferPocket_Warp;
if (allColumnCollection.ContainsKey(key))
WaferID = allColumnCollection[key];
//
key = Column.Wafer_ID;
if (allColumnCollection.ContainsKey(key))
WaferID = allColumnCollection[key];
key = Column.Denton_Gun_Pocket;
if (allColumnCollection.ContainsKey(key))
WaferID = allColumnCollection[key];
key = Column.WaferPocket_Candela;
if (allColumnCollection.ContainsKey(key))
WaferID = allColumnCollection[key];
key = Column.WaferPocket_Warp;
if (allColumnCollection.ContainsKey(key))
WaferID = allColumnCollection[key];
//
key = Column.Wafer_Region;
if (allColumnCollection.ContainsKey(key))
WaferRegion = allColumnCollection[key];
key = Column.Wafer_Scribe;
if (allColumnCollection.ContainsKey(key))
WaferScribe = allColumnCollection[key];
key = Column.WaferPosition_BV;
if (allColumnCollection.ContainsKey(key))
WaferPosition = allColumnCollection[key];
key = Column.WaferPosition_CV;
if (allColumnCollection.ContainsKey(key))
WaferPosition = allColumnCollection[key];
key = Column.WaferPosition_Hall;
if (allColumnCollection.ContainsKey(key))
WaferPosition = allColumnCollection[key];
key = Column.WaferPosition_PR;
if (allColumnCollection.ContainsKey(key))
WaferPosition = allColumnCollection[key];
key = Column.X_Coord;
if (allColumnCollection.ContainsKey(key))
X = allColumnCollection[key];
key = Column.Y_Coord;
if (allColumnCollection.ContainsKey(key))
Y = allColumnCollection[key];
}
}
}

View File

@ -0,0 +1,35 @@
using Ifx.Eaf.EquipmentConnector.File.Component;
using Ifx.Eaf.EquipmentConnector.File.Configuration;
using System.Collections.Generic;
namespace Shared
{
public class FilePathGenerator : Ifx.Eaf.EquipmentConnector.File.Component.FilePathGenerator
{
public FileConnectorConfiguration FileConnectorConfiguration { get; private set; }
public FilePathGenerator(FileConnectorConfiguration config, Dictionary<string, string> customPattern = null) : base(config, customPattern)
{
FileConnectorConfiguration = config;
}
public FilePathGenerator(FileConnectorConfiguration config, File file, bool isErrorFile = false, Dictionary<string, string> customPattern = null) : base(config, file, isErrorFile, customPattern)
{
FileConnectorConfiguration = config;
}
public FilePathGenerator(FileConnectorConfiguration config, string sourceFilePath, bool isErrorFile = false, Dictionary<string, string> customPattern = null) : base(config, sourceFilePath, isErrorFile, customPattern)
{
FileConnectorConfiguration = config;
}
public string GetSubFolderPath()
{
return SubFolderPath;
}
}
}

View File

@ -0,0 +1,67 @@
using System.IO;
namespace Shared
{
public class FilePathGeneratorInfo
{
public string To { get; protected set; }
public string From { get; protected set; }
public bool IsErrorFile { get; protected set; }
public string SubFolderPath { get; protected set; }
public string FirstDirectory { get; protected set; }
public string ReportFullPath { get; protected set; }
public string ResolvedFileLocation { get; protected set; }
public FilePathGeneratorInfo(object originalFilePathGenerator, string reportFullPath, bool isErrorFile, System.Collections.Generic.Dictionary<string, string> fileParameter)
{
ReportFullPath = reportFullPath;
IsErrorFile = isErrorFile;
if (originalFilePathGenerator is null || !(originalFilePathGenerator is FilePathGenerator))
{
FirstDirectory = string.Empty;
ResolvedFileLocation = string.Empty;
To = string.Empty;
From = string.Empty;
}
else
{
string directorySeparatorChar = Path.DirectorySeparatorChar.ToString();
FilePathGenerator original = (FilePathGenerator)originalFilePathGenerator;
FilePathGenerator filePathGenerator = new FilePathGenerator(original.FileConnectorConfiguration, reportFullPath, isErrorFile);
SubFolderPath = filePathGenerator.GetSubFolderPath();
if (string.IsNullOrEmpty(SubFolderPath))
FirstDirectory = SubFolderPath;
else
FirstDirectory = SubFolderPath.Split(Path.DirectorySeparatorChar)[0];
ResolvedFileLocation = filePathGenerator.GetTargetFolder();
if (string.IsNullOrEmpty(ResolvedFileLocation) && string.IsNullOrEmpty(SubFolderPath))
To = string.Empty;
else if (string.IsNullOrEmpty(SubFolderPath))
To = ResolvedFileLocation;
else
To = string.Concat(ResolvedFileLocation.Replace(SubFolderPath, string.Empty), Path.DirectorySeparatorChar, FirstDirectory);
#if (true)
if (string.IsNullOrEmpty(original.FileConnectorConfiguration.DefaultPlaceHolderValue))
original.FileConnectorConfiguration.DefaultPlaceHolderValue = "NA";
if (!(fileParameter is null) && fileParameter.Count == 1 && To.Contains(original.FileConnectorConfiguration.DefaultPlaceHolderValue))
{
foreach (var keyValuePair in fileParameter)
To = To.Replace(string.Concat(original.FileConnectorConfiguration.DefaultPlaceHolderValue), keyValuePair.Value);
}
#endif
if (original.FileConnectorConfiguration.SourceFileLocation.EndsWith(directorySeparatorChar))
From = string.Concat(original.FileConnectorConfiguration.SourceFileLocation, FirstDirectory);
else
From = string.Concat(original.FileConnectorConfiguration.SourceFileLocation, Path.DirectorySeparatorChar, FirstDirectory);
if (From.EndsWith(directorySeparatorChar) && !To.EndsWith(directorySeparatorChar))
To = string.Concat(To, Path.DirectorySeparatorChar);
else if (To.EndsWith(directorySeparatorChar) && !From.EndsWith(directorySeparatorChar))
To = To.Remove(To.Length - 1, 1);
}
}
}
}