java-script-object-notation-to-reactor (Day-Helper-2025-07-09) Dynamic extension for (Day-Helper-2025-07-01)
234 lines
15 KiB
C#
234 lines
15 KiB
C#
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<Worker> logger, List<string> 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<Worker> logger, string sourceDirectory, string searchPattern, int sizeFilter, string extension, ReadOnlyCollection<string> columnMapping, string destinationDirectory, ReadOnlyCollection<string> 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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
} |