From e0298fb8f5a4a3bc2c1c3f5a3a07ae2a80a9f247 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Mon, 14 Apr 2025 09:41:36 -0700 Subject: [PATCH] UniqueId replacement for attachments Write input PDSF in output after EOF MoveMatchingFile GetPropertyValue for MoveMatchingFiles ProcessDataStandardFormat over Tuple MoveMatchingFiles to use ProcessDataStandardFormatMapping --- .../OpenInsightMetrologyViewer/WSRequest.cs | 2 +- Adaptation/FileHandlers/Processed/FileRead.cs | 25 +++++++++++++++++++ .../Shared/ProcessDataStandardFormat.cs | 14 ++++++++--- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/Adaptation/FileHandlers/OpenInsightMetrologyViewer/WSRequest.cs b/Adaptation/FileHandlers/OpenInsightMetrologyViewer/WSRequest.cs index 70348b3..ad3bf1c 100644 --- a/Adaptation/FileHandlers/OpenInsightMetrologyViewer/WSRequest.cs +++ b/Adaptation/FileHandlers/OpenInsightMetrologyViewer/WSRequest.cs @@ -221,7 +221,7 @@ public class WSRequest throw new Exception("Invalid *.pdf file count!"); List headerAttachments = new() { - new WS.Attachment(subGroupId, headerId, headerIdDirectory, descriptions[0].HeaderUniqueId, "Data.pdf", pdfFiles[0]) + new WS.Attachment(subGroupId, headerId, headerIdDirectory, $"{logistics.JobID}_{logistics.MID}_{logistics.DateTimeFromSequence:yyyyMMddHHmmssffff}", "Data.pdf", pdfFiles[0]) }; WS.AttachFiles(openInsightMetrologyViewerAPI, headerAttachments, dataAttachments: null); } diff --git a/Adaptation/FileHandlers/Processed/FileRead.cs b/Adaptation/FileHandlers/Processed/FileRead.cs index 9b937b8..21a4050 100644 --- a/Adaptation/FileHandlers/Processed/FileRead.cs +++ b/Adaptation/FileHandlers/Processed/FileRead.cs @@ -129,6 +129,7 @@ public class FileRead : Shared.FileRead, IFileRead string destinationJobIdDirectory = Path.Combine(_JobIdProcessParentDirectory, _Logistics.JobID, directoryName); string sequenceDirectory = Path.Combine(destinationJobIdDirectory, logisticsSequence); string jsonFileName = Path.Combine(sequenceDirectory, $"{Path.GetFileNameWithoutExtension(reportFullPath)}.json"); + MoveMatchingFile(jobIdDirectory, matchDirectories[0]); Directory.Move(matchDirectories[0], destinationJobIdDirectory); if (!Directory.Exists(sequenceDirectory)) _ = Directory.CreateDirectory(sequenceDirectory); @@ -136,6 +137,30 @@ public class FileRead : Shared.FileRead, IFileRead File.WriteAllText(jsonFileName, json); } + private static void MoveMatchingFile(string jobIdDirectory, string matchDirectory) + { + string checkFile; + string jobIdDirectoryFileName; + string matchDirectoryFileName; + string[] jobIdDirectoryFiles = Directory.GetFiles(jobIdDirectory, "*", SearchOption.TopDirectoryOnly); + string[] matchDirectoryFiles = Directory.GetFiles(matchDirectory, "*", SearchOption.TopDirectoryOnly); + foreach (string jobIdDirectoryFile in jobIdDirectoryFiles) + { + jobIdDirectoryFileName = Path.GetFileName(jobIdDirectoryFile); + foreach (string matchDirectoryFile in matchDirectoryFiles) + { + matchDirectoryFileName = Path.GetFileName(matchDirectoryFile); + if (jobIdDirectoryFileName.StartsWith(matchDirectoryFileName)) + { + checkFile = Path.Combine(matchDirectory, Path.GetFileName(matchDirectoryFile)); + if (File.Exists(checkFile)) + continue; + File.Move(jobIdDirectoryFile, checkFile); + } + } + } + } + private Tuple> GetExtractResult(string reportFullPath, DateTime dateTime) { Tuple> results; diff --git a/Adaptation/Shared/ProcessDataStandardFormat.cs b/Adaptation/Shared/ProcessDataStandardFormat.cs index 41c9655..059d613 100644 --- a/Adaptation/Shared/ProcessDataStandardFormat.cs +++ b/Adaptation/Shared/ProcessDataStandardFormat.cs @@ -28,14 +28,17 @@ internal class ProcessDataStandardFormat internal ReadOnlyCollection Body { get; private set; } internal ReadOnlyCollection Columns { get; private set; } internal ReadOnlyCollection Logistics { get; private set; } + internal ReadOnlyCollection InputLines { get; private set; } internal ProcessDataStandardFormat(ReadOnlyCollection body, ReadOnlyCollection columns, + ReadOnlyCollection inputLines, ReadOnlyCollection logistics, long? sequence) { Body = body; Columns = columns; + InputLines = inputLines; Logistics = logistics; Sequence = sequence; } @@ -53,7 +56,7 @@ internal class ProcessDataStandardFormat GetString(SearchFor.Archive, addSpaces, separator); internal static ProcessDataStandardFormat GetEmpty() => - new(new(Array.Empty()), new(Array.Empty()), new(Array.Empty()), null); + new(new(Array.Empty()), new(Array.Empty()), new(Array.Empty()), new(Array.Empty()), null); internal static List PDSFToFixedWidth(string reportFullPath) { @@ -169,7 +172,7 @@ internal class ProcessDataStandardFormat { for (int i = r; i < lines.Length; i++) { - if (lines[i].StartsWith("END_HEADER")) + if (!lines[i].StartsWith("LOGISTICS_") || lines[i].StartsWith("END_HEADER")) break; logistics.Add(lines[i]); } @@ -180,6 +183,7 @@ internal class ProcessDataStandardFormat logistics.Add(lines[1]); result = new(body: body.AsReadOnly(), columns: columns.AsReadOnly(), + inputLines: lines.ToList().AsReadOnly(), logistics: logistics.AsReadOnly(), sequence: null); return result; @@ -234,7 +238,7 @@ internal class ProcessDataStandardFormat { for (int i = r; i < lines.Length; i++) { - if (lines[i].StartsWith("END_HEADER")) + if (!lines[i].StartsWith("LOGISTICS_") || lines[i].StartsWith("END_HEADER")) break; logistics.Add(lines[i]); } @@ -250,6 +254,7 @@ internal class ProcessDataStandardFormat } result = new(body: body.AsReadOnly(), columns: new(columns), + inputLines: lines.ToList().AsReadOnly(), logistics: logistics.AsReadOnly(), sequence: sequence); return result; @@ -341,6 +346,7 @@ internal class ProcessDataStandardFormat } result = new(body: new(results), columns: processDataStandardFormatMapping.OldColumnNames, + inputLines: processDataStandardFormat.InputLines, logistics: processDataStandardFormat.Logistics, sequence: processDataStandardFormat.Sequence); return result; @@ -372,6 +378,8 @@ internal class ProcessDataStandardFormat results.Add("LOGISTICS_COLUMN\tA_LOGISTICS"); results.Add("LOGISTICS_COLUMN\tB_LOGISTICS"); results.AddRange(processDataStandardFormat.Logistics); + results.Add("EOF"); + results.AddRange(processDataStandardFormat.InputLines.Select(l => l.Replace('\t', '|'))); File.WriteAllText(path, string.Join(Environment.NewLine, results)); }