12 Commits

Author SHA1 Message Date
c401562813 Add joins for ReactorMode and Description in Job class query for enhanced data retrieval 2025-12-11 15:28:55 -07:00
ed8930bd48 Update FileRead class to use hardcoded column names and indices for process data standard format mapping 2025-12-11 09:03:04 -07:00
7ca641f912 Enhance CommonB and Run classes to include ExportControl and ReactorMode properties; update Job class to utilize new fields for improved data handling 2025-12-11 09:02:54 -07:00
35f5873e22 Refactor WSRequest to streamline attachment handling and improve error checking for PDF file counts 2025-12-11 09:02:36 -07:00
8ee374b2a8 Refactor ProcessDataStandardFormat and add unit tests for v2.61.1
- Updated GetPDSFText method to accept nullable logisticsText parameter.
- Removed unused TryGetPropertyIndex method from ProcessDataStandardFormat.
- Introduced new unit tests for CreateSelfDescription and Extract functionalities in version 2.61.1.
- Implemented logging and file handling in the test classes to ensure proper setup and teardown.
2025-12-02 08:32:55 -07:00
127a24b77e Refactor file handling classes: rename MoveAllFiles to MoveMapFiles, add MoveTextFiles, and update logistics sequence handling across various FileRead implementations.
Bug fix for recipe to session

Add one to run count
2025-11-24 11:10:18 -07:00
8c0380b6bf Update target framework to net10.0 and upgrade package references in MET08DDUPSP1TBI.Tests.csproj; adjust diagnostics in .editorconfig and tasks.json 2025-11-20 16:10:39 -07:00
b79c9d7ea7 Refactor FileRead and ProcessData classes; update recipe handling in FromIQS and Job classes
- Changed the site constant in FileRead to "els" and updated the monInURL accordingly.
- Modified FromIQS to include 'TBI01' in the SQL query for job names.
- Updated Job class to include 'TBI01' in the mapping for MET08DDUPSP1TBI.
- Made GetDefault method in Description static and added GetDefaultJsonElement method.
- Refactored GetExtractResult in FileRead to improve clarity and efficiency, including changes to how logistics and JSON elements are handled.
- Removed unused fields and methods in ProcessData, simplifying the class structure.
- Added a method to add print files in Run class to streamline file handling.
- Updated AdaptationTesting to prevent directory creation for paths containing "10.".
- Improved string comparison in recipes-and-patterns.js for case-insensitive matching.
2025-11-20 16:09:46 -07:00
ea0c145d4a Infineon.EAF.Runtime v2.61.1 2025-10-17 09:37:58 -07:00
72cc064f56 API is now used over Scrape
Refactor CommonB and Job classes to remove LoadLockSide and ReactorType properties; update constructors and methods to accommodate changes and improve data handling
2025-10-17 09:37:47 -07:00
ec90b4fbbd Refactor TIBCO transport classes to integrate IQS connection string; update Job and RunDataSheet constructors to accommodate new parameters 2025-10-13 17:52:21 -07:00
ddf12e5ec0 Add IndexOf and AttemptCounter properties to WSRequest and Description classes; implement getValue function in recipes-and-patterns.js 2025-10-13 17:51:36 -07:00
56 changed files with 2655 additions and 1849 deletions

View File

@ -107,6 +107,7 @@ dotnet_diagnostic.CA1864.severity = none # CA1864: To avoid double lookup, call
dotnet_diagnostic.CA1866.severity = none # CA1866: Use 'string.EndsWith(char)' instead of 'string.EndsWith(string)' when you have a string with a single char
dotnet_diagnostic.CA1869.severity = none # CA1869: Avoid creating a new 'JsonSerializerOptions' instance for every serialization operation. Cache and reuse instances instead.
dotnet_diagnostic.CA2254.severity = none # CA2254: The logging message template should not vary between calls to 'LoggerExtensions.LogInformation(ILogger, string?, params object?[])'
dotnet_diagnostic.CS0618.severity = none # 'member' is obsolete: 'description'
dotnet_diagnostic.IDE0001.severity = warning # IDE0001: Simplify name
dotnet_diagnostic.IDE0002.severity = warning # Simplify (member access) - System.Version.Equals("1", "2"); Version.Equals("1", "2");
dotnet_diagnostic.IDE0004.severity = warning # IDE0004: Cast is redundant.
@ -123,8 +124,9 @@ dotnet_diagnostic.IDE0300.severity = none # IDE0300: Collection initialization c
dotnet_diagnostic.IDE0301.severity = none #IDE0301: Collection initialization can be simplified
dotnet_diagnostic.IDE0305.severity = none # IDE0305: Collection initialization can be simplified
dotnet_diagnostic.MSTEST0015.severity = none # MSTEST0015: Test method {method} should not be ignored
dotnet_diagnostic.MSTEST0037.severity = error # MSTEST0037: Use proper 'Assert' methods
dotnet_diagnostic.MSTEST0037.severity = none # MSTEST0037: Use proper 'Assert' methods
dotnet_diagnostic.SYSLIB1045.severity = none # SYSLIB1045: diagnostics for regex source generation
dotnet_diagnostic.MSTEST0048.severity = none # MSTEST0048: Test method '{method}' should be attributed with 'DataTestMethod' when using 'DataRow' attributes
dotnet_naming_rule.abstract_method_should_be_pascal_case.severity = warning
dotnet_naming_rule.abstract_method_should_be_pascal_case.style = pascal_case
dotnet_naming_rule.abstract_method_should_be_pascal_case.symbols = abstract_method

View File

@ -1,10 +1,43 @@
{
"configurations": [
{
"mode": "debug",
"name": "Go launch file",
"program": "${file}",
"request": "launch",
"type": "go"
},
{
"name": "node Launch Current Opened File",
"program": "${file}",
"request": "launch",
"type": "node"
},
{
"cwd": "${workspaceFolder}",
"internalConsoleOptions": "neverOpen",
"name": "Debug File",
"program": "${file}",
"request": "launch",
"stopOnEntry": false,
"type": "bun",
"watchMode": false
},
{
"cwd": "${workspaceFolder}",
"internalConsoleOptions": "neverOpen",
"name": "Run File",
"noDebug": true,
"program": "${file}",
"request": "launch",
"type": "bun",
"watchMode": false
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"processId": 32760,
"request": "attach",
"processId": 13604
"type": "coreclr"
}
]
}
}

View File

@ -216,7 +216,7 @@
{
"label": "File-Folder-Helper AOT s X Day-Helper-2025-03-20",
"type": "shell",
"command": "L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net8.0/win-x64/publish/File-Folder-Helper.exe",
"command": "L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net10.0/win-x64/publish/File-Folder-Helper.exe",
"args": [
"s",
"X",

View File

@ -17,8 +17,9 @@ public class CellInstanceConnectionName
nameof(Archive) => new Archive.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null),
nameof(Dummy) => new Dummy.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null),
nameof(IQSSi) => new IQSSi.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null),
nameof(MoveAllFiles) => new MoveAllFiles.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null),
nameof(MoveMapFiles) => new MoveMapFiles.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null),
nameof(MoveMatchingFiles) => new MoveMatchingFiles.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null),
nameof(MoveTextFiles) => new MoveTextFiles.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null),
nameof(OpenInsight) => new OpenInsight.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null),
nameof(OpenInsightMetrologyViewer) => new OpenInsightMetrologyViewer.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null),
nameof(OpenInsightMetrologyViewerAttachments) => new OpenInsightMetrologyViewerAttachments.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null),

View File

@ -97,9 +97,9 @@ public class FileRead : Shared.FileRead, IFileRead
private void CallbackInProcessCleared(string sourceArchiveFile, string traceDummyFile, string targetFileLocation, string monARessource, string inProcessDirectory, long sequence, bool warning)
{
const string site = "sjc";
const string site = "els";
string stateName = string.Concat("Dummy_", _EventName);
const string monInURL = "http://moninhttp.sjc.infineon.com/input/text";
const string monInURL = $"http://moninhttp.{site}.infineon.com/input/text";
MonIn monIn = MonIn.GetInstance(monInURL);
try
{

View File

@ -115,50 +115,50 @@ public class FileRead : Shared.FileRead, IFileRead
StringBuilder result = new();
char del = '\t';
txt.Description x = descriptions[0];
_ = result.Append(x.DcnLpdMin).Append(del). // 001 -
Append(x.DcnLpdMax).Append(del). // 002 -
Append(x.DcnLpdMean).Append(del). // 003 - DCN LPD
Append(x.DcnAreaCountMin).Append(del). // 004 -
Append(x.DcnAreaCountMax).Append(del). // 005 -
Append(x.DcnAreaCountMean).Append(del).// 006 - DCN Area
Append(x.DcnAreaMin).Append(del). // 007 -
Append(x.DcnAreaMax).Append(del). // 008 -
Append(x.Date).Append(del). // 009 -
Append(x.DcnHazeAvgMean).Append(del). // 010 - Haze Average
Append(string.Empty).Append(del). // 011 -
Append(string.Empty).Append(del). // 012 -
Append(string.Empty).Append(del). // 013 -
Append(string.Empty).Append(del). // 014 -
Append(string.Empty).Append(del). // 015 -
Append(string.Empty).Append(del). // 016 -
Append(string.Empty).Append(del). // 017 -
Append(string.Empty).Append(del). // 018 -
Append(string.Empty).Append(del). // 019 -
Append(string.Empty).Append(del). // 020 -
Append(string.Empty).Append(del). // 021 -
Append(string.Empty).Append(del). // 022 -
Append(string.Empty).Append(del). // 023 -
Append(string.Empty).Append(del). // 024 -
Append(string.Empty).Append(del). // 025 -
Append(string.Empty).Append(del). // 026 -
Append(string.Empty).Append(del). // 027 -
Append(x.RDS).Append(del). // 028 - Lot
Append(x.Reactor).Append(del). // 029 - Process
Append(x.Recipe).Append(del). // 030 - Part
Append(x.DcnScrMean).Append(del). // 031 - Scratch Count
Append(string.Empty).Append(del). // 032 -
Append(string.Empty).Append(del). // 033 -
Append(string.Empty).Append(del). // 034 -
Append(x.DcnMicroScrMean).Append(del). // 035 - Scratch Length
Append(string.Empty).Append(del). // 036 -
Append(string.Empty).Append(del). // 037 -
Append(string.Empty).Append(del). // 038 -
Append(x.DcnAllMean).Append(del). // 039 - Average Sum of Defects
Append(x.DcnAllMax).Append(del). // 040 - Max Sum of defects
Append(x.DcnAllMin).Append(del). // 041 - Min Sum of Defects
Append(string.Empty).Append(del). // 042 -
Append(logistics.MesEntity).Append(del). // 043 -
Append(x.DcnAreaMean).Append(del). // 044 - DCN MM2
_ = result.Append(x.DcnLpdMin).Append(del). // 001 -
Append(x.DcnLpdMax).Append(del). // 002 -
Append(x.DcnLpdMean).Append(del). // 003 - DCN LPD
Append(x.DcnAreaCountMin).Append(del). // 004 -
Append(x.DcnAreaCountMax).Append(del). // 005 -
Append(x.DcnAreaCountMean).Append(del). // 006 - DCN Area
Append(x.DcnAreaMin).Append(del). // 007 -
Append(x.DcnAreaMax).Append(del). // 008 -
Append(x.Date).Append(del). // 009 -
Append(x.DcnHazeAvgMean).Append(del). // 010 - Haze Average
Append(string.Empty).Append(del). // 011 -
Append(string.Empty).Append(del). // 012 -
Append(string.Empty).Append(del). // 013 -
Append(string.Empty).Append(del). // 014 -
Append(string.Empty).Append(del). // 015 -
Append(string.Empty).Append(del). // 016 -
Append(string.Empty).Append(del). // 017 -
Append(string.Empty).Append(del). // 018 -
Append(string.Empty).Append(del). // 019 -
Append(string.Empty).Append(del). // 020 -
Append(string.Empty).Append(del). // 021 -
Append(string.Empty).Append(del). // 022 -
Append(string.Empty).Append(del). // 023 -
Append(string.Empty).Append(del). // 024 -
Append(string.Empty).Append(del). // 025 -
Append(string.Empty).Append(del). // 026 -
Append(string.Empty).Append(del). // 027 -
Append(x.RDS).Append(del). // 028 - Lot
Append(x.Reactor).Append(del). // 029 - Process
Append(x.Session).Append(del). // 030 - Part
Append(x.DcnScrMean).Append(del). // 031 - Scratch Count
Append(string.Empty).Append(del). // 032 -
Append(string.Empty).Append(del). // 033 -
Append(string.Empty).Append(del). // 034 -
Append(x.DcnMicroScrMean).Append(del). // 035 - Scratch Length
Append(string.Empty).Append(del). // 036 -
Append(string.Empty).Append(del). // 037 -
Append(string.Empty).Append(del). // 038 -
Append(x.DcnAllMean).Append(del). // 039 - Average Sum of Defects
Append(x.DcnAllMax).Append(del). // 040 - Max Sum of defects
Append(x.DcnAllMin).Append(del). // 041 - Min Sum of Defects
Append(string.Empty).Append(del). // 042 -
Append(logistics.MesEntity).Append(del). // 043 -
Append(x.DcnAreaMean).Append(del). // 044 - DCN MM2
AppendLine();
return new Tuple<string, string>(result.ToString(), x.Date);
}
@ -203,10 +203,11 @@ public class FileRead : Shared.FileRead, IFileRead
private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime)
{
Tuple<string, Test[], JsonElement[], List<FileInfo>> results;
ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath);
string[] lines = File.ReadAllLines(reportFullPath);
ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, lines);
_Logistics = new Logistics(reportFullPath, processDataStandardFormat);
SetFileParameterLotIDToLogisticsMID();
JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat);
JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(reportFullPath, lines, processDataStandardFormat);
List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements);
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)

View File

@ -8,7 +8,7 @@ using System.Collections.Generic;
using System.IO;
using System.Text.Json;
namespace Adaptation.FileHandlers.MoveAllFiles;
namespace Adaptation.FileHandlers.MoveMapFiles;
public class FileRead : Shared.FileRead, IFileRead
{

View File

@ -85,9 +85,9 @@ public class FileRead : Shared.FileRead, IFileRead
throw new Exception(cellInstanceConnectionName);
if (!_IsDuplicator)
throw new Exception(cellInstanceConnectionName);
string processDataStandardFormatMappingOldColumnNames = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.Old.Column.Names");
string processDataStandardFormatMappingNewColumnNames = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.New.Column.Names");
string processDataStandardFormatMappingColumnIndices = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.Column.Indices");
string processDataStandardFormatMappingOldColumnNames = "Time,A_LOGISTICS,B_LOGISTICS,Test,Count,Index,MesEntity,Date,Employee,Lot,PSN,Reactor,Recipe,Grade,HeaderUniqueId,RDS,Session,Side,SrcDest,UniqueId,WaferID,DcnAllMax,DcnAllMean,DcnAllMin,DcnAllStdDev,DcnAreaCountMax,DcnAreaCountMean,DcnAreaCountMin,DcnAreaCountStdDev,DcnAreaMax,DcnAreaMean,DcnAreaMin,DcnAreaStdDev,DcnBin1Max,DcnBin1Mean,DcnBin1Min,DcnBin1StdDev,DcnBin2Max,DcnBin2Mean,DcnBin2Min,DcnBin2StdDev,DcnBin3Max,DcnBin3Mean,DcnBin3Min,DcnBin3StdDev,DcnBin4Max,DcnBin4Mean,DcnBin4Min,DcnBin4StdDev,DcnBin5Max,DcnBin5Mean,DcnBin5Min,DcnBin5StdDev,DcnBin6Max,DcnBin6Mean,DcnBin6Min,DcnBin6StdDev,DcnBin7Max,DcnBin7Mean,DcnBin7Min,DcnBin7StdDev,DcnBin8Max,DcnBin8Mean,DcnBin8Min,DcnBin8StdDev,DcnHazeAvgMax,DcnHazeAvgMean,DcnHazeAvgMin,DcnHazeAvgStdDev,DcnHazeMedianMax,DcnHazeMedianMean,DcnHazeMedianMin,DcnHazeMedianStdDev,DcnHazeStdDevMax,DcnHazeStdDevMean,DcnHazeStdDevMin,DcnHazeStdDevStdDev,DcnLpdESMax,DcnLpdESMean,DcnLpdESMin,DcnLpdESStdDev,DcnLpdMax,DcnLpdMean,DcnLpdMin,DcnLpdNMax,DcnLpdNMean,DcnLpdNMin,DcnLpdNStdDev,DcnLpdStdDev,DcnMicroScrMax,DcnMicroScrMean,DcnMicroScrMin,DcnMicroScrStdDev,DcnScrMax,DcnScrMean,DcnScrMin,DcnScrStdDev,DcnSlipMax,DcnSlipMean,DcnSlipMin,DcnSlipStdDev,DnnAllMax,DnnAllMean,DnnAllMin,DnnAllStdDev,DnnAreaCountMax,DnnAreaCountMean,DnnAreaCountMin,DnnAreaCountStdDev,DnnAreaMax,DnnAreaMean,DnnAreaMin,DnnAreaStdDev,DnnBin1Max,DnnBin1Mean,DnnBin1Min,DnnBin1StdDev,DnnBin2Max,DnnBin2Mean,DnnBin2Min,DnnBin2StdDev,DnnBin3Max,DnnBin3Mean,DnnBin3Min,DnnBin3StdDev,DnnBin4Max,DnnBin4Mean,DnnBin4Min,DnnBin4StdDev,DnnBin5Max,DnnBin5Mean,DnnBin5Min,DnnBin5StdDev,DnnBin6Max,DnnBin6Mean,DnnBin6Min,DnnBin6StdDev,DnnBin7Max,DnnBin7Mean,DnnBin7Min,DnnBin7StdDev,DnnBin8Max,DnnBin8Mean,DnnBin8Min,DnnBin8StdDev,DnnHazeAvgMax,DnnHazeAvgMean,DnnHazeAvgMin,DnnHazeAvgStdDev,DnnHazeMedianMax,DnnHazeMedianMean,DnnHazeMedianMin,DnnHazeMedianStdDev,DnnHazeStdDevMax,DnnHazeStdDevMean,DnnHazeStdDevMin,DnnHazeStdDevStdDev,DnnLpdESMax,DnnLpdESMean,DnnLpdESMin,DnnLpdESStdDev,DnnLpdMax,DnnLpdMean,DnnLpdMin,DnnLpdNMax,DnnLpdNMean,DnnLpdNMin,DnnLpdNStdDev,DnnLpdStdDev,DnnMicroScrMax,DnnMicroScrMean,DnnMicroScrMin,DnnMicroScrStdDev,DnnScrMax,DnnScrMean,DnnScrMin,DnnScrStdDev,DnnSlipMax,DnnSlipMean,DnnSlipMin,DnnSlipStdDev,DwnAllMax,DwnAllMean,DwnAllMin,DwnAllStdDev,DwnAreaCountMax,DwnAreaCountMean,DwnAreaCountMin,DwnAreaCountStdDev,DwnAreaMax,DwnAreaMean,DwnAreaMin,DwnAreaStdDev,DwnBin1Max,DwnBin1Mean,DwnBin1Min,DwnBin1StdDev,DwnBin2Max,DwnBin2Mean,DwnBin2Min,DwnBin2StdDev,DwnBin3Max,DwnBin3Mean,DwnBin3Min,DwnBin3StdDev,DwnBin4Max,DwnBin4Mean,DwnBin4Min,DwnBin4StdDev,DwnBin5Max,DwnBin5Mean,DwnBin5Min,DwnBin5StdDev,DwnBin6Max,DwnBin6Mean,DwnBin6Min,DwnBin6StdDev,DwnBin7Max,DwnBin7Mean,DwnBin7Min,DwnBin7StdDev,DwnBin8Max,DwnBin8Mean,DwnBin8Min,DwnBin8StdDev,DwnHazeAvgMax,DwnHazeAvgMean,DwnHazeAvgMin,DwnHazeAvgStdDev,DwnHazeMedianMax,DwnHazeMedianMean,DwnHazeMedianMin,DwnHazeMedianStdDev,DwnHazeStdDevMax,DwnHazeStdDevMean,DwnHazeStdDevMin,DwnHazeStdDevStdDev,DwnLpdESMax,DwnLpdESMean,DwnLpdESMin,DwnLpdESStdDev,DwnLpdMax,DwnLpdMean,DwnLpdMin,DwnLpdNMax,DwnLpdNMean,DwnLpdNMin,DwnLpdNStdDev,DwnLpdStdDev,DwnMicroScrMax,DwnMicroScrMean,DwnMicroScrMin,DwnMicroScrStdDev,DwnScrMax,DwnScrMean,DwnScrMin,DwnScrStdDev,DwnSlipMax,DwnSlipMean,DwnSlipMin,DwnSlipStdDev,DcnAll,DcnArea,DcnAreaCount,DcnBin1,DcnBin2,DcnBin3,DcnBin4,DcnBin5,DcnBin6,DcnBin7,DcnBin8,DcnHazeAvg,DcnHazeMedian,DcnHazeStdDev,DcnLpd,DcnLpdES,DcnLpdN,DcnMicroScr,DcnScr,DcnSlip,DnnAll,DnnArea,DnnAreaCount,DnnBin1,DnnBin2,DnnBin3,DnnBin4,DnnBin5,DnnBin6,DnnBin7,DnnBin8,DnnHazeAvg,DnnHazeMedian,DnnHazeStdDev,DnnLpd,DnnLpdES,DnnLpdN,DnnMicroScr,DnnScr,DnnSlip,DwnAll,DwnArea,DwnAreaCount,DwnBin1,DwnBin2,DwnBin3,DwnBin4,DwnBin5,DwnBin6,DwnBin7,DwnBin8,DwnHazeAvg,DwnHazeMedian,DwnHazeStdDev,DwnLpd,DwnLpdES,DwnLpdN,DwnMicroScr,DwnScr,DwnSlip,EventId,IndexOf,AttemptCounter,ReactorMode,ExportControl,CastingVerification"; // GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.Old.Column.Names");
string processDataStandardFormatMappingNewColumnNames = "Time,A_LOGISTICS,B_LOGISTICS,Count,Sequence,MesEntity,Index,Lot,Session,DcnAllMin,DcnLpdMin,DcnLpdNMin,DcnLpdESMin,DcnMicroScrMin,DcnScrMin,DcnSlipMin,DcnAreaCountMin,DcnAreaMin,DcnHazeAvgMin,DcnHazeMedianMin,DcnHazeStdDevMin,DcnBin1Min,DcnBin2Min,DcnBin3Min,DcnBin4Min,DcnBin5Min,DcnBin6Min,DcnBin7Min,DcnBin8Min,DcnAllMax,DcnLpdMax,DcnLpdNMax,DcnLpdESMax,DcnMicroScrMax,DcnScrMax,DcnSlipMax,DcnAreaCountMax,DcnAreaMax,DcnHazeAvgMax,DcnHazeMedianMax,DcnHazeStdDevMax,DcnBin1Max,DcnBin2Max,DcnBin3Max,DcnBin4Max,DcnBin5Max,DcnBin6Max,DcnBin7Max,DcnBin8Max,DcnAllMean,DcnLpdMean,DcnLpdNMean,DcnLpdESMean,DcnMicroScrMean,DcnScrMean,DcnSlipMean,DcnAreaCountMean,DcnAreaMean,DcnHazeAvgMean,DcnHazeMedianMean,DcnHazeStdDevMean,DcnBin1Mean,DcnBin2Mean,DcnBin3Mean,DcnBin4Mean,DcnBin5Mean,DcnBin6Mean,DcnBin7Mean,DcnBin8Mean,DcnAllStdDev,DcnLpdStdDev,DcnLpdNStdDev,DcnLpdESStdDev,DcnMicroScrStdDev,DcnScrStdDev,DcnSlipStdDev,DcnAreaCountStdDev,DcnAreaStdDev,DcnHazeAvgStdDev,DcnHazeMedianStdDev,DcnHazeStdDevStdDev,DcnBin1StdDev,DcnBin2StdDev,DcnBin3StdDev,DcnBin4StdDev,DcnBin5StdDev,DcnBin6StdDev,DcnBin7StdDev,DcnBin8StdDev,DwnAllMin,DwnLpdMin,DwnLpdNMin,DwnLpdESMin,DwnMicroScrMin,DwnScrMin,DwnSlipMin,DwnAreaCountMin,DwnAreaMin,DwnHazeAvgMin,DwnHazeMedianMin,DwnHazeStdDevMin,DwnBin1Min,DwnBin2Min,DwnBin3Min,DwnBin4Min,DwnBin5Min,DwnBin6Min,DwnBin7Min,DwnBin8Min,DwnAllMax,DwnLpdMax,DwnLpdNMax,DwnLpdESMax,DwnMicroScrMax,DwnScrMax,DwnSlipMax,DwnAreaCountMax,DwnAreaMax,DwnHazeAvgMax,DwnHazeMedianMax,DwnHazeStdDevMax,DwnBin1Max,DwnBin2Max,DwnBin3Max,DwnBin4Max,DwnBin5Max,DwnBin6Max,DwnBin7Max,DwnBin8Max,DwnAllMean,DwnLpdMean,DwnLpdNMean,DwnLpdESMean,DwnMicroScrMean,DwnScrMean,DwnSlipMean,DwnAreaCountMean,DwnAreaMean,DwnHazeAvgMean,DwnHazeMedianMean,DwnHazeStdDevMean,DwnBin1Mean,DwnBin2Mean,DwnBin3Mean,DwnBin4Mean,DwnBin5Mean,DwnBin6Mean,DwnBin7Mean,DwnBin8Mean,DwnAllStdDev,DwnLpdStdDev,DwnLpdNStdDev,DwnLpdESStdDev,DwnMicroScrStdDev,DwnScrStdDev,DwnSlipStdDev,DwnAreaCountStdDev,DwnAreaStdDev,DwnHazeAvgStdDev,DwnHazeMedianStdDev,DwnHazeStdDevStdDev,DwnBin1StdDev,DwnBin2StdDev,DwnBin3StdDev,DwnBin4StdDev,DwnBin5StdDev,DwnBin6StdDev,DwnBin7StdDev,DwnBin8StdDev,DnnAllMin,DnnLpdMin,DnnLpdNMin,DnnLpdESMin,DnnMicroScrMin,DnnScrMin,DnnSlipMin,DnnAreaCountMin,DnnAreaMin,DnnHazeAvgMin,DnnHazeMedianMin,DnnHazeStdDevMin,DnnBin1Min,DnnBin2Min,DnnBin3Min,DnnBin4Min,DnnBin5Min,DnnBin6Min,DnnBin7Min,DnnBin8Min,DnnAllMax,DnnLpdMax,DnnLpdNMax,DnnLpdESMax,DnnMicroScrMax,DnnScrMax,DnnSlipMax,DnnAreaCountMax,DnnAreaMax,DnnHazeAvgMax,DnnHazeMedianMax,DnnHazeStdDevMax,DnnBin1Max,DnnBin2Max,DnnBin3Max,DnnBin4Max,DnnBin5Max,DnnBin6Max,DnnBin7Max,DnnBin8Max,DnnAllMean,DnnLpdMean,DnnLpdNMean,DnnLpdESMean,DnnMicroScrMean,DnnScrMean,DnnSlipMean,DnnAreaCountMean,DnnAreaMean,DnnHazeAvgMean,DnnHazeMedianMean,DnnHazeStdDevMean,DnnBin1Mean,DnnBin2Mean,DnnBin3Mean,DnnBin4Mean,DnnBin5Mean,DnnBin6Mean,DnnBin7Mean,DnnBin8Mean,DnnAllStdDev,DnnLpdStdDev,DnnLpdNStdDev,DnnLpdESStdDev,DnnMicroScrStdDev,DnnScrStdDev,DnnSlipStdDev,DnnAreaCountStdDev,DnnAreaStdDev,DnnHazeAvgStdDev,DnnHazeMedianStdDev,DnnHazeStdDevStdDev,DnnBin1StdDev,DnnBin2StdDev,DnnBin3StdDev,DnnBin4StdDev,DnnBin5StdDev,DnnBin6StdDev,DnnBin7StdDev,DnnBin8StdDev,Side,WaferID,Grade,SrcDest,DcnAll,DcnLpd,DcnLpdN,DcnLpdES,DcnMicroScr,DcnScr,DcnSlip,DcnAreaCount,DcnArea,DcnHazeAvg,DcnHazeMedian,DcnHazeStdDev,DcnBin1,DcnBin2,DcnBin3,DcnBin4,DcnBin5,DcnBin6,DcnBin7,DcnBin8,DwnAll,DwnLpd,DwnLpdN,DwnLpdES,DwnMicroScr,DwnScr,DwnSlip,DwnAreaCount,DwnArea,DwnHazeAvg,DwnHazeMedian,DwnHazeStdDev,DwnBin1,DwnBin2,DwnBin3,DwnBin4,DwnBin5,DwnBin6,DwnBin7,DwnBin8,DnnAll,DnnLpd,DnnLpdN,DnnLpdES,DnnMicroScr,DnnScr,DnnSlip,DnnAreaCount,DnnArea,DnnHazeAvg,DnnHazeMedian,DnnHazeStdDev,DnnBin1,DnnBin2,DnnBin3,DnnBin4,DnnBin5,DnnBin6,DnnBin7,DnnBin8,RDS,PSN,Reactor,Layer,Zone,Employee,InferredLot,Date,EventId,IndexOf,AttemptCounter,ReactorMode,ExportControl,CastingVerification"; // GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.New.Column.Names");
string processDataStandardFormatMappingColumnIndices = "0,1,2,321,3,6,5,320,318,7,314,315,8,251,-1,313,8,249,252,-1,250,29,49,9,69,36,56,16,76,37,57,17,77,41,61,21,81,42,62,22,82,43,63,23,83,44,64,24,84,45,65,25,85,46,66,26,86,47,67,27,87,48,68,28,88,38,58,18,78,39,59,19,79,40,60,20,80,32,52,12,72,30,50,10,31,51,11,71,70,33,53,13,73,34,54,14,74,35,55,15,75,189,209,169,229,196,216,176,236,197,217,177,237,201,221,181,241,202,222,182,242,203,223,183,243,204,224,184,244,205,225,185,245,206,226,186,246,207,227,187,247,208,228,188,248,198,218,178,238,199,219,179,239,200,220,180,240,192,212,172,232,190,210,170,191,211,171,231,230,193,213,173,233,194,214,174,234,195,215,175,235,109,129,89,149,116,136,96,156,117,137,97,157,121,141,101,161,122,142,102,162,123,143,103,163,124,144,104,164,125,145,105,165,126,146,106,166,127,147,107,167,128,148,108,168,118,138,98,158,119,139,99,159,120,140,100,160,112,132,92,152,110,130,90,111,131,91,151,150,113,133,93,153,114,134,94,154,115,135,95,155,253,261,260,265,266,267,268,269,270,271,272,262,263,264,254,256,255,257,258,259,293,301,300,305,306,307,308,309,310,311,312,302,303,304,294,296,295,297,298,299,273,281,280,285,286,287,288,289,290,291,292,282,283,284,274,276,275,277,278,279,280,281,282,283,284,285"; // GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.Column.Indices");
_ProcessDataStandardFormatMapping = ProcessDataStandardFormatMapping.Get(processDataStandardFormatMappingOldColumnNames,
processDataStandardFormatMappingNewColumnNames,
processDataStandardFormatMappingColumnIndices);
@ -267,11 +267,12 @@ public class FileRead : Shared.FileRead, IFileRead
List<Post> results = new();
Post post;
long preWait;
long uniqueSequence = Logistics.GetUniqueSequence(_Logistics);
foreach (PreWith preWith in preWithCollection)
{
if (!_IsEAFHosted)
continue;
if (!_StaticRuns.TryGetValue(_Logistics.Sequence, out List<Shared.Metrology.WS.Results>? wsResults))
if (!_StaticRuns.TryGetValue(uniqueSequence, out List<Shared.Metrology.WS.Results>? wsResults))
wsResults = null;
if (processDataStandardFormat.InputPDSF is null)
File.Move(preWith.MatchingFile, preWith.CheckFile);

View File

@ -0,0 +1,112 @@
using Adaptation.Eaf.Management.ConfigurationData.CellAutomation;
using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration;
using Adaptation.Shared;
using Adaptation.Shared.Duplicator;
using Adaptation.Shared.Methods;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.Json;
namespace Adaptation.FileHandlers.MoveTextFiles;
public class FileRead : Shared.FileRead, IFileRead
{
#nullable enable
private long? _TickOffset;
public FileRead(ISMTP smtp, Dictionary<string, string> fileParameter, string cellInstanceName, int? connectionCount, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList<ModelObjectParameterDefinition> modelObjectParameters, string equipmentDictionaryName, Dictionary<string, List<long>> dummyRuns, Dictionary<long, List<Shared.Metrology.WS.Results>> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) :
base(new Description(), false, smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null)
{
_MinFileLength = 10;
_NullData = string.Empty;
_Logistics = new(this);
if (_FileParameter is null)
throw new Exception(cellInstanceConnectionName);
if (_ModelObjectParameterDefinitions is null)
throw new Exception(cellInstanceConnectionName);
if (_IsDuplicator)
throw new Exception(cellInstanceConnectionName);
}
#nullable disable
void IFileRead.Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, Exception exception) => Move(extractResults);
void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null);
string IFileRead.GetEventDescription()
{
string result = _Description.GetEventDescription();
return result;
}
List<string> IFileRead.GetHeaderNames()
{
List<string> results = _Description.GetHeaderNames();
return results;
}
string[] IFileRead.Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, string to, string from, string resolvedFileLocation, Exception exception)
{
string[] results = Move(extractResults, to, from, resolvedFileLocation, exception);
return results;
}
JsonProperty[] IFileRead.GetDefault()
{
JsonProperty[] results = _Description.GetDefault(this, _Logistics);
return results;
}
Dictionary<string, string> IFileRead.GetDisplayNamesJsonElement()
{
Dictionary<string, string> results = _Description.GetDisplayNamesJsonElement(this);
return results;
}
List<IDescription> IFileRead.GetDescriptions(IFileRead fileRead, List<Test> tests, IProcessData processData)
{
List<IDescription> results = _Description.GetDescriptions(fileRead, _Logistics, tests, processData);
return results;
}
Tuple<string, Test[], JsonElement[], List<FileInfo>> IFileRead.GetExtractResult(string reportFullPath, string eventName)
{
Tuple<string, Test[], JsonElement[], List<FileInfo>> results;
if (string.IsNullOrEmpty(eventName))
throw new Exception();
_ReportFullPath = reportFullPath;
DateTime dateTime = DateTime.Now;
results = GetExtractResult(reportFullPath, dateTime);
if (results.Item3 is null)
results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(results.Item1, Array.Empty<Test>(), JsonSerializer.Deserialize<JsonElement[]>("[]"), results.Item4);
if (results.Item3.Length > 0 && _IsEAFHosted)
WritePDSF(this, results.Item3);
UpdateLastTicksDuration(DateTime.Now.Ticks - dateTime.Ticks);
return results;
}
Tuple<string, Test[], JsonElement[], List<FileInfo>> IFileRead.ReExtract()
{
Tuple<string, Test[], JsonElement[], List<FileInfo>> results;
List<string> headerNames = _Description.GetHeaderNames();
Dictionary<string, string> keyValuePairs = _Description.GetDisplayNamesJsonElement(this);
results = ReExtract(this, headerNames, keyValuePairs);
return results;
}
private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime)
{
if (dateTime == DateTime.MinValue)
throw new ArgumentNullException(nameof(dateTime));
Tuple<string, Test[], JsonElement[], List<FileInfo>> results = new(string.Empty, null, null, new List<FileInfo>());
_TickOffset ??= 0; // new FileInfo(reportFullPath).LastWriteTime.Ticks - dateTime.Ticks;
_Logistics = new Logistics(this, _TickOffset.Value, reportFullPath, useSplitForMID: true);
SetFileParameterLotIDToLogisticsMID();
return results;
}
}

View File

@ -110,7 +110,7 @@ public class FileRead : Shared.FileRead, IFileRead
return results;
}
private void SaveOpenInsightFile(string reportFullPath, DateTime dateTime, ProcessDataStandardFormat processDataStandardFormat, List<txt.Description> descriptions, Test[] tests)
private void SaveOpenInsightFile(string reportFullPath, DateTime dateTime, List<txt.Description> descriptions, Test[] tests)
{
string duplicateFile;
bool isDummyRun = false;
@ -125,13 +125,14 @@ public class FileRead : Shared.FileRead, IFileRead
{
long? subgroupId;
string fileName = Path.GetFileName(reportFullPath);
long uniqueSequence = Logistics.GetUniqueSequence(_Logistics);
long breakAfter = dateTime.AddSeconds(_BreakAfterSeconds).Ticks;
long preWait = _FileConnectorConfiguration?.FileHandleWaitTime is null ? dateTime.AddMilliseconds(1234).Ticks : dateTime.AddMilliseconds(_FileConnectorConfiguration.FileHandleWaitTime.Value).Ticks;
if (string.IsNullOrEmpty(descriptions[0].Reactor) || string.IsNullOrEmpty(descriptions[0].PSN))
subgroupId = null;
else
(subgroupId, int? _, string _) = FromIQS.GetCommandText(_IqsConnectionString, _Logistics, descriptions[0], breakAfter, preWait);
if (_StaticRuns.TryGetValue(_Logistics.Sequence, out List<WS.Results> wsResults))
if (_StaticRuns.TryGetValue(uniqueSequence, out List<WS.Results> wsResults))
{
if (wsResults is null || wsResults.Count != 1)
throw new NullReferenceException($"{nameof(wsResults)} {wsResults?.Count} != 1 {_Logistics.Sequence}!");
@ -143,7 +144,7 @@ public class FileRead : Shared.FileRead, IFileRead
else
duplicateFile = Path.Combine(duplicateDirectory, $"{$"Viewer {subgroupId}".TrimEnd()} {fileName.Replace("Viewer", string.Empty)}");
string weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
FromIQS.Save(_OpenInsightApiECDirectory, _Logistics, reportFullPath, processDataStandardFormat, descriptions.First(), subgroupId, weekOfYear);
FromIQS.Save(_OpenInsightApiECDirectory, _Logistics, reportFullPath, descriptions.First(), subgroupId, weekOfYear);
}
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
{
@ -155,14 +156,15 @@ public class FileRead : Shared.FileRead, IFileRead
private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime)
{
Tuple<string, Test[], JsonElement[], List<FileInfo>> results;
ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath);
string[] lines = File.ReadAllLines(reportFullPath);
ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, lines);
_Logistics = new Logistics(reportFullPath, processDataStandardFormat);
SetFileParameterLotIDToLogisticsMID();
JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat);
JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(reportFullPath, lines, processDataStandardFormat);
List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements);
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
SaveOpenInsightFile(reportFullPath, dateTime, processDataStandardFormat, descriptions, tests);
SaveOpenInsightFile(reportFullPath, dateTime, descriptions, tests);
results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>());
return results;
}

View File

@ -178,7 +178,7 @@ public class FromIQS
results.Add($" and pl.f_name = '{description.RDS}' ");
results.Add($" and pr.f_name = '{description.Reactor}' ");
results.Add($" and pd.f_name = '{description.PSN}' ");
results.Add(" and jd.f_name in ('SP101') ");
results.Add(" and jd.f_name in ('SP101', 'TBI01') ");
results.Add($" and jd.f_name = '{logistics.MesEntity}' ");
results.Add($" and dateadd(HH, -7, (dateadd(SS, convert(bigint, se.f_sgtm), '19700101'))) = '{dateTime}' ");
results.Add(" ) as iq ");
@ -325,74 +325,18 @@ public class FromIQS
return new(result, count, commandText);
}
private static string GetJson(Logistics logistics, ProcessDataStandardFormat processDataStandardFormat, txt.Description description)
internal static void Save(string openInsightApiECDirectory, Logistics logistics, string reportFullPath, txt.Description description, long? subGroupId, string weekOfYear)
{
string result;
StringBuilder stringBuilder = new();
var @object = new
{
description.MesEntity,
description.Employee,
// description.Layer,
description.PSN,
description.RDS,
description.Reactor,
description.Recipe,
// description.Zone,
logistics.DateTimeFromSequence.Ticks
};
string[] pair;
string safeValue;
string[] segments;
string serializerValue;
foreach (string line in processDataStandardFormat.Logistics)
{
segments = line.Split('\t');
if (segments.Length < 2)
continue;
segments = segments[1].Split(';');
_ = stringBuilder.Append('{');
foreach (string segment in segments)
{
pair = segment.Split('=');
if (pair.Length != 2 || pair[0].Length < 3)
continue;
serializerValue = JsonSerializer.Serialize(pair[1]);
safeValue = serializerValue.Substring(1, serializerValue.Length - 2);
_ = stringBuilder.Append('"').Append(pair[0].Substring(2)).Append('"').Append(':').Append('"').Append(safeValue).Append('"').Append(',');
}
if (stringBuilder.Length > 0)
_ = stringBuilder.Remove(stringBuilder.Length - 1, 1);
_ = stringBuilder.Append('}').Append(',');
}
if (stringBuilder.Length > 0)
_ = stringBuilder.Remove(stringBuilder.Length - 1, 1);
_ = stringBuilder.Append(']').Append('}');
_ = stringBuilder.Insert(0, ",\"Logistics\":[");
string json = JsonSerializer.Serialize(@object);
_ = stringBuilder.Insert(0, json.Substring(0, json.Length - 1));
JsonElement? jsonElement = JsonSerializer.Deserialize<JsonElement>(stringBuilder.ToString());
result = jsonElement is null ? "{}" : JsonSerializer.Serialize(jsonElement, new JsonSerializerOptions { WriteIndented = true });
return result;
}
internal static void Save(string openInsightApiECDirectory, Logistics logistics, string reportFullPath, ProcessDataStandardFormat processDataStandardFormat, txt.Description description, long? subGroupId, string weekOfYear)
{
string checkFile;
string fileName = Path.GetFileName(reportFullPath);
string json = GetJson(logistics, processDataStandardFormat, description);
string? ecPathRoot = Path.GetPathRoot(openInsightApiECDirectory);
bool ecExists = ecPathRoot is not null && Directory.Exists(ecPathRoot);
string weekYear = $"{logistics.DateTimeFromSequence:yyyy}_Week_{weekOfYear}";
string ecDirectory = Path.Combine(openInsightApiECDirectory, weekYear, $"-{description.PSN}", $"-{description.Reactor}", $"-{description.RDS}", $"-{subGroupId}");
if (ecExists && !Directory.Exists(ecDirectory))
_ = Directory.CreateDirectory(ecDirectory);
checkFile = Path.Combine(ecDirectory, fileName);
string checkFile = Path.Combine(ecDirectory, fileName);
if (ecExists && !File.Exists(checkFile))
File.Copy(reportFullPath, checkFile);
checkFile = Path.Combine(ecDirectory, $"{logistics.DateTimeFromSequence.Ticks}.json");
if (ecExists && !File.Exists(checkFile))
File.WriteAllText(checkFile, json);
}
private static string GetCommandText(string[] iqsCopyValues)

View File

@ -110,10 +110,11 @@ public class FileRead : Shared.FileRead, IFileRead
return results;
}
private void SendData(string reportFullPath, DateTime dateTime, List<txt.Description> descriptions)
private void SendData(string reportFullPath, DateTime dateTime, JsonElement[] jsonElements, List<txt.Description> descriptions)
{
string checkDirectory;
WSRequest wsRequest = new(this, _Logistics, descriptions);
long uniqueSequence = Logistics.GetUniqueSequence(_Logistics);
WSRequest wsRequest = new(this, _Logistics, jsonElements, descriptions);
int weekOfYear = _Calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday);
string directory = Path.Combine(_OpenInsightMetrologyViewerFileShare, dateTime.Year.ToString(), $"WW{weekOfYear:00}");
checkDirectory = Path.Combine(directory, _Logistics.Sequence.ToString());
@ -126,9 +127,9 @@ public class FileRead : Shared.FileRead, IFileRead
_Log.Debug(wsResults.HeaderId);
lock (_StaticRuns)
{
if (!_StaticRuns.ContainsKey(_Logistics.Sequence))
_StaticRuns.Add(_Logistics.Sequence, new());
_StaticRuns[_Logistics.Sequence].Add(wsResults);
if (!_StaticRuns.ContainsKey(uniqueSequence))
_StaticRuns.Add(uniqueSequence, new());
_StaticRuns[uniqueSequence].Add(wsResults);
}
checkDirectory = Path.Combine(directory, $"-{wsResults.HeaderId}");
if (!Directory.Exists(checkDirectory))
@ -139,14 +140,15 @@ public class FileRead : Shared.FileRead, IFileRead
private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime)
{
Tuple<string, Test[], JsonElement[], List<FileInfo>> results;
ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath);
string[] lines = File.ReadAllLines(reportFullPath);
ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, lines);
_Logistics = new Logistics(reportFullPath, processDataStandardFormat);
SetFileParameterLotIDToLogisticsMID();
JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat);
JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(reportFullPath, lines, processDataStandardFormat);
List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements);
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
SendData(reportFullPath, dateTime, descriptions);
SendData(reportFullPath, dateTime, jsonElements, descriptions);
results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>());
return results;
}

View File

@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text.Json;
namespace Adaptation.FileHandlers.OpenInsightMetrologyViewer;
@ -16,8 +17,17 @@ public class WSRequest
//
public int Id { get; set; }
public string AttemptCounter { get; set; }
public string CellName { get; set; }
public string Date { get; set; }
public string DcnAllMax { get; set; }
public string DcnAllMean { get; set; }
public string DcnAllMin { get; set; }
public string DcnAllStDev { get; set; }
public string DcnAreaCntMax { get; set; }
public string DcnAreaCntMean { get; set; }
public string DcnAreaCntMin { get; set; }
public string IndexOf { get; set; }
public string LotID { get; set; }
public string Operator { get; set; }
public string PSN { get; set; }
@ -26,13 +36,6 @@ public class WSRequest
public string Recipe { get; set; }
public string Session { get; set; }
public string UniqueID { get; set; }
public string DcnAllMax { get; set; }
public string DcnAllMean { get; set; }
public string DcnAllMin { get; set; }
public string DcnAllStDev { get; set; }
public string DcnAreaCntMax { get; set; }
public string DcnAreaCntMean { get; set; }
public string DcnAreaCntMin { get; set; }
public string DcnAreaCntStDev { get; set; }
public string DcnAreaMax { get; set; }
public string DcnAreaMean { get; set; }
@ -271,7 +274,7 @@ public class WSRequest
[Obsolete("For json")] public WSRequest() { }
#pragma warning disable IDE0060
internal WSRequest(IFileRead fileRead, Logistics logistics, List<txt.Description> descriptions, string processDataStandardFormat = null)
internal WSRequest(IFileRead fileRead, Logistics logistics, JsonElement[] jsonElements, List<txt.Description> descriptions, string processDataStandardFormat = null)
#pragma warning restore IDE0060
{
Id = -1;
@ -283,252 +286,254 @@ public class WSRequest
UniqueID = x.UniqueId;
Date = x.Date;
Reactor = x.Reactor;
LotID = x.Lot;
LotID = x.Lot; // different name
Session = x.Session;
AttemptCounter = x.AttemptCounter;
IndexOf = x.IndexOf;
DcnAllMin = x.DcnAllMin;
DcnAllMax = x.DcnAllMax;
DcnAllMean = x.DcnAllMean;
DcnAllStDev = x.DcnAllStdDev;
DcnAllStDev = x.DcnAllStdDev; // different name
DcnLpdMin = x.DcnLpdMin;
DcnLpdMax = x.DcnLpdMax;
DcnLpdMean = x.DcnLpdMean;
DcnLpdStDev = x.DcnLpdStdDev;
DcnLpdStDev = x.DcnLpdStdDev; // different name
DcnLpdNMin = x.DcnLpdNMin;
DcnLpdNMax = x.DcnLpdNMax;
DcnLpdNMean = x.DcnLpdNMean;
DcnLpdNStDev = x.DcnLpdNStdDev;
DcnLpdNStDev = x.DcnLpdNStdDev; // different name
DcnLpdESMin = x.DcnLpdESMin;
DcnLpdESMax = x.DcnLpdESMax;
DcnLpdESMean = x.DcnLpdESMean;
DcnLpdESStDev = x.DcnLpdESStdDev;
DcnLpdESStDev = x.DcnLpdESStdDev; // different name
DcnMicroScrMin = x.DcnMicroScrMin;
DcnMicroScrMax = x.DcnMicroScrMax;
DcnMicroScrMean = x.DcnMicroScrMean;
DcnMicroScrStDev = x.DcnMicroScrStdDev;
DcnMicroScrStDev = x.DcnMicroScrStdDev; // different name
DcnScrMin = x.DcnScrMin;
DcnScrMax = x.DcnScrMax;
DcnScrMean = x.DcnScrMean;
DcnScrStDev = x.DcnScrStdDev;
DcnScrStDev = x.DcnScrStdDev; // different name
DcnSlipMin = x.DcnSlipMin;
DcnSlipMax = x.DcnSlipMax;
DcnSlipMean = x.DcnSlipMean;
DcnSlipStDev = x.DcnSlipStdDev;
DcnAreaCntMin = x.DcnAreaCountMin;
DcnAreaCntMax = x.DcnAreaCountMax;
DcnAreaCntMean = x.DcnAreaCountMean;
DcnAreaCntStDev = x.DcnAreaCountStdDev;
DcnSlipStDev = x.DcnSlipStdDev; // different name
DcnAreaCntMin = x.DcnAreaCountMin; // different name
DcnAreaCntMax = x.DcnAreaCountMax; // different name
DcnAreaCntMean = x.DcnAreaCountMean; // different name
DcnAreaCntStDev = x.DcnAreaCountStdDev; // different name
DcnAreaMin = x.DcnAreaMin;
DcnAreaMax = x.DcnAreaMax;
DcnAreaMean = x.DcnAreaMean;
DcnAreaStDev = x.DcnAreaStdDev;
DcnAreaStDev = x.DcnAreaStdDev; // different name
DcnHazeAvgMin = x.DcnHazeAvgMin;
DcnHazeAvgMax = x.DcnHazeAvgMax;
DcnHazeAvgMean = x.DcnHazeAvgMean;
DcnHazeAvgStDev = x.DcnHazeAvgStdDev;
DcnHazeMedMin = x.DcnHazeMedianMin;
DcnHazeMedMax = x.DcnHazeMedianMax;
DcnHazeMedMean = x.DcnHazeMedianMean;
DcnHazeMedStDev = x.DcnHazeMedianStdDev;
DcnHazeStDevMin = x.DcnHazeStdDevMin;
DcnHazeStDevMax = x.DcnHazeStdDevMax;
DcnHazeStDevMean = x.DcnHazeStdDevMean;
DcnHazeStDevStDev = x.DcnHazeStdDevStdDev;
DcnHazeAvgStDev = x.DcnHazeAvgStdDev; // different name
DcnHazeMedMin = x.DcnHazeMedianMin; // different name
DcnHazeMedMax = x.DcnHazeMedianMax; // different name
DcnHazeMedMean = x.DcnHazeMedianMean; // different name
DcnHazeMedStDev = x.DcnHazeMedianStdDev; // different name
DcnHazeStDevMin = x.DcnHazeStdDevMin; // different name
DcnHazeStDevMax = x.DcnHazeStdDevMax; // different name
DcnHazeStDevMean = x.DcnHazeStdDevMean; // different name
DcnHazeStDevStDev = x.DcnHazeStdDevStdDev; // different name
DcnBin1Min = x.DcnBin1Min;
DcnBin1Max = x.DcnBin1Max;
DcnBin1Mean = x.DcnBin1Mean;
DcnBin1StDev = x.DcnBin1StdDev;
DcnBin1StDev = x.DcnBin1StdDev; // different name
DcnBin2Min = x.DcnBin2Min;
DcnBin2Max = x.DcnBin2Max;
DcnBin2Mean = x.DcnBin2Mean;
DcnBin2StDev = x.DcnBin2StdDev;
DcnBin2StDev = x.DcnBin2StdDev; // different name
DcnBin3Min = x.DcnBin3Min;
DcnBin3Max = x.DcnBin3Max;
DcnBin3Mean = x.DcnBin3Mean;
DcnBin3StDev = x.DcnBin3StdDev;
DcnBin3StDev = x.DcnBin3StdDev; // different name
DcnBin4Min = x.DcnBin4Min;
DcnBin4Max = x.DcnBin4Max;
DcnBin4Mean = x.DcnBin4Mean;
DcnBin4StDev = x.DcnBin4StdDev;
DcnBin4StDev = x.DcnBin4StdDev; // different name
DcnBin5Min = x.DcnBin5Min;
DcnBin5Max = x.DcnBin5Max;
DcnBin5Mean = x.DcnBin5Mean;
DcnBin5StDev = x.DcnBin5StdDev;
DcnBin5StDev = x.DcnBin5StdDev; // different name
DcnBin6Min = x.DcnBin6Min;
DcnBin6Max = x.DcnBin6Max;
DcnBin6Mean = x.DcnBin6Mean;
DcnBin6StDev = x.DcnBin6StdDev;
DcnBin6StDev = x.DcnBin6StdDev; // different name
DcnBin7Min = x.DcnBin7Min;
DcnBin7Max = x.DcnBin7Max;
DcnBin7Mean = x.DcnBin7Mean;
DcnBin7StDev = x.DcnBin7StdDev;
DcnBin7StDev = x.DcnBin7StdDev; // different name
DcnBin8Min = x.DcnBin8Min;
DcnBin8Max = x.DcnBin8Max;
DcnBin8Mean = x.DcnBin8Mean;
DcnBin8StDev = x.DcnBin8StdDev;
DcnBin8StDev = x.DcnBin8StdDev; // different name
DwnAllMin = x.DwnAllMin;
DwnAllMax = x.DwnAllMax;
DwnAllMean = x.DwnAllMean;
DwnAllStDev = x.DwnAllStdDev;
DwnAllStDev = x.DwnAllStdDev; // different name
DwnLpdMin = x.DwnLpdMin;
DwnLpdMax = x.DwnLpdMax;
DwnLpdMean = x.DwnLpdMean;
DwnLpdStDev = x.DwnLpdStdDev;
DwnLpdStDev = x.DwnLpdStdDev; // different name
DwnLpdNMin = x.DwnLpdNMin;
DwnLpdNMax = x.DwnLpdNMax;
DwnLpdNMean = x.DwnLpdNMean;
DwnLpdNStDev = x.DwnLpdNStdDev;
DwnLpdNStDev = x.DwnLpdNStdDev; // different name
DwnLpdESMin = x.DwnLpdESMin;
DwnLpdESMax = x.DwnLpdESMax;
DwnLpdESMean = x.DwnLpdESMean;
DwnLpdESStDev = x.DwnLpdESStdDev;
DwnLpdESStDev = x.DwnLpdESStdDev; // different name
DwnMicroScrMin = x.DwnMicroScrMin;
DwnMicroScrMax = x.DwnMicroScrMax;
DwnMicroScrMean = x.DwnMicroScrMean;
DwnMicroScrStDev = x.DwnMicroScrStdDev;
DwnMicroScrStDev = x.DwnMicroScrStdDev; // different name
DwnScrMin = x.DwnScrMin;
DwnScrMax = x.DwnScrMax;
DwnScrMean = x.DwnScrMean;
DwnScrStDev = x.DwnScrStdDev;
DwnScrStDev = x.DwnScrStdDev; // different name
DwnSlipMin = x.DwnSlipMin;
DwnSlipMax = x.DwnSlipMax;
DwnSlipMean = x.DwnSlipMean;
DwnSlipStDev = x.DwnSlipStdDev;
DwnAreaCntMin = x.DwnAreaCountMin;
DwnAreaCntMax = x.DwnAreaCountMax;
DwnAreaCntMean = x.DwnAreaCountMean;
DwnAreaCntStDev = x.DwnAreaCountStdDev;
DwnSlipStDev = x.DwnSlipStdDev; // different name
DwnAreaCntMin = x.DwnAreaCountMin; // different name
DwnAreaCntMax = x.DwnAreaCountMax; // different name
DwnAreaCntMean = x.DwnAreaCountMean; // different name
DwnAreaCntStDev = x.DwnAreaCountStdDev; // different name
DwnAreaMin = x.DwnAreaMin;
DwnAreaMax = x.DwnAreaMax;
DwnAreaMean = x.DwnAreaMean;
DwnAreaStDev = x.DwnAreaStdDev;
DwnAreaStDev = x.DwnAreaStdDev; // different name
DwnHazeAvgMin = x.DwnHazeAvgMin;
DwnHazeAvgMax = x.DwnHazeAvgMax;
DwnHazeAvgMean = x.DwnHazeAvgMean;
DwnHazeAvgStDev = x.DwnHazeAvgStdDev;
DwnHazeMedMin = x.DwnHazeMedianMin;
DwnHazeMedMax = x.DwnHazeMedianMax;
DwnHazeMedMean = x.DwnHazeMedianMean;
DwnHazeMedStDev = x.DwnHazeMedianStdDev;
DwnHazeStDevMin = x.DwnHazeStdDevMin;
DwnHazeStDevMax = x.DwnHazeStdDevMax;
DwnHazeStDevMean = x.DwnHazeStdDevMean;
DwnHazeStDevStDev = x.DwnHazeStdDevStdDev;
DwnHazeAvgStDev = x.DwnHazeAvgStdDev; // different name
DwnHazeMedMin = x.DwnHazeMedianMin; // different name
DwnHazeMedMax = x.DwnHazeMedianMax; // different name
DwnHazeMedMean = x.DwnHazeMedianMean; // different name
DwnHazeMedStDev = x.DwnHazeMedianStdDev; // different name
DwnHazeStDevMin = x.DwnHazeStdDevMin; // different name
DwnHazeStDevMax = x.DwnHazeStdDevMax; // different name
DwnHazeStDevMean = x.DwnHazeStdDevMean; // different name
DwnHazeStDevStDev = x.DwnHazeStdDevStdDev; // different name
DwnBin1Min = x.DwnBin1Min;
DwnBin1Max = x.DwnBin1Max;
DwnBin1Mean = x.DwnBin1Mean;
DwnBin1StDev = x.DwnBin1StdDev;
DwnBin1StDev = x.DwnBin1StdDev; // different name
DwnBin2Min = x.DwnBin2Min;
DwnBin2Max = x.DwnBin2Max;
DwnBin2Mean = x.DwnBin2Mean;
DwnBin2StDev = x.DwnBin2StdDev;
DwnBin2StDev = x.DwnBin2StdDev; // different name
DwnBin3Min = x.DwnBin3Min;
DwnBin3Max = x.DwnBin3Max;
DwnBin3Mean = x.DwnBin3Mean;
DwnBin3StDev = x.DwnBin3StdDev;
DwnBin3StDev = x.DwnBin3StdDev; // different name
DwnBin4Min = x.DwnBin4Min;
DwnBin4Max = x.DwnBin4Max;
DwnBin4Mean = x.DwnBin4Mean;
DwnBin4StDev = x.DwnBin4StdDev;
DwnBin4StDev = x.DwnBin4StdDev; // different name
DwnBin5Min = x.DwnBin5Min;
DwnBin5Max = x.DwnBin5Max;
DwnBin5Mean = x.DwnBin5Mean;
DwnBin5StDev = x.DwnBin5StdDev;
DwnBin5StDev = x.DwnBin5StdDev; // different name
DwnBin6Min = x.DwnBin6Min;
DwnBin6Max = x.DwnBin6Max;
DwnBin6Mean = x.DwnBin6Mean;
DwnBin6StDev = x.DwnBin6StdDev;
DwnBin6StDev = x.DwnBin6StdDev; // different name
DwnBin7Min = x.DwnBin7Min;
DwnBin7Max = x.DwnBin7Max;
DwnBin7Mean = x.DwnBin7Mean;
DwnBin7StDev = x.DwnBin7StdDev;
DwnBin7StDev = x.DwnBin7StdDev; // different name
DwnBin8Min = x.DwnBin8Min;
DwnBin8Max = x.DwnBin8Max;
DwnBin8Mean = x.DwnBin8Mean;
DwnBin8StDev = x.DwnBin8StdDev;
DwnBin8StDev = x.DwnBin8StdDev; // different name
DnnAllMin = x.DnnAllMin;
DnnAllMax = x.DnnAllMax;
DnnAllMean = x.DnnAllMean;
DnnAllStDev = x.DnnAllStdDev;
DnnAllStDev = x.DnnAllStdDev; // different name
DnnLpdMin = x.DnnLpdMin;
DnnLpdMax = x.DnnLpdMax;
DnnLpdMean = x.DnnLpdMean;
DnnLpdStDev = x.DnnLpdStdDev;
DnnLpdStDev = x.DnnLpdStdDev; // different name
DnnLpdNMin = x.DnnLpdNMin;
DnnLpdNMax = x.DnnLpdNMax;
DnnLpdNMean = x.DnnLpdNMean;
DnnLpdNStDev = x.DnnLpdNStdDev;
DnnLpdNStDev = x.DnnLpdNStdDev; // different name
DnnLpdESMin = x.DnnLpdESMin;
DnnLpdESMax = x.DnnLpdESMax;
DnnLpdESMean = x.DnnLpdESMean;
DnnLpdESStDev = x.DnnLpdESStdDev;
DnnLpdESStDev = x.DnnLpdESStdDev; // different name
DnnMicroScrMin = x.DnnMicroScrMin;
DnnMicroScrMax = x.DnnMicroScrMax;
DnnMicroScrMean = x.DnnMicroScrMean;
DnnMicroScrStDev = x.DnnMicroScrStdDev;
DnnMicroScrStDev = x.DnnMicroScrStdDev; // different name
DnnScrMin = x.DnnScrMin;
DnnScrMax = x.DnnScrMax;
DnnScrMean = x.DnnScrMean;
DnnScrStDev = x.DnnScrStdDev;
DnnScrStDev = x.DnnScrStdDev; // different name
DnnSlipMin = x.DnnSlipMin;
DnnSlipMax = x.DnnSlipMax;
DnnSlipMean = x.DnnSlipMean;
DnnSlipStDev = x.DnnSlipStdDev;
DnnAreaCntMin = x.DnnAreaCountMin;
DnnAreaCntMax = x.DnnAreaCountMax;
DnnAreaCntMean = x.DnnAreaCountMean;
DnnAreaCntStDev = x.DnnAreaCountStdDev;
DnnSlipStDev = x.DnnSlipStdDev; // different name
DnnAreaCntMin = x.DnnAreaCountMin; // different name
DnnAreaCntMax = x.DnnAreaCountMax; // different name
DnnAreaCntMean = x.DnnAreaCountMean; // different name
DnnAreaCntStDev = x.DnnAreaCountStdDev; // different name
DnnAreaMin = x.DnnAreaMin;
DnnAreaMax = x.DnnAreaMax;
DnnAreaMean = x.DnnAreaMean;
DnnAreaStDev = x.DnnAreaStdDev;
DnnAreaStDev = x.DnnAreaStdDev; // different name
DnnHazeAvgMin = x.DnnHazeAvgMin;
DnnHazeAvgMax = x.DnnHazeAvgMax;
DnnHazeAvgMean = x.DnnHazeAvgMean;
DnnHazeAvgStDev = x.DnnHazeAvgStdDev;
DnnHazeMedMin = x.DnnHazeMedianMin;
DnnHazeMedMax = x.DnnHazeMedianMax;
DnnHazeMedMean = x.DnnHazeMedianMean;
DnnHazeMedStDev = x.DnnHazeMedianStdDev;
DnnHazeStDevMin = x.DnnHazeStdDevMin;
DnnHazeStDevMax = x.DnnHazeStdDevMax;
DnnHazeStDevMean = x.DnnHazeStdDevMean;
DnnHazeStDevStDev = x.DnnHazeStdDevStdDev;
DnnHazeAvgStDev = x.DnnHazeAvgStdDev; // different name
DnnHazeMedMin = x.DnnHazeMedianMin; // different name
DnnHazeMedMax = x.DnnHazeMedianMax; // different name
DnnHazeMedMean = x.DnnHazeMedianMean; // different name
DnnHazeMedStDev = x.DnnHazeMedianStdDev; // different name
DnnHazeStDevMin = x.DnnHazeStdDevMin; // different name
DnnHazeStDevMax = x.DnnHazeStdDevMax; // different name
DnnHazeStDevMean = x.DnnHazeStdDevMean; // different name
DnnHazeStDevStDev = x.DnnHazeStdDevStdDev; // different name
DnnBin1Min = x.DnnBin1Min;
DnnBin1Max = x.DnnBin1Max;
DnnBin1Mean = x.DnnBin1Mean;
DnnBin1StDev = x.DnnBin1StdDev;
DnnBin1StDev = x.DnnBin1StdDev; // different name
DnnBin2Min = x.DnnBin2Min;
DnnBin2Max = x.DnnBin2Max;
DnnBin2Mean = x.DnnBin2Mean;
DnnBin2StDev = x.DnnBin2StdDev;
DnnBin2StDev = x.DnnBin2StdDev; // different name
DnnBin3Min = x.DnnBin3Min;
DnnBin3Max = x.DnnBin3Max;
DnnBin3Mean = x.DnnBin3Mean;
DnnBin3StDev = x.DnnBin3StdDev;
DnnBin3StDev = x.DnnBin3StdDev; // different name
DnnBin4Min = x.DnnBin4Min;
DnnBin4Max = x.DnnBin4Max;
DnnBin4Mean = x.DnnBin4Mean;
DnnBin4StDev = x.DnnBin4StdDev;
DnnBin4StDev = x.DnnBin4StdDev; // different name
DnnBin5Min = x.DnnBin5Min;
DnnBin5Max = x.DnnBin5Max;
DnnBin5Mean = x.DnnBin5Mean;
DnnBin5StDev = x.DnnBin5StdDev;
DnnBin5StDev = x.DnnBin5StdDev; // different name
DnnBin6Min = x.DnnBin6Min;
DnnBin6Max = x.DnnBin6Max;
DnnBin6Mean = x.DnnBin6Mean;
DnnBin6StDev = x.DnnBin6StdDev;
DnnBin6StDev = x.DnnBin6StdDev; // different name
DnnBin7Min = x.DnnBin7Min;
DnnBin7Max = x.DnnBin7Max;
DnnBin7Mean = x.DnnBin7Mean;
DnnBin7StDev = x.DnnBin7StdDev;
DnnBin7StDev = x.DnnBin7StdDev; // different name
DnnBin8Min = x.DnnBin8Min;
DnnBin8Max = x.DnnBin8Max;
DnnBin8Mean = x.DnnBin8Mean;
DnnBin8StDev = x.DnnBin8StdDev;
DnnBin8StDev = x.DnnBin8StdDev; // different name
RDS = x.RDS;
PSN = x.PSN;
Recipe = x.Recipe;
Operator = x.Employee;
Operator = x.Employee; // different name
}
txt.Detail detail;
foreach (txt.Description description in descriptions)
@ -606,11 +611,12 @@ public class WSRequest
Details.Add(detail);
}
Date = logistics.DateTimeFromSequence.ToString();
UniqueID = $"{logistics.JobID}_{logistics.MID}_{logistics.DateTimeFromSequence:yyyyMMddHHmmssffff}";
string uniqueId = Logistics.GetUniqueId(logistics);
UniqueID = uniqueId;
for (int i = 0; i < Details.Count; i++)
{
Details[i].HeaderUniqueID = UniqueID;
Details[i].UniqueID = $"{logistics.JobID}_{logistics.MID}_{logistics.DateTimeFromSequence:yyyyMMddHHmmssffff}_Item-{i + 1}";
Details[i].UniqueID = $"{uniqueId}_Item-{i + 1}";
}
}
@ -619,7 +625,7 @@ public class WSRequest
/// </summary>
/// <param name="sourceFile">source file to be converted to PDF</param>
/// <returns></returns>
private static string ConvertSourceFileToPdf(string ghostPCLFileName, string sourceFile)
public static string ConvertSourceFileToPdf(string ghostPCLFileName, string sourceFile)
{
string result = Path.ChangeExtension(sourceFile, ".pdf");
if (!File.Exists(result))
@ -635,14 +641,14 @@ public class WSRequest
return result;
}
internal static long GetHeaderId(IFileRead fileRead, Logistics logistics, string openInsightMetrologyViewerAPI, string openInsightMetrologyViewerFileShare, int weekOfYear, WS.Results results, List<txt.Description> descriptions)
internal static long GetHeaderId(IFileRead fileRead, Logistics logistics, string openInsightMetrologyViewerAPI, string openInsightMetrologyViewerFileShare, int weekOfYear, WS.Results results, JsonElement[] jsonElements, List<txt.Description> descriptions)
{
long result;
if (results is not null && results.HeaderId is not null)
result = results.HeaderId.Value;
else
{
WSRequest wsRequest = new(fileRead, logistics, descriptions);
WSRequest wsRequest = new(fileRead, logistics, jsonElements, descriptions);
string directory = Path.Combine(openInsightMetrologyViewerFileShare, logistics.DateTimeFromSequence.Year.ToString(), $"WW{weekOfYear:00}");
(_, WS.Results wsResults) = WS.SendData(openInsightMetrologyViewerAPI, logistics.Sequence, directory, wsRequest);
if (wsResults.Success is null || !wsResults.Success.Value)
@ -656,33 +662,34 @@ public class WSRequest
internal static void PostOpenInsightMetrologyViewerAttachments(IFileRead fileRead, Logistics logistics, string openInsightMetrologyViewerAPI, string ghostPCLFileName, List<txt.Description> descriptions, string matchDirectory, WS.Results results, string headerIdDirectory)
#pragma warning restore IDE0060
{
string pdfFile;
string extension = ".pdf";
List<string> attachmentFiles = new();
string uniqueId = Logistics.GetUniqueId(logistics);
string[] summaryFiles = Directory.GetFiles(matchDirectory, "*.txt", SearchOption.TopDirectoryOnly);
if (summaryFiles.Length != 1)
throw new Exception($"Invalid source file count for <{results.HeaderId}>!");
string[] prnFiles = Directory.GetFiles(matchDirectory, "WaferMap*.prn", SearchOption.TopDirectoryOnly);
List<string> pdfFiles = new();
foreach (string prnFile in prnFiles.OrderBy(l => l))
pdfFiles.Add(ConvertSourceFileToPdf(ghostPCLFileName, prnFile));
if (pdfFiles.Count == 0 || pdfFiles.Count != descriptions.Count)
{
pdfFile = ConvertSourceFileToPdf(ghostPCLFileName, prnFile);
attachmentFiles.Add(pdfFile);
}
if (attachmentFiles.Count == 0)
throw new Exception("Invalid *.pdf file count!");
List<WS.Attachment> dataAttachments = new();
List<WS.Attachment> headerAttachments = new()
{
new WS.Attachment(results, headerIdDirectory, $"{logistics.JobID}_{logistics.MID}_{logistics.DateTimeFromSequence:yyyyMMddHHmmssffff}", "Data.txt", summaryFiles[0])
new WS.Attachment(results, headerIdDirectory, uniqueId, "Data.txt", summaryFiles[0])
};
int count;
if (pdfFiles.Count < descriptions.Count)
count = pdfFiles.Count;
else
count = descriptions.Count;
for (int i = 0; i < count; i++)
for (int i = 0; i < attachmentFiles.Count; i++)
{
if (!string.IsNullOrEmpty(pdfFiles[i]))
dataAttachments.Add(new WS.Attachment(results, headerIdDirectory, $"{logistics.JobID}_{logistics.MID}_{logistics.DateTimeFromSequence:yyyyMMddHHmmssffff}_Item-{i + 1}", "Image.pdf", pdfFiles[i]));
if (!string.IsNullOrEmpty(attachmentFiles[i]))
dataAttachments.Add(new WS.Attachment(results, headerIdDirectory, $"{uniqueId}_Item-{i + 1}", $"Image{extension}", attachmentFiles[i]));
}
if (dataAttachments.Count == 0 || dataAttachments.Count != descriptions.Count)
throw new Exception($"Invalid attachment count! {dataAttachments.Count} != {descriptions.Count}");
WS.AttachFiles(openInsightMetrologyViewerAPI, headerAttachments, dataAttachments);
if (attachmentFiles.Count == 0 || attachmentFiles.Count != descriptions.Count)
throw new Exception("Invalid *.pdf file count!");
}
}

View File

@ -139,14 +139,15 @@ public class FileRead : Shared.FileRead, IFileRead
return result;
}
private void PostOpenInsightMetrologyViewerAttachments(List<txt.Description> descriptions)
private void PostOpenInsightMetrologyViewerAttachments(JsonElement[] jsonElements, List<txt.Description> descriptions)
{
Shared.Metrology.WS.Results? results;
string jobIdDirectory = Path.Combine(Path.GetDirectoryName(_FileConnectorConfiguration.AlternateTargetFolder) ?? throw new Exception(), _Logistics.JobID);
if (!Directory.Exists(jobIdDirectory))
_ = Directory.CreateDirectory(jobIdDirectory);
long uniqueSequence = Logistics.GetUniqueSequence(_Logistics);
string[] matchDirectories = GetInProcessDirectory(jobIdDirectory);
if (!_StaticRuns.TryGetValue(_Logistics.Sequence, out List<Shared.Metrology.WS.Results>? wsResults))
if (!_StaticRuns.TryGetValue(uniqueSequence, out List<Shared.Metrology.WS.Results>? wsResults))
results = null;
else
{
@ -155,7 +156,7 @@ public class FileRead : Shared.FileRead, IFileRead
results = wsResults[0];
}
int weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday);
long headerId = !_IsEAFHosted ? -1 : OpenInsightMetrologyViewer.WSRequest.GetHeaderId(this, _Logistics, _OpenInsightMetrologyViewerAPI, _OpenInsightMetrologyViewerFileShare, weekOfYear, results, descriptions);
long headerId = !_IsEAFHosted ? -1 : OpenInsightMetrologyViewer.WSRequest.GetHeaderId(this, _Logistics, _OpenInsightMetrologyViewerAPI, _OpenInsightMetrologyViewerFileShare, weekOfYear, results, jsonElements, descriptions);
string? headerIdDirectory = GetHeaderIdDirectory(headerId);
if (string.IsNullOrEmpty(headerIdDirectory))
throw new Exception($"Didn't find header id directory <{headerId}>");
@ -167,14 +168,15 @@ public class FileRead : Shared.FileRead, IFileRead
if (dateTime == DateTime.MinValue)
throw new ArgumentNullException(nameof(dateTime));
Tuple<string, Test[], JsonElement[], List<FileInfo>> results;
ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath);
string[] lines = File.ReadAllLines(reportFullPath);
ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, lines);
_Logistics = new Logistics(reportFullPath, processDataStandardFormat);
SetFileParameterLotIDToLogisticsMID();
JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat);
JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(reportFullPath, lines, processDataStandardFormat);
List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements);
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
PostOpenInsightMetrologyViewerAttachments(descriptions);
PostOpenInsightMetrologyViewerAttachments(jsonElements, descriptions);
results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>());
return results;
}

View File

@ -108,12 +108,13 @@ public class FileRead : Shared.FileRead, IFileRead
return results;
}
private void DirectoryMove(string reportFullPath, DateTime dateTime, List<txt.Description> descriptions)
private void DirectoryMove(string reportFullPath, DateTime dateTime, JsonElement[] jsonElements, List<txt.Description> descriptions)
{
if (dateTime == DateTime.MinValue)
throw new ArgumentNullException(nameof(dateTime));
FileInfo fileInfo = new(reportFullPath);
string logisticsSequence = _Logistics.Sequence.ToString();
long uniqueSequence = Logistics.GetUniqueSequence(_Logistics);
string jobIdDirectory = Path.Combine(_JobIdParentDirectory, _Logistics.JobID);
if (!Directory.Exists(jobIdDirectory))
_ = Directory.CreateDirectory(jobIdDirectory);
@ -122,7 +123,7 @@ public class FileRead : Shared.FileRead, IFileRead
throw new Exception("Didn't find directory by logistics sequence");
if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime)
File.SetLastWriteTime(reportFullPath, fileInfo.CreationTime);
OpenInsightMetrologyViewer.WSRequest wsRequest = new(this, _Logistics, descriptions);
OpenInsightMetrologyViewer.WSRequest wsRequest = new(this, _Logistics, jsonElements, descriptions);
JsonSerializerOptions jsonSerializerOptions = new() { WriteIndented = true };
string json = JsonSerializer.Serialize(wsRequest, wsRequest.GetType(), jsonSerializerOptions);
string directoryName = $"{Path.GetFileName(matchDirectories[0]).Split(new string[] { logisticsSequence }, StringSplitOptions.None)[0]}{_Logistics.DateTimeFromSequence:yyyy-MM-dd_hh;mm_tt_}{DateTime.Now.Ticks - _Logistics.Sequence}";
@ -136,7 +137,7 @@ public class FileRead : Shared.FileRead, IFileRead
File.Copy(reportFullPath, Path.Combine(sequenceDirectory, Path.GetFileName(reportFullPath)), overwrite: true);
File.WriteAllText(jsonFileName, json);
lock (_StaticRuns)
_ = _StaticRuns.Remove(_Logistics.Sequence);
_ = _StaticRuns.Remove(uniqueSequence);
}
private static void MoveMatchingFile(string jobIdDirectory, string matchDirectory)
@ -166,23 +167,24 @@ public class FileRead : Shared.FileRead, IFileRead
private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime)
{
Tuple<string, Test[], JsonElement[], List<FileInfo>> results;
ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath);
string[] lines = File.ReadAllLines(reportFullPath);
ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, lines);
_Logistics = new Logistics(reportFullPath, processDataStandardFormat);
SetFileParameterLotIDToLogisticsMID();
JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat);
JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(reportFullPath, lines, processDataStandardFormat);
List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements);
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>());
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
DirectoryMove(reportFullPath, dateTime, descriptions);
DirectoryMove(reportFullPath, dateTime, jsonElements, descriptions);
else if (!_IsEAFHosted)
{
OpenInsightMetrologyViewer.WSRequest wsRequest = new(this, _Logistics, descriptions);
OpenInsightMetrologyViewer.WSRequest wsRequest = new(this, _Logistics, jsonElements, descriptions);
JsonSerializerOptions jsonSerializerOptions = new() { WriteIndented = true };
string json = JsonSerializer.Serialize(wsRequest, wsRequest.GetType(), jsonSerializerOptions);
string check = JsonSerializer.Serialize(wsRequest, wsRequest.GetType(), jsonSerializerOptions);
string jsonFileName = Path.ChangeExtension(reportFullPath, ".json");
string historicalText = File.ReadAllText(jsonFileName);
if (json != historicalText)
if (check != historicalText)
throw new Exception("File doesn't match historical!");
}
return results;

View File

@ -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 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 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;";
private long? _TickOffset;
@ -38,6 +39,9 @@ public class FileRead : Shared.FileRead, IFileRead
string barcodeHostFileShare = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Barcode.Host.FileShare");
if (barcodeHostFileShare != 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");
if (lsl2SQLConnectionString != 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 tibcoParameterConfigurationLocation = GetPropertyValue(cellInstanceConnectionName, tibcoParameters, "TIBCO.IFX_CONFIGURATION_LOCATION");
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}>");
if (!Directory.Exists(BarcodeHostFileShare))
if (!Directory.Exists(barcodeHostFileShare))
throw new Exception($"Unable to access file-share <{BarcodeHostFileShare}>");
if (_IsEAFHosted)
{
HttpClient httpClient = new() { BaseAddress = new(OpenInsightApplicationProgrammingInterface) };
Transport.Main.Initialize(smtp, cellInstanceName, fileConnectorConfiguration, LSL2SQLConnectionString, MetrologyFileShare, BarcodeHostFileShare, httpClient);
HttpClient httpClient = new() { BaseAddress = new(openInsightApplicationProgrammingInterface) };
Transport.Main.Initialize(smtp, cellInstanceName, fileConnectorConfiguration, iqsConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient);
if (!string.IsNullOrEmpty(fileConnectorConfiguration.SourceFileLocation))
_ = Transport.Main.Setup(useSleep: true, setIfxTransport: true, tibcoParameterChannel, tibcoParameterSubjectPrefix, tibcoParameterConfigurationLocation, tibcoParameterConfigurationLocationCopy, tibcoParameterSubject);
else

View File

@ -1,25 +1,88 @@
namespace Adaptation.FileHandlers.TIBCO.Transport;
#nullable enable
public class CommonB
{
public string Layer { get; }
public string LoadLockSide { get; }
public string? Layer { get; }
public int? RDSNumber { get; }
public string ReactorType { get; }
public string PSN { get; }
public string? PSN { get; }
public int? ReactorNumber { get; }
public string Zone { get; }
public string? Zone { get; }
public string? ExportControl { get; }
public string? ReactorMode { get; }
public CommonB(string layer, string loadLockSide, int? rdsNumber, string reactorType, string psn, int? reactorNumber, string zone)
public CommonB(string? layer,
int? rdsNumber,
string? psn,
int? reactorNumber,
string? zone,
string? exportControl,
string? reactorMode)
{
Layer = layer;
LoadLockSide = loadLockSide;
RDSNumber = rdsNumber;
ReactorType = reactorType;
PSN = psn;
ReactorNumber = reactorNumber;
Zone = zone;
ExportControl = exportControl;
ReactorMode = reactorMode;
}
internal static CommonB Get(Common common, RunDataSheetRoot? runDataSheetRoot, Run[]? runs)
{
CommonB result;
string? psn;
string? zone;
string? layer;
int? reactorNumber;
string? reactorMode;
string? exportControl;
if (runs is null || runs.Length == 0)
{
reactorMode = null;
zone = common.Zone;
exportControl = null;
layer = common.Layer;
if (runDataSheetRoot?.RunDataSheet is null)
{
psn = common.PSN;
reactorNumber = common.ReactorNumber;
}
else
{
psn = runDataSheetRoot?.RunDataSheet.PSN.ToString();
reactorNumber = runDataSheetRoot?.RunDataSheet.Reactor;
}
}
else
{
const int zero = 0;
Run run = runs[zero];
reactorMode = run.ReactorMode;
exportControl = run.ExportControl;
if (runDataSheetRoot?.RunDataSheet is not null)
{
psn = runDataSheetRoot?.RunDataSheet.PSN.ToString();
reactorNumber = runDataSheetRoot?.RunDataSheet.Reactor;
}
else
{
psn = string.IsNullOrEmpty(common.PSN) ? run.PSN : common.PSN;
reactorNumber = common.ReactorNumber is null ? run.Reactor : common.ReactorNumber;
}
zone = string.IsNullOrEmpty(common.Zone) ? run.Zone : common.Zone;
layer = string.IsNullOrEmpty(common.Layer) ? run.EpiLayer : common.Layer;
}
result = new(layer: layer,
rdsNumber: common.RDSNumber,
psn: psn,
reactorNumber: reactorNumber,
zone: zone,
exportControl: exportControl,
reactorMode: reactorMode);
return result;
}
}

View File

@ -41,7 +41,7 @@ public partial class Job
public DateTime DateTime { 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;
Items = new List<Item>();
@ -49,8 +49,10 @@ public partial class Job
IsAreaSi = false;
else
{
Run[]? runs;
Common common;
CommonB commonB;
string? basicType;
int? reactorNumber;
const string hyphen = "-";
const string bioRad2 = "BIORAD2";
@ -63,6 +65,7 @@ public partial class Job
DateTime = DateTime.Now;
else
DateTime = new DateTime(sequence);
string? jobNames = GetJobNames(input);
const string dep08CEPIEPSILON = "DEP08CEPIEPSILON";
if (input.EquipmentType == dep08CEPIEPSILON)
common = ReactorGet(input, httpClient);
@ -87,71 +90,59 @@ public partial class Job
common = Get(input, httpClient);
}
bool isValid = IsValid(common.RDSNumber);
if (isValid)
commonB = GetWithValidRDS(lsl2SQLConnectionString, enteredDateTimeFilter, loadSignatureDateTimeFilter, common.Layer, common.PSN, common.RDSNumber, common.ReactorNumber, common.Zone);
else if (common.WorkOrder is null || common.WorkOrder.IsWorkOrder || common.RDSNumber.HasValue)
commonB = Get(lsl2SQLConnectionString, enteredDateTimeFilter, loadSignatureDateTimeFilter, common);
else
commonB = new(layer: hyphen,
loadLockSide: hyphen,
rdsNumber: common.RDSNumber,
reactorType: hyphen,
psn: common.PSN,
reactorNumber: common.ReactorNumber,
zone: hyphen);
if (commonB.RDSNumber is null || common.RunDataSheetRoot is not null)
if (common.RDSNumber is null || !isValid)
runDataSheetRoot = common.RunDataSheetRoot;
else
{
try
{ runDataSheetRoot = GetRunDataSheetRoot(httpClient, commonB.RDSNumber.Value); }
{ runDataSheetRoot = GetRunDataSheetRoot(httpClient, common.RDSNumber.Value); }
catch (Exception)
{ runDataSheetRoot = null; }
}
if (isValid)
runs = GetWithValidRDS(lsl2SQLConnectionString, enteredDateTimeFilter, loadSignatureDateTimeFilter, common);
else if (common.WorkOrder is null || common.WorkOrder.IsWorkOrder || common.RDSNumber.HasValue)
runs = Get(lsl2SQLConnectionString, enteredDateTimeFilter, loadSignatureDateTimeFilter, common);
else
runs = null;
commonB = CommonB.Get(common, runDataSheetRoot, runs);
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);
basicType = runCount is null ? "1" : (runCount + 1).ToString();
}
catch (Exception)
{ basicType = hyphen; }
}
Qty = "1";
Status = hyphen; // INFO
CreationUser = hyphen; // ?
LotState = hyphen; // LAYER2
Equipment = input.MesEntity; // ?
PackageName = hyphen; // WAFER_ID
Qty2 = input.Sequence; // SEQUENCE
RecipeName = input.Recipe; // PPID
BasicType = basicType; // BASIC_TYPE
IsAreaSi = input.Area == "Si"; // N/A
StateModel = input.EquipmentType; // ?
JobName = DateTime.Ticks.ToString(); // ?
BasicType = GetComment(hyphen, runDataSheetRoot, commonB); // BASIC_TYPE
AutomationMode = string.Concat(DateTime.Ticks, ".", input.MesEntity); // ?
SpecName = !string.IsNullOrEmpty(commonB.Layer) ? commonB.Layer : hyphen; // LAYER
ProductName = !string.IsNullOrEmpty(commonB.PSN) ? commonB.PSN : hyphen; // PRODUCT
Status = !string.IsNullOrEmpty(commonB.ReactorMode) ? commonB.ReactorMode : hyphen; // INFO
ProcessSpecName = !string.IsNullOrEmpty(commonB.Zone) ? commonB.Zone : hyphen; // WAFER_POS
LotName = commonB.RDSNumber is not null ? commonB.RDSNumber.Value.ToString() : input.MID; // MID
PackageName = !string.IsNullOrEmpty(commonB.ExportControl) ? commonB.ExportControl : hyphen; // WAFER_ID
LastUpdateUser = string.IsNullOrEmpty(runDataSheetRoot?.Json) ? "{}" : runDataSheetRoot.Json; // NULL_DATA
ProcessType = commonB.ReactorNumber is not null ? commonB.ReactorNumber.Value.ToString() : hyphen; // PROCESS_JOBID
Items.Add(new Item { Name = "0", Type = "NA", Number = (0 + 1).ToString(), Qty = "1", CarrierName = hyphen });
}
}
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)
{
int? result;
@ -564,12 +555,12 @@ public partial class Job
return result;
}
private static string GetRunJson(string lsl2SQLConnectionString, string commandText)
private static string GetRunJson(string connectionString, string commandText)
{
StringBuilder result = new();
try
{
using SqlConnection sqlConnection = new(lsl2SQLConnectionString);
using SqlConnection sqlConnection = new(connectionString);
sqlConnection.Open();
using SqlCommand sqlCommand = new(commandText, sqlConnection);
SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(CommandBehavior.SequentialAccess);
@ -608,6 +599,21 @@ public partial class Job
results.Add($" and wm.in_cass_no = {workOrderCassetteValue}");
results.Add($" and wm.slot_no = {slotValue}");
results.Add(" ) zone ");
results.Add(" , ( ");
results.Add(" select top 1 case when ep.export_control = 1 then 'true' else 'false' end ");
results.Add(" from lsl2sql.dbo.epi_part ep ");
results.Add(" where ep.epi_pn = rr.part_no ");
results.Add(" ) export_control ");
results.Add(" , ( ");
results.Add(" select top 1 rm.mode ");
results.Add(" from lsl2sql.dbo.react_mode rm ");
results.Add(" where rm.react_no = rr.reactor ");
results.Add(" and rm.start_dtm = ( ");
results.Add(" select max(start_dtm) ");
results.Add(" from lsl2sql.dbo.react_mode rm_b ");
results.Add(" where rm_b.react_no = rr.reactor ");
results.Add(" ) ");
results.Add(" ) react_mode ");
results.Add(" from lsl2sql.dbo.react_run rr ");
results.Add($" where rr.rds_no = {rdsValue}");
results.Add($" and rr.enter_dtm > '{enteredDateTimeFilter:yyyy-MM-dd} 00:00:00.000' ");
@ -629,6 +635,21 @@ public partial class Job
results.Add($" and wm.in_cass_no = {workOrderCassetteValue}");
results.Add($" and wm.slot_no = {slotValue}");
results.Add(" ) zone ");
results.Add(" , ( ");
results.Add(" select top 1 case when ep.export_control = 1 then 'true' else 'false' end ");
results.Add(" from lsl2sql.dbo.epi_part ep ");
results.Add(" where ep.epi_pn = rr.part_no ");
results.Add(" ) export_control ");
results.Add(" , ( ");
results.Add(" select top 1 rm.mode ");
results.Add(" from lsl2sql.dbo.react_mode rm ");
results.Add(" where rm.react_no = rr.reactor ");
results.Add(" and rm.start_dtm = ( ");
results.Add(" select max(start_dtm) ");
results.Add(" from lsl2sql.dbo.react_mode rm_b ");
results.Add(" where rm_b.react_no = rr.reactor ");
results.Add(" ) ");
results.Add(" ) react_mode ");
results.Add(" from lsl2sql.dbo.react_run rr ");
results.Add(" where rr.rds_no = ( ");
results.Add(" select max(wm.rds) ");
@ -655,6 +676,21 @@ public partial class Job
results.Add($" and wm.in_cass_no = {workOrderCassetteValue}");
results.Add($" and wm.slot_no = {slotValue}");
results.Add(" ) zone ");
results.Add(" , ( ");
results.Add(" select top 1 case when ep.export_control = 1 then 'true' else 'false' end ");
results.Add(" from lsl2sql.dbo.epi_part ep ");
results.Add(" where ep.epi_pn = rr.part_no ");
results.Add(" ) export_control ");
results.Add(" , ( ");
results.Add(" select top 1 rm.mode ");
results.Add(" from lsl2sql.dbo.react_mode rm ");
results.Add(" where rm.react_no = rr.reactor ");
results.Add(" and rm.start_dtm = ( ");
results.Add(" select max(start_dtm) ");
results.Add(" from lsl2sql.dbo.react_mode rm_b ");
results.Add(" where rm_b.react_no = rr.reactor ");
results.Add(" ) ");
results.Add(" ) react_mode ");
results.Add(" from lsl2sql.dbo.react_run rr ");
results.Add(" where rr.rds_no = ( ");
results.Add(" select max(qa.rds_no) ");
@ -667,16 +703,9 @@ public partial class Job
return string.Join(Environment.NewLine, results);
} // cSpell:restore
private static CommonB Get(string lsl2SQLConnectionString, DateTime enteredDateTimeFilter, DateTime loadSignatureDateTimeFilter, Common common)
private static Run[]? Get(string lsl2SQLConnectionString, DateTime enteredDateTimeFilter, DateTime loadSignatureDateTimeFilter, Common common)
{
int? rdsNumber;
string? psn;
string? zone;
string? layer;
const int zero = 0;
int? reactorNumber;
string? reactorType;
string? loadLockSide;
Run[]? results;
string commandText = GetCommandText(enteredDateTimeFilter,
loadSignatureDateTimeFilter,
rds: null,
@ -686,106 +715,169 @@ public partial class Job
reactor: common.ReactorNumber);
string json = GetRunJson(lsl2SQLConnectionString, commandText);
if (string.IsNullOrEmpty(json))
{
psn = common.PSN;
rdsNumber = null;
reactorType = null;
zone = common.Zone;
loadLockSide = null;
layer = common.Layer;
reactorNumber = common.ReactorNumber;
}
results = null;
else
{
Run[]? runs;
try
{ runs = JsonSerializer.Deserialize<Run[]>(json); }
{ results = JsonSerializer.Deserialize<Run[]>(json); }
catch (Exception)
{ runs = Array.Empty<Run>(); }
if (runs is null || runs.Length == 0)
{
psn = common.PSN;
rdsNumber = null;
reactorType = null;
zone = common.Zone;
loadLockSide = null;
layer = common.Layer;
reactorNumber = common.ReactorNumber;
}
else
{
reactorType = null;
Run run = runs[zero];
rdsNumber = run.RdsNo;
reactorNumber = run.Reactor;
loadLockSide = run.LoadLockSide;
psn = string.IsNullOrEmpty(common.PSN) ? run.PSN : common.PSN;
zone = string.IsNullOrEmpty(common.Zone) ? run.Zone : common.Zone;
layer = string.IsNullOrEmpty(common.Layer) ? run.EpiLayer : common.Layer;
}
{ results = Array.Empty<Run>(); }
}
return new(layer: layer,
loadLockSide: loadLockSide,
rdsNumber: rdsNumber,
psn: psn,
reactorNumber: reactorNumber,
reactorType: reactorType,
zone: zone);
return results;
}
private static CommonB GetWithValidRDS(string lsl2SQLConnectionString, DateTime enteredDateTimeFilter, DateTime loadSignatureDateTimeFilter, string? layer, string? psn, int? rdsNumber, int? reactorNumber, string? zone)
private static Run[]? GetWithValidRDS(string lsl2SQLConnectionString, DateTime enteredDateTimeFilter, DateTime loadSignatureDateTimeFilter, Common common)
{
const int zero = 0;
string? reactorType;
string? loadLockSide;
Run[]? results;
string commandText = GetCommandText(enteredDateTimeFilter,
loadSignatureDateTimeFilter,
rds: rdsNumber,
rds: common.RDSNumber,
workOrderNumber: null,
workOrderCassette: null,
slot: null,
reactor: null);
string json = GetRunJson(lsl2SQLConnectionString, commandText);
if (string.IsNullOrEmpty(json))
{
zone = null;
reactorType = null;
loadLockSide = null;
}
results = null;
else
{
Run[]? runs;
try
{ runs = JsonSerializer.Deserialize<Run[]>(json); }
{ results = JsonSerializer.Deserialize<Run[]>(json); }
catch (Exception)
{ runs = Array.Empty<Run>(); }
if (runs is null || runs.Length == 0)
{
zone = null;
reactorType = null;
loadLockSide = null;
}
else
{
Run run = runs[zero];
if (string.IsNullOrEmpty(psn))
psn = run.PSN;
if (string.IsNullOrEmpty(zone))
zone = run.Zone;
if (string.IsNullOrEmpty(layer))
layer = run.EpiLayer;
reactorNumber = run.Reactor is null ? reactorNumber : run.Reactor.Value;
loadLockSide = run.LoadLockSide;
reactorType = run.ReactorType;
}
{ results = Array.Empty<Run>(); }
}
return new(layer: layer,
loadLockSide: loadLockSide,
rdsNumber: rdsNumber,
reactorType: reactorType,
psn: psn,
reactorNumber: reactorNumber,
zone: zone);
return results;
}
private static string? GetJobNames(Input input) =>
input.EquipmentType switch
{
"MET08ANLYSDIFAAST230" => "'SPV01'",
"MET08DDUPSFS6420" => "'TENCOR1','TENCOR2','TENCOR3'",
"MET08DDUPSP1TBI" => "'SP101','TBI01'",
"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(1) ");
results.Add(" from ( ");
results.Add(" select [sid] ");
results.Add(" , [lot] ");
results.Add(" , [process] ");
results.Add(" , [part] ");
results.Add(" , [job] ");
results.Add(" , ( ");
results.Add(" select min(concat( ");
results.Add(" case when sd.f_dsgp = 1729787380 /* CDE SetupFile */ ");
results.Add(" then ds.f_name ");
results.Add(" else '' ");
results.Add(" end, ");
results.Add(" case when sd.f_dsgp = 1657296864 /* CDE Pattern */ ");
results.Add(" then ds.f_name ");
results.Add(" else '' ");
results.Add(" end, ");
results.Add(" case when sd.f_dsgp = 1655312695 /* BioRad, BioRad Stratus, CDE, SP1, TBI and Tencor - Recipe */ ");
results.Add(" then ds.f_name ");
results.Add(" else '' ");
results.Add(" end)) ");
results.Add(" from [spcepiworld].[dbo].[sgrp_dsc] sd ");
results.Add(" join [spcepiworld].[dbo].[desc_dat] ds ");
results.Add(" on sd.f_desc = ds.f_desc ");
results.Add(" where [sid] = sd.f_sgrp ");
results.Add(" and sd.f_dsgp in (1729787380, 1657296864, 1655312695) ");
results.Add(" ) [min recipe] ");
results.Add(" , ( ");
results.Add(" select max(concat( ");
results.Add(" case when sd.f_dsgp = 1729787380 /* CDE SetupFile */ ");
results.Add(" then ds.f_name ");
results.Add(" else '' ");
results.Add(" end, ");
results.Add(" case when sd.f_dsgp = 1657296864 /* CDE Pattern */ ");
results.Add(" then ds.f_name ");
results.Add(" else '' ");
results.Add(" end, ");
results.Add(" case when sd.f_dsgp = 1655312695 /* BioRad, BioRad Stratus, CDE, SP1, TBI and Tencor - Recipe */ ");
results.Add(" then ds.f_name ");
results.Add(" else '' ");
results.Add(" end)) ");
results.Add(" from [spcepiworld].[dbo].[sgrp_dsc] sd ");
results.Add(" join [spcepiworld].[dbo].[desc_dat] ds ");
results.Add(" on sd.f_desc = ds.f_desc ");
results.Add(" where [sid] = sd.f_sgrp ");
results.Add(" and sd.f_dsgp in (1729787380, 1657296864, 1655312695) ");
results.Add(" ) [max recipe] ");
results.Add(" from ( ");
results.Add(" select se.f_sgrp [sid] ");
results.Add(" , pl.f_name [lot] ");
results.Add(" , pr.f_name [process] ");
results.Add(" , pd.f_name [part] ");
results.Add(" , jd.f_name [job] ");
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(" join [spcepiworld].[dbo].[sgrp_dsc] sd ");
results.Add(" on se.f_sgrp = sd.f_sgrp ");
results.Add(" join [spcepiworld].[dbo].[desc_dat] ds ");
results.Add(" on sd.f_desc = ds.f_desc ");
results.Add(" where se.f_flag = 0 ");
results.Add(" and sd.f_dsgp = 1765472498 /* Reactor Mode */ ");
results.Add($" and pd.f_name = '{commonB.PSN}' ");
results.Add($" and pl.f_name = '{commonB.RDSNumber}' ");
results.Add($" and ds.f_name = '{commonB.ReactorMode}' ");
results.Add($" and pr.f_name = '{commonB.ReactorNumber}' ");
results.Add($" and jd.f_name in ({jobNames}) ");
results.Add(" group by se.f_sgrp ");
results.Add(" , se.f_sgtm ");
results.Add(" , pl.f_name ");
results.Add(" , pr.f_name ");
results.Add(" , pd.f_name ");
results.Add(" , jd.f_name ");
results.Add(" ) iq ");
results.Add(" ) iq ");
results.Add(" group by [lot] ");
results.Add(" , [process] ");
results.Add(" , [part] ");
results.Add(" , [job] ");
results.Add(" , [min recipe] ");
results.Add(" , [max recipe] ");
results.Add(" ; ");
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;
}
}

View File

@ -17,19 +17,21 @@ internal partial class Main
private static object _IfxTransport;
private static string _CellInstanceName;
private static string _MetrologyFileShare;
private static string _IQSConnectionString;
private static string _BarcodeHostFileShare;
private static string _LSL2SQLConnectionString;
private static string _TibcoParameterSubjectPrefix;
private static HttpClient _HttpClient;
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;
_IfxTransport = null;
_HttpClient = httpClient;
_CellInstanceName = cellInstanceName;
_MetrologyFileShare = metrologyFileShare;
_IQSConnectionString = iqsConnectionString;
_TibcoParameterSubjectPrefix = string.Empty;
_BarcodeHostFileShare = barcodeHostFileShare;
_LSL2SQLConnectionString = lsl2SQLConnectionString;
@ -190,7 +192,7 @@ internal partial class Main
string mid = GetJobsMID(envelopeDocument);
DateTime enteredDateTimeFilter = dateTime.AddDays(-356);
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)
{
IfxDoc sendReply = GetJobsReply(job);

View File

@ -29,12 +29,6 @@ public class Run
[JsonPropertyName("ps_no")]
public string PSN { get; set; }
[JsonPropertyName("load_lock_side")]
public string LoadLockSide { get; set; }
[JsonPropertyName("reactor_type")]
public string ReactorType { get; set; }
[JsonPropertyName("recipe_name")]
public string RecipeName { get; set; }
@ -80,4 +74,10 @@ public class Run
[JsonPropertyName("zone")]
public string Zone { get; set; }
[JsonPropertyName("export_control")]
public string ExportControl { get; set; }
[JsonPropertyName("react_mode")]
public string ReactorMode { get; set; }
}

View File

@ -6,15 +6,23 @@ public class RunDataSheet
{
[JsonConstructor]
public RunDataSheet(string loadLockSide, int psn, int reactor)
public RunDataSheet(string loadLockSide,
int number,
int psn,
int reactor,
string reactorType)
{
PSN = psn;
Number = number;
LoadLockSide = loadLockSide;
Reactor = reactor;
ReactorType = reactorType;
}
[JsonPropertyName("keyId")] public int Number { get; } // { init; get; }
[JsonPropertyName("loadLockSide")] public string LoadLockSide { get; } // { init; get; }
[JsonPropertyName("PSN")] public int PSN { get; } // { init; get; }
[JsonPropertyName("reactor")] public int Reactor { get; } // { init; get; }
[JsonPropertyName("reactorType")] public string ReactorType { get; } // { init; get; }
}

View File

@ -17,6 +17,8 @@ internal class Constant
public string Reject { get; } = "F Reject";
public string LongWaferSummary { get; } = "Long Wafer Summary";
public string OverLoad { get; } = "F OverLoad";
public string ShortWaferSummary { get; } = "Short Wafer Summary";
public string Empty35Spaces { get; } = " ";
public string FormatExceptionMessage { get; } = "Wafer Summary section is neither Short nor Long format.";
}

View File

@ -4,341 +4,344 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.txt;
public class Description : IDescription, Shared.Properties.IDescription
{
public int Test { get; set; }
public int Count { get; set; }
public int Index { get; set; }
[JsonPropertyName("EventId")] public int Test { get; set; }
[JsonPropertyName("Count")] public int Count { get; set; }
[JsonPropertyName("Index")] public int Index { get; set; }
//
public string EventName { get; set; }
public string NullData { get; set; }
public string JobID { get; set; }
public string Sequence { get; set; }
public string MesEntity { get; set; }
[JsonPropertyName("MesEntity")] public string MesEntity { get; set; }
public string ReportFullPath { get; set; }
public string ProcessJobID { get; set; }
public string MID { get; set; }
//
public string Date { get; set; }
public string Employee { get; set; }
public string Lot { get; set; }
public string PSN { get; set; }
public string Reactor { get; set; }
[JsonPropertyName("Date")] public string Date { get; set; }
[JsonPropertyName("Employee")] public string Employee { get; set; }
[JsonPropertyName("Lot")] public string Lot { get; set; }
[JsonPropertyName("PSN")] public string PSN { get; set; }
[JsonPropertyName("Reactor")] public string Reactor { get; set; }
public string Recipe { get; set; }
[JsonPropertyName("IndexOf")] public string IndexOf { get; set; }
[JsonPropertyName("AttemptCounter")] public string AttemptCounter { get; set; }
//
public string Grade { get; set; }
[JsonPropertyName("Grade")] public string Grade { get; set; }
public string HeaderUniqueId { get; set; }
public string RDS { get; set; }
public string Session { get; set; }
public string Side { get; set; }
public string SrcDest { get; set; }
[JsonPropertyName("RDS")] public string RDS { get; set; }
[JsonPropertyName("Session")] public string Session { get; set; }
[JsonPropertyName("Side")] public string Side { get; set; }
[JsonPropertyName("SrcDest")] public string SrcDest { get; set; }
public string UniqueId { get; set; }
public string WaferID { get; set; }
[JsonPropertyName("WaferID")] public string WaferID { get; set; }
//
public string DcnAllMax { get; set; }
public string DcnAllMean { get; set; }
public string DcnAllMin { get; set; }
public string DcnAllStdDev { get; set; }
public string DcnAreaCountMax { get; set; }
public string DcnAreaCountMean { get; set; }
public string DcnAreaCountMin { get; set; }
public string DcnAreaCountStdDev { get; set; }
public string DcnAreaMax { get; set; }
public string DcnAreaMean { get; set; }
public string DcnAreaMin { get; set; }
public string DcnAreaStdDev { get; set; }
public string DcnBin1Max { get; set; }
public string DcnBin1Mean { get; set; }
public string DcnBin1Min { get; set; }
public string DcnBin1StdDev { get; set; }
public string DcnBin2Max { get; set; }
public string DcnBin2Mean { get; set; }
public string DcnBin2Min { get; set; }
public string DcnBin2StdDev { get; set; }
public string DcnBin3Max { get; set; }
public string DcnBin3Mean { get; set; }
public string DcnBin3Min { get; set; }
public string DcnBin3StdDev { get; set; }
public string DcnBin4Max { get; set; }
public string DcnBin4Mean { get; set; }
public string DcnBin4Min { get; set; }
public string DcnBin4StdDev { get; set; }
public string DcnBin5Max { get; set; }
public string DcnBin5Mean { get; set; }
public string DcnBin5Min { get; set; }
public string DcnBin5StdDev { get; set; }
public string DcnBin6Max { get; set; }
public string DcnBin6Mean { get; set; }
public string DcnBin6Min { get; set; }
public string DcnBin6StdDev { get; set; }
public string DcnBin7Max { get; set; }
public string DcnBin7Mean { get; set; }
public string DcnBin7Min { get; set; }
public string DcnBin7StdDev { get; set; }
public string DcnBin8Max { get; set; }
public string DcnBin8Mean { get; set; }
public string DcnBin8Min { get; set; }
public string DcnBin8StdDev { get; set; }
public string DcnHazeAvgMax { get; set; }
public string DcnHazeAvgMean { get; set; }
public string DcnHazeAvgMin { get; set; }
public string DcnHazeAvgStdDev { get; set; }
public string DcnHazeMedianMax { get; set; }
public string DcnHazeMedianMean { get; set; }
public string DcnHazeMedianMin { get; set; }
public string DcnHazeMedianStdDev { get; set; }
public string DcnHazeStdDevMax { get; set; }
public string DcnHazeStdDevMean { get; set; }
public string DcnHazeStdDevMin { get; set; }
public string DcnHazeStdDevStdDev { get; set; }
public string DcnLpdESMax { get; set; }
public string DcnLpdESMean { get; set; }
public string DcnLpdESMin { get; set; }
public string DcnLpdESStdDev { get; set; }
public string DcnLpdMax { get; set; }
public string DcnLpdMean { get; set; }
public string DcnLpdMin { get; set; }
public string DcnLpdNMax { get; set; }
public string DcnLpdNMean { get; set; }
public string DcnLpdNMin { get; set; }
public string DcnLpdNStdDev { get; set; }
public string DcnLpdStdDev { get; set; }
public string DcnMicroScrMax { get; set; }
public string DcnMicroScrMean { get; set; }
public string DcnMicroScrMin { get; set; }
public string DcnMicroScrStdDev { get; set; }
public string DcnScrMax { get; set; }
public string DcnScrMean { get; set; }
public string DcnScrMin { get; set; }
public string DcnScrStdDev { get; set; }
public string DcnSlipMax { get; set; }
public string DcnSlipMean { get; set; }
public string DcnSlipMin { get; set; }
public string DcnSlipStdDev { get; set; }
public string DnnAllMax { get; set; }
public string DnnAllMean { get; set; }
public string DnnAllMin { get; set; }
public string DnnAllStdDev { get; set; }
public string DnnAreaCountMax { get; set; }
public string DnnAreaCountMean { get; set; }
public string DnnAreaCountMin { get; set; }
public string DnnAreaCountStdDev { get; set; }
public string DnnAreaMax { get; set; }
public string DnnAreaMean { get; set; }
public string DnnAreaMin { get; set; }
public string DnnAreaStdDev { get; set; }
public string DnnBin1Max { get; set; }
public string DnnBin1Mean { get; set; }
public string DnnBin1Min { get; set; }
public string DnnBin1StdDev { get; set; }
public string DnnBin2Max { get; set; }
public string DnnBin2Mean { get; set; }
public string DnnBin2Min { get; set; }
public string DnnBin2StdDev { get; set; }
public string DnnBin3Max { get; set; }
public string DnnBin3Mean { get; set; }
public string DnnBin3Min { get; set; }
public string DnnBin3StdDev { get; set; }
public string DnnBin4Max { get; set; }
public string DnnBin4Mean { get; set; }
public string DnnBin4Min { get; set; }
public string DnnBin4StdDev { get; set; }
public string DnnBin5Max { get; set; }
public string DnnBin5Mean { get; set; }
public string DnnBin5Min { get; set; }
public string DnnBin5StdDev { get; set; }
public string DnnBin6Max { get; set; }
public string DnnBin6Mean { get; set; }
public string DnnBin6Min { get; set; }
public string DnnBin6StdDev { get; set; }
public string DnnBin7Max { get; set; }
public string DnnBin7Mean { get; set; }
public string DnnBin7Min { get; set; }
public string DnnBin7StdDev { get; set; }
public string DnnBin8Max { get; set; }
public string DnnBin8Mean { get; set; }
public string DnnBin8Min { get; set; }
public string DnnBin8StdDev { get; set; }
public string DnnHazeAvgMax { get; set; }
public string DnnHazeAvgMean { get; set; }
public string DnnHazeAvgMin { get; set; }
public string DnnHazeAvgStdDev { get; set; }
public string DnnHazeMedianMax { get; set; }
public string DnnHazeMedianMean { get; set; }
public string DnnHazeMedianMin { get; set; }
public string DnnHazeMedianStdDev { get; set; }
public string DnnHazeStdDevMax { get; set; }
public string DnnHazeStdDevMean { get; set; }
public string DnnHazeStdDevMin { get; set; }
public string DnnHazeStdDevStdDev { get; set; }
public string DnnLpdESMax { get; set; }
public string DnnLpdESMean { get; set; }
public string DnnLpdESMin { get; set; }
public string DnnLpdESStdDev { get; set; }
public string DnnLpdMax { get; set; }
public string DnnLpdMean { get; set; }
public string DnnLpdMin { get; set; }
public string DnnLpdNMax { get; set; }
public string DnnLpdNMean { get; set; }
public string DnnLpdNMin { get; set; }
public string DnnLpdNStdDev { get; set; }
public string DnnLpdStdDev { get; set; }
public string DnnMicroScrMax { get; set; }
public string DnnMicroScrMean { get; set; }
public string DnnMicroScrMin { get; set; }
public string DnnMicroScrStdDev { get; set; }
public string DnnScrMax { get; set; }
public string DnnScrMean { get; set; }
public string DnnScrMin { get; set; }
public string DnnScrStdDev { get; set; }
public string DnnSlipMax { get; set; }
public string DnnSlipMean { get; set; }
public string DnnSlipMin { get; set; }
public string DnnSlipStdDev { get; set; }
public string DwnAllMax { get; set; }
public string DwnAllMean { get; set; }
public string DwnAllMin { get; set; }
public string DwnAllStdDev { get; set; }
public string DwnAreaCountMax { get; set; }
public string DwnAreaCountMean { get; set; }
public string DwnAreaCountMin { get; set; }
public string DwnAreaCountStdDev { get; set; }
public string DwnAreaMax { get; set; }
public string DwnAreaMean { get; set; }
public string DwnAreaMin { get; set; }
public string DwnAreaStdDev { get; set; }
public string DwnBin1Max { get; set; }
public string DwnBin1Mean { get; set; }
public string DwnBin1Min { get; set; }
public string DwnBin1StdDev { get; set; }
public string DwnBin2Max { get; set; }
public string DwnBin2Mean { get; set; }
public string DwnBin2Min { get; set; }
public string DwnBin2StdDev { get; set; }
public string DwnBin3Max { get; set; }
public string DwnBin3Mean { get; set; }
public string DwnBin3Min { get; set; }
public string DwnBin3StdDev { get; set; }
public string DwnBin4Max { get; set; }
public string DwnBin4Mean { get; set; }
public string DwnBin4Min { get; set; }
public string DwnBin4StdDev { get; set; }
public string DwnBin5Max { get; set; }
public string DwnBin5Mean { get; set; }
public string DwnBin5Min { get; set; }
public string DwnBin5StdDev { get; set; }
public string DwnBin6Max { get; set; }
public string DwnBin6Mean { get; set; }
public string DwnBin6Min { get; set; }
public string DwnBin6StdDev { get; set; }
public string DwnBin7Max { get; set; }
public string DwnBin7Mean { get; set; }
public string DwnBin7Min { get; set; }
public string DwnBin7StdDev { get; set; }
public string DwnBin8Max { get; set; }
public string DwnBin8Mean { get; set; }
public string DwnBin8Min { get; set; }
public string DwnBin8StdDev { get; set; }
public string DwnHazeAvgMax { get; set; }
public string DwnHazeAvgMean { get; set; }
public string DwnHazeAvgMin { get; set; }
public string DwnHazeAvgStdDev { get; set; }
public string DwnHazeMedianMax { get; set; }
public string DwnHazeMedianMean { get; set; }
public string DwnHazeMedianMin { get; set; }
public string DwnHazeMedianStdDev { get; set; }
public string DwnHazeStdDevMax { get; set; }
public string DwnHazeStdDevMean { get; set; }
public string DwnHazeStdDevMin { get; set; }
public string DwnHazeStdDevStdDev { get; set; }
public string DwnLpdESMax { get; set; }
public string DwnLpdESMean { get; set; }
public string DwnLpdESMin { get; set; }
public string DwnLpdESStdDev { get; set; }
public string DwnLpdMax { get; set; }
public string DwnLpdMean { get; set; }
public string DwnLpdMin { get; set; }
public string DwnLpdNMax { get; set; }
public string DwnLpdNMean { get; set; }
public string DwnLpdNMin { get; set; }
public string DwnLpdNStdDev { get; set; }
public string DwnLpdStdDev { get; set; }
public string DwnMicroScrMax { get; set; }
public string DwnMicroScrMean { get; set; }
public string DwnMicroScrMin { get; set; }
public string DwnMicroScrStdDev { get; set; }
public string DwnScrMax { get; set; }
public string DwnScrMean { get; set; }
public string DwnScrMin { get; set; }
public string DwnScrStdDev { get; set; }
public string DwnSlipMax { get; set; }
public string DwnSlipMean { get; set; }
public string DwnSlipMin { get; set; }
public string DwnSlipStdDev { get; set; }
public string DcnAll { get; set; }
public string DcnArea { get; set; }
public string DcnAreaCount { get; set; }
public string DcnBin1 { get; set; }
public string DcnBin2 { get; set; }
public string DcnBin3 { get; set; }
public string DcnBin4 { get; set; }
public string DcnBin5 { get; set; }
public string DcnBin6 { get; set; }
public string DcnBin7 { get; set; }
public string DcnBin8 { get; set; }
public string DcnHazeAvg { get; set; }
public string DcnHazeMedian { get; set; }
public string DcnHazeStdDev { get; set; }
public string DcnLpd { get; set; }
public string DcnLpdES { get; set; }
public string DcnLpdN { get; set; }
public string DcnMicroScr { get; set; }
public string DcnScr { get; set; }
public string DcnSlip { get; set; }
public string DnnAll { get; set; }
public string DnnArea { get; set; }
public string DnnAreaCount { get; set; }
public string DnnBin1 { get; set; }
public string DnnBin2 { get; set; }
public string DnnBin3 { get; set; }
public string DnnBin4 { get; set; }
public string DnnBin5 { get; set; }
public string DnnBin6 { get; set; }
public string DnnBin7 { get; set; }
public string DnnBin8 { get; set; }
public string DnnHazeAvg { get; set; }
public string DnnHazeMedian { get; set; }
public string DnnHazeStdDev { get; set; }
public string DnnLpd { get; set; }
public string DnnLpdES { get; set; }
public string DnnLpdN { get; set; }
public string DnnMicroScr { get; set; }
public string DnnScr { get; set; }
public string DnnSlip { get; set; }
public string DwnAll { get; set; }
public string DwnArea { get; set; }
public string DwnAreaCount { get; set; }
public string DwnBin1 { get; set; }
public string DwnBin2 { get; set; }
public string DwnBin3 { get; set; }
public string DwnBin4 { get; set; }
public string DwnBin5 { get; set; }
public string DwnBin6 { get; set; }
public string DwnBin7 { get; set; }
public string DwnBin8 { get; set; }
public string DwnHazeAvg { get; set; }
public string DwnHazeMedian { get; set; }
public string DwnHazeStdDev { get; set; }
public string DwnLpd { get; set; }
public string DwnLpdES { get; set; }
public string DwnLpdN { get; set; }
public string DwnMicroScr { get; set; }
public string DwnScr { get; set; }
public string DwnSlip { get; set; }
[JsonPropertyName("DcnAllMax")] public string DcnAllMax { get; set; }
[JsonPropertyName("DcnAllMean")] public string DcnAllMean { get; set; }
[JsonPropertyName("DcnAllMin")] public string DcnAllMin { get; set; }
[JsonPropertyName("DcnAllStdDev")] public string DcnAllStdDev { get; set; }
[JsonPropertyName("DcnAreaCountMax")] public string DcnAreaCountMax { get; set; }
[JsonPropertyName("DcnAreaCountMean")] public string DcnAreaCountMean { get; set; }
[JsonPropertyName("DcnAreaCountMin")] public string DcnAreaCountMin { get; set; }
[JsonPropertyName("DcnAreaCountStdDev")] public string DcnAreaCountStdDev { get; set; }
[JsonPropertyName("DcnAreaMax")] public string DcnAreaMax { get; set; }
[JsonPropertyName("DcnAreaMean")] public string DcnAreaMean { get; set; }
[JsonPropertyName("DcnAreaMin")] public string DcnAreaMin { get; set; }
[JsonPropertyName("DcnAreaStdDev")] public string DcnAreaStdDev { get; set; }
[JsonPropertyName("DcnBin1Max")] public string DcnBin1Max { get; set; }
[JsonPropertyName("DcnBin1Mean")] public string DcnBin1Mean { get; set; }
[JsonPropertyName("DcnBin1Min")] public string DcnBin1Min { get; set; }
[JsonPropertyName("DcnBin1StdDev")] public string DcnBin1StdDev { get; set; }
[JsonPropertyName("DcnBin2Max")] public string DcnBin2Max { get; set; }
[JsonPropertyName("DcnBin2Mean")] public string DcnBin2Mean { get; set; }
[JsonPropertyName("DcnBin2Min")] public string DcnBin2Min { get; set; }
[JsonPropertyName("DcnBin2StdDev")] public string DcnBin2StdDev { get; set; }
[JsonPropertyName("DcnBin3Max")] public string DcnBin3Max { get; set; }
[JsonPropertyName("DcnBin3Mean")] public string DcnBin3Mean { get; set; }
[JsonPropertyName("DcnBin3Min")] public string DcnBin3Min { get; set; }
[JsonPropertyName("DcnBin3StdDev")] public string DcnBin3StdDev { get; set; }
[JsonPropertyName("DcnBin4Max")] public string DcnBin4Max { get; set; }
[JsonPropertyName("DcnBin4Mean")] public string DcnBin4Mean { get; set; }
[JsonPropertyName("DcnBin4Min")] public string DcnBin4Min { get; set; }
[JsonPropertyName("DcnBin4StdDev")] public string DcnBin4StdDev { get; set; }
[JsonPropertyName("DcnBin5Max")] public string DcnBin5Max { get; set; }
[JsonPropertyName("DcnBin5Mean")] public string DcnBin5Mean { get; set; }
[JsonPropertyName("DcnBin5Min")] public string DcnBin5Min { get; set; }
[JsonPropertyName("DcnBin5StdDev")] public string DcnBin5StdDev { get; set; }
[JsonPropertyName("DcnBin6Max")] public string DcnBin6Max { get; set; }
[JsonPropertyName("DcnBin6Mean")] public string DcnBin6Mean { get; set; }
[JsonPropertyName("DcnBin6Min")] public string DcnBin6Min { get; set; }
[JsonPropertyName("DcnBin6StdDev")] public string DcnBin6StdDev { get; set; }
[JsonPropertyName("DcnBin7Max")] public string DcnBin7Max { get; set; }
[JsonPropertyName("DcnBin7Mean")] public string DcnBin7Mean { get; set; }
[JsonPropertyName("DcnBin7Min")] public string DcnBin7Min { get; set; }
[JsonPropertyName("DcnBin7StdDev")] public string DcnBin7StdDev { get; set; }
[JsonPropertyName("DcnBin8Max")] public string DcnBin8Max { get; set; }
[JsonPropertyName("DcnBin8Mean")] public string DcnBin8Mean { get; set; }
[JsonPropertyName("DcnBin8Min")] public string DcnBin8Min { get; set; }
[JsonPropertyName("DcnBin8StdDev")] public string DcnBin8StdDev { get; set; }
[JsonPropertyName("DcnHazeAvgMax")] public string DcnHazeAvgMax { get; set; }
[JsonPropertyName("DcnHazeAvgMean")] public string DcnHazeAvgMean { get; set; }
[JsonPropertyName("DcnHazeAvgMin")] public string DcnHazeAvgMin { get; set; }
[JsonPropertyName("DcnHazeAvgStdDev")] public string DcnHazeAvgStdDev { get; set; }
[JsonPropertyName("DcnHazeMedianMax")] public string DcnHazeMedianMax { get; set; }
[JsonPropertyName("DcnHazeMedianMean")] public string DcnHazeMedianMean { get; set; }
[JsonPropertyName("DcnHazeMedianMin")] public string DcnHazeMedianMin { get; set; }
[JsonPropertyName("DcnHazeMedianStdDev")] public string DcnHazeMedianStdDev { get; set; }
[JsonPropertyName("DcnHazeStdDevMax")] public string DcnHazeStdDevMax { get; set; }
[JsonPropertyName("DcnHazeStdDevMean")] public string DcnHazeStdDevMean { get; set; }
[JsonPropertyName("DcnHazeStdDevMin")] public string DcnHazeStdDevMin { get; set; }
[JsonPropertyName("DcnHazeStdDevStdDev")] public string DcnHazeStdDevStdDev { get; set; }
[JsonPropertyName("DcnLpdESMax")] public string DcnLpdESMax { get; set; }
[JsonPropertyName("DcnLpdESMean")] public string DcnLpdESMean { get; set; }
[JsonPropertyName("DcnLpdESMin")] public string DcnLpdESMin { get; set; }
[JsonPropertyName("DcnLpdESStdDev")] public string DcnLpdESStdDev { get; set; }
[JsonPropertyName("DcnLpdMax")] public string DcnLpdMax { get; set; }
[JsonPropertyName("DcnLpdMean")] public string DcnLpdMean { get; set; }
[JsonPropertyName("DcnLpdMin")] public string DcnLpdMin { get; set; }
[JsonPropertyName("DcnLpdNMax")] public string DcnLpdNMax { get; set; }
[JsonPropertyName("DcnLpdNMean")] public string DcnLpdNMean { get; set; }
[JsonPropertyName("DcnLpdNMin")] public string DcnLpdNMin { get; set; }
[JsonPropertyName("DcnLpdNStdDev")] public string DcnLpdNStdDev { get; set; }
[JsonPropertyName("DcnLpdStdDev")] public string DcnLpdStdDev { get; set; }
[JsonPropertyName("DcnMicroScrMax")] public string DcnMicroScrMax { get; set; }
[JsonPropertyName("DcnMicroScrMean")] public string DcnMicroScrMean { get; set; }
[JsonPropertyName("DcnMicroScrMin")] public string DcnMicroScrMin { get; set; }
[JsonPropertyName("DcnMicroScrStdDev")] public string DcnMicroScrStdDev { get; set; }
[JsonPropertyName("DcnScrMax")] public string DcnScrMax { get; set; }
[JsonPropertyName("DcnScrMean")] public string DcnScrMean { get; set; }
[JsonPropertyName("DcnScrMin")] public string DcnScrMin { get; set; }
[JsonPropertyName("DcnScrStdDev")] public string DcnScrStdDev { get; set; }
[JsonPropertyName("DcnSlipMax")] public string DcnSlipMax { get; set; }
[JsonPropertyName("DcnSlipMean")] public string DcnSlipMean { get; set; }
[JsonPropertyName("DcnSlipMin")] public string DcnSlipMin { get; set; }
[JsonPropertyName("DcnSlipStdDev")] public string DcnSlipStdDev { get; set; }
[JsonPropertyName("DnnAllMax")] public string DnnAllMax { get; set; }
[JsonPropertyName("DnnAllMean")] public string DnnAllMean { get; set; }
[JsonPropertyName("DnnAllMin")] public string DnnAllMin { get; set; }
[JsonPropertyName("DnnAllStdDev")] public string DnnAllStdDev { get; set; }
[JsonPropertyName("DnnAreaCountMax")] public string DnnAreaCountMax { get; set; }
[JsonPropertyName("DnnAreaCountMean")] public string DnnAreaCountMean { get; set; }
[JsonPropertyName("DnnAreaCountMin")] public string DnnAreaCountMin { get; set; }
[JsonPropertyName("DnnAreaCountStdDev")] public string DnnAreaCountStdDev { get; set; }
[JsonPropertyName("DnnAreaMax")] public string DnnAreaMax { get; set; }
[JsonPropertyName("DnnAreaMean")] public string DnnAreaMean { get; set; }
[JsonPropertyName("DnnAreaMin")] public string DnnAreaMin { get; set; }
[JsonPropertyName("DnnAreaStdDev")] public string DnnAreaStdDev { get; set; }
[JsonPropertyName("DnnBin1Max")] public string DnnBin1Max { get; set; }
[JsonPropertyName("DnnBin1Mean")] public string DnnBin1Mean { get; set; }
[JsonPropertyName("DnnBin1Min")] public string DnnBin1Min { get; set; }
[JsonPropertyName("DnnBin1StdDev")] public string DnnBin1StdDev { get; set; }
[JsonPropertyName("DnnBin2Max")] public string DnnBin2Max { get; set; }
[JsonPropertyName("DnnBin2Mean")] public string DnnBin2Mean { get; set; }
[JsonPropertyName("DnnBin2Min")] public string DnnBin2Min { get; set; }
[JsonPropertyName("DnnBin2StdDev")] public string DnnBin2StdDev { get; set; }
[JsonPropertyName("DnnBin3Max")] public string DnnBin3Max { get; set; }
[JsonPropertyName("DnnBin3Mean")] public string DnnBin3Mean { get; set; }
[JsonPropertyName("DnnBin3Min")] public string DnnBin3Min { get; set; }
[JsonPropertyName("DnnBin3StdDev")] public string DnnBin3StdDev { get; set; }
[JsonPropertyName("DnnBin4Max")] public string DnnBin4Max { get; set; }
[JsonPropertyName("DnnBin4Mean")] public string DnnBin4Mean { get; set; }
[JsonPropertyName("DnnBin4Min")] public string DnnBin4Min { get; set; }
[JsonPropertyName("DnnBin4StdDev")] public string DnnBin4StdDev { get; set; }
[JsonPropertyName("DnnBin5Max")] public string DnnBin5Max { get; set; }
[JsonPropertyName("DnnBin5Mean")] public string DnnBin5Mean { get; set; }
[JsonPropertyName("DnnBin5Min")] public string DnnBin5Min { get; set; }
[JsonPropertyName("DnnBin5StdDev")] public string DnnBin5StdDev { get; set; }
[JsonPropertyName("DnnBin6Max")] public string DnnBin6Max { get; set; }
[JsonPropertyName("DnnBin6Mean")] public string DnnBin6Mean { get; set; }
[JsonPropertyName("DnnBin6Min")] public string DnnBin6Min { get; set; }
[JsonPropertyName("DnnBin6StdDev")] public string DnnBin6StdDev { get; set; }
[JsonPropertyName("DnnBin7Max")] public string DnnBin7Max { get; set; }
[JsonPropertyName("DnnBin7Mean")] public string DnnBin7Mean { get; set; }
[JsonPropertyName("DnnBin7Min")] public string DnnBin7Min { get; set; }
[JsonPropertyName("DnnBin7StdDev")] public string DnnBin7StdDev { get; set; }
[JsonPropertyName("DnnBin8Max")] public string DnnBin8Max { get; set; }
[JsonPropertyName("DnnBin8Mean")] public string DnnBin8Mean { get; set; }
[JsonPropertyName("DnnBin8Min")] public string DnnBin8Min { get; set; }
[JsonPropertyName("DnnBin8StdDev")] public string DnnBin8StdDev { get; set; }
[JsonPropertyName("DnnHazeAvgMax")] public string DnnHazeAvgMax { get; set; }
[JsonPropertyName("DnnHazeAvgMean")] public string DnnHazeAvgMean { get; set; }
[JsonPropertyName("DnnHazeAvgMin")] public string DnnHazeAvgMin { get; set; }
[JsonPropertyName("DnnHazeAvgStdDev")] public string DnnHazeAvgStdDev { get; set; }
[JsonPropertyName("DnnHazeMedianMax")] public string DnnHazeMedianMax { get; set; }
[JsonPropertyName("DnnHazeMedianMean")] public string DnnHazeMedianMean { get; set; }
[JsonPropertyName("DnnHazeMedianMin")] public string DnnHazeMedianMin { get; set; }
[JsonPropertyName("DnnHazeMedianStdDev")] public string DnnHazeMedianStdDev { get; set; }
[JsonPropertyName("DnnHazeStdDevMax")] public string DnnHazeStdDevMax { get; set; }
[JsonPropertyName("DnnHazeStdDevMean")] public string DnnHazeStdDevMean { get; set; }
[JsonPropertyName("DnnHazeStdDevMin")] public string DnnHazeStdDevMin { get; set; }
[JsonPropertyName("DnnHazeStdDevStdDev")] public string DnnHazeStdDevStdDev { get; set; }
[JsonPropertyName("DnnLpdESMax")] public string DnnLpdESMax { get; set; }
[JsonPropertyName("DnnLpdESMean")] public string DnnLpdESMean { get; set; }
[JsonPropertyName("DnnLpdESMin")] public string DnnLpdESMin { get; set; }
[JsonPropertyName("DnnLpdESStdDev")] public string DnnLpdESStdDev { get; set; }
[JsonPropertyName("DnnLpdMax")] public string DnnLpdMax { get; set; }
[JsonPropertyName("DnnLpdMean")] public string DnnLpdMean { get; set; }
[JsonPropertyName("DnnLpdMin")] public string DnnLpdMin { get; set; }
[JsonPropertyName("DnnLpdNMax")] public string DnnLpdNMax { get; set; }
[JsonPropertyName("DnnLpdNMean")] public string DnnLpdNMean { get; set; }
[JsonPropertyName("DnnLpdNMin")] public string DnnLpdNMin { get; set; }
[JsonPropertyName("DnnLpdNStdDev")] public string DnnLpdNStdDev { get; set; }
[JsonPropertyName("DnnLpdStdDev")] public string DnnLpdStdDev { get; set; }
[JsonPropertyName("DnnMicroScrMax")] public string DnnMicroScrMax { get; set; }
[JsonPropertyName("DnnMicroScrMean")] public string DnnMicroScrMean { get; set; }
[JsonPropertyName("DnnMicroScrMin")] public string DnnMicroScrMin { get; set; }
[JsonPropertyName("DnnMicroScrStdDev")] public string DnnMicroScrStdDev { get; set; }
[JsonPropertyName("DnnScrMax")] public string DnnScrMax { get; set; }
[JsonPropertyName("DnnScrMean")] public string DnnScrMean { get; set; }
[JsonPropertyName("DnnScrMin")] public string DnnScrMin { get; set; }
[JsonPropertyName("DnnScrStdDev")] public string DnnScrStdDev { get; set; }
[JsonPropertyName("DnnSlipMax")] public string DnnSlipMax { get; set; }
[JsonPropertyName("DnnSlipMean")] public string DnnSlipMean { get; set; }
[JsonPropertyName("DnnSlipMin")] public string DnnSlipMin { get; set; }
[JsonPropertyName("DnnSlipStdDev")] public string DnnSlipStdDev { get; set; }
[JsonPropertyName("DwnAllMax")] public string DwnAllMax { get; set; }
[JsonPropertyName("DwnAllMean")] public string DwnAllMean { get; set; }
[JsonPropertyName("DwnAllMin")] public string DwnAllMin { get; set; }
[JsonPropertyName("DwnAllStdDev")] public string DwnAllStdDev { get; set; }
[JsonPropertyName("DwnAreaCountMax")] public string DwnAreaCountMax { get; set; }
[JsonPropertyName("DwnAreaCountMean")] public string DwnAreaCountMean { get; set; }
[JsonPropertyName("DwnAreaCountMin")] public string DwnAreaCountMin { get; set; }
[JsonPropertyName("DwnAreaCountStdDev")] public string DwnAreaCountStdDev { get; set; }
[JsonPropertyName("DwnAreaMax")] public string DwnAreaMax { get; set; }
[JsonPropertyName("DwnAreaMean")] public string DwnAreaMean { get; set; }
[JsonPropertyName("DwnAreaMin")] public string DwnAreaMin { get; set; }
[JsonPropertyName("DwnAreaStdDev")] public string DwnAreaStdDev { get; set; }
[JsonPropertyName("DwnBin1Max")] public string DwnBin1Max { get; set; }
[JsonPropertyName("DwnBin1Mean")] public string DwnBin1Mean { get; set; }
[JsonPropertyName("DwnBin1Min")] public string DwnBin1Min { get; set; }
[JsonPropertyName("DwnBin1StdDev")] public string DwnBin1StdDev { get; set; }
[JsonPropertyName("DwnBin2Max")] public string DwnBin2Max { get; set; }
[JsonPropertyName("DwnBin2Mean")] public string DwnBin2Mean { get; set; }
[JsonPropertyName("DwnBin2Min")] public string DwnBin2Min { get; set; }
[JsonPropertyName("DwnBin2StdDev")] public string DwnBin2StdDev { get; set; }
[JsonPropertyName("DwnBin3Max")] public string DwnBin3Max { get; set; }
[JsonPropertyName("DwnBin3Mean")] public string DwnBin3Mean { get; set; }
[JsonPropertyName("DwnBin3Min")] public string DwnBin3Min { get; set; }
[JsonPropertyName("DwnBin3StdDev")] public string DwnBin3StdDev { get; set; }
[JsonPropertyName("DwnBin4Max")] public string DwnBin4Max { get; set; }
[JsonPropertyName("DwnBin4Mean")] public string DwnBin4Mean { get; set; }
[JsonPropertyName("DwnBin4Min")] public string DwnBin4Min { get; set; }
[JsonPropertyName("DwnBin4StdDev")] public string DwnBin4StdDev { get; set; }
[JsonPropertyName("DwnBin5Max")] public string DwnBin5Max { get; set; }
[JsonPropertyName("DwnBin5Mean")] public string DwnBin5Mean { get; set; }
[JsonPropertyName("DwnBin5Min")] public string DwnBin5Min { get; set; }
[JsonPropertyName("DwnBin5StdDev")] public string DwnBin5StdDev { get; set; }
[JsonPropertyName("DwnBin6Max")] public string DwnBin6Max { get; set; }
[JsonPropertyName("DwnBin6Mean")] public string DwnBin6Mean { get; set; }
[JsonPropertyName("DwnBin6Min")] public string DwnBin6Min { get; set; }
[JsonPropertyName("DwnBin6StdDev")] public string DwnBin6StdDev { get; set; }
[JsonPropertyName("DwnBin7Max")] public string DwnBin7Max { get; set; }
[JsonPropertyName("DwnBin7Mean")] public string DwnBin7Mean { get; set; }
[JsonPropertyName("DwnBin7Min")] public string DwnBin7Min { get; set; }
[JsonPropertyName("DwnBin7StdDev")] public string DwnBin7StdDev { get; set; }
[JsonPropertyName("DwnBin8Max")] public string DwnBin8Max { get; set; }
[JsonPropertyName("DwnBin8Mean")] public string DwnBin8Mean { get; set; }
[JsonPropertyName("DwnBin8Min")] public string DwnBin8Min { get; set; }
[JsonPropertyName("DwnBin8StdDev")] public string DwnBin8StdDev { get; set; }
[JsonPropertyName("DwnHazeAvgMax")] public string DwnHazeAvgMax { get; set; }
[JsonPropertyName("DwnHazeAvgMean")] public string DwnHazeAvgMean { get; set; }
[JsonPropertyName("DwnHazeAvgMin")] public string DwnHazeAvgMin { get; set; }
[JsonPropertyName("DwnHazeAvgStdDev")] public string DwnHazeAvgStdDev { get; set; }
[JsonPropertyName("DwnHazeMedianMax")] public string DwnHazeMedianMax { get; set; }
[JsonPropertyName("DwnHazeMedianMean")] public string DwnHazeMedianMean { get; set; }
[JsonPropertyName("DwnHazeMedianMin")] public string DwnHazeMedianMin { get; set; }
[JsonPropertyName("DwnHazeMedianStdDev")] public string DwnHazeMedianStdDev { get; set; }
[JsonPropertyName("DwnHazeStdDevMax")] public string DwnHazeStdDevMax { get; set; }
[JsonPropertyName("DwnHazeStdDevMean")] public string DwnHazeStdDevMean { get; set; }
[JsonPropertyName("DwnHazeStdDevMin")] public string DwnHazeStdDevMin { get; set; }
[JsonPropertyName("DwnHazeStdDevStdDev")] public string DwnHazeStdDevStdDev { get; set; }
[JsonPropertyName("DwnLpdESMax")] public string DwnLpdESMax { get; set; }
[JsonPropertyName("DwnLpdESMean")] public string DwnLpdESMean { get; set; }
[JsonPropertyName("DwnLpdESMin")] public string DwnLpdESMin { get; set; }
[JsonPropertyName("DwnLpdESStdDev")] public string DwnLpdESStdDev { get; set; }
[JsonPropertyName("DwnLpdMax")] public string DwnLpdMax { get; set; }
[JsonPropertyName("DwnLpdMean")] public string DwnLpdMean { get; set; }
[JsonPropertyName("DwnLpdMin")] public string DwnLpdMin { get; set; }
[JsonPropertyName("DwnLpdNMax")] public string DwnLpdNMax { get; set; }
[JsonPropertyName("DwnLpdNMean")] public string DwnLpdNMean { get; set; }
[JsonPropertyName("DwnLpdNMin")] public string DwnLpdNMin { get; set; }
[JsonPropertyName("DwnLpdNStdDev")] public string DwnLpdNStdDev { get; set; }
[JsonPropertyName("DwnLpdStdDev")] public string DwnLpdStdDev { get; set; }
[JsonPropertyName("DwnMicroScrMax")] public string DwnMicroScrMax { get; set; }
[JsonPropertyName("DwnMicroScrMean")] public string DwnMicroScrMean { get; set; }
[JsonPropertyName("DwnMicroScrMin")] public string DwnMicroScrMin { get; set; }
[JsonPropertyName("DwnMicroScrStdDev")] public string DwnMicroScrStdDev { get; set; }
[JsonPropertyName("DwnScrMax")] public string DwnScrMax { get; set; }
[JsonPropertyName("DwnScrMean")] public string DwnScrMean { get; set; }
[JsonPropertyName("DwnScrMin")] public string DwnScrMin { get; set; }
[JsonPropertyName("DwnScrStdDev")] public string DwnScrStdDev { get; set; }
[JsonPropertyName("DwnSlipMax")] public string DwnSlipMax { get; set; }
[JsonPropertyName("DwnSlipMean")] public string DwnSlipMean { get; set; }
[JsonPropertyName("DwnSlipMin")] public string DwnSlipMin { get; set; }
[JsonPropertyName("DwnSlipStdDev")] public string DwnSlipStdDev { get; set; }
[JsonPropertyName("DcnAll")] public string DcnAll { get; set; }
[JsonPropertyName("DcnArea")] public string DcnArea { get; set; }
[JsonPropertyName("DcnAreaCount")] public string DcnAreaCount { get; set; }
[JsonPropertyName("DcnBin1")] public string DcnBin1 { get; set; }
[JsonPropertyName("DcnBin2")] public string DcnBin2 { get; set; }
[JsonPropertyName("DcnBin3")] public string DcnBin3 { get; set; }
[JsonPropertyName("DcnBin4")] public string DcnBin4 { get; set; }
[JsonPropertyName("DcnBin5")] public string DcnBin5 { get; set; }
[JsonPropertyName("DcnBin6")] public string DcnBin6 { get; set; }
[JsonPropertyName("DcnBin7")] public string DcnBin7 { get; set; }
[JsonPropertyName("DcnBin8")] public string DcnBin8 { get; set; }
[JsonPropertyName("DcnHazeAvg")] public string DcnHazeAvg { get; set; }
[JsonPropertyName("DcnHazeMedian")] public string DcnHazeMedian { get; set; }
[JsonPropertyName("DcnHazeStdDev")] public string DcnHazeStdDev { get; set; }
[JsonPropertyName("DcnLpd")] public string DcnLpd { get; set; }
[JsonPropertyName("DcnLpdES")] public string DcnLpdES { get; set; }
[JsonPropertyName("DcnLpdN")] public string DcnLpdN { get; set; }
[JsonPropertyName("DcnMicroScr")] public string DcnMicroScr { get; set; }
[JsonPropertyName("DcnScr")] public string DcnScr { get; set; }
[JsonPropertyName("DcnSlip")] public string DcnSlip { get; set; }
[JsonPropertyName("DnnAll")] public string DnnAll { get; set; }
[JsonPropertyName("DnnArea")] public string DnnArea { get; set; }
[JsonPropertyName("DnnAreaCount")] public string DnnAreaCount { get; set; }
[JsonPropertyName("DnnBin1")] public string DnnBin1 { get; set; }
[JsonPropertyName("DnnBin2")] public string DnnBin2 { get; set; }
[JsonPropertyName("DnnBin3")] public string DnnBin3 { get; set; }
[JsonPropertyName("DnnBin4")] public string DnnBin4 { get; set; }
[JsonPropertyName("DnnBin5")] public string DnnBin5 { get; set; }
[JsonPropertyName("DnnBin6")] public string DnnBin6 { get; set; }
[JsonPropertyName("DnnBin7")] public string DnnBin7 { get; set; }
[JsonPropertyName("DnnBin8")] public string DnnBin8 { get; set; }
[JsonPropertyName("DnnHazeAvg")] public string DnnHazeAvg { get; set; }
[JsonPropertyName("DnnHazeMedian")] public string DnnHazeMedian { get; set; }
[JsonPropertyName("DnnHazeStdDev")] public string DnnHazeStdDev { get; set; }
[JsonPropertyName("DnnLpd")] public string DnnLpd { get; set; }
[JsonPropertyName("DnnLpdES")] public string DnnLpdES { get; set; }
[JsonPropertyName("DnnLpdN")] public string DnnLpdN { get; set; }
[JsonPropertyName("DnnMicroScr")] public string DnnMicroScr { get; set; }
[JsonPropertyName("DnnScr")] public string DnnScr { get; set; }
[JsonPropertyName("DnnSlip")] public string DnnSlip { get; set; }
[JsonPropertyName("DwnAll")] public string DwnAll { get; set; }
[JsonPropertyName("DwnArea")] public string DwnArea { get; set; }
[JsonPropertyName("DwnAreaCount")] public string DwnAreaCount { get; set; }
[JsonPropertyName("DwnBin1")] public string DwnBin1 { get; set; }
[JsonPropertyName("DwnBin2")] public string DwnBin2 { get; set; }
[JsonPropertyName("DwnBin3")] public string DwnBin3 { get; set; }
[JsonPropertyName("DwnBin4")] public string DwnBin4 { get; set; }
[JsonPropertyName("DwnBin5")] public string DwnBin5 { get; set; }
[JsonPropertyName("DwnBin6")] public string DwnBin6 { get; set; }
[JsonPropertyName("DwnBin7")] public string DwnBin7 { get; set; }
[JsonPropertyName("DwnBin8")] public string DwnBin8 { get; set; }
[JsonPropertyName("DwnHazeAvg")] public string DwnHazeAvg { get; set; }
[JsonPropertyName("DwnHazeMedian")] public string DwnHazeMedian { get; set; }
[JsonPropertyName("DwnHazeStdDev")] public string DwnHazeStdDev { get; set; }
[JsonPropertyName("DwnLpd")] public string DwnLpd { get; set; }
[JsonPropertyName("DwnLpdES")] public string DwnLpdES { get; set; }
[JsonPropertyName("DwnLpdN")] public string DwnLpdN { get; set; }
[JsonPropertyName("DwnMicroScr")] public string DwnMicroScr { get; set; }
[JsonPropertyName("DwnScr")] public string DwnScr { get; set; }
[JsonPropertyName("DwnSlip")] public string DwnSlip { get; set; }
string IDescription.GetEventDescription() => "File Has been read and parsed";
@ -782,6 +785,8 @@ public class Description : IDescription, Shared.Properties.IDescription
PSN = processData.PSN,
Reactor = processData.Reactor,
Recipe = processData.Recipe,
IndexOf = nameof(IndexOf),
AttemptCounter = nameof(AttemptCounter),
//
Grade = detail.Grade,
HeaderUniqueId = detail.HeaderUniqueID,
@ -1105,7 +1110,7 @@ public class Description : IDescription, Shared.Properties.IDescription
return result;
}
private Description GetDefault(IFileRead fileRead, Logistics logistics)
private static Description GetDefault(IFileRead fileRead, Logistics logistics)
{
Description result = new()
{
@ -1128,6 +1133,8 @@ public class Description : IDescription, Shared.Properties.IDescription
PSN = nameof(PSN),
Reactor = nameof(Reactor),
Recipe = nameof(Recipe),
IndexOf = nameof(IndexOf),
AttemptCounter = nameof(AttemptCounter),
//
Grade = nameof(Grade),
HeaderUniqueId = nameof(HeaderUniqueId),
@ -1442,6 +1449,27 @@ public class Description : IDescription, Shared.Properties.IDescription
return result;
}
internal static JsonElement GetDefaultJsonElement(IFileRead fileRead, Logistics logistics)
{
JsonElement result;
Description description = GetDefault(fileRead, logistics);
string json = JsonSerializer.Serialize(description, DescriptionSourceGenerationContext.Default.Description);
result = JsonSerializer.Deserialize<JsonElement>(json);
return result;
}
internal static string GetDateFormat() => "MM/dd/yyyy hh:mm:ss tt";
}
[JsonSourceGenerationOptions(WriteIndented = true, NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
[JsonSerializable(typeof(Description))]
internal partial class DescriptionSourceGenerationContext : JsonSerializerContext
{
}
[JsonSourceGenerationOptions(WriteIndented = true, NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
[JsonSerializable(typeof(Description[]))]
internal partial class DescriptionArraySourceGenerationContext : JsonSerializerContext
{
}

View File

@ -1,76 +1,90 @@
namespace Adaptation.FileHandlers.txt;
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.txt;
public class Detail
{
public string Grade { get; set; }
[JsonPropertyName("Grade")] public string Grade { get; set; }
public string HeaderUniqueID { get; set; }
public string Side { get; set; }
public string SrcDest { get; set; }
[JsonPropertyName("Side")] public string Side { get; set; }
[JsonPropertyName("SrcDest")] public string SrcDest { get; set; }
public string UniqueID { get; set; }
public string WaferID { get; set; }
[JsonPropertyName("WaferID")] public string WaferID { get; set; }
public string Data { get; set; }
public string DcnAll { get; set; }
public string DcnArea { get; set; }
public string DcnAreaCount { get; set; }
public string DcnBin1 { get; set; }
public string DcnBin2 { get; set; }
public string DcnBin3 { get; set; }
public string DcnBin4 { get; set; }
public string DcnBin5 { get; set; }
public string DcnBin6 { get; set; }
public string DcnBin7 { get; set; }
public string DcnBin8 { get; set; }
public string DcnHazeAvg { get; set; }
public string DcnHazeMedian { get; set; }
public string DcnHazeStdDev { get; set; }
public string DcnLpd { get; set; }
public string DcnLpdES { get; set; }
public string DcnLpdN { get; set; }
public string DcnMicroScr { get; set; }
public string DcnScr { get; set; }
public string DcnSlip { get; set; }
public string DnnAll { get; set; }
public string DnnArea { get; set; }
public string DnnAreaCount { get; set; }
public string DnnBin1 { get; set; }
public string DnnBin2 { get; set; }
public string DnnBin3 { get; set; }
public string DnnBin4 { get; set; }
public string DnnBin5 { get; set; }
public string DnnBin6 { get; set; }
public string DnnBin7 { get; set; }
public string DnnBin8 { get; set; }
public string DnnHazeAvg { get; set; }
public string DnnHazeMedian { get; set; }
public string DnnHazeStdDev { get; set; }
public string DnnLpd { get; set; }
public string DnnLpdES { get; set; }
public string DnnLpdN { get; set; }
public string DnnMicroScr { get; set; }
public string DnnScr { get; set; }
public string DnnSlip { get; set; }
public string DwnAll { get; set; }
public string DwnArea { get; set; }
public string DwnAreaCount { get; set; }
public string DwnBin1 { get; set; }
public string DwnBin2 { get; set; }
public string DwnBin3 { get; set; }
public string DwnBin4 { get; set; }
public string DwnBin5 { get; set; }
public string DwnBin6 { get; set; }
public string DwnBin7 { get; set; }
public string DwnBin8 { get; set; }
public string DwnHazeAvg { get; set; }
public string DwnHazeMedian { get; set; }
public string DwnHazeStdDev { get; set; }
public string DwnLpd { get; set; }
public string DwnLpdES { get; set; }
public string DwnLpdN { get; set; }
public string DwnMicroScr { get; set; }
public string DwnScr { get; set; }
public string DwnSlip { get; set; }
[JsonPropertyName("DcnAll")] public string DcnAll { get; set; }
[JsonPropertyName("DcnArea")] public string DcnArea { get; set; }
[JsonPropertyName("DcnAreaCount")] public string DcnAreaCount { get; set; }
[JsonPropertyName("DcnBin1")] public string DcnBin1 { get; set; }
[JsonPropertyName("DcnBin2")] public string DcnBin2 { get; set; }
[JsonPropertyName("DcnBin3")] public string DcnBin3 { get; set; }
[JsonPropertyName("DcnBin4")] public string DcnBin4 { get; set; }
[JsonPropertyName("DcnBin5")] public string DcnBin5 { get; set; }
[JsonPropertyName("DcnBin6")] public string DcnBin6 { get; set; }
[JsonPropertyName("DcnBin7")] public string DcnBin7 { get; set; }
[JsonPropertyName("DcnBin8")] public string DcnBin8 { get; set; }
[JsonPropertyName("DcnHazeAvg")] public string DcnHazeAvg { get; set; }
[JsonPropertyName("DcnHazeMedian")] public string DcnHazeMedian { get; set; }
[JsonPropertyName("DcnHazeStdDev")] public string DcnHazeStdDev { get; set; }
[JsonPropertyName("DcnLpd")] public string DcnLpd { get; set; }
[JsonPropertyName("DcnLpdES")] public string DcnLpdES { get; set; }
[JsonPropertyName("DcnLpdN")] public string DcnLpdN { get; set; }
[JsonPropertyName("DcnMicroScr")] public string DcnMicroScr { get; set; }
[JsonPropertyName("DcnScr")] public string DcnScr { get; set; }
[JsonPropertyName("DcnSlip")] public string DcnSlip { get; set; }
[JsonPropertyName("DnnAll")] public string DnnAll { get; set; }
[JsonPropertyName("DnnArea")] public string DnnArea { get; set; }
[JsonPropertyName("DnnAreaCount")] public string DnnAreaCount { get; set; }
[JsonPropertyName("DnnBin1")] public string DnnBin1 { get; set; }
[JsonPropertyName("DnnBin2")] public string DnnBin2 { get; set; }
[JsonPropertyName("DnnBin3")] public string DnnBin3 { get; set; }
[JsonPropertyName("DnnBin4")] public string DnnBin4 { get; set; }
[JsonPropertyName("DnnBin5")] public string DnnBin5 { get; set; }
[JsonPropertyName("DnnBin6")] public string DnnBin6 { get; set; }
[JsonPropertyName("DnnBin7")] public string DnnBin7 { get; set; }
[JsonPropertyName("DnnBin8")] public string DnnBin8 { get; set; }
[JsonPropertyName("DnnHazeAvg")] public string DnnHazeAvg { get; set; }
[JsonPropertyName("DnnHazeMedian")] public string DnnHazeMedian { get; set; }
[JsonPropertyName("DnnHazeStdDev")] public string DnnHazeStdDev { get; set; }
[JsonPropertyName("DnnLpd")] public string DnnLpd { get; set; }
[JsonPropertyName("DnnLpdES")] public string DnnLpdES { get; set; }
[JsonPropertyName("DnnLpdN")] public string DnnLpdN { get; set; }
[JsonPropertyName("DnnMicroScr")] public string DnnMicroScr { get; set; }
[JsonPropertyName("DnnScr")] public string DnnScr { get; set; }
[JsonPropertyName("DnnSlip")] public string DnnSlip { get; set; }
[JsonPropertyName("DwnAll")] public string DwnAll { get; set; }
[JsonPropertyName("DwnArea")] public string DwnArea { get; set; }
[JsonPropertyName("DwnAreaCount")] public string DwnAreaCount { get; set; }
[JsonPropertyName("DwnBin1")] public string DwnBin1 { get; set; }
[JsonPropertyName("DwnBin2")] public string DwnBin2 { get; set; }
[JsonPropertyName("DwnBin3")] public string DwnBin3 { get; set; }
[JsonPropertyName("DwnBin4")] public string DwnBin4 { get; set; }
[JsonPropertyName("DwnBin5")] public string DwnBin5 { get; set; }
[JsonPropertyName("DwnBin6")] public string DwnBin6 { get; set; }
[JsonPropertyName("DwnBin7")] public string DwnBin7 { get; set; }
[JsonPropertyName("DwnBin8")] public string DwnBin8 { get; set; }
[JsonPropertyName("DwnHazeAvg")] public string DwnHazeAvg { get; set; }
[JsonPropertyName("DwnHazeMedian")] public string DwnHazeMedian { get; set; }
[JsonPropertyName("DwnHazeStdDev")] public string DwnHazeStdDev { get; set; }
[JsonPropertyName("DwnLpd")] public string DwnLpd { get; set; }
[JsonPropertyName("DwnLpdES")] public string DwnLpdES { get; set; }
[JsonPropertyName("DwnLpdN")] public string DwnLpdN { get; set; }
[JsonPropertyName("DwnMicroScr")] public string DwnMicroScr { get; set; }
[JsonPropertyName("DwnScr")] public string DwnScr { get; set; }
[JsonPropertyName("DwnSlip")] public string DwnSlip { get; set; }
public Detail() => Data = "*Data*";
}
[JsonSourceGenerationOptions(WriteIndented = true, NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
[JsonSerializable(typeof(Detail))]
internal partial class DetailSourceGenerationContext : JsonSerializerContext
{
}
[JsonSourceGenerationOptions(WriteIndented = true, NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
[JsonSerializable(typeof(Detail[]))]
internal partial class DetailArraySourceGenerationContext : JsonSerializerContext
{
}

View File

@ -98,38 +98,37 @@ public class FileRead : Shared.FileRead, IFileRead
private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime)
{
Tuple<string, Test[], JsonElement[], List<FileInfo>> results = new(string.Empty, Array.Empty<Test>(), Array.Empty<JsonElement>(), new List<FileInfo>());
Tuple<string, Test[], JsonElement[], List<FileInfo>> results;
Test[] tests = Array.Empty<Test>();
List<JsonElement> jsonElements = new();
List<FileInfo> fileInfoCollection = new();
_TickOffset ??= 0; // new FileInfo(reportFullPath).LastWriteTime.Ticks - dateTime.Ticks;
_Logistics = new Logistics(this, _TickOffset.Value, reportFullPath, useSplitForMID: true);
fileInfoCollection.Add(_Logistics.FileInfo);
SetFileParameterLotIDToLogisticsMID();
if (_Logistics.FileInfo.Length < _MinFileLength)
results.Item4.Add(_Logistics.FileInfo);
results = new(string.Empty, tests, jsonElements.ToArray(), fileInfoCollection);
else
{
Run? run = Run.Get(_Logistics, results.Item4);
Run? run = Run.Get(_Logistics, fileInfoCollection);
if (run is null)
throw new Exception(string.Concat("A) No Data - ", dateTime.Ticks));
IProcessData iProcessData = new ProcessData(this, _Logistics, results.Item4);
if (iProcessData is not ProcessData processData)
results = new(string.Concat("B) No Data - ", dateTime.Ticks), Array.Empty<Test>(), Array.Empty<JsonElement>(), results.Item4);
results = new(string.Concat("A) No Data - ", dateTime.Ticks), tests, jsonElements.ToArray(), fileInfoCollection);
else
{
string mid;
if (!string.IsNullOrEmpty(processData.Lot) && string.IsNullOrEmpty(processData.Reactor) && string.IsNullOrEmpty(processData.RDS) && string.IsNullOrEmpty(processData.PSN))
mid = processData.Lot;
else if (!string.IsNullOrEmpty(processData.Employee) && string.IsNullOrEmpty(processData.Reactor) && string.IsNullOrEmpty(processData.RDS) && string.IsNullOrEmpty(processData.PSN))
mid = processData.Employee;
Descriptor descriptor = ProcessData.GetDescriptor(run.Header.Lot);
if (!string.IsNullOrEmpty(descriptor.Lot) && string.IsNullOrEmpty(descriptor.Reactor) && string.IsNullOrEmpty(descriptor.RDS) && string.IsNullOrEmpty(descriptor.PSN))
mid = descriptor.Lot;
else if (!string.IsNullOrEmpty(descriptor.Employee) && string.IsNullOrEmpty(descriptor.Reactor) && string.IsNullOrEmpty(descriptor.RDS) && string.IsNullOrEmpty(descriptor.PSN))
mid = descriptor.Employee;
else
{
mid = string.Concat(processData.Reactor, "-", processData.RDS, "-", processData.PSN);
mid = Regex.Replace(mid, @"[\\,\/,\:,\*,\?,\"",\<,\>,\|]", "_").Split('\r')[0].Split('\n')[0];
}
mid = string.Concat(descriptor.Reactor, "-", descriptor.RDS, "-", descriptor.PSN);
mid = Regex.Replace(mid, @"[\\,\/,\:,\*,\?,\"",\<,\>,\|]", "_").Split('\r')[0].Split('\n')[0];
SetFileParameterLotID(mid);
_Logistics.Update(mid, processData.Reactor);
if (iProcessData.Details.Count > 0)
results = iProcessData.GetResults(this, _Logistics, results.Item4);
else
results = new(string.Concat("C) No Data - ", dateTime.Ticks), Array.Empty<Test>(), Array.Empty<JsonElement>(), results.Item4);
_Logistics.Update(mid, descriptor.Reactor);
JsonElement jsonElement = Description.GetDefaultJsonElement(this, _Logistics);
jsonElements.Add(jsonElement);
results = new(_Logistics.Logistics1[0], tests, jsonElements.ToArray(), fileInfoCollection);
}
}
return results;

View File

@ -69,7 +69,10 @@ public class Header
Header result;
string lot;
string session;
ScanPast(text, i, constant.LongWaferSummary);
if (!text.Contains(constant.ShortWaferSummary))
ScanPast(text, i, constant.LongWaferSummary);
else
ScanPast(text, i, constant.ShortWaferSummary);
_ = GetToEOL(text, i);
ScanPast(text, i, constant.Session);
session = GetToEOL(text, i, true);

View File

@ -1,13 +1,11 @@
using Adaptation.Shared;
using Adaptation.Shared.Methods;
using log4net;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.RegularExpressions;
namespace Adaptation.FileHandlers.txt;
@ -15,12 +13,6 @@ namespace Adaptation.FileHandlers.txt;
public class ProcessData : IProcessData
{
private int _I;
private string _Data;
private readonly ILog _Log;
private readonly List<object> _Details;
public string JobID { get; set; }
public string MesEntity { get; set; }
public DateTime Date { get; set; }
@ -273,196 +265,17 @@ public class ProcessData : IProcessData
public string Session { get; set; }
public string UniqueID { get; set; }
List<object> Shared.Properties.IProcessData.Details => _Details;
List<object> Shared.Properties.IProcessData.Details { get; }
public ProcessData(IFileRead fileRead, Logistics logistics, List<FileInfo> fileInfoCollection)
{
_Details = new List<object>();
_I = 0;
_Data = string.Empty;
JobID = logistics.JobID;
Date = GetDateTime(logistics);
MesEntity = logistics.MesEntity;
_Log = LogManager.GetLogger(typeof(ProcessData));
Parse(fileRead, logistics, fileInfoCollection);
}
string IProcessData.GetCurrentReactor(IFileRead fileRead, Logistics logistics, Dictionary<string, string> reactors) =>
throw new Exception(string.Concat("See ", nameof(ProcessData)));
Tuple<string, Test[], JsonElement[], List<FileInfo>> IProcessData.GetResults(IFileRead fileRead, Logistics logistics, List<FileInfo> fileInfoCollection) =>
throw new NotImplementedException();
private static DateTime GetDateTime(Logistics logistics) =>
logistics.DateTimeFromSequence;
string IProcessData.GetCurrentReactor(IFileRead fileRead, Logistics logistics, Dictionary<string, string> reactors) => throw new Exception(string.Concat("See ", nameof(Parse)));
Tuple<string, Test[], JsonElement[], List<FileInfo>> IProcessData.GetResults(IFileRead fileRead, Logistics logistics, List<FileInfo> fileInfoCollection)
{
Tuple<string, Test[], JsonElement[], List<FileInfo>> results;
List<Test> tests = new();
foreach (object item in _Details)
tests.Add(Test.SP1);
List<IDescription> descriptions = fileRead.GetDescriptions(fileRead, tests, this);
if (tests.Count != descriptions.Count)
throw new Exception();
for (int i = 0; i < tests.Count; i++)
{
if (descriptions[i] is not Description description)
throw new Exception();
if (description.Test != (int)tests[i])
throw new Exception();
}
FileInfo fileInfo = new($"{logistics.ReportFullPath}.descriptions.json");
List<Description> fileReadDescriptions = (from l in descriptions select (Description)l).ToList();
string json = JsonSerializer.Serialize(fileReadDescriptions, fileReadDescriptions.GetType());
File.WriteAllText(fileInfo.FullName, json);
File.SetLastWriteTime(fileInfo.FullName, logistics.DateTimeFromSequence);
fileInfoCollection.Add(fileInfo);
JsonElement[] jsonElements = JsonSerializer.Deserialize<JsonElement[]>(json) ?? throw new Exception();
results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(logistics.Logistics1[0], tests.ToArray(), jsonElements, fileInfoCollection);
return results;
}
private void ScanPast(string text)
{
int num = _Data.IndexOf(text, _I);
if (num > -1)
_I = num + text.Length;
else
_I = _Data.Length;
}
private string GetBefore(string text)
{
int num = _Data.IndexOf(text, _I);
if (num > -1)
{
string str = _Data.Substring(_I, num - _I);
_I = num + text.Length;
return str.Trim();
}
string str1 = _Data.Substring(_I);
_I = _Data.Length;
return str1.Trim();
}
private string GetBefore(string text, bool trim)
{
if (trim)
return GetBefore(text);
int num = _Data.IndexOf(text, _I);
if (num > -1)
{
string str = _Data.Substring(_I, num - _I);
_I = num + text.Length;
return str;
}
string str1 = _Data.Substring(_I);
_I = _Data.Length;
return str1;
}
private static bool IsNullOrWhiteSpace(string text)
{
for (int index = 0; index < text.Length; ++index)
{
if (!char.IsWhiteSpace(text[index]))
return false;
}
return true;
}
private bool IsBlankLine()
{
int num = _Data.IndexOf("\n", _I);
return IsNullOrWhiteSpace(num > -1 ? _Data.Substring(_I, num - _I) : _Data.Substring(_I));
}
private string GetToEOL() => GetBefore("\n");
private string GetToEOL(bool trim)
{
if (trim)
return GetToEOL();
return GetBefore("\n", false);
}
private string GetToText(string text) => _Data.Substring(_I, _Data.IndexOf(text, _I) - _I).Trim();
private string GetToken()
{
while (_I < _Data.Length && IsNullOrWhiteSpace(_Data.Substring(_I, 1)))
++_I;
int j = _I;
while (j < _Data.Length && !IsNullOrWhiteSpace(_Data.Substring(j, 1)))
++j;
string str = _Data.Substring(_I, j - _I);
_I = j;
return str.Trim();
}
private string PeekNextLine()
{
int j = _I;
string toEol = GetToEOL();
_I = j;
return toEol;
}
private void GetWaferSummaryInfo(List<WaferSummaryInfo> waferSummaryInfos, string whichInfo)
{
ScanPast(whichInfo);
_ = GetToEOL();
_ = GetToEOL();
_ = GetToEOL();
_ = GetToEOL();
string[] segments;
WaferSummaryInfo waferSummaryInfo;
const string grade = "F Grade";
const string reject = "F Reject";
const string overLoad = "F OverLoad";
for (string line = PeekNextLine(); line[0] != '-'; line = PeekNextLine())
{
line = GetToEOL();
waferSummaryInfo = new WaferSummaryInfo();
if (line.StartsWith(grade))
line = line.Replace(grade, string.Concat("F -1", grade.Substring(4)));
else if (line.StartsWith(reject))
line = line.Replace(reject, string.Concat("F -1", reject.Substring(4)));
else if (line.StartsWith(overLoad))
line = line.Replace(overLoad, string.Concat("F -1", overLoad.Substring(4)));
segments = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
waferSummaryInfo.Side = segments[0];
waferSummaryInfo.WaferID = segments[1];
waferSummaryInfo.Grade = segments[2];
waferSummaryInfo.SrcDest = segments[3];
if (segments.Length > 4)
{
waferSummaryInfo.Lpd = segments[5];
waferSummaryInfo.LpdN = segments[6];
waferSummaryInfo.LpdES = segments[7];
waferSummaryInfo.MicroScr = segments[8];
waferSummaryInfo.Scr = segments[9];
waferSummaryInfo.Slip = segments[10];
waferSummaryInfo.AreaNum = segments[11];
waferSummaryInfo.Area = segments[12];
waferSummaryInfo.HazeAvg = segments[13];
waferSummaryInfo.HazeMedian = segments[14];
waferSummaryInfo.HazeStdDev = segments[15];
waferSummaryInfo.Bin1 = segments[16];
waferSummaryInfo.Bin2 = segments[17];
waferSummaryInfo.Bin3 = segments[18];
waferSummaryInfo.Bin4 = segments[19];
waferSummaryInfo.Bin5 = segments[20];
waferSummaryInfo.Bin6 = segments[21];
waferSummaryInfo.Bin7 = segments[22];
waferSummaryInfo.Bin8 = segments[23];
}
if (waferSummaryInfo.WaferID == "-1")
{
segments = waferSummaryInfo.SrcDest.Split('-')[0].Split('/');
waferSummaryInfo.WaferID = segments[segments.Length - 1];
}
waferSummaryInfos.Add(waferSummaryInfo);
}
}
private static (string, string) GetReactorAndRDS(string defaultReactor, string defaultRDS, string text, string formattedText, string[] segments)
{
string rds;
@ -589,483 +402,17 @@ public class ProcessData : IProcessData
return result;
}
private void Set(ILogistics logistics, string summaryReportText)
{
_I = 0;
string lot;
string rds;
string psn;
string recipe;
string reactor;
string session;
string employee;
Descriptor descriptor;
_Data = summaryReportText;
_Log.Debug("HeaderFile() - Beginning");
if (string.IsNullOrEmpty(summaryReportText))
{
recipe = string.Empty;
session = string.Empty;
descriptor = GetDescriptor(summaryReportText);
lot = descriptor.Lot;
psn = descriptor.PSN;
rds = descriptor.RDS;
reactor = descriptor.Reactor;
employee = descriptor.Employee;
}
else
{
ScanPast("Long Wafer Summary");
_ = GetToEOL();
ScanPast("Session:");
recipe = GetToEOL(true);
session = recipe;
ScanPast("Lot ID:");
lot = GetToEOL(true);
descriptor = GetDescriptor(lot);
lot = descriptor.Lot;
psn = descriptor.PSN;
rds = descriptor.RDS;
reactor = descriptor.Reactor;
employee = descriptor.Employee;
}
Lot = lot;
PSN = psn;
RDS = rds;
Recipe = recipe;
Reactor = reactor;
Session = session;
Employee = employee;
UniqueID = string.Format("{0}_{1}_{2}", logistics.JobID, lot, Path.GetFileNameWithoutExtension(logistics.ReportFullPath));
}
private void ParseHeader(ILogistics logistics, List<WaferSummaryInfo> dcnTotals, List<WaferSummaryInfo> dwnTotals, List<WaferSummaryInfo> dnnTotals)
{
_I = 0;
_Data = string.Empty;
string summaryReportText = File.ReadAllText(logistics.ReportFullPath);
Set(logistics, summaryReportText);
if (!string.IsNullOrEmpty(summaryReportText))
{
_Log.Debug("HeaderFile() - Debug B");
_I = 0;
string[] segments;
_Data = summaryReportText;
GetWaferSummaryInfo(dcnTotals, "DCN Totals");
ScanPast("Min");
segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
DcnAllMin = segments[0];
DcnLpdMin = segments[1];
DcnLpdNMin = segments[2];
DcnLpdESMin = segments[3];
DcnMicroScrMin = segments[4];
DcnScrMin = segments[5];
DcnSlipMin = segments[6];
DcnAreaCountMin = segments[7];
DcnAreaMin = segments[8];
DcnHazeAvgMin = segments[9];
DcnHazeMedianMin = segments[10];
DcnHazeStdDevMin = segments[11];
DcnBin1Min = segments[12];
DcnBin2Min = segments[13];
DcnBin3Min = segments[14];
DcnBin4Min = segments[15];
DcnBin5Min = segments[16];
DcnBin6Min = segments[17];
DcnBin7Min = segments[18];
DcnBin8Min = segments[19];
ScanPast("Max");
segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
DcnAllMax = segments[0];
DcnLpdMax = segments[1];
DcnLpdNMax = segments[2];
DcnLpdESMax = segments[3];
DcnMicroScrMax = segments[4];
DcnScrMax = segments[5];
DcnSlipMax = segments[6];
DcnAreaCountMax = segments[7];
DcnAreaMax = segments[8];
DcnHazeAvgMax = segments[9];
DcnHazeMedianMax = segments[10];
DcnHazeStdDevMax = segments[11];
DcnBin1Max = segments[12];
DcnBin2Max = segments[13];
DcnBin3Max = segments[14];
DcnBin4Max = segments[15];
DcnBin5Max = segments[16];
DcnBin6Max = segments[17];
DcnBin7Max = segments[18];
DcnBin8Max = segments[19];
ScanPast("Mean");
segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
DcnAllMean = segments[0];
DcnLpdMean = segments[1];
DcnLpdNMean = segments[2];
DcnLpdESMean = segments[3];
DcnMicroScrMean = segments[4];
DcnScrMean = segments[5];
DcnSlipMean = segments[6];
DcnAreaCountMean = segments[7];
DcnAreaMean = segments[8];
DcnHazeAvgMean = segments[9];
DcnHazeMedianMean = segments[10];
DcnHazeStdDevMean = segments[11];
DcnBin1Mean = segments[12];
DcnBin2Mean = segments[13];
DcnBin3Mean = segments[14];
DcnBin4Mean = segments[15];
DcnBin5Mean = segments[16];
DcnBin6Mean = segments[17];
DcnBin7Mean = segments[18];
DcnBin8Mean = segments[19];
ScanPast("Std. Dev.");
segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
DcnAllStdDev = segments[0];
DcnLpdStdDev = segments[1];
DcnLpdNStdDev = segments[2];
DcnLpdESStdDev = segments[3];
DcnMicroScrStdDev = segments[4];
DcnScrStdDev = segments[5];
DcnSlipStdDev = segments[6];
DcnAreaCountStdDev = segments[7];
DcnAreaStdDev = segments[8];
DcnHazeAvgStdDev = segments[9];
DcnHazeMedianStdDev = segments[10];
DcnHazeStdDevStdDev = segments[11];
DcnBin1StdDev = segments[12];
DcnBin2StdDev = segments[13];
DcnBin3StdDev = segments[14];
DcnBin4StdDev = segments[15];
DcnBin5StdDev = segments[16];
DcnBin6StdDev = segments[17];
DcnBin7StdDev = segments[18];
DcnBin8StdDev = segments[19];
_I = 0;
_Data = summaryReportText;
_Log.Debug("HeaderFile() - Debug C");
if (!_Data.Contains("DWN Totals"))
{
for (int i = 0; i < dcnTotals.Count; i++)
dwnTotals.Add(new WaferSummaryInfo());
}
else
{
GetWaferSummaryInfo(dwnTotals, "DWN Totals");
ScanPast("Min");
segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
DwnAllMin = segments[0];
DwnLpdMin = segments[1];
DwnLpdNMin = segments[2];
DwnLpdESMin = segments[3];
DwnMicroScrMin = segments[4];
DwnScrMin = segments[5];
DwnSlipMin = segments[6];
DwnAreaCountMin = segments[7];
DwnAreaMin = segments[8];
DwnHazeAvgMin = segments[9];
DwnHazeMedianMin = segments[10];
DwnHazeStdDevMin = segments[11];
DwnBin1Min = segments[12];
DwnBin2Min = segments[13];
DwnBin3Min = segments[14];
DwnBin4Min = segments[15];
DwnBin5Min = segments[16];
DwnBin6Min = segments[17];
DwnBin7Min = segments[18];
DwnBin8Min = segments[19];
ScanPast("Max");
segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
DwnAllMax = segments[0];
DwnLpdMax = segments[1];
DwnLpdNMax = segments[2];
DwnLpdESMax = segments[3];
DwnMicroScrMax = segments[4];
DwnScrMax = segments[5];
DwnSlipMax = segments[6];
DwnAreaCountMax = segments[7];
DwnAreaMax = segments[8];
DwnHazeAvgMax = segments[9];
DwnHazeMedianMax = segments[10];
DwnHazeStdDevMax = segments[11];
DwnBin1Max = segments[12];
DwnBin2Max = segments[13];
DwnBin3Max = segments[14];
DwnBin4Max = segments[15];
DwnBin5Max = segments[16];
DwnBin6Max = segments[17];
DwnBin7Max = segments[18];
DwnBin8Max = segments[19];
ScanPast("Mean");
segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
DwnAllMean = segments[0];
DwnLpdMean = segments[1];
DwnLpdNMean = segments[2];
DwnLpdESMean = segments[3];
DwnMicroScrMean = segments[4];
DwnScrMean = segments[5];
DwnSlipMean = segments[6];
DwnAreaCountMean = segments[7];
DwnAreaMean = segments[8];
DwnHazeAvgMean = segments[9];
DwnHazeMedianMean = segments[10];
DwnHazeStdDevMean = segments[11];
DwnBin1Mean = segments[12];
DwnBin2Mean = segments[13];
DwnBin3Mean = segments[14];
DwnBin4Mean = segments[15];
DwnBin5Mean = segments[16];
DwnBin6Mean = segments[17];
DwnBin7Mean = segments[18];
DwnBin8Mean = segments[19];
ScanPast("Std. Dev.");
segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
DwnAllStdDev = segments[0];
DwnLpdStdDev = segments[1];
DwnLpdNStdDev = segments[2];
DwnLpdESStdDev = segments[3];
DwnMicroScrStdDev = segments[4];
DwnScrStdDev = segments[5];
DwnSlipStdDev = segments[6];
DwnAreaCountStdDev = segments[7];
DwnAreaStdDev = segments[8];
DwnHazeAvgStdDev = segments[9];
DwnHazeMedianStdDev = segments[10];
DwnHazeStdDevStdDev = segments[11];
DwnBin1StdDev = segments[12];
DwnBin2StdDev = segments[13];
DwnBin3StdDev = segments[14];
DwnBin4StdDev = segments[15];
DwnBin5StdDev = segments[16];
DwnBin6StdDev = segments[17];
DwnBin7StdDev = segments[18];
DwnBin8StdDev = segments[19];
}
_I = 0;
_Data = summaryReportText;
_Log.Debug("HeaderFile() - Debug D");
if (!_Data.Contains("DNN Totals"))
{
for (int i = 0; i < dcnTotals.Count; i++)
dnnTotals.Add(new WaferSummaryInfo());
}
else
{
GetWaferSummaryInfo(dnnTotals, "DNN Totals");
ScanPast("Min");
segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
DnnAllMin = segments[0];
DnnLpdMin = segments[1];
DnnLpdNMin = segments[2];
DnnLpdESMin = segments[3];
DnnMicroScrMin = segments[4];
DnnScrMin = segments[5];
DnnSlipMin = segments[6];
DnnAreaCountMin = segments[7];
DnnAreaMin = segments[8];
DnnHazeAvgMin = segments[9];
DnnHazeMedianMin = segments[10];
DnnHazeStdDevMin = segments[11];
DnnBin1Min = segments[12];
DnnBin2Min = segments[13];
DnnBin3Min = segments[14];
DnnBin4Min = segments[15];
DnnBin5Min = segments[16];
DnnBin6Min = segments[17];
DnnBin7Min = segments[18];
DnnBin8Min = segments[19];
ScanPast("Max");
segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
DnnAllMax = segments[0];
DnnLpdMax = segments[1];
DnnLpdNMax = segments[2];
DnnLpdESMax = segments[3];
DnnMicroScrMax = segments[4];
DnnScrMax = segments[5];
DnnSlipMax = segments[6];
DnnAreaCountMax = segments[7];
DnnAreaMax = segments[8];
DnnHazeAvgMax = segments[9];
DnnHazeMedianMax = segments[10];
DnnHazeStdDevMax = segments[11];
DnnBin1Max = segments[12];
DnnBin2Max = segments[13];
DnnBin3Max = segments[14];
DnnBin4Max = segments[15];
DnnBin5Max = segments[16];
DnnBin6Max = segments[17];
DnnBin7Max = segments[18];
DnnBin8Max = segments[19];
ScanPast("Mean");
segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
DnnAllMean = segments[0];
DnnLpdMean = segments[1];
DnnLpdNMean = segments[2];
DnnLpdESMean = segments[3];
DnnMicroScrMean = segments[4];
DnnScrMean = segments[5];
DnnSlipMean = segments[6];
DnnAreaCountMean = segments[7];
DnnAreaMean = segments[8];
DnnHazeAvgMean = segments[9];
DnnHazeMedianMean = segments[10];
DnnHazeStdDevMean = segments[11];
DnnBin1Mean = segments[12];
DnnBin2Mean = segments[13];
DnnBin3Mean = segments[14];
DnnBin4Mean = segments[15];
DnnBin5Mean = segments[16];
DnnBin6Mean = segments[17];
DnnBin7Mean = segments[18];
DnnBin8Mean = segments[19];
ScanPast("Std. Dev.");
segments = GetToEOL().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
DnnAllStdDev = segments[0];
DnnLpdStdDev = segments[1];
DnnLpdNStdDev = segments[2];
DnnLpdESStdDev = segments[3];
DnnMicroScrStdDev = segments[4];
DnnScrStdDev = segments[5];
DnnSlipStdDev = segments[6];
DnnAreaCountStdDev = segments[7];
DnnAreaStdDev = segments[8];
DnnHazeAvgStdDev = segments[9];
DnnHazeMedianStdDev = segments[10];
DnnHazeStdDevStdDev = segments[11];
DnnBin1StdDev = segments[12];
DnnBin2StdDev = segments[13];
DnnBin3StdDev = segments[14];
DnnBin4StdDev = segments[15];
DnnBin5StdDev = segments[16];
DnnBin6StdDev = segments[17];
DnnBin7StdDev = segments[18];
DnnBin8StdDev = segments[19];
}
}
}
/// <summary>
/// Parse the wafer summary data
/// </summary>
/// <param name="headerFile">wafer data</param>
/// <param name="i">wafer index</param>
/// <returns></returns>
private Detail ParseWaferSummary(int i, List<WaferSummaryInfo> dcnTotals, List<WaferSummaryInfo> dwnTotals, List<WaferSummaryInfo> dnnTotals)
{
Detail result = new()
{
// NOTE: get the UniqueID during DataCalculation in order to retrieve the SPCToolID from the cell component Tag field.
// id
// General Wafer Info
Side = dcnTotals[i].Side,
WaferID = dcnTotals[i].WaferID,
Grade = dcnTotals[i].Grade,
SrcDest = dcnTotals[i].SrcDest,
// Dcn Info
DcnAll = dcnTotals[i].All ?? string.Empty,
DcnLpd = dcnTotals[i].Lpd ?? string.Empty,
DcnLpdN = dcnTotals[i].LpdN ?? string.Empty,
DcnLpdES = dcnTotals[i].LpdES ?? string.Empty,
DcnMicroScr = dcnTotals[i].MicroScr ?? string.Empty,
DcnScr = dcnTotals[i].Scr ?? string.Empty,
DcnSlip = dcnTotals[i].Slip ?? string.Empty,
DcnAreaCount = dcnTotals[i].AreaNum ?? string.Empty,
DcnArea = dcnTotals[i].Area ?? string.Empty,
DcnHazeAvg = dcnTotals[i].HazeAvg ?? string.Empty,
DcnHazeMedian = dcnTotals[i].HazeMedian ?? string.Empty,
DcnHazeStdDev = dcnTotals[i].HazeStdDev ?? string.Empty,
DcnBin1 = dcnTotals[i].Bin1 ?? string.Empty,
DcnBin2 = dcnTotals[i].Bin2 ?? string.Empty,
DcnBin3 = dcnTotals[i].Bin3 ?? string.Empty,
DcnBin4 = dcnTotals[i].Bin4 ?? string.Empty,
DcnBin5 = dcnTotals[i].Bin5 ?? string.Empty,
DcnBin6 = dcnTotals[i].Bin6 ?? string.Empty,
DcnBin7 = dcnTotals[i].Bin7 ?? string.Empty,
DcnBin8 = dcnTotals[i].Bin8 ?? string.Empty,
// Dwn Info
DwnAll = dwnTotals[i].All ?? string.Empty,
DwnLpd = dwnTotals[i].Lpd ?? string.Empty,
DwnLpdN = dwnTotals[i].LpdN ?? string.Empty,
DwnLpdES = dwnTotals[i].LpdES ?? string.Empty,
DwnMicroScr = dwnTotals[i].MicroScr ?? string.Empty,
DwnScr = dwnTotals[i].Scr ?? string.Empty,
DwnSlip = dwnTotals[i].Slip ?? string.Empty,
DwnAreaCount = dwnTotals[i].AreaNum ?? string.Empty,
DwnArea = dwnTotals[i].Area ?? string.Empty,
DwnHazeAvg = dwnTotals[i].HazeAvg ?? string.Empty,
DwnHazeMedian = dwnTotals[i].HazeMedian ?? string.Empty,
DwnHazeStdDev = dwnTotals[i].HazeStdDev ?? string.Empty,
DwnBin1 = dwnTotals[i].Bin1 ?? string.Empty,
DwnBin2 = dwnTotals[i].Bin2 ?? string.Empty,
DwnBin3 = dwnTotals[i].Bin3 ?? string.Empty,
DwnBin4 = dwnTotals[i].Bin4 ?? string.Empty,
DwnBin5 = dwnTotals[i].Bin5 ?? string.Empty,
DwnBin6 = dwnTotals[i].Bin6 ?? string.Empty,
DwnBin7 = dwnTotals[i].Bin7 ?? string.Empty,
DwnBin8 = dwnTotals[i].Bin8 ?? string.Empty,
// Dnn Info
DnnAll = dnnTotals[i].All ?? string.Empty,
DnnLpd = dnnTotals[i].Lpd ?? string.Empty,
DnnLpdN = dnnTotals[i].LpdN ?? string.Empty,
DnnLpdES = dnnTotals[i].LpdES ?? string.Empty,
DnnMicroScr = dnnTotals[i].MicroScr ?? string.Empty,
DnnScr = dnnTotals[i].Scr ?? string.Empty,
DnnSlip = dnnTotals[i].Slip ?? string.Empty,
DnnAreaCount = dnnTotals[i].AreaNum ?? string.Empty,
DnnArea = dnnTotals[i].Area ?? string.Empty,
DnnHazeAvg = dnnTotals[i].HazeAvg ?? string.Empty,
DnnHazeMedian = dnnTotals[i].HazeMedian ?? string.Empty,
DnnHazeStdDev = dnnTotals[i].HazeStdDev ?? string.Empty,
DnnBin1 = dnnTotals[i].Bin1 ?? string.Empty,
DnnBin2 = dnnTotals[i].Bin2 ?? string.Empty,
DnnBin3 = dnnTotals[i].Bin3 ?? string.Empty,
DnnBin4 = dnnTotals[i].Bin4 ?? string.Empty,
DnnBin5 = dnnTotals[i].Bin5 ?? string.Empty,
DnnBin6 = dnnTotals[i].Bin6 ?? string.Empty,
DnnBin7 = dnnTotals[i].Bin7 ?? string.Empty,
DnnBin8 = dnnTotals[i].Bin8 ?? string.Empty,
HeaderUniqueID = UniqueID
};
result.UniqueID = string.Concat(result.HeaderUniqueID, "_", result.WaferID.PadLeft(2, '0'));
return result;
}
private void Parse(IFileRead fileRead, Logistics logistics, List<FileInfo> fileInfoCollection)
{
if (fileRead is null)
throw new ArgumentNullException(nameof(fileRead));
Detail dataFile;
foreach (string file in Directory.GetFiles(Path.GetDirectoryName(logistics.ReportFullPath), "WaferMap*.prn", SearchOption.TopDirectoryOnly))
fileInfoCollection.Add(new FileInfo(file));
List<WaferSummaryInfo> dcnTotals = new();
List<WaferSummaryInfo> dwnTotals = new();
List<WaferSummaryInfo> dnnTotals = new();
ParseHeader(logistics, dcnTotals, dwnTotals, dnnTotals);
_Log.Debug($"Number of wafers: {dcnTotals.Count}");
for (int i = 0; i < dcnTotals.Count; i++)
{
_Log.Debug($"****ParseData - Parsing wafer summary: {i}");
dataFile = ParseWaferSummary(i, dcnTotals, dwnTotals, dnnTotals);
_Details.Add(dataFile);
}
fileInfoCollection.Add(logistics.FileInfo);
}
#nullable enable
internal static List<Description> GetDescriptions(JsonElement[] jsonElements)
{
List<Description> results = new();
Description? description;
JsonSerializerOptions jsonSerializerOptions = new() { NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString };
foreach (JsonElement jsonElement in jsonElements)
{
if (jsonElement.ValueKind != JsonValueKind.Object)
throw new Exception();
description = JsonSerializer.Deserialize<Description>(jsonElement.ToString(), jsonSerializerOptions);
description = JsonSerializer.Deserialize(jsonElement.ToString(), DescriptionSourceGenerationContext.Default.Description);
if (description is null)
continue;
results.Add(description);

View File

@ -90,6 +90,18 @@ internal class Run
File.WriteAllText($"{logistics.ReportFullPath}.csv", string.Join(Environment.NewLine, lines));
}
private static void AddPrintFiles(Logistics logistics, List<FileInfo> fileInfoCollection)
{
string sourceDirectory = Path.GetDirectoryName(logistics.ReportFullPath) ?? throw new Exception();
string[] files;
files = Directory.GetFiles(sourceDirectory, "*.xps", SearchOption.TopDirectoryOnly);
foreach (string file in files)
fileInfoCollection.Add(new FileInfo(file));
files = Directory.GetFiles(sourceDirectory, "WaferMap*.prn", SearchOption.TopDirectoryOnly);
foreach (string file in files)
fileInfoCollection.Add(new FileInfo(file));
}
internal static Run? Get(Logistics logistics, List<FileInfo> fileInfoCollection)
{
Run? result;
@ -111,13 +123,13 @@ internal class Run
else
{
result = new(header, summary, wafers);
AddPrintFiles(logistics, fileInfoCollection);
WriteJson(logistics, fileInfoCollection, result);
WriteCommaSeparatedValues(logistics, result);
}
}
return result;
}
}
[JsonSourceGenerationOptions(WriteIndented = true)]

View File

@ -765,27 +765,43 @@ public class Summary
waferSummaryInfo.WaferID = segments[1];
waferSummaryInfo.Grade = segments[2];
waferSummaryInfo.SrcDest = segments[3];
if (segments.Length > 4)
if (segments.Length > 8)
{
waferSummaryInfo.Lpd = segments[5];
waferSummaryInfo.LpdN = segments[6];
waferSummaryInfo.LpdES = segments[7];
waferSummaryInfo.MicroScr = segments[8];
waferSummaryInfo.Scr = segments[9];
waferSummaryInfo.Slip = segments[10];
waferSummaryInfo.AreaNum = segments[11];
waferSummaryInfo.Area = segments[12];
waferSummaryInfo.HazeAvg = segments[13];
waferSummaryInfo.HazeMedian = segments[14];
waferSummaryInfo.HazeStdDev = segments[15];
waferSummaryInfo.Bin1 = segments[16];
waferSummaryInfo.Bin2 = segments[17];
waferSummaryInfo.Bin3 = segments[18];
waferSummaryInfo.Bin4 = segments[19];
waferSummaryInfo.Bin5 = segments[20];
waferSummaryInfo.Bin6 = segments[21];
waferSummaryInfo.Bin7 = segments[22];
waferSummaryInfo.Bin8 = segments[23];
if (text.Contains(constant.ShortWaferSummary))
{
waferSummaryInfo.Lpd = segments[5];
waferSummaryInfo.LpdN = segments[6];
waferSummaryInfo.LpdES = segments[7];
waferSummaryInfo.MicroScr = segments[8];
waferSummaryInfo.Scr = segments[9];
waferSummaryInfo.Slip = segments[10];
waferSummaryInfo.AreaNum = segments[11];
waferSummaryInfo.Area = segments[12];
}
else if (text.Contains(constant.LongWaferSummary))
{
waferSummaryInfo.Lpd = segments[5];
waferSummaryInfo.LpdN = segments[6];
waferSummaryInfo.LpdES = segments[7];
waferSummaryInfo.MicroScr = segments[8];
waferSummaryInfo.Scr = segments[9];
waferSummaryInfo.Slip = segments[10];
waferSummaryInfo.AreaNum = segments[11];
waferSummaryInfo.Area = segments[12];
waferSummaryInfo.HazeAvg = segments[13];
waferSummaryInfo.HazeMedian = segments[14];
waferSummaryInfo.HazeStdDev = segments[15];
waferSummaryInfo.Bin1 = segments[16];
waferSummaryInfo.Bin2 = segments[17];
waferSummaryInfo.Bin3 = segments[18];
waferSummaryInfo.Bin4 = segments[19];
waferSummaryInfo.Bin5 = segments[20];
waferSummaryInfo.Bin6 = segments[21];
waferSummaryInfo.Bin7 = segments[22];
waferSummaryInfo.Bin8 = segments[23];
}
else
throw new Exception(constant.FormatExceptionMessage);
}
if (waferSummaryInfo.WaferID == "-1")
{
@ -858,246 +874,495 @@ public class Summary
Header.ScanPast(text, i, constant.StdDev);
dnnTotalsStandardDevSegments = Header.GetToEOL(text, i).Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
}
result = new(dcnAllMin: dncTotalsMinSegments[0],
dcnLpdMin: dncTotalsMinSegments[1],
dcnLpdNMin: dncTotalsMinSegments[2],
dcnLpdESMin: dncTotalsMinSegments[3],
dcnMicroScrMin: dncTotalsMinSegments[4],
dcnScrMin: dncTotalsMinSegments[5],
dcnSlipMin: dncTotalsMinSegments[6],
dcnAreaCountMin: dncTotalsMinSegments[7],
dcnAreaMin: dncTotalsMinSegments[8],
dcnHazeAvgMin: dncTotalsMinSegments[9],
dcnHazeMedianMin: dncTotalsMinSegments[10],
dcnHazeStdDevMin: dncTotalsMinSegments[11],
dcnBin1Min: dncTotalsMinSegments[12],
dcnBin2Min: dncTotalsMinSegments[13],
dcnBin3Min: dncTotalsMinSegments[14],
dcnBin4Min: dncTotalsMinSegments[15],
dcnBin5Min: dncTotalsMinSegments[16],
dcnBin6Min: dncTotalsMinSegments[17],
dcnBin7Min: dncTotalsMinSegments[18],
dcnBin8Min: dncTotalsMinSegments[19],
dcnAllMax: dncTotalsMaxSegments[0],
dcnLpdMax: dncTotalsMaxSegments[1],
dcnLpdNMax: dncTotalsMaxSegments[2],
dcnLpdESMax: dncTotalsMaxSegments[3],
dcnMicroScrMax: dncTotalsMaxSegments[4],
dcnScrMax: dncTotalsMaxSegments[5],
dcnSlipMax: dncTotalsMaxSegments[6],
dcnAreaCountMax: dncTotalsMaxSegments[7],
dcnAreaMax: dncTotalsMaxSegments[8],
dcnHazeAvgMax: dncTotalsMaxSegments[9],
dcnHazeMedianMax: dncTotalsMaxSegments[10],
dcnHazeStdDevMax: dncTotalsMaxSegments[11],
dcnBin1Max: dncTotalsMaxSegments[12],
dcnBin2Max: dncTotalsMaxSegments[13],
dcnBin3Max: dncTotalsMaxSegments[14],
dcnBin4Max: dncTotalsMaxSegments[15],
dcnBin5Max: dncTotalsMaxSegments[16],
dcnBin6Max: dncTotalsMaxSegments[17],
dcnBin7Max: dncTotalsMaxSegments[18],
dcnBin8Max: dncTotalsMaxSegments[19],
dcnAllMean: dncTotalsMeanSegments[0],
dcnLpdMean: dncTotalsMeanSegments[1],
dcnLpdNMean: dncTotalsMeanSegments[2],
dcnLpdESMean: dncTotalsMeanSegments[3],
dcnMicroScrMean: dncTotalsMeanSegments[4],
dcnScrMean: dncTotalsMeanSegments[5],
dcnSlipMean: dncTotalsMeanSegments[6],
dcnAreaCountMean: dncTotalsMeanSegments[7],
dcnAreaMean: dncTotalsMeanSegments[8],
dcnHazeAvgMean: dncTotalsMeanSegments[9],
dcnHazeMedianMean: dncTotalsMeanSegments[10],
dcnHazeStdDevMean: dncTotalsMeanSegments[11],
dcnBin1Mean: dncTotalsMeanSegments[12],
dcnBin2Mean: dncTotalsMeanSegments[13],
dcnBin3Mean: dncTotalsMeanSegments[14],
dcnBin4Mean: dncTotalsMeanSegments[15],
dcnBin5Mean: dncTotalsMeanSegments[16],
dcnBin6Mean: dncTotalsMeanSegments[17],
dcnBin7Mean: dncTotalsMeanSegments[18],
dcnBin8Mean: dncTotalsMeanSegments[19],
dcnAllStdDev: dncTotalsStandardDevSegments[0],
dcnLpdStdDev: dncTotalsStandardDevSegments[1],
dcnLpdNStdDev: dncTotalsStandardDevSegments[2],
dcnLpdESStdDev: dncTotalsStandardDevSegments[3],
dcnMicroScrStdDev: dncTotalsStandardDevSegments[4],
dcnScrStdDev: dncTotalsStandardDevSegments[5],
dcnSlipStdDev: dncTotalsStandardDevSegments[6],
dcnAreaCountStdDev: dncTotalsStandardDevSegments[7],
dcnAreaStdDev: dncTotalsStandardDevSegments[8],
dcnHazeAvgStdDev: dncTotalsStandardDevSegments[9],
dcnHazeMedianStdDev: dncTotalsStandardDevSegments[10],
dcnHazeStdDevStdDev: dncTotalsStandardDevSegments[11],
dcnBin1StdDev: dncTotalsStandardDevSegments[12],
dcnBin2StdDev: dncTotalsStandardDevSegments[13],
dcnBin3StdDev: dncTotalsStandardDevSegments[14],
dcnBin4StdDev: dncTotalsStandardDevSegments[15],
dcnBin5StdDev: dncTotalsStandardDevSegments[16],
dcnBin6StdDev: dncTotalsStandardDevSegments[17],
dcnBin7StdDev: dncTotalsStandardDevSegments[18],
dcnBin8StdDev: dncTotalsStandardDevSegments[19],
dwnAllMin: dwnTotalsMinSegments[0],
dwnLpdMin: dwnTotalsMinSegments[1],
dwnLpdNMin: dwnTotalsMinSegments[2],
dwnLpdESMin: dwnTotalsMinSegments[3],
dwnMicroScrMin: dwnTotalsMinSegments[4],
dwnScrMin: dwnTotalsMinSegments[5],
dwnSlipMin: dwnTotalsMinSegments[6],
dwnAreaCountMin: dwnTotalsMinSegments[7],
dwnAreaMin: dwnTotalsMinSegments[8],
dwnHazeAvgMin: dwnTotalsMinSegments[9],
dwnHazeMedianMin: dwnTotalsMinSegments[10],
dwnHazeStdDevMin: dwnTotalsMinSegments[11],
dwnBin1Min: dwnTotalsMinSegments[12],
dwnBin2Min: dwnTotalsMinSegments[13],
dwnBin3Min: dwnTotalsMinSegments[14],
dwnBin4Min: dwnTotalsMinSegments[15],
dwnBin5Min: dwnTotalsMinSegments[16],
dwnBin6Min: dwnTotalsMinSegments[17],
dwnBin7Min: dwnTotalsMinSegments[18],
dwnBin8Min: dwnTotalsMinSegments[19],
dwnAllMax: dwnTotalsMaxSegments[0],
dwnLpdMax: dwnTotalsMaxSegments[1],
dwnLpdNMax: dwnTotalsMaxSegments[2],
dwnLpdESMax: dwnTotalsMaxSegments[3],
dwnMicroScrMax: dwnTotalsMaxSegments[4],
dwnScrMax: dwnTotalsMaxSegments[5],
dwnSlipMax: dwnTotalsMaxSegments[6],
dwnAreaCountMax: dwnTotalsMaxSegments[7],
dwnAreaMax: dwnTotalsMaxSegments[8],
dwnHazeAvgMax: dwnTotalsMaxSegments[9],
dwnHazeMedianMax: dwnTotalsMaxSegments[10],
dwnHazeStdDevMax: dwnTotalsMaxSegments[11],
dwnBin1Max: dwnTotalsMaxSegments[12],
dwnBin2Max: dwnTotalsMaxSegments[13],
dwnBin3Max: dwnTotalsMaxSegments[14],
dwnBin4Max: dwnTotalsMaxSegments[15],
dwnBin5Max: dwnTotalsMaxSegments[16],
dwnBin6Max: dwnTotalsMaxSegments[17],
dwnBin7Max: dwnTotalsMaxSegments[18],
dwnBin8Max: dwnTotalsMaxSegments[19],
dwnAllMean: dwnTotalsMeanSegments[0],
dwnLpdMean: dwnTotalsMeanSegments[1],
dwnLpdNMean: dwnTotalsMeanSegments[2],
dwnLpdESMean: dwnTotalsMeanSegments[3],
dwnMicroScrMean: dwnTotalsMeanSegments[4],
dwnScrMean: dwnTotalsMeanSegments[5],
dwnSlipMean: dwnTotalsMeanSegments[6],
dwnAreaCountMean: dwnTotalsMeanSegments[7],
dwnAreaMean: dwnTotalsMeanSegments[8],
dwnHazeAvgMean: dwnTotalsMeanSegments[9],
dwnHazeMedianMean: dwnTotalsMeanSegments[10],
dwnHazeStdDevMean: dwnTotalsMeanSegments[11],
dwnBin1Mean: dwnTotalsMeanSegments[12],
dwnBin2Mean: dwnTotalsMeanSegments[13],
dwnBin3Mean: dwnTotalsMeanSegments[14],
dwnBin4Mean: dwnTotalsMeanSegments[15],
dwnBin5Mean: dwnTotalsMeanSegments[16],
dwnBin6Mean: dwnTotalsMeanSegments[17],
dwnBin7Mean: dwnTotalsMeanSegments[18],
dwnBin8Mean: dwnTotalsMeanSegments[19],
dwnAllStdDev: dwnTotalsStandardDevSegments[0],
dwnLpdStdDev: dwnTotalsStandardDevSegments[1],
dwnLpdNStdDev: dwnTotalsStandardDevSegments[2],
dwnLpdESStdDev: dwnTotalsStandardDevSegments[3],
dwnMicroScrStdDev: dwnTotalsStandardDevSegments[4],
dwnScrStdDev: dwnTotalsStandardDevSegments[5],
dwnSlipStdDev: dwnTotalsStandardDevSegments[6],
dwnAreaCountStdDev: dwnTotalsStandardDevSegments[7],
dwnAreaStdDev: dwnTotalsStandardDevSegments[8],
dwnHazeAvgStdDev: dwnTotalsStandardDevSegments[9],
dwnHazeMedianStdDev: dwnTotalsStandardDevSegments[10],
dwnHazeStdDevStdDev: dwnTotalsStandardDevSegments[11],
dwnBin1StdDev: dwnTotalsStandardDevSegments[12],
dwnBin2StdDev: dwnTotalsStandardDevSegments[13],
dwnBin3StdDev: dwnTotalsStandardDevSegments[14],
dwnBin4StdDev: dwnTotalsStandardDevSegments[15],
dwnBin5StdDev: dwnTotalsStandardDevSegments[16],
dwnBin6StdDev: dwnTotalsStandardDevSegments[17],
dwnBin7StdDev: dwnTotalsStandardDevSegments[18],
dwnBin8StdDev: dwnTotalsStandardDevSegments[19],
dnnAllMin: dnnTotalsMinSegments[0],
dnnLpdMin: dnnTotalsMinSegments[1],
dnnLpdNMin: dnnTotalsMinSegments[2],
dnnLpdESMin: dnnTotalsMinSegments[3],
dnnMicroScrMin: dnnTotalsMinSegments[4],
dnnScrMin: dnnTotalsMinSegments[5],
dnnSlipMin: dnnTotalsMinSegments[6],
dnnAreaCountMin: dnnTotalsMinSegments[7],
dnnAreaMin: dnnTotalsMinSegments[8],
dnnHazeAvgMin: dnnTotalsMinSegments[9],
dnnHazeMedianMin: dnnTotalsMinSegments[10],
dnnHazeStdDevMin: dnnTotalsMinSegments[11],
dnnBin1Min: dnnTotalsMinSegments[12],
dnnBin2Min: dnnTotalsMinSegments[13],
dnnBin3Min: dnnTotalsMinSegments[14],
dnnBin4Min: dnnTotalsMinSegments[15],
dnnBin5Min: dnnTotalsMinSegments[16],
dnnBin6Min: dnnTotalsMinSegments[17],
dnnBin7Min: dnnTotalsMinSegments[18],
dnnBin8Min: dnnTotalsMinSegments[19],
dnnAllMax: dnnTotalsMaxSegments[0],
dnnLpdMax: dnnTotalsMaxSegments[1],
dnnLpdNMax: dnnTotalsMaxSegments[2],
dnnLpdESMax: dnnTotalsMaxSegments[3],
dnnMicroScrMax: dnnTotalsMaxSegments[4],
dnnScrMax: dnnTotalsMaxSegments[5],
dnnSlipMax: dnnTotalsMaxSegments[6],
dnnAreaCountMax: dnnTotalsMaxSegments[7],
dnnAreaMax: dnnTotalsMaxSegments[8],
dnnHazeAvgMax: dnnTotalsMaxSegments[9],
dnnHazeMedianMax: dnnTotalsMaxSegments[10],
dnnHazeStdDevMax: dnnTotalsMaxSegments[11],
dnnBin1Max: dnnTotalsMaxSegments[12],
dnnBin2Max: dnnTotalsMaxSegments[13],
dnnBin3Max: dnnTotalsMaxSegments[14],
dnnBin4Max: dnnTotalsMaxSegments[15],
dnnBin5Max: dnnTotalsMaxSegments[16],
dnnBin6Max: dnnTotalsMaxSegments[17],
dnnBin7Max: dnnTotalsMaxSegments[18],
dnnBin8Max: dnnTotalsMaxSegments[19],
dnnAllMean: dnnTotalsMeanSegments[0],
dnnLpdMean: dnnTotalsMeanSegments[1],
dnnLpdNMean: dnnTotalsMeanSegments[2],
dnnLpdESMean: dnnTotalsMeanSegments[3],
dnnMicroScrMean: dnnTotalsMeanSegments[4],
dnnScrMean: dnnTotalsMeanSegments[5],
dnnSlipMean: dnnTotalsMeanSegments[6],
dnnAreaCountMean: dnnTotalsMeanSegments[7],
dnnAreaMean: dnnTotalsMeanSegments[8],
dnnHazeAvgMean: dnnTotalsMeanSegments[9],
dnnHazeMedianMean: dnnTotalsMeanSegments[10],
dnnHazeStdDevMean: dnnTotalsMeanSegments[11],
dnnBin1Mean: dnnTotalsMeanSegments[12],
dnnBin2Mean: dnnTotalsMeanSegments[13],
dnnBin3Mean: dnnTotalsMeanSegments[14],
dnnBin4Mean: dnnTotalsMeanSegments[15],
dnnBin5Mean: dnnTotalsMeanSegments[16],
dnnBin6Mean: dnnTotalsMeanSegments[17],
dnnBin7Mean: dnnTotalsMeanSegments[18],
dnnBin8Mean: dnnTotalsMeanSegments[19],
dnnAllStdDev: dnnTotalsStandardDevSegments[0],
dnnLpdStdDev: dnnTotalsStandardDevSegments[1],
dnnLpdNStdDev: dnnTotalsStandardDevSegments[2],
dnnLpdESStdDev: dnnTotalsStandardDevSegments[3],
dnnMicroScrStdDev: dnnTotalsStandardDevSegments[4],
dnnScrStdDev: dnnTotalsStandardDevSegments[5],
dnnSlipStdDev: dnnTotalsStandardDevSegments[6],
dnnAreaCountStdDev: dnnTotalsStandardDevSegments[7],
dnnAreaStdDev: dnnTotalsStandardDevSegments[8],
dnnHazeAvgStdDev: dnnTotalsStandardDevSegments[9],
dnnHazeMedianStdDev: dnnTotalsStandardDevSegments[10],
dnnHazeStdDevStdDev: dnnTotalsStandardDevSegments[11],
dnnBin1StdDev: dnnTotalsStandardDevSegments[12],
dnnBin2StdDev: dnnTotalsStandardDevSegments[13],
dnnBin3StdDev: dnnTotalsStandardDevSegments[14],
dnnBin4StdDev: dnnTotalsStandardDevSegments[15],
dnnBin5StdDev: dnnTotalsStandardDevSegments[16],
dnnBin6StdDev: dnnTotalsStandardDevSegments[17],
dnnBin7StdDev: dnnTotalsStandardDevSegments[18],
dnnBin8StdDev: dnnTotalsStandardDevSegments[19]);
if (text.Contains(constant.ShortWaferSummary))
{
result = new(dcnAllMin: dncTotalsMinSegments[0],
dcnLpdMin: dncTotalsMinSegments[1],
dcnLpdNMin: dncTotalsMinSegments[2],
dcnLpdESMin: dncTotalsMinSegments[3],
dcnMicroScrMin: dncTotalsMinSegments[4],
dcnScrMin: dncTotalsMinSegments[5],
dcnSlipMin: dncTotalsMinSegments[6],
dcnAreaCountMin: dncTotalsMinSegments[7],
dcnAreaMin: dncTotalsMinSegments[8],
dcnHazeAvgMin: string.Empty,
dcnHazeMedianMin: string.Empty,
dcnHazeStdDevMin: string.Empty,
dcnBin1Min: string.Empty,
dcnBin2Min: string.Empty,
dcnBin3Min: string.Empty,
dcnBin4Min: string.Empty,
dcnBin5Min: string.Empty,
dcnBin6Min: string.Empty,
dcnBin7Min: string.Empty,
dcnBin8Min: string.Empty,
dcnAllMax: dncTotalsMaxSegments[0],
dcnLpdMax: dncTotalsMaxSegments[1],
dcnLpdNMax: dncTotalsMaxSegments[2],
dcnLpdESMax: dncTotalsMaxSegments[3],
dcnMicroScrMax: dncTotalsMaxSegments[4],
dcnScrMax: dncTotalsMaxSegments[5],
dcnSlipMax: dncTotalsMaxSegments[6],
dcnAreaCountMax: dncTotalsMaxSegments[7],
dcnAreaMax: dncTotalsMaxSegments[8],
dcnHazeAvgMax: string.Empty,
dcnHazeMedianMax: string.Empty,
dcnHazeStdDevMax: string.Empty,
dcnBin1Max: string.Empty,
dcnBin2Max: string.Empty,
dcnBin3Max: string.Empty,
dcnBin4Max: string.Empty,
dcnBin5Max: string.Empty,
dcnBin6Max: string.Empty,
dcnBin7Max: string.Empty,
dcnBin8Max: string.Empty,
dcnAllMean: dncTotalsMeanSegments[0],
dcnLpdMean: dncTotalsMeanSegments[1],
dcnLpdNMean: dncTotalsMeanSegments[2],
dcnLpdESMean: dncTotalsMeanSegments[3],
dcnMicroScrMean: dncTotalsMeanSegments[4],
dcnScrMean: dncTotalsMeanSegments[5],
dcnSlipMean: dncTotalsMeanSegments[6],
dcnAreaCountMean: dncTotalsMeanSegments[7],
dcnAreaMean: dncTotalsMeanSegments[8],
dcnHazeAvgMean: string.Empty,
dcnHazeMedianMean: string.Empty,
dcnHazeStdDevMean: string.Empty,
dcnBin1Mean: string.Empty,
dcnBin2Mean: string.Empty,
dcnBin3Mean: string.Empty,
dcnBin4Mean: string.Empty,
dcnBin5Mean: string.Empty,
dcnBin6Mean: string.Empty,
dcnBin7Mean: string.Empty,
dcnBin8Mean: string.Empty,
dcnAllStdDev: dncTotalsStandardDevSegments[0],
dcnLpdStdDev: dncTotalsStandardDevSegments[1],
dcnLpdNStdDev: dncTotalsStandardDevSegments[2],
dcnLpdESStdDev: dncTotalsStandardDevSegments[3],
dcnMicroScrStdDev: dncTotalsStandardDevSegments[4],
dcnScrStdDev: dncTotalsStandardDevSegments[5],
dcnSlipStdDev: dncTotalsStandardDevSegments[6],
dcnAreaCountStdDev: dncTotalsStandardDevSegments[7],
dcnAreaStdDev: dncTotalsStandardDevSegments[8],
dcnHazeAvgStdDev: string.Empty,
dcnHazeMedianStdDev: string.Empty,
dcnHazeStdDevStdDev: string.Empty,
dcnBin1StdDev: string.Empty,
dcnBin2StdDev: string.Empty,
dcnBin3StdDev: string.Empty,
dcnBin4StdDev: string.Empty,
dcnBin5StdDev: string.Empty,
dcnBin6StdDev: string.Empty,
dcnBin7StdDev: string.Empty,
dcnBin8StdDev: string.Empty,
dwnAllMin: dwnTotalsMinSegments[0],
dwnLpdMin: dwnTotalsMinSegments[1],
dwnLpdNMin: dwnTotalsMinSegments[2],
dwnLpdESMin: dwnTotalsMinSegments[3],
dwnMicroScrMin: dwnTotalsMinSegments[4],
dwnScrMin: dwnTotalsMinSegments[5],
dwnSlipMin: dwnTotalsMinSegments[6],
dwnAreaCountMin: dwnTotalsMinSegments[7],
dwnAreaMin: dwnTotalsMinSegments[8],
dwnHazeAvgMin: string.Empty,
dwnHazeMedianMin: string.Empty,
dwnHazeStdDevMin: string.Empty,
dwnBin1Min: string.Empty,
dwnBin2Min: string.Empty,
dwnBin3Min: string.Empty,
dwnBin4Min: string.Empty,
dwnBin5Min: string.Empty,
dwnBin6Min: string.Empty,
dwnBin7Min: string.Empty,
dwnBin8Min: string.Empty,
dwnAllMax: dwnTotalsMaxSegments[0],
dwnLpdMax: dwnTotalsMaxSegments[1],
dwnLpdNMax: dwnTotalsMaxSegments[2],
dwnLpdESMax: dwnTotalsMaxSegments[3],
dwnMicroScrMax: dwnTotalsMaxSegments[4],
dwnScrMax: dwnTotalsMaxSegments[5],
dwnSlipMax: dwnTotalsMaxSegments[6],
dwnAreaCountMax: dwnTotalsMaxSegments[7],
dwnAreaMax: dwnTotalsMaxSegments[8],
dwnHazeAvgMax: string.Empty,
dwnHazeMedianMax: string.Empty,
dwnHazeStdDevMax: string.Empty,
dwnBin1Max: string.Empty,
dwnBin2Max: string.Empty,
dwnBin3Max: string.Empty,
dwnBin4Max: string.Empty,
dwnBin5Max: string.Empty,
dwnBin6Max: string.Empty,
dwnBin7Max: string.Empty,
dwnBin8Max: string.Empty,
dwnAllMean: dwnTotalsMeanSegments[0],
dwnLpdMean: dwnTotalsMeanSegments[1],
dwnLpdNMean: dwnTotalsMeanSegments[2],
dwnLpdESMean: dwnTotalsMeanSegments[3],
dwnMicroScrMean: dwnTotalsMeanSegments[4],
dwnScrMean: dwnTotalsMeanSegments[5],
dwnSlipMean: dwnTotalsMeanSegments[6],
dwnAreaCountMean: dwnTotalsMeanSegments[7],
dwnAreaMean: dwnTotalsMeanSegments[8],
dwnHazeAvgMean: string.Empty,
dwnHazeMedianMean: string.Empty,
dwnHazeStdDevMean: string.Empty,
dwnBin1Mean: string.Empty,
dwnBin2Mean: string.Empty,
dwnBin3Mean: string.Empty,
dwnBin4Mean: string.Empty,
dwnBin5Mean: string.Empty,
dwnBin6Mean: string.Empty,
dwnBin7Mean: string.Empty,
dwnBin8Mean: string.Empty,
dwnAllStdDev: dwnTotalsStandardDevSegments[0],
dwnLpdStdDev: dwnTotalsStandardDevSegments[1],
dwnLpdNStdDev: dwnTotalsStandardDevSegments[2],
dwnLpdESStdDev: dwnTotalsStandardDevSegments[3],
dwnMicroScrStdDev: dwnTotalsStandardDevSegments[4],
dwnScrStdDev: dwnTotalsStandardDevSegments[5],
dwnSlipStdDev: dwnTotalsStandardDevSegments[6],
dwnAreaCountStdDev: dwnTotalsStandardDevSegments[7],
dwnAreaStdDev: dwnTotalsStandardDevSegments[8],
dwnHazeAvgStdDev: string.Empty,
dwnHazeMedianStdDev: string.Empty,
dwnHazeStdDevStdDev: string.Empty,
dwnBin1StdDev: string.Empty,
dwnBin2StdDev: string.Empty,
dwnBin3StdDev: string.Empty,
dwnBin4StdDev: string.Empty,
dwnBin5StdDev: string.Empty,
dwnBin6StdDev: string.Empty,
dwnBin7StdDev: string.Empty,
dwnBin8StdDev: string.Empty,
dnnAllMin: string.Empty,
dnnLpdMin: string.Empty,
dnnLpdNMin: string.Empty,
dnnLpdESMin: string.Empty,
dnnMicroScrMin: string.Empty,
dnnScrMin: string.Empty,
dnnSlipMin: string.Empty,
dnnAreaCountMin: string.Empty,
dnnAreaMin: string.Empty,
dnnHazeAvgMin: string.Empty,
dnnHazeMedianMin: string.Empty,
dnnHazeStdDevMin: string.Empty,
dnnBin1Min: string.Empty,
dnnBin2Min: string.Empty,
dnnBin3Min: string.Empty,
dnnBin4Min: string.Empty,
dnnBin5Min: string.Empty,
dnnBin6Min: string.Empty,
dnnBin7Min: string.Empty,
dnnBin8Min: string.Empty,
dnnAllMax: string.Empty,
dnnLpdMax: string.Empty,
dnnLpdNMax: string.Empty,
dnnLpdESMax: string.Empty,
dnnMicroScrMax: string.Empty,
dnnScrMax: string.Empty,
dnnSlipMax: string.Empty,
dnnAreaCountMax: string.Empty,
dnnAreaMax: string.Empty,
dnnHazeAvgMax: string.Empty,
dnnHazeMedianMax: string.Empty,
dnnHazeStdDevMax: string.Empty,
dnnBin1Max: string.Empty,
dnnBin2Max: string.Empty,
dnnBin3Max: string.Empty,
dnnBin4Max: string.Empty,
dnnBin5Max: string.Empty,
dnnBin6Max: string.Empty,
dnnBin7Max: string.Empty,
dnnBin8Max: string.Empty,
dnnAllMean: string.Empty,
dnnLpdMean: string.Empty,
dnnLpdNMean: string.Empty,
dnnLpdESMean: string.Empty,
dnnMicroScrMean: string.Empty,
dnnScrMean: string.Empty,
dnnSlipMean: string.Empty,
dnnAreaCountMean: string.Empty,
dnnAreaMean: string.Empty,
dnnHazeAvgMean: string.Empty,
dnnHazeMedianMean: string.Empty,
dnnHazeStdDevMean: string.Empty,
dnnBin1Mean: string.Empty,
dnnBin2Mean: string.Empty,
dnnBin3Mean: string.Empty,
dnnBin4Mean: string.Empty,
dnnBin5Mean: string.Empty,
dnnBin6Mean: string.Empty,
dnnBin7Mean: string.Empty,
dnnBin8Mean: string.Empty,
dnnAllStdDev: string.Empty,
dnnLpdStdDev: string.Empty,
dnnLpdNStdDev: string.Empty,
dnnLpdESStdDev: string.Empty,
dnnMicroScrStdDev: string.Empty,
dnnScrStdDev: string.Empty,
dnnSlipStdDev: string.Empty,
dnnAreaCountStdDev: string.Empty,
dnnAreaStdDev: string.Empty,
dnnHazeAvgStdDev: string.Empty,
dnnHazeMedianStdDev: string.Empty,
dnnHazeStdDevStdDev: string.Empty,
dnnBin1StdDev: string.Empty,
dnnBin2StdDev: string.Empty,
dnnBin3StdDev: string.Empty,
dnnBin4StdDev: string.Empty,
dnnBin5StdDev: string.Empty,
dnnBin6StdDev: string.Empty,
dnnBin7StdDev: string.Empty,
dnnBin8StdDev: string.Empty
);
}
else if (text.Contains(constant.LongWaferSummary))
{
result = new(dcnAllMin: dncTotalsMinSegments[0],
dcnLpdMin: dncTotalsMinSegments[1],
dcnLpdNMin: dncTotalsMinSegments[2],
dcnLpdESMin: dncTotalsMinSegments[3],
dcnMicroScrMin: dncTotalsMinSegments[4],
dcnScrMin: dncTotalsMinSegments[5],
dcnSlipMin: dncTotalsMinSegments[6],
dcnAreaCountMin: dncTotalsMinSegments[7],
dcnAreaMin: dncTotalsMinSegments[8],
dcnHazeAvgMin: dncTotalsMinSegments[9],
dcnHazeMedianMin: dncTotalsMinSegments[10],
dcnHazeStdDevMin: dncTotalsMinSegments[11],
dcnBin1Min: dncTotalsMinSegments[12],
dcnBin2Min: dncTotalsMinSegments[13],
dcnBin3Min: dncTotalsMinSegments[14],
dcnBin4Min: dncTotalsMinSegments[15],
dcnBin5Min: dncTotalsMinSegments[16],
dcnBin6Min: dncTotalsMinSegments[17],
dcnBin7Min: dncTotalsMinSegments[18],
dcnBin8Min: dncTotalsMinSegments[19],
dcnAllMax: dncTotalsMaxSegments[0],
dcnLpdMax: dncTotalsMaxSegments[1],
dcnLpdNMax: dncTotalsMaxSegments[2],
dcnLpdESMax: dncTotalsMaxSegments[3],
dcnMicroScrMax: dncTotalsMaxSegments[4],
dcnScrMax: dncTotalsMaxSegments[5],
dcnSlipMax: dncTotalsMaxSegments[6],
dcnAreaCountMax: dncTotalsMaxSegments[7],
dcnAreaMax: dncTotalsMaxSegments[8],
dcnHazeAvgMax: dncTotalsMaxSegments[9],
dcnHazeMedianMax: dncTotalsMaxSegments[10],
dcnHazeStdDevMax: dncTotalsMaxSegments[11],
dcnBin1Max: dncTotalsMaxSegments[12],
dcnBin2Max: dncTotalsMaxSegments[13],
dcnBin3Max: dncTotalsMaxSegments[14],
dcnBin4Max: dncTotalsMaxSegments[15],
dcnBin5Max: dncTotalsMaxSegments[16],
dcnBin6Max: dncTotalsMaxSegments[17],
dcnBin7Max: dncTotalsMaxSegments[18],
dcnBin8Max: dncTotalsMaxSegments[19],
dcnAllMean: dncTotalsMeanSegments[0],
dcnLpdMean: dncTotalsMeanSegments[1],
dcnLpdNMean: dncTotalsMeanSegments[2],
dcnLpdESMean: dncTotalsMeanSegments[3],
dcnMicroScrMean: dncTotalsMeanSegments[4],
dcnScrMean: dncTotalsMeanSegments[5],
dcnSlipMean: dncTotalsMeanSegments[6],
dcnAreaCountMean: dncTotalsMeanSegments[7],
dcnAreaMean: dncTotalsMeanSegments[8],
dcnHazeAvgMean: dncTotalsMeanSegments[9],
dcnHazeMedianMean: dncTotalsMeanSegments[10],
dcnHazeStdDevMean: dncTotalsMeanSegments[11],
dcnBin1Mean: dncTotalsMeanSegments[12],
dcnBin2Mean: dncTotalsMeanSegments[13],
dcnBin3Mean: dncTotalsMeanSegments[14],
dcnBin4Mean: dncTotalsMeanSegments[15],
dcnBin5Mean: dncTotalsMeanSegments[16],
dcnBin6Mean: dncTotalsMeanSegments[17],
dcnBin7Mean: dncTotalsMeanSegments[18],
dcnBin8Mean: dncTotalsMeanSegments[19],
dcnAllStdDev: dncTotalsStandardDevSegments[0],
dcnLpdStdDev: dncTotalsStandardDevSegments[1],
dcnLpdNStdDev: dncTotalsStandardDevSegments[2],
dcnLpdESStdDev: dncTotalsStandardDevSegments[3],
dcnMicroScrStdDev: dncTotalsStandardDevSegments[4],
dcnScrStdDev: dncTotalsStandardDevSegments[5],
dcnSlipStdDev: dncTotalsStandardDevSegments[6],
dcnAreaCountStdDev: dncTotalsStandardDevSegments[7],
dcnAreaStdDev: dncTotalsStandardDevSegments[8],
dcnHazeAvgStdDev: dncTotalsStandardDevSegments[9],
dcnHazeMedianStdDev: dncTotalsStandardDevSegments[10],
dcnHazeStdDevStdDev: dncTotalsStandardDevSegments[11],
dcnBin1StdDev: dncTotalsStandardDevSegments[12],
dcnBin2StdDev: dncTotalsStandardDevSegments[13],
dcnBin3StdDev: dncTotalsStandardDevSegments[14],
dcnBin4StdDev: dncTotalsStandardDevSegments[15],
dcnBin5StdDev: dncTotalsStandardDevSegments[16],
dcnBin6StdDev: dncTotalsStandardDevSegments[17],
dcnBin7StdDev: dncTotalsStandardDevSegments[18],
dcnBin8StdDev: dncTotalsStandardDevSegments[19],
dwnAllMin: dwnTotalsMinSegments[0],
dwnLpdMin: dwnTotalsMinSegments[1],
dwnLpdNMin: dwnTotalsMinSegments[2],
dwnLpdESMin: dwnTotalsMinSegments[3],
dwnMicroScrMin: dwnTotalsMinSegments[4],
dwnScrMin: dwnTotalsMinSegments[5],
dwnSlipMin: dwnTotalsMinSegments[6],
dwnAreaCountMin: dwnTotalsMinSegments[7],
dwnAreaMin: dwnTotalsMinSegments[8],
dwnHazeAvgMin: dwnTotalsMinSegments[9],
dwnHazeMedianMin: dwnTotalsMinSegments[10],
dwnHazeStdDevMin: dwnTotalsMinSegments[11],
dwnBin1Min: dwnTotalsMinSegments[12],
dwnBin2Min: dwnTotalsMinSegments[13],
dwnBin3Min: dwnTotalsMinSegments[14],
dwnBin4Min: dwnTotalsMinSegments[15],
dwnBin5Min: dwnTotalsMinSegments[16],
dwnBin6Min: dwnTotalsMinSegments[17],
dwnBin7Min: dwnTotalsMinSegments[18],
dwnBin8Min: dwnTotalsMinSegments[19],
dwnAllMax: dwnTotalsMaxSegments[0],
dwnLpdMax: dwnTotalsMaxSegments[1],
dwnLpdNMax: dwnTotalsMaxSegments[2],
dwnLpdESMax: dwnTotalsMaxSegments[3],
dwnMicroScrMax: dwnTotalsMaxSegments[4],
dwnScrMax: dwnTotalsMaxSegments[5],
dwnSlipMax: dwnTotalsMaxSegments[6],
dwnAreaCountMax: dwnTotalsMaxSegments[7],
dwnAreaMax: dwnTotalsMaxSegments[8],
dwnHazeAvgMax: dwnTotalsMaxSegments[9],
dwnHazeMedianMax: dwnTotalsMaxSegments[10],
dwnHazeStdDevMax: dwnTotalsMaxSegments[11],
dwnBin1Max: dwnTotalsMaxSegments[12],
dwnBin2Max: dwnTotalsMaxSegments[13],
dwnBin3Max: dwnTotalsMaxSegments[14],
dwnBin4Max: dwnTotalsMaxSegments[15],
dwnBin5Max: dwnTotalsMaxSegments[16],
dwnBin6Max: dwnTotalsMaxSegments[17],
dwnBin7Max: dwnTotalsMaxSegments[18],
dwnBin8Max: dwnTotalsMaxSegments[19],
dwnAllMean: dwnTotalsMeanSegments[0],
dwnLpdMean: dwnTotalsMeanSegments[1],
dwnLpdNMean: dwnTotalsMeanSegments[2],
dwnLpdESMean: dwnTotalsMeanSegments[3],
dwnMicroScrMean: dwnTotalsMeanSegments[4],
dwnScrMean: dwnTotalsMeanSegments[5],
dwnSlipMean: dwnTotalsMeanSegments[6],
dwnAreaCountMean: dwnTotalsMeanSegments[7],
dwnAreaMean: dwnTotalsMeanSegments[8],
dwnHazeAvgMean: dwnTotalsMeanSegments[9],
dwnHazeMedianMean: dwnTotalsMeanSegments[10],
dwnHazeStdDevMean: dwnTotalsMeanSegments[11],
dwnBin1Mean: dwnTotalsMeanSegments[12],
dwnBin2Mean: dwnTotalsMeanSegments[13],
dwnBin3Mean: dwnTotalsMeanSegments[14],
dwnBin4Mean: dwnTotalsMeanSegments[15],
dwnBin5Mean: dwnTotalsMeanSegments[16],
dwnBin6Mean: dwnTotalsMeanSegments[17],
dwnBin7Mean: dwnTotalsMeanSegments[18],
dwnBin8Mean: dwnTotalsMeanSegments[19],
dwnAllStdDev: dwnTotalsStandardDevSegments[0],
dwnLpdStdDev: dwnTotalsStandardDevSegments[1],
dwnLpdNStdDev: dwnTotalsStandardDevSegments[2],
dwnLpdESStdDev: dwnTotalsStandardDevSegments[3],
dwnMicroScrStdDev: dwnTotalsStandardDevSegments[4],
dwnScrStdDev: dwnTotalsStandardDevSegments[5],
dwnSlipStdDev: dwnTotalsStandardDevSegments[6],
dwnAreaCountStdDev: dwnTotalsStandardDevSegments[7],
dwnAreaStdDev: dwnTotalsStandardDevSegments[8],
dwnHazeAvgStdDev: dwnTotalsStandardDevSegments[9],
dwnHazeMedianStdDev: dwnTotalsStandardDevSegments[10],
dwnHazeStdDevStdDev: dwnTotalsStandardDevSegments[11],
dwnBin1StdDev: dwnTotalsStandardDevSegments[12],
dwnBin2StdDev: dwnTotalsStandardDevSegments[13],
dwnBin3StdDev: dwnTotalsStandardDevSegments[14],
dwnBin4StdDev: dwnTotalsStandardDevSegments[15],
dwnBin5StdDev: dwnTotalsStandardDevSegments[16],
dwnBin6StdDev: dwnTotalsStandardDevSegments[17],
dwnBin7StdDev: dwnTotalsStandardDevSegments[18],
dwnBin8StdDev: dwnTotalsStandardDevSegments[19],
dnnAllMin: dnnTotalsMinSegments[0],
dnnLpdMin: dnnTotalsMinSegments[1],
dnnLpdNMin: dnnTotalsMinSegments[2],
dnnLpdESMin: dnnTotalsMinSegments[3],
dnnMicroScrMin: dnnTotalsMinSegments[4],
dnnScrMin: dnnTotalsMinSegments[5],
dnnSlipMin: dnnTotalsMinSegments[6],
dnnAreaCountMin: dnnTotalsMinSegments[7],
dnnAreaMin: dnnTotalsMinSegments[8],
dnnHazeAvgMin: dnnTotalsMinSegments[9],
dnnHazeMedianMin: dnnTotalsMinSegments[10],
dnnHazeStdDevMin: dnnTotalsMinSegments[11],
dnnBin1Min: dnnTotalsMinSegments[12],
dnnBin2Min: dnnTotalsMinSegments[13],
dnnBin3Min: dnnTotalsMinSegments[14],
dnnBin4Min: dnnTotalsMinSegments[15],
dnnBin5Min: dnnTotalsMinSegments[16],
dnnBin6Min: dnnTotalsMinSegments[17],
dnnBin7Min: dnnTotalsMinSegments[18],
dnnBin8Min: dnnTotalsMinSegments[19],
dnnAllMax: dnnTotalsMaxSegments[0],
dnnLpdMax: dnnTotalsMaxSegments[1],
dnnLpdNMax: dnnTotalsMaxSegments[2],
dnnLpdESMax: dnnTotalsMaxSegments[3],
dnnMicroScrMax: dnnTotalsMaxSegments[4],
dnnScrMax: dnnTotalsMaxSegments[5],
dnnSlipMax: dnnTotalsMaxSegments[6],
dnnAreaCountMax: dnnTotalsMaxSegments[7],
dnnAreaMax: dnnTotalsMaxSegments[8],
dnnHazeAvgMax: dnnTotalsMaxSegments[9],
dnnHazeMedianMax: dnnTotalsMaxSegments[10],
dnnHazeStdDevMax: dnnTotalsMaxSegments[11],
dnnBin1Max: dnnTotalsMaxSegments[12],
dnnBin2Max: dnnTotalsMaxSegments[13],
dnnBin3Max: dnnTotalsMaxSegments[14],
dnnBin4Max: dnnTotalsMaxSegments[15],
dnnBin5Max: dnnTotalsMaxSegments[16],
dnnBin6Max: dnnTotalsMaxSegments[17],
dnnBin7Max: dnnTotalsMaxSegments[18],
dnnBin8Max: dnnTotalsMaxSegments[19],
dnnAllMean: dnnTotalsMeanSegments[0],
dnnLpdMean: dnnTotalsMeanSegments[1],
dnnLpdNMean: dnnTotalsMeanSegments[2],
dnnLpdESMean: dnnTotalsMeanSegments[3],
dnnMicroScrMean: dnnTotalsMeanSegments[4],
dnnScrMean: dnnTotalsMeanSegments[5],
dnnSlipMean: dnnTotalsMeanSegments[6],
dnnAreaCountMean: dnnTotalsMeanSegments[7],
dnnAreaMean: dnnTotalsMeanSegments[8],
dnnHazeAvgMean: dnnTotalsMeanSegments[9],
dnnHazeMedianMean: dnnTotalsMeanSegments[10],
dnnHazeStdDevMean: dnnTotalsMeanSegments[11],
dnnBin1Mean: dnnTotalsMeanSegments[12],
dnnBin2Mean: dnnTotalsMeanSegments[13],
dnnBin3Mean: dnnTotalsMeanSegments[14],
dnnBin4Mean: dnnTotalsMeanSegments[15],
dnnBin5Mean: dnnTotalsMeanSegments[16],
dnnBin6Mean: dnnTotalsMeanSegments[17],
dnnBin7Mean: dnnTotalsMeanSegments[18],
dnnBin8Mean: dnnTotalsMeanSegments[19],
dnnAllStdDev: dnnTotalsStandardDevSegments[0],
dnnLpdStdDev: dnnTotalsStandardDevSegments[1],
dnnLpdNStdDev: dnnTotalsStandardDevSegments[2],
dnnLpdESStdDev: dnnTotalsStandardDevSegments[3],
dnnMicroScrStdDev: dnnTotalsStandardDevSegments[4],
dnnScrStdDev: dnnTotalsStandardDevSegments[5],
dnnSlipStdDev: dnnTotalsStandardDevSegments[6],
dnnAreaCountStdDev: dnnTotalsStandardDevSegments[7],
dnnAreaStdDev: dnnTotalsStandardDevSegments[8],
dnnHazeAvgStdDev: dnnTotalsStandardDevSegments[9],
dnnHazeMedianStdDev: dnnTotalsStandardDevSegments[10],
dnnHazeStdDevStdDev: dnnTotalsStandardDevSegments[11],
dnnBin1StdDev: dnnTotalsStandardDevSegments[12],
dnnBin2StdDev: dnnTotalsStandardDevSegments[13],
dnnBin3StdDev: dnnTotalsStandardDevSegments[14],
dnnBin4StdDev: dnnTotalsStandardDevSegments[15],
dnnBin5StdDev: dnnTotalsStandardDevSegments[16],
dnnBin6StdDev: dnnTotalsStandardDevSegments[17],
dnnBin7StdDev: dnnTotalsStandardDevSegments[18],
dnnBin8StdDev: dnnTotalsStandardDevSegments[19]);
}
else
throw new Exception(constant.FormatExceptionMessage);
return result;
}

View File

@ -226,9 +226,9 @@ public class MonIn : IMonIn, IDisposable
{
StringBuilder stringBuilder = new();
if (string.IsNullOrEmpty(subresource))
_ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} \n{5}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), stateName.Trim(), state.Trim(), description.Trim());
_ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} \n{5}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), stateName.Trim(), state.Trim(), description.Trim());
else
_ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} \n{6}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), subresource.Trim(), stateName.Trim(), state.Trim(), description.Trim());
_ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} \n{6}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), subresource.Trim(), stateName.Trim(), state.Trim(), description.Trim());
return stringBuilder.ToString();
}
@ -247,14 +247,14 @@ public class MonIn : IMonIn, IDisposable
if (string.IsNullOrEmpty(subresource))
{
if (unit.Equals(string.Empty) && !interval.HasValue)
_ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} \n{5}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), performanceName.Trim(), value, description.Trim());
_ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} \n{5}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), performanceName.Trim(), value, description.Trim());
else
_ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} {5} {{interval={6}, unit={7}}}\n", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), performanceName.Trim(), value, description.Trim(), interval.HasValue ? interval.Value.ToString() : (object)string.Empty, unit.Trim());
_ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} {5} {{interval={6}, unit={7}}}\n", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), performanceName.Trim(), value, description.Trim(), interval.HasValue ? interval.Value.ToString() : string.Empty, unit.Trim());
}
else if (unit.Equals(string.Empty) && !interval.HasValue)
_ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} \n{6}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), subresource.Trim(), performanceName.Trim(), value, description.Trim());
_ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} \n{6}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), subresource.Trim(), performanceName.Trim(), value, description.Trim());
else
_ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} {6} {{interval={7}, unit={8}}}\n", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), subresource.Trim(), performanceName.Trim(), value, description.Trim(), interval.HasValue ? interval.Value.ToString() : (object)string.Empty, unit.Trim());
_ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} {6} {{interval={7}, unit={8}}}\n", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), subresource.Trim(), performanceName.Trim(), value, description.Trim(), interval.HasValue ? interval.Value.ToString() : string.Empty, unit.Trim());
return stringBuilder.ToString();
}

View File

@ -10,7 +10,7 @@
<IsPackable>false</IsPackable>
<Nullable>disable</Nullable>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<VSTestLogger>trx</VSTestLogger>
@ -35,8 +35,8 @@
<RuntimeHostConfigurationOption Include="AssemblyName" Value="MET08DDUPSP1TBI" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.3" />
<PackageReference Include="FFMpegCore" Version="5.1.0" />
<PackageReference Include="coverlet.collector" Version="6.0.4" />
<PackageReference Include="FFMpegCore" Version="5.4.0" />
<PackageReference Include="IKVM.AWT.WinForms" Version="7.2.4630.5"><NoWarn>NU1701</NoWarn></PackageReference>
<PackageReference Include="IKVM.OpenJDK.Core" Version="7.2.4630.5"><NoWarn>NU1701</NoWarn></PackageReference>
<PackageReference Include="IKVM.OpenJDK.Media" Version="7.2.4630.5"><NoWarn>NU1701</NoWarn></PackageReference>
@ -44,29 +44,28 @@
<PackageReference Include="IKVM.OpenJDK.Util" Version="7.2.4630.5"><NoWarn>NU1701</NoWarn></PackageReference>
<PackageReference Include="IKVM.OpenJDK.XML.API" Version="7.2.4630.5"><NoWarn>NU1701</NoWarn></PackageReference>
<PackageReference Include="IKVM.Runtime" Version="7.2.4630.5"><NoWarn>NU1701</NoWarn></PackageReference>
<PackageReference Include="Instances" Version="3.0.1" />
<PackageReference Include="log4net" Version="3.0.3"></PackageReference>
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="9.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="9.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="9.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="9.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.json" Version="9.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="9.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="9.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="9.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageReference Include="Microsoft.Win32.SystemEvents" Version="9.0.0" />
<PackageReference Include="Instances" Version="3.0.2" />
<PackageReference Include="log4net" Version="3.2.0"></PackageReference>
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.json" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="10.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
<PackageReference Include="Microsoft.Win32.SystemEvents" Version="10.0.0" />
<PackageReference Include="MSTest.TestAdapter" Version="3.7.0" />
<PackageReference Include="MSTest.TestFramework" Version="3.7.0" />
<PackageReference Include="Pdfbox" Version="1.1.1"><NoWarn>NU1701</NoWarn></PackageReference>
<PackageReference Include="RoboSharp" Version="1.6.0" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="9.0.0" />
<PackageReference Include="System.Data.OleDb" Version="9.0.0" />
<PackageReference Include="System.Data.SqlClient" Version="4.8.6" />
<PackageReference Include="System.Drawing.Common" Version="9.0.0" />
<PackageReference Include="System.Text.Json" Version="9.0.0" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="10.0.0" />
<PackageReference Include="System.Data.OleDb" Version="10.0.0" />
<PackageReference Include="System.Data.SqlClient" Version="4.9.0" />
<PackageReference Include="System.Drawing.Common" Version="10.0.0" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Infineon.Mesa.PDF.Text.Stripper" Version="4.8.0.2"><NoWarn>NU1701</NoWarn></PackageReference>

View File

@ -3,6 +3,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace Adaptation.Shared.Duplicator;
@ -178,4 +179,16 @@ public class Description : IDescription, Properties.IDescription
internal static string GetDateFormat() => "MM/dd/yyyy hh:mm:ss tt";
}
[JsonSourceGenerationOptions(WriteIndented = true, NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
[JsonSerializable(typeof(Description))]
internal partial class SharedDescriptionSourceGenerationContext : JsonSerializerContext
{
}
[JsonSourceGenerationOptions(WriteIndented = true, NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
[JsonSerializable(typeof(Description[]))]
internal partial class SharedDescriptionArraySourceGenerationContext : JsonSerializerContext
{
}

View File

@ -9,7 +9,6 @@ using System.IO;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading;
namespace Adaptation.Shared;
@ -447,12 +446,13 @@ public class FileRead : Properties.IFileRead
{
List<Properties.IDescription> results = new();
Duplicator.Description description;
JsonSerializerOptions jsonSerializerOptions = new() { NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString };
foreach (JsonElement jsonElement in jsonElements)
{
if (jsonElement.ValueKind != JsonValueKind.Object)
throw new Exception();
description = JsonSerializer.Deserialize<Duplicator.Description>(jsonElement.ToString(), jsonSerializerOptions);
description = JsonSerializer.Deserialize(jsonElement.ToString(), Duplicator.SharedDescriptionSourceGenerationContext.Default.Description);
if (description is null)
continue;
results.Add(description);
}
return results;

View File

@ -199,4 +199,31 @@ public class Logistics : ILogistics
_ProcessJobID = processJobID;
}
private static int GetCountFromFileName(Logistics logistics)
{
int result;
string[] segments = logistics.FileInfo.Name.Split('.');
string[] segmentsB = segments[0].Split('_');
string countFromFileName = segmentsB.Length < 3 ? "0" : segmentsB[2];
if (!int.TryParse(countFromFileName, out result))
result = 0;
return result;
}
internal static long GetUniqueSequence(Logistics logistics)
{
long result;
int countFromFileName = GetCountFromFileName(logistics);
result = (logistics.Sequence * 10) + countFromFileName;
return result;
}
internal static string GetUniqueId(Logistics logistics)
{
string result;
int countFromFileName = GetCountFromFileName(logistics);
result = $"{logistics.JobID}_{logistics.MID}_{logistics.DateTimeFromSequence:yyyyMMddHHmmssffff}_{countFromFileName}";
return result;
}
}

View File

@ -187,7 +187,7 @@ internal class ProcessDataStandardFormat
break;
}
}
string? linesOne = lines.Length > 0 && body.Count == 0 && columns.Count == 0 ? lines[1] : null;
string? linesOne = lines.Length > 1 && body.Count == 0 && columns.Count == 0 ? lines[1] : null;
logistics = GetLogistics(footer, linesOne: linesOne);
if (logistics.Count == 0)
sequence = null;
@ -235,7 +235,7 @@ internal class ProcessDataStandardFormat
const int columnsLine = 6;
FileInfo fileInfo = new(reportFullPath);
ProcessDataStandardFormat processDataStandardFormat = GetProcessDataStandardFormat(fileInfo.LastWriteTime, columnsLine, fileInfo.FullName, lines: null);
JsonElement[]? jsonElements = processDataStandardFormatMapping.OldColumnNames.Count != processDataStandardFormatMapping.ColumnIndices.Count ? null : GetFullArray(processDataStandardFormat);
JsonElement[]? jsonElements = processDataStandardFormatMapping.OldColumnNames.Count == 0 ? null : GetFullArray(processDataStandardFormat);
JsonProperty[]? jsonProperties = jsonElements is null || jsonElements.Length == 0 ? null : jsonElements[0].EnumerateObject().ToArray();
if (jsonElements is null || jsonProperties is null || jsonProperties.Length != processDataStandardFormatMapping.NewColumnNames.Count)
result = processDataStandardFormat;
@ -654,7 +654,18 @@ internal class ProcessDataStandardFormat
return results;
}
internal static string GetPDSFText(IFileRead fileRead, Logistics logistics, JsonElement[] jsonElements, string logisticsText)
internal static JsonElement[] GetArray(string reportFullPath, string[] lines, ProcessDataStandardFormat processDataStandardFormat)
{
JsonElement[] results;
string? json = GetRecordsJson(reportFullPath, lines);
if (string.IsNullOrEmpty(json))
results = GetArray(processDataStandardFormat);
else
results = JsonSerializer.Deserialize(json, JsonElementCollectionSourceGenerationContext.Default.JsonElementArray) ?? throw new Exception();
return results;
}
internal static string GetPDSFText(IFileRead fileRead, Logistics logistics, JsonElement[] jsonElements, string? logisticsText)
{
string result;
if (jsonElements.Length == 0)
@ -839,33 +850,6 @@ internal class ProcessDataStandardFormat
return string.Concat(((int)searchFor).ToString().PadLeft(2, '0'), separator, searchFor.ToString().Replace("In", string.Concat(separator, "In")).Replace("Ex", string.Concat(separator, "Ex")));
}
private static int? TryGetPropertyIndex(JsonProperty[] jsonProperties, string propertyName)
{
int? result = null;
for (int i = 0; i < jsonProperties.Length; i++)
{
if (jsonProperties[i].Name != propertyName)
continue;
result = i;
break;
}
if (result is null)
{
for (int i = 0; i < jsonProperties.Length; i++)
{
if (jsonProperties[i].Name[0] != propertyName[0])
continue;
if (jsonProperties[i].Name.Length != propertyName.Length)
continue;
if (jsonProperties[i].Name != propertyName)
continue;
result = i;
break;
}
}
return result;
}
internal static string GetXml(ProcessDataStandardFormat processDataStandardFormat)
{
string result;
@ -903,7 +887,7 @@ internal class ProcessDataStandardFormat
}
foreach (KeyValuePair<string, List<string>> keyValuePair in results)
{
if (body.Count < 3)
if (body.Count < 2)
break;
if (keyValuePair.Value.Count != body.Count)
continue;
@ -956,6 +940,26 @@ internal class ProcessDataStandardFormat
return result;
}
private static string? GetRecordsJson(string reportFullPath, string[] lines)
{
string? result;
bool foundRecords = false;
List<string> results = new();
lines ??= File.ReadAllLines(reportFullPath);
foreach (string line in lines)
{
if (line.StartsWith("\"Records\""))
foundRecords = true;
if (!foundRecords)
continue;
if (line == "],")
break;
results.Add(line);
}
result = results.Count == 0 ? null : $"{string.Join(Environment.NewLine, results.Skip(1))}{Environment.NewLine}]";
return result;
}
}
[JsonSourceGenerationOptions(WriteIndented = true)]

View File

@ -1,4 +1,4 @@
#if true
#if v2_60_0
using Adaptation._Tests.Shared;
using Microsoft.Extensions.Logging;
using Microsoft.VisualStudio.TestTools.UnitTesting;

View File

@ -1,4 +1,4 @@
#if true
#if v2_60_0
using Adaptation._Tests.Shared;
using Microsoft.Extensions.Logging;
using Microsoft.VisualStudio.TestTools.UnitTesting;

View File

@ -1,4 +1,4 @@
#if true
#if v2_60_0
using Adaptation._Tests.Shared;
using Microsoft.Extensions.Logging;
using Microsoft.VisualStudio.TestTools.UnitTesting;

View File

@ -0,0 +1,195 @@
#if true
using Adaptation._Tests.Shared;
using Microsoft.Extensions.Logging;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
namespace Adaptation._Tests.CreateSelfDescription.Production.v2_61_1;
[TestClass]
public class MET08DDUPSP1TBI : EAFLoggingUnitTesting
{
#pragma warning disable CA2254
#pragma warning disable IDE0060
internal static string DummyRoot { get; private set; }
internal static MET08DDUPSP1TBI EAFLoggingUnitTesting { get; private set; }
static MET08DDUPSP1TBI() => DummyRoot = @"\\mesfs.infineon.com\EC_Characterization_Si\Dummy";
public MET08DDUPSP1TBI() : base(DummyRoot, testContext: null, declaringType: null, skipEquipmentDictionary: false)
{
if (EAFLoggingUnitTesting is null)
throw new Exception();
}
public MET08DDUPSP1TBI(TestContext testContext) : base(DummyRoot, testContext, new StackFrame().GetMethod().DeclaringType, skipEquipmentDictionary: false)
{
}
[ClassInitialize]
public static void ClassInitialize(TestContext testContext)
{
EAFLoggingUnitTesting ??= new MET08DDUPSP1TBI(testContext);
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(testContext.TestName, " - ClassInitialize"));
string[] fileNameAndText = EAFLoggingUnitTesting.AdaptationTesting.GetCSharpText(testContext.TestName);
File.WriteAllText(fileNameAndText[0], fileNameAndText[1]);
File.WriteAllText(fileNameAndText[2], fileNameAndText[3]);
}
[ClassCleanup()]
public static void ClassCleanup()
{
EAFLoggingUnitTesting?.Logger?.LogInformation("Cleanup");
EAFLoggingUnitTesting?.Dispose();
}
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__MoveMatchingFiles()
{
string check = "*.pdsf";
MethodBase methodBase = new StackFrame().GetMethod();
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
_ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
}
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__OpenInsightMetrologyViewer()
{
string check = "*.pdsf";
MethodBase methodBase = new StackFrame().GetMethod();
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
_ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
}
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__IQSSi()
{
string check = "*.pdsf";
MethodBase methodBase = new StackFrame().GetMethod();
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
_ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
}
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__OpenInsight()
{
string check = "*.pdsf";
MethodBase methodBase = new StackFrame().GetMethod();
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
_ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
}
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__OpenInsightMetrologyViewerAttachments()
{
string check = "*.pdsf";
MethodBase methodBase = new StackFrame().GetMethod();
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
_ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
}
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__APC()
{
string check = "*.pdsf";
MethodBase methodBase = new StackFrame().GetMethod();
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
_ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
}
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__SPaCe()
{
string check = "*.pdsf";
MethodBase methodBase = new StackFrame().GetMethod();
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
_ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
}
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__Processed()
{
string check = "*.pdsf";
MethodBase methodBase = new StackFrame().GetMethod();
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
_ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
}
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__Archive()
{
string check = "*.pdsf";
MethodBase methodBase = new StackFrame().GetMethod();
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
_ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
}
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__Dummy()
{
string check = "637400748000000000.zip";
MethodBase methodBase = new StackFrame().GetMethod();
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
_ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
}
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__TIBCO()
{
string check = "*.idc";
MethodBase methodBase = new StackFrame().GetMethod();
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
_ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
}
}
#endif

View File

@ -0,0 +1,70 @@
#if true
using Adaptation._Tests.Shared;
using Microsoft.Extensions.Logging;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
namespace Adaptation._Tests.CreateSelfDescription.Production.v2_61_1;
[TestClass]
public class SP101_EQPT : EAFLoggingUnitTesting
{
#pragma warning disable CA2254
#pragma warning disable IDE0060
internal static string DummyRoot { get; private set; }
internal static SP101_EQPT EAFLoggingUnitTesting { get; private set; }
static SP101_EQPT() => DummyRoot = @"\\mesfs.infineon.com\EC_Characterization_Si\Dummy";
public SP101_EQPT() : base(DummyRoot, testContext: null, declaringType: null, skipEquipmentDictionary: false)
{
if (EAFLoggingUnitTesting is null)
throw new Exception();
}
public SP101_EQPT(TestContext testContext) : base(DummyRoot, testContext, new StackFrame().GetMethod().DeclaringType, skipEquipmentDictionary: false)
{
}
[ClassInitialize]
public static void ClassInitialize(TestContext testContext)
{
EAFLoggingUnitTesting ??= new SP101_EQPT(testContext);
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(testContext.TestName, " - ClassInitialize"));
string[] fileNameAndText = EAFLoggingUnitTesting.AdaptationTesting.GetCSharpText(testContext.TestName);
File.WriteAllText(fileNameAndText[0], fileNameAndText[1]);
File.WriteAllText(fileNameAndText[2], fileNameAndText[3]);
}
[ClassCleanup()]
public static void ClassCleanup()
{
EAFLoggingUnitTesting?.Logger?.LogInformation("Cleanup");
EAFLoggingUnitTesting?.Dispose();
}
private static void NonThrowTryCatch()
{
try
{ throw new Exception(); }
catch (Exception) { }
}
[Ignore]
[TestMethod]
public void Production__v2_61_1__SP101_EQPT__MoveAllFiles()
{
string check = "*";
MethodBase methodBase = new StackFrame().GetMethod();
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
_ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
NonThrowTryCatch();
}
}
#endif

View File

@ -0,0 +1,65 @@
#if true
using Adaptation._Tests.Shared;
using Microsoft.Extensions.Logging;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
namespace Adaptation._Tests.CreateSelfDescription.Production.v2_61_1;
[TestClass]
public class SP101 : EAFLoggingUnitTesting
{
#pragma warning disable CA2254
#pragma warning disable IDE0060
internal static string DummyRoot { get; private set; }
internal static SP101 EAFLoggingUnitTesting { get; private set; }
static SP101() => DummyRoot = @"\\mesfs.infineon.com\EC_Characterization_Si\Dummy";
public SP101() : base(DummyRoot, testContext: null, declaringType: null, skipEquipmentDictionary: false)
{
if (EAFLoggingUnitTesting is null)
throw new Exception();
}
public SP101(TestContext testContext) : base(DummyRoot, testContext, new StackFrame().GetMethod().DeclaringType, skipEquipmentDictionary: false)
{
}
[ClassInitialize]
public static void ClassInitialize(TestContext testContext)
{
EAFLoggingUnitTesting ??= new SP101(testContext);
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(testContext.TestName, " - ClassInitialize"));
string[] fileNameAndText = EAFLoggingUnitTesting.AdaptationTesting.GetCSharpText(testContext.TestName);
File.WriteAllText(fileNameAndText[0], fileNameAndText[1]);
File.WriteAllText(fileNameAndText[2], fileNameAndText[3]);
}
[ClassCleanup()]
public static void ClassCleanup()
{
EAFLoggingUnitTesting?.Logger?.LogInformation("Cleanup");
EAFLoggingUnitTesting?.Dispose();
}
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__SP101__txt()
{
string check = "*.txt";
MethodBase methodBase = new StackFrame().GetMethod();
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
_ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
}
}
#endif

View File

@ -0,0 +1,65 @@
#if true
using Adaptation._Tests.Shared;
using Microsoft.Extensions.Logging;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
namespace Adaptation._Tests.CreateSelfDescription.Production.v2_61_1;
[TestClass]
public class TBI01 : EAFLoggingUnitTesting
{
#pragma warning disable CA2254
#pragma warning disable IDE0060
internal static string DummyRoot { get; private set; }
internal static TBI01 EAFLoggingUnitTesting { get; private set; }
static TBI01() => DummyRoot = @"\\mesfs.infineon.com\EC_Characterization_Si\Dummy";
public TBI01() : base(DummyRoot, testContext: null, declaringType: null, skipEquipmentDictionary: false)
{
if (EAFLoggingUnitTesting is null)
throw new Exception();
}
public TBI01(TestContext testContext) : base(DummyRoot, testContext, new StackFrame().GetMethod().DeclaringType, skipEquipmentDictionary: false)
{
}
[ClassInitialize]
public static void ClassInitialize(TestContext testContext)
{
EAFLoggingUnitTesting ??= new TBI01(testContext);
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(testContext.TestName, " - ClassInitialize"));
string[] fileNameAndText = EAFLoggingUnitTesting.AdaptationTesting.GetCSharpText(testContext.TestName);
File.WriteAllText(fileNameAndText[0], fileNameAndText[1]);
File.WriteAllText(fileNameAndText[2], fileNameAndText[3]);
}
[ClassCleanup()]
public static void ClassCleanup()
{
EAFLoggingUnitTesting?.Logger?.LogInformation("Cleanup");
EAFLoggingUnitTesting?.Dispose();
}
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__TBI01__txt()
{
string check = "*.txt";
MethodBase methodBase = new StackFrame().GetMethod();
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
_ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
}
}
#endif

View File

@ -1,4 +1,4 @@
#if true
#if v2_60_0
using Adaptation.Shared;
using Adaptation.Shared.Methods;
using Microsoft.VisualStudio.TestTools.UnitTesting;

View File

@ -1,4 +1,4 @@
#if true
#if v2_60_0
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Adaptation._Tests.Extract.Production.v2_60_0;

View File

@ -1,4 +1,4 @@
#if true
#if v2_60_0
using Adaptation.Shared;
using Adaptation.Shared.Methods;
using Microsoft.VisualStudio.TestTools.UnitTesting;

View File

@ -0,0 +1,146 @@
#if true
using Adaptation.Shared;
using Adaptation.Shared.Methods;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Diagnostics;
using System.Reflection;
namespace Adaptation._Tests.Extract.Production.v2_61_1;
[TestClass]
public class MET08DDUPSP1TBI
{
#pragma warning disable CA2254
#pragma warning disable IDE0060
private static CreateSelfDescription.Production.v2_61_1.MET08DDUPSP1TBI _MET08DDUPSP1TBI;
[ClassInitialize]
public static void ClassInitialize(TestContext testContext)
{
CreateSelfDescription.Production.v2_61_1.MET08DDUPSP1TBI.ClassInitialize(testContext);
_MET08DDUPSP1TBI = CreateSelfDescription.Production.v2_61_1.MET08DDUPSP1TBI.EAFLoggingUnitTesting;
}
private static void NonThrowTryCatch()
{
try
{ throw new Exception(); }
catch (Exception) { }
}
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__MoveMatchingFiles() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__MoveMatchingFiles();
[Ignore]
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__MoveMatchingFiles637955319879801344__Normal()
{
string check = "*.pdsf";
bool validatePDSF = false;
MethodBase methodBase = new StackFrame().GetMethod();
_MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__MoveMatchingFiles();
string[] variables = _MET08DDUPSP1TBI.AdaptationTesting.GetVariables(methodBase, check, validatePDSF);
IFileRead fileRead = _MET08DDUPSP1TBI.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false);
Logistics logistics = new(fileRead);
_ = Shared.AdaptationTesting.ReExtractCompareUpdatePassDirectory(variables, fileRead, logistics, validatePDSF);
NonThrowTryCatch();
}
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__OpenInsightMetrologyViewer() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__OpenInsightMetrologyViewer();
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__IQSSi() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__IQSSi();
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__OpenInsight() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__OpenInsight();
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__OpenInsight638052814829645888__IqsSql()
{
string check = "*.pdsf";
MethodBase methodBase = new StackFrame().GetMethod();
_MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__OpenInsight();
string[] variables = _MET08DDUPSP1TBI.AdaptationTesting.GetVariables(methodBase, check, validatePDSF: false);
IFileRead fileRead = _MET08DDUPSP1TBI.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false);
Logistics logistics = new(fileRead);
_ = Shared.AdaptationTesting.ReExtractCompareUpdatePassDirectory(variables, fileRead, logistics);
NonThrowTryCatch();
}
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__OpenInsightMetrologyViewerAttachments() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__OpenInsightMetrologyViewerAttachments();
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__APC() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__APC();
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__SPaCe() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__SPaCe();
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__Processed() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__Processed();
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__Archive() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__Archive();
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__Dummy() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__Dummy();
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__TIBCO() => _MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__TIBCO();
[Ignore]
[TestMethod]
public void Production__v2_61_1__MET08DDUPSP1TBI__TIBCO638217888620242702__Normal()
{
string check = "*.idc";
MethodBase methodBase = new StackFrame().GetMethod();
_MET08DDUPSP1TBI.Production__v2_61_1__MET08DDUPSP1TBI__TIBCO();
string[] variables = _MET08DDUPSP1TBI.AdaptationTesting.GetVariables(methodBase, check, validatePDSF: false);
_ = _MET08DDUPSP1TBI.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false);
for (int i = 0; i < int.MaxValue; i++)
System.Threading.Thread.Sleep(500);
NonThrowTryCatch();
}
}
#endif

View File

@ -0,0 +1,27 @@
#if true
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Adaptation._Tests.Extract.Production.v2_61_1;
[TestClass]
public class SP101_EQPT
{
#pragma warning disable CA2254
#pragma warning disable IDE0060
private static CreateSelfDescription.Production.v2_61_1.SP101_EQPT _SP101_EQPT;
[ClassInitialize]
public static void ClassInitialize(TestContext testContext)
{
CreateSelfDescription.Production.v2_61_1.SP101_EQPT.ClassInitialize(testContext);
_SP101_EQPT = CreateSelfDescription.Production.v2_61_1.SP101_EQPT.EAFLoggingUnitTesting;
}
[Ignore]
[TestMethod]
public void Production__v2_61_1__SP101_EQPT__MoveAllFiles() => _SP101_EQPT.Production__v2_61_1__SP101_EQPT__MoveAllFiles();
}
#endif

View File

@ -0,0 +1,58 @@
#if true
using Adaptation.Shared;
using Adaptation.Shared.Methods;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Diagnostics;
using System.Reflection;
namespace Adaptation._Tests.Extract.Production.v2_61_1;
[TestClass]
public class SP101
{
#pragma warning disable CA2254
#pragma warning disable IDE0060
private static CreateSelfDescription.Production.v2_61_1.SP101 _SP101;
[ClassInitialize]
public static void ClassInitialize(TestContext testContext)
{
CreateSelfDescription.Production.v2_61_1.SP101.ClassInitialize(testContext);
_SP101 = CreateSelfDescription.Production.v2_61_1.SP101.EAFLoggingUnitTesting;
}
private static void NonThrowTryCatch()
{
try
{ throw new Exception(); }
catch (Exception) { }
}
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__SP101__txt() => _SP101.Production__v2_61_1__SP101__txt();
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__SP101__txt637955319879801344__Normal()
{
string check = "*.txt";
bool validatePDSF = false;
_SP101.Production__v2_61_1__SP101__txt();
MethodBase methodBase = new StackFrame().GetMethod();
string[] variables = _SP101.AdaptationTesting.GetVariables(methodBase, check, validatePDSF);
IFileRead fileRead = _SP101.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false);
Logistics logistics = new(fileRead);
_ = Shared.AdaptationTesting.ReExtractCompareUpdatePassDirectory(variables, fileRead, logistics, validatePDSF);
NonThrowTryCatch();
}
}
#endif

View File

@ -0,0 +1,58 @@
#if true
using Adaptation.Shared;
using Adaptation.Shared.Methods;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Diagnostics;
using System.Reflection;
namespace Adaptation._Tests.Extract.Production.v2_61_1;
[TestClass]
public class TBI01
{
#pragma warning disable CA2254
#pragma warning disable IDE0060
private static CreateSelfDescription.Production.v2_61_1.TBI01 _TBI01;
[ClassInitialize]
public static void ClassInitialize(TestContext testContext)
{
CreateSelfDescription.Production.v2_61_1.TBI01.ClassInitialize(testContext);
_TBI01 = CreateSelfDescription.Production.v2_61_1.TBI01.EAFLoggingUnitTesting;
}
private static void NonThrowTryCatch()
{
try
{ throw new Exception(); }
catch (Exception) { }
}
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__TBI01__txt() => _TBI01.Production__v2_61_1__TBI01__txt();
#if DEBUG
[Ignore]
#endif
[TestMethod]
public void Production__v2_61_1__TBI01__txt638997515742136250__Normal()
{
string check = "*.txt";
bool validatePDSF = false;
_TBI01.Production__v2_61_1__TBI01__txt();
MethodBase methodBase = new StackFrame().GetMethod();
string[] variables = _TBI01.AdaptationTesting.GetVariables(methodBase, check, validatePDSF);
IFileRead fileRead = _TBI01.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false);
Logistics logistics = new(fileRead);
_ = Shared.AdaptationTesting.ReExtractCompareUpdatePassDirectory(variables, fileRead, logistics, validatePDSF);
NonThrowTryCatch();
}
}
#endif

View File

@ -193,7 +193,12 @@ public class AdaptationTesting : ISMTP
segments = withActualCICN.Split(new string[] { ticks }, StringSplitOptions.None);
dummyDirectory = Path.Combine(dummyRoot, cellInstanceName, ticks, string.Join(null, segments));
if (!Directory.Exists(dummyDirectory))
{
_ = Directory.CreateDirectory(dummyDirectory);
try
{ Directory.SetLastWriteTime(Path.Combine(dummyRoot, cellInstanceName), DateTime.Now); }
catch { }
}
}
if (string.IsNullOrEmpty(ticks))
{
@ -996,22 +1001,22 @@ public class AdaptationTesting : ISMTP
{
try
{
if (!string.IsNullOrEmpty(fileConnectorConfigurationTuple.Item2.ErrorTargetFileLocation))
if (!string.IsNullOrEmpty(fileConnectorConfigurationTuple.Item2.ErrorTargetFileLocation) && !fileConnectorConfigurationTuple.Item2.ErrorTargetFileLocation.Contains("10."))
{
if (!Directory.Exists(fileConnectorConfigurationTuple.Item2.ErrorTargetFileLocation))
_ = Directory.CreateDirectory(fileConnectorConfigurationTuple.Item2.ErrorTargetFileLocation);
}
if (!string.IsNullOrEmpty(fileConnectorConfigurationTuple.Item2.SourceFileLocation))
if (!string.IsNullOrEmpty(fileConnectorConfigurationTuple.Item2.SourceFileLocation) && !fileConnectorConfigurationTuple.Item2.SourceFileLocation.Contains("10."))
{
if (!Directory.Exists(fileConnectorConfigurationTuple.Item2.SourceFileLocation))
_ = Directory.CreateDirectory(fileConnectorConfigurationTuple.Item2.SourceFileLocation);
}
if (!string.IsNullOrEmpty(fileConnectorConfigurationTuple.Item2.TargetFileLocation))
if (!string.IsNullOrEmpty(fileConnectorConfigurationTuple.Item2.TargetFileLocation) && !fileConnectorConfigurationTuple.Item2.TargetFileLocation.Contains("10."))
{
if (!Directory.Exists(fileConnectorConfigurationTuple.Item2.TargetFileLocation))
_ = Directory.CreateDirectory(fileConnectorConfigurationTuple.Item2.TargetFileLocation);
}
if (!string.IsNullOrEmpty(fileConnectorConfigurationTuple.Item2.AlternateTargetFolder))
if (!string.IsNullOrEmpty(fileConnectorConfigurationTuple.Item2.AlternateTargetFolder) && !fileConnectorConfigurationTuple.Item2.AlternateTargetFolder.Contains("10."))
{
if (!Directory.Exists(fileConnectorConfigurationTuple.Item2.AlternateTargetFolder.Split('|')[0]))
_ = Directory.CreateDirectory(fileConnectorConfigurationTuple.Item2.AlternateTargetFolder.Split('|')[0]);

View File

@ -44,7 +44,7 @@ public class Job : LoggingUnitTesting, IDisposable
catch (Exception) { }
}
#if !Always
#if Always
[Ignore]
#endif
[TestMethod]
@ -57,41 +57,42 @@ public class Job : LoggingUnitTesting, IDisposable
DateTime loadSignatureDateTimeFilter = new(2023, 05, 01);
string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare;
string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare;
string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString;
string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString;
HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") };
LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) };
mid = """
{"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "12-123456-1234", "Recipe": "Recipe"}
""";
job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "21");
Assert.AreEqual("123456", job.LotName);
Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "4609");
mid = """
{"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "12-1234567-1234", "Recipe": "Recipe"}
""";
job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "21");
Assert.AreEqual("1234567", job.LotName);
Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "4609");
mid = """
{"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "-544481-", "Recipe": "Recipe"}
""";
job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "51");
Assert.AreEqual("544481", job.LotName);
Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "5158");
mid = """
{"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "00-544481-0000", "Recipe": "Recipe"}
""";
job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "51");
Assert.AreEqual("544481", job.LotName);
Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "5158");
mid = """
{"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "00-o171308.1.51-0000", "Recipe": "Recipe", "Slot": "11"}
""";
job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "54");
Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); // == "547000");
Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "4445");
@ -99,7 +100,7 @@ public class Job : LoggingUnitTesting, IDisposable
mid = """
{"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE5", "Sequence": "638163023363575829", "MID": "B48", "Recipe": "lsl_6in "}
""";
job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "54");
Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); // == "547000");
Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "4445");
@ -118,13 +119,14 @@ public class Job : LoggingUnitTesting, IDisposable
DateTime loadSignatureDateTimeFilter = new(2023, 05, 01);
string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare;
string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare;
string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString;
string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString;
HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") };
LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) };
string mid = """
{"Area": "Si", "EquipmentType": "MET08THFTIRQS408M", "MesEntity": "BIORAD2", "Sequence": "123456789", "MID": "37--", "Recipe": "Recipe"}
""";
job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
Assert.AreEqual("37", job.ProcessType);
Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); // == "549918");
Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "5101");
@ -132,7 +134,7 @@ public class Job : LoggingUnitTesting, IDisposable
NonThrowTryCatch();
}
#if !Always
#if Always
[Ignore]
#endif
[TestMethod]
@ -144,13 +146,14 @@ public class Job : LoggingUnitTesting, IDisposable
DateTime loadSignatureDateTimeFilter = new(2023, 05, 01);
string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare;
string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare;
string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString;
string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString;
HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") };
LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) };
string mid = """
{"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "P1234", "Recipe": "Recipe"}
""";
job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType));
Assert.IsFalse(string.IsNullOrEmpty(job.LotName));
Assert.IsFalse(string.IsNullOrEmpty(job.ProductName));
@ -170,13 +173,14 @@ public class Job : LoggingUnitTesting, IDisposable
DateTime loadSignatureDateTimeFilter = new(2023, 05, 01);
string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare;
string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare;
string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString;
string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString;
HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") };
LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) };
string mid = """
{"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "BIORAD3", "Sequence": "638234699589174855", "MID": "33--", "Recipe": "Recipe"}
""";
job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType));
Assert.IsFalse(string.IsNullOrEmpty(job.LotName));
Assert.IsFalse(string.IsNullOrEmpty(job.ProductName));
@ -184,7 +188,7 @@ public class Job : LoggingUnitTesting, IDisposable
NonThrowTryCatch();
}
#if !Always
#if Always
[Ignore]
#endif
[TestMethod]
@ -196,13 +200,14 @@ public class Job : LoggingUnitTesting, IDisposable
DateTime loadSignatureDateTimeFilter = new(2023, 05, 01);
string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare;
string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare;
string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString;
string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString;
HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") };
LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) };
string mid = """
{"Area": "Si", "EquipmentType": "DEP08CEPIEPSILON", "MesEntity": "R32", "Sequence": "", "MID": "32--", "Recipe": "Recipe"}
""";
job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType));
Assert.IsFalse(string.IsNullOrEmpty(job.LotName));
Assert.IsFalse(string.IsNullOrEmpty(job.ProductName));
@ -211,7 +216,7 @@ public class Job : LoggingUnitTesting, IDisposable
NonThrowTryCatch();
}
#if !Always
#if Always
[Ignore]
#endif
[TestMethod]
@ -223,13 +228,14 @@ public class Job : LoggingUnitTesting, IDisposable
DateTime loadSignatureDateTimeFilter = new(2023, 05, 01);
string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare;
string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare;
string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString;
string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString;
HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") };
LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) };
string mid = """
{"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE5", "Sequence": "638756365880000000", "MID": "38-660275-5095.1", "Recipe": "IRC6mm"}
""";
job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType));
Assert.IsFalse(string.IsNullOrEmpty(job.LotName));
Assert.IsFalse(string.IsNullOrEmpty(job.ProductName));
@ -238,7 +244,7 @@ public class Job : LoggingUnitTesting, IDisposable
NonThrowTryCatch();
}
#if !Always
#if Always
[Ignore]
#endif
[TestMethod]
@ -250,13 +256,14 @@ public class Job : LoggingUnitTesting, IDisposable
DateTime loadSignatureDateTimeFilter = new(2023, 05, 01);
string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare;
string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare;
string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString;
string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString;
HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") };
LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) };
string mid = """
{"Area": "Si", "EquipmentType": "MET08THFTIRQS408M", "MesEntity": "BIORAD2", "Sequence": "638757112479659597", "MID": "173308.1.5", "Recipe": "6inTHICK"}
""";
job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType));
Assert.IsFalse(string.IsNullOrEmpty(job.LotName));
Assert.IsFalse(string.IsNullOrEmpty(job.ProductName));
@ -265,7 +272,7 @@ public class Job : LoggingUnitTesting, IDisposable
NonThrowTryCatch();
}
#if !Always
#if Always
[Ignore]
#endif
[TestMethod]
@ -277,13 +284,14 @@ public class Job : LoggingUnitTesting, IDisposable
DateTime loadSignatureDateTimeFilter = new(2023, 05, 01);
string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare;
string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare;
string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString;
string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString;
HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") };
LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) };
string mid = """
{"Area": "Si", "EquipmentType": "MET08DDUPSFS6420", "MesEntity": "TENCOR1", "Sequence": "638765945581765554", "MID": "1T661282", "Recipe": "8IN_THIN ROTR"}
""";
job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType));
Assert.IsFalse(string.IsNullOrEmpty(job.LotName));
Assert.IsFalse(string.IsNullOrEmpty(job.ProductName));
@ -292,7 +300,7 @@ public class Job : LoggingUnitTesting, IDisposable
NonThrowTryCatch();
}
#if !Always
#if Always
[Ignore]
#endif
[TestMethod]
@ -304,13 +312,14 @@ public class Job : LoggingUnitTesting, IDisposable
DateTime loadSignatureDateTimeFilter = new(2023, 05, 01);
string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare;
string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare;
string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString;
string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString;
HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") };
LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) };
string mid = """
{"Area": "Si", "EquipmentType": "MET08DDUPSFS6420", "MesEntity": "TENCOR1", "Sequence": "638765945581765554", "MID": "AK1PL2", "Recipe": "8INCLEAN"}
""";
job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType));
Assert.IsFalse(string.IsNullOrEmpty(job.LotName));
Assert.IsFalse(string.IsNullOrEmpty(job.ProductName));
@ -328,13 +337,14 @@ public class Job : LoggingUnitTesting, IDisposable
DateTime loadSignatureDateTimeFilter = new(2023, 05, 01);
string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare;
string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare;
string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString;
string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString;
HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") };
LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) };
string mid = """
{"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE5", "Sequence": "638163023363575829", "MID": "23-111111-5053", "Recipe": "lsl_6in "}
{"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE5", "Sequence": "638163023363575829", "MID": "1T1014894", "Recipe": "lsl_6in "}
""";
job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter);
Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "23");
Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); // == "111111");
Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "5053");

View File

@ -64,7 +64,7 @@ public class MET08DDUPSP1TBI : LoggingUnitTesting, IDisposable
StringBuilder results = new();
(string cellInstanceName, string cellInstanceVersionName)[] collection = new (string, string)[]
{
new("MET08DDUPSP1TBI", "v2.60.0"),
new("MET08DDUPSP1TBI", "v2.61.1"),
};
string production = "http://messa08ec.infineon.com:9003/CellInstanceServiceV2";
Shared.PasteSpecialXml.EAF.XML.API.CellInstance.CellInstanceVersion cellInstanceVersion;

View File

@ -0,0 +1,115 @@
// Recipe 1 = Matched
// recipes-and-patterns.js under IndexOf
// RecipesAndPatternsMatch
// ($('dcp.SP101/csv/Index', 0) + 1) == $('dcp.SP101/csv/Count', 0)
// getValue('TENCOR', $('dcp.SP101/csv/Count', 0), $('dcp.SP101/csv/Session', ''), 'pattern', getContextData('2', 'cds.NULL_DATA', ''));
function getValue(tool, patternSize, recipe, pattern, json) {
let result;
if (tool == undefined || tool.length === 0 || patternSize == undefined || patternSize.length === 0 || recipe == undefined || recipe.length === 0 || pattern == undefined || pattern.length === 0 || json == undefined || json.length === 0)
result = 'A) Invalid input!';
else {
let parsed;
try {
parsed = JSON.parse(json);
} catch (error) {
parsed = null;
}
if (parsed == null)
result = 'B) Invalid input!';
else if (parsed.rds == undefined || parsed.rds.prodSpec == undefined || parsed.rds.prodSpec.recipesAndPatterns == undefined)
result = 'C) No Spec!';
else {
let toolMatches = [];
for (let index = 0; index < parsed.rds.prodSpec.recipesAndPatterns.length; index++) {
if (parsed.rds.prodSpec.recipesAndPatterns[index].tool === tool) {
toolMatches.push(parsed.rds.prodSpec.recipesAndPatterns[index]);
}
}
if (toolMatches == null || toolMatches.length === 0)
result = 'Tool [' + tool + '] not found in OI API results!';
else {
let debug = '';
let matches = 0;
for (let index = 0; index < toolMatches.length; index++) {
debug += 'patternSize: ' + toolMatches[index].patternSize +
'; recipe: ' + toolMatches[index].recipe +
'; pattern: ' + toolMatches[index].pattern + ';~';
if (toolMatches[index].recipe.toLowerCase() == recipe.toLowerCase()) {
matches++;
}
}
if (matches > 0)
result = '1';
else
result = 'Value not matched~Run~patternSize: ' + patternSize + '; recipe: ' + recipe + '; pattern: ' + pattern + ';~API~' + debug;
}
}
}
return result;
}
getValue('TENCOR', 0, 'AS_IFX100_ROTR', 'pattern', '{"rds":{"prodSpec":{"recipesAndPatterns":[]}}}');
let json;
let tool;
let recipe;
let pattern;
let patternSize;
tool = 'TENCOR'
patternSize = 9;
recipe = 'lr8in.SET';
pattern = '4_108IN.PAT';
json = '{"rds":{"prodSpec":{"recipesAndPatterns":[]}}}';
const testA = getValue(tool, patternSize, recipe, pattern, json);
if (testA !== '1')
throw 'Test A failed: ' + testA;
tool = null;
const testB = getValue(tool, patternSize, recipe, pattern, json);
if (testB !== 'A) Invalid input!')
throw 'Test L failed: ' + testB;
tool = '';
const testC = getValue(tool, patternSize, recipe, pattern, json);
if (testC !== 'A) Invalid input!')
throw 'Test M failed: ' + testC;
patternSize = null;
const testD = getValue(tool, patternSize, recipe, pattern, json);
if (testD !== 'A) Invalid input!')
throw 'Test J failed: ' + testD;
patternSize = '';
const testE = getValue(tool, patternSize, recipe, pattern, json);
if (testE !== 'A) Invalid input!')
throw 'Test K failed: ' + testE;
recipe = null;
const testF = getValue(tool, patternSize, recipe, pattern, json);
if (testF !== 'A) Invalid input!')
throw 'Test F failed: ' + testF;
recipe = '';
const testG = getValue(tool, patternSize, recipe, pattern, json);
if (testG !== 'A) Invalid input!')
throw 'Test G failed: ' + testG;
pattern = null;
const testH = getValue(tool, patternSize, recipe, pattern, json);
if (testH !== 'A) Invalid input!')
throw 'Test H failed: ' + testH;
pattern = '';
const testI = getValue(tool, patternSize, recipe, pattern, json);
if (testI !== 'A) Invalid input!')
throw 'Test I failed: ' + testI;
json = '';
const testK = getValue(tool, patternSize, recipe, pattern, json);
if (testK !== 'A) Invalid input!')
throw 'Test B failed: ' + testK;
json = 'invalid';
const testL = getValue(tool, patternSize, recipe, pattern, json);
if (testL !== 'B) Invalid input!')
throw 'Test C failed: ' + testL;
json = '{"rds":{}}';
const testM = getValue(tool, patternSize, recipe, pattern, json);
if (testM !== 'C) No Spec!')
throw 'Test D failed: ' + testM;
json = '{"rds":{"prodSpec":{"recipesAndPatterns":[]}}}';
const testN = getValue(tool, patternSize, recipe, pattern, json);
if (testN !== 'Tool [TENCOR] not found in OI API results!')
throw 'Test E failed: ' + testN;

View File

@ -203,8 +203,8 @@ public class TXT : LoggingUnitTesting, IDisposable
StringBuilder results = new();
(string cellInstanceName, string cellInstanceVersionName)[] collection = new (string, string)[]
{
new("SP101", "v2.60.0"),
new("SP101-EQPT", "v2.60.0"),
new("SP101", "v2.61.1"),
new("SP101-EQPT", "v2.61.1"),
};
string production = "http://messa08ec.infineon.com:9003/CellInstanceServiceV2";
Shared.PasteSpecialXml.EAF.XML.API.CellInstance.CellInstanceVersion cellInstanceVersion;

View File

@ -108,8 +108,9 @@
<Compile Include="Adaptation\FileHandlers\CellInstanceConnectionName.cs" />
<Compile Include="Adaptation\FileHandlers\Dummy\FileRead.cs" />
<Compile Include="Adaptation\FileHandlers\IQSSi\FileRead.cs" />
<Compile Include="Adaptation\FileHandlers\MoveAllFiles\FileRead.cs" />
<Compile Include="Adaptation\FileHandlers\MoveMapFiles\FileRead.cs" />
<Compile Include="Adaptation\FileHandlers\MoveMatchingFiles\FileRead.cs" />
<Compile Include="Adaptation\FileHandlers\MoveTextFiles\FileRead.cs" />
<Compile Include="Adaptation\FileHandlers\OpenInsight\FileRead.cs" />
<Compile Include="Adaptation\FileHandlers\OpenInsight\FromIQS.cs" />
<Compile Include="Adaptation\FileHandlers\OpenInsight\Root.cs" />
@ -196,13 +197,13 @@
<Version>7.2.4630.5</Version>
</PackageReference>
<PackageReference Include="Infineon.EAF.Runtime">
<Version>2.60.0</Version>
<Version>2.61.1</Version>
</PackageReference>
<PackageReference Include="Pdfbox">
<Version>1.1.1</Version>
</PackageReference>
<PackageReference Include="System.Text.Json">
<Version>8.0.5</Version>
<Version>8.0.3</Version>
</PackageReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

View File

@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.60.0.0")]
[assembly: AssemblyFileVersion("2.60.0.0")]
[assembly: AssemblyVersion("2.61.1.0")]
[assembly: AssemblyFileVersion("2.61.1.0")]