Preparation to switch to xml for InfinityQS export
This commit is contained in:
@ -110,7 +110,7 @@ dotnet_diagnostic.CA2254.severity = none # CA2254: The logging message template
|
|||||||
dotnet_diagnostic.IDE0001.severity = warning # IDE0001: Simplify name
|
dotnet_diagnostic.IDE0001.severity = warning # IDE0001: Simplify name
|
||||||
dotnet_diagnostic.IDE0002.severity = warning # Simplify (member access) - System.Version.Equals("1", "2"); Version.Equals("1", "2");
|
dotnet_diagnostic.IDE0002.severity = warning # Simplify (member access) - System.Version.Equals("1", "2"); Version.Equals("1", "2");
|
||||||
dotnet_diagnostic.IDE0004.severity = warning # IDE0004: Cast is redundant.
|
dotnet_diagnostic.IDE0004.severity = warning # IDE0004: Cast is redundant.
|
||||||
dotnet_diagnostic.IDE0005.severity = warning # Using directive is unnecessary
|
dotnet_diagnostic.IDE0005.severity = none # Using directive is unnecessary
|
||||||
dotnet_diagnostic.IDE0028.severity = none # IDE0028: Collection initialization can be simplified
|
dotnet_diagnostic.IDE0028.severity = none # IDE0028: Collection initialization can be simplified
|
||||||
dotnet_diagnostic.IDE0031.severity = warning # Use null propagation (IDE0031)
|
dotnet_diagnostic.IDE0031.severity = warning # Use null propagation (IDE0031)
|
||||||
dotnet_diagnostic.IDE0047.severity = warning # IDE0047: Parentheses can be removed
|
dotnet_diagnostic.IDE0047.severity = warning # IDE0047: Parentheses can be removed
|
||||||
@ -122,6 +122,7 @@ dotnet_diagnostic.IDE0290.severity = none # Use primary constructor [Distance]cs
|
|||||||
dotnet_diagnostic.IDE0300.severity = none # IDE0300: Collection initialization can be simplified
|
dotnet_diagnostic.IDE0300.severity = none # IDE0300: Collection initialization can be simplified
|
||||||
dotnet_diagnostic.IDE0301.severity = none #IDE0301: Collection initialization can be simplified
|
dotnet_diagnostic.IDE0301.severity = none #IDE0301: Collection initialization can be simplified
|
||||||
dotnet_diagnostic.IDE0305.severity = none # IDE0305: Collection initialization can be simplified
|
dotnet_diagnostic.IDE0305.severity = none # IDE0305: Collection initialization can be simplified
|
||||||
|
dotnet_diagnostic.MSTEST0015.severity = none # MSTEST0015: Test method {method} should not be ignored
|
||||||
dotnet_diagnostic.MSTEST0037.severity = error # MSTEST0037: Use proper 'Assert' methods
|
dotnet_diagnostic.MSTEST0037.severity = error # MSTEST0037: Use proper 'Assert' methods
|
||||||
dotnet_diagnostic.SYSLIB1045.severity = none # SYSLIB1045: diagnostics for regex source generation
|
dotnet_diagnostic.SYSLIB1045.severity = none # SYSLIB1045: diagnostics for regex source generation
|
||||||
dotnet_naming_rule.abstract_method_should_be_pascal_case.severity = warning
|
dotnet_naming_rule.abstract_method_should_be_pascal_case.severity = warning
|
||||||
|
37
Adaptation/.vscode/launch.json
vendored
37
Adaptation/.vscode/launch.json
vendored
@ -1,10 +1,43 @@
|
|||||||
{
|
{
|
||||||
"configurations": [
|
"configurations": [
|
||||||
|
{
|
||||||
|
"mode": "debug",
|
||||||
|
"name": "Go launch file",
|
||||||
|
"program": "${file}",
|
||||||
|
"request": "launch",
|
||||||
|
"type": "go"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "node Launch Current Opened File",
|
||||||
|
"program": "${file}",
|
||||||
|
"request": "launch",
|
||||||
|
"type": "node"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cwd": "${workspaceFolder}",
|
||||||
|
"internalConsoleOptions": "neverOpen",
|
||||||
|
"name": "Debug File",
|
||||||
|
"program": "${file}",
|
||||||
|
"request": "launch",
|
||||||
|
"stopOnEntry": false,
|
||||||
|
"type": "bun",
|
||||||
|
"watchMode": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cwd": "${workspaceFolder}",
|
||||||
|
"internalConsoleOptions": "neverOpen",
|
||||||
|
"name": "Run File",
|
||||||
|
"noDebug": true,
|
||||||
|
"program": "${file}",
|
||||||
|
"request": "launch",
|
||||||
|
"type": "bun",
|
||||||
|
"watchMode": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": ".NET Core Attach",
|
"name": ".NET Core Attach",
|
||||||
"type": "coreclr",
|
"processId": 32760,
|
||||||
"request": "attach",
|
"request": "attach",
|
||||||
"processId": 17816
|
"type": "coreclr"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
133
Adaptation/.vscode/tasks.json
vendored
133
Adaptation/.vscode/tasks.json
vendored
@ -1,19 +1,134 @@
|
|||||||
{
|
{
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"default": "Development",
|
||||||
|
"description": "Which ASP Net Core Environment?",
|
||||||
|
"id": "ASPNETCORE_ENVIRONMENT",
|
||||||
|
"options": [
|
||||||
|
"Development",
|
||||||
|
"Production"
|
||||||
|
],
|
||||||
|
"type": "pickString"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "{AssemblyTitle}",
|
||||||
|
"description": "What Assembly Title?",
|
||||||
|
"id": "AssemblyTitle",
|
||||||
|
"type": "promptString"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "{Build.BuildId}",
|
||||||
|
"description": "Which Build BuildId?",
|
||||||
|
"id": "Build.BuildId",
|
||||||
|
"type": "promptString"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "{Build.Reason}",
|
||||||
|
"description": "Which Build Reason?",
|
||||||
|
"id": "Build.Reason",
|
||||||
|
"type": "promptString"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "{Build.Repository.Id}",
|
||||||
|
"description": "Which Build Repository Id?",
|
||||||
|
"id": "Build.Repository.Id",
|
||||||
|
"type": "promptString"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "{Build.Repository.Name}",
|
||||||
|
"description": "Which Build Repository Name?",
|
||||||
|
"id": "Build.Repository.Name",
|
||||||
|
"type": "promptString"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "{Build.SourceVersion}",
|
||||||
|
"description": "Which Build Source Version?",
|
||||||
|
"id": "Build.SourceVersion",
|
||||||
|
"type": "promptString"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "Debug",
|
||||||
|
"description": "Which Configuration?",
|
||||||
|
"id": "Configuration",
|
||||||
|
"options": [
|
||||||
|
"Debug",
|
||||||
|
"Release"
|
||||||
|
],
|
||||||
|
"type": "pickString"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "net8.0",
|
||||||
|
"description": "Which Core Version?",
|
||||||
|
"id": "CoreVersion",
|
||||||
|
"options": [
|
||||||
|
"net8.0"
|
||||||
|
],
|
||||||
|
"type": "pickString"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/MSBuild/Current/Bin/MSBuild.exe",
|
||||||
|
"description": "Which MS Build?",
|
||||||
|
"id": "MSBuild",
|
||||||
|
"type": "promptString"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "https://artifactory.intra.infineon.com/artifactory/api/nuget/ngt-fi-package-main-vir/",
|
||||||
|
"description": "Which Nuget Source?",
|
||||||
|
"id": "NugetSource",
|
||||||
|
"type": "promptString"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "win-x64",
|
||||||
|
"description": "Which Runtime?",
|
||||||
|
"id": "Runtime",
|
||||||
|
"options": [
|
||||||
|
"win-x64",
|
||||||
|
"win-x32",
|
||||||
|
"linux-x64",
|
||||||
|
"linux-x32"
|
||||||
|
],
|
||||||
|
"type": "pickString"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "L:/",
|
||||||
|
"description": "Which System DefaultWorkingDirectory?",
|
||||||
|
"id": "System.DefaultWorkingDirectory",
|
||||||
|
"options": [
|
||||||
|
"L:/",
|
||||||
|
"D:/",
|
||||||
|
"C:/"
|
||||||
|
],
|
||||||
|
"type": "pickString"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "v4.8",
|
||||||
|
"description": "Which Core Target Framework Version?",
|
||||||
|
"id": "TargetFrameworkVersion",
|
||||||
|
"options": [
|
||||||
|
"v4.8"
|
||||||
|
],
|
||||||
|
"type": "pickString"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "{UserSecretsId}",
|
||||||
|
"description": "Which Core User Secrets Id?",
|
||||||
|
"id": "UserSecretsId",
|
||||||
|
"type": "promptString"
|
||||||
|
}
|
||||||
|
],
|
||||||
"tasks": [
|
"tasks": [
|
||||||
{
|
{
|
||||||
"label": "Build",
|
"label": "Build",
|
||||||
"command": "dotnet",
|
"command": "dotnet",
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"args": [
|
"args": [
|
||||||
"build",
|
"build"
|
||||||
"/property:GenerateFullPaths=true",
|
|
||||||
"/consoleloggerparameters:NoSummary"
|
|
||||||
],
|
],
|
||||||
"problemMatcher": "$msCompile"
|
"problemMatcher": "$msCompile"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Test-Debug",
|
"label": "Test Debug",
|
||||||
"command": "dotnet",
|
"command": "dotnet",
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"args": [
|
"args": [
|
||||||
@ -24,7 +139,7 @@
|
|||||||
"problemMatcher": "$msCompile"
|
"problemMatcher": "$msCompile"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Test-Release",
|
"label": "Test Release",
|
||||||
"command": "dotnet",
|
"command": "dotnet",
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"args": [
|
"args": [
|
||||||
@ -50,7 +165,7 @@
|
|||||||
"problemMatcher": "$msCompile"
|
"problemMatcher": "$msCompile"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Format-Whitespaces",
|
"label": "Format Whitespaces",
|
||||||
"command": "dotnet",
|
"command": "dotnet",
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"args": [
|
"args": [
|
||||||
@ -87,13 +202,13 @@
|
|||||||
"problemMatcher": "$msCompile"
|
"problemMatcher": "$msCompile"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Project",
|
"label": "Code Project",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "code ../MET08RESIHGCV.csproj",
|
"command": "code ../MET08RESIHGCV.csproj",
|
||||||
"problemMatcher": []
|
"problemMatcher": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Readme",
|
"label": "Code Read Me",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "code ../README.md",
|
"command": "code ../README.md",
|
||||||
"problemMatcher": []
|
"problemMatcher": []
|
||||||
@ -113,7 +228,7 @@
|
|||||||
"problemMatcher": []
|
"problemMatcher": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Git Config",
|
"label": "Code Git Config",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "code ../.git/config",
|
"command": "code ../.git/config",
|
||||||
"problemMatcher": []
|
"problemMatcher": []
|
||||||
|
@ -128,7 +128,7 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
|
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
|
||||||
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
|
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
|
||||||
FileCopy(reportFullPath, dateTime, descriptions);
|
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;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,7 +153,7 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
|
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
|
||||||
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
|
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
|
||||||
MoveArchive(reportFullPath, dateTime);
|
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;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,6 +116,20 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
WaitForFileConsumption(dateTime, descriptions, isDummyRun, successDirectory, duplicateDirectory, collection, duplicateFile);
|
WaitForFileConsumption(dateTime, descriptions, isDummyRun, successDirectory, duplicateDirectory, collection, duplicateFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void WriteFile<T>(string reportFullPath, DateTime dateTime, List<T> descriptions) where T : Shared.Properties.IDescription
|
||||||
|
{
|
||||||
|
bool isDummyRun = false;
|
||||||
|
string successDirectory = string.Empty;
|
||||||
|
List<(Shared.Properties.IScopeInfo, string)> collection = new();
|
||||||
|
string duplicateDirectory = Path.Combine(_FileConnectorConfiguration.SourceFileLocation, _CellInstanceName);
|
||||||
|
if (!Directory.Exists(duplicateDirectory))
|
||||||
|
_ = Directory.CreateDirectory(duplicateDirectory);
|
||||||
|
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)
|
private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime)
|
||||||
{
|
{
|
||||||
Tuple<string, Test[], JsonElement[], List<FileInfo>> results;
|
Tuple<string, Test[], JsonElement[], List<FileInfo>> results;
|
||||||
@ -127,7 +141,9 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
|
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
|
||||||
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
|
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
|
||||||
FileCopy(reportFullPath, dateTime, descriptions);
|
FileCopy(reportFullPath, dateTime, descriptions);
|
||||||
results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics[0]), tests, jsonElements, new List<FileInfo>());
|
if (string.IsNullOrEmpty(reportFullPath) && _IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
|
||||||
|
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;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,9 +88,9 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
string processDataStandardFormatMappingOldColumnNames = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.Old.Column.Names");
|
string processDataStandardFormatMappingOldColumnNames = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.Old.Column.Names");
|
||||||
string processDataStandardFormatMappingNewColumnNames = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.New.Column.Names");
|
string processDataStandardFormatMappingNewColumnNames = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.New.Column.Names");
|
||||||
string processDataStandardFormatMappingColumnIndices = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.Column.Indices");
|
string processDataStandardFormatMappingColumnIndices = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.Column.Indices");
|
||||||
_ProcessDataStandardFormatMapping = GetProcessDataStandardFormatMapping(processDataStandardFormatMappingOldColumnNames,
|
_ProcessDataStandardFormatMapping = ProcessDataStandardFormatMapping.Get(processDataStandardFormatMappingOldColumnNames,
|
||||||
processDataStandardFormatMappingNewColumnNames,
|
processDataStandardFormatMappingNewColumnNames,
|
||||||
processDataStandardFormatMappingColumnIndices);
|
processDataStandardFormatMappingColumnIndices);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IFileRead.Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, Exception exception)
|
void IFileRead.Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, Exception exception)
|
||||||
@ -169,46 +169,6 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ProcessDataStandardFormatMapping GetProcessDataStandardFormatMapping(string processDataStandardFormatMappingOldColumnNames, string processDataStandardFormatMappingNewColumnNames, string processDataStandardFormatMappingColumnIndices)
|
|
||||||
{
|
|
||||||
ProcessDataStandardFormatMapping result;
|
|
||||||
string[] segmentsB;
|
|
||||||
List<string> distinct = new();
|
|
||||||
Dictionary<string, string> keyValuePairs = new();
|
|
||||||
string args4 = "Time,HeaderUniqueId,UniqueId,Id,Recipe,Date,AreaDeltaFromLastRun,GLimit";
|
|
||||||
string args5 = "Nine10mmEdgeMean,Nine4mmEdgeMean,NineCriticalPointsAverage,NineCriticalPointsPhaseAngleAverage,NineCriticalPointsStdDev,NineEdgeMeanDelta,NineMean,NineResRangePercent,AreaDeltaFromLastRun,Variation,Percentage HgCV 4PP Delta";
|
|
||||||
string args6 = "RhoAvg01,RhoAvg02,RhoAvg03,RhoAvg04,RhoAvg05,RhoAvg06,RhoAvg07,RhoAvg08,RhoAvg09";
|
|
||||||
string args7 = "Test|EventId,FlatZMean|MeanFlatZ,GradeMean|MeanGrade,NAvgMean|MeanNAvg,NslMean|MeanNsl,PhaseMean|MeanPhase,RhoAvgMean|MeanRhoAvg,RhoslMean|MeanRhosl,RsMean|MeanRs,VdMean|MeanVd,FlatZRadialGradient|RadialGradientFlatZ,GradeRadialGradient|RadialGradientGrade,NAvgRadialGradient|RadialGradientNAvg,NslRadialGradient|RadialGradientNsl,PhaseRadialGradient|RadialGradientPhase,RhoAvgRadialGradient|RadialGradientRhoAvg,RhoslRadialGradient|RadialGradientRhosl,RsRadialGradient|RadialGradientRs,VdRadialGradient|RadialGradientVd,FlatZStdDev|StandardDeviationPercentageFlatZ,GradeStdDev|StandardDeviationPercentageGrade,NAvgStdDev|StandardDeviationPercentageNAvg,NslStdDev|StandardDeviationPercentageNsl,PhaseStdDev|StandardDeviationPercentagePhase,RhoAvgStdDev|StandardDeviationPercentageRhoAvg,RhoslStdDev|StandardDeviationPercentageRhosl,RsStdDev|StandardDeviationPercentageRs,VdStdDev|StandardDeviationPercentageVd";
|
|
||||||
// string args8 = "Time,A_LOGISTICS,B_LOGISTICS,Test,Count,Index,MesEntity,Date,Employee,Lot,PSN,Reactor,Recipe,Area,Folder,HeaderUniqueId,Id,Layer,Model,Pattern,Phase,Plan,RampRate,RDS,SetupFile,StartVoltage,StopVoltage,UniqueId,Wafer,WaferSize,Zone,Ccomp,CondType,FlatZ,FlatZMean,FlatZRadialGradient,FlatZStdDev,GLimit,Grade,GradeMean,GradeRadialGradient,GradeStdDev,NAvg,NAvgMean,NAvgRadialGradient,NAvgStdDev,Nsl,NslMean,NslRadialGradient,NslStdDev,PhaseMean,PhaseRadialGradient,PhaseStdDev,RhoAvg,RhoAvgMean,RhoAvgRadialGradient,RhoAvgStdDev,RhoMethod,Rhosl,RhoslMean,RhoslRadialGradient,RhoslStdDev,RsMean,RsRadialGradient,RsStdDev,Vd,VdMean,VdRadialGradient,VdStdDev,Variation,AreaDeltaFromLastRun,Nine10mmEdgeMean,Nine4mmEdgeMean,NineCriticalPointsAverage,NineCriticalPointsPhaseAngleAverage,NineCriticalPointsStdDev,NineEdgeMeanDelta,NineMean,NineResRangePercent,RhoAvg01,RhoAvg02,RhoAvg03,RhoAvg04,RhoAvg05,RhoAvg06,RhoAvg07,RhoAvg08,RhoAvg09";
|
|
||||||
// string args9 = "Time,A_LOGISTICS,B_LOGISTICS,Count,Sequence,MesEntity,Index,Operator,StartVoltage,Wafer,StopVoltage,Lot,RampRate,Plan,GLimit,Date,Time,SetupFile,WaferSize,Folder,Ccomp,Pattern,Area,CondType,RhoMethod,Model,MeanNAvg,MeanNsl,MeanVd,MeanFlatZ,MeanRhoAvg,MeanRhosl,MeanPhase,MeanGrade,MeanRs,StandardDeviationPercentageNAvg,StandardDeviationPercentageNsl,StandardDeviationPercentageVd,StandardDeviationPercentageFlatZ,StandardDeviationPercentageRhoAvg,StandardDeviationPercentageRhosl,StandardDeviationPercentagePhase,StandardDeviationPercentageGrade,StandardDeviationPercentageRs,RadialGradientNAvg,RadialGradientNsl,RadialGradientVd,RadialGradientFlatZ,RadialGradientRhoAvg,RadialGradientRhosl,RadialGradientPhase,RadialGradientGrade,RadialGradientRs,Site,X,Y,NAvg,RhoAvg,Nsl,Rhosl,Vd,Phase,FlatZ,Grade,XLeft,XRight,BottomY,TopY,RDS,PSN,Reactor,Layer,Zone,Employee,InferredLot,Nine10mmEdgeMean,Nine4mmEdgeMean,NineCriticalPointsAverage,NineCriticalPointsPhaseAngleAverage,NineCriticalPointsStdDev,NineEdgeMeanDelta,NineMean,NineResRangePercent,AreaDeltaFromLastRun,Variation,Percentage HgCV 4PP Delta,RhoAvg01,RhoAvg02,RhoAvg03,RhoAvg04,RhoAvg05,RhoAvg06,RhoAvg07,RhoAvg08,RhoAvg09,EventId";
|
|
||||||
// string args10 = "0,1,2,95,3,6,5,15,73,11,69,70,-1,22,19,-1,-1,71,25,21,61,13,12,68,17,8,10,-1,9,18,72,20,23,62,29,47,38,14,63,33,51,42,56,26,44,35,58,27,45,36,32,50,41,57,30,48,39,24,59,31,49,40,34,52,43,60,28,46,37,84,83,75,76,77,78,79,80,81,82,86,87,88,89,90,91,92,93,94";
|
|
||||||
string[] segments = args7.Split(',');
|
|
||||||
ReadOnlyCollection<string> ignoreColumns = new(args4.Split(','));
|
|
||||||
ReadOnlyCollection<string> backfillColumns = new(args5.Split(','));
|
|
||||||
ReadOnlyCollection<string> indexOnlyColumns = new(args6.Split(','));
|
|
||||||
ReadOnlyCollection<string> newColumnNames = new(processDataStandardFormatMappingNewColumnNames.Split(','));
|
|
||||||
ReadOnlyCollection<string> oldColumnNames = new(processDataStandardFormatMappingOldColumnNames.Split(','));
|
|
||||||
ReadOnlyCollection<int> columnIndices = new(processDataStandardFormatMappingColumnIndices.Split(',').Select(int.Parse).ToArray());
|
|
||||||
foreach (string segment in segments)
|
|
||||||
{
|
|
||||||
segmentsB = segment.Split('|');
|
|
||||||
if (segmentsB.Length != 2)
|
|
||||||
continue;
|
|
||||||
if (distinct.Contains(segmentsB[0]))
|
|
||||||
continue;
|
|
||||||
distinct.Add(segmentsB[0]);
|
|
||||||
keyValuePairs.Add(segmentsB[0], segmentsB[1]);
|
|
||||||
}
|
|
||||||
result = new(backfillColumns: backfillColumns,
|
|
||||||
columnIndices: columnIndices,
|
|
||||||
newColumnNames: newColumnNames,
|
|
||||||
ignoreColumns: ignoreColumns,
|
|
||||||
indexOnlyColumns: indexOnlyColumns,
|
|
||||||
keyValuePairs: new(keyValuePairs),
|
|
||||||
oldColumnNames: oldColumnNames);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static ReadOnlyCollection<PreWith> GetPreWithCollection(ReadOnlyCollection<Pre> preCollection)
|
private static ReadOnlyCollection<PreWith> GetPreWithCollection(ReadOnlyCollection<Pre> preCollection)
|
||||||
{
|
{
|
||||||
List<PreWith> results = new();
|
List<PreWith> results = new();
|
||||||
@ -313,8 +273,13 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
continue;
|
continue;
|
||||||
if (!_StaticRuns.TryGetValue(_Logistics.Sequence, out List<Shared.Metrology.WS.Results>? wsResults))
|
if (!_StaticRuns.TryGetValue(_Logistics.Sequence, out List<Shared.Metrology.WS.Results>? wsResults))
|
||||||
wsResults = null;
|
wsResults = null;
|
||||||
ProcessDataStandardFormat.Write(preWith.CheckFile, processDataStandardFormat, wsResults);
|
if (processDataStandardFormat.InputPDSF is null)
|
||||||
File.Delete(preWith.MatchingFile);
|
File.Move(preWith.MatchingFile, preWith.CheckFile);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ProcessDataStandardFormat.Write(preWith.CheckFile, processDataStandardFormat, wsResults);
|
||||||
|
File.Delete(preWith.MatchingFile);
|
||||||
|
}
|
||||||
if (Directory.Exists(preWith.NoWaitDirectory))
|
if (Directory.Exists(preWith.NoWaitDirectory))
|
||||||
{
|
{
|
||||||
post = new(preWith.CheckFile, preWith.ErrFile);
|
post = new(preWith.CheckFile, preWith.ErrFile);
|
||||||
|
@ -121,7 +121,7 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
|
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
|
||||||
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
|
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
|
||||||
SaveOpenInsightFile(reportFullPath, dateTime, processDataStandardFormat, descriptions, tests);
|
SaveOpenInsightFile(reportFullPath, dateTime, processDataStandardFormat, descriptions, tests);
|
||||||
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;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,15 +134,6 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
if (!Directory.Exists(duplicateDirectory))
|
if (!Directory.Exists(duplicateDirectory))
|
||||||
_ = Directory.CreateDirectory(duplicateDirectory);
|
_ = Directory.CreateDirectory(duplicateDirectory);
|
||||||
string successDirectory = _FileConnectorConfiguration.AlternateTargetFolder;
|
string successDirectory = _FileConnectorConfiguration.AlternateTargetFolder;
|
||||||
if (!Directory.Exists(Path.Combine(duplicateDirectory, "1")))
|
|
||||||
{
|
|
||||||
string parentParent = GetParentParent(_FileConnectorConfiguration.SourceFileLocation);
|
|
||||||
if (parentParent.Contains(_CellInstanceName))
|
|
||||||
parentParent = Path.GetDirectoryName(parentParent);
|
|
||||||
duplicateDirectory = Path.Combine(parentParent, "Data");
|
|
||||||
if (!Directory.Exists(duplicateDirectory))
|
|
||||||
_ = Directory.CreateDirectory(duplicateDirectory);
|
|
||||||
}
|
|
||||||
if (descriptions.Count == 0 || tests.Length == 0)
|
if (descriptions.Count == 0 || tests.Length == 0)
|
||||||
duplicateFile = Path.Combine(duplicateDirectory, Path.GetFileName(reportFullPath));
|
duplicateFile = Path.Combine(duplicateDirectory, Path.GetFileName(reportFullPath));
|
||||||
else
|
else
|
||||||
|
@ -147,7 +147,7 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
|
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
|
||||||
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
|
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
|
||||||
SendData(reportFullPath, dateTime, descriptions);
|
SendData(reportFullPath, dateTime, 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;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,7 +175,7 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
|
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
|
||||||
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
|
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
|
||||||
PostOpenInsightMetrologyViewerAttachments(descriptions);
|
PostOpenInsightMetrologyViewerAttachments(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;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,7 +172,7 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat);
|
JsonElement[] jsonElements = ProcessDataStandardFormat.GetArray(processDataStandardFormat);
|
||||||
List<pcl.Description> descriptions = pcl.ProcessData.GetDescriptions(jsonElements);
|
List<pcl.Description> descriptions = pcl.ProcessData.GetDescriptions(jsonElements);
|
||||||
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
|
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
|
||||||
results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics[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)
|
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
|
||||||
DirectoryMove(reportFullPath, dateTime, descriptions);
|
DirectoryMove(reportFullPath, dateTime, descriptions);
|
||||||
else if (!_IsEAFHosted)
|
else if (!_IsEAFHosted)
|
||||||
|
@ -125,7 +125,7 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
|
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
|
||||||
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
|
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
|
||||||
FileCopy(reportFullPath, dateTime, descriptions);
|
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;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ stages:
|
|||||||
displayName: "Echo Check"
|
displayName: "Echo Check"
|
||||||
|
|
||||||
- script: '"C:\program files\dotnet\dotnet.exe" nuget locals all --clear'
|
- script: '"C:\program files\dotnet\dotnet.exe" nuget locals all --clear'
|
||||||
displayName: "Nuget Nuget Clear"
|
displayName: "Nuget Clear"
|
||||||
enabled: false
|
enabled: false
|
||||||
|
|
||||||
- task: CopyFiles@2
|
- task: CopyFiles@2
|
||||||
@ -199,7 +199,7 @@ stages:
|
|||||||
displayName: "Echo Check"
|
displayName: "Echo Check"
|
||||||
|
|
||||||
- script: '"C:\program files\dotnet\dotnet.exe" nuget locals all --clear'
|
- script: '"C:\program files\dotnet\dotnet.exe" nuget locals all --clear'
|
||||||
displayName: "Nuget Nuget Clear"
|
displayName: "Nuget Clear"
|
||||||
enabled: false
|
enabled: false
|
||||||
|
|
||||||
- task: CopyFiles@2
|
- task: CopyFiles@2
|
||||||
|
@ -383,17 +383,24 @@ public class FileRead : Properties.IFileRead
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
string[] files;
|
string[] files;
|
||||||
string logisticsSequence = _Logistics.Sequence.ToString();
|
string[] directories;
|
||||||
string[] directories = Directory.GetDirectories(jobIdDirectory, $"*{logisticsSequence}*", SearchOption.TopDirectoryOnly);
|
string logisticsSequence;
|
||||||
foreach (string directory in directories)
|
for (int i = 0; i < 10; i++)
|
||||||
{
|
{
|
||||||
files = Directory.GetFiles(directory, "*", SearchOption.TopDirectoryOnly);
|
logisticsSequence = (_Logistics.Sequence + -i).ToString();
|
||||||
if (files.Length == 0)
|
directories = Directory.GetDirectories(jobIdDirectory, $"*{logisticsSequence}*", SearchOption.TopDirectoryOnly);
|
||||||
continue;
|
foreach (string directory in directories)
|
||||||
results.Add(directory);
|
{
|
||||||
|
files = Directory.GetFiles(directory, "*", SearchOption.TopDirectoryOnly);
|
||||||
|
if (files.Length == 0)
|
||||||
|
continue;
|
||||||
|
results.Add(directory);
|
||||||
|
}
|
||||||
|
if (results.Count == 1)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((results is null) || results.Count != 1)
|
if (results.Count != 1)
|
||||||
throw new Exception("Didn't find directory by logistics sequence");
|
throw new Exception("Didn't find directory by logistics sequence");
|
||||||
return results.ToArray();
|
return results.ToArray();
|
||||||
}
|
}
|
||||||
@ -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;
|
#pragma warning disable CA1510
|
||||||
string day = $"{_Logistics.DateTimeFromSequence:yyyy-MM-dd}";
|
if (fileRead is null)
|
||||||
string weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
|
throw new ArgumentNullException(nameof(fileRead));
|
||||||
string weekDirectory = $"{_Logistics.DateTimeFromSequence:yyyy}_Week_{weekOfYear}";
|
if (jsonElements is null)
|
||||||
if (!_CellInstanceConnectionName.StartsWith(_CellInstanceName) && _CellInstanceConnectionNameBase == _EquipmentType)
|
throw new ArgumentNullException(nameof(jsonElements));
|
||||||
directory = Path.Combine(_TracePath, _EquipmentType, "Target", weekDirectory, day, _CellInstanceName, _CellInstanceConnectionName);
|
#pragma warning restore CA1510
|
||||||
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) { }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void WaitForThread(Thread thread, List<Exception> threadExceptions)
|
protected void WaitForThread(Thread thread, List<Exception> threadExceptions)
|
||||||
|
@ -2,12 +2,14 @@ using Adaptation.Shared.Methods;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
namespace Adaptation.Shared;
|
namespace Adaptation.Shared;
|
||||||
|
|
||||||
@ -227,19 +229,19 @@ internal class ProcessDataStandardFormat
|
|||||||
return results.AsReadOnly();
|
return results.AsReadOnly();
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static ProcessDataStandardFormat GetProcessDataStandardFormat(string reportFullPath, ProcessDataStandardFormatMapping pdsfMapping)
|
internal static ProcessDataStandardFormat GetProcessDataStandardFormat(string reportFullPath, ProcessDataStandardFormatMapping processDataStandardFormatMapping)
|
||||||
{
|
{
|
||||||
ProcessDataStandardFormat result;
|
ProcessDataStandardFormat result;
|
||||||
const int columnsLine = 6;
|
const int columnsLine = 6;
|
||||||
FileInfo fileInfo = new(reportFullPath);
|
FileInfo fileInfo = new(reportFullPath);
|
||||||
ProcessDataStandardFormat processDataStandardFormat = GetProcessDataStandardFormat(fileInfo.LastWriteTime, columnsLine, fileInfo.FullName, lines: null);
|
ProcessDataStandardFormat processDataStandardFormat = GetProcessDataStandardFormat(fileInfo.LastWriteTime, columnsLine, fileInfo.FullName, lines: null);
|
||||||
JsonElement[]? jsonElements = pdsfMapping.OldColumnNames.Count != pdsfMapping.ColumnIndices.Count ? null : GetFullArray(processDataStandardFormat);
|
JsonElement[]? jsonElements = processDataStandardFormatMapping.OldColumnNames.Count != processDataStandardFormatMapping.ColumnIndices.Count ? null : GetFullArray(processDataStandardFormat);
|
||||||
JsonProperty[]? jsonProperties = jsonElements is null || jsonElements.Length == 0 ? null : jsonElements[0].EnumerateObject().ToArray();
|
JsonProperty[]? jsonProperties = jsonElements is null || jsonElements.Length == 0 ? null : jsonElements[0].EnumerateObject().ToArray();
|
||||||
if (jsonElements is null || jsonProperties is null || jsonProperties.Length != pdsfMapping.NewColumnNames.Count)
|
if (jsonElements is null || jsonProperties is null || jsonProperties.Length != processDataStandardFormatMapping.NewColumnNames.Count)
|
||||||
result = processDataStandardFormat;
|
result = processDataStandardFormat;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = GetProcessDataStandardFormat(pdsfMapping, jsonElements, processDataStandardFormat);
|
result = GetProcessDataStandardFormat(processDataStandardFormatMapping, jsonElements, processDataStandardFormat);
|
||||||
if (result.Sequence is null || result.Columns.Count == 0 || result.Body.Count == 0 || result.Logistics.Count == 0)
|
if (result.Sequence is null || result.Columns.Count == 0 || result.Body.Count == 0 || result.Logistics.Count == 0)
|
||||||
result = processDataStandardFormat;
|
result = processDataStandardFormat;
|
||||||
}
|
}
|
||||||
@ -335,12 +337,14 @@ internal class ProcessDataStandardFormat
|
|||||||
int column;
|
int column;
|
||||||
string value;
|
string value;
|
||||||
JsonProperty jsonProperty;
|
JsonProperty jsonProperty;
|
||||||
|
List<string> debug = new();
|
||||||
List<string> values = new();
|
List<string> values = new();
|
||||||
List<string> results = new();
|
List<string> results = new();
|
||||||
JsonProperty[] jsonProperties;
|
JsonProperty[] jsonProperties;
|
||||||
List<string> unknownColumns = new();
|
List<string> unknownColumns = new();
|
||||||
for (int i = 0; i < jsonElements.Length; i++)
|
for (int i = 0; i < jsonElements.Length; i++)
|
||||||
{
|
{
|
||||||
|
debug.Clear();
|
||||||
values.Clear();
|
values.Clear();
|
||||||
if (jsonElements[i].ValueKind != JsonValueKind.Object)
|
if (jsonElements[i].ValueKind != JsonValueKind.Object)
|
||||||
{
|
{
|
||||||
@ -354,16 +358,22 @@ internal class ProcessDataStandardFormat
|
|||||||
{
|
{
|
||||||
column = processDataStandardFormatMapping.ColumnIndices[c];
|
column = processDataStandardFormatMapping.ColumnIndices[c];
|
||||||
if (column == -1)
|
if (column == -1)
|
||||||
|
{
|
||||||
value = processDataStandardFormatMapping.OldColumnNames[c];
|
value = processDataStandardFormatMapping.OldColumnNames[c];
|
||||||
|
debug.Add($"<Item C=-01 Name=\"{value}\" DataType=\"8\" XmlType=\"1\" XPath=\"//records/record/{value}\" />");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
jsonProperty = jsonProperties[column];
|
jsonProperty = jsonProperties[column];
|
||||||
value = jsonProperty.Value.ToString();
|
value = jsonProperty.Value.ToString();
|
||||||
|
debug.Add($"<Item C={column + 2:000} Name=\"{processDataStandardFormatMapping.OldColumnNames[c]}\" DataType=\"8\" XmlType=\"1\" XPath=\"//records/record/{jsonProperty.Name}\" />");
|
||||||
}
|
}
|
||||||
values.Add(value);
|
values.Add(value);
|
||||||
}
|
}
|
||||||
results.Add(string.Join("\t", values));
|
results.Add(string.Join("\t", values));
|
||||||
}
|
}
|
||||||
|
if (Debugger.IsAttached)
|
||||||
|
File.WriteAllText("../../.txt", string.Join(Environment.NewLine, debug.OrderBy(l => l)));
|
||||||
result = new(body: new(results),
|
result = new(body: new(results),
|
||||||
columns: processDataStandardFormatMapping.OldColumnNames,
|
columns: processDataStandardFormatMapping.OldColumnNames,
|
||||||
footer: processDataStandardFormat.Footer,
|
footer: processDataStandardFormat.Footer,
|
||||||
@ -378,7 +388,6 @@ internal class ProcessDataStandardFormat
|
|||||||
{
|
{
|
||||||
if (processDataStandardFormat.InputPDSF is null)
|
if (processDataStandardFormat.InputPDSF is null)
|
||||||
throw new NullReferenceException(nameof(processDataStandardFormat.InputPDSF));
|
throw new NullReferenceException(nameof(processDataStandardFormat.InputPDSF));
|
||||||
#pragma warning disable CA1845, IDE0057
|
|
||||||
string result;
|
string result;
|
||||||
string line;
|
string line;
|
||||||
string value;
|
string value;
|
||||||
@ -398,6 +407,14 @@ internal class ProcessDataStandardFormat
|
|||||||
line = string.Concat(line.Substring(0, line.Length - 1), '}');
|
line = string.Concat(line.Substring(0, line.Length - 1), '}');
|
||||||
lines.Add(line);
|
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(
|
result = string.Concat(
|
||||||
'{',
|
'{',
|
||||||
Environment.NewLine,
|
Environment.NewLine,
|
||||||
@ -426,14 +443,92 @@ internal class ProcessDataStandardFormat
|
|||||||
": ",
|
": ",
|
||||||
processDataStandardFormat.Sequence,
|
processDataStandardFormat.Sequence,
|
||||||
Environment.NewLine,
|
Environment.NewLine,
|
||||||
|
footerText,
|
||||||
|
Environment.NewLine,
|
||||||
'}');
|
'}');
|
||||||
return result;
|
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)
|
internal static void Write(string path, ProcessDataStandardFormat processDataStandardFormat, List<Metrology.WS.Results>? wsResults)
|
||||||
{
|
{
|
||||||
List<string> results = new();
|
List<string> results = new();
|
||||||
|
if (processDataStandardFormat.InputPDSF is null)
|
||||||
|
throw new NullReferenceException(nameof(processDataStandardFormat.InputPDSF));
|
||||||
if (processDataStandardFormat.Sequence is null)
|
if (processDataStandardFormat.Sequence is null)
|
||||||
throw new NullReferenceException(nameof(processDataStandardFormat.Sequence));
|
throw new NullReferenceException(nameof(processDataStandardFormat.Sequence));
|
||||||
string endOffset = "E#######T";
|
string endOffset = "E#######T";
|
||||||
@ -471,25 +566,25 @@ internal class ProcessDataStandardFormat
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
results.Add("END_HEADER");
|
results.Add("END_HEADER");
|
||||||
if (processDataStandardFormat.InputPDSF is not null)
|
results.Add(string.Empty);
|
||||||
{
|
List<char> hyphens = new();
|
||||||
results.Add(string.Empty);
|
results.AddRange(processDataStandardFormat.InputPDSF.Header.Select(l => $"|{l.Replace('\t', '|')}|"));
|
||||||
List<char> hyphens = new();
|
results.Add(string.Empty);
|
||||||
results.AddRange(processDataStandardFormat.InputPDSF.Header.Select(l => l.Replace('\t', '|')));
|
results.Add($"|{string.Join("|", processDataStandardFormat.InputPDSF.Columns)}|");
|
||||||
results.Add(string.Empty);
|
for (int i = 0; i < processDataStandardFormat.InputPDSF.Columns.Count; i++)
|
||||||
results.Add($"|{string.Join("|", processDataStandardFormat.InputPDSF.Columns)}|");
|
hyphens.Add('-');
|
||||||
for (int i = 0; i < processDataStandardFormat.InputPDSF.Columns.Count; i++)
|
results.Add($"|{string.Join("|", hyphens)}|");
|
||||||
hyphens.Add('-');
|
results.AddRange(processDataStandardFormat.InputPDSF.Body.Select(l => $"|{l.Replace('\t', '|')}|"));
|
||||||
results.Add($"|{string.Join("|", hyphens)}|");
|
results.Add(string.Empty);
|
||||||
results.AddRange(processDataStandardFormat.InputPDSF.Body.Select(l => l.Replace('\t', '|')));
|
results.AddRange(processDataStandardFormat.InputPDSF.Footer.Select(l => $"|{l.Replace('\t', '|')}|"));
|
||||||
results.Add(string.Empty);
|
results.Add(string.Empty);
|
||||||
results.AddRange(processDataStandardFormat.InputPDSF.Footer.Select(l => l.Replace('\t', '|')));
|
string xml = GetXml(processDataStandardFormat);
|
||||||
results.Add(string.Empty);
|
results.Add(xml);
|
||||||
results.Add("EOF");
|
results.Add(string.Empty);
|
||||||
results.Add(string.Empty);
|
results.Add("EOF");
|
||||||
string json = GetJson(processDataStandardFormat);
|
results.Add(string.Empty);
|
||||||
results.Add(json);
|
string json = GetJson(processDataStandardFormat);
|
||||||
}
|
results.Add(json);
|
||||||
File.WriteAllText(path, string.Join(Environment.NewLine, results));
|
File.WriteAllText(path, string.Join(Environment.NewLine, results));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -771,6 +866,60 @@ internal class ProcessDataStandardFormat
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal static string GetXml(ProcessDataStandardFormat processDataStandardFormat)
|
||||||
|
{
|
||||||
|
string result;
|
||||||
|
string tag;
|
||||||
|
string value;
|
||||||
|
string[] segments;
|
||||||
|
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++)
|
||||||
|
{
|
||||||
|
lines.Add(" <record>");
|
||||||
|
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];
|
||||||
|
lines.Add(string.Concat(" <", tag, '>', value, "</", tag, '>'));
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[JsonSourceGenerationOptions(WriteIndented = true)]
|
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||||
@ -778,3 +927,9 @@ internal class ProcessDataStandardFormat
|
|||||||
internal partial class JsonElementCollectionSourceGenerationContext : JsonSerializerContext
|
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.Collections.ObjectModel;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace Adaptation.Shared;
|
namespace Adaptation.Shared;
|
||||||
|
|
||||||
public class ProcessDataStandardFormatMapping
|
public class ProcessDataStandardFormatMapping
|
||||||
{
|
{
|
||||||
|
|
||||||
public ReadOnlyCollection<string> BackfillColumns { get; private set; }
|
|
||||||
public ReadOnlyCollection<int> ColumnIndices { get; private set; }
|
public ReadOnlyCollection<int> ColumnIndices { get; private set; }
|
||||||
public ReadOnlyCollection<string> IgnoreColumns { get; private set; }
|
|
||||||
public ReadOnlyCollection<string> IndexOnlyColumns { get; private set; }
|
|
||||||
public ReadOnlyDictionary<string, string> KeyValuePairs { get; private set; }
|
|
||||||
public ReadOnlyCollection<string> NewColumnNames { get; private set; }
|
public ReadOnlyCollection<string> NewColumnNames { get; private set; }
|
||||||
public ReadOnlyCollection<string> OldColumnNames { get; private set; }
|
public ReadOnlyCollection<string> OldColumnNames { get; private set; }
|
||||||
|
|
||||||
public ProcessDataStandardFormatMapping(ReadOnlyCollection<string> backfillColumns,
|
public ProcessDataStandardFormatMapping(ReadOnlyCollection<int> columnIndices,
|
||||||
ReadOnlyCollection<int> columnIndices,
|
|
||||||
ReadOnlyCollection<string> ignoreColumns,
|
|
||||||
ReadOnlyCollection<string> indexOnlyColumns,
|
|
||||||
ReadOnlyDictionary<string, string> keyValuePairs,
|
|
||||||
ReadOnlyCollection<string> newColumnNames,
|
ReadOnlyCollection<string> newColumnNames,
|
||||||
ReadOnlyCollection<string> oldColumnNames)
|
ReadOnlyCollection<string> oldColumnNames)
|
||||||
{
|
{
|
||||||
BackfillColumns = backfillColumns;
|
|
||||||
ColumnIndices = columnIndices;
|
ColumnIndices = columnIndices;
|
||||||
IgnoreColumns = ignoreColumns;
|
|
||||||
IndexOnlyColumns = indexOnlyColumns;
|
|
||||||
KeyValuePairs = keyValuePairs;
|
|
||||||
NewColumnNames = newColumnNames;
|
NewColumnNames = newColumnNames;
|
||||||
OldColumnNames = oldColumnNames;
|
OldColumnNames = oldColumnNames;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal static ProcessDataStandardFormatMapping Get(string processDataStandardFormatMappingOldColumnNames, string processDataStandardFormatMappingNewColumnNames, string processDataStandardFormatMappingColumnIndices)
|
||||||
|
{
|
||||||
|
ProcessDataStandardFormatMapping result;
|
||||||
|
ReadOnlyCollection<string> newColumnNames = new(processDataStandardFormatMappingNewColumnNames.Split(','));
|
||||||
|
ReadOnlyCollection<string> oldColumnNames = new(processDataStandardFormatMappingOldColumnNames.Split(','));
|
||||||
|
ReadOnlyCollection<int> columnIndices = new(processDataStandardFormatMappingColumnIndices.Split(',').Select(int.Parse).ToArray());
|
||||||
|
result = new(columnIndices: columnIndices,
|
||||||
|
newColumnNames: newColumnNames,
|
||||||
|
oldColumnNames: oldColumnNames);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -55,6 +55,22 @@ public class MET08RESIHGCV
|
|||||||
NonThrowTryCatch();
|
NonThrowTryCatch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
[Ignore]
|
||||||
|
#endif
|
||||||
|
[TestMethod]
|
||||||
|
public void Production__v2_60_0__MET08RESIHGCV__MoveMatchingFiles638899177571912731__Columns()
|
||||||
|
{
|
||||||
|
string check = "*.pdsf";
|
||||||
|
MethodBase methodBase = new StackFrame().GetMethod();
|
||||||
|
_MET08RESIHGCV.Production__v2_60_0__MET08RESIHGCV__MoveMatchingFiles();
|
||||||
|
string[] variables = _MET08RESIHGCV.AdaptationTesting.GetVariables(methodBase, check, validatePDSF: false);
|
||||||
|
IFileRead fileRead = _MET08RESIHGCV.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false);
|
||||||
|
Logistics logistics = new(fileRead);
|
||||||
|
_ = AdaptationTesting.ReExtractCompareUpdatePassDirectory(variables, fileRead, logistics);
|
||||||
|
NonThrowTryCatch();
|
||||||
|
}
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
[Ignore]
|
[Ignore]
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user