Compare commits
	
		
			8 Commits
		
	
	
		
			e3910d700f
			...
			10-17-a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ea0c145d4a | |||
| 72cc064f56 | |||
| ec90b4fbbd | |||
| ddf12e5ec0 | |||
| 5c2a3c97e9 | |||
| e6533e152f | |||
| 19b54a7cc8 | |||
| 43024c6c30 | 
| @ -110,7 +110,7 @@ dotnet_diagnostic.CA2254.severity = none # CA2254: The logging message template | |||||||
| dotnet_diagnostic.IDE0001.severity = warning # IDE0001: Simplify name | 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.IDE0002.severity = warning # Simplify (member access) - System.Version.Equals("1", "2"); Version.Equals("1", "2"); | ||||||
| dotnet_diagnostic.IDE0004.severity = warning # IDE0004: Cast is redundant. | dotnet_diagnostic.IDE0004.severity = warning # IDE0004: Cast is redundant. | ||||||
| dotnet_diagnostic.IDE0005.severity = warning # Using directive is unnecessary | dotnet_diagnostic.IDE0005.severity = none # Using directive is unnecessary | ||||||
| dotnet_diagnostic.IDE0028.severity = none # IDE0028: Collection initialization can be simplified | dotnet_diagnostic.IDE0028.severity = none # IDE0028: Collection initialization can be simplified | ||||||
| dotnet_diagnostic.IDE0031.severity = warning # Use null propagation (IDE0031) | dotnet_diagnostic.IDE0031.severity = warning # Use null propagation (IDE0031) | ||||||
| dotnet_diagnostic.IDE0047.severity = warning # IDE0047: Parentheses can be removed | dotnet_diagnostic.IDE0047.severity = warning # IDE0047: Parentheses can be removed | ||||||
| @ -122,6 +122,7 @@ dotnet_diagnostic.IDE0290.severity = none # Use primary constructor [Distance]cs | |||||||
| dotnet_diagnostic.IDE0300.severity = none # IDE0300: Collection initialization can be simplified | dotnet_diagnostic.IDE0300.severity = none # IDE0300: Collection initialization can be simplified | ||||||
| dotnet_diagnostic.IDE0301.severity = none #IDE0301: Collection initialization can be simplified | dotnet_diagnostic.IDE0301.severity = none #IDE0301: Collection initialization can be simplified | ||||||
| dotnet_diagnostic.IDE0305.severity = none # IDE0305: 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 = error # MSTEST0037: Use proper 'Assert' methods | ||||||
| dotnet_diagnostic.SYSLIB1045.severity = none # SYSLIB1045: diagnostics for regex source generation | dotnet_diagnostic.SYSLIB1045.severity = none # SYSLIB1045: diagnostics for regex source generation | ||||||
| dotnet_naming_rule.abstract_method_should_be_pascal_case.severity = warning | dotnet_naming_rule.abstract_method_should_be_pascal_case.severity = warning | ||||||
|  | |||||||
							
								
								
									
										39
									
								
								Adaptation/.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										39
									
								
								Adaptation/.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							| @ -1,10 +1,43 @@ | |||||||
| { | { | ||||||
|   "configurations": [ |   "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", |       "name": ".NET Core Attach", | ||||||
|       "type": "coreclr", |       "processId": 32760, | ||||||
|       "request": "attach", |       "request": "attach", | ||||||
|       "processId": 8912 |       "type": "coreclr" | ||||||
|     } |     } | ||||||
|   ] |   ] | ||||||
| } | } | ||||||
							
								
								
									
										133
									
								
								Adaptation/.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										133
									
								
								Adaptation/.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							| @ -1,19 +1,134 @@ | |||||||
| { | { | ||||||
|     "version": "2.0.0", |     "version": "2.0.0", | ||||||
|  |     "inputs": [ | ||||||
|  |         { | ||||||
|  |             "default": "Development", | ||||||
|  |             "description": "Which ASP Net Core Environment?", | ||||||
|  |             "id": "ASPNETCORE_ENVIRONMENT", | ||||||
|  |             "options": [ | ||||||
|  |                 "Development", | ||||||
|  |                 "Production" | ||||||
|  |             ], | ||||||
|  |             "type": "pickString" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "default": "{AssemblyTitle}", | ||||||
|  |             "description": "What Assembly Title?", | ||||||
|  |             "id": "AssemblyTitle", | ||||||
|  |             "type": "promptString" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "default": "{Build.BuildId}", | ||||||
|  |             "description": "Which Build BuildId?", | ||||||
|  |             "id": "Build.BuildId", | ||||||
|  |             "type": "promptString" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "default": "{Build.Reason}", | ||||||
|  |             "description": "Which Build Reason?", | ||||||
|  |             "id": "Build.Reason", | ||||||
|  |             "type": "promptString" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "default": "{Build.Repository.Id}", | ||||||
|  |             "description": "Which Build Repository Id?", | ||||||
|  |             "id": "Build.Repository.Id", | ||||||
|  |             "type": "promptString" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "default": "{Build.Repository.Name}", | ||||||
|  |             "description": "Which Build Repository Name?", | ||||||
|  |             "id": "Build.Repository.Name", | ||||||
|  |             "type": "promptString" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "default": "{Build.SourceVersion}", | ||||||
|  |             "description": "Which Build Source Version?", | ||||||
|  |             "id": "Build.SourceVersion", | ||||||
|  |             "type": "promptString" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "default": "Debug", | ||||||
|  |             "description": "Which Configuration?", | ||||||
|  |             "id": "Configuration", | ||||||
|  |             "options": [ | ||||||
|  |                 "Debug", | ||||||
|  |                 "Release" | ||||||
|  |             ], | ||||||
|  |             "type": "pickString" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "default": "net8.0", | ||||||
|  |             "description": "Which Core Version?", | ||||||
|  |             "id": "CoreVersion", | ||||||
|  |             "options": [ | ||||||
|  |                 "net8.0" | ||||||
|  |             ], | ||||||
|  |             "type": "pickString" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "default": "C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/MSBuild/Current/Bin/MSBuild.exe", | ||||||
|  |             "description": "Which MS Build?", | ||||||
|  |             "id": "MSBuild", | ||||||
|  |             "type": "promptString" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "default": "https://artifactory.intra.infineon.com/artifactory/api/nuget/ngt-fi-package-main-vir/", | ||||||
|  |             "description": "Which Nuget Source?", | ||||||
|  |             "id": "NugetSource", | ||||||
|  |             "type": "promptString" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "default": "win-x64", | ||||||
|  |             "description": "Which Runtime?", | ||||||
|  |             "id": "Runtime", | ||||||
|  |             "options": [ | ||||||
|  |                 "win-x64", | ||||||
|  |                 "win-x32", | ||||||
|  |                 "linux-x64", | ||||||
|  |                 "linux-x32" | ||||||
|  |             ], | ||||||
|  |             "type": "pickString" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "default": "L:/", | ||||||
|  |             "description": "Which System DefaultWorkingDirectory?", | ||||||
|  |             "id": "System.DefaultWorkingDirectory", | ||||||
|  |             "options": [ | ||||||
|  |                 "L:/", | ||||||
|  |                 "D:/", | ||||||
|  |                 "C:/" | ||||||
|  |             ], | ||||||
|  |             "type": "pickString" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "default": "v4.8", | ||||||
|  |             "description": "Which Core Target Framework Version?", | ||||||
|  |             "id": "TargetFrameworkVersion", | ||||||
|  |             "options": [ | ||||||
|  |                 "v4.8" | ||||||
|  |             ], | ||||||
|  |             "type": "pickString" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "default": "{UserSecretsId}", | ||||||
|  |             "description": "Which Core User Secrets Id?", | ||||||
|  |             "id": "UserSecretsId", | ||||||
|  |             "type": "promptString" | ||||||
|  |         } | ||||||
|  |     ], | ||||||
|     "tasks": [ |     "tasks": [ | ||||||
|         { |         { | ||||||
|             "label": "Build", |             "label": "Build", | ||||||
|             "command": "dotnet", |             "command": "dotnet", | ||||||
|             "type": "process", |             "type": "process", | ||||||
|             "args": [ |             "args": [ | ||||||
|                 "build", |                 "build" | ||||||
|                 "/property:GenerateFullPaths=true", |  | ||||||
|                 "/consoleloggerparameters:NoSummary" |  | ||||||
|             ], |             ], | ||||||
|             "problemMatcher": "$msCompile" |             "problemMatcher": "$msCompile" | ||||||
|         }, |         }, | ||||||
|         { |         { | ||||||
|             "label": "Test-Debug", |             "label": "Test Debug", | ||||||
|             "command": "dotnet", |             "command": "dotnet", | ||||||
|             "type": "process", |             "type": "process", | ||||||
|             "args": [ |             "args": [ | ||||||
| @ -24,7 +139,7 @@ | |||||||
|             "problemMatcher": "$msCompile" |             "problemMatcher": "$msCompile" | ||||||
|         }, |         }, | ||||||
|         { |         { | ||||||
|             "label": "Test-Release", |             "label": "Test Release", | ||||||
|             "command": "dotnet", |             "command": "dotnet", | ||||||
|             "type": "process", |             "type": "process", | ||||||
|             "args": [ |             "args": [ | ||||||
| @ -50,7 +165,7 @@ | |||||||
|             "problemMatcher": "$msCompile" |             "problemMatcher": "$msCompile" | ||||||
|         }, |         }, | ||||||
|         { |         { | ||||||
|             "label": "Format-Whitespaces", |             "label": "Format Whitespaces", | ||||||
|             "command": "dotnet", |             "command": "dotnet", | ||||||
|             "type": "process", |             "type": "process", | ||||||
|             "args": [ |             "args": [ | ||||||
| @ -87,13 +202,13 @@ | |||||||
|             "problemMatcher": "$msCompile" |             "problemMatcher": "$msCompile" | ||||||
|         }, |         }, | ||||||
|         { |         { | ||||||
|             "label": "Project", |             "label": "Code Project", | ||||||
|             "type": "shell", |             "type": "shell", | ||||||
|             "command": "code ../MET08DDUPSP1TBI.csproj", |             "command": "code ../MET08DDUPSP1TBI.csproj", | ||||||
|             "problemMatcher": [] |             "problemMatcher": [] | ||||||
|         }, |         }, | ||||||
|         { |         { | ||||||
|             "label": "Readme", |             "label": "Code Read Me", | ||||||
|             "type": "shell", |             "type": "shell", | ||||||
|             "command": "code ../README.md", |             "command": "code ../README.md", | ||||||
|             "problemMatcher": [] |             "problemMatcher": [] | ||||||
| @ -113,7 +228,7 @@ | |||||||
|             "problemMatcher": [] |             "problemMatcher": [] | ||||||
|         }, |         }, | ||||||
|         { |         { | ||||||
|             "label": "Git Config", |             "label": "Code Git Config", | ||||||
|             "type": "shell", |             "type": "shell", | ||||||
|             "command": "code ../.git/config", |             "command": "code ../.git/config", | ||||||
|             "problemMatcher": [] |             "problemMatcher": [] | ||||||
|  | |||||||
| @ -186,7 +186,7 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void FileCopy<T>(string reportFullPath, DateTime dateTime, List<T> descriptions) where T : Shared.Properties.IDescription |     private void WriteFile<T>(string reportFullPath, DateTime dateTime, List<T> descriptions) where T : Shared.Properties.IDescription | ||||||
|     { |     { | ||||||
|         bool isDummyRun = false; |         bool isDummyRun = false; | ||||||
|         string successDirectory = string.Empty; |         string successDirectory = string.Empty; | ||||||
| @ -194,24 +194,26 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|         string duplicateDirectory = Path.Combine(_FileConnectorConfiguration.SourceFileLocation, _CellInstanceName); |         string duplicateDirectory = Path.Combine(_FileConnectorConfiguration.SourceFileLocation, _CellInstanceName); | ||||||
|         if (!Directory.Exists(duplicateDirectory)) |         if (!Directory.Exists(duplicateDirectory)) | ||||||
|             _ = Directory.CreateDirectory(duplicateDirectory); |             _ = Directory.CreateDirectory(duplicateDirectory); | ||||||
|         string duplicateFile = Path.Combine(duplicateDirectory, Path.GetFileName(reportFullPath)); |         string duplicateFile = Path.Combine(duplicateDirectory, $"{Path.GetFileName(reportFullPath)}.xml"); | ||||||
|         File.Copy(reportFullPath, duplicateFile, overwrite: true); |         string xml = ProcessDataStandardFormat.GetXml(reportFullPath); | ||||||
|  |         File.WriteAllText(duplicateFile, xml); | ||||||
|         WaitForFileConsumption(dateTime, descriptions, isDummyRun, successDirectory, duplicateDirectory, collection, duplicateFile); |         WaitForFileConsumption(dateTime, descriptions, isDummyRun, successDirectory, duplicateDirectory, collection, duplicateFile); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime) |     private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime) | ||||||
|     { |     { | ||||||
|         Tuple<string, Test[], JsonElement[], List<FileInfo>> results; |         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); |         _Logistics = new Logistics(reportFullPath, processDataStandardFormat); | ||||||
|         SetFileParameterLotIDToLogisticsMID(); |         SetFileParameterLotIDToLogisticsMID(); | ||||||
|         JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat); |         JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(reportFullPath, lines, processDataStandardFormat); | ||||||
|         List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements); |         List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements); | ||||||
|         Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); |         Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); | ||||||
|         if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) |         if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) | ||||||
|             SaveIQSFile(reportFullPath, dateTime, descriptions, tests); |             SaveIQSFile(reportFullPath, dateTime, descriptions, tests); | ||||||
|         if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) |         if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) | ||||||
|             FileCopy(reportFullPath, dateTime, descriptions); |             WriteFile(reportFullPath, dateTime, descriptions); | ||||||
|         results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>()); |         results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>()); | ||||||
|         return results; |         return results; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -88,9 +88,9 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|         string processDataStandardFormatMappingOldColumnNames = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.Old.Column.Names"); |         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 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 processDataStandardFormatMappingColumnIndices = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.Column.Indices"); | ||||||
|         _ProcessDataStandardFormatMapping = GetProcessDataStandardFormatMapping(processDataStandardFormatMappingOldColumnNames, |         _ProcessDataStandardFormatMapping = ProcessDataStandardFormatMapping.Get(processDataStandardFormatMappingOldColumnNames, | ||||||
|                                                                                 processDataStandardFormatMappingNewColumnNames, |                                                                                  processDataStandardFormatMappingNewColumnNames, | ||||||
|                                                                                 processDataStandardFormatMappingColumnIndices); |                                                                                  processDataStandardFormatMappingColumnIndices); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     void IFileRead.Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, Exception exception) |     void IFileRead.Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, Exception exception) | ||||||
| @ -169,46 +169,6 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|         return results; |         return results; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static ProcessDataStandardFormatMapping GetProcessDataStandardFormatMapping(string processDataStandardFormatMappingOldColumnNames, string processDataStandardFormatMappingNewColumnNames, string processDataStandardFormatMappingColumnIndices) |  | ||||||
|     { |  | ||||||
|         ProcessDataStandardFormatMapping result; |  | ||||||
|         string[] segmentsB; |  | ||||||
|         List<string> distinct = new(); |  | ||||||
|         Dictionary<string, string> keyValuePairs = new(); |  | ||||||
|         string args4 = "Time,HeaderUniqueId,UniqueId,Date,SP101"; |  | ||||||
|         string args5 = ",SP101"; |  | ||||||
|         string args6 = ",SP101"; |  | ||||||
|         string args7 = "Test|EventId,Recipe|Session,|SP101"; |  | ||||||
|         // string args8 = "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"; |  | ||||||
|         // string args9 = "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"; |  | ||||||
|         // string args10 = "0,1,2,319,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"; |  | ||||||
|         string[] segments = args7.Split(','); |  | ||||||
|         ReadOnlyCollection<string> ignoreColumns = new(args4.Split(',')); |  | ||||||
|         ReadOnlyCollection<string> backfillColumns = new(args5.Split(',')); |  | ||||||
|         ReadOnlyCollection<string> indexOnlyColumns = new(args6.Split(',')); |  | ||||||
|         ReadOnlyCollection<string> newColumnNames = new(processDataStandardFormatMappingNewColumnNames.Split(',')); |  | ||||||
|         ReadOnlyCollection<string> oldColumnNames = new(processDataStandardFormatMappingOldColumnNames.Split(',')); |  | ||||||
|         ReadOnlyCollection<int> columnIndices = new(processDataStandardFormatMappingColumnIndices.Split(',').Select(int.Parse).ToArray()); |  | ||||||
|         foreach (string segment in segments) |  | ||||||
|         { |  | ||||||
|             segmentsB = segment.Split('|'); |  | ||||||
|             if (segmentsB.Length != 2) |  | ||||||
|                 continue; |  | ||||||
|             if (distinct.Contains(segmentsB[0])) |  | ||||||
|                 continue; |  | ||||||
|             distinct.Add(segmentsB[0]); |  | ||||||
|             keyValuePairs.Add(segmentsB[0], segmentsB[1]); |  | ||||||
|         } |  | ||||||
|         result = new(backfillColumns: backfillColumns, |  | ||||||
|                      columnIndices: columnIndices, |  | ||||||
|                      newColumnNames: newColumnNames, |  | ||||||
|                      ignoreColumns: ignoreColumns, |  | ||||||
|                      indexOnlyColumns: indexOnlyColumns, |  | ||||||
|                      keyValuePairs: new(keyValuePairs), |  | ||||||
|                      oldColumnNames: oldColumnNames); |  | ||||||
|         return result; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private static ReadOnlyCollection<PreWith> GetPreWithCollection(ReadOnlyCollection<Pre> preCollection) |     private static ReadOnlyCollection<PreWith> GetPreWithCollection(ReadOnlyCollection<Pre> preCollection) | ||||||
|     { |     { | ||||||
|         List<PreWith> results = new(); |         List<PreWith> results = new(); | ||||||
| @ -313,8 +273,13 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|                 continue; |                 continue; | ||||||
|             if (!_StaticRuns.TryGetValue(_Logistics.Sequence, out List<Shared.Metrology.WS.Results>? wsResults)) |             if (!_StaticRuns.TryGetValue(_Logistics.Sequence, out List<Shared.Metrology.WS.Results>? wsResults)) | ||||||
|                 wsResults = null; |                 wsResults = null; | ||||||
|             ProcessDataStandardFormat.Write(preWith.CheckFile, processDataStandardFormat, wsResults); |             if (processDataStandardFormat.InputPDSF is null) | ||||||
|             File.Delete(preWith.MatchingFile); |                 File.Move(preWith.MatchingFile, preWith.CheckFile); | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 ProcessDataStandardFormat.Write(preWith.CheckFile, processDataStandardFormat, wsResults); | ||||||
|  |                 File.Delete(preWith.MatchingFile); | ||||||
|  |             } | ||||||
|             if (Directory.Exists(preWith.NoWaitDirectory)) |             if (Directory.Exists(preWith.NoWaitDirectory)) | ||||||
|             { |             { | ||||||
|                 post = new(preWith.CheckFile, preWith.ErrFile); |                 post = new(preWith.CheckFile, preWith.ErrFile); | ||||||
|  | |||||||
| @ -110,7 +110,7 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|         return results; |         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; |         string duplicateFile; | ||||||
|         bool isDummyRun = false; |         bool isDummyRun = false; | ||||||
| @ -119,15 +119,6 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|         if (!Directory.Exists(duplicateDirectory)) |         if (!Directory.Exists(duplicateDirectory)) | ||||||
|             _ = Directory.CreateDirectory(duplicateDirectory); |             _ = Directory.CreateDirectory(duplicateDirectory); | ||||||
|         string successDirectory = _FileConnectorConfiguration.AlternateTargetFolder; |         string successDirectory = _FileConnectorConfiguration.AlternateTargetFolder; | ||||||
|         if (!Directory.Exists(Path.Combine(duplicateDirectory, "1"))) |  | ||||||
|         { |  | ||||||
|             string parentParent = GetParentParent(_FileConnectorConfiguration.SourceFileLocation); |  | ||||||
|             if (parentParent.Contains(_CellInstanceName)) |  | ||||||
|                 parentParent = Path.GetDirectoryName(parentParent); |  | ||||||
|             duplicateDirectory = Path.Combine(parentParent, "Data"); |  | ||||||
|             if (!Directory.Exists(duplicateDirectory)) |  | ||||||
|                 _ = Directory.CreateDirectory(duplicateDirectory); |  | ||||||
|         } |  | ||||||
|         if (descriptions.Count == 0 || tests.Length == 0) |         if (descriptions.Count == 0 || tests.Length == 0) | ||||||
|             duplicateFile = Path.Combine(duplicateDirectory, Path.GetFileName(reportFullPath)); |             duplicateFile = Path.Combine(duplicateDirectory, Path.GetFileName(reportFullPath)); | ||||||
|         else |         else | ||||||
| @ -152,7 +143,7 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|             else |             else | ||||||
|                 duplicateFile = Path.Combine(duplicateDirectory, $"{$"Viewer {subgroupId}".TrimEnd()} {fileName.Replace("Viewer", string.Empty)}"); |                 duplicateFile = Path.Combine(duplicateDirectory, $"{$"Viewer {subgroupId}".TrimEnd()} {fileName.Replace("Viewer", string.Empty)}"); | ||||||
|             string weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); |             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) |         if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) | ||||||
|         { |         { | ||||||
| @ -164,14 +155,15 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|     private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime) |     private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime) | ||||||
|     { |     { | ||||||
|         Tuple<string, Test[], JsonElement[], List<FileInfo>> results; |         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); |         _Logistics = new Logistics(reportFullPath, processDataStandardFormat); | ||||||
|         SetFileParameterLotIDToLogisticsMID(); |         SetFileParameterLotIDToLogisticsMID(); | ||||||
|         JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat); |         JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(reportFullPath, lines, processDataStandardFormat); | ||||||
|         List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements); |         List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements); | ||||||
|         Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); |         Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); | ||||||
|         if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) |         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>()); |         results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>()); | ||||||
|         return results; |         return results; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -325,74 +325,18 @@ public class FromIQS | |||||||
|         return new(result, count, commandText); |         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 fileName = Path.GetFileName(reportFullPath); | ||||||
|         string json = GetJson(logistics, processDataStandardFormat, description); |  | ||||||
|         string? ecPathRoot = Path.GetPathRoot(openInsightApiECDirectory); |         string? ecPathRoot = Path.GetPathRoot(openInsightApiECDirectory); | ||||||
|         bool ecExists = ecPathRoot is not null && Directory.Exists(ecPathRoot); |         bool ecExists = ecPathRoot is not null && Directory.Exists(ecPathRoot); | ||||||
|         string weekYear = $"{logistics.DateTimeFromSequence:yyyy}_Week_{weekOfYear}"; |         string weekYear = $"{logistics.DateTimeFromSequence:yyyy}_Week_{weekOfYear}"; | ||||||
|         string ecDirectory = Path.Combine(openInsightApiECDirectory, weekYear, $"-{description.PSN}", $"-{description.Reactor}", $"-{description.RDS}", $"-{subGroupId}"); |         string ecDirectory = Path.Combine(openInsightApiECDirectory, weekYear, $"-{description.PSN}", $"-{description.Reactor}", $"-{description.RDS}", $"-{subGroupId}"); | ||||||
|         if (ecExists && !Directory.Exists(ecDirectory)) |         if (ecExists && !Directory.Exists(ecDirectory)) | ||||||
|             _ = Directory.CreateDirectory(ecDirectory); |             _ = Directory.CreateDirectory(ecDirectory); | ||||||
|         checkFile = Path.Combine(ecDirectory, fileName); |         string checkFile = Path.Combine(ecDirectory, fileName); | ||||||
|         if (ecExists && !File.Exists(checkFile)) |         if (ecExists && !File.Exists(checkFile)) | ||||||
|             File.Copy(reportFullPath, 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) |     private static string GetCommandText(string[] iqsCopyValues) | ||||||
|  | |||||||
| @ -110,10 +110,10 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|         return results; |         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; |         string checkDirectory; | ||||||
|         WSRequest wsRequest = new(this, _Logistics, descriptions); |         WSRequest wsRequest = new(this, _Logistics, jsonElements, descriptions); | ||||||
|         int weekOfYear = _Calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday); |         int weekOfYear = _Calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday); | ||||||
|         string directory = Path.Combine(_OpenInsightMetrologyViewerFileShare, dateTime.Year.ToString(), $"WW{weekOfYear:00}"); |         string directory = Path.Combine(_OpenInsightMetrologyViewerFileShare, dateTime.Year.ToString(), $"WW{weekOfYear:00}"); | ||||||
|         checkDirectory = Path.Combine(directory, _Logistics.Sequence.ToString()); |         checkDirectory = Path.Combine(directory, _Logistics.Sequence.ToString()); | ||||||
| @ -139,14 +139,15 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|     private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime) |     private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime) | ||||||
|     { |     { | ||||||
|         Tuple<string, Test[], JsonElement[], List<FileInfo>> results; |         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); |         _Logistics = new Logistics(reportFullPath, processDataStandardFormat); | ||||||
|         SetFileParameterLotIDToLogisticsMID(); |         SetFileParameterLotIDToLogisticsMID(); | ||||||
|         JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat); |         JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(reportFullPath, lines, processDataStandardFormat); | ||||||
|         List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements); |         List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements); | ||||||
|         Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); |         Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); | ||||||
|         if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) |         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>()); |         results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>()); | ||||||
|         return results; |         return results; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -6,6 +6,7 @@ using System.Collections.Generic; | |||||||
| using System.Diagnostics; | using System.Diagnostics; | ||||||
| using System.IO; | using System.IO; | ||||||
| using System.Linq; | using System.Linq; | ||||||
|  | using System.Text.Json; | ||||||
|  |  | ||||||
| namespace Adaptation.FileHandlers.OpenInsightMetrologyViewer; | namespace Adaptation.FileHandlers.OpenInsightMetrologyViewer; | ||||||
|  |  | ||||||
| @ -16,8 +17,17 @@ public class WSRequest | |||||||
|     // |     // | ||||||
|  |  | ||||||
|     public int Id { get; set; } |     public int Id { get; set; } | ||||||
|  |     public string AttemptCounter { get; set; } | ||||||
|     public string CellName { get; set; } |     public string CellName { get; set; } | ||||||
|     public string Date { 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 LotID { get; set; } | ||||||
|     public string Operator { get; set; } |     public string Operator { get; set; } | ||||||
|     public string PSN { get; set; } |     public string PSN { get; set; } | ||||||
| @ -26,13 +36,6 @@ public class WSRequest | |||||||
|     public string Recipe { get; set; } |     public string Recipe { get; set; } | ||||||
|     public string Session { get; set; } |     public string Session { get; set; } | ||||||
|     public string UniqueID { 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 DcnAreaCntStDev { get; set; } | ||||||
|     public string DcnAreaMax { get; set; } |     public string DcnAreaMax { get; set; } | ||||||
|     public string DcnAreaMean { get; set; } |     public string DcnAreaMean { get; set; } | ||||||
| @ -271,7 +274,7 @@ public class WSRequest | |||||||
|     [Obsolete("For json")] public WSRequest() { } |     [Obsolete("For json")] public WSRequest() { } | ||||||
|  |  | ||||||
| #pragma warning disable IDE0060 | #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 | #pragma warning restore IDE0060 | ||||||
|     { |     { | ||||||
|         Id = -1; |         Id = -1; | ||||||
| @ -283,252 +286,254 @@ public class WSRequest | |||||||
|             UniqueID = x.UniqueId; |             UniqueID = x.UniqueId; | ||||||
|             Date = x.Date; |             Date = x.Date; | ||||||
|             Reactor = x.Reactor; |             Reactor = x.Reactor; | ||||||
|             LotID = x.Lot; |             LotID = x.Lot; // different name | ||||||
|             Session = x.Session; |             Session = x.Session; | ||||||
|  |             AttemptCounter = x.AttemptCounter; | ||||||
|  |             IndexOf = x.IndexOf; | ||||||
|             DcnAllMin = x.DcnAllMin; |             DcnAllMin = x.DcnAllMin; | ||||||
|             DcnAllMax = x.DcnAllMax; |             DcnAllMax = x.DcnAllMax; | ||||||
|             DcnAllMean = x.DcnAllMean; |             DcnAllMean = x.DcnAllMean; | ||||||
|             DcnAllStDev = x.DcnAllStdDev; |             DcnAllStDev = x.DcnAllStdDev; // different name | ||||||
|             DcnLpdMin = x.DcnLpdMin; |             DcnLpdMin = x.DcnLpdMin; | ||||||
|             DcnLpdMax = x.DcnLpdMax; |             DcnLpdMax = x.DcnLpdMax; | ||||||
|             DcnLpdMean = x.DcnLpdMean; |             DcnLpdMean = x.DcnLpdMean; | ||||||
|             DcnLpdStDev = x.DcnLpdStdDev; |             DcnLpdStDev = x.DcnLpdStdDev; // different name | ||||||
|             DcnLpdNMin = x.DcnLpdNMin; |             DcnLpdNMin = x.DcnLpdNMin; | ||||||
|             DcnLpdNMax = x.DcnLpdNMax; |             DcnLpdNMax = x.DcnLpdNMax; | ||||||
|             DcnLpdNMean = x.DcnLpdNMean; |             DcnLpdNMean = x.DcnLpdNMean; | ||||||
|             DcnLpdNStDev = x.DcnLpdNStdDev; |             DcnLpdNStDev = x.DcnLpdNStdDev;  // different name | ||||||
|             DcnLpdESMin = x.DcnLpdESMin; |             DcnLpdESMin = x.DcnLpdESMin; | ||||||
|             DcnLpdESMax = x.DcnLpdESMax; |             DcnLpdESMax = x.DcnLpdESMax; | ||||||
|             DcnLpdESMean = x.DcnLpdESMean; |             DcnLpdESMean = x.DcnLpdESMean; | ||||||
|             DcnLpdESStDev = x.DcnLpdESStdDev; |             DcnLpdESStDev = x.DcnLpdESStdDev; // different name | ||||||
|             DcnMicroScrMin = x.DcnMicroScrMin; |             DcnMicroScrMin = x.DcnMicroScrMin; | ||||||
|             DcnMicroScrMax = x.DcnMicroScrMax; |             DcnMicroScrMax = x.DcnMicroScrMax; | ||||||
|             DcnMicroScrMean = x.DcnMicroScrMean; |             DcnMicroScrMean = x.DcnMicroScrMean; | ||||||
|             DcnMicroScrStDev = x.DcnMicroScrStdDev; |             DcnMicroScrStDev = x.DcnMicroScrStdDev; // different name | ||||||
|             DcnScrMin = x.DcnScrMin; |             DcnScrMin = x.DcnScrMin; | ||||||
|             DcnScrMax = x.DcnScrMax; |             DcnScrMax = x.DcnScrMax; | ||||||
|             DcnScrMean = x.DcnScrMean; |             DcnScrMean = x.DcnScrMean; | ||||||
|             DcnScrStDev = x.DcnScrStdDev; |             DcnScrStDev = x.DcnScrStdDev; // different name | ||||||
|             DcnSlipMin = x.DcnSlipMin; |             DcnSlipMin = x.DcnSlipMin; | ||||||
|             DcnSlipMax = x.DcnSlipMax; |             DcnSlipMax = x.DcnSlipMax; | ||||||
|             DcnSlipMean = x.DcnSlipMean; |             DcnSlipMean = x.DcnSlipMean; | ||||||
|             DcnSlipStDev = x.DcnSlipStdDev; |             DcnSlipStDev = x.DcnSlipStdDev; // different name | ||||||
|             DcnAreaCntMin = x.DcnAreaCountMin; |             DcnAreaCntMin = x.DcnAreaCountMin; // different name | ||||||
|             DcnAreaCntMax = x.DcnAreaCountMax; |             DcnAreaCntMax = x.DcnAreaCountMax; // different name | ||||||
|             DcnAreaCntMean = x.DcnAreaCountMean; |             DcnAreaCntMean = x.DcnAreaCountMean; // different name | ||||||
|             DcnAreaCntStDev = x.DcnAreaCountStdDev; |             DcnAreaCntStDev = x.DcnAreaCountStdDev;  // different name | ||||||
|             DcnAreaMin = x.DcnAreaMin; |             DcnAreaMin = x.DcnAreaMin; | ||||||
|             DcnAreaMax = x.DcnAreaMax; |             DcnAreaMax = x.DcnAreaMax; | ||||||
|             DcnAreaMean = x.DcnAreaMean; |             DcnAreaMean = x.DcnAreaMean; | ||||||
|             DcnAreaStDev = x.DcnAreaStdDev; |             DcnAreaStDev = x.DcnAreaStdDev; // different name | ||||||
|             DcnHazeAvgMin = x.DcnHazeAvgMin; |             DcnHazeAvgMin = x.DcnHazeAvgMin; | ||||||
|             DcnHazeAvgMax = x.DcnHazeAvgMax; |             DcnHazeAvgMax = x.DcnHazeAvgMax; | ||||||
|             DcnHazeAvgMean = x.DcnHazeAvgMean; |             DcnHazeAvgMean = x.DcnHazeAvgMean; | ||||||
|             DcnHazeAvgStDev = x.DcnHazeAvgStdDev; |             DcnHazeAvgStDev = x.DcnHazeAvgStdDev; // different name | ||||||
|             DcnHazeMedMin = x.DcnHazeMedianMin; |             DcnHazeMedMin = x.DcnHazeMedianMin; // different name | ||||||
|             DcnHazeMedMax = x.DcnHazeMedianMax; |             DcnHazeMedMax = x.DcnHazeMedianMax; // different name | ||||||
|             DcnHazeMedMean = x.DcnHazeMedianMean; |             DcnHazeMedMean = x.DcnHazeMedianMean; // different name | ||||||
|             DcnHazeMedStDev = x.DcnHazeMedianStdDev; |             DcnHazeMedStDev = x.DcnHazeMedianStdDev; // different name | ||||||
|             DcnHazeStDevMin = x.DcnHazeStdDevMin; |             DcnHazeStDevMin = x.DcnHazeStdDevMin; // different name | ||||||
|             DcnHazeStDevMax = x.DcnHazeStdDevMax; |             DcnHazeStDevMax = x.DcnHazeStdDevMax; // different name | ||||||
|             DcnHazeStDevMean = x.DcnHazeStdDevMean; |             DcnHazeStDevMean = x.DcnHazeStdDevMean; // different name | ||||||
|             DcnHazeStDevStDev = x.DcnHazeStdDevStdDev; |             DcnHazeStDevStDev = x.DcnHazeStdDevStdDev; // different name | ||||||
|             DcnBin1Min = x.DcnBin1Min; |             DcnBin1Min = x.DcnBin1Min; | ||||||
|             DcnBin1Max = x.DcnBin1Max; |             DcnBin1Max = x.DcnBin1Max; | ||||||
|             DcnBin1Mean = x.DcnBin1Mean; |             DcnBin1Mean = x.DcnBin1Mean; | ||||||
|             DcnBin1StDev = x.DcnBin1StdDev; |             DcnBin1StDev = x.DcnBin1StdDev; // different name | ||||||
|             DcnBin2Min = x.DcnBin2Min; |             DcnBin2Min = x.DcnBin2Min; | ||||||
|             DcnBin2Max = x.DcnBin2Max; |             DcnBin2Max = x.DcnBin2Max; | ||||||
|             DcnBin2Mean = x.DcnBin2Mean; |             DcnBin2Mean = x.DcnBin2Mean; | ||||||
|             DcnBin2StDev = x.DcnBin2StdDev; |             DcnBin2StDev = x.DcnBin2StdDev; // different name | ||||||
|             DcnBin3Min = x.DcnBin3Min; |             DcnBin3Min = x.DcnBin3Min; | ||||||
|             DcnBin3Max = x.DcnBin3Max; |             DcnBin3Max = x.DcnBin3Max; | ||||||
|             DcnBin3Mean = x.DcnBin3Mean; |             DcnBin3Mean = x.DcnBin3Mean; | ||||||
|             DcnBin3StDev = x.DcnBin3StdDev; |             DcnBin3StDev = x.DcnBin3StdDev; // different name | ||||||
|             DcnBin4Min = x.DcnBin4Min; |             DcnBin4Min = x.DcnBin4Min; | ||||||
|             DcnBin4Max = x.DcnBin4Max; |             DcnBin4Max = x.DcnBin4Max; | ||||||
|             DcnBin4Mean = x.DcnBin4Mean; |             DcnBin4Mean = x.DcnBin4Mean; | ||||||
|             DcnBin4StDev = x.DcnBin4StdDev; |             DcnBin4StDev = x.DcnBin4StdDev; // different name | ||||||
|             DcnBin5Min = x.DcnBin5Min; |             DcnBin5Min = x.DcnBin5Min; | ||||||
|             DcnBin5Max = x.DcnBin5Max; |             DcnBin5Max = x.DcnBin5Max; | ||||||
|             DcnBin5Mean = x.DcnBin5Mean; |             DcnBin5Mean = x.DcnBin5Mean; | ||||||
|             DcnBin5StDev = x.DcnBin5StdDev; |             DcnBin5StDev = x.DcnBin5StdDev; // different name | ||||||
|             DcnBin6Min = x.DcnBin6Min; |             DcnBin6Min = x.DcnBin6Min; | ||||||
|             DcnBin6Max = x.DcnBin6Max; |             DcnBin6Max = x.DcnBin6Max; | ||||||
|             DcnBin6Mean = x.DcnBin6Mean; |             DcnBin6Mean = x.DcnBin6Mean; | ||||||
|             DcnBin6StDev = x.DcnBin6StdDev; |             DcnBin6StDev = x.DcnBin6StdDev; // different name | ||||||
|             DcnBin7Min = x.DcnBin7Min; |             DcnBin7Min = x.DcnBin7Min; | ||||||
|             DcnBin7Max = x.DcnBin7Max; |             DcnBin7Max = x.DcnBin7Max; | ||||||
|             DcnBin7Mean = x.DcnBin7Mean; |             DcnBin7Mean = x.DcnBin7Mean; | ||||||
|             DcnBin7StDev = x.DcnBin7StdDev; |             DcnBin7StDev = x.DcnBin7StdDev; // different name | ||||||
|             DcnBin8Min = x.DcnBin8Min; |             DcnBin8Min = x.DcnBin8Min; | ||||||
|             DcnBin8Max = x.DcnBin8Max; |             DcnBin8Max = x.DcnBin8Max; | ||||||
|             DcnBin8Mean = x.DcnBin8Mean; |             DcnBin8Mean = x.DcnBin8Mean; | ||||||
|             DcnBin8StDev = x.DcnBin8StdDev; |             DcnBin8StDev = x.DcnBin8StdDev; // different name | ||||||
|             DwnAllMin = x.DwnAllMin; |             DwnAllMin = x.DwnAllMin; | ||||||
|             DwnAllMax = x.DwnAllMax; |             DwnAllMax = x.DwnAllMax; | ||||||
|             DwnAllMean = x.DwnAllMean; |             DwnAllMean = x.DwnAllMean; | ||||||
|             DwnAllStDev = x.DwnAllStdDev; |             DwnAllStDev = x.DwnAllStdDev; // different name | ||||||
|             DwnLpdMin = x.DwnLpdMin; |             DwnLpdMin = x.DwnLpdMin; | ||||||
|             DwnLpdMax = x.DwnLpdMax; |             DwnLpdMax = x.DwnLpdMax; | ||||||
|             DwnLpdMean = x.DwnLpdMean; |             DwnLpdMean = x.DwnLpdMean; | ||||||
|             DwnLpdStDev = x.DwnLpdStdDev; |             DwnLpdStDev = x.DwnLpdStdDev; // different name | ||||||
|             DwnLpdNMin = x.DwnLpdNMin; |             DwnLpdNMin = x.DwnLpdNMin; | ||||||
|             DwnLpdNMax = x.DwnLpdNMax; |             DwnLpdNMax = x.DwnLpdNMax; | ||||||
|             DwnLpdNMean = x.DwnLpdNMean; |             DwnLpdNMean = x.DwnLpdNMean; | ||||||
|             DwnLpdNStDev = x.DwnLpdNStdDev; |             DwnLpdNStDev = x.DwnLpdNStdDev; // different name | ||||||
|             DwnLpdESMin = x.DwnLpdESMin; |             DwnLpdESMin = x.DwnLpdESMin; | ||||||
|             DwnLpdESMax = x.DwnLpdESMax; |             DwnLpdESMax = x.DwnLpdESMax; | ||||||
|             DwnLpdESMean = x.DwnLpdESMean; |             DwnLpdESMean = x.DwnLpdESMean; | ||||||
|             DwnLpdESStDev = x.DwnLpdESStdDev; |             DwnLpdESStDev = x.DwnLpdESStdDev; // different name | ||||||
|             DwnMicroScrMin = x.DwnMicroScrMin; |             DwnMicroScrMin = x.DwnMicroScrMin; | ||||||
|             DwnMicroScrMax = x.DwnMicroScrMax; |             DwnMicroScrMax = x.DwnMicroScrMax; | ||||||
|             DwnMicroScrMean = x.DwnMicroScrMean; |             DwnMicroScrMean = x.DwnMicroScrMean; | ||||||
|             DwnMicroScrStDev = x.DwnMicroScrStdDev; |             DwnMicroScrStDev = x.DwnMicroScrStdDev; // different name | ||||||
|             DwnScrMin = x.DwnScrMin; |             DwnScrMin = x.DwnScrMin; | ||||||
|             DwnScrMax = x.DwnScrMax; |             DwnScrMax = x.DwnScrMax; | ||||||
|             DwnScrMean = x.DwnScrMean; |             DwnScrMean = x.DwnScrMean; | ||||||
|             DwnScrStDev = x.DwnScrStdDev; |             DwnScrStDev = x.DwnScrStdDev; // different name | ||||||
|             DwnSlipMin = x.DwnSlipMin; |             DwnSlipMin = x.DwnSlipMin; | ||||||
|             DwnSlipMax = x.DwnSlipMax; |             DwnSlipMax = x.DwnSlipMax; | ||||||
|             DwnSlipMean = x.DwnSlipMean; |             DwnSlipMean = x.DwnSlipMean; | ||||||
|             DwnSlipStDev = x.DwnSlipStdDev; |             DwnSlipStDev = x.DwnSlipStdDev; // different name | ||||||
|             DwnAreaCntMin = x.DwnAreaCountMin; |             DwnAreaCntMin = x.DwnAreaCountMin; // different name | ||||||
|             DwnAreaCntMax = x.DwnAreaCountMax; |             DwnAreaCntMax = x.DwnAreaCountMax; // different name | ||||||
|             DwnAreaCntMean = x.DwnAreaCountMean; |             DwnAreaCntMean = x.DwnAreaCountMean; // different name | ||||||
|             DwnAreaCntStDev = x.DwnAreaCountStdDev; |             DwnAreaCntStDev = x.DwnAreaCountStdDev;  // different name | ||||||
|             DwnAreaMin = x.DwnAreaMin; |             DwnAreaMin = x.DwnAreaMin; | ||||||
|             DwnAreaMax = x.DwnAreaMax; |             DwnAreaMax = x.DwnAreaMax; | ||||||
|             DwnAreaMean = x.DwnAreaMean; |             DwnAreaMean = x.DwnAreaMean; | ||||||
|             DwnAreaStDev = x.DwnAreaStdDev; |             DwnAreaStDev = x.DwnAreaStdDev; // different name | ||||||
|             DwnHazeAvgMin = x.DwnHazeAvgMin; |             DwnHazeAvgMin = x.DwnHazeAvgMin; | ||||||
|             DwnHazeAvgMax = x.DwnHazeAvgMax; |             DwnHazeAvgMax = x.DwnHazeAvgMax; | ||||||
|             DwnHazeAvgMean = x.DwnHazeAvgMean; |             DwnHazeAvgMean = x.DwnHazeAvgMean; | ||||||
|             DwnHazeAvgStDev = x.DwnHazeAvgStdDev; |             DwnHazeAvgStDev = x.DwnHazeAvgStdDev; // different name | ||||||
|             DwnHazeMedMin = x.DwnHazeMedianMin; |             DwnHazeMedMin = x.DwnHazeMedianMin; // different name | ||||||
|             DwnHazeMedMax = x.DwnHazeMedianMax; |             DwnHazeMedMax = x.DwnHazeMedianMax; // different name | ||||||
|             DwnHazeMedMean = x.DwnHazeMedianMean; |             DwnHazeMedMean = x.DwnHazeMedianMean; // different name | ||||||
|             DwnHazeMedStDev = x.DwnHazeMedianStdDev; |             DwnHazeMedStDev = x.DwnHazeMedianStdDev; // different name | ||||||
|             DwnHazeStDevMin = x.DwnHazeStdDevMin; |             DwnHazeStDevMin = x.DwnHazeStdDevMin; // different name | ||||||
|             DwnHazeStDevMax = x.DwnHazeStdDevMax; |             DwnHazeStDevMax = x.DwnHazeStdDevMax; // different name | ||||||
|             DwnHazeStDevMean = x.DwnHazeStdDevMean; |             DwnHazeStDevMean = x.DwnHazeStdDevMean; // different name | ||||||
|             DwnHazeStDevStDev = x.DwnHazeStdDevStdDev; |             DwnHazeStDevStDev = x.DwnHazeStdDevStdDev; // different name | ||||||
|             DwnBin1Min = x.DwnBin1Min; |             DwnBin1Min = x.DwnBin1Min; | ||||||
|             DwnBin1Max = x.DwnBin1Max; |             DwnBin1Max = x.DwnBin1Max; | ||||||
|             DwnBin1Mean = x.DwnBin1Mean; |             DwnBin1Mean = x.DwnBin1Mean; | ||||||
|             DwnBin1StDev = x.DwnBin1StdDev; |             DwnBin1StDev = x.DwnBin1StdDev; // different name | ||||||
|             DwnBin2Min = x.DwnBin2Min; |             DwnBin2Min = x.DwnBin2Min; | ||||||
|             DwnBin2Max = x.DwnBin2Max; |             DwnBin2Max = x.DwnBin2Max; | ||||||
|             DwnBin2Mean = x.DwnBin2Mean; |             DwnBin2Mean = x.DwnBin2Mean; | ||||||
|             DwnBin2StDev = x.DwnBin2StdDev; |             DwnBin2StDev = x.DwnBin2StdDev; // different name | ||||||
|             DwnBin3Min = x.DwnBin3Min; |             DwnBin3Min = x.DwnBin3Min; | ||||||
|             DwnBin3Max = x.DwnBin3Max; |             DwnBin3Max = x.DwnBin3Max; | ||||||
|             DwnBin3Mean = x.DwnBin3Mean; |             DwnBin3Mean = x.DwnBin3Mean; | ||||||
|             DwnBin3StDev = x.DwnBin3StdDev; |             DwnBin3StDev = x.DwnBin3StdDev; // different name | ||||||
|             DwnBin4Min = x.DwnBin4Min; |             DwnBin4Min = x.DwnBin4Min; | ||||||
|             DwnBin4Max = x.DwnBin4Max; |             DwnBin4Max = x.DwnBin4Max; | ||||||
|             DwnBin4Mean = x.DwnBin4Mean; |             DwnBin4Mean = x.DwnBin4Mean; | ||||||
|             DwnBin4StDev = x.DwnBin4StdDev; |             DwnBin4StDev = x.DwnBin4StdDev; // different name | ||||||
|             DwnBin5Min = x.DwnBin5Min; |             DwnBin5Min = x.DwnBin5Min; | ||||||
|             DwnBin5Max = x.DwnBin5Max; |             DwnBin5Max = x.DwnBin5Max; | ||||||
|             DwnBin5Mean = x.DwnBin5Mean; |             DwnBin5Mean = x.DwnBin5Mean; | ||||||
|             DwnBin5StDev = x.DwnBin5StdDev; |             DwnBin5StDev = x.DwnBin5StdDev; // different name | ||||||
|             DwnBin6Min = x.DwnBin6Min; |             DwnBin6Min = x.DwnBin6Min; | ||||||
|             DwnBin6Max = x.DwnBin6Max; |             DwnBin6Max = x.DwnBin6Max; | ||||||
|             DwnBin6Mean = x.DwnBin6Mean; |             DwnBin6Mean = x.DwnBin6Mean; | ||||||
|             DwnBin6StDev = x.DwnBin6StdDev; |             DwnBin6StDev = x.DwnBin6StdDev; // different name | ||||||
|             DwnBin7Min = x.DwnBin7Min; |             DwnBin7Min = x.DwnBin7Min; | ||||||
|             DwnBin7Max = x.DwnBin7Max; |             DwnBin7Max = x.DwnBin7Max; | ||||||
|             DwnBin7Mean = x.DwnBin7Mean; |             DwnBin7Mean = x.DwnBin7Mean; | ||||||
|             DwnBin7StDev = x.DwnBin7StdDev; |             DwnBin7StDev = x.DwnBin7StdDev; // different name | ||||||
|             DwnBin8Min = x.DwnBin8Min; |             DwnBin8Min = x.DwnBin8Min; | ||||||
|             DwnBin8Max = x.DwnBin8Max; |             DwnBin8Max = x.DwnBin8Max; | ||||||
|             DwnBin8Mean = x.DwnBin8Mean; |             DwnBin8Mean = x.DwnBin8Mean; | ||||||
|             DwnBin8StDev = x.DwnBin8StdDev; |             DwnBin8StDev = x.DwnBin8StdDev; // different name | ||||||
|             DnnAllMin = x.DnnAllMin; |             DnnAllMin = x.DnnAllMin; | ||||||
|             DnnAllMax = x.DnnAllMax; |             DnnAllMax = x.DnnAllMax; | ||||||
|             DnnAllMean = x.DnnAllMean; |             DnnAllMean = x.DnnAllMean; | ||||||
|             DnnAllStDev = x.DnnAllStdDev; |             DnnAllStDev = x.DnnAllStdDev; // different name | ||||||
|             DnnLpdMin = x.DnnLpdMin; |             DnnLpdMin = x.DnnLpdMin; | ||||||
|             DnnLpdMax = x.DnnLpdMax; |             DnnLpdMax = x.DnnLpdMax; | ||||||
|             DnnLpdMean = x.DnnLpdMean; |             DnnLpdMean = x.DnnLpdMean; | ||||||
|             DnnLpdStDev = x.DnnLpdStdDev; |             DnnLpdStDev = x.DnnLpdStdDev; // different name | ||||||
|             DnnLpdNMin = x.DnnLpdNMin; |             DnnLpdNMin = x.DnnLpdNMin; | ||||||
|             DnnLpdNMax = x.DnnLpdNMax; |             DnnLpdNMax = x.DnnLpdNMax; | ||||||
|             DnnLpdNMean = x.DnnLpdNMean; |             DnnLpdNMean = x.DnnLpdNMean; | ||||||
|             DnnLpdNStDev = x.DnnLpdNStdDev; |             DnnLpdNStDev = x.DnnLpdNStdDev; // different name | ||||||
|             DnnLpdESMin = x.DnnLpdESMin; |             DnnLpdESMin = x.DnnLpdESMin; | ||||||
|             DnnLpdESMax = x.DnnLpdESMax; |             DnnLpdESMax = x.DnnLpdESMax; | ||||||
|             DnnLpdESMean = x.DnnLpdESMean; |             DnnLpdESMean = x.DnnLpdESMean; | ||||||
|             DnnLpdESStDev = x.DnnLpdESStdDev; |             DnnLpdESStDev = x.DnnLpdESStdDev; // different name | ||||||
|             DnnMicroScrMin = x.DnnMicroScrMin; |             DnnMicroScrMin = x.DnnMicroScrMin; | ||||||
|             DnnMicroScrMax = x.DnnMicroScrMax; |             DnnMicroScrMax = x.DnnMicroScrMax; | ||||||
|             DnnMicroScrMean = x.DnnMicroScrMean; |             DnnMicroScrMean = x.DnnMicroScrMean; | ||||||
|             DnnMicroScrStDev = x.DnnMicroScrStdDev; |             DnnMicroScrStDev = x.DnnMicroScrStdDev; // different name | ||||||
|             DnnScrMin = x.DnnScrMin; |             DnnScrMin = x.DnnScrMin; | ||||||
|             DnnScrMax = x.DnnScrMax; |             DnnScrMax = x.DnnScrMax; | ||||||
|             DnnScrMean = x.DnnScrMean; |             DnnScrMean = x.DnnScrMean; | ||||||
|             DnnScrStDev = x.DnnScrStdDev; |             DnnScrStDev = x.DnnScrStdDev; // different name | ||||||
|             DnnSlipMin = x.DnnSlipMin; |             DnnSlipMin = x.DnnSlipMin; | ||||||
|             DnnSlipMax = x.DnnSlipMax; |             DnnSlipMax = x.DnnSlipMax; | ||||||
|             DnnSlipMean = x.DnnSlipMean; |             DnnSlipMean = x.DnnSlipMean; | ||||||
|             DnnSlipStDev = x.DnnSlipStdDev; |             DnnSlipStDev = x.DnnSlipStdDev; // different name | ||||||
|             DnnAreaCntMin = x.DnnAreaCountMin; |             DnnAreaCntMin = x.DnnAreaCountMin; // different name | ||||||
|             DnnAreaCntMax = x.DnnAreaCountMax; |             DnnAreaCntMax = x.DnnAreaCountMax; // different name | ||||||
|             DnnAreaCntMean = x.DnnAreaCountMean; |             DnnAreaCntMean = x.DnnAreaCountMean; // different name | ||||||
|             DnnAreaCntStDev = x.DnnAreaCountStdDev; |             DnnAreaCntStDev = x.DnnAreaCountStdDev;  // different name | ||||||
|             DnnAreaMin = x.DnnAreaMin; |             DnnAreaMin = x.DnnAreaMin; | ||||||
|             DnnAreaMax = x.DnnAreaMax; |             DnnAreaMax = x.DnnAreaMax; | ||||||
|             DnnAreaMean = x.DnnAreaMean; |             DnnAreaMean = x.DnnAreaMean; | ||||||
|             DnnAreaStDev = x.DnnAreaStdDev; |             DnnAreaStDev = x.DnnAreaStdDev; // different name | ||||||
|             DnnHazeAvgMin = x.DnnHazeAvgMin; |             DnnHazeAvgMin = x.DnnHazeAvgMin; | ||||||
|             DnnHazeAvgMax = x.DnnHazeAvgMax; |             DnnHazeAvgMax = x.DnnHazeAvgMax; | ||||||
|             DnnHazeAvgMean = x.DnnHazeAvgMean; |             DnnHazeAvgMean = x.DnnHazeAvgMean; | ||||||
|             DnnHazeAvgStDev = x.DnnHazeAvgStdDev; |             DnnHazeAvgStDev = x.DnnHazeAvgStdDev; // different name | ||||||
|             DnnHazeMedMin = x.DnnHazeMedianMin; |             DnnHazeMedMin = x.DnnHazeMedianMin; // different name | ||||||
|             DnnHazeMedMax = x.DnnHazeMedianMax; |             DnnHazeMedMax = x.DnnHazeMedianMax; // different name | ||||||
|             DnnHazeMedMean = x.DnnHazeMedianMean; |             DnnHazeMedMean = x.DnnHazeMedianMean; // different name | ||||||
|             DnnHazeMedStDev = x.DnnHazeMedianStdDev; |             DnnHazeMedStDev = x.DnnHazeMedianStdDev; // different name | ||||||
|             DnnHazeStDevMin = x.DnnHazeStdDevMin; |             DnnHazeStDevMin = x.DnnHazeStdDevMin; // different name | ||||||
|             DnnHazeStDevMax = x.DnnHazeStdDevMax; |             DnnHazeStDevMax = x.DnnHazeStdDevMax; // different name | ||||||
|             DnnHazeStDevMean = x.DnnHazeStdDevMean; |             DnnHazeStDevMean = x.DnnHazeStdDevMean; // different name | ||||||
|             DnnHazeStDevStDev = x.DnnHazeStdDevStdDev; |             DnnHazeStDevStDev = x.DnnHazeStdDevStdDev; // different name | ||||||
|             DnnBin1Min = x.DnnBin1Min; |             DnnBin1Min = x.DnnBin1Min; | ||||||
|             DnnBin1Max = x.DnnBin1Max; |             DnnBin1Max = x.DnnBin1Max; | ||||||
|             DnnBin1Mean = x.DnnBin1Mean; |             DnnBin1Mean = x.DnnBin1Mean; | ||||||
|             DnnBin1StDev = x.DnnBin1StdDev; |             DnnBin1StDev = x.DnnBin1StdDev; // different name | ||||||
|             DnnBin2Min = x.DnnBin2Min; |             DnnBin2Min = x.DnnBin2Min; | ||||||
|             DnnBin2Max = x.DnnBin2Max; |             DnnBin2Max = x.DnnBin2Max; | ||||||
|             DnnBin2Mean = x.DnnBin2Mean; |             DnnBin2Mean = x.DnnBin2Mean; | ||||||
|             DnnBin2StDev = x.DnnBin2StdDev; |             DnnBin2StDev = x.DnnBin2StdDev; // different name | ||||||
|             DnnBin3Min = x.DnnBin3Min; |             DnnBin3Min = x.DnnBin3Min; | ||||||
|             DnnBin3Max = x.DnnBin3Max; |             DnnBin3Max = x.DnnBin3Max; | ||||||
|             DnnBin3Mean = x.DnnBin3Mean; |             DnnBin3Mean = x.DnnBin3Mean; | ||||||
|             DnnBin3StDev = x.DnnBin3StdDev; |             DnnBin3StDev = x.DnnBin3StdDev; // different name | ||||||
|             DnnBin4Min = x.DnnBin4Min; |             DnnBin4Min = x.DnnBin4Min; | ||||||
|             DnnBin4Max = x.DnnBin4Max; |             DnnBin4Max = x.DnnBin4Max; | ||||||
|             DnnBin4Mean = x.DnnBin4Mean; |             DnnBin4Mean = x.DnnBin4Mean; | ||||||
|             DnnBin4StDev = x.DnnBin4StdDev; |             DnnBin4StDev = x.DnnBin4StdDev; // different name | ||||||
|             DnnBin5Min = x.DnnBin5Min; |             DnnBin5Min = x.DnnBin5Min; | ||||||
|             DnnBin5Max = x.DnnBin5Max; |             DnnBin5Max = x.DnnBin5Max; | ||||||
|             DnnBin5Mean = x.DnnBin5Mean; |             DnnBin5Mean = x.DnnBin5Mean; | ||||||
|             DnnBin5StDev = x.DnnBin5StdDev; |             DnnBin5StDev = x.DnnBin5StdDev; // different name | ||||||
|             DnnBin6Min = x.DnnBin6Min; |             DnnBin6Min = x.DnnBin6Min; | ||||||
|             DnnBin6Max = x.DnnBin6Max; |             DnnBin6Max = x.DnnBin6Max; | ||||||
|             DnnBin6Mean = x.DnnBin6Mean; |             DnnBin6Mean = x.DnnBin6Mean; | ||||||
|             DnnBin6StDev = x.DnnBin6StdDev; |             DnnBin6StDev = x.DnnBin6StdDev; // different name | ||||||
|             DnnBin7Min = x.DnnBin7Min; |             DnnBin7Min = x.DnnBin7Min; | ||||||
|             DnnBin7Max = x.DnnBin7Max; |             DnnBin7Max = x.DnnBin7Max; | ||||||
|             DnnBin7Mean = x.DnnBin7Mean; |             DnnBin7Mean = x.DnnBin7Mean; | ||||||
|             DnnBin7StDev = x.DnnBin7StdDev; |             DnnBin7StDev = x.DnnBin7StdDev; // different name | ||||||
|             DnnBin8Min = x.DnnBin8Min; |             DnnBin8Min = x.DnnBin8Min; | ||||||
|             DnnBin8Max = x.DnnBin8Max; |             DnnBin8Max = x.DnnBin8Max; | ||||||
|             DnnBin8Mean = x.DnnBin8Mean; |             DnnBin8Mean = x.DnnBin8Mean; | ||||||
|             DnnBin8StDev = x.DnnBin8StdDev; |             DnnBin8StDev = x.DnnBin8StdDev; // different name | ||||||
|             RDS = x.RDS; |             RDS = x.RDS; | ||||||
|             PSN = x.PSN; |             PSN = x.PSN; | ||||||
|             Recipe = x.Recipe; |             Recipe = x.Recipe; | ||||||
|             Operator = x.Employee; |             Operator = x.Employee; // different name | ||||||
|         } |         } | ||||||
|         txt.Detail detail; |         txt.Detail detail; | ||||||
|         foreach (txt.Description description in descriptions) |         foreach (txt.Description description in descriptions) | ||||||
| @ -635,14 +640,14 @@ public class WSRequest | |||||||
|         return result; |         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; |         long result; | ||||||
|         if (results is not null && results.HeaderId is not null) |         if (results is not null && results.HeaderId is not null) | ||||||
|             result = results.HeaderId.Value; |             result = results.HeaderId.Value; | ||||||
|         else |         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}"); |             string directory = Path.Combine(openInsightMetrologyViewerFileShare, logistics.DateTimeFromSequence.Year.ToString(), $"WW{weekOfYear:00}"); | ||||||
|             (_, WS.Results wsResults) = WS.SendData(openInsightMetrologyViewerAPI, logistics.Sequence, directory, wsRequest); |             (_, WS.Results wsResults) = WS.SendData(openInsightMetrologyViewerAPI, logistics.Sequence, directory, wsRequest); | ||||||
|             if (wsResults.Success is null || !wsResults.Success.Value) |             if (wsResults.Success is null || !wsResults.Success.Value) | ||||||
|  | |||||||
| @ -139,7 +139,7 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|         return result; |         return result; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void PostOpenInsightMetrologyViewerAttachments(List<txt.Description> descriptions) |     private void PostOpenInsightMetrologyViewerAttachments(JsonElement[] jsonElements, List<txt.Description> descriptions) | ||||||
|     { |     { | ||||||
|         Shared.Metrology.WS.Results? results; |         Shared.Metrology.WS.Results? results; | ||||||
|         string jobIdDirectory = Path.Combine(Path.GetDirectoryName(_FileConnectorConfiguration.AlternateTargetFolder) ?? throw new Exception(), _Logistics.JobID); |         string jobIdDirectory = Path.Combine(Path.GetDirectoryName(_FileConnectorConfiguration.AlternateTargetFolder) ?? throw new Exception(), _Logistics.JobID); | ||||||
| @ -155,7 +155,7 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|             results = wsResults[0]; |             results = wsResults[0]; | ||||||
|         } |         } | ||||||
|         int weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday); |         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); |         string? headerIdDirectory = GetHeaderIdDirectory(headerId); | ||||||
|         if (string.IsNullOrEmpty(headerIdDirectory)) |         if (string.IsNullOrEmpty(headerIdDirectory)) | ||||||
|             throw new Exception($"Didn't find header id directory <{headerId}>"); |             throw new Exception($"Didn't find header id directory <{headerId}>"); | ||||||
| @ -167,14 +167,15 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|         if (dateTime == DateTime.MinValue) |         if (dateTime == DateTime.MinValue) | ||||||
|             throw new ArgumentNullException(nameof(dateTime)); |             throw new ArgumentNullException(nameof(dateTime)); | ||||||
|         Tuple<string, Test[], JsonElement[], List<FileInfo>> results; |         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); |         _Logistics = new Logistics(reportFullPath, processDataStandardFormat); | ||||||
|         SetFileParameterLotIDToLogisticsMID(); |         SetFileParameterLotIDToLogisticsMID(); | ||||||
|         JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat); |         JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(reportFullPath, lines, processDataStandardFormat); | ||||||
|         List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements); |         List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements); | ||||||
|         Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); |         Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); | ||||||
|         if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) |         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>()); |         results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>()); | ||||||
|         return results; |         return results; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -108,7 +108,7 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|         return results; |         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) |         if (dateTime == DateTime.MinValue) | ||||||
|             throw new ArgumentNullException(nameof(dateTime)); |             throw new ArgumentNullException(nameof(dateTime)); | ||||||
| @ -122,7 +122,7 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|             throw new Exception("Didn't find directory by logistics sequence"); |             throw new Exception("Didn't find directory by logistics sequence"); | ||||||
|         if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime) |         if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime) | ||||||
|             File.SetLastWriteTime(reportFullPath, 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 }; |         JsonSerializerOptions jsonSerializerOptions = new() { WriteIndented = true }; | ||||||
|         string json = JsonSerializer.Serialize(wsRequest, wsRequest.GetType(), jsonSerializerOptions); |         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}"; |         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}"; | ||||||
| @ -166,23 +166,24 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|     private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime) |     private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime) | ||||||
|     { |     { | ||||||
|         Tuple<string, Test[], JsonElement[], List<FileInfo>> results; |         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); |         _Logistics = new Logistics(reportFullPath, processDataStandardFormat); | ||||||
|         SetFileParameterLotIDToLogisticsMID(); |         SetFileParameterLotIDToLogisticsMID(); | ||||||
|         JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat); |         JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(reportFullPath, lines, processDataStandardFormat); | ||||||
|         List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements); |         List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements); | ||||||
|         Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); |         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>()); |         results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>()); | ||||||
|         if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) |         if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) | ||||||
|             DirectoryMove(reportFullPath, dateTime, descriptions); |             DirectoryMove(reportFullPath, dateTime, jsonElements, descriptions); | ||||||
|         else if (!_IsEAFHosted) |         else if (!_IsEAFHosted) | ||||||
|         { |         { | ||||||
|             OpenInsightMetrologyViewer.WSRequest wsRequest = new(this, _Logistics, descriptions); |             OpenInsightMetrologyViewer.WSRequest wsRequest = new(this, _Logistics, jsonElements, descriptions); | ||||||
|             JsonSerializerOptions jsonSerializerOptions = new() { WriteIndented = true }; |             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 jsonFileName = Path.ChangeExtension(reportFullPath, ".json"); | ||||||
|             string historicalText = File.ReadAllText(jsonFileName); |             string historicalText = File.ReadAllText(jsonFileName); | ||||||
|             if (json != historicalText) |             if (check != historicalText) | ||||||
|                 throw new Exception("File doesn't match historical!"); |                 throw new Exception("File doesn't match historical!"); | ||||||
|         } |         } | ||||||
|         return results; |         return results; | ||||||
|  | |||||||
| @ -19,6 +19,7 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|     public const string BarcodeHostFileShare = @"\\mesfs.infineon.com\EC_Metrology_Si\BarcodeHost\API"; |     public const string BarcodeHostFileShare = @"\\mesfs.infineon.com\EC_Metrology_Si\BarcodeHost\API"; | ||||||
|     public const string MetrologyFileShare = @"\\mesfs.infineon.com\EC_Metrology_Si\WorkMaterialOut\API"; |     public const string MetrologyFileShare = @"\\mesfs.infineon.com\EC_Metrology_Si\WorkMaterialOut\API"; | ||||||
|     public const string OpenInsightApplicationProgrammingInterface = @"http://oi-metrology-viewer-api.mes.infineon.com:8080/api/oiWizard"; |     public const string OpenInsightApplicationProgrammingInterface = @"http://oi-metrology-viewer-api.mes.infineon.com:8080/api/oiWizard"; | ||||||
|  |     public const string IQSConnectionString = @"Data Source=messqlec1.infineon.com\PROD1,53959;Initial Catalog=IRMNSPC;Integrated Security=True"; | ||||||
|     public const string LSL2SQLConnectionString = @"Data Source=messqlec1.infineon.com\PROD1,53959;Initial Catalog=LSL2SQL;Persist Security Info=True;User ID=srpadmin;Password=0okm9ijn;"; |     public const string LSL2SQLConnectionString = @"Data Source=messqlec1.infineon.com\PROD1,53959;Initial Catalog=LSL2SQL;Persist Security Info=True;User ID=srpadmin;Password=0okm9ijn;"; | ||||||
|  |  | ||||||
|     private long? _TickOffset; |     private long? _TickOffset; | ||||||
| @ -38,6 +39,9 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|         string barcodeHostFileShare = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Barcode.Host.FileShare"); |         string barcodeHostFileShare = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Barcode.Host.FileShare"); | ||||||
|         if (barcodeHostFileShare != BarcodeHostFileShare) |         if (barcodeHostFileShare != BarcodeHostFileShare) | ||||||
|             throw new NotSupportedException($"Update configuration for [{nameof(BarcodeHostFileShare)}]"); |             throw new NotSupportedException($"Update configuration for [{nameof(BarcodeHostFileShare)}]"); | ||||||
|  |         string iqsConnectionString = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "IQS.ConnectionString"); | ||||||
|  |         if (iqsConnectionString != IQSConnectionString) | ||||||
|  |             throw new NotSupportedException($"Update configuration for [{nameof(IQSConnectionString)}]"); | ||||||
|         string lsl2SQLConnectionString = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "ConnectionString.LSL2SQL"); |         string lsl2SQLConnectionString = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "ConnectionString.LSL2SQL"); | ||||||
|         if (lsl2SQLConnectionString != LSL2SQLConnectionString) |         if (lsl2SQLConnectionString != LSL2SQLConnectionString) | ||||||
|             throw new NotSupportedException($"Update configuration for [{nameof(LSL2SQLConnectionString)}]"); |             throw new NotSupportedException($"Update configuration for [{nameof(LSL2SQLConnectionString)}]"); | ||||||
| @ -53,14 +57,14 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|         string tibcoParameterSubjectPrefix = GetPropertyValue(cellInstanceConnectionName, tibcoParameters, "TIBCO.IFX_SUBJECT_PREFIX"); |         string tibcoParameterSubjectPrefix = GetPropertyValue(cellInstanceConnectionName, tibcoParameters, "TIBCO.IFX_SUBJECT_PREFIX"); | ||||||
|         string tibcoParameterConfigurationLocation = GetPropertyValue(cellInstanceConnectionName, tibcoParameters, "TIBCO.IFX_CONFIGURATION_LOCATION"); |         string tibcoParameterConfigurationLocation = GetPropertyValue(cellInstanceConnectionName, tibcoParameters, "TIBCO.IFX_CONFIGURATION_LOCATION"); | ||||||
|         string tibcoParameterConfigurationLocationCopy = GetPropertyValue(cellInstanceConnectionName, tibcoParameters, "TIBCO.IFX_CONFIGURATION_LOCATION_LOCAL_COPY"); |         string tibcoParameterConfigurationLocationCopy = GetPropertyValue(cellInstanceConnectionName, tibcoParameters, "TIBCO.IFX_CONFIGURATION_LOCATION_LOCAL_COPY"); | ||||||
|         if (!Directory.Exists(MetrologyFileShare)) |         if (!Directory.Exists(metrologyFileShare)) | ||||||
|             throw new Exception($"Unable to access file-share <{MetrologyFileShare}>"); |             throw new Exception($"Unable to access file-share <{MetrologyFileShare}>"); | ||||||
|         if (!Directory.Exists(BarcodeHostFileShare)) |         if (!Directory.Exists(barcodeHostFileShare)) | ||||||
|             throw new Exception($"Unable to access file-share <{BarcodeHostFileShare}>"); |             throw new Exception($"Unable to access file-share <{BarcodeHostFileShare}>"); | ||||||
|         if (_IsEAFHosted) |         if (_IsEAFHosted) | ||||||
|         { |         { | ||||||
|             HttpClient httpClient = new() { BaseAddress = new(OpenInsightApplicationProgrammingInterface) }; |             HttpClient httpClient = new() { BaseAddress = new(openInsightApplicationProgrammingInterface) }; | ||||||
|             Transport.Main.Initialize(smtp, cellInstanceName, fileConnectorConfiguration, LSL2SQLConnectionString, MetrologyFileShare, BarcodeHostFileShare, httpClient); |             Transport.Main.Initialize(smtp, cellInstanceName, fileConnectorConfiguration, iqsConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient); | ||||||
|             if (!string.IsNullOrEmpty(fileConnectorConfiguration.SourceFileLocation)) |             if (!string.IsNullOrEmpty(fileConnectorConfiguration.SourceFileLocation)) | ||||||
|                 _ = Transport.Main.Setup(useSleep: true, setIfxTransport: true, tibcoParameterChannel, tibcoParameterSubjectPrefix, tibcoParameterConfigurationLocation, tibcoParameterConfigurationLocationCopy, tibcoParameterSubject); |                 _ = Transport.Main.Setup(useSleep: true, setIfxTransport: true, tibcoParameterChannel, tibcoParameterSubjectPrefix, tibcoParameterConfigurationLocation, tibcoParameterConfigurationLocationCopy, tibcoParameterSubject); | ||||||
|             else |             else | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ public class Common | |||||||
|     public int? ReactorNumber { get; } |     public int? ReactorNumber { get; } | ||||||
|     public string? Zone { get; } |     public string? Zone { get; } | ||||||
|     public string? Employee { get; } |     public string? Employee { get; } | ||||||
|  |     public RunDataSheetRoot? RunDataSheetRoot { get; } | ||||||
|     public WorkOrder? WorkOrder { get; } |     public WorkOrder? WorkOrder { get; } | ||||||
|  |  | ||||||
|     public Common(string? layer, |     public Common(string? layer, | ||||||
| @ -19,6 +20,7 @@ public class Common | |||||||
|                   int? reactor, |                   int? reactor, | ||||||
|                   string? zone, |                   string? zone, | ||||||
|                   string? employee, |                   string? employee, | ||||||
|  |                   RunDataSheetRoot? runDataSheetRoot, | ||||||
|                   WorkOrder? workOrder) |                   WorkOrder? workOrder) | ||||||
|     { |     { | ||||||
|         Layer = layer; |         Layer = layer; | ||||||
| @ -27,6 +29,7 @@ public class Common | |||||||
|         ReactorNumber = reactor; |         ReactorNumber = reactor; | ||||||
|         Zone = zone; |         Zone = zone; | ||||||
|         Employee = employee; |         Employee = employee; | ||||||
|  |         RunDataSheetRoot = runDataSheetRoot; | ||||||
|         WorkOrder = workOrder; |         WorkOrder = workOrder; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,25 +1,74 @@ | |||||||
| namespace Adaptation.FileHandlers.TIBCO.Transport; | namespace Adaptation.FileHandlers.TIBCO.Transport; | ||||||
|  |  | ||||||
|  | #nullable enable | ||||||
|  |  | ||||||
| public class CommonB | public class CommonB | ||||||
| { | { | ||||||
|  |  | ||||||
|     public string Layer { get; } |     public string? Layer { get; } | ||||||
|     public string LoadLockSide { get; } |  | ||||||
|     public int? RDSNumber { get; } |     public int? RDSNumber { get; } | ||||||
|     public string ReactorType { get; } |     public string? PSN { get; } | ||||||
|     public string PSN { get; } |  | ||||||
|     public int? ReactorNumber { get; } |     public int? ReactorNumber { get; } | ||||||
|     public string Zone { get; } |     public string? Zone { 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) | ||||||
|     { |     { | ||||||
|         Layer = layer; |         Layer = layer; | ||||||
|         LoadLockSide = loadLockSide; |  | ||||||
|         RDSNumber = rdsNumber; |         RDSNumber = rdsNumber; | ||||||
|         ReactorType = reactorType; |  | ||||||
|         PSN = psn; |         PSN = psn; | ||||||
|         ReactorNumber = reactorNumber; |         ReactorNumber = reactorNumber; | ||||||
|         Zone = zone; |         Zone = zone; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     internal static CommonB Get(Common common, RunDataSheetRoot? runDataSheetRoot, Run[]? runs) | ||||||
|  |     { | ||||||
|  |         CommonB result; | ||||||
|  |         string? psn; | ||||||
|  |         string? zone; | ||||||
|  |         string? layer; | ||||||
|  |         int? reactorNumber; | ||||||
|  |         if (runs is null || runs.Length == 0) | ||||||
|  |         { | ||||||
|  |             zone = common.Zone; | ||||||
|  |             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]; | ||||||
|  |             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); | ||||||
|  |         return result; | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -7,15 +7,17 @@ public class Input | |||||||
|  |  | ||||||
|     public string? Area { get; } |     public string? Area { get; } | ||||||
|     public string? EquipmentType { get; } |     public string? EquipmentType { get; } | ||||||
|     public string? MID { get; } |     public string? LoadLock { get; } | ||||||
|     public string? Slot { get; } |  | ||||||
|     public string? MesEntity { get; } |     public string? MesEntity { get; } | ||||||
|  |     public string? MID { get; } | ||||||
|     public string? Recipe { get; } |     public string? Recipe { get; } | ||||||
|     public string? Sequence { get; } |     public string? Sequence { get; } | ||||||
|  |     public string? Slot { get; } | ||||||
|  |  | ||||||
|     [System.Text.Json.Serialization.JsonConstructor] |     [System.Text.Json.Serialization.JsonConstructor] | ||||||
|     public Input(string? area, |     public Input(string? area, | ||||||
|                  string? equipmentType, |                  string? equipmentType, | ||||||
|  |                  string? loadLock, | ||||||
|                  string? mid, |                  string? mid, | ||||||
|                  string? slot, |                  string? slot, | ||||||
|                  string? mesEntity, |                  string? mesEntity, | ||||||
| @ -25,6 +27,7 @@ public class Input | |||||||
|  |  | ||||||
|         Area = area; |         Area = area; | ||||||
|         EquipmentType = equipmentType; |         EquipmentType = equipmentType; | ||||||
|  |         LoadLock = loadLock; | ||||||
|         MID = mid; |         MID = mid; | ||||||
|         Slot = slot; |         Slot = slot; | ||||||
|         MesEntity = mesEntity; |         MesEntity = mesEntity; | ||||||
| @ -36,6 +39,7 @@ public class Input | |||||||
|     { |     { | ||||||
|         Area = input.Area; |         Area = input.Area; | ||||||
|         EquipmentType = input.EquipmentType; |         EquipmentType = input.EquipmentType; | ||||||
|  |         LoadLock = input.LoadLock; | ||||||
|         MID = mid; |         MID = mid; | ||||||
|         Slot = input.Slot; |         Slot = input.Slot; | ||||||
|         MesEntity = input.MesEntity; |         MesEntity = input.MesEntity; | ||||||
|  | |||||||
| @ -41,7 +41,7 @@ public partial class Job | |||||||
|     public DateTime DateTime { get; } |     public DateTime DateTime { get; } | ||||||
|     public List<Item> Items { get; } |     public List<Item> Items { get; } | ||||||
|  |  | ||||||
|     public Job(string lsl2SQLConnectionString, string metrologyFileShare, string barcodeHostFileShare, HttpClient httpClient, string mid, DateTime enteredDateTimeFilter, DateTime loadSignatureDateTimeFilter) |     public Job(string iqsSQLConnectionString, string lsl2SQLConnectionString, string metrologyFileShare, string barcodeHostFileShare, HttpClient httpClient, string mid, DateTime enteredDateTimeFilter, DateTime loadSignatureDateTimeFilter) | ||||||
|     { |     { | ||||||
|         const int zero = 0; |         const int zero = 0; | ||||||
|         Items = new List<Item>(); |         Items = new List<Item>(); | ||||||
| @ -49,12 +49,15 @@ public partial class Job | |||||||
|             IsAreaSi = false; |             IsAreaSi = false; | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
|  |             Run[]? runs; | ||||||
|             Common common; |             Common common; | ||||||
|             CommonB commonB; |             CommonB commonB; | ||||||
|  |             string? basicType; | ||||||
|             int? reactorNumber; |             int? reactorNumber; | ||||||
|             const string hyphen = "-"; |             const string hyphen = "-"; | ||||||
|             const string bioRad2 = "BIORAD2"; |             const string bioRad2 = "BIORAD2"; | ||||||
|             const string bioRad3 = "BIORAD3"; |             const string bioRad3 = "BIORAD3"; | ||||||
|  |             RunDataSheetRoot? runDataSheetRoot; | ||||||
|             const string twoAlphaPattern = "^[a-zA-z]{2,3}"; |             const string twoAlphaPattern = "^[a-zA-z]{2,3}"; | ||||||
|             const string reactorNumberPattern = @"^[0-9]{2}--"; |             const string reactorNumberPattern = @"^[0-9]{2}--"; | ||||||
|             Input input = JsonSerializer.Deserialize<Input>(mid) ?? throw new Exception(); |             Input input = JsonSerializer.Deserialize<Input>(mid) ?? throw new Exception(); | ||||||
| @ -62,13 +65,12 @@ public partial class Job | |||||||
|                 DateTime = DateTime.Now; |                 DateTime = DateTime.Now; | ||||||
|             else |             else | ||||||
|                 DateTime = new DateTime(sequence); |                 DateTime = new DateTime(sequence); | ||||||
|  |             string? jobNames = GetJobNames(input); | ||||||
|             const string dep08CEPIEPSILON = "DEP08CEPIEPSILON"; |             const string dep08CEPIEPSILON = "DEP08CEPIEPSILON"; | ||||||
|             if (input.EquipmentType == dep08CEPIEPSILON) |             if (input.EquipmentType == dep08CEPIEPSILON) | ||||||
|             { |                 common = ReactorGet(input, httpClient); | ||||||
|                 common = Get(input, httpClient); |  | ||||||
|             } |  | ||||||
|             else if (!string.IsNullOrEmpty(input.MID) && !string.IsNullOrEmpty(input.MesEntity) && Regex.IsMatch(input.MID, reactorNumberPattern) && input.MesEntity is bioRad2 or bioRad3) |             else if (!string.IsNullOrEmpty(input.MID) && !string.IsNullOrEmpty(input.MesEntity) && Regex.IsMatch(input.MID, reactorNumberPattern) && input.MesEntity is bioRad2 or bioRad3) | ||||||
|                 common = Get(input, barcodeHostFileShare); |                 common = Get(input, barcodeHostFileShare, httpClient); | ||||||
|             else |             else | ||||||
|             { |             { | ||||||
|                 reactorNumber = GetReactorNumber(input); |                 reactorNumber = GetReactorNumber(input); | ||||||
| @ -80,76 +82,65 @@ public partial class Job | |||||||
|                                  reactor: null, |                                  reactor: null, | ||||||
|                                  zone: null, |                                  zone: null, | ||||||
|                                  employee: null, |                                  employee: null, | ||||||
|  |                                  runDataSheetRoot: null, | ||||||
|                                  workOrder: workOrder); |                                  workOrder: workOrder); | ||||||
|                 else if (!string.IsNullOrEmpty(input.MID) && input.MID.Length is 2 or 3 && Regex.IsMatch(input.MID, twoAlphaPattern)) |                 else if (!string.IsNullOrEmpty(input.MID) && input.MID.Length is 2 or 3 && Regex.IsMatch(input.MID, twoAlphaPattern)) | ||||||
|                     common = GetTwoAlphaPattern(metrologyFileShare, input); |                     common = GetTwoAlphaPattern(metrologyFileShare, input); | ||||||
|                 else |                 else | ||||||
|                     common = Get(input); |                     common = Get(input, httpClient); | ||||||
|             } |             } | ||||||
|             bool isValid = IsValid(common.RDSNumber); |             bool isValid = IsValid(common.RDSNumber); | ||||||
|             if (isValid) |             if (common.RDSNumber is null || !isValid) | ||||||
|                 commonB = GetWithValidRDS(lsl2SQLConnectionString, enteredDateTimeFilter, loadSignatureDateTimeFilter, common.Layer, common.PSN, common.RDSNumber, common.ReactorNumber, common.Zone); |                 runDataSheetRoot = common.RunDataSheetRoot; | ||||||
|             else if (common.WorkOrder is null || common.WorkOrder.IsWorkOrder || common.RDSNumber.HasValue) |  | ||||||
|                 commonB = Get(lsl2SQLConnectionString, enteredDateTimeFilter, loadSignatureDateTimeFilter, common); |  | ||||||
|             else |             else | ||||||
|                 commonB = new(layer: hyphen, |             { | ||||||
|                               loadLockSide: hyphen, |                 try | ||||||
|                               rdsNumber: common.RDSNumber, |                 { runDataSheetRoot = GetRunDataSheetRoot(httpClient, common.RDSNumber.Value); } | ||||||
|                               reactorType: hyphen, |                 catch (Exception) | ||||||
|                               psn: common.PSN, |                 { runDataSheetRoot = null; } | ||||||
|                               reactorNumber: common.ReactorNumber, |             } | ||||||
|                               zone: hyphen); |             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); } | ||||||
|  |                 catch (Exception) | ||||||
|  |                 { runCount = null; } | ||||||
|  |                 basicType = runCount is null ? hyphen : runCount.ToString(); | ||||||
|  |             } | ||||||
|             Qty = "1"; |             Qty = "1"; | ||||||
|             Status = hyphen; // INFO |             Status = hyphen; // INFO | ||||||
|             CreationUser = hyphen; // ? |             CreationUser = hyphen; // ? | ||||||
|             LotState = hyphen; // LAYER2 |             LotState = hyphen; // LAYER2 | ||||||
|             LastUpdateUser = hyphen; // ? |  | ||||||
|             Equipment = input.MesEntity; // ? |             Equipment = input.MesEntity; // ? | ||||||
|             PackageName = hyphen; // WAFER_ID |             PackageName = hyphen; // WAFER_ID | ||||||
|             Qty2 = input.Sequence; // SEQUENCE |             Qty2 = input.Sequence; // SEQUENCE | ||||||
|             RecipeName = input.Recipe; // PPID |             RecipeName = input.Recipe; // PPID | ||||||
|  |             BasicType = basicType; // BASIC_TYPE | ||||||
|             IsAreaSi = input.Area == "Si"; // N/A |             IsAreaSi = input.Area == "Si"; // N/A | ||||||
|             StateModel = input.EquipmentType; // ? |             StateModel = input.EquipmentType; // ? | ||||||
|             JobName = DateTime.Ticks.ToString(); // ? |             JobName = DateTime.Ticks.ToString(); // ? | ||||||
|             BasicType = GetComment(hyphen, httpClient, commonB); // BASIC_TYPE |  | ||||||
|             AutomationMode = string.Concat(DateTime.Ticks, ".", input.MesEntity); // ? |             AutomationMode = string.Concat(DateTime.Ticks, ".", input.MesEntity); // ? | ||||||
|             SpecName = !string.IsNullOrEmpty(commonB.Layer) ? commonB.Layer : hyphen; // LAYER |             SpecName = !string.IsNullOrEmpty(commonB.Layer) ? commonB.Layer : hyphen; // LAYER | ||||||
|             ProductName = !string.IsNullOrEmpty(commonB.PSN) ? commonB.PSN : hyphen; // PRODUCT |             ProductName = !string.IsNullOrEmpty(commonB.PSN) ? commonB.PSN : hyphen; // PRODUCT | ||||||
|             ProcessSpecName = !string.IsNullOrEmpty(commonB.Zone) ? commonB.Zone : hyphen; // WAFER_POS |             ProcessSpecName = !string.IsNullOrEmpty(commonB.Zone) ? commonB.Zone : hyphen; // WAFER_POS | ||||||
|             LotName = commonB.RDSNumber is not null ? commonB.RDSNumber.Value.ToString() : input.MID; // MID |             LotName = commonB.RDSNumber is not null ? commonB.RDSNumber.Value.ToString() : input.MID; // MID | ||||||
|  |             LastUpdateUser = string.IsNullOrEmpty(runDataSheetRoot?.Json) ? "{}" : runDataSheetRoot.Json; // NULL_DATA | ||||||
|             ProcessType = commonB.ReactorNumber is not null ? commonB.ReactorNumber.Value.ToString() : hyphen; // PROCESS_JOBID |             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 }); |             Items.Add(new Item { Name = "0", Type = "NA", Number = (0 + 1).ToString(), Qty = "1", CarrierName = hyphen }); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static string GetComment(string hyphen, HttpClient httpClient, CommonB commonB) |  | ||||||
|     { |  | ||||||
|         string result; |  | ||||||
|         string? loadLockSide = commonB.LoadLockSide; |  | ||||||
|         if (string.IsNullOrEmpty(loadLockSide) && commonB.RDSNumber is not null) |  | ||||||
|         { |  | ||||||
|             RunDataSheetRoot? runDataSheetRoot; |  | ||||||
|             try |  | ||||||
|             { runDataSheetRoot = GetRunDataSheetRoot(httpClient, commonB.RDSNumber.Value); } |  | ||||||
|             catch (Exception) |  | ||||||
|             { runDataSheetRoot = null; } |  | ||||||
|             loadLockSide = runDataSheetRoot?.RunDataSheet?.LoadLockSide; |  | ||||||
|         } |  | ||||||
|         if (string.IsNullOrEmpty(loadLockSide) || string.IsNullOrEmpty(commonB.ReactorType)) |  | ||||||
|             result = hyphen; |  | ||||||
|         else |  | ||||||
|         { |  | ||||||
|             string loadLockSideFull = loadLockSide switch |  | ||||||
|             { |  | ||||||
|                 "L" => "Left", |  | ||||||
|                 "R" => "Right", |  | ||||||
|                 _ => loadLockSide, |  | ||||||
|             }; |  | ||||||
|             result = $"{loadLockSideFull} - {commonB.ReactorType}"; |  | ||||||
|         } |  | ||||||
|         return result; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private static int? GetReactorNumber(Input input) |     private static int? GetReactorNumber(Input input) | ||||||
|     { |     { | ||||||
|         int? result; |         int? result; | ||||||
| @ -270,8 +261,9 @@ public partial class Job | |||||||
|         return result; |         return result; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static Common Get(Input input) |     private static Common Get(Input input, HttpClient httpClient) | ||||||
|     { |     { | ||||||
|  |         Common result; | ||||||
|         string? psn; |         string? psn; | ||||||
|         string? rds; |         string? rds; | ||||||
|         int rdsCheck; |         int rdsCheck; | ||||||
| @ -281,6 +273,7 @@ public partial class Job | |||||||
|         string? reactor; |         string? reactor; | ||||||
|         string? employee; |         string? employee; | ||||||
|         int? reactorNumber; |         int? reactorNumber; | ||||||
|  |         RunDataSheetRoot? runDataSheetRoot; | ||||||
|         string mid = string.IsNullOrEmpty(input.MID) ? string.Empty : input.MID; |         string mid = string.IsNullOrEmpty(input.MID) ? string.Empty : input.MID; | ||||||
|         if (mid.Length > 2 && mid[0] == '1' && (mid[1] == 'T' || mid[1] == 't')) |         if (mid.Length > 2 && mid[0] == '1' && (mid[1] == 'T' || mid[1] == 't')) | ||||||
|             mid = mid.Substring(2); |             mid = mid.Substring(2); | ||||||
| @ -290,13 +283,14 @@ public partial class Job | |||||||
|         (reactor, rds) = GetReactorAndRDS(input.MID, mid, segments); |         (reactor, rds) = GetReactorAndRDS(input.MID, mid, segments); | ||||||
|         rdsNumber = string.IsNullOrEmpty(rds) || !int.TryParse(rds, out rdsCheck) ? null : rdsCheck; |         rdsNumber = string.IsNullOrEmpty(rds) || !int.TryParse(rds, out rdsCheck) ? null : rdsCheck; | ||||||
|         bool isInvalid = IsInvalid(rdsNumber); |         bool isInvalid = IsInvalid(rdsNumber); | ||||||
|         if (isInvalid || !int.TryParse(reactor, out int reactorCheck)) |         if (rdsNumber is null || isInvalid || !int.TryParse(reactor, out int reactorCheck)) | ||||||
|         { |         { | ||||||
|             psn = null; |             psn = null; | ||||||
|             zone = null; |             zone = null; | ||||||
|             layer = null; |             layer = null; | ||||||
|             employee = null; |             employee = null; | ||||||
|             reactorNumber = null; |             reactorNumber = null; | ||||||
|  |             runDataSheetRoot = null; | ||||||
|         } |         } | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
| @ -304,14 +298,17 @@ public partial class Job | |||||||
|             reactorNumber = reactorCheck; |             reactorNumber = reactorCheck; | ||||||
|             (layer, psn) = GetLayerAndPSN(segments); |             (layer, psn) = GetLayerAndPSN(segments); | ||||||
|             employee = segments.Length <= 4 ? null : segments[4]; |             employee = segments.Length <= 4 ? null : segments[4]; | ||||||
|  |             runDataSheetRoot = GetRunDataSheetRoot(httpClient, rdsNumber.Value); | ||||||
|         } |         } | ||||||
|         return new(layer: layer, |         result = new(layer: layer, | ||||||
|                    psn: psn, |                      psn: psn, | ||||||
|                    rdsNumber: rdsNumber, |                      rdsNumber: rdsNumber, | ||||||
|                    reactor: reactorNumber, |                      reactor: reactorNumber, | ||||||
|                    zone: zone, |                      zone: zone, | ||||||
|                    employee: employee, |                      employee: employee, | ||||||
|                    workOrder: null); |                      runDataSheetRoot: runDataSheetRoot, | ||||||
|  |                      workOrder: null); | ||||||
|  |         return result; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static string[] GetDirectories(string fileShare) |     private static string[] GetDirectories(string fileShare) | ||||||
| @ -330,6 +327,7 @@ public partial class Job | |||||||
|  |  | ||||||
|     private static Common GetTwoAlphaPattern(string metrologyFileShare, Input input) |     private static Common GetTwoAlphaPattern(string metrologyFileShare, Input input) | ||||||
|     { |     { | ||||||
|  |         Common result; | ||||||
|         string lines; |         string lines; | ||||||
|         const int zero = 0; |         const int zero = 0; | ||||||
|         string? psn = null; |         string? psn = null; | ||||||
| @ -369,13 +367,15 @@ public partial class Job | |||||||
|                 zone = workMaterialOut.Zone; |                 zone = workMaterialOut.Zone; | ||||||
|             break; |             break; | ||||||
|         } |         } | ||||||
|         return new(layer: layer, |         result = new(layer: layer, | ||||||
|                    psn: psn, |                      psn: psn, | ||||||
|                    rdsNumber: rdsNumber, |                      rdsNumber: rdsNumber, | ||||||
|                    reactor: reactor, |                      reactor: reactor, | ||||||
|                    zone: zone, |                      zone: zone, | ||||||
|                    employee: null, |                      employee: null, | ||||||
|                    workOrder: null); |                      runDataSheetRoot: null, | ||||||
|  |                      workOrder: null); | ||||||
|  |         return result; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static List<string> GetFiles(Input input, string barcodeHostFileShare) |     private static List<string> GetFiles(Input input, string barcodeHostFileShare) | ||||||
| @ -414,27 +414,18 @@ public partial class Job | |||||||
|         return result; |         return result; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static Common Get(Input input, HttpClient httpClient) |     private static Common ReactorGet(Input input, HttpClient httpClient) | ||||||
|     { |     { | ||||||
|         int? rds; |         int? rds; | ||||||
|         string? psn; |         string? psn; | ||||||
|         Common result; |         Common result; | ||||||
|         Task<Stream> streamTask; |  | ||||||
|         Task<HttpResponseMessage> httpResponseMessageTask; |  | ||||||
|         string mid = string.IsNullOrEmpty(input.MID) ? string.Empty : input.MID; |         string mid = string.IsNullOrEmpty(input.MID) ? string.Empty : input.MID; | ||||||
|         JsonSerializerOptions jsonSerializerOptions = new() { PropertyNameCaseInsensitive = true }; |         JsonSerializerOptions jsonSerializerOptions = new() { PropertyNameCaseInsensitive = true }; | ||||||
|         int? reactor = mid.Length < 2 || !int.TryParse(mid.Substring(0, 2), out int reactorNumber) ? null : reactorNumber; |         int? reactor = mid.Length < 2 || !int.TryParse(mid.Substring(0, 2), out int reactorNumber) ? null : reactorNumber; | ||||||
|         httpResponseMessageTask = httpClient.GetAsync($"{httpClient.BaseAddress}/reactors/{reactor}"); |         char? loadLockSide = string.IsNullOrEmpty(input.LoadLock) || input.LoadLock[0] is not 'L' and not 'R' ? null : input.LoadLock[0]; | ||||||
|         httpResponseMessageTask.Wait(); |         ReactorRoot? reactorRoot = reactor is null || loadLockSide is null ? null : GetReactorRoot(httpClient, jsonSerializerOptions, reactor); | ||||||
|         if (httpResponseMessageTask.Result.StatusCode != System.Net.HttpStatusCode.OK) |         rds = loadLockSide is null ? null : loadLockSide == 'L' ? reactorRoot?.Reactor?.LoadLockLeftRDS : loadLockSide == 'R' ? reactorRoot?.Reactor?.LoadLockRightRDS : null; | ||||||
|             throw new Exception($"Unable to OI <{httpResponseMessageTask.Result.StatusCode}>"); |         if (reactorRoot?.Reactor is null || reactor != reactorRoot.Reactor.ReactorNo || rds is null) | ||||||
|         streamTask = httpResponseMessageTask.Result.Content.ReadAsStreamAsync(); |  | ||||||
|         streamTask.Wait(); |  | ||||||
|         if (!streamTask.Result.CanRead) |  | ||||||
|             throw new NullReferenceException(nameof(streamTask)); |  | ||||||
|         ReactorRoot? reactorRoot = JsonSerializer.Deserialize<ReactorRoot>(streamTask.Result, jsonSerializerOptions); |  | ||||||
|         streamTask.Result.Dispose(); |  | ||||||
|         if (reactorRoot is null || reactor != reactorRoot.Reactor.ReactorNo || reactorRoot.Reactor.LoadedRDS is null || reactorRoot.Reactor.LoadedRDS.Length < 1) |  | ||||||
|         { |         { | ||||||
|             rds = null; |             rds = null; | ||||||
|             psn = null; |             psn = null; | ||||||
| @ -444,13 +435,13 @@ public partial class Job | |||||||
|                          reactor: reactor, |                          reactor: reactor, | ||||||
|                          zone: null, |                          zone: null, | ||||||
|                          employee: null, |                          employee: null, | ||||||
|  |                          runDataSheetRoot: null, | ||||||
|                          workOrder: null); |                          workOrder: null); | ||||||
|         } |         } | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
|             rds = reactorRoot.Reactor.LoadedRDS[0]; |  | ||||||
|             RunDataSheetRoot? runDataSheetRoot = GetRunDataSheetRoot(httpClient, rds.Value); |             RunDataSheetRoot? runDataSheetRoot = GetRunDataSheetRoot(httpClient, rds.Value); | ||||||
|             if (runDataSheetRoot is null || reactor != runDataSheetRoot.RunDataSheet.Reactor) |             if (runDataSheetRoot?.RunDataSheet is null || reactor != runDataSheetRoot.RunDataSheet.Reactor) | ||||||
|             { |             { | ||||||
|                 psn = null; |                 psn = null; | ||||||
|                 result = new(layer: null, |                 result = new(layer: null, | ||||||
| @ -459,6 +450,7 @@ public partial class Job | |||||||
|                              reactor: reactor, |                              reactor: reactor, | ||||||
|                              zone: null, |                              zone: null, | ||||||
|                              employee: null, |                              employee: null, | ||||||
|  |                              runDataSheetRoot: runDataSheetRoot, | ||||||
|                              workOrder: null); |                              workOrder: null); | ||||||
|             } |             } | ||||||
|             else |             else | ||||||
| @ -470,30 +462,51 @@ public partial class Job | |||||||
|                              reactor: reactor, |                              reactor: reactor, | ||||||
|                              zone: null, |                              zone: null, | ||||||
|                              employee: null, |                              employee: null, | ||||||
|  |                              runDataSheetRoot: runDataSheetRoot, | ||||||
|                              workOrder: null); |                              workOrder: null); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         return result; |         return result; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static RunDataSheetRoot? GetRunDataSheetRoot(HttpClient httpClient, int rds) |     private static ReactorRoot? GetReactorRoot(HttpClient httpClient, JsonSerializerOptions jsonSerializerOptions, int? reactor) | ||||||
|     { |     { | ||||||
|         RunDataSheetRoot? runDataSheetRoot; |         ReactorRoot? result; | ||||||
|         JsonSerializerOptions jsonSerializerOptions = new() { PropertyNameCaseInsensitive = true }; |         try | ||||||
|         using Task<HttpResponseMessage> httpResponseMessageTask = httpClient.GetAsync($"{httpClient.BaseAddress}/materials/rds/{rds}"); |         { | ||||||
|         httpResponseMessageTask.Wait(); |             Task<HttpResponseMessage> httpResponseMessageTask = httpClient.GetAsync($"{httpClient.BaseAddress}/reactors/{reactor}"); | ||||||
|         if (httpResponseMessageTask.Result.StatusCode != System.Net.HttpStatusCode.OK) |             httpResponseMessageTask.Wait(); | ||||||
|             throw new Exception($"Unable to OI <{httpResponseMessageTask.Result.StatusCode}>"); |             if (httpResponseMessageTask.Result.StatusCode != System.Net.HttpStatusCode.OK) | ||||||
|         using Task<Stream> streamTask = httpResponseMessageTask.Result.Content.ReadAsStreamAsync(); |                 throw new Exception($"Unable to OI <{httpResponseMessageTask.Result.StatusCode}>"); | ||||||
|         streamTask.Wait(); |             using Task<Stream> streamTask = httpResponseMessageTask.Result.Content.ReadAsStreamAsync(); | ||||||
|         if (!streamTask.Result.CanRead) |             streamTask.Wait(); | ||||||
|             throw new NullReferenceException(nameof(streamTask)); |             result = !streamTask.Result.CanRead ? null : JsonSerializer.Deserialize<ReactorRoot>(streamTask.Result, jsonSerializerOptions); | ||||||
|         runDataSheetRoot = JsonSerializer.Deserialize<RunDataSheetRoot>(streamTask.Result, jsonSerializerOptions); |         } | ||||||
|         streamTask.Result.Dispose(); |         catch (Exception) { result = null; } | ||||||
|         return runDataSheetRoot; |         return result; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static Common Get(Input input, string barcodeHostFileShare) |     private static RunDataSheetRoot? GetRunDataSheetRoot(HttpClient httpClient, int rds) | ||||||
|  |     { | ||||||
|  |         RunDataSheetRoot? result; | ||||||
|  |         try | ||||||
|  |         { | ||||||
|  |             JsonSerializerOptions jsonSerializerOptions = new() { PropertyNameCaseInsensitive = true }; | ||||||
|  |             using Task<HttpResponseMessage> httpResponseMessageTask = httpClient.GetAsync($"{httpClient.BaseAddress}/materials/rds/{rds}"); | ||||||
|  |             httpResponseMessageTask.Wait(); | ||||||
|  |             if (httpResponseMessageTask.Result.StatusCode != System.Net.HttpStatusCode.OK) | ||||||
|  |                 throw new Exception($"Unable to OI <{httpResponseMessageTask.Result.StatusCode}>"); | ||||||
|  |             Task<string> json = httpResponseMessageTask.Result.Content.ReadAsStringAsync(); | ||||||
|  |             json.Wait(); | ||||||
|  |             result = JsonSerializer.Deserialize<RunDataSheetRoot>(json.Result, jsonSerializerOptions); | ||||||
|  |             result ??= new RunDataSheetRoot(null); | ||||||
|  |             result.Json = json.Result; | ||||||
|  |         } | ||||||
|  |         catch (Exception) { result = null; } | ||||||
|  |         return result; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private static Common Get(Input input, string barcodeHostFileShare, HttpClient httpClient) | ||||||
|     { |     { | ||||||
|         Common result; |         Common result; | ||||||
|         if (string.IsNullOrEmpty(barcodeHostFileShare) || !Directory.Exists(barcodeHostFileShare)) |         if (string.IsNullOrEmpty(barcodeHostFileShare) || !Directory.Exists(barcodeHostFileShare)) | ||||||
| @ -501,6 +514,7 @@ public partial class Job | |||||||
|         int? rds; |         int? rds; | ||||||
|         long sequence = 0; |         long sequence = 0; | ||||||
|         WorkOrder? workOrder; |         WorkOrder? workOrder; | ||||||
|  |         RunDataSheetRoot? runDataSheetRoot; | ||||||
|         string mid = string.IsNullOrEmpty(input.MID) ? string.Empty : input.MID; |         string mid = string.IsNullOrEmpty(input.MID) ? string.Empty : input.MID; | ||||||
|         int? reactor = mid.Length < 2 || !int.TryParse(mid.Substring(0, 2), out int reactorNumber) ? null : reactorNumber; |         int? reactor = mid.Length < 2 || !int.TryParse(mid.Substring(0, 2), out int reactorNumber) ? null : reactorNumber; | ||||||
|         bool parsed = !string.IsNullOrEmpty(input.Sequence) && long.TryParse(input.Sequence, out sequence); |         bool parsed = !string.IsNullOrEmpty(input.Sequence) && long.TryParse(input.Sequence, out sequence); | ||||||
| @ -514,33 +528,37 @@ public partial class Job | |||||||
|         { |         { | ||||||
|             rds = null; |             rds = null; | ||||||
|             workOrder = null; |             workOrder = null; | ||||||
|  |             runDataSheetRoot = null; | ||||||
|         } |         } | ||||||
|         else if (!text.Contains('.')) |         else if (!text.Contains('.')) | ||||||
|         { |         { | ||||||
|             workOrder = null; |             workOrder = null; | ||||||
|             rds = !int.TryParse(text.Substring(2), out int rdsNumber) ? null : rdsNumber; |             rds = !int.TryParse(text.Substring(2), out int rdsNumber) || IsInvalid(rdsNumber) ? null : rdsNumber; | ||||||
|  |             runDataSheetRoot = rds is null ? null : GetRunDataSheetRoot(httpClient, rds.Value); | ||||||
|         } |         } | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
|             rds = null; |             rds = null; | ||||||
|  |             runDataSheetRoot = null; | ||||||
|             workOrder = GetWorkOrder(new(input, text.Substring(2))); |             workOrder = GetWorkOrder(new(input, text.Substring(2))); | ||||||
|         } |         } | ||||||
|         result = new(layer: null, |         result = new(layer: null, | ||||||
|                             psn: null, |                      psn: null, | ||||||
|                             rdsNumber: rds, |                      rdsNumber: rds, | ||||||
|                             reactor: reactor, |                      reactor: reactor, | ||||||
|                             zone: null, |                      zone: null, | ||||||
|                             employee: null, |                      employee: null, | ||||||
|                             workOrder: workOrder); |                      runDataSheetRoot: runDataSheetRoot, | ||||||
|  |                      workOrder: workOrder); | ||||||
|         return result; |         return result; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static string GetRunJson(string lsl2SQLConnectionString, string commandText) |     private static string GetRunJson(string connectionString, string commandText) | ||||||
|     { |     { | ||||||
|         StringBuilder result = new(); |         StringBuilder result = new(); | ||||||
|         try |         try | ||||||
|         { |         { | ||||||
|             using SqlConnection sqlConnection = new(lsl2SQLConnectionString); |             using SqlConnection sqlConnection = new(connectionString); | ||||||
|             sqlConnection.Open(); |             sqlConnection.Open(); | ||||||
|             using SqlCommand sqlCommand = new(commandText, sqlConnection); |             using SqlCommand sqlCommand = new(commandText, sqlConnection); | ||||||
|             SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(CommandBehavior.SequentialAccess); |             SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(CommandBehavior.SequentialAccess); | ||||||
| @ -638,16 +656,9 @@ public partial class Job | |||||||
|         return string.Join(Environment.NewLine, results); |         return string.Join(Environment.NewLine, results); | ||||||
|     } // cSpell:restore |     } // 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; |         Run[]? results; | ||||||
|         string? psn; |  | ||||||
|         string? zone; |  | ||||||
|         string? layer; |  | ||||||
|         const int zero = 0; |  | ||||||
|         int? reactorNumber; |  | ||||||
|         string? reactorType; |  | ||||||
|         string? loadLockSide; |  | ||||||
|         string commandText = GetCommandText(enteredDateTimeFilter, |         string commandText = GetCommandText(enteredDateTimeFilter, | ||||||
|                                             loadSignatureDateTimeFilter, |                                             loadSignatureDateTimeFilter, | ||||||
|                                             rds: null, |                                             rds: null, | ||||||
| @ -657,106 +668,96 @@ public partial class Job | |||||||
|                                             reactor: common.ReactorNumber); |                                             reactor: common.ReactorNumber); | ||||||
|         string json = GetRunJson(lsl2SQLConnectionString, commandText); |         string json = GetRunJson(lsl2SQLConnectionString, commandText); | ||||||
|         if (string.IsNullOrEmpty(json)) |         if (string.IsNullOrEmpty(json)) | ||||||
|         { |             results = null; | ||||||
|             psn = common.PSN; |  | ||||||
|             rdsNumber = null; |  | ||||||
|             reactorType = null; |  | ||||||
|             zone = common.Zone; |  | ||||||
|             loadLockSide = null; |  | ||||||
|             layer = common.Layer; |  | ||||||
|             reactorNumber = common.ReactorNumber; |  | ||||||
|         } |  | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
|             Run[]? runs; |  | ||||||
|             try |             try | ||||||
|             { runs = JsonSerializer.Deserialize<Run[]>(json); } |             { results = JsonSerializer.Deserialize<Run[]>(json); } | ||||||
|             catch (Exception) |             catch (Exception) | ||||||
|             { runs = Array.Empty<Run>(); } |             { results = 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; |  | ||||||
|             } |  | ||||||
|         } |         } | ||||||
|         return new(layer: layer, |         return results; | ||||||
|                    loadLockSide: loadLockSide, |  | ||||||
|                    rdsNumber: rdsNumber, |  | ||||||
|                    psn: psn, |  | ||||||
|                    reactorNumber: reactorNumber, |  | ||||||
|                    reactorType: reactorType, |  | ||||||
|                    zone: zone); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     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; |         Run[]? results; | ||||||
|         string? reactorType; |  | ||||||
|         string? loadLockSide; |  | ||||||
|         string commandText = GetCommandText(enteredDateTimeFilter, |         string commandText = GetCommandText(enteredDateTimeFilter, | ||||||
|                                             loadSignatureDateTimeFilter, |                                             loadSignatureDateTimeFilter, | ||||||
|                                             rds: rdsNumber, |                                             rds: common.RDSNumber, | ||||||
|                                             workOrderNumber: null, |                                             workOrderNumber: null, | ||||||
|                                             workOrderCassette: null, |                                             workOrderCassette: null, | ||||||
|                                             slot: null, |                                             slot: null, | ||||||
|                                             reactor: null); |                                             reactor: null); | ||||||
|         string json = GetRunJson(lsl2SQLConnectionString, commandText); |         string json = GetRunJson(lsl2SQLConnectionString, commandText); | ||||||
|         if (string.IsNullOrEmpty(json)) |         if (string.IsNullOrEmpty(json)) | ||||||
|         { |             results = null; | ||||||
|             zone = null; |  | ||||||
|             reactorType = null; |  | ||||||
|             loadLockSide = null; |  | ||||||
|         } |  | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
|             Run[]? runs; |  | ||||||
|             try |             try | ||||||
|             { runs = JsonSerializer.Deserialize<Run[]>(json); } |             { results = JsonSerializer.Deserialize<Run[]>(json); } | ||||||
|             catch (Exception) |             catch (Exception) | ||||||
|             { runs = Array.Empty<Run>(); } |             { results = 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; |  | ||||||
|             } |  | ||||||
|         } |         } | ||||||
|         return new(layer: layer, |         return results; | ||||||
|                    loadLockSide: loadLockSide, |     } | ||||||
|                    rdsNumber: rdsNumber, |  | ||||||
|                    reactorType: reactorType, |     private static string? GetJobNames(Input input) => | ||||||
|                    psn: psn, |         input.EquipmentType switch | ||||||
|                    reactorNumber: reactorNumber, |         { | ||||||
|                    zone: zone); |             "MET08ANLYSDIFAAST230" => "'SPV01'", | ||||||
|  |             "MET08DDUPSFS6420" => "'TENCOR1','TENCOR2','TENCOR3'", | ||||||
|  |             "MET08DDUPSP1TBI" => "'SP101'", | ||||||
|  |             "MET08RESIHGCV" => "'HGCV1','HGCV2','HGCV3'", | ||||||
|  |             "MET08RESIMAPCDE" => "'CDE1','CDE2','CDE3','CDE4','CDE5','CDE6'", | ||||||
|  |             "MET08RESISRP2100" => "'SRP'", | ||||||
|  |             "MET08THFTIRQS408M" => "'BIORAD2','BIORAD3','BIORAD4','BIORAD5'", | ||||||
|  |             "MET08THFTIRSTRATUS" => "'BIORAD4','BIORAD5'", | ||||||
|  |             _ => null, | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |     private static string GetCommandText(CommonB commonB, string jobNames) | ||||||
|  |     { // cSpell:disable | ||||||
|  |         List<string> results = new(); | ||||||
|  |         results.Add(" select count(distinct(se.f_sgrp)) count_se_sgrp "); | ||||||
|  |         results.Add(" from [spcepiworld].[dbo].[sgrp_ext] se "); | ||||||
|  |         results.Add(" join [spcepiworld].[dbo].[prcs_dat] pr "); | ||||||
|  |         results.Add("   on se.f_prcs = pr.f_prcs "); | ||||||
|  |         results.Add(" join [spcepiworld].[dbo].[job_dat] jd "); | ||||||
|  |         results.Add("   on se.f_job = jd.f_job "); | ||||||
|  |         results.Add(" join [spcepiworld].[dbo].[part_lot] pl "); | ||||||
|  |         results.Add("   on se.f_lot = pl.f_lot "); | ||||||
|  |         results.Add(" join [spcepiworld].[dbo].[part_dat] pd "); | ||||||
|  |         results.Add("   on se.f_part = pd.f_part "); | ||||||
|  |         results.Add(" join [spcepiworld].[dbo].[test_dat] td "); | ||||||
|  |         results.Add("   on se.f_test = td.f_test "); | ||||||
|  |         results.Add(" where se.f_flag = 0 "); | ||||||
|  |         results.Add($"   and pl.f_name = '{commonB.RDSNumber}' "); | ||||||
|  |         results.Add($"   and pr.f_name = '{commonB.ReactorNumber}' "); | ||||||
|  |         results.Add($"   and pd.f_name = '{commonB.PSN}' "); | ||||||
|  |         results.Add($"   and jd.f_name in ({jobNames}) "); | ||||||
|  |         return string.Join(Environment.NewLine, results); | ||||||
|  |     } // cSpell:restore | ||||||
|  |  | ||||||
|  |     private static int? GetScalar(string connectionString, string commandText) | ||||||
|  |     { | ||||||
|  |         int? result; | ||||||
|  |         try | ||||||
|  |         { | ||||||
|  |             using SqlConnection sqlConnection = new(connectionString); | ||||||
|  |             sqlConnection.Open(); | ||||||
|  |             using SqlCommand sqlCommand = new(commandText, sqlConnection); | ||||||
|  |             object scalar = sqlCommand.ExecuteScalar(); | ||||||
|  |             if (scalar is null || !int.TryParse(scalar.ToString(), out int value)) | ||||||
|  |                 result = null; | ||||||
|  |             else | ||||||
|  |                 result = value; | ||||||
|  |         } | ||||||
|  |         catch (Exception) | ||||||
|  |         { | ||||||
|  |             result = null; | ||||||
|  |         } | ||||||
|  |         return result; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -17,19 +17,21 @@ internal partial class Main | |||||||
|     private static object _IfxTransport; |     private static object _IfxTransport; | ||||||
|     private static string _CellInstanceName; |     private static string _CellInstanceName; | ||||||
|     private static string _MetrologyFileShare; |     private static string _MetrologyFileShare; | ||||||
|  |     private static string _IQSConnectionString; | ||||||
|     private static string _BarcodeHostFileShare; |     private static string _BarcodeHostFileShare; | ||||||
|     private static string _LSL2SQLConnectionString; |     private static string _LSL2SQLConnectionString; | ||||||
|     private static string _TibcoParameterSubjectPrefix; |     private static string _TibcoParameterSubjectPrefix; | ||||||
|     private static HttpClient _HttpClient; |     private static HttpClient _HttpClient; | ||||||
|     private static FileConnectorConfiguration _FileConnectorConfiguration; |     private static FileConnectorConfiguration _FileConnectorConfiguration; | ||||||
|  |  | ||||||
|     internal static void Initialize(ISMTP smtp, string cellInstanceName, FileConnectorConfiguration fileConnectorConfiguration, string lsl2SQLConnectionString, string metrologyFileShare, string barcodeHostFileShare, HttpClient httpClient) |     internal static void Initialize(ISMTP smtp, string cellInstanceName, FileConnectorConfiguration fileConnectorConfiguration, string iqsConnectionString, string lsl2SQLConnectionString, string metrologyFileShare, string barcodeHostFileShare, HttpClient httpClient) | ||||||
|     { |     { | ||||||
|         _SMTP = smtp; |         _SMTP = smtp; | ||||||
|         _IfxTransport = null; |         _IfxTransport = null; | ||||||
|         _HttpClient = httpClient; |         _HttpClient = httpClient; | ||||||
|         _CellInstanceName = cellInstanceName; |         _CellInstanceName = cellInstanceName; | ||||||
|         _MetrologyFileShare = metrologyFileShare; |         _MetrologyFileShare = metrologyFileShare; | ||||||
|  |         _IQSConnectionString = iqsConnectionString; | ||||||
|         _TibcoParameterSubjectPrefix = string.Empty; |         _TibcoParameterSubjectPrefix = string.Empty; | ||||||
|         _BarcodeHostFileShare = barcodeHostFileShare; |         _BarcodeHostFileShare = barcodeHostFileShare; | ||||||
|         _LSL2SQLConnectionString = lsl2SQLConnectionString; |         _LSL2SQLConnectionString = lsl2SQLConnectionString; | ||||||
| @ -190,7 +192,7 @@ internal partial class Main | |||||||
|             string mid = GetJobsMID(envelopeDocument); |             string mid = GetJobsMID(envelopeDocument); | ||||||
|             DateTime enteredDateTimeFilter = dateTime.AddDays(-356); |             DateTime enteredDateTimeFilter = dateTime.AddDays(-356); | ||||||
|             DateTime loadSignatureDateTimeFilter = dateTime.AddDays(-4); |             DateTime loadSignatureDateTimeFilter = dateTime.AddDays(-4); | ||||||
|             Job job = new(_LSL2SQLConnectionString, _MetrologyFileShare, _BarcodeHostFileShare, _HttpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter); |             Job job = new(_IQSConnectionString, _LSL2SQLConnectionString, _MetrologyFileShare, _BarcodeHostFileShare, _HttpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter); | ||||||
|             if (job.IsAreaSi) |             if (job.IsAreaSi) | ||||||
|             { |             { | ||||||
|                 IfxDoc sendReply = GetJobsReply(job); |                 IfxDoc sendReply = GetJobsReply(job); | ||||||
|  | |||||||
| @ -6,13 +6,15 @@ public class Reactor | |||||||
| { | { | ||||||
|  |  | ||||||
|     [JsonConstructor] |     [JsonConstructor] | ||||||
|     public Reactor(int reactorNo, int[] loadedRDS) |     public Reactor(int reactorNo, int? loadLockLeftRDS, int? loadLockRightRDS) | ||||||
|     { |     { | ||||||
|  |         LoadLockLeftRDS = loadLockLeftRDS; | ||||||
|  |         LoadLockRightRDS = loadLockRightRDS; | ||||||
|         ReactorNo = reactorNo; |         ReactorNo = reactorNo; | ||||||
|         LoadedRDS = loadedRDS; |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     [JsonPropertyName("reactorNo")] public int ReactorNo { get; } // { init; get; } |     [JsonPropertyName("reactorNo")] public int ReactorNo { get; } // { init; get; } | ||||||
|     [JsonPropertyName("loadedRDS")] public int[] LoadedRDS { get; } // { init; get; } |     [JsonPropertyName("loadLockLeftRDS")] public int? LoadLockLeftRDS { get; } // { init; get; } | ||||||
|  |     [JsonPropertyName("loadLockRightRDS")] public int? LoadLockRightRDS { get; } // { init; get; } | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -2,13 +2,15 @@ using System.Text.Json.Serialization; | |||||||
|  |  | ||||||
| namespace Adaptation.FileHandlers.TIBCO.Transport; | namespace Adaptation.FileHandlers.TIBCO.Transport; | ||||||
|  |  | ||||||
|  | #nullable enable | ||||||
|  |  | ||||||
| public class ReactorRoot | public class ReactorRoot | ||||||
| { | { | ||||||
|  |  | ||||||
|     [JsonConstructor] |     [JsonConstructor] | ||||||
|     public ReactorRoot(Reactor reactor) => |     public ReactorRoot(Reactor? reactor) => | ||||||
|         Reactor = reactor; |         Reactor = reactor; | ||||||
|  |  | ||||||
|     [JsonPropertyName("reactor")] public Reactor Reactor { get; } // { init; get; } |     [JsonPropertyName("reactor")] public Reactor? Reactor { get; } // { init; get; } | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -29,12 +29,6 @@ public class Run | |||||||
|     [JsonPropertyName("ps_no")] |     [JsonPropertyName("ps_no")] | ||||||
|     public string PSN { get; set; } |     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")] |     [JsonPropertyName("recipe_name")] | ||||||
|     public string RecipeName { get; set; } |     public string RecipeName { get; set; } | ||||||
|  |  | ||||||
|  | |||||||
| @ -6,15 +6,23 @@ public class RunDataSheet | |||||||
| { | { | ||||||
|  |  | ||||||
|     [JsonConstructor] |     [JsonConstructor] | ||||||
|     public RunDataSheet(string loadLockSide, int psn, int reactor) |     public RunDataSheet(string loadLockSide, | ||||||
|  |                         int number, | ||||||
|  |                         int psn, | ||||||
|  |                         int reactor, | ||||||
|  |                         string reactorType) | ||||||
|     { |     { | ||||||
|         PSN = psn; |         PSN = psn; | ||||||
|  |         Number = number; | ||||||
|         LoadLockSide = loadLockSide; |         LoadLockSide = loadLockSide; | ||||||
|         Reactor = reactor; |         Reactor = reactor; | ||||||
|  |         ReactorType = reactorType; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     [JsonPropertyName("keyId")] public int Number { get; } // { init; get; } | ||||||
|     [JsonPropertyName("loadLockSide")] public string LoadLockSide { get; } // { init; get; } |     [JsonPropertyName("loadLockSide")] public string LoadLockSide { get; } // { init; get; } | ||||||
|     [JsonPropertyName("PSN")] public int PSN { get; } // { init; get; } |     [JsonPropertyName("PSN")] public int PSN { get; } // { init; get; } | ||||||
|     [JsonPropertyName("reactor")] public int Reactor { get; } // { init; get; } |     [JsonPropertyName("reactor")] public int Reactor { get; } // { init; get; } | ||||||
|  |     [JsonPropertyName("reactorType")] public string ReactorType { get; } // { init; get; } | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -2,13 +2,16 @@ using System.Text.Json.Serialization; | |||||||
|  |  | ||||||
| namespace Adaptation.FileHandlers.TIBCO.Transport; | namespace Adaptation.FileHandlers.TIBCO.Transport; | ||||||
|  |  | ||||||
|  | #nullable enable | ||||||
|  |  | ||||||
| public class RunDataSheetRoot | public class RunDataSheetRoot | ||||||
| { | { | ||||||
|  |  | ||||||
|     [JsonConstructor] |     [JsonConstructor] | ||||||
|     public RunDataSheetRoot(RunDataSheet runDataSheet) => |     public RunDataSheetRoot(RunDataSheet? runDataSheet) => | ||||||
|         RunDataSheet = runDataSheet; |         RunDataSheet = runDataSheet; | ||||||
|  |  | ||||||
|     [JsonPropertyName("rds")] public RunDataSheet RunDataSheet { get; } // { init; get; } |     public string? Json { get; set; } | ||||||
|  |     [JsonPropertyName("rds")] public RunDataSheet? RunDataSheet { get; } // { init; get; } | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -4,341 +4,344 @@ using System; | |||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Linq; | using System.Linq; | ||||||
| using System.Text.Json; | using System.Text.Json; | ||||||
|  | using System.Text.Json.Serialization; | ||||||
|  |  | ||||||
| namespace Adaptation.FileHandlers.txt; | namespace Adaptation.FileHandlers.txt; | ||||||
|  |  | ||||||
| public class Description : IDescription, Shared.Properties.IDescription | public class Description : IDescription, Shared.Properties.IDescription | ||||||
| { | { | ||||||
|  |  | ||||||
|     public int Test { get; set; } |     [JsonPropertyName("EventId")] public int Test { get; set; } | ||||||
|     public int Count { get; set; } |     [JsonPropertyName("Count")] public int Count { get; set; } | ||||||
|     public int Index { get; set; } |     [JsonPropertyName("Index")] public int Index { get; set; } | ||||||
|     // |     // | ||||||
|     public string EventName { get; set; } |     public string EventName { get; set; } | ||||||
|     public string NullData { get; set; } |     public string NullData { get; set; } | ||||||
|     public string JobID { get; set; } |     public string JobID { get; set; } | ||||||
|     public string Sequence { 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 ReportFullPath { get; set; } | ||||||
|     public string ProcessJobID { get; set; } |     public string ProcessJobID { get; set; } | ||||||
|     public string MID { get; set; } |     public string MID { get; set; } | ||||||
|     // |     // | ||||||
|     public string Date { get; set; } |     [JsonPropertyName("Date")] public string Date { get; set; } | ||||||
|     public string Employee { get; set; } |     [JsonPropertyName("Employee")] public string Employee { get; set; } | ||||||
|     public string Lot { get; set; } |     [JsonPropertyName("Lot")] public string Lot { get; set; } | ||||||
|     public string PSN { get; set; } |     [JsonPropertyName("PSN")] public string PSN { get; set; } | ||||||
|     public string Reactor { get; set; } |     [JsonPropertyName("Reactor")] public string Reactor { get; set; } | ||||||
|     public string Recipe { 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 HeaderUniqueId { get; set; } | ||||||
|     public string RDS { get; set; } |     [JsonPropertyName("RDS")] public string RDS { get; set; } | ||||||
|     public string Session { get; set; } |     [JsonPropertyName("Session")] public string Session { get; set; } | ||||||
|     public string Side { get; set; } |     [JsonPropertyName("Side")] public string Side { get; set; } | ||||||
|     public string SrcDest { get; set; } |     [JsonPropertyName("SrcDest")] public string SrcDest { get; set; } | ||||||
|     public string UniqueId { get; set; } |     public string UniqueId { get; set; } | ||||||
|     public string WaferID { get; set; } |     [JsonPropertyName("WaferID")] public string WaferID { get; set; } | ||||||
|     // |     // | ||||||
|     public string DcnAllMax { get; set; } |     [JsonPropertyName("DcnAllMax")] public string DcnAllMax { get; set; } | ||||||
|     public string DcnAllMean { get; set; } |     [JsonPropertyName("DcnAllMean")] public string DcnAllMean { get; set; } | ||||||
|     public string DcnAllMin { get; set; } |     [JsonPropertyName("DcnAllMin")] public string DcnAllMin { get; set; } | ||||||
|     public string DcnAllStdDev { get; set; } |     [JsonPropertyName("DcnAllStdDev")] public string DcnAllStdDev { get; set; } | ||||||
|     public string DcnAreaCountMax { get; set; } |     [JsonPropertyName("DcnAreaCountMax")] public string DcnAreaCountMax { get; set; } | ||||||
|     public string DcnAreaCountMean { get; set; } |     [JsonPropertyName("DcnAreaCountMean")] public string DcnAreaCountMean { get; set; } | ||||||
|     public string DcnAreaCountMin { get; set; } |     [JsonPropertyName("DcnAreaCountMin")] public string DcnAreaCountMin { get; set; } | ||||||
|     public string DcnAreaCountStdDev { get; set; } |     [JsonPropertyName("DcnAreaCountStdDev")] public string DcnAreaCountStdDev { get; set; } | ||||||
|     public string DcnAreaMax { get; set; } |     [JsonPropertyName("DcnAreaMax")] public string DcnAreaMax { get; set; } | ||||||
|     public string DcnAreaMean { get; set; } |     [JsonPropertyName("DcnAreaMean")] public string DcnAreaMean { get; set; } | ||||||
|     public string DcnAreaMin { get; set; } |     [JsonPropertyName("DcnAreaMin")] public string DcnAreaMin { get; set; } | ||||||
|     public string DcnAreaStdDev { get; set; } |     [JsonPropertyName("DcnAreaStdDev")] public string DcnAreaStdDev { get; set; } | ||||||
|     public string DcnBin1Max { get; set; } |     [JsonPropertyName("DcnBin1Max")] public string DcnBin1Max { get; set; } | ||||||
|     public string DcnBin1Mean { get; set; } |     [JsonPropertyName("DcnBin1Mean")] public string DcnBin1Mean { get; set; } | ||||||
|     public string DcnBin1Min { get; set; } |     [JsonPropertyName("DcnBin1Min")] public string DcnBin1Min { get; set; } | ||||||
|     public string DcnBin1StdDev { get; set; } |     [JsonPropertyName("DcnBin1StdDev")] public string DcnBin1StdDev { get; set; } | ||||||
|     public string DcnBin2Max { get; set; } |     [JsonPropertyName("DcnBin2Max")] public string DcnBin2Max { get; set; } | ||||||
|     public string DcnBin2Mean { get; set; } |     [JsonPropertyName("DcnBin2Mean")] public string DcnBin2Mean { get; set; } | ||||||
|     public string DcnBin2Min { get; set; } |     [JsonPropertyName("DcnBin2Min")] public string DcnBin2Min { get; set; } | ||||||
|     public string DcnBin2StdDev { get; set; } |     [JsonPropertyName("DcnBin2StdDev")] public string DcnBin2StdDev { get; set; } | ||||||
|     public string DcnBin3Max { get; set; } |     [JsonPropertyName("DcnBin3Max")] public string DcnBin3Max { get; set; } | ||||||
|     public string DcnBin3Mean { get; set; } |     [JsonPropertyName("DcnBin3Mean")] public string DcnBin3Mean { get; set; } | ||||||
|     public string DcnBin3Min { get; set; } |     [JsonPropertyName("DcnBin3Min")] public string DcnBin3Min { get; set; } | ||||||
|     public string DcnBin3StdDev { get; set; } |     [JsonPropertyName("DcnBin3StdDev")] public string DcnBin3StdDev { get; set; } | ||||||
|     public string DcnBin4Max { get; set; } |     [JsonPropertyName("DcnBin4Max")] public string DcnBin4Max { get; set; } | ||||||
|     public string DcnBin4Mean { get; set; } |     [JsonPropertyName("DcnBin4Mean")] public string DcnBin4Mean { get; set; } | ||||||
|     public string DcnBin4Min { get; set; } |     [JsonPropertyName("DcnBin4Min")] public string DcnBin4Min { get; set; } | ||||||
|     public string DcnBin4StdDev { get; set; } |     [JsonPropertyName("DcnBin4StdDev")] public string DcnBin4StdDev { get; set; } | ||||||
|     public string DcnBin5Max { get; set; } |     [JsonPropertyName("DcnBin5Max")] public string DcnBin5Max { get; set; } | ||||||
|     public string DcnBin5Mean { get; set; } |     [JsonPropertyName("DcnBin5Mean")] public string DcnBin5Mean { get; set; } | ||||||
|     public string DcnBin5Min { get; set; } |     [JsonPropertyName("DcnBin5Min")] public string DcnBin5Min { get; set; } | ||||||
|     public string DcnBin5StdDev { get; set; } |     [JsonPropertyName("DcnBin5StdDev")] public string DcnBin5StdDev { get; set; } | ||||||
|     public string DcnBin6Max { get; set; } |     [JsonPropertyName("DcnBin6Max")] public string DcnBin6Max { get; set; } | ||||||
|     public string DcnBin6Mean { get; set; } |     [JsonPropertyName("DcnBin6Mean")] public string DcnBin6Mean { get; set; } | ||||||
|     public string DcnBin6Min { get; set; } |     [JsonPropertyName("DcnBin6Min")] public string DcnBin6Min { get; set; } | ||||||
|     public string DcnBin6StdDev { get; set; } |     [JsonPropertyName("DcnBin6StdDev")] public string DcnBin6StdDev { get; set; } | ||||||
|     public string DcnBin7Max { get; set; } |     [JsonPropertyName("DcnBin7Max")] public string DcnBin7Max { get; set; } | ||||||
|     public string DcnBin7Mean { get; set; } |     [JsonPropertyName("DcnBin7Mean")] public string DcnBin7Mean { get; set; } | ||||||
|     public string DcnBin7Min { get; set; } |     [JsonPropertyName("DcnBin7Min")] public string DcnBin7Min { get; set; } | ||||||
|     public string DcnBin7StdDev { get; set; } |     [JsonPropertyName("DcnBin7StdDev")] public string DcnBin7StdDev { get; set; } | ||||||
|     public string DcnBin8Max { get; set; } |     [JsonPropertyName("DcnBin8Max")] public string DcnBin8Max { get; set; } | ||||||
|     public string DcnBin8Mean { get; set; } |     [JsonPropertyName("DcnBin8Mean")] public string DcnBin8Mean { get; set; } | ||||||
|     public string DcnBin8Min { get; set; } |     [JsonPropertyName("DcnBin8Min")] public string DcnBin8Min { get; set; } | ||||||
|     public string DcnBin8StdDev { get; set; } |     [JsonPropertyName("DcnBin8StdDev")] public string DcnBin8StdDev { get; set; } | ||||||
|     public string DcnHazeAvgMax { get; set; } |     [JsonPropertyName("DcnHazeAvgMax")] public string DcnHazeAvgMax { get; set; } | ||||||
|     public string DcnHazeAvgMean { get; set; } |     [JsonPropertyName("DcnHazeAvgMean")] public string DcnHazeAvgMean { get; set; } | ||||||
|     public string DcnHazeAvgMin { get; set; } |     [JsonPropertyName("DcnHazeAvgMin")] public string DcnHazeAvgMin { get; set; } | ||||||
|     public string DcnHazeAvgStdDev { get; set; } |     [JsonPropertyName("DcnHazeAvgStdDev")] public string DcnHazeAvgStdDev { get; set; } | ||||||
|     public string DcnHazeMedianMax { get; set; } |     [JsonPropertyName("DcnHazeMedianMax")] public string DcnHazeMedianMax { get; set; } | ||||||
|     public string DcnHazeMedianMean { get; set; } |     [JsonPropertyName("DcnHazeMedianMean")] public string DcnHazeMedianMean { get; set; } | ||||||
|     public string DcnHazeMedianMin { get; set; } |     [JsonPropertyName("DcnHazeMedianMin")] public string DcnHazeMedianMin { get; set; } | ||||||
|     public string DcnHazeMedianStdDev { get; set; } |     [JsonPropertyName("DcnHazeMedianStdDev")] public string DcnHazeMedianStdDev { get; set; } | ||||||
|     public string DcnHazeStdDevMax { get; set; } |     [JsonPropertyName("DcnHazeStdDevMax")] public string DcnHazeStdDevMax { get; set; } | ||||||
|     public string DcnHazeStdDevMean { get; set; } |     [JsonPropertyName("DcnHazeStdDevMean")] public string DcnHazeStdDevMean { get; set; } | ||||||
|     public string DcnHazeStdDevMin { get; set; } |     [JsonPropertyName("DcnHazeStdDevMin")] public string DcnHazeStdDevMin { get; set; } | ||||||
|     public string DcnHazeStdDevStdDev { get; set; } |     [JsonPropertyName("DcnHazeStdDevStdDev")] public string DcnHazeStdDevStdDev { get; set; } | ||||||
|     public string DcnLpdESMax { get; set; } |     [JsonPropertyName("DcnLpdESMax")] public string DcnLpdESMax { get; set; } | ||||||
|     public string DcnLpdESMean { get; set; } |     [JsonPropertyName("DcnLpdESMean")] public string DcnLpdESMean { get; set; } | ||||||
|     public string DcnLpdESMin { get; set; } |     [JsonPropertyName("DcnLpdESMin")] public string DcnLpdESMin { get; set; } | ||||||
|     public string DcnLpdESStdDev { get; set; } |     [JsonPropertyName("DcnLpdESStdDev")] public string DcnLpdESStdDev { get; set; } | ||||||
|     public string DcnLpdMax { get; set; } |     [JsonPropertyName("DcnLpdMax")] public string DcnLpdMax { get; set; } | ||||||
|     public string DcnLpdMean { get; set; } |     [JsonPropertyName("DcnLpdMean")] public string DcnLpdMean { get; set; } | ||||||
|     public string DcnLpdMin { get; set; } |     [JsonPropertyName("DcnLpdMin")] public string DcnLpdMin { get; set; } | ||||||
|     public string DcnLpdNMax { get; set; } |     [JsonPropertyName("DcnLpdNMax")] public string DcnLpdNMax { get; set; } | ||||||
|     public string DcnLpdNMean { get; set; } |     [JsonPropertyName("DcnLpdNMean")] public string DcnLpdNMean { get; set; } | ||||||
|     public string DcnLpdNMin { get; set; } |     [JsonPropertyName("DcnLpdNMin")] public string DcnLpdNMin { get; set; } | ||||||
|     public string DcnLpdNStdDev { get; set; } |     [JsonPropertyName("DcnLpdNStdDev")] public string DcnLpdNStdDev { get; set; } | ||||||
|     public string DcnLpdStdDev { get; set; } |     [JsonPropertyName("DcnLpdStdDev")] public string DcnLpdStdDev { get; set; } | ||||||
|     public string DcnMicroScrMax { get; set; } |     [JsonPropertyName("DcnMicroScrMax")] public string DcnMicroScrMax { get; set; } | ||||||
|     public string DcnMicroScrMean { get; set; } |     [JsonPropertyName("DcnMicroScrMean")] public string DcnMicroScrMean { get; set; } | ||||||
|     public string DcnMicroScrMin { get; set; } |     [JsonPropertyName("DcnMicroScrMin")] public string DcnMicroScrMin { get; set; } | ||||||
|     public string DcnMicroScrStdDev { get; set; } |     [JsonPropertyName("DcnMicroScrStdDev")] public string DcnMicroScrStdDev { get; set; } | ||||||
|     public string DcnScrMax { get; set; } |     [JsonPropertyName("DcnScrMax")] public string DcnScrMax { get; set; } | ||||||
|     public string DcnScrMean { get; set; } |     [JsonPropertyName("DcnScrMean")] public string DcnScrMean { get; set; } | ||||||
|     public string DcnScrMin { get; set; } |     [JsonPropertyName("DcnScrMin")] public string DcnScrMin { get; set; } | ||||||
|     public string DcnScrStdDev { get; set; } |     [JsonPropertyName("DcnScrStdDev")] public string DcnScrStdDev { get; set; } | ||||||
|     public string DcnSlipMax { get; set; } |     [JsonPropertyName("DcnSlipMax")] public string DcnSlipMax { get; set; } | ||||||
|     public string DcnSlipMean { get; set; } |     [JsonPropertyName("DcnSlipMean")] public string DcnSlipMean { get; set; } | ||||||
|     public string DcnSlipMin { get; set; } |     [JsonPropertyName("DcnSlipMin")] public string DcnSlipMin { get; set; } | ||||||
|     public string DcnSlipStdDev { get; set; } |     [JsonPropertyName("DcnSlipStdDev")] public string DcnSlipStdDev { get; set; } | ||||||
|     public string DnnAllMax { get; set; } |     [JsonPropertyName("DnnAllMax")] public string DnnAllMax { get; set; } | ||||||
|     public string DnnAllMean { get; set; } |     [JsonPropertyName("DnnAllMean")] public string DnnAllMean { get; set; } | ||||||
|     public string DnnAllMin { get; set; } |     [JsonPropertyName("DnnAllMin")] public string DnnAllMin { get; set; } | ||||||
|     public string DnnAllStdDev { get; set; } |     [JsonPropertyName("DnnAllStdDev")] public string DnnAllStdDev { get; set; } | ||||||
|     public string DnnAreaCountMax { get; set; } |     [JsonPropertyName("DnnAreaCountMax")] public string DnnAreaCountMax { get; set; } | ||||||
|     public string DnnAreaCountMean { get; set; } |     [JsonPropertyName("DnnAreaCountMean")] public string DnnAreaCountMean { get; set; } | ||||||
|     public string DnnAreaCountMin { get; set; } |     [JsonPropertyName("DnnAreaCountMin")] public string DnnAreaCountMin { get; set; } | ||||||
|     public string DnnAreaCountStdDev { get; set; } |     [JsonPropertyName("DnnAreaCountStdDev")] public string DnnAreaCountStdDev { get; set; } | ||||||
|     public string DnnAreaMax { get; set; } |     [JsonPropertyName("DnnAreaMax")] public string DnnAreaMax { get; set; } | ||||||
|     public string DnnAreaMean { get; set; } |     [JsonPropertyName("DnnAreaMean")] public string DnnAreaMean { get; set; } | ||||||
|     public string DnnAreaMin { get; set; } |     [JsonPropertyName("DnnAreaMin")] public string DnnAreaMin { get; set; } | ||||||
|     public string DnnAreaStdDev { get; set; } |     [JsonPropertyName("DnnAreaStdDev")] public string DnnAreaStdDev { get; set; } | ||||||
|     public string DnnBin1Max { get; set; } |     [JsonPropertyName("DnnBin1Max")] public string DnnBin1Max { get; set; } | ||||||
|     public string DnnBin1Mean { get; set; } |     [JsonPropertyName("DnnBin1Mean")] public string DnnBin1Mean { get; set; } | ||||||
|     public string DnnBin1Min { get; set; } |     [JsonPropertyName("DnnBin1Min")] public string DnnBin1Min { get; set; } | ||||||
|     public string DnnBin1StdDev { get; set; } |     [JsonPropertyName("DnnBin1StdDev")] public string DnnBin1StdDev { get; set; } | ||||||
|     public string DnnBin2Max { get; set; } |     [JsonPropertyName("DnnBin2Max")] public string DnnBin2Max { get; set; } | ||||||
|     public string DnnBin2Mean { get; set; } |     [JsonPropertyName("DnnBin2Mean")] public string DnnBin2Mean { get; set; } | ||||||
|     public string DnnBin2Min { get; set; } |     [JsonPropertyName("DnnBin2Min")] public string DnnBin2Min { get; set; } | ||||||
|     public string DnnBin2StdDev { get; set; } |     [JsonPropertyName("DnnBin2StdDev")] public string DnnBin2StdDev { get; set; } | ||||||
|     public string DnnBin3Max { get; set; } |     [JsonPropertyName("DnnBin3Max")] public string DnnBin3Max { get; set; } | ||||||
|     public string DnnBin3Mean { get; set; } |     [JsonPropertyName("DnnBin3Mean")] public string DnnBin3Mean { get; set; } | ||||||
|     public string DnnBin3Min { get; set; } |     [JsonPropertyName("DnnBin3Min")] public string DnnBin3Min { get; set; } | ||||||
|     public string DnnBin3StdDev { get; set; } |     [JsonPropertyName("DnnBin3StdDev")] public string DnnBin3StdDev { get; set; } | ||||||
|     public string DnnBin4Max { get; set; } |     [JsonPropertyName("DnnBin4Max")] public string DnnBin4Max { get; set; } | ||||||
|     public string DnnBin4Mean { get; set; } |     [JsonPropertyName("DnnBin4Mean")] public string DnnBin4Mean { get; set; } | ||||||
|     public string DnnBin4Min { get; set; } |     [JsonPropertyName("DnnBin4Min")] public string DnnBin4Min { get; set; } | ||||||
|     public string DnnBin4StdDev { get; set; } |     [JsonPropertyName("DnnBin4StdDev")] public string DnnBin4StdDev { get; set; } | ||||||
|     public string DnnBin5Max { get; set; } |     [JsonPropertyName("DnnBin5Max")] public string DnnBin5Max { get; set; } | ||||||
|     public string DnnBin5Mean { get; set; } |     [JsonPropertyName("DnnBin5Mean")] public string DnnBin5Mean { get; set; } | ||||||
|     public string DnnBin5Min { get; set; } |     [JsonPropertyName("DnnBin5Min")] public string DnnBin5Min { get; set; } | ||||||
|     public string DnnBin5StdDev { get; set; } |     [JsonPropertyName("DnnBin5StdDev")] public string DnnBin5StdDev { get; set; } | ||||||
|     public string DnnBin6Max { get; set; } |     [JsonPropertyName("DnnBin6Max")] public string DnnBin6Max { get; set; } | ||||||
|     public string DnnBin6Mean { get; set; } |     [JsonPropertyName("DnnBin6Mean")] public string DnnBin6Mean { get; set; } | ||||||
|     public string DnnBin6Min { get; set; } |     [JsonPropertyName("DnnBin6Min")] public string DnnBin6Min { get; set; } | ||||||
|     public string DnnBin6StdDev { get; set; } |     [JsonPropertyName("DnnBin6StdDev")] public string DnnBin6StdDev { get; set; } | ||||||
|     public string DnnBin7Max { get; set; } |     [JsonPropertyName("DnnBin7Max")] public string DnnBin7Max { get; set; } | ||||||
|     public string DnnBin7Mean { get; set; } |     [JsonPropertyName("DnnBin7Mean")] public string DnnBin7Mean { get; set; } | ||||||
|     public string DnnBin7Min { get; set; } |     [JsonPropertyName("DnnBin7Min")] public string DnnBin7Min { get; set; } | ||||||
|     public string DnnBin7StdDev { get; set; } |     [JsonPropertyName("DnnBin7StdDev")] public string DnnBin7StdDev { get; set; } | ||||||
|     public string DnnBin8Max { get; set; } |     [JsonPropertyName("DnnBin8Max")] public string DnnBin8Max { get; set; } | ||||||
|     public string DnnBin8Mean { get; set; } |     [JsonPropertyName("DnnBin8Mean")] public string DnnBin8Mean { get; set; } | ||||||
|     public string DnnBin8Min { get; set; } |     [JsonPropertyName("DnnBin8Min")] public string DnnBin8Min { get; set; } | ||||||
|     public string DnnBin8StdDev { get; set; } |     [JsonPropertyName("DnnBin8StdDev")] public string DnnBin8StdDev { get; set; } | ||||||
|     public string DnnHazeAvgMax { get; set; } |     [JsonPropertyName("DnnHazeAvgMax")] public string DnnHazeAvgMax { get; set; } | ||||||
|     public string DnnHazeAvgMean { get; set; } |     [JsonPropertyName("DnnHazeAvgMean")] public string DnnHazeAvgMean { get; set; } | ||||||
|     public string DnnHazeAvgMin { get; set; } |     [JsonPropertyName("DnnHazeAvgMin")] public string DnnHazeAvgMin { get; set; } | ||||||
|     public string DnnHazeAvgStdDev { get; set; } |     [JsonPropertyName("DnnHazeAvgStdDev")] public string DnnHazeAvgStdDev { get; set; } | ||||||
|     public string DnnHazeMedianMax { get; set; } |     [JsonPropertyName("DnnHazeMedianMax")] public string DnnHazeMedianMax { get; set; } | ||||||
|     public string DnnHazeMedianMean { get; set; } |     [JsonPropertyName("DnnHazeMedianMean")] public string DnnHazeMedianMean { get; set; } | ||||||
|     public string DnnHazeMedianMin { get; set; } |     [JsonPropertyName("DnnHazeMedianMin")] public string DnnHazeMedianMin { get; set; } | ||||||
|     public string DnnHazeMedianStdDev { get; set; } |     [JsonPropertyName("DnnHazeMedianStdDev")] public string DnnHazeMedianStdDev { get; set; } | ||||||
|     public string DnnHazeStdDevMax { get; set; } |     [JsonPropertyName("DnnHazeStdDevMax")] public string DnnHazeStdDevMax { get; set; } | ||||||
|     public string DnnHazeStdDevMean { get; set; } |     [JsonPropertyName("DnnHazeStdDevMean")] public string DnnHazeStdDevMean { get; set; } | ||||||
|     public string DnnHazeStdDevMin { get; set; } |     [JsonPropertyName("DnnHazeStdDevMin")] public string DnnHazeStdDevMin { get; set; } | ||||||
|     public string DnnHazeStdDevStdDev { get; set; } |     [JsonPropertyName("DnnHazeStdDevStdDev")] public string DnnHazeStdDevStdDev { get; set; } | ||||||
|     public string DnnLpdESMax { get; set; } |     [JsonPropertyName("DnnLpdESMax")] public string DnnLpdESMax { get; set; } | ||||||
|     public string DnnLpdESMean { get; set; } |     [JsonPropertyName("DnnLpdESMean")] public string DnnLpdESMean { get; set; } | ||||||
|     public string DnnLpdESMin { get; set; } |     [JsonPropertyName("DnnLpdESMin")] public string DnnLpdESMin { get; set; } | ||||||
|     public string DnnLpdESStdDev { get; set; } |     [JsonPropertyName("DnnLpdESStdDev")] public string DnnLpdESStdDev { get; set; } | ||||||
|     public string DnnLpdMax { get; set; } |     [JsonPropertyName("DnnLpdMax")] public string DnnLpdMax { get; set; } | ||||||
|     public string DnnLpdMean { get; set; } |     [JsonPropertyName("DnnLpdMean")] public string DnnLpdMean { get; set; } | ||||||
|     public string DnnLpdMin { get; set; } |     [JsonPropertyName("DnnLpdMin")] public string DnnLpdMin { get; set; } | ||||||
|     public string DnnLpdNMax { get; set; } |     [JsonPropertyName("DnnLpdNMax")] public string DnnLpdNMax { get; set; } | ||||||
|     public string DnnLpdNMean { get; set; } |     [JsonPropertyName("DnnLpdNMean")] public string DnnLpdNMean { get; set; } | ||||||
|     public string DnnLpdNMin { get; set; } |     [JsonPropertyName("DnnLpdNMin")] public string DnnLpdNMin { get; set; } | ||||||
|     public string DnnLpdNStdDev { get; set; } |     [JsonPropertyName("DnnLpdNStdDev")] public string DnnLpdNStdDev { get; set; } | ||||||
|     public string DnnLpdStdDev { get; set; } |     [JsonPropertyName("DnnLpdStdDev")] public string DnnLpdStdDev { get; set; } | ||||||
|     public string DnnMicroScrMax { get; set; } |     [JsonPropertyName("DnnMicroScrMax")] public string DnnMicroScrMax { get; set; } | ||||||
|     public string DnnMicroScrMean { get; set; } |     [JsonPropertyName("DnnMicroScrMean")] public string DnnMicroScrMean { get; set; } | ||||||
|     public string DnnMicroScrMin { get; set; } |     [JsonPropertyName("DnnMicroScrMin")] public string DnnMicroScrMin { get; set; } | ||||||
|     public string DnnMicroScrStdDev { get; set; } |     [JsonPropertyName("DnnMicroScrStdDev")] public string DnnMicroScrStdDev { get; set; } | ||||||
|     public string DnnScrMax { get; set; } |     [JsonPropertyName("DnnScrMax")] public string DnnScrMax { get; set; } | ||||||
|     public string DnnScrMean { get; set; } |     [JsonPropertyName("DnnScrMean")] public string DnnScrMean { get; set; } | ||||||
|     public string DnnScrMin { get; set; } |     [JsonPropertyName("DnnScrMin")] public string DnnScrMin { get; set; } | ||||||
|     public string DnnScrStdDev { get; set; } |     [JsonPropertyName("DnnScrStdDev")] public string DnnScrStdDev { get; set; } | ||||||
|     public string DnnSlipMax { get; set; } |     [JsonPropertyName("DnnSlipMax")] public string DnnSlipMax { get; set; } | ||||||
|     public string DnnSlipMean { get; set; } |     [JsonPropertyName("DnnSlipMean")] public string DnnSlipMean { get; set; } | ||||||
|     public string DnnSlipMin { get; set; } |     [JsonPropertyName("DnnSlipMin")] public string DnnSlipMin { get; set; } | ||||||
|     public string DnnSlipStdDev { get; set; } |     [JsonPropertyName("DnnSlipStdDev")] public string DnnSlipStdDev { get; set; } | ||||||
|     public string DwnAllMax { get; set; } |     [JsonPropertyName("DwnAllMax")] public string DwnAllMax { get; set; } | ||||||
|     public string DwnAllMean { get; set; } |     [JsonPropertyName("DwnAllMean")] public string DwnAllMean { get; set; } | ||||||
|     public string DwnAllMin { get; set; } |     [JsonPropertyName("DwnAllMin")] public string DwnAllMin { get; set; } | ||||||
|     public string DwnAllStdDev { get; set; } |     [JsonPropertyName("DwnAllStdDev")] public string DwnAllStdDev { get; set; } | ||||||
|     public string DwnAreaCountMax { get; set; } |     [JsonPropertyName("DwnAreaCountMax")] public string DwnAreaCountMax { get; set; } | ||||||
|     public string DwnAreaCountMean { get; set; } |     [JsonPropertyName("DwnAreaCountMean")] public string DwnAreaCountMean { get; set; } | ||||||
|     public string DwnAreaCountMin { get; set; } |     [JsonPropertyName("DwnAreaCountMin")] public string DwnAreaCountMin { get; set; } | ||||||
|     public string DwnAreaCountStdDev { get; set; } |     [JsonPropertyName("DwnAreaCountStdDev")] public string DwnAreaCountStdDev { get; set; } | ||||||
|     public string DwnAreaMax { get; set; } |     [JsonPropertyName("DwnAreaMax")] public string DwnAreaMax { get; set; } | ||||||
|     public string DwnAreaMean { get; set; } |     [JsonPropertyName("DwnAreaMean")] public string DwnAreaMean { get; set; } | ||||||
|     public string DwnAreaMin { get; set; } |     [JsonPropertyName("DwnAreaMin")] public string DwnAreaMin { get; set; } | ||||||
|     public string DwnAreaStdDev { get; set; } |     [JsonPropertyName("DwnAreaStdDev")] public string DwnAreaStdDev { get; set; } | ||||||
|     public string DwnBin1Max { get; set; } |     [JsonPropertyName("DwnBin1Max")] public string DwnBin1Max { get; set; } | ||||||
|     public string DwnBin1Mean { get; set; } |     [JsonPropertyName("DwnBin1Mean")] public string DwnBin1Mean { get; set; } | ||||||
|     public string DwnBin1Min { get; set; } |     [JsonPropertyName("DwnBin1Min")] public string DwnBin1Min { get; set; } | ||||||
|     public string DwnBin1StdDev { get; set; } |     [JsonPropertyName("DwnBin1StdDev")] public string DwnBin1StdDev { get; set; } | ||||||
|     public string DwnBin2Max { get; set; } |     [JsonPropertyName("DwnBin2Max")] public string DwnBin2Max { get; set; } | ||||||
|     public string DwnBin2Mean { get; set; } |     [JsonPropertyName("DwnBin2Mean")] public string DwnBin2Mean { get; set; } | ||||||
|     public string DwnBin2Min { get; set; } |     [JsonPropertyName("DwnBin2Min")] public string DwnBin2Min { get; set; } | ||||||
|     public string DwnBin2StdDev { get; set; } |     [JsonPropertyName("DwnBin2StdDev")] public string DwnBin2StdDev { get; set; } | ||||||
|     public string DwnBin3Max { get; set; } |     [JsonPropertyName("DwnBin3Max")] public string DwnBin3Max { get; set; } | ||||||
|     public string DwnBin3Mean { get; set; } |     [JsonPropertyName("DwnBin3Mean")] public string DwnBin3Mean { get; set; } | ||||||
|     public string DwnBin3Min { get; set; } |     [JsonPropertyName("DwnBin3Min")] public string DwnBin3Min { get; set; } | ||||||
|     public string DwnBin3StdDev { get; set; } |     [JsonPropertyName("DwnBin3StdDev")] public string DwnBin3StdDev { get; set; } | ||||||
|     public string DwnBin4Max { get; set; } |     [JsonPropertyName("DwnBin4Max")] public string DwnBin4Max { get; set; } | ||||||
|     public string DwnBin4Mean { get; set; } |     [JsonPropertyName("DwnBin4Mean")] public string DwnBin4Mean { get; set; } | ||||||
|     public string DwnBin4Min { get; set; } |     [JsonPropertyName("DwnBin4Min")] public string DwnBin4Min { get; set; } | ||||||
|     public string DwnBin4StdDev { get; set; } |     [JsonPropertyName("DwnBin4StdDev")] public string DwnBin4StdDev { get; set; } | ||||||
|     public string DwnBin5Max { get; set; } |     [JsonPropertyName("DwnBin5Max")] public string DwnBin5Max { get; set; } | ||||||
|     public string DwnBin5Mean { get; set; } |     [JsonPropertyName("DwnBin5Mean")] public string DwnBin5Mean { get; set; } | ||||||
|     public string DwnBin5Min { get; set; } |     [JsonPropertyName("DwnBin5Min")] public string DwnBin5Min { get; set; } | ||||||
|     public string DwnBin5StdDev { get; set; } |     [JsonPropertyName("DwnBin5StdDev")] public string DwnBin5StdDev { get; set; } | ||||||
|     public string DwnBin6Max { get; set; } |     [JsonPropertyName("DwnBin6Max")] public string DwnBin6Max { get; set; } | ||||||
|     public string DwnBin6Mean { get; set; } |     [JsonPropertyName("DwnBin6Mean")] public string DwnBin6Mean { get; set; } | ||||||
|     public string DwnBin6Min { get; set; } |     [JsonPropertyName("DwnBin6Min")] public string DwnBin6Min { get; set; } | ||||||
|     public string DwnBin6StdDev { get; set; } |     [JsonPropertyName("DwnBin6StdDev")] public string DwnBin6StdDev { get; set; } | ||||||
|     public string DwnBin7Max { get; set; } |     [JsonPropertyName("DwnBin7Max")] public string DwnBin7Max { get; set; } | ||||||
|     public string DwnBin7Mean { get; set; } |     [JsonPropertyName("DwnBin7Mean")] public string DwnBin7Mean { get; set; } | ||||||
|     public string DwnBin7Min { get; set; } |     [JsonPropertyName("DwnBin7Min")] public string DwnBin7Min { get; set; } | ||||||
|     public string DwnBin7StdDev { get; set; } |     [JsonPropertyName("DwnBin7StdDev")] public string DwnBin7StdDev { get; set; } | ||||||
|     public string DwnBin8Max { get; set; } |     [JsonPropertyName("DwnBin8Max")] public string DwnBin8Max { get; set; } | ||||||
|     public string DwnBin8Mean { get; set; } |     [JsonPropertyName("DwnBin8Mean")] public string DwnBin8Mean { get; set; } | ||||||
|     public string DwnBin8Min { get; set; } |     [JsonPropertyName("DwnBin8Min")] public string DwnBin8Min { get; set; } | ||||||
|     public string DwnBin8StdDev { get; set; } |     [JsonPropertyName("DwnBin8StdDev")] public string DwnBin8StdDev { get; set; } | ||||||
|     public string DwnHazeAvgMax { get; set; } |     [JsonPropertyName("DwnHazeAvgMax")] public string DwnHazeAvgMax { get; set; } | ||||||
|     public string DwnHazeAvgMean { get; set; } |     [JsonPropertyName("DwnHazeAvgMean")] public string DwnHazeAvgMean { get; set; } | ||||||
|     public string DwnHazeAvgMin { get; set; } |     [JsonPropertyName("DwnHazeAvgMin")] public string DwnHazeAvgMin { get; set; } | ||||||
|     public string DwnHazeAvgStdDev { get; set; } |     [JsonPropertyName("DwnHazeAvgStdDev")] public string DwnHazeAvgStdDev { get; set; } | ||||||
|     public string DwnHazeMedianMax { get; set; } |     [JsonPropertyName("DwnHazeMedianMax")] public string DwnHazeMedianMax { get; set; } | ||||||
|     public string DwnHazeMedianMean { get; set; } |     [JsonPropertyName("DwnHazeMedianMean")] public string DwnHazeMedianMean { get; set; } | ||||||
|     public string DwnHazeMedianMin { get; set; } |     [JsonPropertyName("DwnHazeMedianMin")] public string DwnHazeMedianMin { get; set; } | ||||||
|     public string DwnHazeMedianStdDev { get; set; } |     [JsonPropertyName("DwnHazeMedianStdDev")] public string DwnHazeMedianStdDev { get; set; } | ||||||
|     public string DwnHazeStdDevMax { get; set; } |     [JsonPropertyName("DwnHazeStdDevMax")] public string DwnHazeStdDevMax { get; set; } | ||||||
|     public string DwnHazeStdDevMean { get; set; } |     [JsonPropertyName("DwnHazeStdDevMean")] public string DwnHazeStdDevMean { get; set; } | ||||||
|     public string DwnHazeStdDevMin { get; set; } |     [JsonPropertyName("DwnHazeStdDevMin")] public string DwnHazeStdDevMin { get; set; } | ||||||
|     public string DwnHazeStdDevStdDev { get; set; } |     [JsonPropertyName("DwnHazeStdDevStdDev")] public string DwnHazeStdDevStdDev { get; set; } | ||||||
|     public string DwnLpdESMax { get; set; } |     [JsonPropertyName("DwnLpdESMax")] public string DwnLpdESMax { get; set; } | ||||||
|     public string DwnLpdESMean { get; set; } |     [JsonPropertyName("DwnLpdESMean")] public string DwnLpdESMean { get; set; } | ||||||
|     public string DwnLpdESMin { get; set; } |     [JsonPropertyName("DwnLpdESMin")] public string DwnLpdESMin { get; set; } | ||||||
|     public string DwnLpdESStdDev { get; set; } |     [JsonPropertyName("DwnLpdESStdDev")] public string DwnLpdESStdDev { get; set; } | ||||||
|     public string DwnLpdMax { get; set; } |     [JsonPropertyName("DwnLpdMax")] public string DwnLpdMax { get; set; } | ||||||
|     public string DwnLpdMean { get; set; } |     [JsonPropertyName("DwnLpdMean")] public string DwnLpdMean { get; set; } | ||||||
|     public string DwnLpdMin { get; set; } |     [JsonPropertyName("DwnLpdMin")] public string DwnLpdMin { get; set; } | ||||||
|     public string DwnLpdNMax { get; set; } |     [JsonPropertyName("DwnLpdNMax")] public string DwnLpdNMax { get; set; } | ||||||
|     public string DwnLpdNMean { get; set; } |     [JsonPropertyName("DwnLpdNMean")] public string DwnLpdNMean { get; set; } | ||||||
|     public string DwnLpdNMin { get; set; } |     [JsonPropertyName("DwnLpdNMin")] public string DwnLpdNMin { get; set; } | ||||||
|     public string DwnLpdNStdDev { get; set; } |     [JsonPropertyName("DwnLpdNStdDev")] public string DwnLpdNStdDev { get; set; } | ||||||
|     public string DwnLpdStdDev { get; set; } |     [JsonPropertyName("DwnLpdStdDev")] public string DwnLpdStdDev { get; set; } | ||||||
|     public string DwnMicroScrMax { get; set; } |     [JsonPropertyName("DwnMicroScrMax")] public string DwnMicroScrMax { get; set; } | ||||||
|     public string DwnMicroScrMean { get; set; } |     [JsonPropertyName("DwnMicroScrMean")] public string DwnMicroScrMean { get; set; } | ||||||
|     public string DwnMicroScrMin { get; set; } |     [JsonPropertyName("DwnMicroScrMin")] public string DwnMicroScrMin { get; set; } | ||||||
|     public string DwnMicroScrStdDev { get; set; } |     [JsonPropertyName("DwnMicroScrStdDev")] public string DwnMicroScrStdDev { get; set; } | ||||||
|     public string DwnScrMax { get; set; } |     [JsonPropertyName("DwnScrMax")] public string DwnScrMax { get; set; } | ||||||
|     public string DwnScrMean { get; set; } |     [JsonPropertyName("DwnScrMean")] public string DwnScrMean { get; set; } | ||||||
|     public string DwnScrMin { get; set; } |     [JsonPropertyName("DwnScrMin")] public string DwnScrMin { get; set; } | ||||||
|     public string DwnScrStdDev { get; set; } |     [JsonPropertyName("DwnScrStdDev")] public string DwnScrStdDev { get; set; } | ||||||
|     public string DwnSlipMax { get; set; } |     [JsonPropertyName("DwnSlipMax")] public string DwnSlipMax { get; set; } | ||||||
|     public string DwnSlipMean { get; set; } |     [JsonPropertyName("DwnSlipMean")] public string DwnSlipMean { get; set; } | ||||||
|     public string DwnSlipMin { get; set; } |     [JsonPropertyName("DwnSlipMin")] public string DwnSlipMin { get; set; } | ||||||
|     public string DwnSlipStdDev { get; set; } |     [JsonPropertyName("DwnSlipStdDev")] public string DwnSlipStdDev { get; set; } | ||||||
|     public string DcnAll { get; set; } |     [JsonPropertyName("DcnAll")] public string DcnAll { get; set; } | ||||||
|     public string DcnArea { get; set; } |     [JsonPropertyName("DcnArea")] public string DcnArea { get; set; } | ||||||
|     public string DcnAreaCount { get; set; } |     [JsonPropertyName("DcnAreaCount")] public string DcnAreaCount { get; set; } | ||||||
|     public string DcnBin1 { get; set; } |     [JsonPropertyName("DcnBin1")] public string DcnBin1 { get; set; } | ||||||
|     public string DcnBin2 { get; set; } |     [JsonPropertyName("DcnBin2")] public string DcnBin2 { get; set; } | ||||||
|     public string DcnBin3 { get; set; } |     [JsonPropertyName("DcnBin3")] public string DcnBin3 { get; set; } | ||||||
|     public string DcnBin4 { get; set; } |     [JsonPropertyName("DcnBin4")] public string DcnBin4 { get; set; } | ||||||
|     public string DcnBin5 { get; set; } |     [JsonPropertyName("DcnBin5")] public string DcnBin5 { get; set; } | ||||||
|     public string DcnBin6 { get; set; } |     [JsonPropertyName("DcnBin6")] public string DcnBin6 { get; set; } | ||||||
|     public string DcnBin7 { get; set; } |     [JsonPropertyName("DcnBin7")] public string DcnBin7 { get; set; } | ||||||
|     public string DcnBin8 { get; set; } |     [JsonPropertyName("DcnBin8")] public string DcnBin8 { get; set; } | ||||||
|     public string DcnHazeAvg { get; set; } |     [JsonPropertyName("DcnHazeAvg")] public string DcnHazeAvg { get; set; } | ||||||
|     public string DcnHazeMedian { get; set; } |     [JsonPropertyName("DcnHazeMedian")] public string DcnHazeMedian { get; set; } | ||||||
|     public string DcnHazeStdDev { get; set; } |     [JsonPropertyName("DcnHazeStdDev")] public string DcnHazeStdDev { get; set; } | ||||||
|     public string DcnLpd { get; set; } |     [JsonPropertyName("DcnLpd")] public string DcnLpd { get; set; } | ||||||
|     public string DcnLpdES { get; set; } |     [JsonPropertyName("DcnLpdES")] public string DcnLpdES { get; set; } | ||||||
|     public string DcnLpdN { get; set; } |     [JsonPropertyName("DcnLpdN")] public string DcnLpdN { get; set; } | ||||||
|     public string DcnMicroScr { get; set; } |     [JsonPropertyName("DcnMicroScr")] public string DcnMicroScr { get; set; } | ||||||
|     public string DcnScr { get; set; } |     [JsonPropertyName("DcnScr")] public string DcnScr { get; set; } | ||||||
|     public string DcnSlip { get; set; } |     [JsonPropertyName("DcnSlip")] public string DcnSlip { get; set; } | ||||||
|     public string DnnAll { get; set; } |     [JsonPropertyName("DnnAll")] public string DnnAll { get; set; } | ||||||
|     public string DnnArea { get; set; } |     [JsonPropertyName("DnnArea")] public string DnnArea { get; set; } | ||||||
|     public string DnnAreaCount { get; set; } |     [JsonPropertyName("DnnAreaCount")] public string DnnAreaCount { get; set; } | ||||||
|     public string DnnBin1 { get; set; } |     [JsonPropertyName("DnnBin1")] public string DnnBin1 { get; set; } | ||||||
|     public string DnnBin2 { get; set; } |     [JsonPropertyName("DnnBin2")] public string DnnBin2 { get; set; } | ||||||
|     public string DnnBin3 { get; set; } |     [JsonPropertyName("DnnBin3")] public string DnnBin3 { get; set; } | ||||||
|     public string DnnBin4 { get; set; } |     [JsonPropertyName("DnnBin4")] public string DnnBin4 { get; set; } | ||||||
|     public string DnnBin5 { get; set; } |     [JsonPropertyName("DnnBin5")] public string DnnBin5 { get; set; } | ||||||
|     public string DnnBin6 { get; set; } |     [JsonPropertyName("DnnBin6")] public string DnnBin6 { get; set; } | ||||||
|     public string DnnBin7 { get; set; } |     [JsonPropertyName("DnnBin7")] public string DnnBin7 { get; set; } | ||||||
|     public string DnnBin8 { get; set; } |     [JsonPropertyName("DnnBin8")] public string DnnBin8 { get; set; } | ||||||
|     public string DnnHazeAvg { get; set; } |     [JsonPropertyName("DnnHazeAvg")] public string DnnHazeAvg { get; set; } | ||||||
|     public string DnnHazeMedian { get; set; } |     [JsonPropertyName("DnnHazeMedian")] public string DnnHazeMedian { get; set; } | ||||||
|     public string DnnHazeStdDev { get; set; } |     [JsonPropertyName("DnnHazeStdDev")] public string DnnHazeStdDev { get; set; } | ||||||
|     public string DnnLpd { get; set; } |     [JsonPropertyName("DnnLpd")] public string DnnLpd { get; set; } | ||||||
|     public string DnnLpdES { get; set; } |     [JsonPropertyName("DnnLpdES")] public string DnnLpdES { get; set; } | ||||||
|     public string DnnLpdN { get; set; } |     [JsonPropertyName("DnnLpdN")] public string DnnLpdN { get; set; } | ||||||
|     public string DnnMicroScr { get; set; } |     [JsonPropertyName("DnnMicroScr")] public string DnnMicroScr { get; set; } | ||||||
|     public string DnnScr { get; set; } |     [JsonPropertyName("DnnScr")] public string DnnScr { get; set; } | ||||||
|     public string DnnSlip { get; set; } |     [JsonPropertyName("DnnSlip")] public string DnnSlip { get; set; } | ||||||
|     public string DwnAll { get; set; } |     [JsonPropertyName("DwnAll")] public string DwnAll { get; set; } | ||||||
|     public string DwnArea { get; set; } |     [JsonPropertyName("DwnArea")] public string DwnArea { get; set; } | ||||||
|     public string DwnAreaCount { get; set; } |     [JsonPropertyName("DwnAreaCount")] public string DwnAreaCount { get; set; } | ||||||
|     public string DwnBin1 { get; set; } |     [JsonPropertyName("DwnBin1")] public string DwnBin1 { get; set; } | ||||||
|     public string DwnBin2 { get; set; } |     [JsonPropertyName("DwnBin2")] public string DwnBin2 { get; set; } | ||||||
|     public string DwnBin3 { get; set; } |     [JsonPropertyName("DwnBin3")] public string DwnBin3 { get; set; } | ||||||
|     public string DwnBin4 { get; set; } |     [JsonPropertyName("DwnBin4")] public string DwnBin4 { get; set; } | ||||||
|     public string DwnBin5 { get; set; } |     [JsonPropertyName("DwnBin5")] public string DwnBin5 { get; set; } | ||||||
|     public string DwnBin6 { get; set; } |     [JsonPropertyName("DwnBin6")] public string DwnBin6 { get; set; } | ||||||
|     public string DwnBin7 { get; set; } |     [JsonPropertyName("DwnBin7")] public string DwnBin7 { get; set; } | ||||||
|     public string DwnBin8 { get; set; } |     [JsonPropertyName("DwnBin8")] public string DwnBin8 { get; set; } | ||||||
|     public string DwnHazeAvg { get; set; } |     [JsonPropertyName("DwnHazeAvg")] public string DwnHazeAvg { get; set; } | ||||||
|     public string DwnHazeMedian { get; set; } |     [JsonPropertyName("DwnHazeMedian")] public string DwnHazeMedian { get; set; } | ||||||
|     public string DwnHazeStdDev { get; set; } |     [JsonPropertyName("DwnHazeStdDev")] public string DwnHazeStdDev { get; set; } | ||||||
|     public string DwnLpd { get; set; } |     [JsonPropertyName("DwnLpd")] public string DwnLpd { get; set; } | ||||||
|     public string DwnLpdES { get; set; } |     [JsonPropertyName("DwnLpdES")] public string DwnLpdES { get; set; } | ||||||
|     public string DwnLpdN { get; set; } |     [JsonPropertyName("DwnLpdN")] public string DwnLpdN { get; set; } | ||||||
|     public string DwnMicroScr { get; set; } |     [JsonPropertyName("DwnMicroScr")] public string DwnMicroScr { get; set; } | ||||||
|     public string DwnScr { get; set; } |     [JsonPropertyName("DwnScr")] public string DwnScr { get; set; } | ||||||
|     public string DwnSlip { get; set; } |     [JsonPropertyName("DwnSlip")] public string DwnSlip { get; set; } | ||||||
|  |  | ||||||
|     string IDescription.GetEventDescription() => "File Has been read and parsed"; |     string IDescription.GetEventDescription() => "File Has been read and parsed"; | ||||||
|  |  | ||||||
| @ -782,6 +785,8 @@ public class Description : IDescription, Shared.Properties.IDescription | |||||||
|                     PSN = processData.PSN, |                     PSN = processData.PSN, | ||||||
|                     Reactor = processData.Reactor, |                     Reactor = processData.Reactor, | ||||||
|                     Recipe = processData.Recipe, |                     Recipe = processData.Recipe, | ||||||
|  |                     IndexOf = nameof(IndexOf), | ||||||
|  |                     AttemptCounter = nameof(AttemptCounter), | ||||||
|                     // |                     // | ||||||
|                     Grade = detail.Grade, |                     Grade = detail.Grade, | ||||||
|                     HeaderUniqueId = detail.HeaderUniqueID, |                     HeaderUniqueId = detail.HeaderUniqueID, | ||||||
| @ -1128,6 +1133,8 @@ public class Description : IDescription, Shared.Properties.IDescription | |||||||
|             PSN = nameof(PSN), |             PSN = nameof(PSN), | ||||||
|             Reactor = nameof(Reactor), |             Reactor = nameof(Reactor), | ||||||
|             Recipe = nameof(Recipe), |             Recipe = nameof(Recipe), | ||||||
|  |             IndexOf = nameof(IndexOf), | ||||||
|  |             AttemptCounter = nameof(AttemptCounter), | ||||||
|             // |             // | ||||||
|             Grade = nameof(Grade), |             Grade = nameof(Grade), | ||||||
|             HeaderUniqueId = nameof(HeaderUniqueId), |             HeaderUniqueId = nameof(HeaderUniqueId), | ||||||
| @ -1444,4 +1451,16 @@ public class Description : IDescription, Shared.Properties.IDescription | |||||||
|  |  | ||||||
|     internal static string GetDateFormat() => "MM/dd/yyyy hh:mm:ss tt"; |     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 | ||||||
|  | { | ||||||
| } | } | ||||||
| @ -1,76 +1,90 @@ | |||||||
| namespace Adaptation.FileHandlers.txt; | using System.Text.Json.Serialization; | ||||||
|  |  | ||||||
|  | namespace Adaptation.FileHandlers.txt; | ||||||
|  |  | ||||||
| public class Detail | public class Detail | ||||||
| { | { | ||||||
|  |  | ||||||
|     public string Grade { get; set; } |     [JsonPropertyName("Grade")] public string Grade { get; set; } | ||||||
|     public string HeaderUniqueID { get; set; } |     public string HeaderUniqueID { get; set; } | ||||||
|     public string Side { get; set; } |     [JsonPropertyName("Side")] public string Side { get; set; } | ||||||
|     public string SrcDest { get; set; } |     [JsonPropertyName("SrcDest")] public string SrcDest { get; set; } | ||||||
|     public string UniqueID { 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 Data { get; set; } | ||||||
|     public string DcnAll { get; set; } |     [JsonPropertyName("DcnAll")] public string DcnAll { get; set; } | ||||||
|     public string DcnArea { get; set; } |     [JsonPropertyName("DcnArea")] public string DcnArea { get; set; } | ||||||
|     public string DcnAreaCount { get; set; } |     [JsonPropertyName("DcnAreaCount")] public string DcnAreaCount { get; set; } | ||||||
|     public string DcnBin1 { get; set; } |     [JsonPropertyName("DcnBin1")] public string DcnBin1 { get; set; } | ||||||
|     public string DcnBin2 { get; set; } |     [JsonPropertyName("DcnBin2")] public string DcnBin2 { get; set; } | ||||||
|     public string DcnBin3 { get; set; } |     [JsonPropertyName("DcnBin3")] public string DcnBin3 { get; set; } | ||||||
|     public string DcnBin4 { get; set; } |     [JsonPropertyName("DcnBin4")] public string DcnBin4 { get; set; } | ||||||
|     public string DcnBin5 { get; set; } |     [JsonPropertyName("DcnBin5")] public string DcnBin5 { get; set; } | ||||||
|     public string DcnBin6 { get; set; } |     [JsonPropertyName("DcnBin6")] public string DcnBin6 { get; set; } | ||||||
|     public string DcnBin7 { get; set; } |     [JsonPropertyName("DcnBin7")] public string DcnBin7 { get; set; } | ||||||
|     public string DcnBin8 { get; set; } |     [JsonPropertyName("DcnBin8")] public string DcnBin8 { get; set; } | ||||||
|     public string DcnHazeAvg { get; set; } |     [JsonPropertyName("DcnHazeAvg")] public string DcnHazeAvg { get; set; } | ||||||
|     public string DcnHazeMedian { get; set; } |     [JsonPropertyName("DcnHazeMedian")] public string DcnHazeMedian { get; set; } | ||||||
|     public string DcnHazeStdDev { get; set; } |     [JsonPropertyName("DcnHazeStdDev")] public string DcnHazeStdDev { get; set; } | ||||||
|     public string DcnLpd { get; set; } |     [JsonPropertyName("DcnLpd")] public string DcnLpd { get; set; } | ||||||
|     public string DcnLpdES { get; set; } |     [JsonPropertyName("DcnLpdES")] public string DcnLpdES { get; set; } | ||||||
|     public string DcnLpdN { get; set; } |     [JsonPropertyName("DcnLpdN")] public string DcnLpdN { get; set; } | ||||||
|     public string DcnMicroScr { get; set; } |     [JsonPropertyName("DcnMicroScr")] public string DcnMicroScr { get; set; } | ||||||
|     public string DcnScr { get; set; } |     [JsonPropertyName("DcnScr")] public string DcnScr { get; set; } | ||||||
|     public string DcnSlip { get; set; } |     [JsonPropertyName("DcnSlip")] public string DcnSlip { get; set; } | ||||||
|     public string DnnAll { get; set; } |     [JsonPropertyName("DnnAll")] public string DnnAll { get; set; } | ||||||
|     public string DnnArea { get; set; } |     [JsonPropertyName("DnnArea")] public string DnnArea { get; set; } | ||||||
|     public string DnnAreaCount { get; set; } |     [JsonPropertyName("DnnAreaCount")] public string DnnAreaCount { get; set; } | ||||||
|     public string DnnBin1 { get; set; } |     [JsonPropertyName("DnnBin1")] public string DnnBin1 { get; set; } | ||||||
|     public string DnnBin2 { get; set; } |     [JsonPropertyName("DnnBin2")] public string DnnBin2 { get; set; } | ||||||
|     public string DnnBin3 { get; set; } |     [JsonPropertyName("DnnBin3")] public string DnnBin3 { get; set; } | ||||||
|     public string DnnBin4 { get; set; } |     [JsonPropertyName("DnnBin4")] public string DnnBin4 { get; set; } | ||||||
|     public string DnnBin5 { get; set; } |     [JsonPropertyName("DnnBin5")] public string DnnBin5 { get; set; } | ||||||
|     public string DnnBin6 { get; set; } |     [JsonPropertyName("DnnBin6")] public string DnnBin6 { get; set; } | ||||||
|     public string DnnBin7 { get; set; } |     [JsonPropertyName("DnnBin7")] public string DnnBin7 { get; set; } | ||||||
|     public string DnnBin8 { get; set; } |     [JsonPropertyName("DnnBin8")] public string DnnBin8 { get; set; } | ||||||
|     public string DnnHazeAvg { get; set; } |     [JsonPropertyName("DnnHazeAvg")] public string DnnHazeAvg { get; set; } | ||||||
|     public string DnnHazeMedian { get; set; } |     [JsonPropertyName("DnnHazeMedian")] public string DnnHazeMedian { get; set; } | ||||||
|     public string DnnHazeStdDev { get; set; } |     [JsonPropertyName("DnnHazeStdDev")] public string DnnHazeStdDev { get; set; } | ||||||
|     public string DnnLpd { get; set; } |     [JsonPropertyName("DnnLpd")] public string DnnLpd { get; set; } | ||||||
|     public string DnnLpdES { get; set; } |     [JsonPropertyName("DnnLpdES")] public string DnnLpdES { get; set; } | ||||||
|     public string DnnLpdN { get; set; } |     [JsonPropertyName("DnnLpdN")] public string DnnLpdN { get; set; } | ||||||
|     public string DnnMicroScr { get; set; } |     [JsonPropertyName("DnnMicroScr")] public string DnnMicroScr { get; set; } | ||||||
|     public string DnnScr { get; set; } |     [JsonPropertyName("DnnScr")] public string DnnScr { get; set; } | ||||||
|     public string DnnSlip { get; set; } |     [JsonPropertyName("DnnSlip")] public string DnnSlip { get; set; } | ||||||
|     public string DwnAll { get; set; } |     [JsonPropertyName("DwnAll")] public string DwnAll { get; set; } | ||||||
|     public string DwnArea { get; set; } |     [JsonPropertyName("DwnArea")] public string DwnArea { get; set; } | ||||||
|     public string DwnAreaCount { get; set; } |     [JsonPropertyName("DwnAreaCount")] public string DwnAreaCount { get; set; } | ||||||
|     public string DwnBin1 { get; set; } |     [JsonPropertyName("DwnBin1")] public string DwnBin1 { get; set; } | ||||||
|     public string DwnBin2 { get; set; } |     [JsonPropertyName("DwnBin2")] public string DwnBin2 { get; set; } | ||||||
|     public string DwnBin3 { get; set; } |     [JsonPropertyName("DwnBin3")] public string DwnBin3 { get; set; } | ||||||
|     public string DwnBin4 { get; set; } |     [JsonPropertyName("DwnBin4")] public string DwnBin4 { get; set; } | ||||||
|     public string DwnBin5 { get; set; } |     [JsonPropertyName("DwnBin5")] public string DwnBin5 { get; set; } | ||||||
|     public string DwnBin6 { get; set; } |     [JsonPropertyName("DwnBin6")] public string DwnBin6 { get; set; } | ||||||
|     public string DwnBin7 { get; set; } |     [JsonPropertyName("DwnBin7")] public string DwnBin7 { get; set; } | ||||||
|     public string DwnBin8 { get; set; } |     [JsonPropertyName("DwnBin8")] public string DwnBin8 { get; set; } | ||||||
|     public string DwnHazeAvg { get; set; } |     [JsonPropertyName("DwnHazeAvg")] public string DwnHazeAvg { get; set; } | ||||||
|     public string DwnHazeMedian { get; set; } |     [JsonPropertyName("DwnHazeMedian")] public string DwnHazeMedian { get; set; } | ||||||
|     public string DwnHazeStdDev { get; set; } |     [JsonPropertyName("DwnHazeStdDev")] public string DwnHazeStdDev { get; set; } | ||||||
|     public string DwnLpd { get; set; } |     [JsonPropertyName("DwnLpd")] public string DwnLpd { get; set; } | ||||||
|     public string DwnLpdES { get; set; } |     [JsonPropertyName("DwnLpdES")] public string DwnLpdES { get; set; } | ||||||
|     public string DwnLpdN { get; set; } |     [JsonPropertyName("DwnLpdN")] public string DwnLpdN { get; set; } | ||||||
|     public string DwnMicroScr { get; set; } |     [JsonPropertyName("DwnMicroScr")] public string DwnMicroScr { get; set; } | ||||||
|     public string DwnScr { get; set; } |     [JsonPropertyName("DwnScr")] public string DwnScr { get; set; } | ||||||
|     public string DwnSlip { get; set; } |     [JsonPropertyName("DwnSlip")] public string DwnSlip { get; set; } | ||||||
|  |  | ||||||
|     public Detail() => Data = "*Data*"; |     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 | ||||||
|  | { | ||||||
| } | } | ||||||
| @ -1060,12 +1060,11 @@ public class ProcessData : IProcessData | |||||||
|     { |     { | ||||||
|         List<Description> results = new(); |         List<Description> results = new(); | ||||||
|         Description? description; |         Description? description; | ||||||
|         JsonSerializerOptions jsonSerializerOptions = new() { NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString }; |  | ||||||
|         foreach (JsonElement jsonElement in jsonElements) |         foreach (JsonElement jsonElement in jsonElements) | ||||||
|         { |         { | ||||||
|             if (jsonElement.ValueKind != JsonValueKind.Object) |             if (jsonElement.ValueKind != JsonValueKind.Object) | ||||||
|                 throw new Exception(); |                 throw new Exception(); | ||||||
|             description = JsonSerializer.Deserialize<Description>(jsonElement.ToString(), jsonSerializerOptions); |             description = JsonSerializer.Deserialize(jsonElement.ToString(), DescriptionSourceGenerationContext.Default.Description); | ||||||
|             if (description is null) |             if (description is null) | ||||||
|                 continue; |                 continue; | ||||||
|             results.Add(description); |             results.Add(description); | ||||||
|  | |||||||
| @ -226,9 +226,9 @@ public class MonIn : IMonIn, IDisposable | |||||||
|     { |     { | ||||||
|         StringBuilder stringBuilder = new(); |         StringBuilder stringBuilder = new(); | ||||||
|         if (string.IsNullOrEmpty(subresource)) |         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 |         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(); |         return stringBuilder.ToString(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -247,14 +247,14 @@ public class MonIn : IMonIn, IDisposable | |||||||
|         if (string.IsNullOrEmpty(subresource)) |         if (string.IsNullOrEmpty(subresource)) | ||||||
|         { |         { | ||||||
|             if (unit.Equals(string.Empty) && !interval.HasValue) |             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 |             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) |         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 |         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(); |         return stringBuilder.ToString(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | |||||||
| @ -41,24 +41,6 @@ stages: | |||||||
|             displayName: "Nuget Clear" |             displayName: "Nuget Clear" | ||||||
|             enabled: false |             enabled: false | ||||||
|  |  | ||||||
|           - task: CopyFiles@2 |  | ||||||
|             displayName: 'Copy GhostPCL Files to: D:\EAF-Mesa-Integration\copy' |  | ||||||
|             inputs: |  | ||||||
|               Contents: "*" |  | ||||||
|               SourceFolder: '\\mesfs.infineon.com\EC_EAFRepository\Staging\DeploymentStorage\GhostPCL' |  | ||||||
|               TargetFolder: 'D:\EAF-Mesa-Integration\copy\GhostPCL' |  | ||||||
|               OverWrite: true |  | ||||||
|             enabled: false |  | ||||||
|  |  | ||||||
|           - task: CopyFiles@2 |  | ||||||
|             displayName: 'Copy LincPDFC Files to: D:\EAF-Mesa-Integration\copy' |  | ||||||
|             inputs: |  | ||||||
|               Contents: "*" |  | ||||||
|               SourceFolder: '\\mesfs.infineon.com\EC_EAFRepository\Staging\DeploymentStorage\LincPDFC' |  | ||||||
|               TargetFolder: 'D:\EAF-Mesa-Integration\copy\LincPDFC' |  | ||||||
|               OverWrite: true |  | ||||||
|             enabled: false |  | ||||||
|  |  | ||||||
|           - script: | |           - script: | | ||||||
|               "C:\program files\dotnet\dotnet.exe" user-secrets init |               "C:\program files\dotnet\dotnet.exe" user-secrets init | ||||||
|               "C:\program files\dotnet\dotnet.exe" user-secrets set "BuildNumber" "$(Build.BuildId)" |               "C:\program files\dotnet\dotnet.exe" user-secrets set "BuildNumber" "$(Build.BuildId)" | ||||||
| @ -202,24 +184,6 @@ stages: | |||||||
|             displayName: "Nuget Clear" |             displayName: "Nuget Clear" | ||||||
|             enabled: false |             enabled: false | ||||||
|  |  | ||||||
|           - task: CopyFiles@2 |  | ||||||
|             displayName: 'Copy GhostPCL Files to: D:\EAF-Mesa-Integration\copy' |  | ||||||
|             inputs: |  | ||||||
|               Contents: "*" |  | ||||||
|               SourceFolder: '\\mestsa003.infineon.com\EC_EAFRepository\Staging\DeploymentStorage\GhostPCL' |  | ||||||
|               TargetFolder: 'D:\EAF-Mesa-Integration\copy\GhostPCL' |  | ||||||
|               OverWrite: true |  | ||||||
|             enabled: false |  | ||||||
|  |  | ||||||
|           - task: CopyFiles@2 |  | ||||||
|             displayName: 'Copy LincPDFC Files to: D:\EAF-Mesa-Integration\copy' |  | ||||||
|             inputs: |  | ||||||
|               Contents: "*" |  | ||||||
|               SourceFolder: '\\mestsa003.infineon.com\EC_EAFRepository\Staging\DeploymentStorage\LincPDFC' |  | ||||||
|               TargetFolder: 'D:\EAF-Mesa-Integration\copy\LincPDFC' |  | ||||||
|               OverWrite: true |  | ||||||
|             enabled: false |  | ||||||
|  |  | ||||||
|           - script: | |           - script: | | ||||||
|               "C:\program files\dotnet\dotnet.exe" user-secrets init |               "C:\program files\dotnet\dotnet.exe" user-secrets init | ||||||
|               "C:\program files\dotnet\dotnet.exe" user-secrets set "BuildNumber" "$(Build.BuildId)" |               "C:\program files\dotnet\dotnet.exe" user-secrets set "BuildNumber" "$(Build.BuildId)" | ||||||
|  | |||||||
| @ -3,6 +3,7 @@ using System; | |||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Linq; | using System.Linq; | ||||||
| using System.Text.Json; | using System.Text.Json; | ||||||
|  | using System.Text.Json.Serialization; | ||||||
|  |  | ||||||
| namespace Adaptation.Shared.Duplicator; | 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"; |     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 | ||||||
|  | { | ||||||
| } | } | ||||||
| @ -9,7 +9,6 @@ using System.IO; | |||||||
| using System.Linq; | using System.Linq; | ||||||
| using System.Text; | using System.Text; | ||||||
| using System.Text.Json; | using System.Text.Json; | ||||||
| using System.Text.Json.Serialization; |  | ||||||
| using System.Threading; | using System.Threading; | ||||||
|  |  | ||||||
| namespace Adaptation.Shared; | namespace Adaptation.Shared; | ||||||
| @ -383,17 +382,24 @@ public class FileRead : Properties.IFileRead | |||||||
|         else |         else | ||||||
|         { |         { | ||||||
|             string[] files; |             string[] files; | ||||||
|             string logisticsSequence = _Logistics.Sequence.ToString(); |             string[] directories; | ||||||
|             string[] directories = Directory.GetDirectories(jobIdDirectory, $"*{logisticsSequence}*", SearchOption.TopDirectoryOnly); |             string logisticsSequence; | ||||||
|             foreach (string directory in directories) |             for (int i = 0; i < 10; i++) | ||||||
|             { |             { | ||||||
|                 files = Directory.GetFiles(directory, "*", SearchOption.TopDirectoryOnly); |                 logisticsSequence = (_Logistics.Sequence + -i).ToString(); | ||||||
|                 if (files.Length == 0) |                 directories = Directory.GetDirectories(jobIdDirectory, $"*{logisticsSequence}*", SearchOption.TopDirectoryOnly); | ||||||
|                     continue; |                 foreach (string directory in directories) | ||||||
|                 results.Add(directory); |                 { | ||||||
|  |                     files = Directory.GetFiles(directory, "*", SearchOption.TopDirectoryOnly); | ||||||
|  |                     if (files.Length == 0) | ||||||
|  |                         continue; | ||||||
|  |                     results.Add(directory); | ||||||
|  |                 } | ||||||
|  |                 if (results.Count == 1) | ||||||
|  |                     break; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         if ((results is null) || results.Count != 1) |         if (results.Count != 1) | ||||||
|             throw new Exception("Didn't find directory by logistics sequence"); |             throw new Exception("Didn't find directory by logistics sequence"); | ||||||
|         return results.ToArray(); |         return results.ToArray(); | ||||||
|     } |     } | ||||||
| @ -440,12 +446,13 @@ public class FileRead : Properties.IFileRead | |||||||
|     { |     { | ||||||
|         List<Properties.IDescription> results = new(); |         List<Properties.IDescription> results = new(); | ||||||
|         Duplicator.Description description; |         Duplicator.Description description; | ||||||
|         JsonSerializerOptions jsonSerializerOptions = new() { NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString }; |  | ||||||
|         foreach (JsonElement jsonElement in jsonElements) |         foreach (JsonElement jsonElement in jsonElements) | ||||||
|         { |         { | ||||||
|             if (jsonElement.ValueKind != JsonValueKind.Object) |             if (jsonElement.ValueKind != JsonValueKind.Object) | ||||||
|                 throw new Exception(); |                 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); |             results.Add(description); | ||||||
|         } |         } | ||||||
|         return results; |         return results; | ||||||
|  | |||||||
| @ -2,12 +2,14 @@ using Adaptation.Shared.Methods; | |||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Collections.ObjectModel; | using System.Collections.ObjectModel; | ||||||
|  | using System.Diagnostics; | ||||||
| using System.Globalization; | using System.Globalization; | ||||||
| using System.IO; | using System.IO; | ||||||
| using System.Linq; | using System.Linq; | ||||||
| using System.Text; | using System.Text; | ||||||
| using System.Text.Json; | using System.Text.Json; | ||||||
| using System.Text.Json.Serialization; | using System.Text.Json.Serialization; | ||||||
|  | using System.Text.RegularExpressions; | ||||||
|  |  | ||||||
| namespace Adaptation.Shared; | namespace Adaptation.Shared; | ||||||
|  |  | ||||||
| @ -185,7 +187,7 @@ internal class ProcessDataStandardFormat | |||||||
|                     break; |                     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); |         logistics = GetLogistics(footer, linesOne: linesOne); | ||||||
|         if (logistics.Count == 0) |         if (logistics.Count == 0) | ||||||
|             sequence = null; |             sequence = null; | ||||||
| @ -227,19 +229,19 @@ internal class ProcessDataStandardFormat | |||||||
|         return results.AsReadOnly(); |         return results.AsReadOnly(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     internal static ProcessDataStandardFormat GetProcessDataStandardFormat(string reportFullPath, ProcessDataStandardFormatMapping pdsfMapping) |     internal static ProcessDataStandardFormat GetProcessDataStandardFormat(string reportFullPath, ProcessDataStandardFormatMapping processDataStandardFormatMapping) | ||||||
|     { |     { | ||||||
|         ProcessDataStandardFormat result; |         ProcessDataStandardFormat result; | ||||||
|         const int columnsLine = 6; |         const int columnsLine = 6; | ||||||
|         FileInfo fileInfo = new(reportFullPath); |         FileInfo fileInfo = new(reportFullPath); | ||||||
|         ProcessDataStandardFormat processDataStandardFormat = GetProcessDataStandardFormat(fileInfo.LastWriteTime, columnsLine, fileInfo.FullName, lines: null); |         ProcessDataStandardFormat processDataStandardFormat = GetProcessDataStandardFormat(fileInfo.LastWriteTime, columnsLine, fileInfo.FullName, lines: null); | ||||||
|         JsonElement[]? jsonElements = pdsfMapping.OldColumnNames.Count != pdsfMapping.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(); |         JsonProperty[]? jsonProperties = jsonElements is null || jsonElements.Length == 0 ? null : jsonElements[0].EnumerateObject().ToArray(); | ||||||
|         if (jsonElements is null || jsonProperties is null || jsonProperties.Length != pdsfMapping.NewColumnNames.Count) |         if (jsonElements is null || jsonProperties is null || jsonProperties.Length != processDataStandardFormatMapping.NewColumnNames.Count) | ||||||
|             result = processDataStandardFormat; |             result = processDataStandardFormat; | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
|             result = GetProcessDataStandardFormat(pdsfMapping, jsonElements, processDataStandardFormat); |             result = GetProcessDataStandardFormat(processDataStandardFormatMapping, jsonElements, processDataStandardFormat); | ||||||
|             if (result.Sequence is null || result.Columns.Count == 0 || result.Body.Count == 0 || result.Logistics.Count == 0) |             if (result.Sequence is null || result.Columns.Count == 0 || result.Body.Count == 0 || result.Logistics.Count == 0) | ||||||
|                 result = processDataStandardFormat; |                 result = processDataStandardFormat; | ||||||
|         } |         } | ||||||
| @ -335,12 +337,14 @@ internal class ProcessDataStandardFormat | |||||||
|         int column; |         int column; | ||||||
|         string value; |         string value; | ||||||
|         JsonProperty jsonProperty; |         JsonProperty jsonProperty; | ||||||
|  |         List<string> debug = new(); | ||||||
|         List<string> values = new(); |         List<string> values = new(); | ||||||
|         List<string> results = new(); |         List<string> results = new(); | ||||||
|         JsonProperty[] jsonProperties; |         JsonProperty[] jsonProperties; | ||||||
|         List<string> unknownColumns = new(); |         List<string> unknownColumns = new(); | ||||||
|         for (int i = 0; i < jsonElements.Length; i++) |         for (int i = 0; i < jsonElements.Length; i++) | ||||||
|         { |         { | ||||||
|  |             debug.Clear(); | ||||||
|             values.Clear(); |             values.Clear(); | ||||||
|             if (jsonElements[i].ValueKind != JsonValueKind.Object) |             if (jsonElements[i].ValueKind != JsonValueKind.Object) | ||||||
|             { |             { | ||||||
| @ -354,16 +358,22 @@ internal class ProcessDataStandardFormat | |||||||
|             { |             { | ||||||
|                 column = processDataStandardFormatMapping.ColumnIndices[c]; |                 column = processDataStandardFormatMapping.ColumnIndices[c]; | ||||||
|                 if (column == -1) |                 if (column == -1) | ||||||
|  |                 { | ||||||
|                     value = processDataStandardFormatMapping.OldColumnNames[c]; |                     value = processDataStandardFormatMapping.OldColumnNames[c]; | ||||||
|  |                     debug.Add($"<Item C=-01 Name=\"{value}\" DataType=\"8\" XmlType=\"1\" XPath=\"//records/record/{value}\" />"); | ||||||
|  |                 } | ||||||
|                 else |                 else | ||||||
|                 { |                 { | ||||||
|                     jsonProperty = jsonProperties[column]; |                     jsonProperty = jsonProperties[column]; | ||||||
|                     value = jsonProperty.Value.ToString(); |                     value = jsonProperty.Value.ToString(); | ||||||
|  |                     debug.Add($"<Item C={column + 2:000} Name=\"{processDataStandardFormatMapping.OldColumnNames[c]}\" DataType=\"8\" XmlType=\"1\" XPath=\"//records/record/{jsonProperty.Name}\" />"); | ||||||
|                 } |                 } | ||||||
|                 values.Add(value); |                 values.Add(value); | ||||||
|             } |             } | ||||||
|             results.Add(string.Join("\t", values)); |             results.Add(string.Join("\t", values)); | ||||||
|         } |         } | ||||||
|  |         if (Debugger.IsAttached) | ||||||
|  |             File.WriteAllText("../../.txt", string.Join(Environment.NewLine, debug.OrderBy(l => l))); | ||||||
|         result = new(body: new(results), |         result = new(body: new(results), | ||||||
|                      columns: processDataStandardFormatMapping.OldColumnNames, |                      columns: processDataStandardFormatMapping.OldColumnNames, | ||||||
|                      footer: processDataStandardFormat.Footer, |                      footer: processDataStandardFormat.Footer, | ||||||
| @ -378,7 +388,6 @@ internal class ProcessDataStandardFormat | |||||||
|     { |     { | ||||||
|         if (processDataStandardFormat.InputPDSF is null) |         if (processDataStandardFormat.InputPDSF is null) | ||||||
|             throw new NullReferenceException(nameof(processDataStandardFormat.InputPDSF)); |             throw new NullReferenceException(nameof(processDataStandardFormat.InputPDSF)); | ||||||
| #pragma warning disable CA1845, IDE0057 |  | ||||||
|         string result; |         string result; | ||||||
|         string line; |         string line; | ||||||
|         string value; |         string value; | ||||||
| @ -518,6 +527,8 @@ internal class ProcessDataStandardFormat | |||||||
|     internal static void Write(string path, ProcessDataStandardFormat processDataStandardFormat, List<Metrology.WS.Results>? wsResults) |     internal static void Write(string path, ProcessDataStandardFormat processDataStandardFormat, List<Metrology.WS.Results>? wsResults) | ||||||
|     { |     { | ||||||
|         List<string> results = new(); |         List<string> results = new(); | ||||||
|  |         if (processDataStandardFormat.InputPDSF is null) | ||||||
|  |             throw new NullReferenceException(nameof(processDataStandardFormat.InputPDSF)); | ||||||
|         if (processDataStandardFormat.Sequence is null) |         if (processDataStandardFormat.Sequence is null) | ||||||
|             throw new NullReferenceException(nameof(processDataStandardFormat.Sequence)); |             throw new NullReferenceException(nameof(processDataStandardFormat.Sequence)); | ||||||
|         string endOffset = "E#######T"; |         string endOffset = "E#######T"; | ||||||
| @ -555,25 +566,25 @@ internal class ProcessDataStandardFormat | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         results.Add("END_HEADER"); |         results.Add("END_HEADER"); | ||||||
|         if (processDataStandardFormat.InputPDSF is not null) |         results.Add(string.Empty); | ||||||
|         { |         List<char> hyphens = new(); | ||||||
|             results.Add(string.Empty); |         results.AddRange(processDataStandardFormat.InputPDSF.Header.Select(l => $"|{l.Replace('\t', '|')}|")); | ||||||
|             List<char> hyphens = new(); |         results.Add(string.Empty); | ||||||
|             results.AddRange(processDataStandardFormat.InputPDSF.Header.Select(l => l.Replace('\t', '|'))); |         results.Add($"|{string.Join("|", processDataStandardFormat.InputPDSF.Columns)}|"); | ||||||
|             results.Add(string.Empty); |         for (int i = 0; i < processDataStandardFormat.InputPDSF.Columns.Count; i++) | ||||||
|             results.Add($"|{string.Join("|", processDataStandardFormat.InputPDSF.Columns)}|"); |             hyphens.Add('-'); | ||||||
|             for (int i = 0; i < processDataStandardFormat.InputPDSF.Columns.Count; i++) |         results.Add($"|{string.Join("|", hyphens)}|"); | ||||||
|                 hyphens.Add('-'); |         results.AddRange(processDataStandardFormat.InputPDSF.Body.Select(l => $"|{l.Replace('\t', '|')}|")); | ||||||
|             results.Add($"|{string.Join("|", hyphens)}|"); |         results.Add(string.Empty); | ||||||
|             results.AddRange(processDataStandardFormat.InputPDSF.Body.Select(l => l.Replace('\t', '|'))); |         results.AddRange(processDataStandardFormat.InputPDSF.Footer.Select(l => $"|{l.Replace('\t', '|')}|")); | ||||||
|             results.Add(string.Empty); |         results.Add(string.Empty); | ||||||
|             results.AddRange(processDataStandardFormat.InputPDSF.Footer.Select(l => l.Replace('\t', '|'))); |         string xml = GetXml(processDataStandardFormat); | ||||||
|             results.Add(string.Empty); |         results.Add(xml); | ||||||
|             results.Add("EOF"); |         results.Add(string.Empty); | ||||||
|             results.Add(string.Empty); |         results.Add("EOF"); | ||||||
|             string json = GetJson(processDataStandardFormat); |         results.Add(string.Empty); | ||||||
|             results.Add(json); |         string json = GetJson(processDataStandardFormat); | ||||||
|         } |         results.Add(json); | ||||||
|         File.WriteAllText(path, string.Join(Environment.NewLine, results)); |         File.WriteAllText(path, string.Join(Environment.NewLine, results)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -643,6 +654,17 @@ internal class ProcessDataStandardFormat | |||||||
|         return results; |         return results; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     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) |     internal static string GetPDSFText(IFileRead fileRead, Logistics logistics, JsonElement[] jsonElements, string logisticsText) | ||||||
|     { |     { | ||||||
|         string result; |         string result; | ||||||
| @ -855,6 +877,116 @@ internal class ProcessDataStandardFormat | |||||||
|         return result; |         return result; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     internal static string GetXml(ProcessDataStandardFormat processDataStandardFormat) | ||||||
|  |     { | ||||||
|  |         string result; | ||||||
|  |         string tag; | ||||||
|  |         string value; | ||||||
|  |         string[] segments; | ||||||
|  |         List<string> values; | ||||||
|  |         Dictionary<string, List<string>> results = new(); | ||||||
|  |         ReadOnlyCollection<string> body = processDataStandardFormat.InputPDSF is null ? | ||||||
|  |             processDataStandardFormat.Body : processDataStandardFormat.InputPDSF.Body; | ||||||
|  |         ReadOnlyCollection<string> columns = processDataStandardFormat.InputPDSF is null ? | ||||||
|  |             processDataStandardFormat.Columns : processDataStandardFormat.InputPDSF.Columns; | ||||||
|  |         List<string> lines = new() { "<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "<records>" }; | ||||||
|  |         for (int i = 0; i < body.Count; i++) | ||||||
|  |         { | ||||||
|  |             segments = body[i].Trim().Split('\t'); | ||||||
|  |             if (segments.Length != columns.Count) | ||||||
|  |                 break; | ||||||
|  |             for (int c = 0; c < segments.Length; c++) | ||||||
|  |             { | ||||||
|  |                 value = segments[c].Replace("&", "&") | ||||||
|  |                                    .Replace("<", "<") | ||||||
|  |                                    .Replace(">", ">") | ||||||
|  |                                    .Replace("\"", """) | ||||||
|  |                                    .Replace("'", "'"); | ||||||
|  |                 tag = Regex.Replace(columns[c].Trim('"'), @"[^a-zA-Z0-9]", "_").Split('\r')[0].Split('\n')[0]; | ||||||
|  |                 if (i == 0) | ||||||
|  |                 { | ||||||
|  |                     if (results.ContainsKey(tag)) | ||||||
|  |                         continue; | ||||||
|  |                     results.Add(tag, new List<string>()); | ||||||
|  |                 } | ||||||
|  |                 results[tag].Add(value); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         foreach (KeyValuePair<string, List<string>> keyValuePair in results) | ||||||
|  |         { | ||||||
|  |             if (body.Count < 2) | ||||||
|  |                 break; | ||||||
|  |             if (keyValuePair.Value.Count != body.Count) | ||||||
|  |                 continue; | ||||||
|  |             values = keyValuePair.Value.Distinct().ToList(); | ||||||
|  |             if (values.Count == 2 && (string.IsNullOrEmpty(values[0]) || string.IsNullOrEmpty(values[1]))) | ||||||
|  |             { | ||||||
|  |                 for (int i = 0; i < body.Count; i++) | ||||||
|  |                     keyValuePair.Value[i] = string.Empty; | ||||||
|  |                 foreach (string v in values) | ||||||
|  |                 { | ||||||
|  |                     if (string.IsNullOrEmpty(v)) | ||||||
|  |                         continue; | ||||||
|  |                     keyValuePair.Value[0] = v; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         for (int i = 0; i < body.Count; i++) | ||||||
|  |         { | ||||||
|  |             lines.Add("  <record>"); | ||||||
|  |             foreach (KeyValuePair<string, List<string>> keyValuePair in results) | ||||||
|  |             { | ||||||
|  |                 if (keyValuePair.Value.Count != body.Count) | ||||||
|  |                     continue; | ||||||
|  |                 lines.Add(string.Concat("    <", keyValuePair.Key, '>', keyValuePair.Value[i], "</", keyValuePair.Key, '>')); | ||||||
|  |             } | ||||||
|  |             lines.Add("  </record>"); | ||||||
|  |         } | ||||||
|  |         lines.Add("</records>"); | ||||||
|  |         result = string.Join(Environment.NewLine, lines); | ||||||
|  |         return result; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     internal static string GetXml(string reportFullPath, string[]? lines = null) | ||||||
|  |     { | ||||||
|  |         string result; | ||||||
|  |         bool foundXml = false; | ||||||
|  |         List<string> results = new(); | ||||||
|  |         lines ??= File.ReadAllLines(reportFullPath); | ||||||
|  |         foreach (string line in lines) | ||||||
|  |         { | ||||||
|  |             if (line.StartsWith("<?xml")) | ||||||
|  |                 foundXml = true; | ||||||
|  |             if (!foundXml) | ||||||
|  |                 continue; | ||||||
|  |             if (line.StartsWith("EOF")) | ||||||
|  |                 break; | ||||||
|  |             results.Add(line); | ||||||
|  |         } | ||||||
|  |         result = string.Join(Environment.NewLine, results); | ||||||
|  |         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)] | [JsonSourceGenerationOptions(WriteIndented = true)] | ||||||
|  | |||||||
| @ -1,33 +1,34 @@ | |||||||
| using System.Collections.ObjectModel; | using System.Collections.ObjectModel; | ||||||
|  | using System.Linq; | ||||||
|  |  | ||||||
| namespace Adaptation.Shared; | namespace Adaptation.Shared; | ||||||
|  |  | ||||||
| public class ProcessDataStandardFormatMapping | public class ProcessDataStandardFormatMapping | ||||||
| { | { | ||||||
|  |  | ||||||
|     public ReadOnlyCollection<string> BackfillColumns { get; private set; } |  | ||||||
|     public ReadOnlyCollection<int> ColumnIndices { get; private set; } |     public ReadOnlyCollection<int> ColumnIndices { get; private set; } | ||||||
|     public ReadOnlyCollection<string> IgnoreColumns { get; private set; } |  | ||||||
|     public ReadOnlyCollection<string> IndexOnlyColumns { get; private set; } |  | ||||||
|     public ReadOnlyDictionary<string, string> KeyValuePairs { get; private set; } |  | ||||||
|     public ReadOnlyCollection<string> NewColumnNames { get; private set; } |     public ReadOnlyCollection<string> NewColumnNames { get; private set; } | ||||||
|     public ReadOnlyCollection<string> OldColumnNames { get; private set; } |     public ReadOnlyCollection<string> OldColumnNames { get; private set; } | ||||||
|  |  | ||||||
|     public ProcessDataStandardFormatMapping(ReadOnlyCollection<string> backfillColumns, |     public ProcessDataStandardFormatMapping(ReadOnlyCollection<int> columnIndices, | ||||||
|                                             ReadOnlyCollection<int> columnIndices, |  | ||||||
|                                             ReadOnlyCollection<string> ignoreColumns, |  | ||||||
|                                             ReadOnlyCollection<string> indexOnlyColumns, |  | ||||||
|                                             ReadOnlyDictionary<string, string> keyValuePairs, |  | ||||||
|                                             ReadOnlyCollection<string> newColumnNames, |                                             ReadOnlyCollection<string> newColumnNames, | ||||||
|                                             ReadOnlyCollection<string> oldColumnNames) |                                             ReadOnlyCollection<string> oldColumnNames) | ||||||
|     { |     { | ||||||
|         BackfillColumns = backfillColumns; |  | ||||||
|         ColumnIndices = columnIndices; |         ColumnIndices = columnIndices; | ||||||
|         IgnoreColumns = ignoreColumns; |  | ||||||
|         IndexOnlyColumns = indexOnlyColumns; |  | ||||||
|         KeyValuePairs = keyValuePairs; |  | ||||||
|         NewColumnNames = newColumnNames; |         NewColumnNames = newColumnNames; | ||||||
|         OldColumnNames = oldColumnNames; |         OldColumnNames = oldColumnNames; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     internal static ProcessDataStandardFormatMapping Get(string processDataStandardFormatMappingOldColumnNames, string processDataStandardFormatMappingNewColumnNames, string processDataStandardFormatMappingColumnIndices) | ||||||
|  |     { | ||||||
|  |         ProcessDataStandardFormatMapping result; | ||||||
|  |         ReadOnlyCollection<string> newColumnNames = new(processDataStandardFormatMappingNewColumnNames.Split(',')); | ||||||
|  |         ReadOnlyCollection<string> oldColumnNames = new(processDataStandardFormatMappingOldColumnNames.Split(',')); | ||||||
|  |         ReadOnlyCollection<int> columnIndices = new(processDataStandardFormatMappingColumnIndices.Split(',').Select(int.Parse).ToArray()); | ||||||
|  |         result = new(columnIndices: columnIndices, | ||||||
|  |                      newColumnNames: newColumnNames, | ||||||
|  |                      oldColumnNames: oldColumnNames); | ||||||
|  |         return result; | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -1,4 +1,4 @@ | |||||||
| #if true | #if v2_60_0 | ||||||
| using Adaptation._Tests.Shared; | using Adaptation._Tests.Shared; | ||||||
| using Microsoft.Extensions.Logging; | using Microsoft.Extensions.Logging; | ||||||
| using Microsoft.VisualStudio.TestTools.UnitTesting; | using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| #if true | #if v2_60_0 | ||||||
| using Adaptation._Tests.Shared; | using Adaptation._Tests.Shared; | ||||||
| using Microsoft.Extensions.Logging; | using Microsoft.Extensions.Logging; | ||||||
| using Microsoft.VisualStudio.TestTools.UnitTesting; | using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| #if true | #if v2_60_0 | ||||||
| using Adaptation._Tests.Shared; | using Adaptation._Tests.Shared; | ||||||
| using Microsoft.Extensions.Logging; | using Microsoft.Extensions.Logging; | ||||||
| using Microsoft.VisualStudio.TestTools.UnitTesting; | using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||||
|  | |||||||
| @ -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 | ||||||
| @ -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 | ||||||
| @ -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 | ||||||
| @ -1,4 +1,4 @@ | |||||||
| #if true | #if v2_60_0 | ||||||
| using Adaptation.Shared; | using Adaptation.Shared; | ||||||
| using Adaptation.Shared.Methods; | using Adaptation.Shared.Methods; | ||||||
| using Microsoft.VisualStudio.TestTools.UnitTesting; | using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| #if true | #if v2_60_0 | ||||||
| using Microsoft.VisualStudio.TestTools.UnitTesting; | using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||||
|  |  | ||||||
| namespace Adaptation._Tests.Extract.Production.v2_60_0; | namespace Adaptation._Tests.Extract.Production.v2_60_0; | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| #if true | #if v2_60_0 | ||||||
| using Adaptation.Shared; | using Adaptation.Shared; | ||||||
| using Adaptation.Shared.Methods; | using Adaptation.Shared.Methods; | ||||||
| using Microsoft.VisualStudio.TestTools.UnitTesting; | using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||||
|  | |||||||
							
								
								
									
										146
									
								
								Adaptation/_Tests/Extract/Production/v2.61.1/MET08DDUPSP1TBI.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								Adaptation/_Tests/Extract/Production/v2.61.1/MET08DDUPSP1TBI.cs
									
									
									
									
									
										Normal 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 | ||||||
							
								
								
									
										27
									
								
								Adaptation/_Tests/Extract/Production/v2.61.1/SP101-EQPT.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								Adaptation/_Tests/Extract/Production/v2.61.1/SP101-EQPT.cs
									
									
									
									
									
										Normal 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 | ||||||
							
								
								
									
										58
									
								
								Adaptation/_Tests/Extract/Production/v2.61.1/SP101.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								Adaptation/_Tests/Extract/Production/v2.61.1/SP101.cs
									
									
									
									
									
										Normal 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 | ||||||
| @ -193,7 +193,12 @@ public class AdaptationTesting : ISMTP | |||||||
|             segments = withActualCICN.Split(new string[] { ticks }, StringSplitOptions.None); |             segments = withActualCICN.Split(new string[] { ticks }, StringSplitOptions.None); | ||||||
|             dummyDirectory = Path.Combine(dummyRoot, cellInstanceName, ticks, string.Join(null, segments)); |             dummyDirectory = Path.Combine(dummyRoot, cellInstanceName, ticks, string.Join(null, segments)); | ||||||
|             if (!Directory.Exists(dummyDirectory)) |             if (!Directory.Exists(dummyDirectory)) | ||||||
|  |             { | ||||||
|                 _ = Directory.CreateDirectory(dummyDirectory); |                 _ = Directory.CreateDirectory(dummyDirectory); | ||||||
|  |                 try | ||||||
|  |                 { Directory.SetLastWriteTime(Path.Combine(dummyRoot, cellInstanceName), DateTime.Now); } | ||||||
|  |                 catch { } | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|         if (string.IsNullOrEmpty(ticks)) |         if (string.IsNullOrEmpty(ticks)) | ||||||
|         { |         { | ||||||
|  | |||||||
| @ -44,7 +44,7 @@ public class Job : LoggingUnitTesting, IDisposable | |||||||
|         catch (Exception) { } |         catch (Exception) { } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| #if !Always | #if Always | ||||||
|     [Ignore] |     [Ignore] | ||||||
| #endif | #endif | ||||||
|     [TestMethod] |     [TestMethod] | ||||||
| @ -57,41 +57,42 @@ public class Job : LoggingUnitTesting, IDisposable | |||||||
|         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); |         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); | ||||||
|         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; |         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; | ||||||
|         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; |         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; | ||||||
|  |         string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString; | ||||||
|         string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString; |         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")); |         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); | ||||||
|         HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) }; |  | ||||||
|         mid = """ |         mid = """ | ||||||
|         {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "12-123456-1234", "Recipe": "Recipe"} |         {"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.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "21"); | ||||||
|         Assert.AreEqual("123456", job.LotName); |         Assert.AreEqual("123456", job.LotName); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "4609"); |         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "4609"); | ||||||
|         mid = """ |         mid = """ | ||||||
|         {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "12-1234567-1234", "Recipe": "Recipe"} |         {"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.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "21"); | ||||||
|         Assert.AreEqual("1234567", job.LotName); |         Assert.AreEqual("1234567", job.LotName); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "4609"); |         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "4609"); | ||||||
|         mid = """ |         mid = """ | ||||||
|         {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "-544481-", "Recipe": "Recipe"} |         {"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.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "51"); | ||||||
|         Assert.AreEqual("544481", job.LotName); |         Assert.AreEqual("544481", job.LotName); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); //  == "5158"); |         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); //  == "5158"); | ||||||
|         mid = """ |         mid = """ | ||||||
|         {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "00-544481-0000", "Recipe": "Recipe"} |         {"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.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "51"); | ||||||
|         Assert.AreEqual("544481", job.LotName); |         Assert.AreEqual("544481", job.LotName); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); //  == "5158"); |         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); //  == "5158"); | ||||||
|         mid = """ |         mid = """ | ||||||
|         {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "00-o171308.1.51-0000", "Recipe": "Recipe", "Slot": "11"} |         {"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.ProcessType)); // == "54"); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); // == "547000"); |         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); // == "547000"); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "4445"); |         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "4445"); | ||||||
| @ -99,7 +100,7 @@ public class Job : LoggingUnitTesting, IDisposable | |||||||
|         mid = """ |         mid = """ | ||||||
|         {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE5", "Sequence": "638163023363575829", "MID": "B48", "Recipe": "lsl_6in "} |         {"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.ProcessType)); // == "54"); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); // == "547000"); |         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); // == "547000"); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "4445"); |         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "4445"); | ||||||
| @ -118,13 +119,14 @@ public class Job : LoggingUnitTesting, IDisposable | |||||||
|         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); |         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); | ||||||
|         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; |         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; | ||||||
|         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; |         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; | ||||||
|  |         string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString; | ||||||
|         string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString; |         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")); |         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); | ||||||
|         HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) }; |  | ||||||
|         string mid = """ |         string mid = """ | ||||||
|         {"Area": "Si", "EquipmentType": "MET08THFTIRQS408M", "MesEntity": "BIORAD2", "Sequence": "123456789", "MID": "37--", "Recipe": "Recipe"} |         {"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.AreEqual("37", job.ProcessType); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); // == "549918"); |         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); // == "549918"); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "5101"); |         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "5101"); | ||||||
| @ -132,7 +134,7 @@ public class Job : LoggingUnitTesting, IDisposable | |||||||
|         NonThrowTryCatch(); |         NonThrowTryCatch(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| #if !Always | #if Always | ||||||
|     [Ignore] |     [Ignore] | ||||||
| #endif | #endif | ||||||
|     [TestMethod] |     [TestMethod] | ||||||
| @ -144,13 +146,14 @@ public class Job : LoggingUnitTesting, IDisposable | |||||||
|         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); |         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); | ||||||
|         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; |         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; | ||||||
|         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; |         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; | ||||||
|  |         string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString; | ||||||
|         string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString; |         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")); |         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); | ||||||
|         HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) }; |  | ||||||
|         string mid = """ |         string mid = """ | ||||||
|         {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "P1234", "Recipe": "Recipe"} |         {"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.ProcessType)); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); |         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); |         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); | ||||||
| @ -170,13 +173,14 @@ public class Job : LoggingUnitTesting, IDisposable | |||||||
|         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); |         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); | ||||||
|         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; |         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; | ||||||
|         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; |         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; | ||||||
|  |         string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString; | ||||||
|         string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString; |         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")); |         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); | ||||||
|         HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) }; |  | ||||||
|         string mid = """ |         string mid = """ | ||||||
|         {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "BIORAD3", "Sequence": "638234699589174855", "MID": "33--", "Recipe": "Recipe"} |         {"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.ProcessType)); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); |         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); |         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); | ||||||
| @ -184,7 +188,7 @@ public class Job : LoggingUnitTesting, IDisposable | |||||||
|         NonThrowTryCatch(); |         NonThrowTryCatch(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| #if !Always | #if Always | ||||||
|     [Ignore] |     [Ignore] | ||||||
| #endif | #endif | ||||||
|     [TestMethod] |     [TestMethod] | ||||||
| @ -196,13 +200,14 @@ public class Job : LoggingUnitTesting, IDisposable | |||||||
|         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); |         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); | ||||||
|         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; |         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; | ||||||
|         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; |         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; | ||||||
|  |         string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString; | ||||||
|         string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString; |         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")); |         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); | ||||||
|         HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) }; |  | ||||||
|         string mid = """ |         string mid = """ | ||||||
|         {"Area": "Si", "EquipmentType": "DEP08CEPIEPSILON", "MesEntity": "R32", "Sequence": "", "MID": "32--", "Recipe": "Recipe"} |         {"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.ProcessType)); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); |         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); |         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); | ||||||
| @ -211,7 +216,7 @@ public class Job : LoggingUnitTesting, IDisposable | |||||||
|         NonThrowTryCatch(); |         NonThrowTryCatch(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| #if !Always | #if Always | ||||||
|     [Ignore] |     [Ignore] | ||||||
| #endif | #endif | ||||||
|     [TestMethod] |     [TestMethod] | ||||||
| @ -223,13 +228,14 @@ public class Job : LoggingUnitTesting, IDisposable | |||||||
|         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); |         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); | ||||||
|         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; |         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; | ||||||
|         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; |         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; | ||||||
|  |         string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString; | ||||||
|         string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString; |         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")); |         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); | ||||||
|         HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) }; |  | ||||||
|         string mid = """ |         string mid = """ | ||||||
|         {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE5", "Sequence": "638756365880000000", "MID": "38-660275-5095.1", "Recipe": "IRC6mm"} |         {"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.ProcessType)); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); |         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); |         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); | ||||||
| @ -238,7 +244,7 @@ public class Job : LoggingUnitTesting, IDisposable | |||||||
|         NonThrowTryCatch(); |         NonThrowTryCatch(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| #if !Always | #if Always | ||||||
|     [Ignore] |     [Ignore] | ||||||
| #endif | #endif | ||||||
|     [TestMethod] |     [TestMethod] | ||||||
| @ -250,13 +256,14 @@ public class Job : LoggingUnitTesting, IDisposable | |||||||
|         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); |         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); | ||||||
|         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; |         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; | ||||||
|         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; |         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; | ||||||
|  |         string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString; | ||||||
|         string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString; |         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")); |         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); | ||||||
|         HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) }; |  | ||||||
|         string mid = """ |         string mid = """ | ||||||
|         {"Area": "Si", "EquipmentType": "MET08THFTIRQS408M", "MesEntity": "BIORAD2", "Sequence": "638757112479659597", "MID": "173308.1.5", "Recipe": "6inTHICK"} |         {"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.ProcessType)); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); |         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); |         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); | ||||||
| @ -265,7 +272,7 @@ public class Job : LoggingUnitTesting, IDisposable | |||||||
|         NonThrowTryCatch(); |         NonThrowTryCatch(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| #if !Always | #if Always | ||||||
|     [Ignore] |     [Ignore] | ||||||
| #endif | #endif | ||||||
|     [TestMethod] |     [TestMethod] | ||||||
| @ -277,13 +284,14 @@ public class Job : LoggingUnitTesting, IDisposable | |||||||
|         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); |         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); | ||||||
|         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; |         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; | ||||||
|         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; |         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; | ||||||
|  |         string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString; | ||||||
|         string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString; |         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")); |         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); | ||||||
|         HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) }; |  | ||||||
|         string mid = """ |         string mid = """ | ||||||
|         {"Area": "Si", "EquipmentType": "MET08DDUPSFS6420", "MesEntity": "TENCOR1", "Sequence": "638765945581765554", "MID": "1T661282", "Recipe": "8IN_THIN ROTR"} |         {"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.ProcessType)); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); |         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); |         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); | ||||||
| @ -292,7 +300,7 @@ public class Job : LoggingUnitTesting, IDisposable | |||||||
|         NonThrowTryCatch(); |         NonThrowTryCatch(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| #if !Always | #if Always | ||||||
|     [Ignore] |     [Ignore] | ||||||
| #endif | #endif | ||||||
|     [TestMethod] |     [TestMethod] | ||||||
| @ -304,13 +312,14 @@ public class Job : LoggingUnitTesting, IDisposable | |||||||
|         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); |         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); | ||||||
|         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; |         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; | ||||||
|         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; |         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; | ||||||
|  |         string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString; | ||||||
|         string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString; |         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")); |         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); | ||||||
|         HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) }; |  | ||||||
|         string mid = """ |         string mid = """ | ||||||
|         {"Area": "Si", "EquipmentType": "MET08DDUPSFS6420", "MesEntity": "TENCOR1", "Sequence": "638765945581765554", "MID": "AK1PL2", "Recipe": "8INCLEAN"} |         {"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.ProcessType)); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); |         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); |         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); | ||||||
| @ -328,13 +337,14 @@ public class Job : LoggingUnitTesting, IDisposable | |||||||
|         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); |         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); | ||||||
|         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; |         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; | ||||||
|         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; |         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; | ||||||
|  |         string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString; | ||||||
|         string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString; |         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")); |         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); | ||||||
|         HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) }; |  | ||||||
|         string mid = """ |         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.ProcessType)); // == "23"); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); // == "111111"); |         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); // == "111111"); | ||||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "5053"); |         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "5053"); | ||||||
|  | |||||||
| @ -64,7 +64,7 @@ public class MET08DDUPSP1TBI : LoggingUnitTesting, IDisposable | |||||||
|         StringBuilder results = new(); |         StringBuilder results = new(); | ||||||
|         (string cellInstanceName, string cellInstanceVersionName)[] collection = new (string, string)[] |         (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"; |         string production = "http://messa08ec.infineon.com:9003/CellInstanceServiceV2"; | ||||||
|         Shared.PasteSpecialXml.EAF.XML.API.CellInstance.CellInstanceVersion cellInstanceVersion; |         Shared.PasteSpecialXml.EAF.XML.API.CellInstance.CellInstanceVersion cellInstanceVersion; | ||||||
|  | |||||||
							
								
								
									
										115
									
								
								Adaptation/_Tests/Static/recipes-and-patterns.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								Adaptation/_Tests/Static/recipes-and-patterns.js
									
									
									
									
									
										Normal 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.localeCompare(recipe, ['en-US'], { sensitivity: 'base' }) === 0) { | ||||||
|  |                         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; | ||||||
| @ -203,8 +203,8 @@ public class TXT : LoggingUnitTesting, IDisposable | |||||||
|         StringBuilder results = new(); |         StringBuilder results = new(); | ||||||
|         (string cellInstanceName, string cellInstanceVersionName)[] collection = new (string, string)[] |         (string cellInstanceName, string cellInstanceVersionName)[] collection = new (string, string)[] | ||||||
|         { |         { | ||||||
|             new("SP101", "v2.60.0"), |             new("SP101", "v2.61.1"), | ||||||
|             new("SP101-EQPT", "v2.60.0"), |             new("SP101-EQPT", "v2.61.1"), | ||||||
|         }; |         }; | ||||||
|         string production = "http://messa08ec.infineon.com:9003/CellInstanceServiceV2"; |         string production = "http://messa08ec.infineon.com:9003/CellInstanceServiceV2"; | ||||||
|         Shared.PasteSpecialXml.EAF.XML.API.CellInstance.CellInstanceVersion cellInstanceVersion; |         Shared.PasteSpecialXml.EAF.XML.API.CellInstance.CellInstanceVersion cellInstanceVersion; | ||||||
|  | |||||||
							
								
								
									
										20
									
								
								Adaptation/_Tests/Static/wizard.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Adaptation/_Tests/Static/wizard.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | "use strict"; | ||||||
|  |  | ||||||
|  | const rds = 'http://messa020ec.infineon.com:8080/api/oiWizard/materials/rds/1005602'; | ||||||
|  |  | ||||||
|  | let workItemCollection = []; | ||||||
|  |  | ||||||
|  | await fetch(rds) | ||||||
|  |     .then((res) => res.text()) | ||||||
|  |     .then((text) => { | ||||||
|  |         const records = JSON.parse(text); | ||||||
|  |         if (records != undefined) { | ||||||
|  |             if (records != undefined) { | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     }) | ||||||
|  |     .catch((e) => console.error(e)); | ||||||
|  |  | ||||||
|  | workItemCollection.forEach(element => { | ||||||
|  |     console.log(`{"Id": "${element.Id}", "State": "${element.State}", "ClosedDate": "${element.ClosedDate}", "TargetDate": "${element.TargetDate}", "IterationPath": "${element.IterationPath}", "AssignedTo": "${element.AssignedTo}", "Title": "${element.Title}"},`); | ||||||
|  | }); | ||||||
							
								
								
									
										76
									
								
								Adaptation/bun.lock
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								Adaptation/bun.lock
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,76 @@ | |||||||
|  | { | ||||||
|  |   "lockfileVersion": 1, | ||||||
|  |   "workspaces": { | ||||||
|  |     "": { | ||||||
|  |       "name": "adaptation", | ||||||
|  |       "devDependencies": { | ||||||
|  |         "@types/bun": "latest", | ||||||
|  |         "axios": "^1.11.0", | ||||||
|  |       }, | ||||||
|  |       "peerDependencies": { | ||||||
|  |         "typescript": "^5", | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  |   "packages": { | ||||||
|  |     "@types/bun": ["@types/bun@1.2.19", "", { "dependencies": { "bun-types": "1.2.19" } }, "sha512-d9ZCmrH3CJ2uYKXQIUuZ/pUnTqIvLDS0SK7pFmbx8ma+ziH/FRMoAq5bYpRG7y+w1gl+HgyNZbtqgMq4W4e2Lg=="], | ||||||
|  |  | ||||||
|  |     "@types/node": ["@types/node@24.1.0", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w=="], | ||||||
|  |  | ||||||
|  |     "@types/react": ["@types/react@19.1.9", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA=="], | ||||||
|  |  | ||||||
|  |     "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], | ||||||
|  |  | ||||||
|  |     "axios": ["axios@1.11.0", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA=="], | ||||||
|  |  | ||||||
|  |     "bun-types": ["bun-types@1.2.19", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-uAOTaZSPuYsWIXRpj7o56Let0g/wjihKCkeRqUBhlLVM/Bt+Fj9xTo+LhC1OV1XDaGkz4hNC80et5xgy+9KTHQ=="], | ||||||
|  |  | ||||||
|  |     "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], | ||||||
|  |  | ||||||
|  |     "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], | ||||||
|  |  | ||||||
|  |     "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], | ||||||
|  |  | ||||||
|  |     "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], | ||||||
|  |  | ||||||
|  |     "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], | ||||||
|  |  | ||||||
|  |     "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], | ||||||
|  |  | ||||||
|  |     "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], | ||||||
|  |  | ||||||
|  |     "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], | ||||||
|  |  | ||||||
|  |     "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], | ||||||
|  |  | ||||||
|  |     "follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], | ||||||
|  |  | ||||||
|  |     "form-data": ["form-data@4.0.4", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow=="], | ||||||
|  |  | ||||||
|  |     "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], | ||||||
|  |  | ||||||
|  |     "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], | ||||||
|  |  | ||||||
|  |     "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], | ||||||
|  |  | ||||||
|  |     "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], | ||||||
|  |  | ||||||
|  |     "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], | ||||||
|  |  | ||||||
|  |     "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], | ||||||
|  |  | ||||||
|  |     "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], | ||||||
|  |  | ||||||
|  |     "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], | ||||||
|  |  | ||||||
|  |     "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], | ||||||
|  |  | ||||||
|  |     "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], | ||||||
|  |  | ||||||
|  |     "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], | ||||||
|  |  | ||||||
|  |     "typescript": ["typescript@5.9.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A=="], | ||||||
|  |  | ||||||
|  |     "undici-types": ["undici-types@7.8.0", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="], | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -1,18 +1,29 @@ | |||||||
| { | { | ||||||
|     "scripts": { |   "devDependencies": { | ||||||
|         "AA-CreateSelfDescription.Staging.v2_47_1-SP101_EQPT": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.CreateSelfDescription.Staging.v2_47_1 & ClassName~SP101_EQPT\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")", |     "@types/bun": "latest", | ||||||
|         "BA-CreateSelfDescription.Staging.v2_47_1-SP101": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.CreateSelfDescription.Staging.v2_47_1 & ClassName~SP101\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")", |     "axios": "^1.11.0" | ||||||
|         "CA-CreateSelfDescription.Staging.v2_47_1-MET08DDUPSP1TBI": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.CreateSelfDescription.Staging.v2_47_1 & ClassName~MET08DDUPSP1TBI\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")", |   }, | ||||||
|         "DA-CreateSelfDescription.Staging.v2_47_1": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.CreateSelfDescription.Staging.v2_47_1\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")", |   "module": "index.ts", | ||||||
|         "EA-Extract.Staging.v2_47_1-SP101_EQPT-Staging__v2_47_1__SP101_EQPT__DownloadRsMFile637953072332628623__Normal": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~SP101_EQPT & Name~Staging__v2_47_1__SP101_EQPT__DownloadRsMFile637953072332628623__Normal\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")", |   "name": "adaptation", | ||||||
|         "FA-Extract.Staging.v2_47_1-SP101-Staging__v2_47_1__SP101__txt637955319879801344__Normal": "dotnet test --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~SP101 & Name~Staging__v2_47_1__SP101__txt637955319879801344__Normal\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")", |   "peerDependencies": { | ||||||
|         "GA-Extract.Staging.v2_47_1-MET08DDUPSP1TBI-Staging__v2_47_1__MET08DDUPSP1TBI__MoveMatchingFiles637955319879801344__Normal": "dotnet test --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~MET08DDUPSP1TBI & Name~Staging__v2_47_1__MET08DDUPSP1TBI__MoveMatchingFiles637955319879801344__Normal\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")", |     "typescript": "^5" | ||||||
|         "HA-Extract.Staging.v2_47_1-SP101-Staging__v2_47_1__SP101__pcl637812984345592512__MinFileLength": "dotnet test --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~SP101 & Name~Staging__v2_47_1__SP101__pcl637812984345592512__MinFileLength\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")", |   }, | ||||||
|         "HB-Extract.Staging.v2_47_1-MET08DDUPSP1TBI-Staging__v2_47_1__MET08DDUPSP1TBI__OpenInsight638052814829645888__IqsSql": "dotnet test --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~MET08DDUPSP1TBI & Name~Staging__v2_47_1__MET08DDUPSP1TBI__OpenInsight638052814829645888__IqsSql\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")", |   "private": true, | ||||||
|         "IA-Extract.Staging.v2_47_1-MET08DDUPSP1TBI-Staging__v2_47_1__MET08DDUPSP1TBI__TIBCO": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~MET08DDUPSP1TBI & Name~Staging__v2_47_1__MET08DDUPSP1TBI__TIBCO\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")", |   "scripts": { | ||||||
|         "Alpha": "ABCDEFGHIJKLMNOPQRSTUVWXYZ", |     "AA-CreateSelfDescription.Staging.v2_47_1-SP101_EQPT": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.CreateSelfDescription.Staging.v2_47_1 & ClassName~SP101_EQPT\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")", | ||||||
|         "kanbn.board": "kanbn board", |     "Alpha": "ABCDEFGHIJKLMNOPQRSTUVWXYZ", | ||||||
|         "kanbn.board.json": "kanbn board -j > .kanbn/board.json", |     "BA-CreateSelfDescription.Staging.v2_47_1-SP101": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.CreateSelfDescription.Staging.v2_47_1 & ClassName~SP101\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")", | ||||||
|         "garbage-collect": "git gc" |     "CA-CreateSelfDescription.Staging.v2_47_1-MET08DDUPSP1TBI": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.CreateSelfDescription.Staging.v2_47_1 & ClassName~MET08DDUPSP1TBI\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")", | ||||||
|     } |     "DA-CreateSelfDescription.Staging.v2_47_1": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.CreateSelfDescription.Staging.v2_47_1\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")", | ||||||
|  |     "EA-Extract.Staging.v2_47_1-SP101_EQPT-Staging__v2_47_1__SP101_EQPT__DownloadRsMFile637953072332628623__Normal": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~SP101_EQPT & Name~Staging__v2_47_1__SP101_EQPT__DownloadRsMFile637953072332628623__Normal\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")", | ||||||
|  |     "FA-Extract.Staging.v2_47_1-SP101-Staging__v2_47_1__SP101__txt637955319879801344__Normal": "dotnet test --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~SP101 & Name~Staging__v2_47_1__SP101__txt637955319879801344__Normal\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")", | ||||||
|  |     "GA-Extract.Staging.v2_47_1-MET08DDUPSP1TBI-Staging__v2_47_1__MET08DDUPSP1TBI__MoveMatchingFiles637955319879801344__Normal": "dotnet test --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~MET08DDUPSP1TBI & Name~Staging__v2_47_1__MET08DDUPSP1TBI__MoveMatchingFiles637955319879801344__Normal\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")", | ||||||
|  |     "garbage-collect": "git gc", | ||||||
|  |     "HA-Extract.Staging.v2_47_1-SP101-Staging__v2_47_1__SP101__pcl637812984345592512__MinFileLength": "dotnet test --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~SP101 & Name~Staging__v2_47_1__SP101__pcl637812984345592512__MinFileLength\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")", | ||||||
|  |     "HB-Extract.Staging.v2_47_1-MET08DDUPSP1TBI-Staging__v2_47_1__MET08DDUPSP1TBI__OpenInsight638052814829645888__IqsSql": "dotnet test --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~MET08DDUPSP1TBI & Name~Staging__v2_47_1__MET08DDUPSP1TBI__OpenInsight638052814829645888__IqsSql\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")", | ||||||
|  |     "IA-Extract.Staging.v2_47_1-MET08DDUPSP1TBI-Staging__v2_47_1__MET08DDUPSP1TBI__TIBCO": "dotnet test --runtime win-x64 --no-build --filter \"FullyQualifiedName~Adaptation._Tests.Extract.Staging.v2_47_1 & ClassName~MET08DDUPSP1TBI & Name~Staging__v2_47_1__MET08DDUPSP1TBI__TIBCO\" -- TestRunParameters.Parameter(name=\\\"WaitFor\\\", value=\\\"Debugger.IsAttached\\\")", | ||||||
|  |     "kanbn.board": "kanbn board", | ||||||
|  |     "kanbn.board.json": "kanbn board -j > .kanbn/board.json" | ||||||
|  |   }, | ||||||
|  |   "type": "module" | ||||||
| } | } | ||||||
							
								
								
									
										29
									
								
								Adaptation/tsconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								Adaptation/tsconfig.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | |||||||
|  | { | ||||||
|  |   "compilerOptions": { | ||||||
|  |     // Environment setup & latest features | ||||||
|  |     "lib": ["ESNext"], | ||||||
|  |     "target": "ESNext", | ||||||
|  |     "module": "Preserve", | ||||||
|  |     "moduleDetection": "force", | ||||||
|  |     "jsx": "react-jsx", | ||||||
|  |     "allowJs": true, | ||||||
|  |  | ||||||
|  |     // Bundler mode | ||||||
|  |     "moduleResolution": "bundler", | ||||||
|  |     "allowImportingTsExtensions": true, | ||||||
|  |     "verbatimModuleSyntax": true, | ||||||
|  |     "noEmit": true, | ||||||
|  |  | ||||||
|  |     // Best practices | ||||||
|  |     "strict": true, | ||||||
|  |     "skipLibCheck": true, | ||||||
|  |     "noFallthroughCasesInSwitch": true, | ||||||
|  |     "noUncheckedIndexedAccess": true, | ||||||
|  |     "noImplicitOverride": true, | ||||||
|  |  | ||||||
|  |     // Some stricter flags (disabled by default) | ||||||
|  |     "noUnusedLocals": false, | ||||||
|  |     "noUnusedParameters": false, | ||||||
|  |     "noPropertyAccessFromIndexSignature": false | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -196,13 +196,13 @@ | |||||||
|       <Version>7.2.4630.5</Version> |       <Version>7.2.4630.5</Version> | ||||||
|     </PackageReference> |     </PackageReference> | ||||||
|     <PackageReference Include="Infineon.EAF.Runtime"> |     <PackageReference Include="Infineon.EAF.Runtime"> | ||||||
|       <Version>2.60.0</Version> |       <Version>2.61.1</Version> | ||||||
|     </PackageReference> |     </PackageReference> | ||||||
|     <PackageReference Include="Pdfbox"> |     <PackageReference Include="Pdfbox"> | ||||||
|       <Version>1.1.1</Version> |       <Version>1.1.1</Version> | ||||||
|     </PackageReference> |     </PackageReference> | ||||||
|     <PackageReference Include="System.Text.Json"> |     <PackageReference Include="System.Text.Json"> | ||||||
|       <Version>8.0.5</Version> |       <Version>8.0.3</Version> | ||||||
|     </PackageReference> |     </PackageReference> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> |   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | ||||||
|  | |||||||
| @ -32,5 +32,5 @@ using System.Runtime.InteropServices; | |||||||
| // You can specify all the values or you can default the Build and Revision Numbers | // You can specify all the values or you can default the Build and Revision Numbers | ||||||
| // by using the '*' as shown below: | // by using the '*' as shown below: | ||||||
| // [assembly: AssemblyVersion("1.0.*")] | // [assembly: AssemblyVersion("1.0.*")] | ||||||
| [assembly: AssemblyVersion("2.60.0.0")] | [assembly: AssemblyVersion("2.61.1.0")] | ||||||
| [assembly: AssemblyFileVersion("2.60.0.0")] | [assembly: AssemblyFileVersion("2.61.1.0")] | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user