using System.Collections.ObjectModel; using System.Text.Json; using System.Text.Json.Serialization; using Microsoft.Extensions.Logging; namespace File_Folder_Helper.ADO2025.PI6; internal static partial class Helper20250709 { // [JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)] // [JsonSerializable(typeof(JsonElement[]))] // internal partial class Helper20250709JsonElementSourceGenerationContext : JsonSerializerContext { // } [JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)] [JsonSerializable(typeof(Raw))] private partial class RawSourceGenerationContext : JsonSerializerContext { } private record Raw(int Count, JsonElement[] Records); // cspell::disable private record Reactor([property: JsonPropertyName("id12")] double? Id12, [property: JsonPropertyName("id13")] double? Id13, [property: JsonPropertyName("id15")] double? Id15, [property: JsonPropertyName("id153")] string? Id153, [property: JsonPropertyName("id154")] long? Id154, [property: JsonPropertyName("id16")] double? Id16, [property: JsonPropertyName("id172")] double? Id172, [property: JsonPropertyName("id173")] double? Id173, [property: JsonPropertyName("id176")] double? Id176, [property: JsonPropertyName("id178")] string? Id178, [property: JsonPropertyName("id18")] double? Id18, [property: JsonPropertyName("id183")] double? Id183, [property: JsonPropertyName("id19")] double? Id19, [property: JsonPropertyName("id193")] double? Id193, [property: JsonPropertyName("id21")] double? Id21, [property: JsonPropertyName("id22")] double? Id22, [property: JsonPropertyName("id221")] string? Id221, [property: JsonPropertyName("id222")] string? Id222, [property: JsonPropertyName("id223")] string? Id223, [property: JsonPropertyName("id25")] double? Id25, [property: JsonPropertyName("id26")] double? Id26, [property: JsonPropertyName("id27")] double? Id27, [property: JsonPropertyName("id28")] double? Id28, [property: JsonPropertyName("id29")] double? Id29, [property: JsonPropertyName("id30")] double? Id30, [property: JsonPropertyName("id37")] double? Id37, [property: JsonPropertyName("id38")] double? Id38, [property: JsonPropertyName("id39")] double? Id39, [property: JsonPropertyName("id40")] double? Id40, [property: JsonPropertyName("id41")] double? Id41, [property: JsonPropertyName("id42")] double? Id42, [property: JsonPropertyName("id57")] double? Id57, [property: JsonPropertyName("id58")] double? Id58, [property: JsonPropertyName("id61")] double? Id61, [property: JsonPropertyName("id62")] double? Id62, [property: JsonPropertyName("id78")] long? Id78, [property: JsonPropertyName("id79")] long? Id79, [property: JsonPropertyName("id80")] string? Id80, [property: JsonPropertyName("id81")] long? Id81, [property: JsonPropertyName("id82")] long? Id82, [property: JsonPropertyName("id83")] long? Id83, [property: JsonPropertyName("id84")] long? Id84, [property: JsonPropertyName("id85")] string? Id85, [property: JsonPropertyName("id86")] long? Id86, [property: JsonPropertyName("id87")] long? Id87, [property: JsonPropertyName("id93")] long? Id93, [property: JsonPropertyName("vp93")] long? Vp93, [property: JsonPropertyName("vp154")] long? Vp154, [property: JsonPropertyName("vp78")] long? Vp78, [property: JsonPropertyName("vp83")] long? Vp83, [property: JsonPropertyName("vp176")] double? Vp176, [property: JsonPropertyName("vp80")] string? Vp80, [property: JsonPropertyName("vp85")] string? Vp85, [property: JsonPropertyName("vp153")] string? Vp153, [property: JsonPropertyName("vp221")] string? Vp221, [property: JsonPropertyName("vp222")] string? Vp222, [property: JsonPropertyName("vp223")] string? Vp223, [property: JsonPropertyName("YYYYMMDDhhmmsscc")] string? YYYYMMDDhhmmsscc, [property: JsonPropertyName("CenterTemp")] double? CenterTemp, [property: JsonPropertyName("CenterSetpt")] double? CenterSetpt, [property: JsonPropertyName("FrontTemp")] double? FrontTemp, [property: JsonPropertyName("PPSTEPNAME")] string? PPSTEPNAME, [property: JsonPropertyName("SystemState")] long? SystemState, [property: JsonPropertyName("FrontSetpt")] double? FrontSetpt, [property: JsonPropertyName("LVC1Ratio")] double? LVC1Ratio, [property: JsonPropertyName("LVC1Carrier")] double? LVC1Carrier, [property: JsonPropertyName("TotalWaferCount")] double? TotalWaferCount, [property: JsonPropertyName("TIME")] string? TIME, [property: JsonPropertyName("SideTemp")] double? SideTemp, [property: JsonPropertyName("SCRDrive4")] double? SCRDrive4, [property: JsonPropertyName("SideSetpt")] double? SideSetpt, [property: JsonPropertyName("SCRLOAD4")] double? SCRLOAD4, [property: JsonPropertyName("RearTemp")] double? RearTemp, [property: JsonPropertyName("RearSetpt")] double? RearSetpt, [property: JsonPropertyName("LeftDefaultRecipe")] string? LeftDefaultRecipe, [property: JsonPropertyName("RightDefaultRecipe")] string? RightDefaultRecipe, [property: JsonPropertyName("RecipeCompleteMsg")] string? RecipeCompleteMsg, [property: JsonPropertyName("N2H2Setpt")] double? N2H2Setpt, [property: JsonPropertyName("N2H2Flow")] double? N2H2Flow, [property: JsonPropertyName("HCLSetpt")] double? HCLSetpt, [property: JsonPropertyName("HCLFlow")] double? HCLFlow, [property: JsonPropertyName("HCLHISetpt")] double? HCLHISetpt, [property: JsonPropertyName("HCLHIFlow")] double? HCLHIFlow, [property: JsonPropertyName("NSRCSetpt")] double? NSRCSetpt, [property: JsonPropertyName("NSRCFlow")] double? NSRCFlow, [property: JsonPropertyName("NDILSetpt")] double? NDILSetpt, [property: JsonPropertyName("NDILFlow")] double? NDILFlow, [property: JsonPropertyName("NINJSetpt")] double? NINJSetpt, [property: JsonPropertyName("NINJFlow")] double? NINJFlow, [property: JsonPropertyName("LVC1Setpt")] double? LVC1Setpt, [property: JsonPropertyName("LVC1Flow")] double? LVC1Flow, [property: JsonPropertyName("ROTSetpt")] double? ROTSetpt, [property: JsonPropertyName("ROTSpeed")] double? ROTSpeed, [property: JsonPropertyName("LL1State")] long? LL1State, [property: JsonPropertyName("LL1Init")] long? LL1Init, [property: JsonPropertyName("LL1Lotid")] string? LL1Lotid, [property: JsonPropertyName("LL1WafersIn")] long? LL1WafersIn, [property: JsonPropertyName("LL1WfrCnt")] long? LL1WfrCnt, [property: JsonPropertyName("LL2State")] long? LL2State, [property: JsonPropertyName("LL2Init")] long? LL2Init, [property: JsonPropertyName("LL2Lotid")] string? LL2Lotid, [property: JsonPropertyName("LL2WafersIn")] long? LL2WafersIn, [property: JsonPropertyName("LL2WfrCnt")] long? LL2WfrCnt, [property: JsonPropertyName("ProcessState")] long? ProcessState); // [property: JsonPropertyName("A_BASIC_TYPE")] string? ABasicType, // [property: JsonPropertyName("A_INFO")] string? AInfo, // [property: JsonPropertyName("A_INFO2")] string? AInfo2, // [property: JsonPropertyName("A_JOBID")] string? AJobid, // [property: JsonPropertyName("A_LAYER")] string? ALayer, // [property: JsonPropertyName("A_LAYER2")] string? ALayer2, // [property: JsonPropertyName("A_MES_ENTITY")] string? AMesEntity, // [property: JsonPropertyName("A_MID")] string? AMID, // [property: JsonPropertyName("A_NULL_DATA")] string? ANullData, // [property: JsonPropertyName("A_PPID")] string? APPID, // [property: JsonPropertyName("A_PROCESS_JOBID")] string? AProcessJobid, // [property: JsonPropertyName("A_PRODUCT")] string? AProduct, // [property: JsonPropertyName("A_SEQUENCE")] string? ASequence, // [property: JsonPropertyName("A_WAFER_ID")] string? AWaferId, // [property: JsonPropertyName("A_WAFER_POS")] string? AWaferPos // cspell::enable, [JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, NumberHandling = JsonNumberHandling.AllowReadingFromString)] [JsonSerializable(typeof(Reactor))] private partial class ReactorSourceGenerationContext : JsonSerializerContext { } internal static void JavaScriptObjectNotationToReactor(ILogger logger, List args) { logger.LogInformation(args[0]); logger.LogInformation(args[1]); logger.LogInformation(args[2]); logger.LogInformation(args[3]); logger.LogInformation(args[4]); logger.LogInformation(args[5]); string[] segments; string extension = args[4]; string searchPattern = args[2]; int sizeFilter = int.Parse(args[3]); string[] columns = args[5].Split(','); string sourceDirectory = Path.GetFullPath(args[0].Split('~')[0]); string destinationDirectory = Path.GetFullPath(args[6].Split('~')[0]); string[] directories = Directory.GetDirectories(sourceDirectory, "*", SearchOption.TopDirectoryOnly); JavaScriptObjectNotationTo(logger, sourceDirectory, searchPattern, sizeFilter, extension, columns.AsReadOnly(), destinationDirectory, directories.AsReadOnly()); Helpers.HelperDeleteEmptyDirectories.DeleteEmptyDirectories(logger, sourceDirectory); } private static void JavaScriptObjectNotationTo(ILogger logger, string sourceDirectory, string searchPattern, int sizeFilter, string extension, ReadOnlyCollection columnMapping, string destinationDirectory, ReadOnlyCollection directories) { Raw? raw; string text; string json; string[] files; string checkFile; Reactor? reactor; FileInfo fileInfo; string directoryName; string checkDirectory; foreach (string directory in directories) { if (sizeFilter < 987654321 && Path.GetFileName(directory).Contains('-')) { continue; } files = Directory.GetFiles(directory, searchPattern, SearchOption.TopDirectoryOnly); foreach (string file in files) { fileInfo = new(file); if (fileInfo.LastWriteTime > DateTime.Now.AddSeconds(-5)) { continue; } directoryName = Path.GetFileName(fileInfo.DirectoryName); if (fileInfo.Length > sizeFilter && !directoryName.StartsWith('Z')) { checkDirectory = Path.Combine(sourceDirectory, $"Z{directoryName}"); if (!Directory.Exists(checkDirectory)) { _ = Directory.CreateDirectory(checkDirectory); } checkFile = Path.Combine(checkDirectory, fileInfo.Name); if (File.Exists(checkFile)) { continue; } File.Move(file, checkFile); continue; } checkDirectory = Path.Combine(destinationDirectory, directoryName); if (!Directory.Exists(checkDirectory)) { _ = Directory.CreateDirectory(checkDirectory); } checkFile = Path.Combine(checkDirectory, $"{fileInfo.Name}{extension}"); if (File.Exists(checkFile)) { continue; } if (extension == ".agg") { json = File.ReadAllText(fileInfo.FullName); raw = JsonSerializer.Deserialize(json, RawSourceGenerationContext.Default.Raw); if (raw is null) { continue; } foreach (JsonElement jsonElement in raw.Records) { try { reactor = JsonSerializer.Deserialize(jsonElement.ToString().Replace("\"\"", "null"), ReactorSourceGenerationContext.Default.Reactor); } catch (Exception) { reactor = null; } if (reactor is null) { continue; } if (reactor is null) { continue; } } } } } } }