Filter copy for InfinityQS

Reactor 43 and 56
This commit is contained in:
2025-08-05 15:53:58 -07:00
parent 67bde58b17
commit c3c4564548
11 changed files with 769 additions and 102 deletions

View File

@ -5,7 +5,7 @@ using Adaptation.Shared.Duplicator;
using Adaptation.Shared.Methods;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text.Json;
@ -15,7 +15,7 @@ namespace Adaptation.FileHandlers.InfinityQS;
public class FileRead : Shared.FileRead, IFileRead
{
private readonly ReadOnlyDictionary<string, string> _SystemStateToNames;
private readonly int _IQSVP12Count;
public FileRead(ISMTP smtp, Dictionary<string, string> fileParameter, string cellInstanceName, int? connectionCount, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList<ModelObjectParameterDefinition> modelObjectParameters, string equipmentDictionaryName, Dictionary<string, List<long>> dummyRuns, Dictionary<long, List<Shared.Metrology.WS.Results>> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) :
base(new Description(), false, smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null)
@ -29,17 +29,7 @@ public class FileRead : Shared.FileRead, IFileRead
throw new Exception(cellInstanceConnectionName);
if (!_IsDuplicator)
throw new Exception(cellInstanceConnectionName);
string[] segments;
Dictionary<string, string> systemStateToNames = new();
ModelObjectParameterDefinition[] systemStates = GetProperties(cellInstanceConnectionName, modelObjectParameters, "ProcessDataStandardFormat.SystemState");
foreach (ModelObjectParameterDefinition modelObjectParameterDefinition in systemStates)
{
segments = modelObjectParameterDefinition.Value.Split('|');
if (segments.Length != 2)
continue;
systemStateToNames.Add(segments[0], segments[1]);
}
_SystemStateToNames = new(systemStateToNames);
_IQSVP12Count = int.Parse(GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "IQS.VP12.Count"));
}
void IFileRead.Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, Exception exception)
@ -117,50 +107,39 @@ public class FileRead : Shared.FileRead, IFileRead
return results;
}
private static int? GetKeyColumnIndex(string[] columns, string keyColumn)
private void CopyAndMoveFile(JsonElement[] jsonElements)
{
#nullable enable
int? result = null;
for (int i = 0; i < columns.Length; i++)
string day = $"{_Logistics.DateTimeFromSequence:yyyy-MM-dd}";
string segment = _Logistics.FileInfo.Name.Split('-')[0].Split('_')[0];
string weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
string weekDirectory = $"{_Logistics.DateTimeFromSequence:yyyy}_Week_{weekOfYear}";
string destinationDirectory = Path.Combine(_FileConnectorConfiguration.TargetFileLocation, weekDirectory, day, segment);
if (!Directory.Exists(destinationDirectory))
_ = Directory.CreateDirectory(destinationDirectory);
string checkFile = Path.Combine(destinationDirectory, _Logistics.FileInfo.Name);
if (File.Exists(checkFile))
File.Delete(checkFile);
File.Copy(_Logistics.FileInfo.FullName, checkFile);
if (jsonElements.Length != 1 || jsonElements[0].ValueKind != JsonValueKind.Object)
File.Delete(_Logistics.FileInfo.FullName);
else
{
if (columns[i] != keyColumn)
continue;
result = i;
break;
try
{
Six six = JsonSerializer.Deserialize(jsonElements[0].GetRawText(), SixSourceGenerationContext.Default.Six) ?? throw new Exception($"{nameof(Six)} deserialization failed");
if (six.VP12Count < _IQSVP12Count)
File.Delete(_Logistics.FileInfo.FullName);
else
{
string duplicateDirectory = Path.Combine(_FileConnectorConfiguration.SourceFileLocation, _CellInstanceName);
if (!Directory.Exists(duplicateDirectory))
_ = Directory.CreateDirectory(duplicateDirectory);
string duplicateFile = Path.Combine(duplicateDirectory, _Logistics.FileInfo.Name);
File.Move(_Logistics.FileInfo.FullName, duplicateFile);
}
}
catch (Exception) { File.Delete(_Logistics.FileInfo.FullName); }
}
return result;
}
private ReadOnlyCollection<string> GetSystemStateValues(List<string> lines, string[] columns, int keyColumnIndex)
{
List<string> results = new();
string[] values;
string? systemState;
string keyColumnValue;
for (int i = 7; i < lines.Count; i++)
{
values = lines[i].Split('\t');
if (values.Length != columns.Length)
continue;
keyColumnValue = values[keyColumnIndex];
if (string.IsNullOrEmpty(keyColumnValue))
continue;
if (!_SystemStateToNames.TryGetValue(keyColumnValue, out systemState))
continue;
if (results.Contains(systemState))
continue;
results.Add(systemState);
}
return new(results);
}
private void CopyFile(string reportFullPath)
{
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);
}
private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime _)
@ -173,7 +152,7 @@ public class FileRead : Shared.FileRead, IFileRead
List<Shared.Properties.IDescription> descriptions = GetDuplicatorDescriptions(jsonElements);
Test[] tests = (from l in descriptions select (Test)l.Test).ToArray();
if (_IsEAFHosted && _FileConnectorConfiguration.FileScanningIntervalInSeconds > 0)
CopyFile(reportFullPath);
CopyAndMoveFile(jsonElements);
results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(string.Join(Environment.NewLine, processDataStandardFormat.Logistics), tests, jsonElements, new List<FileInfo>());
return results;
}