Compare commits
	
		
			10 Commits
		
	
	
		
			823a31e48a
			...
			10-17-a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ea0c145d4a | |||
| 72cc064f56 | |||
| ec90b4fbbd | |||
| ddf12e5ec0 | |||
| 5c2a3c97e9 | |||
| e6533e152f | |||
| 19b54a7cc8 | |||
| 43024c6c30 | |||
| e3910d700f | |||
| e651c2804c | 
| @ -110,7 +110,7 @@ dotnet_diagnostic.CA2254.severity = none # CA2254: The logging message template | ||||
| dotnet_diagnostic.IDE0001.severity = warning # IDE0001: Simplify name | ||||
| dotnet_diagnostic.IDE0002.severity = warning # Simplify (member access) - System.Version.Equals("1", "2"); Version.Equals("1", "2"); | ||||
| dotnet_diagnostic.IDE0004.severity = warning # IDE0004: Cast is redundant. | ||||
| 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.IDE0031.severity = warning # Use null propagation (IDE0031) | ||||
| 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.IDE0301.severity = none #IDE0301: Collection initialization can be simplified | ||||
| dotnet_diagnostic.IDE0305.severity = none # IDE0305: Collection initialization can be simplified | ||||
| dotnet_diagnostic.MSTEST0015.severity = none # MSTEST0015: Test method {method} should not be ignored | ||||
| dotnet_diagnostic.MSTEST0037.severity = error # MSTEST0037: Use proper 'Assert' methods | ||||
| dotnet_diagnostic.SYSLIB1045.severity = none # SYSLIB1045: diagnostics for regex source generation | ||||
| dotnet_naming_rule.abstract_method_should_be_pascal_case.severity = warning | ||||
|  | ||||
							
								
								
									
										37
									
								
								Adaptation/.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										37
									
								
								Adaptation/.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							| @ -1,10 +1,43 @@ | ||||
| { | ||||
|   "configurations": [ | ||||
|     { | ||||
|       "mode": "debug", | ||||
|       "name": "Go launch file", | ||||
|       "program": "${file}", | ||||
|       "request": "launch", | ||||
|       "type": "go" | ||||
|     }, | ||||
|     { | ||||
|       "name": "node Launch Current Opened File", | ||||
|       "program": "${file}", | ||||
|       "request": "launch", | ||||
|       "type": "node" | ||||
|     }, | ||||
|     { | ||||
|       "cwd": "${workspaceFolder}", | ||||
|       "internalConsoleOptions": "neverOpen", | ||||
|       "name": "Debug File", | ||||
|       "program": "${file}", | ||||
|       "request": "launch", | ||||
|       "stopOnEntry": false, | ||||
|       "type": "bun", | ||||
|       "watchMode": false | ||||
|     }, | ||||
|     { | ||||
|       "cwd": "${workspaceFolder}", | ||||
|       "internalConsoleOptions": "neverOpen", | ||||
|       "name": "Run File", | ||||
|       "noDebug": true, | ||||
|       "program": "${file}", | ||||
|       "request": "launch", | ||||
|       "type": "bun", | ||||
|       "watchMode": false | ||||
|     }, | ||||
|     { | ||||
|       "name": ".NET Core Attach", | ||||
|       "type": "coreclr", | ||||
|       "processId": 32760, | ||||
|       "request": "attach", | ||||
|       "processId": 8912 | ||||
|       "type": "coreclr" | ||||
|     } | ||||
|   ] | ||||
| } | ||||
							
								
								
									
										3
									
								
								Adaptation/.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								Adaptation/.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							| @ -7,6 +7,7 @@ | ||||
|         "CASS", | ||||
|         "CEPIEPSILON", | ||||
|         "CUST", | ||||
|         "DDUPSFS", | ||||
|         "DDUPSP", | ||||
|         "EQPT", | ||||
|         "GETJOBS", | ||||
| @ -31,6 +32,8 @@ | ||||
|         "substr", | ||||
|         "SUSCEPTOR", | ||||
|         "targ", | ||||
|         "TENCOR", | ||||
|         "THFTIRQS", | ||||
|         "TIBCO", | ||||
|         "Wafr" | ||||
|     ], | ||||
|  | ||||
							
								
								
									
										133
									
								
								Adaptation/.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										133
									
								
								Adaptation/.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							| @ -1,19 +1,134 @@ | ||||
| { | ||||
|     "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": [ | ||||
|         { | ||||
|             "label": "Build", | ||||
|             "command": "dotnet", | ||||
|             "type": "process", | ||||
|             "args": [ | ||||
|                 "build", | ||||
|                 "/property:GenerateFullPaths=true", | ||||
|                 "/consoleloggerparameters:NoSummary" | ||||
|                 "build" | ||||
|             ], | ||||
|             "problemMatcher": "$msCompile" | ||||
|         }, | ||||
|         { | ||||
|             "label": "Test-Debug", | ||||
|             "label": "Test Debug", | ||||
|             "command": "dotnet", | ||||
|             "type": "process", | ||||
|             "args": [ | ||||
| @ -24,7 +139,7 @@ | ||||
|             "problemMatcher": "$msCompile" | ||||
|         }, | ||||
|         { | ||||
|             "label": "Test-Release", | ||||
|             "label": "Test Release", | ||||
|             "command": "dotnet", | ||||
|             "type": "process", | ||||
|             "args": [ | ||||
| @ -50,7 +165,7 @@ | ||||
|             "problemMatcher": "$msCompile" | ||||
|         }, | ||||
|         { | ||||
|             "label": "Format-Whitespaces", | ||||
|             "label": "Format Whitespaces", | ||||
|             "command": "dotnet", | ||||
|             "type": "process", | ||||
|             "args": [ | ||||
| @ -87,13 +202,13 @@ | ||||
|             "problemMatcher": "$msCompile" | ||||
|         }, | ||||
|         { | ||||
|             "label": "Project", | ||||
|             "label": "Code Project", | ||||
|             "type": "shell", | ||||
|             "command": "code ../MET08DDUPSP1TBI.csproj", | ||||
|             "problemMatcher": [] | ||||
|         }, | ||||
|         { | ||||
|             "label": "Readme", | ||||
|             "label": "Code Read Me", | ||||
|             "type": "shell", | ||||
|             "command": "code ../README.md", | ||||
|             "problemMatcher": [] | ||||
| @ -113,7 +228,7 @@ | ||||
|             "problemMatcher": [] | ||||
|         }, | ||||
|         { | ||||
|             "label": "Git Config", | ||||
|             "label": "Code Git Config", | ||||
|             "type": "shell", | ||||
|             "command": "code ../.git/config", | ||||
|             "problemMatcher": [] | ||||
|  | ||||
| @ -128,7 +128,7 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|         Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); | ||||
|         if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) | ||||
|             FileCopy(reportFullPath, dateTime, descriptions); | ||||
|         results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics[0]), 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; | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -153,7 +153,7 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|         Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); | ||||
|         if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) | ||||
|             MoveArchive(reportFullPath, dateTime); | ||||
|         results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics[0]), 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; | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -8,6 +8,7 @@ using System; | ||||
| using System.Collections.Generic; | ||||
| using System.IO; | ||||
| using System.Linq; | ||||
| using System.Text; | ||||
| using System.Text.Json; | ||||
|  | ||||
| namespace Adaptation.FileHandlers.IQSSi; | ||||
| @ -109,6 +110,59 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|         return results; | ||||
|     } | ||||
|  | ||||
|     private static Tuple<string, string> GetLines(Logistics logistics, List<txt.Description> descriptions) | ||||
|     { | ||||
|         StringBuilder result = new(); | ||||
|         char del = '\t'; | ||||
|         txt.Description x = descriptions[0]; | ||||
|         _ = result.Append(x.DcnLpdMin).Append(del).    // 001 -  | ||||
|             Append(x.DcnLpdMax).Append(del).       // 002 -  | ||||
|             Append(x.DcnLpdMean).Append(del).      // 003 - DCN LPD | ||||
|             Append(x.DcnAreaCountMin).Append(del). // 004 -  | ||||
|             Append(x.DcnAreaCountMax).Append(del). // 005 -  | ||||
|             Append(x.DcnAreaCountMean).Append(del).// 006 - DCN Area | ||||
|             Append(x.DcnAreaMin).Append(del).      // 007 -  | ||||
|             Append(x.DcnAreaMax).Append(del).      // 008 -  | ||||
|             Append(x.Date).Append(del).            // 009 -  | ||||
|             Append(x.DcnHazeAvgMean).Append(del).  // 010 - Haze Average | ||||
|             Append(string.Empty).Append(del).              // 011 -  | ||||
|             Append(string.Empty).Append(del).              // 012 -  | ||||
|             Append(string.Empty).Append(del).              // 013 -  | ||||
|             Append(string.Empty).Append(del).              // 014 -  | ||||
|             Append(string.Empty).Append(del).              // 015 -  | ||||
|             Append(string.Empty).Append(del).              // 016 -  | ||||
|             Append(string.Empty).Append(del).              // 017 -  | ||||
|             Append(string.Empty).Append(del).              // 018 -  | ||||
|             Append(string.Empty).Append(del).              // 019 -  | ||||
|             Append(string.Empty).Append(del).              // 020 -  | ||||
|             Append(string.Empty).Append(del).              // 021 -  | ||||
|             Append(string.Empty).Append(del).              // 022 -  | ||||
|             Append(string.Empty).Append(del).              // 023 -  | ||||
|             Append(string.Empty).Append(del).              // 024 -  | ||||
|             Append(string.Empty).Append(del).              // 025 -  | ||||
|             Append(string.Empty).Append(del).              // 026 -  | ||||
|             Append(string.Empty).Append(del).              // 027 -  | ||||
|             Append(x.RDS).Append(del).             // 028 - Lot | ||||
|             Append(x.Reactor).Append(del).         // 029 - Process | ||||
|             Append(x.Recipe).Append(del).          // 030 - Part | ||||
|             Append(x.DcnScrMean).Append(del).      // 031 - Scratch Count | ||||
|             Append(string.Empty).Append(del).              // 032 -  | ||||
|             Append(string.Empty).Append(del).              // 033 -  | ||||
|             Append(string.Empty).Append(del).              // 034 -  | ||||
|             Append(x.DcnMicroScrMean).Append(del). // 035 - Scratch Length | ||||
|             Append(string.Empty).Append(del).              // 036 -  | ||||
|             Append(string.Empty).Append(del).              // 037 -  | ||||
|             Append(string.Empty).Append(del).              // 038 -  | ||||
|             Append(x.DcnAllMean).Append(del).      // 039 - Average Sum of Defects | ||||
|             Append(x.DcnAllMax).Append(del).       // 040 - Max Sum of defects | ||||
|             Append(x.DcnAllMin).Append(del).       // 041 - Min Sum of Defects | ||||
|             Append(string.Empty).Append(del).              // 042 -  | ||||
|             Append(logistics.MesEntity).Append(del).                 // 043 -  | ||||
|             Append(x.DcnAreaMean).Append(del).     // 044 - DCN MM2 | ||||
|             AppendLine(); | ||||
|         return new Tuple<string, string>(result.ToString(), x.Date); | ||||
|     } | ||||
|  | ||||
|     private void SaveIQSFile(string reportFullPath, DateTime dateTime, List<txt.Description> descriptions, Test[] tests) | ||||
|     { | ||||
|         if (tests.Length == 0) | ||||
| @ -116,7 +170,7 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|         else | ||||
|         { | ||||
|             bool isDummyRun = false; | ||||
|             Tuple<string, string> lines = OpenInsight.FileRead.GetLines(_Logistics, descriptions); | ||||
|             Tuple<string, string> lines = GetLines(_Logistics, descriptions); | ||||
|             string check = lines.Item1.Replace(lines.Item2, "$Date$"); | ||||
|             ScopeInfo scopeInfo = new(tests[0], _IQSFile); | ||||
|             List<(Shared.Properties.IScopeInfo, string)> collection = new(); | ||||
| @ -132,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; | ||||
|         string successDirectory = string.Empty; | ||||
| @ -140,25 +194,27 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|         string duplicateDirectory = Path.Combine(_FileConnectorConfiguration.SourceFileLocation, _CellInstanceName); | ||||
|         if (!Directory.Exists(duplicateDirectory)) | ||||
|             _ = Directory.CreateDirectory(duplicateDirectory); | ||||
|         string duplicateFile = Path.Combine(duplicateDirectory, Path.GetFileName(reportFullPath)); | ||||
|         File.Copy(reportFullPath, duplicateFile, overwrite: true); | ||||
|         string duplicateFile = Path.Combine(duplicateDirectory, $"{Path.GetFileName(reportFullPath)}.xml"); | ||||
|         string xml = ProcessDataStandardFormat.GetXml(reportFullPath); | ||||
|         File.WriteAllText(duplicateFile, xml); | ||||
|         WaitForFileConsumption(dateTime, descriptions, isDummyRun, successDirectory, duplicateDirectory, collection, duplicateFile); | ||||
|     } | ||||
|  | ||||
|     private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime) | ||||
|     { | ||||
|         Tuple<string, Test[], JsonElement[], List<FileInfo>> results; | ||||
|         ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath); | ||||
|         string[] lines = File.ReadAllLines(reportFullPath); | ||||
|         ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, lines); | ||||
|         _Logistics = new Logistics(reportFullPath, processDataStandardFormat); | ||||
|         SetFileParameterLotIDToLogisticsMID(); | ||||
|         JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat); | ||||
|         JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(reportFullPath, lines, processDataStandardFormat); | ||||
|         List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements); | ||||
|         Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); | ||||
|         if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) | ||||
|             SaveIQSFile(reportFullPath, dateTime, descriptions, tests); | ||||
|         if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) | ||||
|             FileCopy(reportFullPath, dateTime, descriptions); | ||||
|         results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics[0]), tests, jsonElements, new List<FileInfo>()); | ||||
|             WriteFile(reportFullPath, dateTime, descriptions); | ||||
|         results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>()); | ||||
|         return results; | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -88,7 +88,7 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|         string processDataStandardFormatMappingOldColumnNames = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.Old.Column.Names"); | ||||
|         string processDataStandardFormatMappingNewColumnNames = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.New.Column.Names"); | ||||
|         string processDataStandardFormatMappingColumnIndices = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.Column.Indices"); | ||||
|         _ProcessDataStandardFormatMapping = GetProcessDataStandardFormatMapping(processDataStandardFormatMappingOldColumnNames, | ||||
|         _ProcessDataStandardFormatMapping = ProcessDataStandardFormatMapping.Get(processDataStandardFormatMappingOldColumnNames, | ||||
|                                                                                  processDataStandardFormatMappingNewColumnNames, | ||||
|                                                                                  processDataStandardFormatMappingColumnIndices); | ||||
|     } | ||||
| @ -169,46 +169,6 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|         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) | ||||
|     { | ||||
|         List<PreWith> results = new(); | ||||
| @ -268,7 +228,7 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static ReadOnlyCollection<Pre> GetPreCollection(int numberLength, string parentDirectory, ReadOnlyCollection<string> matchingFiles, bool _) | ||||
|     private static ReadOnlyCollection<Pre> GetPreCollection(int numberLength, string parentDirectory, ReadOnlyCollection<string> matchingFiles) | ||||
|     { | ||||
|         List<Pre> results = new(); | ||||
|         Pre pre; | ||||
| @ -313,8 +273,13 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|                 continue; | ||||
|             if (!_StaticRuns.TryGetValue(_Logistics.Sequence, out List<Shared.Metrology.WS.Results>? wsResults)) | ||||
|                 wsResults = null; | ||||
|             if (processDataStandardFormat.InputPDSF is null) | ||||
|                 File.Move(preWith.MatchingFile, preWith.CheckFile); | ||||
|             else | ||||
|             { | ||||
|                 ProcessDataStandardFormat.Write(preWith.CheckFile, processDataStandardFormat, wsResults); | ||||
|                 File.Delete(preWith.MatchingFile); | ||||
|             } | ||||
|             if (Directory.Exists(preWith.NoWaitDirectory)) | ||||
|             { | ||||
|                 post = new(preWith.CheckFile, preWith.ErrFile); | ||||
| @ -366,10 +331,7 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|             { CreatePointerFile(numberLength, parentParentDirectory, matchingFiles); } | ||||
|             catch (Exception) { } | ||||
|         } | ||||
|         JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat); | ||||
|         List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements); | ||||
|         bool mesEntityMatchesProcess = descriptions.Count > 0 && descriptions[0].MesEntity == descriptions[0].Reactor; | ||||
|         ReadOnlyCollection<Pre> preCollection = GetPreCollection(numberLength, parentParentDirectory, matchingFiles, mesEntityMatchesProcess); | ||||
|         ReadOnlyCollection<Pre> preCollection = GetPreCollection(numberLength, parentParentDirectory, matchingFiles); | ||||
|         ReadOnlyCollection<PreWith> preWithCollection = GetPreWithCollection(preCollection); | ||||
|         MoveCollection(dateTime, processDataStandardFormat, preWithCollection); | ||||
|         return results; | ||||
|  | ||||
| @ -9,7 +9,6 @@ using System.Collections.Generic; | ||||
| using System.Globalization; | ||||
| using System.IO; | ||||
| using System.Linq; | ||||
| using System.Text; | ||||
| using System.Text.Json; | ||||
|  | ||||
| namespace Adaptation.FileHandlers.OpenInsight; | ||||
| @ -17,9 +16,7 @@ namespace Adaptation.FileHandlers.OpenInsight; | ||||
| public class FileRead : Shared.FileRead, IFileRead | ||||
| { | ||||
|  | ||||
|     private string _LastLines; | ||||
|     private readonly string _IqsConnectionString; | ||||
|     private readonly string _OpenInsightFilePattern; | ||||
|     private readonly string _OpenInsightApiECDirectory; | ||||
|  | ||||
|     public FileRead(ISMTP smtp, Dictionary<string, string> fileParameter, string cellInstanceName, int? connectionCount, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList<ModelObjectParameterDefinition> modelObjectParameters, string equipmentDictionaryName, Dictionary<string, List<long>> dummyRuns, Dictionary<long, List<WS.Results>> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) : | ||||
| @ -34,10 +31,8 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|             throw new Exception(cellInstanceConnectionName); | ||||
|         if (!_IsDuplicator) | ||||
|             throw new Exception(cellInstanceConnectionName); | ||||
|         _LastLines = string.Empty; | ||||
|         _IqsConnectionString = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "IQS.ConnectionString"); | ||||
|         _OpenInsightApiECDirectory = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "API.EC.Directory"); | ||||
|         _OpenInsightFilePattern = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "OpenInsight.FilePattern"); | ||||
|     } | ||||
|  | ||||
|     void IFileRead.Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, Exception exception) | ||||
| @ -115,104 +110,44 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|         return results; | ||||
|     } | ||||
|  | ||||
|     internal static Tuple<string, string> GetLines(Logistics logistics, List<txt.Description> descriptions) | ||||
|     { | ||||
|         StringBuilder result = new(); | ||||
|         char del = '\t'; | ||||
|         txt.Description x = descriptions[0]; | ||||
|         _ = result.Append(x.DcnLpdMin).Append(del).    // 001 -  | ||||
|             Append(x.DcnLpdMax).Append(del).       // 002 -  | ||||
|             Append(x.DcnLpdMean).Append(del).      // 003 - DCN LPD | ||||
|             Append(x.DcnAreaCountMin).Append(del). // 004 -  | ||||
|             Append(x.DcnAreaCountMax).Append(del). // 005 -  | ||||
|             Append(x.DcnAreaCountMean).Append(del).// 006 - DCN Area | ||||
|             Append(x.DcnAreaMin).Append(del).      // 007 -  | ||||
|             Append(x.DcnAreaMax).Append(del).      // 008 -  | ||||
|             Append(x.Date).Append(del).            // 009 -  | ||||
|             Append(x.DcnHazeAvgMean).Append(del).  // 010 - Haze Average | ||||
|             Append(string.Empty).Append(del).              // 011 -  | ||||
|             Append(string.Empty).Append(del).              // 012 -  | ||||
|             Append(string.Empty).Append(del).              // 013 -  | ||||
|             Append(string.Empty).Append(del).              // 014 -  | ||||
|             Append(string.Empty).Append(del).              // 015 -  | ||||
|             Append(string.Empty).Append(del).              // 016 -  | ||||
|             Append(string.Empty).Append(del).              // 017 -  | ||||
|             Append(string.Empty).Append(del).              // 018 -  | ||||
|             Append(string.Empty).Append(del).              // 019 -  | ||||
|             Append(string.Empty).Append(del).              // 020 -  | ||||
|             Append(string.Empty).Append(del).              // 021 -  | ||||
|             Append(string.Empty).Append(del).              // 022 -  | ||||
|             Append(string.Empty).Append(del).              // 023 -  | ||||
|             Append(string.Empty).Append(del).              // 024 -  | ||||
|             Append(string.Empty).Append(del).              // 025 -  | ||||
|             Append(string.Empty).Append(del).              // 026 -  | ||||
|             Append(string.Empty).Append(del).              // 027 -  | ||||
|             Append(x.RDS).Append(del).             // 028 - Lot | ||||
|             Append(x.Reactor).Append(del).         // 029 - Process | ||||
|             Append(x.Recipe).Append(del).          // 030 - Part | ||||
|             Append(x.DcnScrMean).Append(del).      // 031 - Scratch Count | ||||
|             Append(string.Empty).Append(del).              // 032 -  | ||||
|             Append(string.Empty).Append(del).              // 033 -  | ||||
|             Append(string.Empty).Append(del).              // 034 -  | ||||
|             Append(x.DcnMicroScrMean).Append(del). // 035 - Scratch Length | ||||
|             Append(string.Empty).Append(del).              // 036 -  | ||||
|             Append(string.Empty).Append(del).              // 037 -  | ||||
|             Append(string.Empty).Append(del).              // 038 -  | ||||
|             Append(x.DcnAllMean).Append(del).      // 039 - Average Sum of Defects | ||||
|             Append(x.DcnAllMax).Append(del).       // 040 - Max Sum of defects | ||||
|             Append(x.DcnAllMin).Append(del).       // 041 - Min Sum of Defects | ||||
|             Append(string.Empty).Append(del).              // 042 -  | ||||
|             Append(logistics.MesEntity).Append(del).                 // 043 -  | ||||
|             Append(x.DcnAreaMean).Append(del).     // 044 - DCN MM2 | ||||
|             AppendLine(); | ||||
|         return new Tuple<string, string>(result.ToString(), x.Date); | ||||
|     } | ||||
|  | ||||
|     private void SaveOpenInsightFile(string reportFullPath, DateTime dateTime, ProcessDataStandardFormat processDataStandardFormat, List<txt.Description> descriptions, Test[] tests) | ||||
|     private void SaveOpenInsightFile(string reportFullPath, DateTime dateTime, List<txt.Description> descriptions, Test[] tests) | ||||
|     { | ||||
|         string duplicateFile; | ||||
|         bool isDummyRun = false; | ||||
|         List<(Shared.Properties.IScopeInfo, string)> collection = new(); | ||||
|         string duplicateDirectory = Path.Combine(_FileConnectorConfiguration.SourceFileLocation, _CellInstanceName); | ||||
|         if (!Directory.Exists(duplicateDirectory)) | ||||
|             _ = Directory.CreateDirectory(duplicateDirectory); | ||||
|         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); | ||||
|         } | ||||
|         string duplicateFile = Path.Combine(duplicateDirectory, Path.GetFileName(reportFullPath)); | ||||
|         if (descriptions.Count == 0 || tests.Length == 0) | ||||
|             _LastLines = string.Empty; | ||||
|             duplicateFile = Path.Combine(duplicateDirectory, Path.GetFileName(reportFullPath)); | ||||
|         else | ||||
|         { | ||||
|             Tuple<string, string> lines = GetLines(_Logistics, descriptions); | ||||
|             string check = lines.Item1.Replace(lines.Item2, "$Date$"); | ||||
|             bool save = string.IsNullOrEmpty(_LastLines) || check != _LastLines; | ||||
|             if (save && !string.IsNullOrEmpty(check)) | ||||
|         { | ||||
|             long? subgroupId; | ||||
|                 _LastLines = check; | ||||
|             string fileName = Path.GetFileName(reportFullPath); | ||||
|             long breakAfter = dateTime.AddSeconds(_BreakAfterSeconds).Ticks; | ||||
|             long preWait = _FileConnectorConfiguration?.FileHandleWaitTime is null ? dateTime.AddMilliseconds(1234).Ticks : dateTime.AddMilliseconds(_FileConnectorConfiguration.FileHandleWaitTime.Value).Ticks; | ||||
|             if (string.IsNullOrEmpty(descriptions[0].Reactor) || string.IsNullOrEmpty(descriptions[0].PSN)) | ||||
|                 subgroupId = null; | ||||
|             else | ||||
|                 (subgroupId, int? _, string _) = FromIQS.GetCommandText(_IqsConnectionString, _Logistics, descriptions[0], breakAfter, preWait); | ||||
|                 if (subgroupId is null) | ||||
|                     collection.Add(new(new ScopeInfo(tests[0], _OpenInsightFilePattern), lines.Item1)); | ||||
|                 else | ||||
|                     collection.Add(new(new ScopeInfo(tests[0], $"{subgroupId.Value} {_OpenInsightFilePattern}"), lines.Item1)); | ||||
|                 string weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); | ||||
|                 FromIQS.Save(_OpenInsightApiECDirectory, _Logistics, reportFullPath, processDataStandardFormat, descriptions.First(), lines.Item1, subgroupId, weekOfYear); | ||||
|             if (_StaticRuns.TryGetValue(_Logistics.Sequence, out List<WS.Results> wsResults)) | ||||
|             { | ||||
|                 if (wsResults is null || wsResults.Count != 1) | ||||
|                     throw new NullReferenceException($"{nameof(wsResults)} {wsResults?.Count} != 1 {_Logistics.Sequence}!"); | ||||
|                 lock (_StaticRuns) | ||||
|                     wsResults[0] = WS.Results.Get(wsResults[0], subgroupId); | ||||
|             } | ||||
|             if (!fileName.StartsWith("Viewer")) | ||||
|                 duplicateFile = Path.Combine(duplicateDirectory, $"{subgroupId} {fileName}".TrimStart()); | ||||
|             else | ||||
|                 duplicateFile = Path.Combine(duplicateDirectory, $"{$"Viewer {subgroupId}".TrimEnd()} {fileName.Replace("Viewer", string.Empty)}"); | ||||
|             string weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); | ||||
|             FromIQS.Save(_OpenInsightApiECDirectory, _Logistics, reportFullPath, descriptions.First(), subgroupId, weekOfYear); | ||||
|         } | ||||
|             if (!Directory.Exists(duplicateDirectory)) | ||||
|                 _ = Directory.CreateDirectory(duplicateDirectory); | ||||
|         if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) | ||||
|         { | ||||
|             File.Copy(reportFullPath, duplicateFile, overwrite: true); | ||||
|             WaitForFileConsumption(dateTime, descriptions, isDummyRun, successDirectory, duplicateDirectory, collection, duplicateFile); | ||||
|         } | ||||
|     } | ||||
| @ -220,15 +155,16 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|     private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime) | ||||
|     { | ||||
|         Tuple<string, Test[], JsonElement[], List<FileInfo>> results; | ||||
|         ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath); | ||||
|         string[] lines = File.ReadAllLines(reportFullPath); | ||||
|         ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, lines); | ||||
|         _Logistics = new Logistics(reportFullPath, processDataStandardFormat); | ||||
|         SetFileParameterLotIDToLogisticsMID(); | ||||
|         JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat); | ||||
|         JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(reportFullPath, lines, processDataStandardFormat); | ||||
|         List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements); | ||||
|         Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); | ||||
|         if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) | ||||
|             SaveOpenInsightFile(reportFullPath, dateTime, processDataStandardFormat, descriptions, tests); | ||||
|         results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics[0]), tests, jsonElements, new List<FileInfo>()); | ||||
|             SaveOpenInsightFile(reportFullPath, dateTime, descriptions, tests); | ||||
|         results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>()); | ||||
|         return results; | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -325,80 +325,18 @@ public class FromIQS | ||||
|         return new(result, count, commandText); | ||||
|     } | ||||
|  | ||||
|     private static string GetJson(Logistics logistics, ProcessDataStandardFormat processDataStandardFormat, txt.Description description) | ||||
|     internal static void Save(string openInsightApiECDirectory, Logistics logistics, string reportFullPath, txt.Description description, long? subGroupId, string weekOfYear) | ||||
|     { | ||||
|         string result; | ||||
|         StringBuilder stringBuilder = new(); | ||||
|         var @object = new | ||||
|         { | ||||
|             description.MesEntity, | ||||
|             description.Employee, | ||||
|             // description.Layer, | ||||
|             description.PSN, | ||||
|             description.RDS, | ||||
|             description.Reactor, | ||||
|             description.Recipe, | ||||
|             // description.Zone, | ||||
|             logistics.DateTimeFromSequence.Ticks | ||||
|         }; | ||||
|         string[] pair; | ||||
|         string safeValue; | ||||
|         string[] segments; | ||||
|         string serializerValue; | ||||
|         foreach (string line in processDataStandardFormat.Logistics) | ||||
|         { | ||||
|             segments = line.Split('\t'); | ||||
|             if (segments.Length < 2) | ||||
|                 continue; | ||||
|             segments = segments[1].Split(';'); | ||||
|             _ = stringBuilder.Append('{'); | ||||
|             foreach (string segment in segments) | ||||
|             { | ||||
|                 pair = segment.Split('='); | ||||
|                 if (pair.Length != 2 || pair[0].Length < 3) | ||||
|                     continue; | ||||
|                 serializerValue = JsonSerializer.Serialize(pair[1]); | ||||
|                 safeValue = serializerValue.Substring(1, serializerValue.Length - 2); | ||||
|                 _ = stringBuilder.Append('"').Append(pair[0].Substring(2)).Append('"').Append(':').Append('"').Append(safeValue).Append('"').Append(','); | ||||
|             } | ||||
|             if (stringBuilder.Length > 0) | ||||
|                 _ = stringBuilder.Remove(stringBuilder.Length - 1, 1); | ||||
|             _ = stringBuilder.Append('}').Append(','); | ||||
|         } | ||||
|         if (stringBuilder.Length > 0) | ||||
|             _ = stringBuilder.Remove(stringBuilder.Length - 1, 1); | ||||
|         _ = stringBuilder.Append(']').Append('}'); | ||||
|         _ = stringBuilder.Insert(0, ",\"Logistics\":["); | ||||
|         string json = JsonSerializer.Serialize(@object); | ||||
|         _ = stringBuilder.Insert(0, json.Substring(0, json.Length - 1)); | ||||
|         JsonElement? jsonElement = JsonSerializer.Deserialize<JsonElement>(stringBuilder.ToString()); | ||||
|         result = jsonElement is null ? "{}" : JsonSerializer.Serialize(jsonElement, new JsonSerializerOptions { WriteIndented = true }); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     internal static void Save(string openInsightApiECDirectory, Logistics logistics, string reportFullPath, ProcessDataStandardFormat processDataStandardFormat, txt.Description description, string lines, long? subGroupId, string weekOfYear) | ||||
|     { | ||||
|         string checkFile; | ||||
|         string fileName = Path.GetFileName(reportFullPath); | ||||
|         string json = GetJson(logistics, processDataStandardFormat, description); | ||||
|         string? ecPathRoot = Path.GetPathRoot(openInsightApiECDirectory); | ||||
|         bool ecExists = ecPathRoot is not null && Directory.Exists(ecPathRoot); | ||||
|         string weekYear = $"{logistics.DateTimeFromSequence:yyyy}_Week_{weekOfYear}"; | ||||
|         string ecDirectory = Path.Combine(openInsightApiECDirectory, weekYear, $"-{description.PSN}", $"-{description.Reactor}", $"-{description.RDS}", $"-{subGroupId}"); | ||||
|         if (ecExists && !Directory.Exists(ecDirectory)) | ||||
|             _ = Directory.CreateDirectory(ecDirectory); | ||||
|         checkFile = Path.Combine(ecDirectory, fileName); | ||||
|         string checkFile = Path.Combine(ecDirectory, fileName); | ||||
|         if (ecExists && !File.Exists(checkFile)) | ||||
|             File.Copy(reportFullPath, checkFile); | ||||
|         checkFile = Path.Combine(ecDirectory, $"{logistics.DateTimeFromSequence.Ticks}.txt"); | ||||
|         if (ecExists && !File.Exists(checkFile)) | ||||
|             File.WriteAllText(checkFile, lines); | ||||
|         checkFile = Path.Combine(ecDirectory, $"{logistics.DateTimeFromSequence.Ticks}.json"); | ||||
|         if (ecExists && !File.Exists(checkFile)) | ||||
|             File.WriteAllText(checkFile, json); | ||||
|         checkFile = Path.Combine(ecDirectory, $"{logistics.DateTimeFromSequence.Ticks}.lbl"); | ||||
|         if (ecExists && !File.Exists(checkFile)) | ||||
|             File.WriteAllText(checkFile, processDataStandardFormat.Body[processDataStandardFormat.Body.Count - 1]); | ||||
|     } | ||||
|  | ||||
|     private static string GetCommandText(string[] iqsCopyValues) | ||||
|  | ||||
| @ -110,10 +110,10 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|         return results; | ||||
|     } | ||||
|  | ||||
|     private void SendData(string reportFullPath, DateTime dateTime, List<txt.Description> descriptions) | ||||
|     private void SendData(string reportFullPath, DateTime dateTime, JsonElement[] jsonElements, List<txt.Description> descriptions) | ||||
|     { | ||||
|         string checkDirectory; | ||||
|         WSRequest wsRequest = new(this, _Logistics, descriptions); | ||||
|         WSRequest wsRequest = new(this, _Logistics, jsonElements, descriptions); | ||||
|         int weekOfYear = _Calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday); | ||||
|         string directory = Path.Combine(_OpenInsightMetrologyViewerFileShare, dateTime.Year.ToString(), $"WW{weekOfYear:00}"); | ||||
|         checkDirectory = Path.Combine(directory, _Logistics.Sequence.ToString()); | ||||
| @ -139,15 +139,16 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|     private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime) | ||||
|     { | ||||
|         Tuple<string, Test[], JsonElement[], List<FileInfo>> results; | ||||
|         ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath); | ||||
|         string[] lines = File.ReadAllLines(reportFullPath); | ||||
|         ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, lines); | ||||
|         _Logistics = new Logistics(reportFullPath, processDataStandardFormat); | ||||
|         SetFileParameterLotIDToLogisticsMID(); | ||||
|         JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat); | ||||
|         JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(reportFullPath, lines, processDataStandardFormat); | ||||
|         List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements); | ||||
|         Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); | ||||
|         if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) | ||||
|             SendData(reportFullPath, dateTime, descriptions); | ||||
|         results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics[0]), tests, jsonElements, new List<FileInfo>()); | ||||
|             SendData(reportFullPath, dateTime, jsonElements, descriptions); | ||||
|         results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>()); | ||||
|         return results; | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -6,6 +6,7 @@ using System.Collections.Generic; | ||||
| using System.Diagnostics; | ||||
| using System.IO; | ||||
| using System.Linq; | ||||
| using System.Text.Json; | ||||
|  | ||||
| namespace Adaptation.FileHandlers.OpenInsightMetrologyViewer; | ||||
|  | ||||
| @ -16,8 +17,17 @@ public class WSRequest | ||||
|     // | ||||
|  | ||||
|     public int Id { get; set; } | ||||
|     public string AttemptCounter { get; set; } | ||||
|     public string CellName { get; set; } | ||||
|     public string Date { get; set; } | ||||
|     public string DcnAllMax { get; set; } | ||||
|     public string DcnAllMean { get; set; } | ||||
|     public string DcnAllMin { get; set; } | ||||
|     public string DcnAllStDev { get; set; } | ||||
|     public string DcnAreaCntMax { get; set; } | ||||
|     public string DcnAreaCntMean { get; set; } | ||||
|     public string DcnAreaCntMin { get; set; } | ||||
|     public string IndexOf { get; set; } | ||||
|     public string LotID { get; set; } | ||||
|     public string Operator { get; set; } | ||||
|     public string PSN { get; set; } | ||||
| @ -26,13 +36,6 @@ public class WSRequest | ||||
|     public string Recipe { get; set; } | ||||
|     public string Session { get; set; } | ||||
|     public string UniqueID { get; set; } | ||||
|     public string DcnAllMax { get; set; } | ||||
|     public string DcnAllMean { get; set; } | ||||
|     public string DcnAllMin { get; set; } | ||||
|     public string DcnAllStDev { get; set; } | ||||
|     public string DcnAreaCntMax { get; set; } | ||||
|     public string DcnAreaCntMean { get; set; } | ||||
|     public string DcnAreaCntMin { get; set; } | ||||
|     public string DcnAreaCntStDev { get; set; } | ||||
|     public string DcnAreaMax { get; set; } | ||||
|     public string DcnAreaMean { get; set; } | ||||
| @ -271,7 +274,7 @@ public class WSRequest | ||||
|     [Obsolete("For json")] public WSRequest() { } | ||||
|  | ||||
| #pragma warning disable IDE0060 | ||||
|     internal WSRequest(IFileRead fileRead, Logistics logistics, List<txt.Description> descriptions, string processDataStandardFormat = null) | ||||
|     internal WSRequest(IFileRead fileRead, Logistics logistics, JsonElement[] jsonElements, List<txt.Description> descriptions, string processDataStandardFormat = null) | ||||
| #pragma warning restore IDE0060 | ||||
|     { | ||||
|         Id = -1; | ||||
| @ -283,252 +286,254 @@ public class WSRequest | ||||
|             UniqueID = x.UniqueId; | ||||
|             Date = x.Date; | ||||
|             Reactor = x.Reactor; | ||||
|             LotID = x.Lot; | ||||
|             LotID = x.Lot; // different name | ||||
|             Session = x.Session; | ||||
|             AttemptCounter = x.AttemptCounter; | ||||
|             IndexOf = x.IndexOf; | ||||
|             DcnAllMin = x.DcnAllMin; | ||||
|             DcnAllMax = x.DcnAllMax; | ||||
|             DcnAllMean = x.DcnAllMean; | ||||
|             DcnAllStDev = x.DcnAllStdDev; | ||||
|             DcnAllStDev = x.DcnAllStdDev; // different name | ||||
|             DcnLpdMin = x.DcnLpdMin; | ||||
|             DcnLpdMax = x.DcnLpdMax; | ||||
|             DcnLpdMean = x.DcnLpdMean; | ||||
|             DcnLpdStDev = x.DcnLpdStdDev; | ||||
|             DcnLpdStDev = x.DcnLpdStdDev; // different name | ||||
|             DcnLpdNMin = x.DcnLpdNMin; | ||||
|             DcnLpdNMax = x.DcnLpdNMax; | ||||
|             DcnLpdNMean = x.DcnLpdNMean; | ||||
|             DcnLpdNStDev = x.DcnLpdNStdDev; | ||||
|             DcnLpdNStDev = x.DcnLpdNStdDev;  // different name | ||||
|             DcnLpdESMin = x.DcnLpdESMin; | ||||
|             DcnLpdESMax = x.DcnLpdESMax; | ||||
|             DcnLpdESMean = x.DcnLpdESMean; | ||||
|             DcnLpdESStDev = x.DcnLpdESStdDev; | ||||
|             DcnLpdESStDev = x.DcnLpdESStdDev; // different name | ||||
|             DcnMicroScrMin = x.DcnMicroScrMin; | ||||
|             DcnMicroScrMax = x.DcnMicroScrMax; | ||||
|             DcnMicroScrMean = x.DcnMicroScrMean; | ||||
|             DcnMicroScrStDev = x.DcnMicroScrStdDev; | ||||
|             DcnMicroScrStDev = x.DcnMicroScrStdDev; // different name | ||||
|             DcnScrMin = x.DcnScrMin; | ||||
|             DcnScrMax = x.DcnScrMax; | ||||
|             DcnScrMean = x.DcnScrMean; | ||||
|             DcnScrStDev = x.DcnScrStdDev; | ||||
|             DcnScrStDev = x.DcnScrStdDev; // different name | ||||
|             DcnSlipMin = x.DcnSlipMin; | ||||
|             DcnSlipMax = x.DcnSlipMax; | ||||
|             DcnSlipMean = x.DcnSlipMean; | ||||
|             DcnSlipStDev = x.DcnSlipStdDev; | ||||
|             DcnAreaCntMin = x.DcnAreaCountMin; | ||||
|             DcnAreaCntMax = x.DcnAreaCountMax; | ||||
|             DcnAreaCntMean = x.DcnAreaCountMean; | ||||
|             DcnAreaCntStDev = x.DcnAreaCountStdDev; | ||||
|             DcnSlipStDev = x.DcnSlipStdDev; // different name | ||||
|             DcnAreaCntMin = x.DcnAreaCountMin; // different name | ||||
|             DcnAreaCntMax = x.DcnAreaCountMax; // different name | ||||
|             DcnAreaCntMean = x.DcnAreaCountMean; // different name | ||||
|             DcnAreaCntStDev = x.DcnAreaCountStdDev;  // different name | ||||
|             DcnAreaMin = x.DcnAreaMin; | ||||
|             DcnAreaMax = x.DcnAreaMax; | ||||
|             DcnAreaMean = x.DcnAreaMean; | ||||
|             DcnAreaStDev = x.DcnAreaStdDev; | ||||
|             DcnAreaStDev = x.DcnAreaStdDev; // different name | ||||
|             DcnHazeAvgMin = x.DcnHazeAvgMin; | ||||
|             DcnHazeAvgMax = x.DcnHazeAvgMax; | ||||
|             DcnHazeAvgMean = x.DcnHazeAvgMean; | ||||
|             DcnHazeAvgStDev = x.DcnHazeAvgStdDev; | ||||
|             DcnHazeMedMin = x.DcnHazeMedianMin; | ||||
|             DcnHazeMedMax = x.DcnHazeMedianMax; | ||||
|             DcnHazeMedMean = x.DcnHazeMedianMean; | ||||
|             DcnHazeMedStDev = x.DcnHazeMedianStdDev; | ||||
|             DcnHazeStDevMin = x.DcnHazeStdDevMin; | ||||
|             DcnHazeStDevMax = x.DcnHazeStdDevMax; | ||||
|             DcnHazeStDevMean = x.DcnHazeStdDevMean; | ||||
|             DcnHazeStDevStDev = x.DcnHazeStdDevStdDev; | ||||
|             DcnHazeAvgStDev = x.DcnHazeAvgStdDev; // different name | ||||
|             DcnHazeMedMin = x.DcnHazeMedianMin; // different name | ||||
|             DcnHazeMedMax = x.DcnHazeMedianMax; // different name | ||||
|             DcnHazeMedMean = x.DcnHazeMedianMean; // different name | ||||
|             DcnHazeMedStDev = x.DcnHazeMedianStdDev; // different name | ||||
|             DcnHazeStDevMin = x.DcnHazeStdDevMin; // different name | ||||
|             DcnHazeStDevMax = x.DcnHazeStdDevMax; // different name | ||||
|             DcnHazeStDevMean = x.DcnHazeStdDevMean; // different name | ||||
|             DcnHazeStDevStDev = x.DcnHazeStdDevStdDev; // different name | ||||
|             DcnBin1Min = x.DcnBin1Min; | ||||
|             DcnBin1Max = x.DcnBin1Max; | ||||
|             DcnBin1Mean = x.DcnBin1Mean; | ||||
|             DcnBin1StDev = x.DcnBin1StdDev; | ||||
|             DcnBin1StDev = x.DcnBin1StdDev; // different name | ||||
|             DcnBin2Min = x.DcnBin2Min; | ||||
|             DcnBin2Max = x.DcnBin2Max; | ||||
|             DcnBin2Mean = x.DcnBin2Mean; | ||||
|             DcnBin2StDev = x.DcnBin2StdDev; | ||||
|             DcnBin2StDev = x.DcnBin2StdDev; // different name | ||||
|             DcnBin3Min = x.DcnBin3Min; | ||||
|             DcnBin3Max = x.DcnBin3Max; | ||||
|             DcnBin3Mean = x.DcnBin3Mean; | ||||
|             DcnBin3StDev = x.DcnBin3StdDev; | ||||
|             DcnBin3StDev = x.DcnBin3StdDev; // different name | ||||
|             DcnBin4Min = x.DcnBin4Min; | ||||
|             DcnBin4Max = x.DcnBin4Max; | ||||
|             DcnBin4Mean = x.DcnBin4Mean; | ||||
|             DcnBin4StDev = x.DcnBin4StdDev; | ||||
|             DcnBin4StDev = x.DcnBin4StdDev; // different name | ||||
|             DcnBin5Min = x.DcnBin5Min; | ||||
|             DcnBin5Max = x.DcnBin5Max; | ||||
|             DcnBin5Mean = x.DcnBin5Mean; | ||||
|             DcnBin5StDev = x.DcnBin5StdDev; | ||||
|             DcnBin5StDev = x.DcnBin5StdDev; // different name | ||||
|             DcnBin6Min = x.DcnBin6Min; | ||||
|             DcnBin6Max = x.DcnBin6Max; | ||||
|             DcnBin6Mean = x.DcnBin6Mean; | ||||
|             DcnBin6StDev = x.DcnBin6StdDev; | ||||
|             DcnBin6StDev = x.DcnBin6StdDev; // different name | ||||
|             DcnBin7Min = x.DcnBin7Min; | ||||
|             DcnBin7Max = x.DcnBin7Max; | ||||
|             DcnBin7Mean = x.DcnBin7Mean; | ||||
|             DcnBin7StDev = x.DcnBin7StdDev; | ||||
|             DcnBin7StDev = x.DcnBin7StdDev; // different name | ||||
|             DcnBin8Min = x.DcnBin8Min; | ||||
|             DcnBin8Max = x.DcnBin8Max; | ||||
|             DcnBin8Mean = x.DcnBin8Mean; | ||||
|             DcnBin8StDev = x.DcnBin8StdDev; | ||||
|             DcnBin8StDev = x.DcnBin8StdDev; // different name | ||||
|             DwnAllMin = x.DwnAllMin; | ||||
|             DwnAllMax = x.DwnAllMax; | ||||
|             DwnAllMean = x.DwnAllMean; | ||||
|             DwnAllStDev = x.DwnAllStdDev; | ||||
|             DwnAllStDev = x.DwnAllStdDev; // different name | ||||
|             DwnLpdMin = x.DwnLpdMin; | ||||
|             DwnLpdMax = x.DwnLpdMax; | ||||
|             DwnLpdMean = x.DwnLpdMean; | ||||
|             DwnLpdStDev = x.DwnLpdStdDev; | ||||
|             DwnLpdStDev = x.DwnLpdStdDev; // different name | ||||
|             DwnLpdNMin = x.DwnLpdNMin; | ||||
|             DwnLpdNMax = x.DwnLpdNMax; | ||||
|             DwnLpdNMean = x.DwnLpdNMean; | ||||
|             DwnLpdNStDev = x.DwnLpdNStdDev; | ||||
|             DwnLpdNStDev = x.DwnLpdNStdDev; // different name | ||||
|             DwnLpdESMin = x.DwnLpdESMin; | ||||
|             DwnLpdESMax = x.DwnLpdESMax; | ||||
|             DwnLpdESMean = x.DwnLpdESMean; | ||||
|             DwnLpdESStDev = x.DwnLpdESStdDev; | ||||
|             DwnLpdESStDev = x.DwnLpdESStdDev; // different name | ||||
|             DwnMicroScrMin = x.DwnMicroScrMin; | ||||
|             DwnMicroScrMax = x.DwnMicroScrMax; | ||||
|             DwnMicroScrMean = x.DwnMicroScrMean; | ||||
|             DwnMicroScrStDev = x.DwnMicroScrStdDev; | ||||
|             DwnMicroScrStDev = x.DwnMicroScrStdDev; // different name | ||||
|             DwnScrMin = x.DwnScrMin; | ||||
|             DwnScrMax = x.DwnScrMax; | ||||
|             DwnScrMean = x.DwnScrMean; | ||||
|             DwnScrStDev = x.DwnScrStdDev; | ||||
|             DwnScrStDev = x.DwnScrStdDev; // different name | ||||
|             DwnSlipMin = x.DwnSlipMin; | ||||
|             DwnSlipMax = x.DwnSlipMax; | ||||
|             DwnSlipMean = x.DwnSlipMean; | ||||
|             DwnSlipStDev = x.DwnSlipStdDev; | ||||
|             DwnAreaCntMin = x.DwnAreaCountMin; | ||||
|             DwnAreaCntMax = x.DwnAreaCountMax; | ||||
|             DwnAreaCntMean = x.DwnAreaCountMean; | ||||
|             DwnAreaCntStDev = x.DwnAreaCountStdDev; | ||||
|             DwnSlipStDev = x.DwnSlipStdDev; // different name | ||||
|             DwnAreaCntMin = x.DwnAreaCountMin; // different name | ||||
|             DwnAreaCntMax = x.DwnAreaCountMax; // different name | ||||
|             DwnAreaCntMean = x.DwnAreaCountMean; // different name | ||||
|             DwnAreaCntStDev = x.DwnAreaCountStdDev;  // different name | ||||
|             DwnAreaMin = x.DwnAreaMin; | ||||
|             DwnAreaMax = x.DwnAreaMax; | ||||
|             DwnAreaMean = x.DwnAreaMean; | ||||
|             DwnAreaStDev = x.DwnAreaStdDev; | ||||
|             DwnAreaStDev = x.DwnAreaStdDev; // different name | ||||
|             DwnHazeAvgMin = x.DwnHazeAvgMin; | ||||
|             DwnHazeAvgMax = x.DwnHazeAvgMax; | ||||
|             DwnHazeAvgMean = x.DwnHazeAvgMean; | ||||
|             DwnHazeAvgStDev = x.DwnHazeAvgStdDev; | ||||
|             DwnHazeMedMin = x.DwnHazeMedianMin; | ||||
|             DwnHazeMedMax = x.DwnHazeMedianMax; | ||||
|             DwnHazeMedMean = x.DwnHazeMedianMean; | ||||
|             DwnHazeMedStDev = x.DwnHazeMedianStdDev; | ||||
|             DwnHazeStDevMin = x.DwnHazeStdDevMin; | ||||
|             DwnHazeStDevMax = x.DwnHazeStdDevMax; | ||||
|             DwnHazeStDevMean = x.DwnHazeStdDevMean; | ||||
|             DwnHazeStDevStDev = x.DwnHazeStdDevStdDev; | ||||
|             DwnHazeAvgStDev = x.DwnHazeAvgStdDev; // different name | ||||
|             DwnHazeMedMin = x.DwnHazeMedianMin; // different name | ||||
|             DwnHazeMedMax = x.DwnHazeMedianMax; // different name | ||||
|             DwnHazeMedMean = x.DwnHazeMedianMean; // different name | ||||
|             DwnHazeMedStDev = x.DwnHazeMedianStdDev; // different name | ||||
|             DwnHazeStDevMin = x.DwnHazeStdDevMin; // different name | ||||
|             DwnHazeStDevMax = x.DwnHazeStdDevMax; // different name | ||||
|             DwnHazeStDevMean = x.DwnHazeStdDevMean; // different name | ||||
|             DwnHazeStDevStDev = x.DwnHazeStdDevStdDev; // different name | ||||
|             DwnBin1Min = x.DwnBin1Min; | ||||
|             DwnBin1Max = x.DwnBin1Max; | ||||
|             DwnBin1Mean = x.DwnBin1Mean; | ||||
|             DwnBin1StDev = x.DwnBin1StdDev; | ||||
|             DwnBin1StDev = x.DwnBin1StdDev; // different name | ||||
|             DwnBin2Min = x.DwnBin2Min; | ||||
|             DwnBin2Max = x.DwnBin2Max; | ||||
|             DwnBin2Mean = x.DwnBin2Mean; | ||||
|             DwnBin2StDev = x.DwnBin2StdDev; | ||||
|             DwnBin2StDev = x.DwnBin2StdDev; // different name | ||||
|             DwnBin3Min = x.DwnBin3Min; | ||||
|             DwnBin3Max = x.DwnBin3Max; | ||||
|             DwnBin3Mean = x.DwnBin3Mean; | ||||
|             DwnBin3StDev = x.DwnBin3StdDev; | ||||
|             DwnBin3StDev = x.DwnBin3StdDev; // different name | ||||
|             DwnBin4Min = x.DwnBin4Min; | ||||
|             DwnBin4Max = x.DwnBin4Max; | ||||
|             DwnBin4Mean = x.DwnBin4Mean; | ||||
|             DwnBin4StDev = x.DwnBin4StdDev; | ||||
|             DwnBin4StDev = x.DwnBin4StdDev; // different name | ||||
|             DwnBin5Min = x.DwnBin5Min; | ||||
|             DwnBin5Max = x.DwnBin5Max; | ||||
|             DwnBin5Mean = x.DwnBin5Mean; | ||||
|             DwnBin5StDev = x.DwnBin5StdDev; | ||||
|             DwnBin5StDev = x.DwnBin5StdDev; // different name | ||||
|             DwnBin6Min = x.DwnBin6Min; | ||||
|             DwnBin6Max = x.DwnBin6Max; | ||||
|             DwnBin6Mean = x.DwnBin6Mean; | ||||
|             DwnBin6StDev = x.DwnBin6StdDev; | ||||
|             DwnBin6StDev = x.DwnBin6StdDev; // different name | ||||
|             DwnBin7Min = x.DwnBin7Min; | ||||
|             DwnBin7Max = x.DwnBin7Max; | ||||
|             DwnBin7Mean = x.DwnBin7Mean; | ||||
|             DwnBin7StDev = x.DwnBin7StdDev; | ||||
|             DwnBin7StDev = x.DwnBin7StdDev; // different name | ||||
|             DwnBin8Min = x.DwnBin8Min; | ||||
|             DwnBin8Max = x.DwnBin8Max; | ||||
|             DwnBin8Mean = x.DwnBin8Mean; | ||||
|             DwnBin8StDev = x.DwnBin8StdDev; | ||||
|             DwnBin8StDev = x.DwnBin8StdDev; // different name | ||||
|             DnnAllMin = x.DnnAllMin; | ||||
|             DnnAllMax = x.DnnAllMax; | ||||
|             DnnAllMean = x.DnnAllMean; | ||||
|             DnnAllStDev = x.DnnAllStdDev; | ||||
|             DnnAllStDev = x.DnnAllStdDev; // different name | ||||
|             DnnLpdMin = x.DnnLpdMin; | ||||
|             DnnLpdMax = x.DnnLpdMax; | ||||
|             DnnLpdMean = x.DnnLpdMean; | ||||
|             DnnLpdStDev = x.DnnLpdStdDev; | ||||
|             DnnLpdStDev = x.DnnLpdStdDev; // different name | ||||
|             DnnLpdNMin = x.DnnLpdNMin; | ||||
|             DnnLpdNMax = x.DnnLpdNMax; | ||||
|             DnnLpdNMean = x.DnnLpdNMean; | ||||
|             DnnLpdNStDev = x.DnnLpdNStdDev; | ||||
|             DnnLpdNStDev = x.DnnLpdNStdDev; // different name | ||||
|             DnnLpdESMin = x.DnnLpdESMin; | ||||
|             DnnLpdESMax = x.DnnLpdESMax; | ||||
|             DnnLpdESMean = x.DnnLpdESMean; | ||||
|             DnnLpdESStDev = x.DnnLpdESStdDev; | ||||
|             DnnLpdESStDev = x.DnnLpdESStdDev; // different name | ||||
|             DnnMicroScrMin = x.DnnMicroScrMin; | ||||
|             DnnMicroScrMax = x.DnnMicroScrMax; | ||||
|             DnnMicroScrMean = x.DnnMicroScrMean; | ||||
|             DnnMicroScrStDev = x.DnnMicroScrStdDev; | ||||
|             DnnMicroScrStDev = x.DnnMicroScrStdDev; // different name | ||||
|             DnnScrMin = x.DnnScrMin; | ||||
|             DnnScrMax = x.DnnScrMax; | ||||
|             DnnScrMean = x.DnnScrMean; | ||||
|             DnnScrStDev = x.DnnScrStdDev; | ||||
|             DnnScrStDev = x.DnnScrStdDev; // different name | ||||
|             DnnSlipMin = x.DnnSlipMin; | ||||
|             DnnSlipMax = x.DnnSlipMax; | ||||
|             DnnSlipMean = x.DnnSlipMean; | ||||
|             DnnSlipStDev = x.DnnSlipStdDev; | ||||
|             DnnAreaCntMin = x.DnnAreaCountMin; | ||||
|             DnnAreaCntMax = x.DnnAreaCountMax; | ||||
|             DnnAreaCntMean = x.DnnAreaCountMean; | ||||
|             DnnAreaCntStDev = x.DnnAreaCountStdDev; | ||||
|             DnnSlipStDev = x.DnnSlipStdDev; // different name | ||||
|             DnnAreaCntMin = x.DnnAreaCountMin; // different name | ||||
|             DnnAreaCntMax = x.DnnAreaCountMax; // different name | ||||
|             DnnAreaCntMean = x.DnnAreaCountMean; // different name | ||||
|             DnnAreaCntStDev = x.DnnAreaCountStdDev;  // different name | ||||
|             DnnAreaMin = x.DnnAreaMin; | ||||
|             DnnAreaMax = x.DnnAreaMax; | ||||
|             DnnAreaMean = x.DnnAreaMean; | ||||
|             DnnAreaStDev = x.DnnAreaStdDev; | ||||
|             DnnAreaStDev = x.DnnAreaStdDev; // different name | ||||
|             DnnHazeAvgMin = x.DnnHazeAvgMin; | ||||
|             DnnHazeAvgMax = x.DnnHazeAvgMax; | ||||
|             DnnHazeAvgMean = x.DnnHazeAvgMean; | ||||
|             DnnHazeAvgStDev = x.DnnHazeAvgStdDev; | ||||
|             DnnHazeMedMin = x.DnnHazeMedianMin; | ||||
|             DnnHazeMedMax = x.DnnHazeMedianMax; | ||||
|             DnnHazeMedMean = x.DnnHazeMedianMean; | ||||
|             DnnHazeMedStDev = x.DnnHazeMedianStdDev; | ||||
|             DnnHazeStDevMin = x.DnnHazeStdDevMin; | ||||
|             DnnHazeStDevMax = x.DnnHazeStdDevMax; | ||||
|             DnnHazeStDevMean = x.DnnHazeStdDevMean; | ||||
|             DnnHazeStDevStDev = x.DnnHazeStdDevStdDev; | ||||
|             DnnHazeAvgStDev = x.DnnHazeAvgStdDev; // different name | ||||
|             DnnHazeMedMin = x.DnnHazeMedianMin; // different name | ||||
|             DnnHazeMedMax = x.DnnHazeMedianMax; // different name | ||||
|             DnnHazeMedMean = x.DnnHazeMedianMean; // different name | ||||
|             DnnHazeMedStDev = x.DnnHazeMedianStdDev; // different name | ||||
|             DnnHazeStDevMin = x.DnnHazeStdDevMin; // different name | ||||
|             DnnHazeStDevMax = x.DnnHazeStdDevMax; // different name | ||||
|             DnnHazeStDevMean = x.DnnHazeStdDevMean; // different name | ||||
|             DnnHazeStDevStDev = x.DnnHazeStdDevStdDev; // different name | ||||
|             DnnBin1Min = x.DnnBin1Min; | ||||
|             DnnBin1Max = x.DnnBin1Max; | ||||
|             DnnBin1Mean = x.DnnBin1Mean; | ||||
|             DnnBin1StDev = x.DnnBin1StdDev; | ||||
|             DnnBin1StDev = x.DnnBin1StdDev; // different name | ||||
|             DnnBin2Min = x.DnnBin2Min; | ||||
|             DnnBin2Max = x.DnnBin2Max; | ||||
|             DnnBin2Mean = x.DnnBin2Mean; | ||||
|             DnnBin2StDev = x.DnnBin2StdDev; | ||||
|             DnnBin2StDev = x.DnnBin2StdDev; // different name | ||||
|             DnnBin3Min = x.DnnBin3Min; | ||||
|             DnnBin3Max = x.DnnBin3Max; | ||||
|             DnnBin3Mean = x.DnnBin3Mean; | ||||
|             DnnBin3StDev = x.DnnBin3StdDev; | ||||
|             DnnBin3StDev = x.DnnBin3StdDev; // different name | ||||
|             DnnBin4Min = x.DnnBin4Min; | ||||
|             DnnBin4Max = x.DnnBin4Max; | ||||
|             DnnBin4Mean = x.DnnBin4Mean; | ||||
|             DnnBin4StDev = x.DnnBin4StdDev; | ||||
|             DnnBin4StDev = x.DnnBin4StdDev; // different name | ||||
|             DnnBin5Min = x.DnnBin5Min; | ||||
|             DnnBin5Max = x.DnnBin5Max; | ||||
|             DnnBin5Mean = x.DnnBin5Mean; | ||||
|             DnnBin5StDev = x.DnnBin5StdDev; | ||||
|             DnnBin5StDev = x.DnnBin5StdDev; // different name | ||||
|             DnnBin6Min = x.DnnBin6Min; | ||||
|             DnnBin6Max = x.DnnBin6Max; | ||||
|             DnnBin6Mean = x.DnnBin6Mean; | ||||
|             DnnBin6StDev = x.DnnBin6StdDev; | ||||
|             DnnBin6StDev = x.DnnBin6StdDev; // different name | ||||
|             DnnBin7Min = x.DnnBin7Min; | ||||
|             DnnBin7Max = x.DnnBin7Max; | ||||
|             DnnBin7Mean = x.DnnBin7Mean; | ||||
|             DnnBin7StDev = x.DnnBin7StdDev; | ||||
|             DnnBin7StDev = x.DnnBin7StdDev; // different name | ||||
|             DnnBin8Min = x.DnnBin8Min; | ||||
|             DnnBin8Max = x.DnnBin8Max; | ||||
|             DnnBin8Mean = x.DnnBin8Mean; | ||||
|             DnnBin8StDev = x.DnnBin8StdDev; | ||||
|             DnnBin8StDev = x.DnnBin8StdDev; // different name | ||||
|             RDS = x.RDS; | ||||
|             PSN = x.PSN; | ||||
|             Recipe = x.Recipe; | ||||
|             Operator = x.Employee; | ||||
|             Operator = x.Employee; // different name | ||||
|         } | ||||
|         txt.Detail detail; | ||||
|         foreach (txt.Description description in descriptions) | ||||
| @ -635,14 +640,14 @@ public class WSRequest | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     internal static long GetHeaderId(IFileRead fileRead, Logistics logistics, string openInsightMetrologyViewerAPI, string openInsightMetrologyViewerFileShare, int weekOfYear, WS.Results results, List<txt.Description> descriptions) | ||||
|     internal static long GetHeaderId(IFileRead fileRead, Logistics logistics, string openInsightMetrologyViewerAPI, string openInsightMetrologyViewerFileShare, int weekOfYear, WS.Results results, JsonElement[] jsonElements, List<txt.Description> descriptions) | ||||
|     { | ||||
|         long result; | ||||
|         if (results is not null && results.HeaderId is not null) | ||||
|             result = results.HeaderId.Value; | ||||
|         else | ||||
|         { | ||||
|             WSRequest wsRequest = new(fileRead, logistics, descriptions); | ||||
|             WSRequest wsRequest = new(fileRead, logistics, jsonElements, descriptions); | ||||
|             string directory = Path.Combine(openInsightMetrologyViewerFileShare, logistics.DateTimeFromSequence.Year.ToString(), $"WW{weekOfYear:00}"); | ||||
|             (_, WS.Results wsResults) = WS.SendData(openInsightMetrologyViewerAPI, logistics.Sequence, directory, wsRequest); | ||||
|             if (wsResults.Success is null || !wsResults.Success.Value) | ||||
|  | ||||
| @ -139,7 +139,7 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     private void PostOpenInsightMetrologyViewerAttachments(List<txt.Description> descriptions) | ||||
|     private void PostOpenInsightMetrologyViewerAttachments(JsonElement[] jsonElements, List<txt.Description> descriptions) | ||||
|     { | ||||
|         Shared.Metrology.WS.Results? results; | ||||
|         string jobIdDirectory = Path.Combine(Path.GetDirectoryName(_FileConnectorConfiguration.AlternateTargetFolder) ?? throw new Exception(), _Logistics.JobID); | ||||
| @ -155,7 +155,7 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|             results = wsResults[0]; | ||||
|         } | ||||
|         int weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday); | ||||
|         long headerId = !_IsEAFHosted ? -1 : OpenInsightMetrologyViewer.WSRequest.GetHeaderId(this, _Logistics, _OpenInsightMetrologyViewerAPI, _OpenInsightMetrologyViewerFileShare, weekOfYear, results, descriptions); | ||||
|         long headerId = !_IsEAFHosted ? -1 : OpenInsightMetrologyViewer.WSRequest.GetHeaderId(this, _Logistics, _OpenInsightMetrologyViewerAPI, _OpenInsightMetrologyViewerFileShare, weekOfYear, results, jsonElements, descriptions); | ||||
|         string? headerIdDirectory = GetHeaderIdDirectory(headerId); | ||||
|         if (string.IsNullOrEmpty(headerIdDirectory)) | ||||
|             throw new Exception($"Didn't find header id directory <{headerId}>"); | ||||
| @ -167,15 +167,16 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|         if (dateTime == DateTime.MinValue) | ||||
|             throw new ArgumentNullException(nameof(dateTime)); | ||||
|         Tuple<string, Test[], JsonElement[], List<FileInfo>> results; | ||||
|         ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath); | ||||
|         string[] lines = File.ReadAllLines(reportFullPath); | ||||
|         ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, lines); | ||||
|         _Logistics = new Logistics(reportFullPath, processDataStandardFormat); | ||||
|         SetFileParameterLotIDToLogisticsMID(); | ||||
|         JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat); | ||||
|         JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(reportFullPath, lines, processDataStandardFormat); | ||||
|         List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements); | ||||
|         Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); | ||||
|         if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) | ||||
|             PostOpenInsightMetrologyViewerAttachments(descriptions); | ||||
|         results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics[0]), tests, jsonElements, new List<FileInfo>()); | ||||
|             PostOpenInsightMetrologyViewerAttachments(jsonElements, descriptions); | ||||
|         results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>()); | ||||
|         return results; | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -108,7 +108,7 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|         return results; | ||||
|     } | ||||
|  | ||||
|     private void DirectoryMove(string reportFullPath, DateTime dateTime, List<txt.Description> descriptions) | ||||
|     private void DirectoryMove(string reportFullPath, DateTime dateTime, JsonElement[] jsonElements, List<txt.Description> descriptions) | ||||
|     { | ||||
|         if (dateTime == DateTime.MinValue) | ||||
|             throw new ArgumentNullException(nameof(dateTime)); | ||||
| @ -122,7 +122,7 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|             throw new Exception("Didn't find directory by logistics sequence"); | ||||
|         if (fileInfo.Exists && fileInfo.LastWriteTime < fileInfo.CreationTime) | ||||
|             File.SetLastWriteTime(reportFullPath, fileInfo.CreationTime); | ||||
|         OpenInsightMetrologyViewer.WSRequest wsRequest = new(this, _Logistics, descriptions); | ||||
|         OpenInsightMetrologyViewer.WSRequest wsRequest = new(this, _Logistics, jsonElements, descriptions); | ||||
|         JsonSerializerOptions jsonSerializerOptions = new() { WriteIndented = true }; | ||||
|         string json = JsonSerializer.Serialize(wsRequest, wsRequest.GetType(), jsonSerializerOptions); | ||||
|         string directoryName = $"{Path.GetFileName(matchDirectories[0]).Split(new string[] { logisticsSequence }, StringSplitOptions.None)[0]}{_Logistics.DateTimeFromSequence:yyyy-MM-dd_hh;mm_tt_}{DateTime.Now.Ticks - _Logistics.Sequence}"; | ||||
| @ -166,23 +166,24 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|     private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime) | ||||
|     { | ||||
|         Tuple<string, Test[], JsonElement[], List<FileInfo>> results; | ||||
|         ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath); | ||||
|         string[] lines = File.ReadAllLines(reportFullPath); | ||||
|         ProcessDataStandardFormat processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, lines); | ||||
|         _Logistics = new Logistics(reportFullPath, processDataStandardFormat); | ||||
|         SetFileParameterLotIDToLogisticsMID(); | ||||
|         JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat); | ||||
|         JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(reportFullPath, lines, processDataStandardFormat); | ||||
|         List<txt.Description> descriptions = txt.ProcessData.GetDescriptions(jsonElements); | ||||
|         Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); | ||||
|         results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics[0]), 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) | ||||
|             DirectoryMove(reportFullPath, dateTime, descriptions); | ||||
|             DirectoryMove(reportFullPath, dateTime, jsonElements, descriptions); | ||||
|         else if (!_IsEAFHosted) | ||||
|         { | ||||
|             OpenInsightMetrologyViewer.WSRequest wsRequest = new(this, _Logistics, descriptions); | ||||
|             OpenInsightMetrologyViewer.WSRequest wsRequest = new(this, _Logistics, jsonElements, descriptions); | ||||
|             JsonSerializerOptions jsonSerializerOptions = new() { WriteIndented = true }; | ||||
|             string json = JsonSerializer.Serialize(wsRequest, wsRequest.GetType(), jsonSerializerOptions); | ||||
|             string check = JsonSerializer.Serialize(wsRequest, wsRequest.GetType(), jsonSerializerOptions); | ||||
|             string jsonFileName = Path.ChangeExtension(reportFullPath, ".json"); | ||||
|             string historicalText = File.ReadAllText(jsonFileName); | ||||
|             if (json != historicalText) | ||||
|             if (check != historicalText) | ||||
|                 throw new Exception("File doesn't match historical!"); | ||||
|         } | ||||
|         return results; | ||||
|  | ||||
| @ -125,7 +125,7 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|         Test[] tests = (from l in descriptions select (Test)l.Test).ToArray(); | ||||
|         if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0) | ||||
|             FileCopy(reportFullPath, dateTime, descriptions); | ||||
|         results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics[0]), 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; | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -19,6 +19,7 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|     public const string BarcodeHostFileShare = @"\\mesfs.infineon.com\EC_Metrology_Si\BarcodeHost\API"; | ||||
|     public const string MetrologyFileShare = @"\\mesfs.infineon.com\EC_Metrology_Si\WorkMaterialOut\API"; | ||||
|     public const string OpenInsightApplicationProgrammingInterface = @"http://oi-metrology-viewer-api.mes.infineon.com:8080/api/oiWizard"; | ||||
|     public const string IQSConnectionString = @"Data Source=messqlec1.infineon.com\PROD1,53959;Initial Catalog=IRMNSPC;Integrated Security=True"; | ||||
|     public const string LSL2SQLConnectionString = @"Data Source=messqlec1.infineon.com\PROD1,53959;Initial Catalog=LSL2SQL;Persist Security Info=True;User ID=srpadmin;Password=0okm9ijn;"; | ||||
|  | ||||
|     private long? _TickOffset; | ||||
| @ -38,6 +39,9 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|         string barcodeHostFileShare = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Barcode.Host.FileShare"); | ||||
|         if (barcodeHostFileShare != BarcodeHostFileShare) | ||||
|             throw new NotSupportedException($"Update configuration for [{nameof(BarcodeHostFileShare)}]"); | ||||
|         string iqsConnectionString = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "IQS.ConnectionString"); | ||||
|         if (iqsConnectionString != IQSConnectionString) | ||||
|             throw new NotSupportedException($"Update configuration for [{nameof(IQSConnectionString)}]"); | ||||
|         string lsl2SQLConnectionString = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "ConnectionString.LSL2SQL"); | ||||
|         if (lsl2SQLConnectionString != LSL2SQLConnectionString) | ||||
|             throw new NotSupportedException($"Update configuration for [{nameof(LSL2SQLConnectionString)}]"); | ||||
| @ -53,14 +57,14 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|         string tibcoParameterSubjectPrefix = GetPropertyValue(cellInstanceConnectionName, tibcoParameters, "TIBCO.IFX_SUBJECT_PREFIX"); | ||||
|         string tibcoParameterConfigurationLocation = GetPropertyValue(cellInstanceConnectionName, tibcoParameters, "TIBCO.IFX_CONFIGURATION_LOCATION"); | ||||
|         string tibcoParameterConfigurationLocationCopy = GetPropertyValue(cellInstanceConnectionName, tibcoParameters, "TIBCO.IFX_CONFIGURATION_LOCATION_LOCAL_COPY"); | ||||
|         if (!Directory.Exists(MetrologyFileShare)) | ||||
|         if (!Directory.Exists(metrologyFileShare)) | ||||
|             throw new Exception($"Unable to access file-share <{MetrologyFileShare}>"); | ||||
|         if (!Directory.Exists(BarcodeHostFileShare)) | ||||
|         if (!Directory.Exists(barcodeHostFileShare)) | ||||
|             throw new Exception($"Unable to access file-share <{BarcodeHostFileShare}>"); | ||||
|         if (_IsEAFHosted) | ||||
|         { | ||||
|             HttpClient httpClient = new() { BaseAddress = new(OpenInsightApplicationProgrammingInterface) }; | ||||
|             Transport.Main.Initialize(smtp, cellInstanceName, fileConnectorConfiguration, LSL2SQLConnectionString, MetrologyFileShare, BarcodeHostFileShare, httpClient); | ||||
|             HttpClient httpClient = new() { BaseAddress = new(openInsightApplicationProgrammingInterface) }; | ||||
|             Transport.Main.Initialize(smtp, cellInstanceName, fileConnectorConfiguration, iqsConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient); | ||||
|             if (!string.IsNullOrEmpty(fileConnectorConfiguration.SourceFileLocation)) | ||||
|                 _ = Transport.Main.Setup(useSleep: true, setIfxTransport: true, tibcoParameterChannel, tibcoParameterSubjectPrefix, tibcoParameterConfigurationLocation, tibcoParameterConfigurationLocationCopy, tibcoParameterSubject); | ||||
|             else | ||||
|  | ||||
| @ -11,13 +11,17 @@ public class Common | ||||
|     public int? ReactorNumber { get; } | ||||
|     public string? Zone { get; } | ||||
|     public string? Employee { get; } | ||||
|     public RunDataSheetRoot? RunDataSheetRoot { get; } | ||||
|     public WorkOrder? WorkOrder { get; } | ||||
|  | ||||
|     public Common(string? layer, | ||||
|                   string? psn, | ||||
|                   int? rdsNumber, | ||||
|                   int? reactor, | ||||
|                   string? zone, | ||||
|                   string? employee) | ||||
|                   string? employee, | ||||
|                   RunDataSheetRoot? runDataSheetRoot, | ||||
|                   WorkOrder? workOrder) | ||||
|     { | ||||
|         Layer = layer; | ||||
|         PSN = psn; | ||||
| @ -25,6 +29,8 @@ public class Common | ||||
|         ReactorNumber = reactor; | ||||
|         Zone = zone; | ||||
|         Employee = employee; | ||||
|         RunDataSheetRoot = runDataSheetRoot; | ||||
|         WorkOrder = workOrder; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -1,18 +1,22 @@ | ||||
| namespace Adaptation.FileHandlers.TIBCO.Transport; | ||||
|  | ||||
| #nullable enable | ||||
|  | ||||
| public class CommonB | ||||
| { | ||||
|  | ||||
|     public string Comment { get; } | ||||
|     public string Layer { get; } | ||||
|     public string? Layer { get; } | ||||
|     public int? RDSNumber { get; } | ||||
|     public string PSN { get; } | ||||
|     public string? PSN { get; } | ||||
|     public int? ReactorNumber { get; } | ||||
|     public string Zone { get; } | ||||
|     public string? Zone { get; } | ||||
|  | ||||
|     public CommonB(string comment, string layer, int? rdsNumber, string psn, int? reactorNumber, string zone) | ||||
|     public CommonB(string? layer, | ||||
|                    int? rdsNumber, | ||||
|                    string? psn, | ||||
|                    int? reactorNumber, | ||||
|                    string? zone) | ||||
|     { | ||||
|         Comment = comment; | ||||
|         Layer = layer; | ||||
|         RDSNumber = rdsNumber; | ||||
|         PSN = psn; | ||||
| @ -20,4 +24,51 @@ public class CommonB | ||||
|         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? EquipmentType { get; } | ||||
|     public string? MID { get; } | ||||
|     public string? Slot { get; } | ||||
|     public string? LoadLock { get; } | ||||
|     public string? MesEntity { get; } | ||||
|     public string? MID { get; } | ||||
|     public string? Recipe { get; } | ||||
|     public string? Sequence { get; } | ||||
|     public string? Slot { get; } | ||||
|  | ||||
|     [System.Text.Json.Serialization.JsonConstructor] | ||||
|     public Input(string? area, | ||||
|                  string? equipmentType, | ||||
|                  string? loadLock, | ||||
|                  string? mid, | ||||
|                  string? slot, | ||||
|                  string? mesEntity, | ||||
| @ -25,6 +27,7 @@ public class Input | ||||
|  | ||||
|         Area = area; | ||||
|         EquipmentType = equipmentType; | ||||
|         LoadLock = loadLock; | ||||
|         MID = mid; | ||||
|         Slot = slot; | ||||
|         MesEntity = mesEntity; | ||||
| @ -36,6 +39,7 @@ public class Input | ||||
|     { | ||||
|         Area = input.Area; | ||||
|         EquipmentType = input.EquipmentType; | ||||
|         LoadLock = input.LoadLock; | ||||
|         MID = mid; | ||||
|         Slot = input.Slot; | ||||
|         MesEntity = input.MesEntity; | ||||
|  | ||||
| @ -41,7 +41,7 @@ public partial class Job | ||||
|     public DateTime DateTime { get; } | ||||
|     public List<Item> Items { get; } | ||||
|  | ||||
|     public Job(string lsl2SQLConnectionString, string metrologyFileShare, string barcodeHostFileShare, HttpClient httpClient, string mid) | ||||
|     public Job(string iqsSQLConnectionString, string lsl2SQLConnectionString, string metrologyFileShare, string barcodeHostFileShare, HttpClient httpClient, string mid, DateTime enteredDateTimeFilter, DateTime loadSignatureDateTimeFilter) | ||||
|     { | ||||
|         const int zero = 0; | ||||
|         Items = new List<Item>(); | ||||
| @ -49,13 +49,15 @@ public partial class Job | ||||
|             IsAreaSi = false; | ||||
|         else | ||||
|         { | ||||
|             Run[]? runs; | ||||
|             Common common; | ||||
|             CommonB commonB; | ||||
|             string? basicType; | ||||
|             int? reactorNumber; | ||||
|             WorkOrder workOrder; | ||||
|             const string hyphen = "-"; | ||||
|             const string bioRad2 = "BIORAD2"; | ||||
|             const string bioRad3 = "BIORAD3"; | ||||
|             RunDataSheetRoot? runDataSheetRoot; | ||||
|             const string twoAlphaPattern = "^[a-zA-z]{2,3}"; | ||||
|             const string reactorNumberPattern = @"^[0-9]{2}--"; | ||||
|             Input input = JsonSerializer.Deserialize<Input>(mid) ?? throw new Exception(); | ||||
| @ -63,48 +65,68 @@ public partial class Job | ||||
|                 DateTime = DateTime.Now; | ||||
|             else | ||||
|                 DateTime = new DateTime(sequence); | ||||
|             string? jobNames = GetJobNames(input); | ||||
|             const string dep08CEPIEPSILON = "DEP08CEPIEPSILON"; | ||||
|             if (input.EquipmentType == dep08CEPIEPSILON) | ||||
|                 (common, workOrder) = Get(input, httpClient); | ||||
|                 common = ReactorGet(input, httpClient); | ||||
|             else if (!string.IsNullOrEmpty(input.MID) && !string.IsNullOrEmpty(input.MesEntity) && Regex.IsMatch(input.MID, reactorNumberPattern) && input.MesEntity is bioRad2 or bioRad3) | ||||
|                 (common, workOrder) = Get(input, barcodeHostFileShare); | ||||
|                 common = Get(input, barcodeHostFileShare, httpClient); | ||||
|             else | ||||
|             { | ||||
|                 workOrder = GetWorkOrder(input); | ||||
|                 reactorNumber = GetReactorNumber(input); | ||||
|                 WorkOrder workOrder = GetWorkOrder(input); | ||||
|                 if (workOrder.IsWorkOrder || reactorNumber.HasValue) | ||||
|                     common = new(layer: null, | ||||
|                                  psn: null, | ||||
|                                  rdsNumber: null, | ||||
|                                  reactor: null, | ||||
|                                  zone: null, | ||||
|                                  employee: null); | ||||
|                                  employee: null, | ||||
|                                  runDataSheetRoot: null, | ||||
|                                  workOrder: workOrder); | ||||
|                 else if (!string.IsNullOrEmpty(input.MID) && input.MID.Length is 2 or 3 && Regex.IsMatch(input.MID, twoAlphaPattern)) | ||||
|                     common = GetTwoAlphaPattern(metrologyFileShare, input); | ||||
|                 else | ||||
|                     common = Get(input); | ||||
|                     common = Get(input, httpClient); | ||||
|             } | ||||
|             bool isValid = IsValid(common.RDSNumber); | ||||
|             if (isValid) | ||||
|                 commonB = GetWithValidRDS(lsl2SQLConnectionString, common.Layer, common.PSN, common.RDSNumber, common.ReactorNumber, common.Zone); | ||||
|             else if (workOrder.IsWorkOrder || common.RDSNumber.HasValue) | ||||
|                 commonB = Get(lsl2SQLConnectionString, common.Layer, common.PSN, common.ReactorNumber, workOrder.SlotNumber, workOrder.WorkOrderNumber, workOrder.WorkOrderCassette, common.Zone); | ||||
|             if (common.RDSNumber is null || !isValid) | ||||
|                 runDataSheetRoot = common.RunDataSheetRoot; | ||||
|             else | ||||
|                 commonB = new(comment: hyphen, | ||||
|                               layer: hyphen, | ||||
|                               rdsNumber: common.RDSNumber, | ||||
|                               psn: common.PSN, | ||||
|                               reactorNumber: common.ReactorNumber, | ||||
|                               zone: hyphen); | ||||
|             { | ||||
|                 try | ||||
|                 { runDataSheetRoot = GetRunDataSheetRoot(httpClient, common.RDSNumber.Value); } | ||||
|                 catch (Exception) | ||||
|                 { runDataSheetRoot = null; } | ||||
|             } | ||||
|             if (isValid) | ||||
|                 runs = GetWithValidRDS(lsl2SQLConnectionString, enteredDateTimeFilter, loadSignatureDateTimeFilter, common); | ||||
|             else if (common.WorkOrder is null || common.WorkOrder.IsWorkOrder || common.RDSNumber.HasValue) | ||||
|                 runs = Get(lsl2SQLConnectionString, enteredDateTimeFilter, loadSignatureDateTimeFilter, common); | ||||
|             else | ||||
|                 runs = null; | ||||
|             commonB = CommonB.Get(common, runDataSheetRoot, runs); | ||||
|             if (string.IsNullOrEmpty(jobNames) || commonB.RDSNumber is null || commonB.ReactorNumber is null || string.IsNullOrEmpty(commonB.PSN)) | ||||
|                 basicType = hyphen; | ||||
|             else | ||||
|             { | ||||
|                 int? runCount; | ||||
|                 string commandText = GetCommandText(commonB, jobNames); | ||||
|                 try | ||||
|                 { runCount = GetScalar(iqsSQLConnectionString, commandText); } | ||||
|                 catch (Exception) | ||||
|                 { runCount = null; } | ||||
|                 basicType = runCount is null ? hyphen : runCount.ToString(); | ||||
|             } | ||||
|             Qty = "1"; | ||||
|             Status = hyphen; // INFO | ||||
|             CreationUser = hyphen; // ? | ||||
|             LotState = hyphen; // LAYER2 | ||||
|             LastUpdateUser = hyphen; // ? | ||||
|             Equipment = input.MesEntity; // ? | ||||
|             PackageName = hyphen; // WAFER_ID | ||||
|             Qty2 = input.Sequence; // SEQUENCE | ||||
|             RecipeName = input.Recipe; // PPID | ||||
|             BasicType = basicType; // BASIC_TYPE | ||||
|             IsAreaSi = input.Area == "Si"; // N/A | ||||
|             StateModel = input.EquipmentType; // ? | ||||
|             JobName = DateTime.Ticks.ToString(); // ? | ||||
| @ -112,8 +134,8 @@ public partial class Job | ||||
|             SpecName = !string.IsNullOrEmpty(commonB.Layer) ? commonB.Layer : hyphen; // LAYER | ||||
|             ProductName = !string.IsNullOrEmpty(commonB.PSN) ? commonB.PSN : hyphen; // PRODUCT | ||||
|             ProcessSpecName = !string.IsNullOrEmpty(commonB.Zone) ? commonB.Zone : hyphen; // WAFER_POS | ||||
|             BasicType = !string.IsNullOrEmpty(commonB.Comment) ? commonB.Comment : hyphen; // BASIC_TYPE | ||||
|             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 | ||||
|             Items.Add(new Item { Name = "0", Type = "NA", Number = (0 + 1).ToString(), Qty = "1", CarrierName = hyphen }); | ||||
|         } | ||||
| @ -239,8 +261,9 @@ public partial class Job | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     private static Common Get(Input input) | ||||
|     private static Common Get(Input input, HttpClient httpClient) | ||||
|     { | ||||
|         Common result; | ||||
|         string? psn; | ||||
|         string? rds; | ||||
|         int rdsCheck; | ||||
| @ -250,6 +273,7 @@ public partial class Job | ||||
|         string? reactor; | ||||
|         string? employee; | ||||
|         int? reactorNumber; | ||||
|         RunDataSheetRoot? runDataSheetRoot; | ||||
|         string mid = string.IsNullOrEmpty(input.MID) ? string.Empty : input.MID; | ||||
|         if (mid.Length > 2 && mid[0] == '1' && (mid[1] == 'T' || mid[1] == 't')) | ||||
|             mid = mid.Substring(2); | ||||
| @ -259,13 +283,14 @@ public partial class Job | ||||
|         (reactor, rds) = GetReactorAndRDS(input.MID, mid, segments); | ||||
|         rdsNumber = string.IsNullOrEmpty(rds) || !int.TryParse(rds, out rdsCheck) ? null : rdsCheck; | ||||
|         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; | ||||
|             zone = null; | ||||
|             layer = null; | ||||
|             employee = null; | ||||
|             reactorNumber = null; | ||||
|             runDataSheetRoot = null; | ||||
|         } | ||||
|         else | ||||
|         { | ||||
| @ -273,13 +298,17 @@ public partial class Job | ||||
|             reactorNumber = reactorCheck; | ||||
|             (layer, psn) = GetLayerAndPSN(segments); | ||||
|             employee = segments.Length <= 4 ? null : segments[4]; | ||||
|             runDataSheetRoot = GetRunDataSheetRoot(httpClient, rdsNumber.Value); | ||||
|         } | ||||
|         return new(layer: layer, | ||||
|         result = new(layer: layer, | ||||
|                      psn: psn, | ||||
|                      rdsNumber: rdsNumber, | ||||
|                      reactor: reactorNumber, | ||||
|                      zone: zone, | ||||
|                    employee: employee); | ||||
|                      employee: employee, | ||||
|                      runDataSheetRoot: runDataSheetRoot, | ||||
|                      workOrder: null); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     private static string[] GetDirectories(string fileShare) | ||||
| @ -298,6 +327,7 @@ public partial class Job | ||||
|  | ||||
|     private static Common GetTwoAlphaPattern(string metrologyFileShare, Input input) | ||||
|     { | ||||
|         Common result; | ||||
|         string lines; | ||||
|         const int zero = 0; | ||||
|         string? psn = null; | ||||
| @ -337,12 +367,15 @@ public partial class Job | ||||
|                 zone = workMaterialOut.Zone; | ||||
|             break; | ||||
|         } | ||||
|         return new(layer: layer, | ||||
|         result = new(layer: layer, | ||||
|                      psn: psn, | ||||
|                      rdsNumber: rdsNumber, | ||||
|                      reactor: reactor, | ||||
|                      zone: zone, | ||||
|                    employee: null); | ||||
|                      employee: null, | ||||
|                      runDataSheetRoot: null, | ||||
|                      workOrder: null); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     private static List<string> GetFiles(Input input, string barcodeHostFileShare) | ||||
| @ -381,84 +414,107 @@ public partial class Job | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     private static (Common common, WorkOrder workOrder) Get(Input input, HttpClient httpClient) | ||||
|     private static Common ReactorGet(Input input, HttpClient httpClient) | ||||
|     { | ||||
|         int? rds; | ||||
|         string psn; | ||||
|         Common common; | ||||
|         WorkOrder workOrder; | ||||
|         Task<Stream> streamTask; | ||||
|         Task<HttpResponseMessage> httpResponseMessageTask; | ||||
|         string? psn; | ||||
|         Common result; | ||||
|         string mid = string.IsNullOrEmpty(input.MID) ? string.Empty : input.MID; | ||||
|         JsonSerializerOptions jsonSerializerOptions = new() { PropertyNameCaseInsensitive = true }; | ||||
|         int? reactor = mid.Length < 2 || !int.TryParse(mid.Substring(0, 2), out int reactorNumber) ? null : reactorNumber; | ||||
|         httpResponseMessageTask = httpClient.GetAsync($"{httpClient.BaseAddress}/reactors/{reactor}"); | ||||
|         httpResponseMessageTask.Wait(); | ||||
|         if (httpResponseMessageTask.Result.StatusCode != System.Net.HttpStatusCode.OK) | ||||
|             throw new Exception($"Unable to OI <{httpResponseMessageTask.Result.StatusCode}>"); | ||||
|         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) | ||||
|         char? loadLockSide = string.IsNullOrEmpty(input.LoadLock) || input.LoadLock[0] is not 'L' and not 'R' ? null : input.LoadLock[0]; | ||||
|         ReactorRoot? reactorRoot = reactor is null || loadLockSide is null ? null : GetReactorRoot(httpClient, jsonSerializerOptions, reactor); | ||||
|         rds = loadLockSide is null ? null : loadLockSide == 'L' ? reactorRoot?.Reactor?.LoadLockLeftRDS : loadLockSide == 'R' ? reactorRoot?.Reactor?.LoadLockRightRDS : null; | ||||
|         if (reactorRoot?.Reactor is null || reactor != reactorRoot.Reactor.ReactorNo || rds is null) | ||||
|         { | ||||
|             rds = null; | ||||
|             psn = string.Empty; | ||||
|             workOrder = new(null, null, null, null, false); | ||||
|             common = new(layer: null, | ||||
|             psn = null; | ||||
|             result = new(layer: null, | ||||
|                          psn: psn, | ||||
|                          rdsNumber: rds, | ||||
|                          reactor: reactor, | ||||
|                          zone: null, | ||||
|                          employee: null); | ||||
|                          employee: null, | ||||
|                          runDataSheetRoot: null, | ||||
|                          workOrder: null); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             rds = reactorRoot.Reactor.LoadedRDS[0]; | ||||
|             workOrder = new(null, null, null, null, false); | ||||
|             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}>"); | ||||
|             streamTask = httpResponseMessageTask.Result.Content.ReadAsStreamAsync(); | ||||
|             streamTask.Wait(); | ||||
|             if (!streamTask.Result.CanRead) | ||||
|                 throw new NullReferenceException(nameof(streamTask)); | ||||
|             RunDataSheetRoot? runDataSheetRoot = JsonSerializer.Deserialize<RunDataSheetRoot>(streamTask.Result, jsonSerializerOptions); | ||||
|             streamTask.Result.Dispose(); | ||||
|             if (runDataSheetRoot is null || reactor != runDataSheetRoot.RunDataSheet.Reactor) | ||||
|             RunDataSheetRoot? runDataSheetRoot = GetRunDataSheetRoot(httpClient, rds.Value); | ||||
|             if (runDataSheetRoot?.RunDataSheet is null || reactor != runDataSheetRoot.RunDataSheet.Reactor) | ||||
|             { | ||||
|                 psn = string.Empty; | ||||
|                 common = new(layer: null, | ||||
|                 psn = null; | ||||
|                 result = new(layer: null, | ||||
|                              psn: psn, | ||||
|                              rdsNumber: rds, | ||||
|                              reactor: reactor, | ||||
|                              zone: null, | ||||
|                              employee: null); | ||||
|                              employee: null, | ||||
|                              runDataSheetRoot: runDataSheetRoot, | ||||
|                              workOrder: null); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 psn = runDataSheetRoot.RunDataSheet.PSN.ToString(); | ||||
|                 common = new(layer: null, | ||||
|                 result = new(layer: null, | ||||
|                              psn: psn, | ||||
|                              rdsNumber: rds, | ||||
|                              reactor: reactor, | ||||
|                              zone: null, | ||||
|                              employee: null); | ||||
|                              employee: null, | ||||
|                              runDataSheetRoot: runDataSheetRoot, | ||||
|                              workOrder: null); | ||||
|             } | ||||
|         } | ||||
|         return new(common, workOrder); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     private static (Common common, WorkOrder workOrder) Get(Input input, string barcodeHostFileShare) | ||||
|     private static ReactorRoot? GetReactorRoot(HttpClient httpClient, JsonSerializerOptions jsonSerializerOptions, int? reactor) | ||||
|     { | ||||
|         ReactorRoot? result; | ||||
|         try | ||||
|         { | ||||
|             Task<HttpResponseMessage> httpResponseMessageTask = httpClient.GetAsync($"{httpClient.BaseAddress}/reactors/{reactor}"); | ||||
|             httpResponseMessageTask.Wait(); | ||||
|             if (httpResponseMessageTask.Result.StatusCode != System.Net.HttpStatusCode.OK) | ||||
|                 throw new Exception($"Unable to OI <{httpResponseMessageTask.Result.StatusCode}>"); | ||||
|             using Task<Stream> streamTask = httpResponseMessageTask.Result.Content.ReadAsStreamAsync(); | ||||
|             streamTask.Wait(); | ||||
|             result = !streamTask.Result.CanRead ? null : JsonSerializer.Deserialize<ReactorRoot>(streamTask.Result, jsonSerializerOptions); | ||||
|         } | ||||
|         catch (Exception) { result = null; } | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     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; | ||||
|         if (string.IsNullOrEmpty(barcodeHostFileShare) || !Directory.Exists(barcodeHostFileShare)) | ||||
|             throw new Exception($"Unable to access file-share <{barcodeHostFileShare}>"); | ||||
|         int? rds; | ||||
|         long sequence = 0; | ||||
|         WorkOrder workOrder; | ||||
|         WorkOrder? workOrder; | ||||
|         RunDataSheetRoot? runDataSheetRoot; | ||||
|         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; | ||||
|         bool parsed = !string.IsNullOrEmpty(input.Sequence) && long.TryParse(input.Sequence, out sequence); | ||||
| @ -471,35 +527,38 @@ public partial class Job | ||||
|         if (text is null || text.Length < 3) | ||||
|         { | ||||
|             rds = null; | ||||
|             workOrder = new(null, null, null, null, false); | ||||
|             workOrder = null; | ||||
|             runDataSheetRoot = null; | ||||
|         } | ||||
|         else if (!text.Contains('.')) | ||||
|         { | ||||
|             rds = !int.TryParse(text.Substring(2), out int rdsNumber) ? null : rdsNumber; | ||||
|             workOrder = new(null, null, null, null, false); | ||||
|             workOrder = null; | ||||
|             rds = !int.TryParse(text.Substring(2), out int rdsNumber) || IsInvalid(rdsNumber) ? null : rdsNumber; | ||||
|             runDataSheetRoot = rds is null ? null : GetRunDataSheetRoot(httpClient, rds.Value); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             rds = null; | ||||
|             runDataSheetRoot = null; | ||||
|             workOrder = GetWorkOrder(new(input, text.Substring(2))); | ||||
|         } | ||||
|         Common common = new(layer: null, | ||||
|         result = new(layer: null, | ||||
|                      psn: null, | ||||
|                      rdsNumber: rds, | ||||
|                      reactor: reactor, | ||||
|                      zone: null, | ||||
|                             employee: null); | ||||
|         return new(common, workOrder); | ||||
|                      employee: null, | ||||
|                      runDataSheetRoot: runDataSheetRoot, | ||||
|                      workOrder: workOrder); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
| #nullable disable | ||||
|  | ||||
|     private static string GetRunJson(string lsl2SQLConnectionString, string commandText) | ||||
|     private static string GetRunJson(string connectionString, string commandText) | ||||
|     { | ||||
|         StringBuilder result = new(); | ||||
|         try | ||||
|         { | ||||
|             using SqlConnection sqlConnection = new(lsl2SQLConnectionString); | ||||
|             using SqlConnection sqlConnection = new(connectionString); | ||||
|             sqlConnection.Open(); | ||||
|             using SqlCommand sqlCommand = new(commandText, sqlConnection); | ||||
|             SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(CommandBehavior.SequentialAccess); | ||||
| @ -513,7 +572,7 @@ public partial class Job | ||||
|         return result.ToString(); | ||||
|     } | ||||
|  | ||||
|     private static string GetCommandText(int? rds, int? workOrderNumber, int? workOrderCassette, int? slot, int? reactor) | ||||
|     private static string GetCommandText(DateTime enteredDateTimeFilter, DateTime loadSignatureDateTimeFilter, int? rds, int? workOrderNumber, int? workOrderCassette, int? slot, int? reactor) | ||||
|     { // cSpell:disable | ||||
|         List<string> results = new(); | ||||
|         int rdsValue = rds is null ? -1 : rds.Value; | ||||
| @ -540,6 +599,7 @@ public partial class Job | ||||
|         results.Add("       ) zone "); | ||||
|         results.Add(" from lsl2sql.dbo.react_run rr "); | ||||
|         results.Add($" where rr.rds_no = {rdsValue}"); | ||||
|         results.Add($"   and rr.enter_dtm > '{enteredDateTimeFilter:yyyy-MM-dd} 00:00:00.000' "); | ||||
|         results.Add(" union all "); | ||||
|         results.Add(" select "); | ||||
|         results.Add("         rr.rds_no "); | ||||
| @ -589,127 +649,115 @@ public partial class Job | ||||
|         results.Add("   select max(qa.rds_no) "); | ||||
|         results.Add("   from lsl2sql.dbo.react_run qa "); | ||||
|         results.Add("   where qa.load_sig != '' "); | ||||
|         results.Add("       and qa.load_sig_dtm > '2023-05-01 00:00:00.000' "); | ||||
|         results.Add($"       and qa.load_sig_dtm > '{loadSignatureDateTimeFilter:yyyy-MM-dd} 00:00:00.000' "); | ||||
|         results.Add($"       and qa.reactor = {reactorValue}"); | ||||
|         results.Add(" ) "); | ||||
|         results.Add(" for json path "); | ||||
|         return string.Join(Environment.NewLine, results); | ||||
|     } // cSpell:restore | ||||
|  | ||||
|     private static CommonB Get(string lsl2SQLConnectionString, string layer, string psn, int? reactorNumber, int? slotNumber, int? workOrderNumber, int? workOrderCassette, string zone) | ||||
|     private static Run[]? Get(string lsl2SQLConnectionString, DateTime enteredDateTimeFilter, DateTime loadSignatureDateTimeFilter, Common common) | ||||
|     { | ||||
|         int? rdsNumber; | ||||
|         string comment; | ||||
|         const int zero = 0; | ||||
|         const string hyphen = "-"; | ||||
|         string commandText = GetCommandText(rds: null, | ||||
|                                             workOrderNumber: workOrderNumber, | ||||
|                                             workOrderCassette: workOrderCassette, | ||||
|                                             slot: slotNumber, | ||||
|                                             reactor: reactorNumber); | ||||
|         Run[]? results; | ||||
|         string commandText = GetCommandText(enteredDateTimeFilter, | ||||
|                                             loadSignatureDateTimeFilter, | ||||
|                                             rds: null, | ||||
|                                             workOrderNumber: common.WorkOrder?.WorkOrderNumber, | ||||
|                                             workOrderCassette: common.WorkOrder?.WorkOrderCassette, | ||||
|                                             slot: common.WorkOrder?.SlotNumber, | ||||
|                                             reactor: common.ReactorNumber); | ||||
|         string json = GetRunJson(lsl2SQLConnectionString, commandText); | ||||
|         if (string.IsNullOrEmpty(json)) | ||||
|         { | ||||
|             rdsNumber = null; | ||||
|             comment = hyphen; | ||||
|             psn = string.Empty; | ||||
|             zone = string.Empty; | ||||
|         } | ||||
|             results = null; | ||||
|         else | ||||
|         { | ||||
|             Run[] runs; | ||||
|             try | ||||
|             { runs = JsonSerializer.Deserialize<Run[]>(json); } | ||||
|             { results = JsonSerializer.Deserialize<Run[]>(json); } | ||||
|             catch (Exception) | ||||
|             { runs = Array.Empty<Run>(); } | ||||
|             if (runs.Length == 0) | ||||
|             { | ||||
|                 rdsNumber = null; | ||||
|                 comment = hyphen; | ||||
|                 psn = string.Empty; | ||||
|                 zone = string.Empty; | ||||
|             { results = Array.Empty<Run>(); } | ||||
|         } | ||||
|             else | ||||
|             { | ||||
|                 rdsNumber = runs[zero].RdsNo; | ||||
|                 if (string.IsNullOrEmpty(psn)) | ||||
|                     psn = runs[zero].PSN; | ||||
|                 if (string.IsNullOrEmpty(zone)) | ||||
|                     zone = runs[zero].Zone; | ||||
|                 if (string.IsNullOrEmpty(layer)) | ||||
|                     layer = runs[zero].EpiLayer; | ||||
|                 reactorNumber = runs[zero].Reactor; | ||||
|                 string loadLockSide = runs[zero].LoadLockSide; | ||||
|                 string loadLockSideFull = loadLockSide switch | ||||
|                 { | ||||
|                     "L" => "Left", | ||||
|                     "R" => "Right", | ||||
|                     _ => loadLockSide, | ||||
|                 }; | ||||
|                 comment = $"{loadLockSideFull} - {runs[zero].ReactorType}"; | ||||
|             } | ||||
|         } | ||||
|         return new(comment: comment, | ||||
|                    layer: layer, | ||||
|                    rdsNumber: rdsNumber, | ||||
|                    psn: psn, | ||||
|                    reactorNumber: reactorNumber, | ||||
|                    zone: zone); | ||||
|         return results; | ||||
|     } | ||||
|  | ||||
|     private static CommonB GetWithValidRDS(string lsl2SQLConnectionString, string layer, string psn, int? rdsNumber, int? reactorNumber, string zone) | ||||
|     private static Run[]? GetWithValidRDS(string lsl2SQLConnectionString, DateTime enteredDateTimeFilter, DateTime loadSignatureDateTimeFilter, Common common) | ||||
|     { | ||||
|         string comment; | ||||
|         const int zero = 0; | ||||
|         const string hyphen = "-"; | ||||
|         string commandText = GetCommandText(rds: rdsNumber, | ||||
|         Run[]? results; | ||||
|         string commandText = GetCommandText(enteredDateTimeFilter, | ||||
|                                             loadSignatureDateTimeFilter, | ||||
|                                             rds: common.RDSNumber, | ||||
|                                             workOrderNumber: null, | ||||
|                                             workOrderCassette: null, | ||||
|                                             slot: null, | ||||
|                                             reactor: null); | ||||
|         string json = GetRunJson(lsl2SQLConnectionString, commandText); | ||||
|         if (string.IsNullOrEmpty(json)) | ||||
|         { | ||||
|             comment = hyphen; | ||||
|             zone = string.Empty; | ||||
|         } | ||||
|             results = null; | ||||
|         else | ||||
|         { | ||||
|             Run[] runs; | ||||
|             try | ||||
|             { runs = JsonSerializer.Deserialize<Run[]>(json); } | ||||
|             { results = JsonSerializer.Deserialize<Run[]>(json); } | ||||
|             catch (Exception) | ||||
|             { runs = Array.Empty<Run>(); } | ||||
|             if (runs.Length == 0) | ||||
|             { | ||||
|                 comment = hyphen; | ||||
|                 zone = string.Empty; | ||||
|             { results = Array.Empty<Run>(); } | ||||
|         } | ||||
|             else | ||||
|         return results; | ||||
|     } | ||||
|  | ||||
|     private static string? GetJobNames(Input input) => | ||||
|         input.EquipmentType switch | ||||
|         { | ||||
|                 if (string.IsNullOrEmpty(psn)) | ||||
|                     psn = runs[zero].PSN; | ||||
|                 if (string.IsNullOrEmpty(zone)) | ||||
|                     zone = runs[zero].Zone; | ||||
|                 if (string.IsNullOrEmpty(layer)) | ||||
|                     layer = runs[zero].EpiLayer; | ||||
|                 reactorNumber = runs[zero].Reactor is null ? reactorNumber : runs[zero].Reactor.Value; | ||||
|                 string loadLockSide = runs[zero].LoadLockSide; | ||||
|                 string loadLockSideFull = loadLockSide switch | ||||
|                 { | ||||
|                     "L" => "Left", | ||||
|                     "R" => "Right", | ||||
|                     _ => loadLockSide, | ||||
|             "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, | ||||
|         }; | ||||
|                 comment = $"{loadLockSideFull} - {runs[zero].ReactorType}"; | ||||
|  | ||||
|     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 new(comment: comment, | ||||
|                    layer: layer, | ||||
|                    rdsNumber: rdsNumber, | ||||
|                    psn: psn, | ||||
|                    reactorNumber: reactorNumber, | ||||
|                    zone: zone); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -17,19 +17,21 @@ internal partial class Main | ||||
|     private static object _IfxTransport; | ||||
|     private static string _CellInstanceName; | ||||
|     private static string _MetrologyFileShare; | ||||
|     private static string _IQSConnectionString; | ||||
|     private static string _BarcodeHostFileShare; | ||||
|     private static string _LSL2SQLConnectionString; | ||||
|     private static string _TibcoParameterSubjectPrefix; | ||||
|     private static HttpClient _HttpClient; | ||||
|     private static FileConnectorConfiguration _FileConnectorConfiguration; | ||||
|  | ||||
|     internal static void Initialize(ISMTP smtp, string cellInstanceName, FileConnectorConfiguration fileConnectorConfiguration, string lsl2SQLConnectionString, string metrologyFileShare, string barcodeHostFileShare, HttpClient httpClient) | ||||
|     internal static void Initialize(ISMTP smtp, string cellInstanceName, FileConnectorConfiguration fileConnectorConfiguration, string iqsConnectionString, string lsl2SQLConnectionString, string metrologyFileShare, string barcodeHostFileShare, HttpClient httpClient) | ||||
|     { | ||||
|         _SMTP = smtp; | ||||
|         _IfxTransport = null; | ||||
|         _HttpClient = httpClient; | ||||
|         _CellInstanceName = cellInstanceName; | ||||
|         _MetrologyFileShare = metrologyFileShare; | ||||
|         _IQSConnectionString = iqsConnectionString; | ||||
|         _TibcoParameterSubjectPrefix = string.Empty; | ||||
|         _BarcodeHostFileShare = barcodeHostFileShare; | ||||
|         _LSL2SQLConnectionString = lsl2SQLConnectionString; | ||||
| @ -167,13 +169,12 @@ internal partial class Main | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             string mid = string.Empty; | ||||
|             string[] sourceFiles = null; | ||||
|             DateTime dateTime = DateTime.Now; | ||||
|             string pdsfFileLogistics = string.Empty; | ||||
|             IfxDoc envelopeDocument = ifxEnvelope.ExtractDocument(); | ||||
|             CultureInfo cultureInfo = new("en-US"); | ||||
|             string pdsfFileLogistics = string.Empty; | ||||
|             Calendar calendar = cultureInfo.Calendar; | ||||
|             IfxDoc envelopeDocument = ifxEnvelope.ExtractDocument(); | ||||
|             string weekOfYear = calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); | ||||
|             string weekOfYearSegment = string.Concat(@"\", dateTime.ToString("yyyy"), "_Week_", weekOfYear, @"\", dateTime.ToString("yyyy-MM-dd")); | ||||
|             if (!string.IsNullOrEmpty(_FileConnectorConfiguration.SourceFileLocation)) | ||||
| @ -188,8 +189,10 @@ internal partial class Main | ||||
|             } | ||||
|             if (!subject.Contains(_TibcoParameterSubjectPrefix)) | ||||
|                 throw new Exception("Invalid Subject"); | ||||
|             mid = GetJobsMID(envelopeDocument); | ||||
|             Job job = new(_LSL2SQLConnectionString, _MetrologyFileShare, _BarcodeHostFileShare, _HttpClient, mid); | ||||
|             string mid = GetJobsMID(envelopeDocument); | ||||
|             DateTime enteredDateTimeFilter = dateTime.AddDays(-356); | ||||
|             DateTime loadSignatureDateTimeFilter = dateTime.AddDays(-4); | ||||
|             Job job = new(_IQSConnectionString, _LSL2SQLConnectionString, _MetrologyFileShare, _BarcodeHostFileShare, _HttpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter); | ||||
|             if (job.IsAreaSi) | ||||
|             { | ||||
|                 IfxDoc sendReply = GetJobsReply(job); | ||||
|  | ||||
| @ -6,13 +6,15 @@ public class Reactor | ||||
| { | ||||
|  | ||||
|     [JsonConstructor] | ||||
|     public Reactor(int reactorNo, int[] loadedRDS) | ||||
|     public Reactor(int reactorNo, int? loadLockLeftRDS, int? loadLockRightRDS) | ||||
|     { | ||||
|         LoadLockLeftRDS = loadLockLeftRDS; | ||||
|         LoadLockRightRDS = loadLockRightRDS; | ||||
|         ReactorNo = reactorNo; | ||||
|         LoadedRDS = loadedRDS; | ||||
|     } | ||||
|  | ||||
|     [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; | ||||
|  | ||||
| #nullable enable | ||||
|  | ||||
| public class ReactorRoot | ||||
| { | ||||
|  | ||||
|     [JsonConstructor] | ||||
|     public ReactorRoot(Reactor reactor) => | ||||
|     public ReactorRoot(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")] | ||||
|     public string PSN { get; set; } | ||||
|  | ||||
|     [JsonPropertyName("load_lock_side")] | ||||
|     public string LoadLockSide { get; set; } | ||||
|  | ||||
|     [JsonPropertyName("reactor_type")] | ||||
|     public string ReactorType { get; set; } | ||||
|  | ||||
|     [JsonPropertyName("recipe_name")] | ||||
|     public string RecipeName { get; set; } | ||||
|  | ||||
|  | ||||
| @ -6,13 +6,23 @@ public class RunDataSheet | ||||
| { | ||||
|  | ||||
|     [JsonConstructor] | ||||
|     public RunDataSheet(int psn, int reactor) | ||||
|     public RunDataSheet(string loadLockSide, | ||||
|                         int number, | ||||
|                         int psn, | ||||
|                         int reactor, | ||||
|                         string reactorType) | ||||
|     { | ||||
|         PSN = psn; | ||||
|         Number = number; | ||||
|         LoadLockSide = loadLockSide; | ||||
|         Reactor = reactor; | ||||
|         ReactorType = reactorType; | ||||
|     } | ||||
|  | ||||
|     [JsonPropertyName("keyId")] public int Number { get; } // { init; get; } | ||||
|     [JsonPropertyName("loadLockSide")] public string LoadLockSide { get; } // { init; get; } | ||||
|     [JsonPropertyName("PSN")] public int PSN { get; } // { init; get; } | ||||
|     [JsonPropertyName("reactor")] public int Reactor { get; } // { init; get; } | ||||
|     [JsonPropertyName("reactorType")] public string ReactorType { get; } // { init; get; } | ||||
|  | ||||
| } | ||||
| @ -2,13 +2,16 @@ using System.Text.Json.Serialization; | ||||
|  | ||||
| namespace Adaptation.FileHandlers.TIBCO.Transport; | ||||
|  | ||||
| #nullable enable | ||||
|  | ||||
| public class RunDataSheetRoot | ||||
| { | ||||
|  | ||||
|     [JsonConstructor] | ||||
|     public RunDataSheetRoot(RunDataSheet runDataSheet) => | ||||
|     public RunDataSheetRoot(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.Linq; | ||||
| using System.Text.Json; | ||||
| using System.Text.Json.Serialization; | ||||
|  | ||||
| namespace Adaptation.FileHandlers.txt; | ||||
|  | ||||
| public class Description : IDescription, Shared.Properties.IDescription | ||||
| { | ||||
|  | ||||
|     public int Test { get; set; } | ||||
|     public int Count { get; set; } | ||||
|     public int Index { get; set; } | ||||
|     [JsonPropertyName("EventId")] public int Test { get; set; } | ||||
|     [JsonPropertyName("Count")] public int Count { get; set; } | ||||
|     [JsonPropertyName("Index")] public int Index { get; set; } | ||||
|     // | ||||
|     public string EventName { get; set; } | ||||
|     public string NullData { get; set; } | ||||
|     public string JobID { get; set; } | ||||
|     public string Sequence { get; set; } | ||||
|     public string MesEntity { get; set; } | ||||
|     [JsonPropertyName("MesEntity")] public string MesEntity { get; set; } | ||||
|     public string ReportFullPath { get; set; } | ||||
|     public string ProcessJobID { get; set; } | ||||
|     public string MID { get; set; } | ||||
|     // | ||||
|     public string Date { get; set; } | ||||
|     public string Employee { get; set; } | ||||
|     public string Lot { get; set; } | ||||
|     public string PSN { get; set; } | ||||
|     public string Reactor { get; set; } | ||||
|     [JsonPropertyName("Date")] public string Date { get; set; } | ||||
|     [JsonPropertyName("Employee")] public string Employee { get; set; } | ||||
|     [JsonPropertyName("Lot")] public string Lot { get; set; } | ||||
|     [JsonPropertyName("PSN")] public string PSN { get; set; } | ||||
|     [JsonPropertyName("Reactor")] public string Reactor { get; set; } | ||||
|     public string Recipe { get; set; } | ||||
|     [JsonPropertyName("IndexOf")] public string IndexOf { get; set; } | ||||
|     [JsonPropertyName("AttemptCounter")] public string AttemptCounter { get; set; } | ||||
|     // | ||||
|     public string Grade { get; set; } | ||||
|     [JsonPropertyName("Grade")] public string Grade { get; set; } | ||||
|     public string HeaderUniqueId { get; set; } | ||||
|     public string RDS { get; set; } | ||||
|     public string Session { get; set; } | ||||
|     public string Side { get; set; } | ||||
|     public string SrcDest { get; set; } | ||||
|     [JsonPropertyName("RDS")] public string RDS { get; set; } | ||||
|     [JsonPropertyName("Session")] public string Session { get; set; } | ||||
|     [JsonPropertyName("Side")] public string Side { get; set; } | ||||
|     [JsonPropertyName("SrcDest")] public string SrcDest { get; set; } | ||||
|     public string UniqueId { get; set; } | ||||
|     public string WaferID { get; set; } | ||||
|     [JsonPropertyName("WaferID")] public string WaferID { get; set; } | ||||
|     // | ||||
|     public string DcnAllMax { get; set; } | ||||
|     public string DcnAllMean { get; set; } | ||||
|     public string DcnAllMin { get; set; } | ||||
|     public string DcnAllStdDev { get; set; } | ||||
|     public string DcnAreaCountMax { get; set; } | ||||
|     public string DcnAreaCountMean { get; set; } | ||||
|     public string DcnAreaCountMin { get; set; } | ||||
|     public string DcnAreaCountStdDev { get; set; } | ||||
|     public string DcnAreaMax { get; set; } | ||||
|     public string DcnAreaMean { get; set; } | ||||
|     public string DcnAreaMin { get; set; } | ||||
|     public string DcnAreaStdDev { get; set; } | ||||
|     public string DcnBin1Max { get; set; } | ||||
|     public string DcnBin1Mean { get; set; } | ||||
|     public string DcnBin1Min { get; set; } | ||||
|     public string DcnBin1StdDev { get; set; } | ||||
|     public string DcnBin2Max { get; set; } | ||||
|     public string DcnBin2Mean { get; set; } | ||||
|     public string DcnBin2Min { get; set; } | ||||
|     public string DcnBin2StdDev { get; set; } | ||||
|     public string DcnBin3Max { get; set; } | ||||
|     public string DcnBin3Mean { get; set; } | ||||
|     public string DcnBin3Min { get; set; } | ||||
|     public string DcnBin3StdDev { get; set; } | ||||
|     public string DcnBin4Max { get; set; } | ||||
|     public string DcnBin4Mean { get; set; } | ||||
|     public string DcnBin4Min { get; set; } | ||||
|     public string DcnBin4StdDev { get; set; } | ||||
|     public string DcnBin5Max { get; set; } | ||||
|     public string DcnBin5Mean { get; set; } | ||||
|     public string DcnBin5Min { get; set; } | ||||
|     public string DcnBin5StdDev { get; set; } | ||||
|     public string DcnBin6Max { get; set; } | ||||
|     public string DcnBin6Mean { get; set; } | ||||
|     public string DcnBin6Min { get; set; } | ||||
|     public string DcnBin6StdDev { get; set; } | ||||
|     public string DcnBin7Max { get; set; } | ||||
|     public string DcnBin7Mean { get; set; } | ||||
|     public string DcnBin7Min { get; set; } | ||||
|     public string DcnBin7StdDev { get; set; } | ||||
|     public string DcnBin8Max { get; set; } | ||||
|     public string DcnBin8Mean { get; set; } | ||||
|     public string DcnBin8Min { get; set; } | ||||
|     public string DcnBin8StdDev { get; set; } | ||||
|     public string DcnHazeAvgMax { get; set; } | ||||
|     public string DcnHazeAvgMean { get; set; } | ||||
|     public string DcnHazeAvgMin { get; set; } | ||||
|     public string DcnHazeAvgStdDev { get; set; } | ||||
|     public string DcnHazeMedianMax { get; set; } | ||||
|     public string DcnHazeMedianMean { get; set; } | ||||
|     public string DcnHazeMedianMin { get; set; } | ||||
|     public string DcnHazeMedianStdDev { get; set; } | ||||
|     public string DcnHazeStdDevMax { get; set; } | ||||
|     public string DcnHazeStdDevMean { get; set; } | ||||
|     public string DcnHazeStdDevMin { get; set; } | ||||
|     public string DcnHazeStdDevStdDev { get; set; } | ||||
|     public string DcnLpdESMax { get; set; } | ||||
|     public string DcnLpdESMean { get; set; } | ||||
|     public string DcnLpdESMin { get; set; } | ||||
|     public string DcnLpdESStdDev { get; set; } | ||||
|     public string DcnLpdMax { get; set; } | ||||
|     public string DcnLpdMean { get; set; } | ||||
|     public string DcnLpdMin { get; set; } | ||||
|     public string DcnLpdNMax { get; set; } | ||||
|     public string DcnLpdNMean { get; set; } | ||||
|     public string DcnLpdNMin { get; set; } | ||||
|     public string DcnLpdNStdDev { get; set; } | ||||
|     public string DcnLpdStdDev { get; set; } | ||||
|     public string DcnMicroScrMax { get; set; } | ||||
|     public string DcnMicroScrMean { get; set; } | ||||
|     public string DcnMicroScrMin { get; set; } | ||||
|     public string DcnMicroScrStdDev { get; set; } | ||||
|     public string DcnScrMax { get; set; } | ||||
|     public string DcnScrMean { get; set; } | ||||
|     public string DcnScrMin { get; set; } | ||||
|     public string DcnScrStdDev { get; set; } | ||||
|     public string DcnSlipMax { get; set; } | ||||
|     public string DcnSlipMean { get; set; } | ||||
|     public string DcnSlipMin { get; set; } | ||||
|     public string DcnSlipStdDev { get; set; } | ||||
|     public string DnnAllMax { get; set; } | ||||
|     public string DnnAllMean { get; set; } | ||||
|     public string DnnAllMin { get; set; } | ||||
|     public string DnnAllStdDev { get; set; } | ||||
|     public string DnnAreaCountMax { get; set; } | ||||
|     public string DnnAreaCountMean { get; set; } | ||||
|     public string DnnAreaCountMin { get; set; } | ||||
|     public string DnnAreaCountStdDev { get; set; } | ||||
|     public string DnnAreaMax { get; set; } | ||||
|     public string DnnAreaMean { get; set; } | ||||
|     public string DnnAreaMin { get; set; } | ||||
|     public string DnnAreaStdDev { get; set; } | ||||
|     public string DnnBin1Max { get; set; } | ||||
|     public string DnnBin1Mean { get; set; } | ||||
|     public string DnnBin1Min { get; set; } | ||||
|     public string DnnBin1StdDev { get; set; } | ||||
|     public string DnnBin2Max { get; set; } | ||||
|     public string DnnBin2Mean { get; set; } | ||||
|     public string DnnBin2Min { get; set; } | ||||
|     public string DnnBin2StdDev { get; set; } | ||||
|     public string DnnBin3Max { get; set; } | ||||
|     public string DnnBin3Mean { get; set; } | ||||
|     public string DnnBin3Min { get; set; } | ||||
|     public string DnnBin3StdDev { get; set; } | ||||
|     public string DnnBin4Max { get; set; } | ||||
|     public string DnnBin4Mean { get; set; } | ||||
|     public string DnnBin4Min { get; set; } | ||||
|     public string DnnBin4StdDev { get; set; } | ||||
|     public string DnnBin5Max { get; set; } | ||||
|     public string DnnBin5Mean { get; set; } | ||||
|     public string DnnBin5Min { get; set; } | ||||
|     public string DnnBin5StdDev { get; set; } | ||||
|     public string DnnBin6Max { get; set; } | ||||
|     public string DnnBin6Mean { get; set; } | ||||
|     public string DnnBin6Min { get; set; } | ||||
|     public string DnnBin6StdDev { get; set; } | ||||
|     public string DnnBin7Max { get; set; } | ||||
|     public string DnnBin7Mean { get; set; } | ||||
|     public string DnnBin7Min { get; set; } | ||||
|     public string DnnBin7StdDev { get; set; } | ||||
|     public string DnnBin8Max { get; set; } | ||||
|     public string DnnBin8Mean { get; set; } | ||||
|     public string DnnBin8Min { get; set; } | ||||
|     public string DnnBin8StdDev { get; set; } | ||||
|     public string DnnHazeAvgMax { get; set; } | ||||
|     public string DnnHazeAvgMean { get; set; } | ||||
|     public string DnnHazeAvgMin { get; set; } | ||||
|     public string DnnHazeAvgStdDev { get; set; } | ||||
|     public string DnnHazeMedianMax { get; set; } | ||||
|     public string DnnHazeMedianMean { get; set; } | ||||
|     public string DnnHazeMedianMin { get; set; } | ||||
|     public string DnnHazeMedianStdDev { get; set; } | ||||
|     public string DnnHazeStdDevMax { get; set; } | ||||
|     public string DnnHazeStdDevMean { get; set; } | ||||
|     public string DnnHazeStdDevMin { get; set; } | ||||
|     public string DnnHazeStdDevStdDev { get; set; } | ||||
|     public string DnnLpdESMax { get; set; } | ||||
|     public string DnnLpdESMean { get; set; } | ||||
|     public string DnnLpdESMin { get; set; } | ||||
|     public string DnnLpdESStdDev { get; set; } | ||||
|     public string DnnLpdMax { get; set; } | ||||
|     public string DnnLpdMean { get; set; } | ||||
|     public string DnnLpdMin { get; set; } | ||||
|     public string DnnLpdNMax { get; set; } | ||||
|     public string DnnLpdNMean { get; set; } | ||||
|     public string DnnLpdNMin { get; set; } | ||||
|     public string DnnLpdNStdDev { get; set; } | ||||
|     public string DnnLpdStdDev { get; set; } | ||||
|     public string DnnMicroScrMax { get; set; } | ||||
|     public string DnnMicroScrMean { get; set; } | ||||
|     public string DnnMicroScrMin { get; set; } | ||||
|     public string DnnMicroScrStdDev { get; set; } | ||||
|     public string DnnScrMax { get; set; } | ||||
|     public string DnnScrMean { get; set; } | ||||
|     public string DnnScrMin { get; set; } | ||||
|     public string DnnScrStdDev { get; set; } | ||||
|     public string DnnSlipMax { get; set; } | ||||
|     public string DnnSlipMean { get; set; } | ||||
|     public string DnnSlipMin { get; set; } | ||||
|     public string DnnSlipStdDev { get; set; } | ||||
|     public string DwnAllMax { get; set; } | ||||
|     public string DwnAllMean { get; set; } | ||||
|     public string DwnAllMin { get; set; } | ||||
|     public string DwnAllStdDev { get; set; } | ||||
|     public string DwnAreaCountMax { get; set; } | ||||
|     public string DwnAreaCountMean { get; set; } | ||||
|     public string DwnAreaCountMin { get; set; } | ||||
|     public string DwnAreaCountStdDev { get; set; } | ||||
|     public string DwnAreaMax { get; set; } | ||||
|     public string DwnAreaMean { get; set; } | ||||
|     public string DwnAreaMin { get; set; } | ||||
|     public string DwnAreaStdDev { get; set; } | ||||
|     public string DwnBin1Max { get; set; } | ||||
|     public string DwnBin1Mean { get; set; } | ||||
|     public string DwnBin1Min { get; set; } | ||||
|     public string DwnBin1StdDev { get; set; } | ||||
|     public string DwnBin2Max { get; set; } | ||||
|     public string DwnBin2Mean { get; set; } | ||||
|     public string DwnBin2Min { get; set; } | ||||
|     public string DwnBin2StdDev { get; set; } | ||||
|     public string DwnBin3Max { get; set; } | ||||
|     public string DwnBin3Mean { get; set; } | ||||
|     public string DwnBin3Min { get; set; } | ||||
|     public string DwnBin3StdDev { get; set; } | ||||
|     public string DwnBin4Max { get; set; } | ||||
|     public string DwnBin4Mean { get; set; } | ||||
|     public string DwnBin4Min { get; set; } | ||||
|     public string DwnBin4StdDev { get; set; } | ||||
|     public string DwnBin5Max { get; set; } | ||||
|     public string DwnBin5Mean { get; set; } | ||||
|     public string DwnBin5Min { get; set; } | ||||
|     public string DwnBin5StdDev { get; set; } | ||||
|     public string DwnBin6Max { get; set; } | ||||
|     public string DwnBin6Mean { get; set; } | ||||
|     public string DwnBin6Min { get; set; } | ||||
|     public string DwnBin6StdDev { get; set; } | ||||
|     public string DwnBin7Max { get; set; } | ||||
|     public string DwnBin7Mean { get; set; } | ||||
|     public string DwnBin7Min { get; set; } | ||||
|     public string DwnBin7StdDev { get; set; } | ||||
|     public string DwnBin8Max { get; set; } | ||||
|     public string DwnBin8Mean { get; set; } | ||||
|     public string DwnBin8Min { get; set; } | ||||
|     public string DwnBin8StdDev { get; set; } | ||||
|     public string DwnHazeAvgMax { get; set; } | ||||
|     public string DwnHazeAvgMean { get; set; } | ||||
|     public string DwnHazeAvgMin { get; set; } | ||||
|     public string DwnHazeAvgStdDev { get; set; } | ||||
|     public string DwnHazeMedianMax { get; set; } | ||||
|     public string DwnHazeMedianMean { get; set; } | ||||
|     public string DwnHazeMedianMin { get; set; } | ||||
|     public string DwnHazeMedianStdDev { get; set; } | ||||
|     public string DwnHazeStdDevMax { get; set; } | ||||
|     public string DwnHazeStdDevMean { get; set; } | ||||
|     public string DwnHazeStdDevMin { get; set; } | ||||
|     public string DwnHazeStdDevStdDev { get; set; } | ||||
|     public string DwnLpdESMax { get; set; } | ||||
|     public string DwnLpdESMean { get; set; } | ||||
|     public string DwnLpdESMin { get; set; } | ||||
|     public string DwnLpdESStdDev { get; set; } | ||||
|     public string DwnLpdMax { get; set; } | ||||
|     public string DwnLpdMean { get; set; } | ||||
|     public string DwnLpdMin { get; set; } | ||||
|     public string DwnLpdNMax { get; set; } | ||||
|     public string DwnLpdNMean { get; set; } | ||||
|     public string DwnLpdNMin { get; set; } | ||||
|     public string DwnLpdNStdDev { get; set; } | ||||
|     public string DwnLpdStdDev { get; set; } | ||||
|     public string DwnMicroScrMax { get; set; } | ||||
|     public string DwnMicroScrMean { get; set; } | ||||
|     public string DwnMicroScrMin { get; set; } | ||||
|     public string DwnMicroScrStdDev { get; set; } | ||||
|     public string DwnScrMax { get; set; } | ||||
|     public string DwnScrMean { get; set; } | ||||
|     public string DwnScrMin { get; set; } | ||||
|     public string DwnScrStdDev { get; set; } | ||||
|     public string DwnSlipMax { get; set; } | ||||
|     public string DwnSlipMean { get; set; } | ||||
|     public string DwnSlipMin { get; set; } | ||||
|     public string DwnSlipStdDev { get; set; } | ||||
|     public string DcnAll { get; set; } | ||||
|     public string DcnArea { get; set; } | ||||
|     public string DcnAreaCount { get; set; } | ||||
|     public string DcnBin1 { get; set; } | ||||
|     public string DcnBin2 { get; set; } | ||||
|     public string DcnBin3 { get; set; } | ||||
|     public string DcnBin4 { get; set; } | ||||
|     public string DcnBin5 { get; set; } | ||||
|     public string DcnBin6 { get; set; } | ||||
|     public string DcnBin7 { get; set; } | ||||
|     public string DcnBin8 { get; set; } | ||||
|     public string DcnHazeAvg { get; set; } | ||||
|     public string DcnHazeMedian { get; set; } | ||||
|     public string DcnHazeStdDev { get; set; } | ||||
|     public string DcnLpd { get; set; } | ||||
|     public string DcnLpdES { get; set; } | ||||
|     public string DcnLpdN { get; set; } | ||||
|     public string DcnMicroScr { get; set; } | ||||
|     public string DcnScr { get; set; } | ||||
|     public string DcnSlip { get; set; } | ||||
|     public string DnnAll { get; set; } | ||||
|     public string DnnArea { get; set; } | ||||
|     public string DnnAreaCount { get; set; } | ||||
|     public string DnnBin1 { get; set; } | ||||
|     public string DnnBin2 { get; set; } | ||||
|     public string DnnBin3 { get; set; } | ||||
|     public string DnnBin4 { get; set; } | ||||
|     public string DnnBin5 { get; set; } | ||||
|     public string DnnBin6 { get; set; } | ||||
|     public string DnnBin7 { get; set; } | ||||
|     public string DnnBin8 { get; set; } | ||||
|     public string DnnHazeAvg { get; set; } | ||||
|     public string DnnHazeMedian { get; set; } | ||||
|     public string DnnHazeStdDev { get; set; } | ||||
|     public string DnnLpd { get; set; } | ||||
|     public string DnnLpdES { get; set; } | ||||
|     public string DnnLpdN { get; set; } | ||||
|     public string DnnMicroScr { get; set; } | ||||
|     public string DnnScr { get; set; } | ||||
|     public string DnnSlip { get; set; } | ||||
|     public string DwnAll { get; set; } | ||||
|     public string DwnArea { get; set; } | ||||
|     public string DwnAreaCount { get; set; } | ||||
|     public string DwnBin1 { get; set; } | ||||
|     public string DwnBin2 { get; set; } | ||||
|     public string DwnBin3 { get; set; } | ||||
|     public string DwnBin4 { get; set; } | ||||
|     public string DwnBin5 { get; set; } | ||||
|     public string DwnBin6 { get; set; } | ||||
|     public string DwnBin7 { get; set; } | ||||
|     public string DwnBin8 { get; set; } | ||||
|     public string DwnHazeAvg { get; set; } | ||||
|     public string DwnHazeMedian { get; set; } | ||||
|     public string DwnHazeStdDev { get; set; } | ||||
|     public string DwnLpd { get; set; } | ||||
|     public string DwnLpdES { get; set; } | ||||
|     public string DwnLpdN { get; set; } | ||||
|     public string DwnMicroScr { get; set; } | ||||
|     public string DwnScr { get; set; } | ||||
|     public string DwnSlip { get; set; } | ||||
|     [JsonPropertyName("DcnAllMax")] public string DcnAllMax { get; set; } | ||||
|     [JsonPropertyName("DcnAllMean")] public string DcnAllMean { get; set; } | ||||
|     [JsonPropertyName("DcnAllMin")] public string DcnAllMin { get; set; } | ||||
|     [JsonPropertyName("DcnAllStdDev")] public string DcnAllStdDev { get; set; } | ||||
|     [JsonPropertyName("DcnAreaCountMax")] public string DcnAreaCountMax { get; set; } | ||||
|     [JsonPropertyName("DcnAreaCountMean")] public string DcnAreaCountMean { get; set; } | ||||
|     [JsonPropertyName("DcnAreaCountMin")] public string DcnAreaCountMin { get; set; } | ||||
|     [JsonPropertyName("DcnAreaCountStdDev")] public string DcnAreaCountStdDev { get; set; } | ||||
|     [JsonPropertyName("DcnAreaMax")] public string DcnAreaMax { get; set; } | ||||
|     [JsonPropertyName("DcnAreaMean")] public string DcnAreaMean { get; set; } | ||||
|     [JsonPropertyName("DcnAreaMin")] public string DcnAreaMin { get; set; } | ||||
|     [JsonPropertyName("DcnAreaStdDev")] public string DcnAreaStdDev { get; set; } | ||||
|     [JsonPropertyName("DcnBin1Max")] public string DcnBin1Max { get; set; } | ||||
|     [JsonPropertyName("DcnBin1Mean")] public string DcnBin1Mean { get; set; } | ||||
|     [JsonPropertyName("DcnBin1Min")] public string DcnBin1Min { get; set; } | ||||
|     [JsonPropertyName("DcnBin1StdDev")] public string DcnBin1StdDev { get; set; } | ||||
|     [JsonPropertyName("DcnBin2Max")] public string DcnBin2Max { get; set; } | ||||
|     [JsonPropertyName("DcnBin2Mean")] public string DcnBin2Mean { get; set; } | ||||
|     [JsonPropertyName("DcnBin2Min")] public string DcnBin2Min { get; set; } | ||||
|     [JsonPropertyName("DcnBin2StdDev")] public string DcnBin2StdDev { get; set; } | ||||
|     [JsonPropertyName("DcnBin3Max")] public string DcnBin3Max { get; set; } | ||||
|     [JsonPropertyName("DcnBin3Mean")] public string DcnBin3Mean { get; set; } | ||||
|     [JsonPropertyName("DcnBin3Min")] public string DcnBin3Min { get; set; } | ||||
|     [JsonPropertyName("DcnBin3StdDev")] public string DcnBin3StdDev { get; set; } | ||||
|     [JsonPropertyName("DcnBin4Max")] public string DcnBin4Max { get; set; } | ||||
|     [JsonPropertyName("DcnBin4Mean")] public string DcnBin4Mean { get; set; } | ||||
|     [JsonPropertyName("DcnBin4Min")] public string DcnBin4Min { get; set; } | ||||
|     [JsonPropertyName("DcnBin4StdDev")] public string DcnBin4StdDev { get; set; } | ||||
|     [JsonPropertyName("DcnBin5Max")] public string DcnBin5Max { get; set; } | ||||
|     [JsonPropertyName("DcnBin5Mean")] public string DcnBin5Mean { get; set; } | ||||
|     [JsonPropertyName("DcnBin5Min")] public string DcnBin5Min { get; set; } | ||||
|     [JsonPropertyName("DcnBin5StdDev")] public string DcnBin5StdDev { get; set; } | ||||
|     [JsonPropertyName("DcnBin6Max")] public string DcnBin6Max { get; set; } | ||||
|     [JsonPropertyName("DcnBin6Mean")] public string DcnBin6Mean { get; set; } | ||||
|     [JsonPropertyName("DcnBin6Min")] public string DcnBin6Min { get; set; } | ||||
|     [JsonPropertyName("DcnBin6StdDev")] public string DcnBin6StdDev { get; set; } | ||||
|     [JsonPropertyName("DcnBin7Max")] public string DcnBin7Max { get; set; } | ||||
|     [JsonPropertyName("DcnBin7Mean")] public string DcnBin7Mean { get; set; } | ||||
|     [JsonPropertyName("DcnBin7Min")] public string DcnBin7Min { get; set; } | ||||
|     [JsonPropertyName("DcnBin7StdDev")] public string DcnBin7StdDev { get; set; } | ||||
|     [JsonPropertyName("DcnBin8Max")] public string DcnBin8Max { get; set; } | ||||
|     [JsonPropertyName("DcnBin8Mean")] public string DcnBin8Mean { get; set; } | ||||
|     [JsonPropertyName("DcnBin8Min")] public string DcnBin8Min { get; set; } | ||||
|     [JsonPropertyName("DcnBin8StdDev")] public string DcnBin8StdDev { get; set; } | ||||
|     [JsonPropertyName("DcnHazeAvgMax")] public string DcnHazeAvgMax { get; set; } | ||||
|     [JsonPropertyName("DcnHazeAvgMean")] public string DcnHazeAvgMean { get; set; } | ||||
|     [JsonPropertyName("DcnHazeAvgMin")] public string DcnHazeAvgMin { get; set; } | ||||
|     [JsonPropertyName("DcnHazeAvgStdDev")] public string DcnHazeAvgStdDev { get; set; } | ||||
|     [JsonPropertyName("DcnHazeMedianMax")] public string DcnHazeMedianMax { get; set; } | ||||
|     [JsonPropertyName("DcnHazeMedianMean")] public string DcnHazeMedianMean { get; set; } | ||||
|     [JsonPropertyName("DcnHazeMedianMin")] public string DcnHazeMedianMin { get; set; } | ||||
|     [JsonPropertyName("DcnHazeMedianStdDev")] public string DcnHazeMedianStdDev { get; set; } | ||||
|     [JsonPropertyName("DcnHazeStdDevMax")] public string DcnHazeStdDevMax { get; set; } | ||||
|     [JsonPropertyName("DcnHazeStdDevMean")] public string DcnHazeStdDevMean { get; set; } | ||||
|     [JsonPropertyName("DcnHazeStdDevMin")] public string DcnHazeStdDevMin { get; set; } | ||||
|     [JsonPropertyName("DcnHazeStdDevStdDev")] public string DcnHazeStdDevStdDev { get; set; } | ||||
|     [JsonPropertyName("DcnLpdESMax")] public string DcnLpdESMax { get; set; } | ||||
|     [JsonPropertyName("DcnLpdESMean")] public string DcnLpdESMean { get; set; } | ||||
|     [JsonPropertyName("DcnLpdESMin")] public string DcnLpdESMin { get; set; } | ||||
|     [JsonPropertyName("DcnLpdESStdDev")] public string DcnLpdESStdDev { get; set; } | ||||
|     [JsonPropertyName("DcnLpdMax")] public string DcnLpdMax { get; set; } | ||||
|     [JsonPropertyName("DcnLpdMean")] public string DcnLpdMean { get; set; } | ||||
|     [JsonPropertyName("DcnLpdMin")] public string DcnLpdMin { get; set; } | ||||
|     [JsonPropertyName("DcnLpdNMax")] public string DcnLpdNMax { get; set; } | ||||
|     [JsonPropertyName("DcnLpdNMean")] public string DcnLpdNMean { get; set; } | ||||
|     [JsonPropertyName("DcnLpdNMin")] public string DcnLpdNMin { get; set; } | ||||
|     [JsonPropertyName("DcnLpdNStdDev")] public string DcnLpdNStdDev { get; set; } | ||||
|     [JsonPropertyName("DcnLpdStdDev")] public string DcnLpdStdDev { get; set; } | ||||
|     [JsonPropertyName("DcnMicroScrMax")] public string DcnMicroScrMax { get; set; } | ||||
|     [JsonPropertyName("DcnMicroScrMean")] public string DcnMicroScrMean { get; set; } | ||||
|     [JsonPropertyName("DcnMicroScrMin")] public string DcnMicroScrMin { get; set; } | ||||
|     [JsonPropertyName("DcnMicroScrStdDev")] public string DcnMicroScrStdDev { get; set; } | ||||
|     [JsonPropertyName("DcnScrMax")] public string DcnScrMax { get; set; } | ||||
|     [JsonPropertyName("DcnScrMean")] public string DcnScrMean { get; set; } | ||||
|     [JsonPropertyName("DcnScrMin")] public string DcnScrMin { get; set; } | ||||
|     [JsonPropertyName("DcnScrStdDev")] public string DcnScrStdDev { get; set; } | ||||
|     [JsonPropertyName("DcnSlipMax")] public string DcnSlipMax { get; set; } | ||||
|     [JsonPropertyName("DcnSlipMean")] public string DcnSlipMean { get; set; } | ||||
|     [JsonPropertyName("DcnSlipMin")] public string DcnSlipMin { get; set; } | ||||
|     [JsonPropertyName("DcnSlipStdDev")] public string DcnSlipStdDev { get; set; } | ||||
|     [JsonPropertyName("DnnAllMax")] public string DnnAllMax { get; set; } | ||||
|     [JsonPropertyName("DnnAllMean")] public string DnnAllMean { get; set; } | ||||
|     [JsonPropertyName("DnnAllMin")] public string DnnAllMin { get; set; } | ||||
|     [JsonPropertyName("DnnAllStdDev")] public string DnnAllStdDev { get; set; } | ||||
|     [JsonPropertyName("DnnAreaCountMax")] public string DnnAreaCountMax { get; set; } | ||||
|     [JsonPropertyName("DnnAreaCountMean")] public string DnnAreaCountMean { get; set; } | ||||
|     [JsonPropertyName("DnnAreaCountMin")] public string DnnAreaCountMin { get; set; } | ||||
|     [JsonPropertyName("DnnAreaCountStdDev")] public string DnnAreaCountStdDev { get; set; } | ||||
|     [JsonPropertyName("DnnAreaMax")] public string DnnAreaMax { get; set; } | ||||
|     [JsonPropertyName("DnnAreaMean")] public string DnnAreaMean { get; set; } | ||||
|     [JsonPropertyName("DnnAreaMin")] public string DnnAreaMin { get; set; } | ||||
|     [JsonPropertyName("DnnAreaStdDev")] public string DnnAreaStdDev { get; set; } | ||||
|     [JsonPropertyName("DnnBin1Max")] public string DnnBin1Max { get; set; } | ||||
|     [JsonPropertyName("DnnBin1Mean")] public string DnnBin1Mean { get; set; } | ||||
|     [JsonPropertyName("DnnBin1Min")] public string DnnBin1Min { get; set; } | ||||
|     [JsonPropertyName("DnnBin1StdDev")] public string DnnBin1StdDev { get; set; } | ||||
|     [JsonPropertyName("DnnBin2Max")] public string DnnBin2Max { get; set; } | ||||
|     [JsonPropertyName("DnnBin2Mean")] public string DnnBin2Mean { get; set; } | ||||
|     [JsonPropertyName("DnnBin2Min")] public string DnnBin2Min { get; set; } | ||||
|     [JsonPropertyName("DnnBin2StdDev")] public string DnnBin2StdDev { get; set; } | ||||
|     [JsonPropertyName("DnnBin3Max")] public string DnnBin3Max { get; set; } | ||||
|     [JsonPropertyName("DnnBin3Mean")] public string DnnBin3Mean { get; set; } | ||||
|     [JsonPropertyName("DnnBin3Min")] public string DnnBin3Min { get; set; } | ||||
|     [JsonPropertyName("DnnBin3StdDev")] public string DnnBin3StdDev { get; set; } | ||||
|     [JsonPropertyName("DnnBin4Max")] public string DnnBin4Max { get; set; } | ||||
|     [JsonPropertyName("DnnBin4Mean")] public string DnnBin4Mean { get; set; } | ||||
|     [JsonPropertyName("DnnBin4Min")] public string DnnBin4Min { get; set; } | ||||
|     [JsonPropertyName("DnnBin4StdDev")] public string DnnBin4StdDev { get; set; } | ||||
|     [JsonPropertyName("DnnBin5Max")] public string DnnBin5Max { get; set; } | ||||
|     [JsonPropertyName("DnnBin5Mean")] public string DnnBin5Mean { get; set; } | ||||
|     [JsonPropertyName("DnnBin5Min")] public string DnnBin5Min { get; set; } | ||||
|     [JsonPropertyName("DnnBin5StdDev")] public string DnnBin5StdDev { get; set; } | ||||
|     [JsonPropertyName("DnnBin6Max")] public string DnnBin6Max { get; set; } | ||||
|     [JsonPropertyName("DnnBin6Mean")] public string DnnBin6Mean { get; set; } | ||||
|     [JsonPropertyName("DnnBin6Min")] public string DnnBin6Min { get; set; } | ||||
|     [JsonPropertyName("DnnBin6StdDev")] public string DnnBin6StdDev { get; set; } | ||||
|     [JsonPropertyName("DnnBin7Max")] public string DnnBin7Max { get; set; } | ||||
|     [JsonPropertyName("DnnBin7Mean")] public string DnnBin7Mean { get; set; } | ||||
|     [JsonPropertyName("DnnBin7Min")] public string DnnBin7Min { get; set; } | ||||
|     [JsonPropertyName("DnnBin7StdDev")] public string DnnBin7StdDev { get; set; } | ||||
|     [JsonPropertyName("DnnBin8Max")] public string DnnBin8Max { get; set; } | ||||
|     [JsonPropertyName("DnnBin8Mean")] public string DnnBin8Mean { get; set; } | ||||
|     [JsonPropertyName("DnnBin8Min")] public string DnnBin8Min { get; set; } | ||||
|     [JsonPropertyName("DnnBin8StdDev")] public string DnnBin8StdDev { get; set; } | ||||
|     [JsonPropertyName("DnnHazeAvgMax")] public string DnnHazeAvgMax { get; set; } | ||||
|     [JsonPropertyName("DnnHazeAvgMean")] public string DnnHazeAvgMean { get; set; } | ||||
|     [JsonPropertyName("DnnHazeAvgMin")] public string DnnHazeAvgMin { get; set; } | ||||
|     [JsonPropertyName("DnnHazeAvgStdDev")] public string DnnHazeAvgStdDev { get; set; } | ||||
|     [JsonPropertyName("DnnHazeMedianMax")] public string DnnHazeMedianMax { get; set; } | ||||
|     [JsonPropertyName("DnnHazeMedianMean")] public string DnnHazeMedianMean { get; set; } | ||||
|     [JsonPropertyName("DnnHazeMedianMin")] public string DnnHazeMedianMin { get; set; } | ||||
|     [JsonPropertyName("DnnHazeMedianStdDev")] public string DnnHazeMedianStdDev { get; set; } | ||||
|     [JsonPropertyName("DnnHazeStdDevMax")] public string DnnHazeStdDevMax { get; set; } | ||||
|     [JsonPropertyName("DnnHazeStdDevMean")] public string DnnHazeStdDevMean { get; set; } | ||||
|     [JsonPropertyName("DnnHazeStdDevMin")] public string DnnHazeStdDevMin { get; set; } | ||||
|     [JsonPropertyName("DnnHazeStdDevStdDev")] public string DnnHazeStdDevStdDev { get; set; } | ||||
|     [JsonPropertyName("DnnLpdESMax")] public string DnnLpdESMax { get; set; } | ||||
|     [JsonPropertyName("DnnLpdESMean")] public string DnnLpdESMean { get; set; } | ||||
|     [JsonPropertyName("DnnLpdESMin")] public string DnnLpdESMin { get; set; } | ||||
|     [JsonPropertyName("DnnLpdESStdDev")] public string DnnLpdESStdDev { get; set; } | ||||
|     [JsonPropertyName("DnnLpdMax")] public string DnnLpdMax { get; set; } | ||||
|     [JsonPropertyName("DnnLpdMean")] public string DnnLpdMean { get; set; } | ||||
|     [JsonPropertyName("DnnLpdMin")] public string DnnLpdMin { get; set; } | ||||
|     [JsonPropertyName("DnnLpdNMax")] public string DnnLpdNMax { get; set; } | ||||
|     [JsonPropertyName("DnnLpdNMean")] public string DnnLpdNMean { get; set; } | ||||
|     [JsonPropertyName("DnnLpdNMin")] public string DnnLpdNMin { get; set; } | ||||
|     [JsonPropertyName("DnnLpdNStdDev")] public string DnnLpdNStdDev { get; set; } | ||||
|     [JsonPropertyName("DnnLpdStdDev")] public string DnnLpdStdDev { get; set; } | ||||
|     [JsonPropertyName("DnnMicroScrMax")] public string DnnMicroScrMax { get; set; } | ||||
|     [JsonPropertyName("DnnMicroScrMean")] public string DnnMicroScrMean { get; set; } | ||||
|     [JsonPropertyName("DnnMicroScrMin")] public string DnnMicroScrMin { get; set; } | ||||
|     [JsonPropertyName("DnnMicroScrStdDev")] public string DnnMicroScrStdDev { get; set; } | ||||
|     [JsonPropertyName("DnnScrMax")] public string DnnScrMax { get; set; } | ||||
|     [JsonPropertyName("DnnScrMean")] public string DnnScrMean { get; set; } | ||||
|     [JsonPropertyName("DnnScrMin")] public string DnnScrMin { get; set; } | ||||
|     [JsonPropertyName("DnnScrStdDev")] public string DnnScrStdDev { get; set; } | ||||
|     [JsonPropertyName("DnnSlipMax")] public string DnnSlipMax { get; set; } | ||||
|     [JsonPropertyName("DnnSlipMean")] public string DnnSlipMean { get; set; } | ||||
|     [JsonPropertyName("DnnSlipMin")] public string DnnSlipMin { get; set; } | ||||
|     [JsonPropertyName("DnnSlipStdDev")] public string DnnSlipStdDev { get; set; } | ||||
|     [JsonPropertyName("DwnAllMax")] public string DwnAllMax { get; set; } | ||||
|     [JsonPropertyName("DwnAllMean")] public string DwnAllMean { get; set; } | ||||
|     [JsonPropertyName("DwnAllMin")] public string DwnAllMin { get; set; } | ||||
|     [JsonPropertyName("DwnAllStdDev")] public string DwnAllStdDev { get; set; } | ||||
|     [JsonPropertyName("DwnAreaCountMax")] public string DwnAreaCountMax { get; set; } | ||||
|     [JsonPropertyName("DwnAreaCountMean")] public string DwnAreaCountMean { get; set; } | ||||
|     [JsonPropertyName("DwnAreaCountMin")] public string DwnAreaCountMin { get; set; } | ||||
|     [JsonPropertyName("DwnAreaCountStdDev")] public string DwnAreaCountStdDev { get; set; } | ||||
|     [JsonPropertyName("DwnAreaMax")] public string DwnAreaMax { get; set; } | ||||
|     [JsonPropertyName("DwnAreaMean")] public string DwnAreaMean { get; set; } | ||||
|     [JsonPropertyName("DwnAreaMin")] public string DwnAreaMin { get; set; } | ||||
|     [JsonPropertyName("DwnAreaStdDev")] public string DwnAreaStdDev { get; set; } | ||||
|     [JsonPropertyName("DwnBin1Max")] public string DwnBin1Max { get; set; } | ||||
|     [JsonPropertyName("DwnBin1Mean")] public string DwnBin1Mean { get; set; } | ||||
|     [JsonPropertyName("DwnBin1Min")] public string DwnBin1Min { get; set; } | ||||
|     [JsonPropertyName("DwnBin1StdDev")] public string DwnBin1StdDev { get; set; } | ||||
|     [JsonPropertyName("DwnBin2Max")] public string DwnBin2Max { get; set; } | ||||
|     [JsonPropertyName("DwnBin2Mean")] public string DwnBin2Mean { get; set; } | ||||
|     [JsonPropertyName("DwnBin2Min")] public string DwnBin2Min { get; set; } | ||||
|     [JsonPropertyName("DwnBin2StdDev")] public string DwnBin2StdDev { get; set; } | ||||
|     [JsonPropertyName("DwnBin3Max")] public string DwnBin3Max { get; set; } | ||||
|     [JsonPropertyName("DwnBin3Mean")] public string DwnBin3Mean { get; set; } | ||||
|     [JsonPropertyName("DwnBin3Min")] public string DwnBin3Min { get; set; } | ||||
|     [JsonPropertyName("DwnBin3StdDev")] public string DwnBin3StdDev { get; set; } | ||||
|     [JsonPropertyName("DwnBin4Max")] public string DwnBin4Max { get; set; } | ||||
|     [JsonPropertyName("DwnBin4Mean")] public string DwnBin4Mean { get; set; } | ||||
|     [JsonPropertyName("DwnBin4Min")] public string DwnBin4Min { get; set; } | ||||
|     [JsonPropertyName("DwnBin4StdDev")] public string DwnBin4StdDev { get; set; } | ||||
|     [JsonPropertyName("DwnBin5Max")] public string DwnBin5Max { get; set; } | ||||
|     [JsonPropertyName("DwnBin5Mean")] public string DwnBin5Mean { get; set; } | ||||
|     [JsonPropertyName("DwnBin5Min")] public string DwnBin5Min { get; set; } | ||||
|     [JsonPropertyName("DwnBin5StdDev")] public string DwnBin5StdDev { get; set; } | ||||
|     [JsonPropertyName("DwnBin6Max")] public string DwnBin6Max { get; set; } | ||||
|     [JsonPropertyName("DwnBin6Mean")] public string DwnBin6Mean { get; set; } | ||||
|     [JsonPropertyName("DwnBin6Min")] public string DwnBin6Min { get; set; } | ||||
|     [JsonPropertyName("DwnBin6StdDev")] public string DwnBin6StdDev { get; set; } | ||||
|     [JsonPropertyName("DwnBin7Max")] public string DwnBin7Max { get; set; } | ||||
|     [JsonPropertyName("DwnBin7Mean")] public string DwnBin7Mean { get; set; } | ||||
|     [JsonPropertyName("DwnBin7Min")] public string DwnBin7Min { get; set; } | ||||
|     [JsonPropertyName("DwnBin7StdDev")] public string DwnBin7StdDev { get; set; } | ||||
|     [JsonPropertyName("DwnBin8Max")] public string DwnBin8Max { get; set; } | ||||
|     [JsonPropertyName("DwnBin8Mean")] public string DwnBin8Mean { get; set; } | ||||
|     [JsonPropertyName("DwnBin8Min")] public string DwnBin8Min { get; set; } | ||||
|     [JsonPropertyName("DwnBin8StdDev")] public string DwnBin8StdDev { get; set; } | ||||
|     [JsonPropertyName("DwnHazeAvgMax")] public string DwnHazeAvgMax { get; set; } | ||||
|     [JsonPropertyName("DwnHazeAvgMean")] public string DwnHazeAvgMean { get; set; } | ||||
|     [JsonPropertyName("DwnHazeAvgMin")] public string DwnHazeAvgMin { get; set; } | ||||
|     [JsonPropertyName("DwnHazeAvgStdDev")] public string DwnHazeAvgStdDev { get; set; } | ||||
|     [JsonPropertyName("DwnHazeMedianMax")] public string DwnHazeMedianMax { get; set; } | ||||
|     [JsonPropertyName("DwnHazeMedianMean")] public string DwnHazeMedianMean { get; set; } | ||||
|     [JsonPropertyName("DwnHazeMedianMin")] public string DwnHazeMedianMin { get; set; } | ||||
|     [JsonPropertyName("DwnHazeMedianStdDev")] public string DwnHazeMedianStdDev { get; set; } | ||||
|     [JsonPropertyName("DwnHazeStdDevMax")] public string DwnHazeStdDevMax { get; set; } | ||||
|     [JsonPropertyName("DwnHazeStdDevMean")] public string DwnHazeStdDevMean { get; set; } | ||||
|     [JsonPropertyName("DwnHazeStdDevMin")] public string DwnHazeStdDevMin { get; set; } | ||||
|     [JsonPropertyName("DwnHazeStdDevStdDev")] public string DwnHazeStdDevStdDev { get; set; } | ||||
|     [JsonPropertyName("DwnLpdESMax")] public string DwnLpdESMax { get; set; } | ||||
|     [JsonPropertyName("DwnLpdESMean")] public string DwnLpdESMean { get; set; } | ||||
|     [JsonPropertyName("DwnLpdESMin")] public string DwnLpdESMin { get; set; } | ||||
|     [JsonPropertyName("DwnLpdESStdDev")] public string DwnLpdESStdDev { get; set; } | ||||
|     [JsonPropertyName("DwnLpdMax")] public string DwnLpdMax { get; set; } | ||||
|     [JsonPropertyName("DwnLpdMean")] public string DwnLpdMean { get; set; } | ||||
|     [JsonPropertyName("DwnLpdMin")] public string DwnLpdMin { get; set; } | ||||
|     [JsonPropertyName("DwnLpdNMax")] public string DwnLpdNMax { get; set; } | ||||
|     [JsonPropertyName("DwnLpdNMean")] public string DwnLpdNMean { get; set; } | ||||
|     [JsonPropertyName("DwnLpdNMin")] public string DwnLpdNMin { get; set; } | ||||
|     [JsonPropertyName("DwnLpdNStdDev")] public string DwnLpdNStdDev { get; set; } | ||||
|     [JsonPropertyName("DwnLpdStdDev")] public string DwnLpdStdDev { get; set; } | ||||
|     [JsonPropertyName("DwnMicroScrMax")] public string DwnMicroScrMax { get; set; } | ||||
|     [JsonPropertyName("DwnMicroScrMean")] public string DwnMicroScrMean { get; set; } | ||||
|     [JsonPropertyName("DwnMicroScrMin")] public string DwnMicroScrMin { get; set; } | ||||
|     [JsonPropertyName("DwnMicroScrStdDev")] public string DwnMicroScrStdDev { get; set; } | ||||
|     [JsonPropertyName("DwnScrMax")] public string DwnScrMax { get; set; } | ||||
|     [JsonPropertyName("DwnScrMean")] public string DwnScrMean { get; set; } | ||||
|     [JsonPropertyName("DwnScrMin")] public string DwnScrMin { get; set; } | ||||
|     [JsonPropertyName("DwnScrStdDev")] public string DwnScrStdDev { get; set; } | ||||
|     [JsonPropertyName("DwnSlipMax")] public string DwnSlipMax { get; set; } | ||||
|     [JsonPropertyName("DwnSlipMean")] public string DwnSlipMean { get; set; } | ||||
|     [JsonPropertyName("DwnSlipMin")] public string DwnSlipMin { get; set; } | ||||
|     [JsonPropertyName("DwnSlipStdDev")] public string DwnSlipStdDev { get; set; } | ||||
|     [JsonPropertyName("DcnAll")] public string DcnAll { get; set; } | ||||
|     [JsonPropertyName("DcnArea")] public string DcnArea { get; set; } | ||||
|     [JsonPropertyName("DcnAreaCount")] public string DcnAreaCount { get; set; } | ||||
|     [JsonPropertyName("DcnBin1")] public string DcnBin1 { get; set; } | ||||
|     [JsonPropertyName("DcnBin2")] public string DcnBin2 { get; set; } | ||||
|     [JsonPropertyName("DcnBin3")] public string DcnBin3 { get; set; } | ||||
|     [JsonPropertyName("DcnBin4")] public string DcnBin4 { get; set; } | ||||
|     [JsonPropertyName("DcnBin5")] public string DcnBin5 { get; set; } | ||||
|     [JsonPropertyName("DcnBin6")] public string DcnBin6 { get; set; } | ||||
|     [JsonPropertyName("DcnBin7")] public string DcnBin7 { get; set; } | ||||
|     [JsonPropertyName("DcnBin8")] public string DcnBin8 { get; set; } | ||||
|     [JsonPropertyName("DcnHazeAvg")] public string DcnHazeAvg { get; set; } | ||||
|     [JsonPropertyName("DcnHazeMedian")] public string DcnHazeMedian { get; set; } | ||||
|     [JsonPropertyName("DcnHazeStdDev")] public string DcnHazeStdDev { get; set; } | ||||
|     [JsonPropertyName("DcnLpd")] public string DcnLpd { get; set; } | ||||
|     [JsonPropertyName("DcnLpdES")] public string DcnLpdES { get; set; } | ||||
|     [JsonPropertyName("DcnLpdN")] public string DcnLpdN { get; set; } | ||||
|     [JsonPropertyName("DcnMicroScr")] public string DcnMicroScr { get; set; } | ||||
|     [JsonPropertyName("DcnScr")] public string DcnScr { get; set; } | ||||
|     [JsonPropertyName("DcnSlip")] public string DcnSlip { get; set; } | ||||
|     [JsonPropertyName("DnnAll")] public string DnnAll { get; set; } | ||||
|     [JsonPropertyName("DnnArea")] public string DnnArea { get; set; } | ||||
|     [JsonPropertyName("DnnAreaCount")] public string DnnAreaCount { get; set; } | ||||
|     [JsonPropertyName("DnnBin1")] public string DnnBin1 { get; set; } | ||||
|     [JsonPropertyName("DnnBin2")] public string DnnBin2 { get; set; } | ||||
|     [JsonPropertyName("DnnBin3")] public string DnnBin3 { get; set; } | ||||
|     [JsonPropertyName("DnnBin4")] public string DnnBin4 { get; set; } | ||||
|     [JsonPropertyName("DnnBin5")] public string DnnBin5 { get; set; } | ||||
|     [JsonPropertyName("DnnBin6")] public string DnnBin6 { get; set; } | ||||
|     [JsonPropertyName("DnnBin7")] public string DnnBin7 { get; set; } | ||||
|     [JsonPropertyName("DnnBin8")] public string DnnBin8 { get; set; } | ||||
|     [JsonPropertyName("DnnHazeAvg")] public string DnnHazeAvg { get; set; } | ||||
|     [JsonPropertyName("DnnHazeMedian")] public string DnnHazeMedian { get; set; } | ||||
|     [JsonPropertyName("DnnHazeStdDev")] public string DnnHazeStdDev { get; set; } | ||||
|     [JsonPropertyName("DnnLpd")] public string DnnLpd { get; set; } | ||||
|     [JsonPropertyName("DnnLpdES")] public string DnnLpdES { get; set; } | ||||
|     [JsonPropertyName("DnnLpdN")] public string DnnLpdN { get; set; } | ||||
|     [JsonPropertyName("DnnMicroScr")] public string DnnMicroScr { get; set; } | ||||
|     [JsonPropertyName("DnnScr")] public string DnnScr { get; set; } | ||||
|     [JsonPropertyName("DnnSlip")] public string DnnSlip { get; set; } | ||||
|     [JsonPropertyName("DwnAll")] public string DwnAll { get; set; } | ||||
|     [JsonPropertyName("DwnArea")] public string DwnArea { get; set; } | ||||
|     [JsonPropertyName("DwnAreaCount")] public string DwnAreaCount { get; set; } | ||||
|     [JsonPropertyName("DwnBin1")] public string DwnBin1 { get; set; } | ||||
|     [JsonPropertyName("DwnBin2")] public string DwnBin2 { get; set; } | ||||
|     [JsonPropertyName("DwnBin3")] public string DwnBin3 { get; set; } | ||||
|     [JsonPropertyName("DwnBin4")] public string DwnBin4 { get; set; } | ||||
|     [JsonPropertyName("DwnBin5")] public string DwnBin5 { get; set; } | ||||
|     [JsonPropertyName("DwnBin6")] public string DwnBin6 { get; set; } | ||||
|     [JsonPropertyName("DwnBin7")] public string DwnBin7 { get; set; } | ||||
|     [JsonPropertyName("DwnBin8")] public string DwnBin8 { get; set; } | ||||
|     [JsonPropertyName("DwnHazeAvg")] public string DwnHazeAvg { get; set; } | ||||
|     [JsonPropertyName("DwnHazeMedian")] public string DwnHazeMedian { get; set; } | ||||
|     [JsonPropertyName("DwnHazeStdDev")] public string DwnHazeStdDev { get; set; } | ||||
|     [JsonPropertyName("DwnLpd")] public string DwnLpd { get; set; } | ||||
|     [JsonPropertyName("DwnLpdES")] public string DwnLpdES { get; set; } | ||||
|     [JsonPropertyName("DwnLpdN")] public string DwnLpdN { get; set; } | ||||
|     [JsonPropertyName("DwnMicroScr")] public string DwnMicroScr { get; set; } | ||||
|     [JsonPropertyName("DwnScr")] public string DwnScr { get; set; } | ||||
|     [JsonPropertyName("DwnSlip")] public string DwnSlip { get; set; } | ||||
|  | ||||
|     string IDescription.GetEventDescription() => "File Has been read and parsed"; | ||||
|  | ||||
| @ -782,6 +785,8 @@ public class Description : IDescription, Shared.Properties.IDescription | ||||
|                     PSN = processData.PSN, | ||||
|                     Reactor = processData.Reactor, | ||||
|                     Recipe = processData.Recipe, | ||||
|                     IndexOf = nameof(IndexOf), | ||||
|                     AttemptCounter = nameof(AttemptCounter), | ||||
|                     // | ||||
|                     Grade = detail.Grade, | ||||
|                     HeaderUniqueId = detail.HeaderUniqueID, | ||||
| @ -1128,6 +1133,8 @@ public class Description : IDescription, Shared.Properties.IDescription | ||||
|             PSN = nameof(PSN), | ||||
|             Reactor = nameof(Reactor), | ||||
|             Recipe = nameof(Recipe), | ||||
|             IndexOf = nameof(IndexOf), | ||||
|             AttemptCounter = nameof(AttemptCounter), | ||||
|             // | ||||
|             Grade = nameof(Grade), | ||||
|             HeaderUniqueId = nameof(HeaderUniqueId), | ||||
| @ -1445,3 +1452,15 @@ public class Description : IDescription, Shared.Properties.IDescription | ||||
|     internal static string GetDateFormat() => "MM/dd/yyyy hh:mm:ss tt"; | ||||
|  | ||||
| } | ||||
|  | ||||
| [JsonSourceGenerationOptions(WriteIndented = true, NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)] | ||||
| [JsonSerializable(typeof(Description))] | ||||
| internal partial class 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 string Grade { get; set; } | ||||
|     [JsonPropertyName("Grade")] public string Grade { get; set; } | ||||
|     public string HeaderUniqueID { get; set; } | ||||
|     public string Side { get; set; } | ||||
|     public string SrcDest { get; set; } | ||||
|     [JsonPropertyName("Side")] public string Side { get; set; } | ||||
|     [JsonPropertyName("SrcDest")] public string SrcDest { get; set; } | ||||
|     public string UniqueID { get; set; } | ||||
|     public string WaferID { get; set; } | ||||
|     [JsonPropertyName("WaferID")] public string WaferID { get; set; } | ||||
|     public string Data { get; set; } | ||||
|     public string DcnAll { get; set; } | ||||
|     public string DcnArea { get; set; } | ||||
|     public string DcnAreaCount { get; set; } | ||||
|     public string DcnBin1 { get; set; } | ||||
|     public string DcnBin2 { get; set; } | ||||
|     public string DcnBin3 { get; set; } | ||||
|     public string DcnBin4 { get; set; } | ||||
|     public string DcnBin5 { get; set; } | ||||
|     public string DcnBin6 { get; set; } | ||||
|     public string DcnBin7 { get; set; } | ||||
|     public string DcnBin8 { get; set; } | ||||
|     public string DcnHazeAvg { get; set; } | ||||
|     public string DcnHazeMedian { get; set; } | ||||
|     public string DcnHazeStdDev { get; set; } | ||||
|     public string DcnLpd { get; set; } | ||||
|     public string DcnLpdES { get; set; } | ||||
|     public string DcnLpdN { get; set; } | ||||
|     public string DcnMicroScr { get; set; } | ||||
|     public string DcnScr { get; set; } | ||||
|     public string DcnSlip { get; set; } | ||||
|     public string DnnAll { get; set; } | ||||
|     public string DnnArea { get; set; } | ||||
|     public string DnnAreaCount { get; set; } | ||||
|     public string DnnBin1 { get; set; } | ||||
|     public string DnnBin2 { get; set; } | ||||
|     public string DnnBin3 { get; set; } | ||||
|     public string DnnBin4 { get; set; } | ||||
|     public string DnnBin5 { get; set; } | ||||
|     public string DnnBin6 { get; set; } | ||||
|     public string DnnBin7 { get; set; } | ||||
|     public string DnnBin8 { get; set; } | ||||
|     public string DnnHazeAvg { get; set; } | ||||
|     public string DnnHazeMedian { get; set; } | ||||
|     public string DnnHazeStdDev { get; set; } | ||||
|     public string DnnLpd { get; set; } | ||||
|     public string DnnLpdES { get; set; } | ||||
|     public string DnnLpdN { get; set; } | ||||
|     public string DnnMicroScr { get; set; } | ||||
|     public string DnnScr { get; set; } | ||||
|     public string DnnSlip { get; set; } | ||||
|     public string DwnAll { get; set; } | ||||
|     public string DwnArea { get; set; } | ||||
|     public string DwnAreaCount { get; set; } | ||||
|     public string DwnBin1 { get; set; } | ||||
|     public string DwnBin2 { get; set; } | ||||
|     public string DwnBin3 { get; set; } | ||||
|     public string DwnBin4 { get; set; } | ||||
|     public string DwnBin5 { get; set; } | ||||
|     public string DwnBin6 { get; set; } | ||||
|     public string DwnBin7 { get; set; } | ||||
|     public string DwnBin8 { get; set; } | ||||
|     public string DwnHazeAvg { get; set; } | ||||
|     public string DwnHazeMedian { get; set; } | ||||
|     public string DwnHazeStdDev { get; set; } | ||||
|     public string DwnLpd { get; set; } | ||||
|     public string DwnLpdES { get; set; } | ||||
|     public string DwnLpdN { get; set; } | ||||
|     public string DwnMicroScr { get; set; } | ||||
|     public string DwnScr { get; set; } | ||||
|     public string DwnSlip { get; set; } | ||||
|     [JsonPropertyName("DcnAll")] public string DcnAll { get; set; } | ||||
|     [JsonPropertyName("DcnArea")] public string DcnArea { get; set; } | ||||
|     [JsonPropertyName("DcnAreaCount")] public string DcnAreaCount { get; set; } | ||||
|     [JsonPropertyName("DcnBin1")] public string DcnBin1 { get; set; } | ||||
|     [JsonPropertyName("DcnBin2")] public string DcnBin2 { get; set; } | ||||
|     [JsonPropertyName("DcnBin3")] public string DcnBin3 { get; set; } | ||||
|     [JsonPropertyName("DcnBin4")] public string DcnBin4 { get; set; } | ||||
|     [JsonPropertyName("DcnBin5")] public string DcnBin5 { get; set; } | ||||
|     [JsonPropertyName("DcnBin6")] public string DcnBin6 { get; set; } | ||||
|     [JsonPropertyName("DcnBin7")] public string DcnBin7 { get; set; } | ||||
|     [JsonPropertyName("DcnBin8")] public string DcnBin8 { get; set; } | ||||
|     [JsonPropertyName("DcnHazeAvg")] public string DcnHazeAvg { get; set; } | ||||
|     [JsonPropertyName("DcnHazeMedian")] public string DcnHazeMedian { get; set; } | ||||
|     [JsonPropertyName("DcnHazeStdDev")] public string DcnHazeStdDev { get; set; } | ||||
|     [JsonPropertyName("DcnLpd")] public string DcnLpd { get; set; } | ||||
|     [JsonPropertyName("DcnLpdES")] public string DcnLpdES { get; set; } | ||||
|     [JsonPropertyName("DcnLpdN")] public string DcnLpdN { get; set; } | ||||
|     [JsonPropertyName("DcnMicroScr")] public string DcnMicroScr { get; set; } | ||||
|     [JsonPropertyName("DcnScr")] public string DcnScr { get; set; } | ||||
|     [JsonPropertyName("DcnSlip")] public string DcnSlip { get; set; } | ||||
|     [JsonPropertyName("DnnAll")] public string DnnAll { get; set; } | ||||
|     [JsonPropertyName("DnnArea")] public string DnnArea { get; set; } | ||||
|     [JsonPropertyName("DnnAreaCount")] public string DnnAreaCount { get; set; } | ||||
|     [JsonPropertyName("DnnBin1")] public string DnnBin1 { get; set; } | ||||
|     [JsonPropertyName("DnnBin2")] public string DnnBin2 { get; set; } | ||||
|     [JsonPropertyName("DnnBin3")] public string DnnBin3 { get; set; } | ||||
|     [JsonPropertyName("DnnBin4")] public string DnnBin4 { get; set; } | ||||
|     [JsonPropertyName("DnnBin5")] public string DnnBin5 { get; set; } | ||||
|     [JsonPropertyName("DnnBin6")] public string DnnBin6 { get; set; } | ||||
|     [JsonPropertyName("DnnBin7")] public string DnnBin7 { get; set; } | ||||
|     [JsonPropertyName("DnnBin8")] public string DnnBin8 { get; set; } | ||||
|     [JsonPropertyName("DnnHazeAvg")] public string DnnHazeAvg { get; set; } | ||||
|     [JsonPropertyName("DnnHazeMedian")] public string DnnHazeMedian { get; set; } | ||||
|     [JsonPropertyName("DnnHazeStdDev")] public string DnnHazeStdDev { get; set; } | ||||
|     [JsonPropertyName("DnnLpd")] public string DnnLpd { get; set; } | ||||
|     [JsonPropertyName("DnnLpdES")] public string DnnLpdES { get; set; } | ||||
|     [JsonPropertyName("DnnLpdN")] public string DnnLpdN { get; set; } | ||||
|     [JsonPropertyName("DnnMicroScr")] public string DnnMicroScr { get; set; } | ||||
|     [JsonPropertyName("DnnScr")] public string DnnScr { get; set; } | ||||
|     [JsonPropertyName("DnnSlip")] public string DnnSlip { get; set; } | ||||
|     [JsonPropertyName("DwnAll")] public string DwnAll { get; set; } | ||||
|     [JsonPropertyName("DwnArea")] public string DwnArea { get; set; } | ||||
|     [JsonPropertyName("DwnAreaCount")] public string DwnAreaCount { get; set; } | ||||
|     [JsonPropertyName("DwnBin1")] public string DwnBin1 { get; set; } | ||||
|     [JsonPropertyName("DwnBin2")] public string DwnBin2 { get; set; } | ||||
|     [JsonPropertyName("DwnBin3")] public string DwnBin3 { get; set; } | ||||
|     [JsonPropertyName("DwnBin4")] public string DwnBin4 { get; set; } | ||||
|     [JsonPropertyName("DwnBin5")] public string DwnBin5 { get; set; } | ||||
|     [JsonPropertyName("DwnBin6")] public string DwnBin6 { get; set; } | ||||
|     [JsonPropertyName("DwnBin7")] public string DwnBin7 { get; set; } | ||||
|     [JsonPropertyName("DwnBin8")] public string DwnBin8 { get; set; } | ||||
|     [JsonPropertyName("DwnHazeAvg")] public string DwnHazeAvg { get; set; } | ||||
|     [JsonPropertyName("DwnHazeMedian")] public string DwnHazeMedian { get; set; } | ||||
|     [JsonPropertyName("DwnHazeStdDev")] public string DwnHazeStdDev { get; set; } | ||||
|     [JsonPropertyName("DwnLpd")] public string DwnLpd { get; set; } | ||||
|     [JsonPropertyName("DwnLpdES")] public string DwnLpdES { get; set; } | ||||
|     [JsonPropertyName("DwnLpdN")] public string DwnLpdN { get; set; } | ||||
|     [JsonPropertyName("DwnMicroScr")] public string DwnMicroScr { get; set; } | ||||
|     [JsonPropertyName("DwnScr")] public string DwnScr { get; set; } | ||||
|     [JsonPropertyName("DwnSlip")] public string DwnSlip { get; set; } | ||||
|  | ||||
|     public Detail() => Data = "*Data*"; | ||||
|  | ||||
| } | ||||
|  | ||||
| [JsonSourceGenerationOptions(WriteIndented = true, NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)] | ||||
| [JsonSerializable(typeof(Detail))] | ||||
| internal partial class DetailSourceGenerationContext : JsonSerializerContext | ||||
| { | ||||
| } | ||||
|  | ||||
| [JsonSourceGenerationOptions(WriteIndented = true, NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)] | ||||
| [JsonSerializable(typeof(Detail[]))] | ||||
| internal partial class DetailArraySourceGenerationContext : JsonSerializerContext | ||||
| { | ||||
| } | ||||
| @ -1060,12 +1060,11 @@ public class ProcessData : IProcessData | ||||
|     { | ||||
|         List<Description> results = new(); | ||||
|         Description? description; | ||||
|         JsonSerializerOptions jsonSerializerOptions = new() { NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString }; | ||||
|         foreach (JsonElement jsonElement in jsonElements) | ||||
|         { | ||||
|             if (jsonElement.ValueKind != JsonValueKind.Object) | ||||
|                 throw new Exception(); | ||||
|             description = JsonSerializer.Deserialize<Description>(jsonElement.ToString(), jsonSerializerOptions); | ||||
|             description = JsonSerializer.Deserialize(jsonElement.ToString(), DescriptionSourceGenerationContext.Default.Description); | ||||
|             if (description is null) | ||||
|                 continue; | ||||
|             results.Add(description); | ||||
|  | ||||
| @ -226,9 +226,9 @@ public class MonIn : IMonIn, IDisposable | ||||
|     { | ||||
|         StringBuilder stringBuilder = new(); | ||||
|         if (string.IsNullOrEmpty(subresource)) | ||||
|             _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} \n{5}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), stateName.Trim(), state.Trim(), description.Trim()); | ||||
|             _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} \n{5}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), stateName.Trim(), state.Trim(), description.Trim()); | ||||
|         else | ||||
|             _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} \n{6}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), subresource.Trim(), stateName.Trim(), state.Trim(), description.Trim()); | ||||
|             _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} \n{6}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), subresource.Trim(), stateName.Trim(), state.Trim(), description.Trim()); | ||||
|         return stringBuilder.ToString(); | ||||
|     } | ||||
|  | ||||
| @ -247,14 +247,14 @@ public class MonIn : IMonIn, IDisposable | ||||
|         if (string.IsNullOrEmpty(subresource)) | ||||
|         { | ||||
|             if (unit.Equals(string.Empty) && !interval.HasValue) | ||||
|                 _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} \n{5}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), performanceName.Trim(), value, description.Trim()); | ||||
|                 _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} \n{5}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), performanceName.Trim(), value, description.Trim()); | ||||
|             else | ||||
|                 _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} {5} {{interval={6}, unit={7}}}\n", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), performanceName.Trim(), value, description.Trim(), interval.HasValue ? interval.Value.ToString() : (object)string.Empty, unit.Trim()); | ||||
|                 _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" {4} {5} {{interval={6}, unit={7}}}\n", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), performanceName.Trim(), value, description.Trim(), interval.HasValue ? interval.Value.ToString() : string.Empty, unit.Trim()); | ||||
|         } | ||||
|         else if (unit.Equals(string.Empty) && !interval.HasValue) | ||||
|             _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} \n{6}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), subresource.Trim(), performanceName.Trim(), value, description.Trim()); | ||||
|             _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} \n{6}", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), subresource.Trim(), performanceName.Trim(), value, description.Trim()); | ||||
|         else | ||||
|             _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} {6} {{interval={7}, unit={8}}}\n", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : (object)"now", resource.Trim(), subresource.Trim(), performanceName.Trim(), value, description.Trim(), interval.HasValue ? interval.Value.ToString() : (object)string.Empty, unit.Trim()); | ||||
|             _ = stringBuilder.AppendFormat(_CultureInfo, "> {0} {1} \"{2}\" \"{3}\" \"{4}\" {5} {6} {{interval={7}, unit={8}}}\n", site.Trim(), timeStamp.HasValue ? GetDateTimeNowAsPosix(timeStamp.Value) : "now", resource.Trim(), subresource.Trim(), performanceName.Trim(), value, description.Trim(), interval.HasValue ? interval.Value.ToString() : string.Empty, unit.Trim()); | ||||
|         return stringBuilder.ToString(); | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -87,16 +87,16 @@ | ||||
|         </None> | ||||
|     </ItemGroup> | ||||
|     <ItemGroup> | ||||
|         <None Condition="'$(Configuration)' == 'Debug'" Include="\\mestsa003.infineon.com\EC_EAFRepository\Staging\DeploymentStorage\GhostPCL\gpcl6win64\gpcl6dll64.dll"> | ||||
|         <None Condition="'$(Configuration)' == 'Debug'" Include="D:\EAF-Mesa-Integration\copy\GhostPCL\gpcl6win64\gpcl6dll64.dll"> | ||||
|             <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | ||||
|         </None> | ||||
|         <None Condition="'$(Configuration)' == 'Debug'" Include="\\mestsa003.infineon.com\EC_EAFRepository\Staging\DeploymentStorage\GhostPCL\gpcl6win64\gpcl6win64.exe"> | ||||
|         <None Condition="'$(Configuration)' == 'Debug'" Include="D:\EAF-Mesa-Integration\copy\GhostPCL\gpcl6win64\gpcl6win64.exe"> | ||||
|             <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | ||||
|         </None> | ||||
|         <None Condition="'$(Configuration)' == 'Release'" Include="\\mesfs.infineon.com\EC_EAFRepository\Staging\DeploymentStorage\GhostPCL\gpcl6win64\gpcl6dll64.dll"> | ||||
|         <None Condition="'$(Configuration)' == 'Release'" Include="D:\EAF-Mesa-Integration\copy\GhostPCL\gpcl6win64\gpcl6dll64.dll"> | ||||
|             <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | ||||
|         </None> | ||||
|         <None Condition="'$(Configuration)' == 'Release'" Include="\\mesfs.infineon.com\EC_EAFRepository\Staging\DeploymentStorage\GhostPCL\gpcl6win64\gpcl6win64.exe"> | ||||
|         <None Condition="'$(Configuration)' == 'Release'" Include="D:\EAF-Mesa-Integration\copy\GhostPCL\gpcl6win64\gpcl6win64.exe"> | ||||
|             <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | ||||
|         </None> | ||||
|     </ItemGroup> | ||||
|  | ||||
| @ -3,6 +3,7 @@ using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Text.Json; | ||||
| using System.Text.Json.Serialization; | ||||
|  | ||||
| namespace Adaptation.Shared.Duplicator; | ||||
|  | ||||
| @ -179,3 +180,15 @@ public class Description : IDescription, Properties.IDescription | ||||
|     internal static string GetDateFormat() => "MM/dd/yyyy hh:mm:ss tt"; | ||||
|  | ||||
| } | ||||
|  | ||||
| [JsonSourceGenerationOptions(WriteIndented = true, NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)] | ||||
| [JsonSerializable(typeof(Description))] | ||||
| internal partial class SharedDescriptionSourceGenerationContext : JsonSerializerContext | ||||
| { | ||||
| } | ||||
|  | ||||
| [JsonSourceGenerationOptions(WriteIndented = true, NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)] | ||||
| [JsonSerializable(typeof(Description[]))] | ||||
| internal partial class SharedDescriptionArraySourceGenerationContext : JsonSerializerContext | ||||
| { | ||||
| } | ||||
| @ -9,7 +9,6 @@ using System.IO; | ||||
| using System.Linq; | ||||
| using System.Text; | ||||
| using System.Text.Json; | ||||
| using System.Text.Json.Serialization; | ||||
| using System.Threading; | ||||
|  | ||||
| namespace Adaptation.Shared; | ||||
| @ -383,8 +382,12 @@ public class FileRead : Properties.IFileRead | ||||
|         else | ||||
|         { | ||||
|             string[] files; | ||||
|             string logisticsSequence = _Logistics.Sequence.ToString(); | ||||
|             string[] directories = Directory.GetDirectories(jobIdDirectory, $"*{logisticsSequence}*", SearchOption.TopDirectoryOnly); | ||||
|             string[] directories; | ||||
|             string logisticsSequence; | ||||
|             for (int i = 0; i < 10; i++) | ||||
|             { | ||||
|                 logisticsSequence = (_Logistics.Sequence + -i).ToString(); | ||||
|                 directories = Directory.GetDirectories(jobIdDirectory, $"*{logisticsSequence}*", SearchOption.TopDirectoryOnly); | ||||
|                 foreach (string directory in directories) | ||||
|                 { | ||||
|                     files = Directory.GetFiles(directory, "*", SearchOption.TopDirectoryOnly); | ||||
| @ -392,8 +395,11 @@ public class FileRead : Properties.IFileRead | ||||
|                         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"); | ||||
|         return results.ToArray(); | ||||
|     } | ||||
| @ -440,12 +446,13 @@ public class FileRead : Properties.IFileRead | ||||
|     { | ||||
|         List<Properties.IDescription> results = new(); | ||||
|         Duplicator.Description description; | ||||
|         JsonSerializerOptions jsonSerializerOptions = new() { NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString }; | ||||
|         foreach (JsonElement jsonElement in jsonElements) | ||||
|         { | ||||
|             if (jsonElement.ValueKind != JsonValueKind.Object) | ||||
|                 throw new Exception(); | ||||
|             description = JsonSerializer.Deserialize<Duplicator.Description>(jsonElement.ToString(), jsonSerializerOptions); | ||||
|             description = JsonSerializer.Deserialize(jsonElement.ToString(), Duplicator.SharedDescriptionSourceGenerationContext.Default.Description); | ||||
|             if (description is null) | ||||
|                 continue; | ||||
|             results.Add(description); | ||||
|         } | ||||
|         return results; | ||||
| @ -478,27 +485,14 @@ public class FileRead : Properties.IFileRead | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     protected void WritePDSF(IFileRead fileRead, JsonElement[] jsonElements) | ||||
|     protected static void WritePDSF(IFileRead fileRead, JsonElement[] jsonElements) | ||||
|     { | ||||
|         string directory; | ||||
|         string day = $"{_Logistics.DateTimeFromSequence:yyyy-MM-dd}"; | ||||
|         string weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); | ||||
|         string weekDirectory = $"{_Logistics.DateTimeFromSequence:yyyy}_Week_{weekOfYear}"; | ||||
|         if (!_CellInstanceConnectionName.StartsWith(_CellInstanceName) && _CellInstanceConnectionNameBase == _EquipmentType) | ||||
|             directory = Path.Combine(_TracePath, _EquipmentType, "Target", weekDirectory, day, _CellInstanceName, _CellInstanceConnectionName); | ||||
|         else | ||||
|             directory = Path.Combine(_TracePath, _EquipmentType, "Source", weekDirectory, day, _CellInstanceName, _CellInstanceConnectionName); | ||||
|         if (!Directory.Exists(directory)) | ||||
|             _ = Directory.CreateDirectory(directory); | ||||
|         string file = Path.Combine(directory, string.Concat(_Logistics.MesEntity, "_", _Logistics.Sequence, ".ipdsf")); | ||||
|         string lines = ProcessDataStandardFormat.GetPDSFText(fileRead, _Logistics, jsonElements, logisticsText: string.Empty); | ||||
|         File.WriteAllText(file, lines); | ||||
|         if (_Logistics.TotalSecondsSinceLastWriteTimeFromSequence > 600) | ||||
|         { | ||||
|             try | ||||
|             { File.SetLastWriteTime(file, _Logistics.DateTimeFromSequence); } | ||||
|             catch (Exception) { } | ||||
|         } | ||||
| #pragma warning disable CA1510 | ||||
|         if (fileRead is null) | ||||
|             throw new ArgumentNullException(nameof(fileRead)); | ||||
|         if (jsonElements is null) | ||||
|             throw new ArgumentNullException(nameof(jsonElements)); | ||||
| #pragma warning restore CA1510 | ||||
|     } | ||||
|  | ||||
|     protected void WaitForThread(Thread thread, List<Exception> threadExceptions) | ||||
|  | ||||
| @ -2,12 +2,14 @@ using Adaptation.Shared.Methods; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Collections.ObjectModel; | ||||
| using System.Diagnostics; | ||||
| using System.Globalization; | ||||
| using System.IO; | ||||
| using System.Linq; | ||||
| using System.Text; | ||||
| using System.Text.Json; | ||||
| using System.Text.Json.Serialization; | ||||
| using System.Text.RegularExpressions; | ||||
|  | ||||
| namespace Adaptation.Shared; | ||||
|  | ||||
| @ -136,6 +138,7 @@ internal class ProcessDataStandardFormat | ||||
|     internal static ProcessDataStandardFormat GetProcessDataStandardFormat(string reportFullPath, string[]? lines = null, int columnsLine = 6) | ||||
|     { | ||||
|         ProcessDataStandardFormat result; | ||||
|         long? sequence; | ||||
|         string segment; | ||||
|         string[] segments; | ||||
|         bool addToFooter = false; | ||||
| @ -184,15 +187,27 @@ internal class ProcessDataStandardFormat | ||||
|                     break; | ||||
|             } | ||||
|         } | ||||
|         string? linesOne = lines.Length > 0 && body.Count == 0 && columns.Count == 0 ? lines[1] : null; | ||||
|         string? linesOne = lines.Length > 1 && body.Count == 0 && columns.Count == 0 ? lines[1] : null; | ||||
|         logistics = GetLogistics(footer, linesOne: linesOne); | ||||
|         if (logistics.Count == 0) | ||||
|             sequence = null; | ||||
|         else | ||||
|         { | ||||
|             segments = logistics[0].Split(new string[] { "SEQUENCE=" }, StringSplitOptions.None); | ||||
|             sequence = segments.Length < 2 || !long.TryParse(segments[1].Split(';')[0], out long s) ? null : s; | ||||
|         } | ||||
|         if (sequence is null && !string.IsNullOrEmpty(reportFullPath)) | ||||
|         { | ||||
|             FileInfo fileInfo = new(reportFullPath); | ||||
|             sequence = fileInfo.LastWriteTime.Ticks; | ||||
|         } | ||||
|         result = new(body: body.AsReadOnly(), | ||||
|                      columns: columns.AsReadOnly(), | ||||
|                      footer: footer.AsReadOnly(), | ||||
|                      header: header.AsReadOnly(), | ||||
|                      inputPDSF: null, | ||||
|                      logistics: logistics, | ||||
|                      sequence: null); | ||||
|                      sequence: sequence); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
| @ -214,19 +229,19 @@ internal class ProcessDataStandardFormat | ||||
|         return results.AsReadOnly(); | ||||
|     } | ||||
|  | ||||
|     internal static ProcessDataStandardFormat GetProcessDataStandardFormat(string reportFullPath, ProcessDataStandardFormatMapping pdsfMapping) | ||||
|     internal static ProcessDataStandardFormat GetProcessDataStandardFormat(string reportFullPath, ProcessDataStandardFormatMapping processDataStandardFormatMapping) | ||||
|     { | ||||
|         ProcessDataStandardFormat result; | ||||
|         const int columnsLine = 6; | ||||
|         FileInfo fileInfo = new(reportFullPath); | ||||
|         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(); | ||||
|         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; | ||||
|         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) | ||||
|                 result = processDataStandardFormat; | ||||
|         } | ||||
| @ -236,7 +251,7 @@ internal class ProcessDataStandardFormat | ||||
|     private static ProcessDataStandardFormat GetProcessDataStandardFormat(DateTime lastWriteTime, int columnsLine, string path, string[]? lines) | ||||
|     { | ||||
|         ProcessDataStandardFormat result; | ||||
|         long sequence; | ||||
|         long? sequence; | ||||
|         string[] segments; | ||||
|         bool addToFooter = false; | ||||
|         List<string> body = new(); | ||||
| @ -268,12 +283,13 @@ internal class ProcessDataStandardFormat | ||||
|         } | ||||
|         logistics = GetLogistics(footer, linesOne: null); | ||||
|         if (logistics.Count == 0) | ||||
|             sequence = lastWriteTime.Ticks; | ||||
|             sequence = null; | ||||
|         else | ||||
|         { | ||||
|             segments = logistics[0].Split(new string[] { "SEQUENCE=" }, StringSplitOptions.None); | ||||
|             sequence = segments.Length < 2 || !long.TryParse(segments[1].Split(';')[0], out long s) ? lastWriteTime.Ticks : s; | ||||
|             sequence = segments.Length < 2 || !long.TryParse(segments[1].Split(';')[0], out long s) ? null : s; | ||||
|         } | ||||
|         sequence ??= lastWriteTime.Ticks; | ||||
|         result = new(body: body.AsReadOnly(), | ||||
|                      columns: new(columns), | ||||
|                      footer: footer.AsReadOnly(), | ||||
| @ -302,7 +318,7 @@ internal class ProcessDataStandardFormat | ||||
|                 segments = bodyLine.Split('\t').ToList(); | ||||
|                 for (int c = 0; c < segments.Count; c++) | ||||
|                 { | ||||
|                     value = segments[c].Replace("\"", "\\\"").Replace("\\", "\\\\"); | ||||
|                     value = segments[c].Replace("\\", "\\\\").Replace("\"", "\\\""); | ||||
|                     _ = stringBuilder.Append('"').Append(processDataStandardFormat.Columns[c]).Append("\":\"").Append(value).Append("\","); | ||||
|                 } | ||||
|                 _ = stringBuilder.Remove(stringBuilder.Length - 1, 1); | ||||
| @ -321,12 +337,14 @@ internal class ProcessDataStandardFormat | ||||
|         int column; | ||||
|         string value; | ||||
|         JsonProperty jsonProperty; | ||||
|         List<string> debug = new(); | ||||
|         List<string> values = new(); | ||||
|         List<string> results = new(); | ||||
|         JsonProperty[] jsonProperties; | ||||
|         List<string> unknownColumns = new(); | ||||
|         for (int i = 0; i < jsonElements.Length; i++) | ||||
|         { | ||||
|             debug.Clear(); | ||||
|             values.Clear(); | ||||
|             if (jsonElements[i].ValueKind != JsonValueKind.Object) | ||||
|             { | ||||
| @ -340,16 +358,22 @@ internal class ProcessDataStandardFormat | ||||
|             { | ||||
|                 column = processDataStandardFormatMapping.ColumnIndices[c]; | ||||
|                 if (column == -1) | ||||
|                 { | ||||
|                     value = processDataStandardFormatMapping.OldColumnNames[c]; | ||||
|                     debug.Add($"<Item C=-01 Name=\"{value}\" DataType=\"8\" XmlType=\"1\" XPath=\"//records/record/{value}\" />"); | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     jsonProperty = jsonProperties[column]; | ||||
|                     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); | ||||
|             } | ||||
|             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), | ||||
|                      columns: processDataStandardFormatMapping.OldColumnNames, | ||||
|                      footer: processDataStandardFormat.Footer, | ||||
| @ -364,7 +388,6 @@ internal class ProcessDataStandardFormat | ||||
|     { | ||||
|         if (processDataStandardFormat.InputPDSF is null) | ||||
|             throw new NullReferenceException(nameof(processDataStandardFormat.InputPDSF)); | ||||
| #pragma warning disable CA1845, IDE0057 | ||||
|         string result; | ||||
|         string line; | ||||
|         string value; | ||||
| @ -378,12 +401,20 @@ internal class ProcessDataStandardFormat | ||||
|                 break; | ||||
|             for (int c = 0; c < segments.Length; c++) | ||||
|             { | ||||
|                 value = segments[c].Replace("\"", "\\\"").Replace("\\", "\\\\"); | ||||
|                 value = segments[c].Replace("\\", "\\\\").Replace("\"", "\\\""); | ||||
|                 line += string.Concat('"', processDataStandardFormat.InputPDSF.Columns[c].Trim('"'), '"', ':', '"', value, '"', ','); | ||||
|             } | ||||
|             line = string.Concat(line.Substring(0, line.Length - 1), '}'); | ||||
|             lines.Add(line); | ||||
|         } | ||||
|         string? json = null; | ||||
|         if (processDataStandardFormat.Footer is not null && processDataStandardFormat.Footer.Count > 0) | ||||
|         { | ||||
|             Dictionary<string, string> footerKeyValuePairs = GetFooterKeyValuePairs(processDataStandardFormat.Footer); | ||||
|             Dictionary<string, Dictionary<string, string>> logisticKeyValuePairs = GetLogisticKeyValuePairs(processDataStandardFormat.Footer, footerKeyValuePairs); | ||||
|             json = JsonSerializer.Serialize(logisticKeyValuePairs, DictionaryStringDictionaryStringStringSourceGenerationContext.Default.DictionaryStringDictionaryStringString); | ||||
|         } | ||||
|         string footerText = string.IsNullOrEmpty(json) || json == "{}" ? string.Empty : $",{Environment.NewLine}\"PDSF\":{Environment.NewLine}{json}"; | ||||
|         result = string.Concat( | ||||
|             '{', | ||||
|             Environment.NewLine, | ||||
| @ -412,14 +443,92 @@ internal class ProcessDataStandardFormat | ||||
|             ": ", | ||||
|             processDataStandardFormat.Sequence, | ||||
|             Environment.NewLine, | ||||
|             footerText, | ||||
|             Environment.NewLine, | ||||
|             '}'); | ||||
|         return result; | ||||
| #pragma warning restore CA1845, IDE0057 | ||||
|     } | ||||
|  | ||||
|     private static Dictionary<string, string> GetFooterKeyValuePairs(ReadOnlyCollection<string> footerLines) | ||||
|     { | ||||
|         Dictionary<string, string> results = new(); | ||||
|         string[] segments; | ||||
|         foreach (string footerLine in footerLines) | ||||
|         { | ||||
|             segments = footerLine.Split('\t'); | ||||
|             if (segments.Length != 2 || string.IsNullOrEmpty(segments[1].Trim())) | ||||
|             { | ||||
|                 continue; | ||||
|             } | ||||
|             if (segments[1].Contains(';')) | ||||
|             { | ||||
|                 continue; | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 if (results.ContainsKey(segments[0])) | ||||
|                 { | ||||
|                     continue; | ||||
|                 } | ||||
|                 results.Add(segments[0], segments[1]); | ||||
|             } | ||||
|         } | ||||
|         return results; | ||||
|     } | ||||
|  | ||||
|     private static Dictionary<string, Dictionary<string, string>> GetLogisticKeyValuePairs(ReadOnlyCollection<string> footerLines, Dictionary<string, string> footerKeyValuePairs) | ||||
|     { | ||||
|         Dictionary<string, Dictionary<string, string>> results = new(); | ||||
|         string[] segments; | ||||
|         string[] subSegments; | ||||
|         string[] subSubSegments; | ||||
|         Dictionary<string, string>? keyValue; | ||||
|         results.Add("Footer", footerKeyValuePairs); | ||||
|         foreach (string footerLine in footerLines) | ||||
|         { | ||||
|             segments = footerLine.Split('\t'); | ||||
|             if (segments.Length != 2 || string.IsNullOrEmpty(segments[1].Trim())) | ||||
|             { | ||||
|                 continue; | ||||
|             } | ||||
|             if (!segments[1].Contains(';') || !segments[1].Contains('=')) | ||||
|             { | ||||
|                 continue; | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 subSegments = segments[1].Split(';'); | ||||
|                 if (subSegments.Length < 1) | ||||
|                 { | ||||
|                     continue; | ||||
|                 } | ||||
|                 if (!results.TryGetValue(segments[0], out keyValue)) | ||||
|                 { | ||||
|                     results.Add(segments[0], new()); | ||||
|                     if (!results.TryGetValue(segments[0], out keyValue)) | ||||
|                     { | ||||
|                         throw new Exception(); | ||||
|                     } | ||||
|                 } | ||||
|                 foreach (string segment in subSegments) | ||||
|                 { | ||||
|                     subSubSegments = segment.Split('='); | ||||
|                     if (subSubSegments.Length != 2) | ||||
|                     { | ||||
|                         continue; | ||||
|                     } | ||||
|                     keyValue.Add(subSubSegments[0], subSubSegments[1]); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return results; | ||||
|     } | ||||
|  | ||||
|     internal static void Write(string path, ProcessDataStandardFormat processDataStandardFormat, List<Metrology.WS.Results>? wsResults) | ||||
|     { | ||||
|         List<string> results = new(); | ||||
|         if (processDataStandardFormat.InputPDSF is null) | ||||
|             throw new NullReferenceException(nameof(processDataStandardFormat.InputPDSF)); | ||||
|         if (processDataStandardFormat.Sequence is null) | ||||
|             throw new NullReferenceException(nameof(processDataStandardFormat.Sequence)); | ||||
|         string endOffset = "E#######T"; | ||||
| @ -457,25 +566,25 @@ internal class ProcessDataStandardFormat | ||||
|             } | ||||
|         } | ||||
|         results.Add("END_HEADER"); | ||||
|         if (processDataStandardFormat.InputPDSF is not null) | ||||
|         { | ||||
|         results.Add(string.Empty); | ||||
|         List<char> hyphens = new(); | ||||
|             results.AddRange(processDataStandardFormat.InputPDSF.Header.Select(l => l.Replace('\t', '|'))); | ||||
|         results.AddRange(processDataStandardFormat.InputPDSF.Header.Select(l => $"|{l.Replace('\t', '|')}|")); | ||||
|         results.Add(string.Empty); | ||||
|         results.Add($"|{string.Join("|", processDataStandardFormat.InputPDSF.Columns)}|"); | ||||
|         for (int i = 0; i < processDataStandardFormat.InputPDSF.Columns.Count; i++) | ||||
|             hyphens.Add('-'); | ||||
|         results.Add($"|{string.Join("|", hyphens)}|"); | ||||
|             results.AddRange(processDataStandardFormat.InputPDSF.Body.Select(l => l.Replace('\t', '|'))); | ||||
|         results.AddRange(processDataStandardFormat.InputPDSF.Body.Select(l => $"|{l.Replace('\t', '|')}|")); | ||||
|         results.Add(string.Empty); | ||||
|             results.AddRange(processDataStandardFormat.InputPDSF.Footer.Select(l => l.Replace('\t', '|'))); | ||||
|         results.AddRange(processDataStandardFormat.InputPDSF.Footer.Select(l => $"|{l.Replace('\t', '|')}|")); | ||||
|         results.Add(string.Empty); | ||||
|         string xml = GetXml(processDataStandardFormat); | ||||
|         results.Add(xml); | ||||
|         results.Add(string.Empty); | ||||
|         results.Add("EOF"); | ||||
|         results.Add(string.Empty); | ||||
|         string json = GetJson(processDataStandardFormat); | ||||
|         results.Add(json); | ||||
|         } | ||||
|         File.WriteAllText(path, string.Join(Environment.NewLine, results)); | ||||
|     } | ||||
|  | ||||
| @ -518,7 +627,7 @@ internal class ProcessDataStandardFormat | ||||
|                 { | ||||
|                     for (int c = 1; c < segments.Length; c++) | ||||
|                     { | ||||
|                         value = segments[c].Replace("\"", "\\\"").Replace("\\", "\\\\"); | ||||
|                         value = segments[c].Replace("\\", "\\\\").Replace("\"", "\\\""); | ||||
|                         _ = stringBuilder.Append('"').Append(processDataStandardFormat.Columns[c]).Append("\":\"").Append(value).Append("\","); | ||||
|                     } | ||||
|                 } | ||||
| @ -526,7 +635,7 @@ internal class ProcessDataStandardFormat | ||||
|                 { | ||||
|                     for (int c = 1; c < segments.Length; c++) | ||||
|                     { | ||||
|                         value = segments[c].Replace("\"", "\\\"").Replace("\\", "\\\\"); | ||||
|                         value = segments[c].Replace("\\", "\\\\").Replace("\"", "\\\""); | ||||
|                         if (string.IsNullOrEmpty(value)) | ||||
|                             _ = stringBuilder.Append('"').Append(processDataStandardFormat.Columns[c]).Append("\":").Append(value).Append("null,"); | ||||
|                         else if (value.All(char.IsDigit)) | ||||
| @ -545,6 +654,17 @@ internal class ProcessDataStandardFormat | ||||
|         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) | ||||
|     { | ||||
|         string result; | ||||
| @ -757,6 +877,116 @@ internal class ProcessDataStandardFormat | ||||
|         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)] | ||||
| @ -764,3 +994,9 @@ internal class ProcessDataStandardFormat | ||||
| internal partial class JsonElementCollectionSourceGenerationContext : JsonSerializerContext | ||||
| { | ||||
| } | ||||
|  | ||||
| [JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)] | ||||
| [JsonSerializable(typeof(Dictionary<string, Dictionary<string, string>>))] | ||||
| internal partial class DictionaryStringDictionaryStringStringSourceGenerationContext : JsonSerializerContext | ||||
| { | ||||
| } | ||||
| @ -1,33 +1,34 @@ | ||||
| using System.Collections.ObjectModel; | ||||
| using System.Linq; | ||||
|  | ||||
| namespace Adaptation.Shared; | ||||
|  | ||||
| public class ProcessDataStandardFormatMapping | ||||
| { | ||||
|  | ||||
|     public ReadOnlyCollection<string> BackfillColumns { 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> OldColumnNames { get; private set; } | ||||
|  | ||||
|     public ProcessDataStandardFormatMapping(ReadOnlyCollection<string> backfillColumns, | ||||
|                                             ReadOnlyCollection<int> columnIndices, | ||||
|                                             ReadOnlyCollection<string> ignoreColumns, | ||||
|                                             ReadOnlyCollection<string> indexOnlyColumns, | ||||
|                                             ReadOnlyDictionary<string, string> keyValuePairs, | ||||
|     public ProcessDataStandardFormatMapping(ReadOnlyCollection<int> columnIndices, | ||||
|                                             ReadOnlyCollection<string> newColumnNames, | ||||
|                                             ReadOnlyCollection<string> oldColumnNames) | ||||
|     { | ||||
|         BackfillColumns = backfillColumns; | ||||
|         ColumnIndices = columnIndices; | ||||
|         IgnoreColumns = ignoreColumns; | ||||
|         IndexOnlyColumns = indexOnlyColumns; | ||||
|         KeyValuePairs = keyValuePairs; | ||||
|         NewColumnNames = newColumnNames; | ||||
|         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 Microsoft.Extensions.Logging; | ||||
| using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||
|  | ||||
| @ -1,4 +1,4 @@ | ||||
| #if true | ||||
| #if v2_60_0 | ||||
| using Adaptation._Tests.Shared; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||
|  | ||||
| @ -1,4 +1,4 @@ | ||||
| #if true | ||||
| #if v2_60_0 | ||||
| using Adaptation._Tests.Shared; | ||||
| using Microsoft.Extensions.Logging; | ||||
| 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.Methods; | ||||
| using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||
|  | ||||
| @ -1,4 +1,4 @@ | ||||
| #if true | ||||
| #if v2_60_0 | ||||
| using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||
|  | ||||
| namespace Adaptation._Tests.Extract.Production.v2_60_0; | ||||
|  | ||||
| @ -1,4 +1,4 @@ | ||||
| #if true | ||||
| #if v2_60_0 | ||||
| using Adaptation.Shared; | ||||
| using Adaptation.Shared.Methods; | ||||
| 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); | ||||
|             dummyDirectory = Path.Combine(dummyRoot, cellInstanceName, ticks, string.Join(null, segments)); | ||||
|             if (!Directory.Exists(dummyDirectory)) | ||||
|             { | ||||
|                 _ = Directory.CreateDirectory(dummyDirectory); | ||||
|                 try | ||||
|                 { Directory.SetLastWriteTime(Path.Combine(dummyRoot, cellInstanceName), DateTime.Now); } | ||||
|                 catch { } | ||||
|             } | ||||
|         } | ||||
|         if (string.IsNullOrEmpty(ticks)) | ||||
|         { | ||||
|  | ||||
| @ -44,7 +44,7 @@ public class Job : LoggingUnitTesting, IDisposable | ||||
|         catch (Exception) { } | ||||
|     } | ||||
|  | ||||
| #if !Always | ||||
| #if Always | ||||
|     [Ignore] | ||||
| #endif | ||||
|     [TestMethod] | ||||
| @ -52,44 +52,58 @@ public class Job : LoggingUnitTesting, IDisposable | ||||
|     { | ||||
|         string mid; | ||||
|         FileHandlers.TIBCO.Transport.Job job; | ||||
|         DateTime enteredDateTimeFilter = new(2023, 05, 01); | ||||
|         MethodBase methodBase = new StackFrame().GetMethod(); | ||||
|         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); | ||||
|         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; | ||||
|         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; | ||||
|         string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString; | ||||
|         string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString; | ||||
|         HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") }; | ||||
|         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); | ||||
|         HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) }; | ||||
|         mid = "{\"Area\": \"Si\", \"EquipmentType\": \"MET08RESIMAPCDE\", \"MesEntity\": \"CDE4\", \"Sequence\": \"123456789\", \"MID\": \"12-123456-1234\", \"Recipe\": \"Recipe\"}"; | ||||
|         job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid); | ||||
|         mid = """ | ||||
|         {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "12-123456-1234", "Recipe": "Recipe"} | ||||
|         """; | ||||
|         job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "21"); | ||||
|         Assert.AreEqual("123456", job.LotName); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "4609"); | ||||
|         mid = "{\"Area\": \"Si\", \"EquipmentType\": \"MET08RESIMAPCDE\", \"MesEntity\": \"CDE4\", \"Sequence\": \"123456789\", \"MID\": \"12-1234567-1234\", \"Recipe\": \"Recipe\"}"; | ||||
|         job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid); | ||||
|         mid = """ | ||||
|         {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "12-1234567-1234", "Recipe": "Recipe"} | ||||
|         """; | ||||
|         job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "21"); | ||||
|         Assert.AreEqual("1234567", job.LotName); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "4609"); | ||||
|         mid = "{\"Area\": \"Si\", \"EquipmentType\": \"MET08RESIMAPCDE\", \"MesEntity\": \"CDE4\", \"Sequence\": \"123456789\", \"MID\": \"-544481-\", \"Recipe\": \"Recipe\"}"; | ||||
|         job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid); | ||||
|         mid = """ | ||||
|         {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "-544481-", "Recipe": "Recipe"} | ||||
|         """; | ||||
|         job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "51"); | ||||
|         Assert.AreEqual("544481", job.LotName); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); //  == "5158"); | ||||
|         mid = "{\"Area\": \"Si\", \"EquipmentType\": \"MET08RESIMAPCDE\", \"MesEntity\": \"CDE4\", \"Sequence\": \"123456789\", \"MID\": \"00-544481-0000\", \"Recipe\": \"Recipe\"}"; | ||||
|         job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid); | ||||
|         mid = """ | ||||
|         {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "00-544481-0000", "Recipe": "Recipe"} | ||||
|         """; | ||||
|         job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "51"); | ||||
|         Assert.AreEqual("544481", job.LotName); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); //  == "5158"); | ||||
|         mid = "{\"Area\": \"Si\", \"EquipmentType\": \"MET08RESIMAPCDE\", \"MesEntity\": \"CDE4\", \"Sequence\": \"123456789\", \"MID\": \"00-o171308.1.51-0000\", \"Recipe\": \"Recipe\", \"Slot\": \"11\"}"; | ||||
|         job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid); | ||||
|         mid = """ | ||||
|         {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "00-o171308.1.51-0000", "Recipe": "Recipe", "Slot": "11"} | ||||
|         """; | ||||
|         job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "54"); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); // == "547000"); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "4445"); | ||||
|         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); | ||||
|         mid = "{\"Area\": \"Si\", \"EquipmentType\": \"MET08RESIMAPCDE\", \"MesEntity\": \"CDE5\", \"Sequence\": \"638163023363575829\", \"MID\": \"B48\", \"Recipe\": \"lsl_6in \"}"; | ||||
|         job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid); | ||||
|         mid = """ | ||||
|         {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE5", "Sequence": "638163023363575829", "MID": "B48", "Recipe": "lsl_6in "} | ||||
|         """; | ||||
|         job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "54"); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); // == "547000"); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "4445"); | ||||
|         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); | ||||
|         NonThrowTryCatch(); | ||||
|     } | ||||
|  | ||||
| @ -99,16 +113,20 @@ public class Job : LoggingUnitTesting, IDisposable | ||||
|     [TestMethod] | ||||
|     public void TestJobAA() | ||||
|     { | ||||
|         string mid; | ||||
|         FileHandlers.TIBCO.Transport.Job job; | ||||
|         DateTime enteredDateTimeFilter = new(2023, 05, 01); | ||||
|         MethodBase methodBase = new StackFrame().GetMethod(); | ||||
|         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); | ||||
|         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; | ||||
|         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; | ||||
|         string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString; | ||||
|         string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString; | ||||
|         HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") }; | ||||
|         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); | ||||
|         HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) }; | ||||
|         mid = "{\"Area\": \"Si\", \"EquipmentType\": \"MET08THFTIRQS408M\", \"MesEntity\": \"BIORAD2\", \"Sequence\": \"123456789\", \"MID\": \"37--\", \"Recipe\": \"Recipe\"}"; | ||||
|         job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid); | ||||
|         string mid = """ | ||||
|         {"Area": "Si", "EquipmentType": "MET08THFTIRQS408M", "MesEntity": "BIORAD2", "Sequence": "123456789", "MID": "37--", "Recipe": "Recipe"} | ||||
|         """; | ||||
|         job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter); | ||||
|         Assert.AreEqual("37", job.ProcessType); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); // == "549918"); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "5101"); | ||||
| @ -116,21 +134,26 @@ public class Job : LoggingUnitTesting, IDisposable | ||||
|         NonThrowTryCatch(); | ||||
|     } | ||||
|  | ||||
| #if !Always | ||||
| #if Always | ||||
|     [Ignore] | ||||
| #endif | ||||
|     [TestMethod] | ||||
|     public void TestJobB() | ||||
|     { | ||||
|         FileHandlers.TIBCO.Transport.Job job; | ||||
|         DateTime enteredDateTimeFilter = new(2023, 05, 01); | ||||
|         MethodBase methodBase = new StackFrame().GetMethod(); | ||||
|         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); | ||||
|         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; | ||||
|         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; | ||||
|         string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString; | ||||
|         string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString; | ||||
|         HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") }; | ||||
|         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); | ||||
|         HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) }; | ||||
|         string mid = "{\"Area\": \"Si\", \"EquipmentType\": \"MET08RESIMAPCDE\", \"MesEntity\": \"CDE4\", \"Sequence\": \"123456789\", \"MID\": \"P1234\", \"Recipe\": \"Recipe\"}"; | ||||
|         job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid); | ||||
|         string mid = """ | ||||
|         {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE4", "Sequence": "123456789", "MID": "P1234", "Recipe": "Recipe"} | ||||
|         """; | ||||
|         job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); | ||||
| @ -145,14 +168,19 @@ public class Job : LoggingUnitTesting, IDisposable | ||||
|     public void TestJobC() | ||||
|     { | ||||
|         FileHandlers.TIBCO.Transport.Job job; | ||||
|         DateTime enteredDateTimeFilter = new(2023, 05, 01); | ||||
|         MethodBase methodBase = new StackFrame().GetMethod(); | ||||
|         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); | ||||
|         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; | ||||
|         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; | ||||
|         string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString; | ||||
|         string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString; | ||||
|         HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") }; | ||||
|         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); | ||||
|         HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) }; | ||||
|         string mid = "{\"Area\": \"Si\", \"EquipmentType\": \"MET08RESIMAPCDE\", \"MesEntity\": \"BIORAD3\", \"Sequence\": \"638234699589174855\", \"MID\": \"33--\", \"Recipe\": \"Recipe\"}"; | ||||
|         job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid); | ||||
|         string mid = """ | ||||
|         {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "BIORAD3", "Sequence": "638234699589174855", "MID": "33--", "Recipe": "Recipe"} | ||||
|         """; | ||||
|         job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); | ||||
| @ -160,22 +188,26 @@ public class Job : LoggingUnitTesting, IDisposable | ||||
|         NonThrowTryCatch(); | ||||
|     } | ||||
|  | ||||
| #if !Always | ||||
| #if Always | ||||
|     [Ignore] | ||||
| #endif | ||||
|     [TestMethod] | ||||
|     public void TestJobD() | ||||
|     { | ||||
|         FileHandlers.TIBCO.Transport.Job job; | ||||
|         DateTime enteredDateTimeFilter = new(2023, 05, 01); | ||||
|         MethodBase methodBase = new StackFrame().GetMethod(); | ||||
|         string metrologyFileShare = | ||||
|         FileHandlers.TIBCO.FileRead.MetrologyFileShare; | ||||
|         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); | ||||
|         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; | ||||
|         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; | ||||
|         string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString; | ||||
|         string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString; | ||||
|         HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") }; | ||||
|         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); | ||||
|         HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) }; | ||||
|         string mid = "{\"Area\": \"Si\", \"EquipmentType\": \"DEP08CEPIEPSILON\", \"MesEntity\": \"R32\", \"Sequence\": \"\", \"MID\": \"32--\", \"Recipe\": \"Recipe\"}"; | ||||
|         job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid); | ||||
|         string mid = """ | ||||
|         {"Area": "Si", "EquipmentType": "DEP08CEPIEPSILON", "MesEntity": "R32", "Sequence": "", "MID": "32--", "Recipe": "Recipe"} | ||||
|         """; | ||||
|         job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); | ||||
| @ -184,23 +216,26 @@ public class Job : LoggingUnitTesting, IDisposable | ||||
|         NonThrowTryCatch(); | ||||
|     } | ||||
|  | ||||
| #if !Always | ||||
| #if Always | ||||
|     [Ignore] | ||||
| #endif | ||||
|     [TestMethod] | ||||
|     public void TestJobE() | ||||
|     { | ||||
|         FileHandlers.TIBCO.Transport.Job job; | ||||
|         DateTime enteredDateTimeFilter = new(2023, 05, 01); | ||||
|         MethodBase methodBase = new StackFrame().GetMethod(); | ||||
|         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); | ||||
|         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; | ||||
|         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; | ||||
|         string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString; | ||||
|         string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString; | ||||
|         HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") }; | ||||
|         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); | ||||
|         HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) }; | ||||
|         string mid = """ | ||||
|         {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE5", "Sequence": "638756365880000000", "MID": "38-660275-5095.1", "Recipe": "IRC6mm"} | ||||
|         """; | ||||
|         job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid); | ||||
|         job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); | ||||
| @ -209,23 +244,26 @@ public class Job : LoggingUnitTesting, IDisposable | ||||
|         NonThrowTryCatch(); | ||||
|     } | ||||
|  | ||||
| #if !Always | ||||
| #if Always | ||||
|     [Ignore] | ||||
| #endif | ||||
|     [TestMethod] | ||||
|     public void TestJobF() | ||||
|     { | ||||
|         FileHandlers.TIBCO.Transport.Job job; | ||||
|         DateTime enteredDateTimeFilter = new(2023, 05, 01); | ||||
|         MethodBase methodBase = new StackFrame().GetMethod(); | ||||
|         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); | ||||
|         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; | ||||
|         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; | ||||
|         string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString; | ||||
|         string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString; | ||||
|         HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") }; | ||||
|         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); | ||||
|         HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) }; | ||||
|         string mid = """ | ||||
|         {"Area": "Si", "EquipmentType": "MET08THFTIRQS408M", "MesEntity": "BIORAD2", "Sequence": "638757112479659597", "MID": "173308.1.5", "Recipe": "6inTHICK"} | ||||
|         """; | ||||
|         job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid); | ||||
|         job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); | ||||
| @ -234,23 +272,26 @@ public class Job : LoggingUnitTesting, IDisposable | ||||
|         NonThrowTryCatch(); | ||||
|     } | ||||
|  | ||||
| #if !Always | ||||
| #if Always | ||||
|     [Ignore] | ||||
| #endif | ||||
|     [TestMethod] | ||||
|     public void TestJobG() | ||||
|     { | ||||
|         FileHandlers.TIBCO.Transport.Job job; | ||||
|         DateTime enteredDateTimeFilter = new(2023, 05, 01); | ||||
|         MethodBase methodBase = new StackFrame().GetMethod(); | ||||
|         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); | ||||
|         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; | ||||
|         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; | ||||
|         string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString; | ||||
|         string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString; | ||||
|         HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") }; | ||||
|         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); | ||||
|         HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) }; | ||||
|         string mid = """ | ||||
|         {"Area": "Si", "EquipmentType": "MET08DDUPSFS6420", "MesEntity": "TENCOR1", "Sequence": "638765945581765554", "MID": "1T661282", "Recipe": "8IN_THIN ROTR"} | ||||
|         """; | ||||
|         job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid); | ||||
|         job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); | ||||
| @ -259,23 +300,26 @@ public class Job : LoggingUnitTesting, IDisposable | ||||
|         NonThrowTryCatch(); | ||||
|     } | ||||
|  | ||||
| #if !Always | ||||
| #if Always | ||||
|     [Ignore] | ||||
| #endif | ||||
|     [TestMethod] | ||||
|     public void TestJobH() | ||||
|     { | ||||
|         FileHandlers.TIBCO.Transport.Job job; | ||||
|         DateTime enteredDateTimeFilter = new(2023, 05, 01); | ||||
|         MethodBase methodBase = new StackFrame().GetMethod(); | ||||
|         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); | ||||
|         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; | ||||
|         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; | ||||
|         string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString; | ||||
|         string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString; | ||||
|         HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") }; | ||||
|         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); | ||||
|         HttpClient httpClient = new() { BaseAddress = new(FileHandlers.TIBCO.FileRead.OpenInsightApplicationProgrammingInterface) }; | ||||
|         string mid = """ | ||||
|         {"Area": "Si", "EquipmentType": "MET08DDUPSFS6420", "MesEntity": "TENCOR1", "Sequence": "638765945581765554", "MID": "AK1PL2", "Recipe": "8INCLEAN"} | ||||
|         """; | ||||
|         job = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid); | ||||
|         job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); | ||||
| @ -284,4 +328,29 @@ public class Job : LoggingUnitTesting, IDisposable | ||||
|         NonThrowTryCatch(); | ||||
|     } | ||||
|  | ||||
|     [TestMethod] | ||||
|     public void TestJobI() | ||||
|     { | ||||
|         FileHandlers.TIBCO.Transport.Job job; | ||||
|         DateTime enteredDateTimeFilter = new(2023, 05, 01); | ||||
|         MethodBase methodBase = new StackFrame().GetMethod(); | ||||
|         DateTime loadSignatureDateTimeFilter = new(2023, 05, 01); | ||||
|         string metrologyFileShare = FileHandlers.TIBCO.FileRead.MetrologyFileShare; | ||||
|         string barcodeHostFileShare = FileHandlers.TIBCO.FileRead.BarcodeHostFileShare; | ||||
|         string iqsSQLConnectionString = FileHandlers.TIBCO.FileRead.IQSConnectionString; | ||||
|         string lsl2SQLConnectionString = FileHandlers.TIBCO.FileRead.LSL2SQLConnectionString; | ||||
|         HttpClient httpClient = new() { BaseAddress = new("http://messa020ec.infineon.com/api/oiWizard") }; | ||||
|         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration")); | ||||
|         string mid = """ | ||||
|         {"Area": "Si", "EquipmentType": "MET08RESIMAPCDE", "MesEntity": "CDE5", "Sequence": "638163023363575829", "MID": "1T1014894", "Recipe": "lsl_6in "} | ||||
|         """; | ||||
|         job = new(iqsSQLConnectionString, lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, httpClient, mid, enteredDateTimeFilter, loadSignatureDateTimeFilter); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProcessType)); // == "23"); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.LotName)); // == "111111"); | ||||
|         Assert.IsFalse(string.IsNullOrEmpty(job.ProductName)); // == "5053"); | ||||
|         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); | ||||
|         LoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit")); | ||||
|         NonThrowTryCatch(); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -64,7 +64,7 @@ public class MET08DDUPSP1TBI : LoggingUnitTesting, IDisposable | ||||
|         StringBuilder results = new(); | ||||
|         (string cellInstanceName, string cellInstanceVersionName)[] collection = new (string, string)[] | ||||
|         { | ||||
|             new("MET08DDUPSP1TBI", "v2.60.0"), | ||||
|             new("MET08DDUPSP1TBI", "v2.61.1"), | ||||
|         }; | ||||
|         string production = "http://messa08ec.infineon.com:9003/CellInstanceServiceV2"; | ||||
|         Shared.PasteSpecialXml.EAF.XML.API.CellInstance.CellInstanceVersion cellInstanceVersion; | ||||
|  | ||||
							
								
								
									
										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(); | ||||
|         (string cellInstanceName, string cellInstanceVersionName)[] collection = new (string, string)[] | ||||
|         { | ||||
|             new("SP101", "v2.60.0"), | ||||
|             new("SP101-EQPT", "v2.60.0"), | ||||
|             new("SP101", "v2.61.1"), | ||||
|             new("SP101-EQPT", "v2.61.1"), | ||||
|         }; | ||||
|         string production = "http://messa08ec.infineon.com:9003/CellInstanceServiceV2"; | ||||
|         Shared.PasteSpecialXml.EAF.XML.API.CellInstance.CellInstanceVersion cellInstanceVersion; | ||||
|  | ||||
							
								
								
									
										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 @@ | ||||
| { | ||||
|   "devDependencies": { | ||||
|     "@types/bun": "latest", | ||||
|     "axios": "^1.11.0" | ||||
|   }, | ||||
|   "module": "index.ts", | ||||
|   "name": "adaptation", | ||||
|   "peerDependencies": { | ||||
|     "typescript": "^5" | ||||
|   }, | ||||
|   "private": true, | ||||
|   "scripts": { | ||||
|     "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\\\")", | ||||
|     "Alpha": "ABCDEFGHIJKLMNOPQRSTUVWXYZ", | ||||
|     "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\\\")", | ||||
|     "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\\\")", | ||||
|         "Alpha": "ABCDEFGHIJKLMNOPQRSTUVWXYZ", | ||||
|     "kanbn.board": "kanbn board", | ||||
|         "kanbn.board.json": "kanbn board -j > .kanbn/board.json", | ||||
|         "garbage-collect": "git gc" | ||||
|     } | ||||
|     "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> | ||||
|     </PackageReference> | ||||
|     <PackageReference Include="Infineon.EAF.Runtime"> | ||||
|       <Version>2.60.0</Version> | ||||
|       <Version>2.61.1</Version> | ||||
|     </PackageReference> | ||||
|     <PackageReference Include="Pdfbox"> | ||||
|       <Version>1.1.1</Version> | ||||
|     </PackageReference> | ||||
|     <PackageReference Include="System.Text.Json"> | ||||
|       <Version>8.0.5</Version> | ||||
|       <Version>8.0.3</Version> | ||||
|     </PackageReference> | ||||
|   </ItemGroup> | ||||
|   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | ||||
|  | ||||
| @ -32,5 +32,5 @@ using System.Runtime.InteropServices; | ||||
| // You can specify all the values or you can default the Build and Revision Numbers | ||||
| // by using the '*' as shown below: | ||||
| // [assembly: AssemblyVersion("1.0.*")] | ||||
| [assembly: AssemblyVersion("2.60.0.0")] | ||||
| [assembly: AssemblyFileVersion("2.60.0.0")] | ||||
| [assembly: AssemblyVersion("2.61.1.0")] | ||||
| [assembly: AssemblyFileVersion("2.61.1.0")] | ||||
|  | ||||
		Reference in New Issue
	
	Block a user