From fc070d0c82d2f714d68eeb1f36ec0844f082a52c Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Mon, 14 Oct 2024 15:38:29 -0700 Subject: [PATCH] Ready to test --- .../CellInstanceConnectionName.cs | 1 - .../FileHandlers/OpenInsight/FromIQS.cs | 434 ++++++++++++------ Adaptation/FileHandlers/OpenInsight/Root.cs | 47 ++ Adaptation/FileHandlers/json/FileRead.cs | 2 + Adaptation/MET08RESISRP2100.Tests.csproj | 24 +- Adaptation/Shared/FileRead.cs | 50 +- Adaptation/_Tests/Shared/AdaptationTesting.cs | 4 +- MET08RESISRP2100.csproj | 3 +- 8 files changed, 404 insertions(+), 161 deletions(-) create mode 100644 Adaptation/FileHandlers/OpenInsight/Root.cs diff --git a/Adaptation/FileHandlers/CellInstanceConnectionName.cs b/Adaptation/FileHandlers/CellInstanceConnectionName.cs index 9428f16..b9f72a4 100644 --- a/Adaptation/FileHandlers/CellInstanceConnectionName.cs +++ b/Adaptation/FileHandlers/CellInstanceConnectionName.cs @@ -15,7 +15,6 @@ public class CellInstanceConnectionName { nameof(APC) => new APC.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), nameof(Archive) => new Archive.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), - nameof(DownloadSRPxFile) => new DownloadSRPxFile.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), nameof(Dummy) => new Dummy.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), nameof(IQSSi) => new IQSSi.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), nameof(MoveMatchingFiles) => new MoveMatchingFiles.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), diff --git a/Adaptation/FileHandlers/OpenInsight/FromIQS.cs b/Adaptation/FileHandlers/OpenInsight/FromIQS.cs index cfb9fe9..3ba38c0 100644 --- a/Adaptation/FileHandlers/OpenInsight/FromIQS.cs +++ b/Adaptation/FileHandlers/OpenInsight/FromIQS.cs @@ -1,5 +1,6 @@ using Adaptation.Shared; using System; +using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Globalization; @@ -16,65 +17,174 @@ public class FromIQS #nullable enable + private static string GetCommandText(DateTime dateTime) + { // cSpell:disable + List results = new(); + TimeSpan timeSpan = new(dateTime.ToUniversalTime().AddDays(-1).Ticks - new DateTime(1970, 01, 01).Ticks); + long infinityQS = (long)Math.Floor(timeSpan.TotalSeconds); + results.Add(" select count_se_sgtm CountSeSgtm, "); + results.Add(" dateadd(HH, -7, (dateadd(SS, convert(bigint, max_se_sgtm), '19700101'))) DateTime, "); + results.Add(" max_max_se_test MaxMaxSeTest, "); + results.Add(" ( "); + results.Add(" select td.f_name "); + results.Add(" from [SPCEPIWORLD].[dbo].[TEST_DAT] td "); + results.Add(" where td.f_test = max_max_se_test "); + results.Add(" ) MaxMaxSeTestName, "); + results.Add(" max_max_se_val MaxMaxSeVal, "); + results.Add(" max_se_lot MaxSeLot, "); + results.Add(" ( "); + results.Add(" select pl.f_name "); + results.Add(" from [SPCEPIWORLD].[dbo].[PART_LOT] pl "); + results.Add(" where max_se_lot = pl.f_lot "); + results.Add(" ) MaxSeLotName, "); + results.Add(" max_se_part MaxSePart, "); + results.Add(" ( "); + results.Add(" select rd.f_name "); + results.Add(" from [SPCEPIWORLD].[dbo].[PART_DAT] rd "); + results.Add(" where max_se_part = rd.f_part "); + results.Add(" ) MaxSePartName, "); + results.Add(" max_se_prcs MaxSePrcs, "); + results.Add(" ( "); + results.Add(" select rd.f_name "); + results.Add(" from [SPCEPIWORLD].[dbo].[PRCS_DAT] rd "); + results.Add(" where max_se_prcs = rd.f_prcs "); + results.Add(" ) MaxSePrcsName, "); + results.Add(" max_se_sgrp MaxSeSgrp, "); + results.Add(" min_min_se_test MinMinSeTest, "); + results.Add(" ( "); + results.Add(" select td.f_name "); + results.Add(" from [SPCEPIWORLD].[dbo].[TEST_DAT] td "); + results.Add(" where td.f_test = min_min_se_test "); + results.Add(" ) MinMinSeTestName, "); + results.Add(" min_min_se_val MinMinSeVal, "); + results.Add(" min_se_sgrp MinSeSgrp "); + results.Add(" from ( "); + results.Add(" select count_se_sgtm, "); + results.Add(" max_se_lot, "); + results.Add(" max_se_part, "); + results.Add(" max_se_prcs, "); + results.Add(" max_se_sgrp, "); + results.Add(" max_se_sgtm, "); + results.Add(" min_se_sgrp, "); + results.Add(" max(max_se_val) max_max_se_val, "); + results.Add(" min(min_se_val) min_min_se_val, "); + results.Add(" max(max_se_test) max_max_se_test, "); + results.Add(" min(min_se_test) min_min_se_test "); + results.Add(" from ( "); + results.Add(" select count_se_sgtm, "); + results.Add(" max_se_lot, "); + results.Add(" max_se_val, "); + results.Add(" min_se_val, "); + results.Add(" max_se_part, "); + results.Add(" max_se_prcs, "); + results.Add(" max_se_sgrp, "); + results.Add(" max_se_sgtm, "); + results.Add(" max_se_test, "); + results.Add(" min_se_sgrp, "); + results.Add(" min_se_test "); + results.Add(" from ( "); + results.Add(" select "); + results.Add(" max(se.f_lot) max_se_lot, "); + results.Add(" max(se.f_val) max_se_val, "); + results.Add(" min(se.f_lot) min_se_lot, "); + results.Add(" min(se.f_val) min_se_val, "); + results.Add(" max(se.f_part) max_se_part, "); + results.Add(" max(se.f_prcs) max_se_prcs, "); + results.Add(" max(se.f_sgrp) max_se_sgrp, "); + results.Add(" max(se.f_sgtm) max_se_sgtm, "); + results.Add(" max(se.f_test) max_se_test, "); + results.Add(" min(se.f_part) min_se_part, "); + results.Add(" min(se.f_prcs) min_se_prcs, "); + results.Add(" min(se.f_sgrp) min_se_sgrp, "); + results.Add(" min(se.f_sgtm) min_se_sgtm, "); + results.Add(" min(se.f_test) min_se_test, "); + results.Add(" count(se.f_sgtm) count_se_sgtm "); + results.Add(" from [spcepiworld].[dbo].[sgrp_ext] se "); + results.Add(" where se.f_tsno = 1 "); + results.Add(" and se.f_flag = 0 "); + results.Add($" and se.f_sgtm > {infinityQS} "); + results.Add(" group by se.f_sgtm, se.f_prcs, se.f_lot, se.f_test, se.f_val "); + results.Add(" ) qa "); + results.Add(" where qa.count_se_sgtm > 1 "); + results.Add(" and min_se_lot = max_se_lot "); + results.Add(" and min_se_val = max_se_val "); + results.Add(" and min_se_val = max_se_val "); + results.Add(" and min_se_part = max_se_part "); + results.Add(" and min_se_prcs = max_se_prcs "); + results.Add(" and min_se_sgtm = max_se_sgtm "); + results.Add(" and min_se_test = max_se_test "); + results.Add(" ) qb "); + results.Add(" group by count_se_sgtm, "); + results.Add(" max_se_lot, "); + results.Add(" max_se_part, "); + results.Add(" max_se_prcs, "); + results.Add(" max_se_sgrp, "); + results.Add(" max_se_sgtm, "); + results.Add(" min_se_sgrp "); + results.Add(" "); + results.Add(" ) qc "); + results.Add(" order by max_se_sgrp desc "); + results.Add(" for json path "); + return string.Join(Environment.NewLine, results); + } // cSpell:restore + private static string GetCommandText(Logistics logistics, json.Description description, string dateTime, long? subGroupId) { // cSpell:disable - StringBuilder result = new(); - _ = result - .AppendLine(" select iq.ev_count, iq.cl_count, iq.sl_count, iq.se_sgrp, iq.se_sgtm, iq.se_tsno, iq.td_test, iq.pr_name, iq.jd_name, iq.pl_name, iq.pd_name, iq.td_name, iq.se_val ") - .AppendLine(" from ( ") - .AppendLine(" select ") - .AppendLine(" se.f_sgrp se_sgrp, ") - .AppendLine(" se.f_sgtm se_sgtm, ") - .AppendLine(" se.f_tsno se_tsno, ") - .AppendLine(" se.f_val se_val, ") - .AppendLine(" pr.f_name pr_name, ") - .AppendLine(" jd.f_name jd_name, ") - .AppendLine(" pl.f_name pl_name, ") - .AppendLine(" pd.f_name pd_name, ") - .AppendLine(" td.f_test td_test, ") - .AppendLine(" td.f_name td_name, ") - .AppendLine(" (select count(cl.f_part) ") - .AppendLine(" from [spcepiworld].[dbo].[ctrl_lim] cl ") - .AppendLine(" where cl.f_part = pd.f_part ") - .AppendLine(" and cl.f_test = td.f_test ") - .AppendLine(" ) cl_count, ") - .AppendLine(" (select count(sl.f_part) ") - .AppendLine(" from [spcepiworld].[dbo].[spec_lim] sl ") - .AppendLine(" where sl.f_part = pd.f_part ") - .AppendLine(" and sl.f_test = td.f_test ") - .AppendLine(" ) sl_count, ") - .AppendLine(" (select count(ev.f_evnt) ") - .AppendLine(" from [spcepiworld].[dbo].[evnt_inf] ev ") - .AppendLine(" where ev.f_prcs = pr.f_prcs ") - .AppendLine(" and ev.f_part = pd.f_part ") - .AppendLine(" and ev.f_sgtm = se.f_sgtm ") - .AppendLine(" ) ev_count ") - .AppendLine(" from [spcepiworld].[dbo].[sgrp_ext] se ") - .AppendLine(" join [spcepiworld].[dbo].[prcs_dat] pr ") - .AppendLine(" on se.f_prcs = pr.f_prcs ") - .AppendLine(" join [spcepiworld].[dbo].[job_dat] jd ") - .AppendLine(" on se.f_job = jd.f_job ") - .AppendLine(" join [spcepiworld].[dbo].[part_lot] pl ") - .AppendLine(" on se.f_lot = pl.f_lot ") - .AppendLine(" join [spcepiworld].[dbo].[part_dat] pd ") - .AppendLine(" on se.f_part = pd.f_part ") - .AppendLine(" join [spcepiworld].[dbo].[test_dat] td ") - .AppendLine(" on se.f_test = td.f_test ") - .AppendLine(" where se.f_flag = 0 "); + List results = new(); + results.Add(" select iq.ev_count, iq.cl_count, iq.sl_count, iq.se_sgrp, iq.se_sgtm, iq.se_tsno, iq.td_test, iq.pr_name, iq.jd_name, iq.pl_name, iq.pd_name, iq.td_name, iq.se_val "); + results.Add(" from ( "); + results.Add(" select "); + results.Add(" se.f_sgrp se_sgrp, "); + results.Add(" se.f_sgtm se_sgtm, "); + results.Add(" se.f_tsno se_tsno, "); + results.Add(" se.f_val se_val, "); + results.Add(" pr.f_name pr_name, "); + results.Add(" jd.f_name jd_name, "); + results.Add(" pl.f_name pl_name, "); + results.Add(" pd.f_name pd_name, "); + results.Add(" td.f_test td_test, "); + results.Add(" td.f_name td_name, "); + results.Add(" (select count(cl.f_part) "); + results.Add(" from [spcepiworld].[dbo].[ctrl_lim] cl "); + results.Add(" where cl.f_part = pd.f_part "); + results.Add(" and cl.f_test = td.f_test "); + results.Add(" ) cl_count, "); + results.Add(" (select count(sl.f_part) "); + results.Add(" from [spcepiworld].[dbo].[spec_lim] sl "); + results.Add(" where sl.f_part = pd.f_part "); + results.Add(" and sl.f_test = td.f_test "); + results.Add(" ) sl_count, "); + results.Add(" (select count(ev.f_evnt) "); + results.Add(" from [spcepiworld].[dbo].[evnt_inf] ev "); + results.Add(" where ev.f_prcs = pr.f_prcs "); + results.Add(" and ev.f_part = pd.f_part "); + results.Add(" and ev.f_sgtm = se.f_sgtm "); + results.Add(" ) ev_count "); + results.Add(" from [spcepiworld].[dbo].[sgrp_ext] se "); + results.Add(" join [spcepiworld].[dbo].[prcs_dat] pr "); + results.Add(" on se.f_prcs = pr.f_prcs "); + results.Add(" join [spcepiworld].[dbo].[job_dat] jd "); + results.Add(" on se.f_job = jd.f_job "); + results.Add(" join [spcepiworld].[dbo].[part_lot] pl "); + results.Add(" on se.f_lot = pl.f_lot "); + results.Add(" join [spcepiworld].[dbo].[part_dat] pd "); + results.Add(" on se.f_part = pd.f_part "); + results.Add(" join [spcepiworld].[dbo].[test_dat] td "); + results.Add(" on se.f_test = td.f_test "); + results.Add(" where se.f_flag = 0 "); if (subGroupId is not null) - _ = result.Append(" and se.f_sgrp = ").Append(subGroupId).AppendLine(" "); + results.Add($" and se.f_sgrp = {subGroupId} "); if (!string.IsNullOrEmpty(description.RDS)) - _ = result.Append(" and pl.f_name = '").Append(description.RDS).AppendLine("' "); - _ = result - .Append(" and pr.f_name = '").Append(description.Reactor).AppendLine("' ") - .Append(" and pd.f_name = '").Append(description.PSN).AppendLine("' ") - .AppendLine(" and jd.f_name in ('SRP') ") - .Append(" and jd.f_name = '").Append(logistics.MesEntity).AppendLine("' ") - .Append(" and dateadd(HH, -7, (dateadd(SS, convert(bigint, se.f_sgtm), '19700101'))) = '").Append(dateTime).AppendLine("' ") - .AppendLine(" ) as iq ") - .AppendLine(" order by iq.ev_count desc, iq.cl_count desc, iq.sl_count desc, iq.se_sgrp, iq.se_tsno, iq.td_test ") - .AppendLine(" for json path "); - return result.ToString(); + results.Add($" and pl.f_name = '{description.RDS}' "); + results.Add($" and pr.f_name = '{description.Reactor}' "); + results.Add($" and pd.f_name = '{description.PSN}' "); + results.Add(" and jd.f_name in ('SRP') "); + results.Add($" and jd.f_name = '{logistics.MesEntity}' "); + results.Add($" and dateadd(HH, -7, (dateadd(SS, convert(bigint, se.f_sgtm), '19700101'))) = '{dateTime}' "); + results.Add(" ) as iq "); + results.Add(" order by iq.ev_count desc, iq.cl_count desc, iq.sl_count desc, iq.se_sgrp, iq.se_tsno, iq.td_test "); + results.Add(" for json path "); + return string.Join(Environment.NewLine, results); } // cSpell:restore private static StringBuilder GetForJsonPath(string connectionString, string commandText) @@ -89,27 +199,88 @@ public class FromIQS return stringBuilder; } + private static string GetCommandText(List subGroups) + { // cSpell:disable + List results = new(); + results.Add(" update [spcepiworld].[dbo].[sgrp_ext] "); + results.Add(" set f_flag = 1 "); + results.Add(" where f_flag = 0 "); + results.Add($" and f_sgrp in ({string.Join($",{Environment.NewLine} ", subGroups)}) "); + return string.Join(Environment.NewLine, results); + } // cSpell:enable + + private static int? ExecuteNonQuery(string connectionString, string commandText) + { + int? result; + if (string.IsNullOrEmpty(connectionString)) + result = null; + else + { + using SqlConnection sqlConnection = new(connectionString); + sqlConnection.Open(); + using SqlCommand sqlCommand = new(commandText, sqlConnection); + result = sqlCommand.ExecuteNonQuery(); + } + return result; + } + + private static void FlagDuplicates(string connectionString, string json) + { + JsonElement[]? jsonElements = JsonSerializer.Deserialize(json); + JsonSerializerOptions jsonSerializerOptions = new() { PropertyNameCaseInsensitive = true}; + if (jsonElements is not null && jsonElements.Length != 0 && jsonElements[0].ValueKind == JsonValueKind.Object) + { + Root? root; + List collection = new(); + JsonElement[] array = jsonElements.ToArray(); + foreach (JsonElement jsonElement in array) + { + root = JsonSerializer.Deserialize(jsonElement.ToString(), jsonSerializerOptions); + if (root is null || root.MaxSeSgrp < 1) + continue; + if (collection.Count > 99) + break; + collection.Add(root.MaxSeSgrp); + } + if (collection.Count > 0) + { + try + { + string commandText = GetCommandText(collection); + File.WriteAllText("D:/.sql", commandText); + _ = ExecuteNonQuery(connectionString, commandText); + } + catch (Exception) + { } + } + } + } + internal static (long?, int?, string) GetCommandText(string connectionString, Logistics logistics, json.Description description, long breakAfter, long preWait) { - string dateTime; + DateTime dateTime; int? count = null; string commandText; long? result = null; + StringBuilder stringBuilder; string dateFormat = json.Description.GetDateFormat(); if (DateTime.TryParseExact(description.Date, dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dateTimeParsed)) - dateTime = dateTimeParsed.ToString("yyyy-MM-dd HH:mm:ss"); + dateTime = dateTimeParsed; else if (DateTime.TryParse(description.Date, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTimeParsed)) - dateTime = dateTimeParsed.ToString("yyyy-MM-dd HH:mm:ss"); + dateTime = dateTimeParsed; else - dateTime = logistics.DateTimeFromSequence.ToString("yyyy-MM-dd HH:mm:ss"); - commandText = GetCommandText(logistics, description, dateTime, subGroupId: null); + dateTime = logistics.DateTimeFromSequence; + commandText = GetCommandText(dateTime); + stringBuilder = GetForJsonPath(connectionString, commandText); + if (stringBuilder.Length > 0) + FlagDuplicates(connectionString, stringBuilder.ToString()); + commandText = GetCommandText(logistics, description, dateTime.ToString("yyyy-MM-dd HH:mm:ss"), subGroupId: null); for (short i = 0; i < short.MaxValue; i++) { if (DateTime.Now.Ticks > preWait) break; Thread.Sleep(100); } - StringBuilder stringBuilder = new(); for (short z = 0; z < short.MaxValue; z++) { stringBuilder = GetForJsonPath(connectionString, commandText); @@ -228,81 +399,80 @@ public class FromIQS private static string GetCommandText(string[] iqsCopyValues) { // cSpell:disable - StringBuilder result = new(); + List results = new(); if (iqsCopyValues.Length != 4) throw new NotSupportedException(); string find = iqsCopyValues[1]; string replace = iqsCopyValues[3]; - _ = result - .AppendLine(" select pd.f_name [Part Name], ") - .AppendLine(" null [Part Revision], ") - .Append(" '").Append(replace).AppendLine("' [Test Name], ") - .AppendLine(" null [Description], ") - .AppendLine(" null [Lot Number], ") - .AppendLine(" null [Job Name], ") - .AppendLine(" null [Process Name], ") - .AppendLine(" case when sl.f_url = 0 then null else sl.f_url end [Reasonable Limit (Upper)], ") - .AppendLine(" case when sl.f_url = 0 then 0 else 1 end [Alarm Reasonable Limit (Upper)], ") - .AppendLine(" case when sl.f_usl = 0 then null else sl.f_usl end [Specification Limit (Upper)], ") - .AppendLine(" case when sl.f_usl = 0 then 0 else 1 end [Alarm Specification Limit (Upper)], ") - .AppendLine(" case when sl.f_ugb = 0 then null else sl.f_ugb end [Warning Limit (Upper)], ") - .AppendLine(" case when sl.f_ugb = 0 then 0 else 1 end [Alarm Warning Limit (Upper)], ") - .AppendLine(" case when sl.f_tar = 0 then null else sl.f_tar end [Specification Limit (Target)], ") - .AppendLine(" case when sl.f_lgb = 0 then null else sl.f_lgb end [Warning Limit (Lower)], ") - .AppendLine(" case when sl.f_lgb = 0 then 0 else 1 end [Alarm Warning Limit (Lower)], ") - .AppendLine(" case when sl.f_lsl = 0 then null else sl.f_lsl end [Specification Limit (Lower)], ") - .AppendLine(" case when sl.f_lsl = 0 then 0 else 1 end [Alarm Specification Limit (Lower)], ") - .AppendLine(" case when sl.f_lrl = 0 then null else sl.f_lrl end [Reasonable Limit (Lower)], ") - .AppendLine(" case when sl.f_lrl = 0 then 0 else 1 end [Alarm Reasonable Limit (Lower)], ") - .AppendLine(" td.f_name [Original Test Name], ") - .AppendLine(" td.f_test [Test Id], ") - .AppendLine(" ( ") - .AppendLine(" select count(sl_b.f_spec) ") - .AppendLine(" from [spcepiworld].[dbo].[spec_lim] sl_b ") - .AppendLine(" join [spcepiworld].[dbo].[part_dat] pd_b ") - .AppendLine(" on sl_b.f_part = pd_b.f_part ") - .AppendLine(" join [spcepiworld].[dbo].[test_dat] td_b ") - .AppendLine(" on sl_b.f_test = td_b.f_test ") - .AppendLine(" where sl_b.f_prcs = 0 ") - .Append(" and td_b.f_name = '").Append(replace).AppendLine("' ") - .AppendLine(" and pd_b.f_name = pd.f_name ") - .AppendLine(" and sl_b.f_url = sl.f_url ") - .AppendLine(" and sl_b.f_usl = sl.f_usl ") - .AppendLine(" and sl_b.f_ugb = sl.f_ugb ") - .AppendLine(" and sl_b.f_tar = sl.f_tar ") - .AppendLine(" and sl_b.f_lgb = sl.f_lgb ") - .AppendLine(" and sl_b.f_lsl = sl.f_lsl ") - .AppendLine(" and sl_b.f_lrl = sl.f_lrl ") - .AppendLine(" group by sl_b.f_spec ") - .AppendLine(" ) count ") - .AppendLine(" from [spcepiworld].[dbo].[spec_lim] sl ") - .AppendLine(" join [spcepiworld].[dbo].[part_dat] pd ") - .AppendLine(" on sl.f_part = pd.f_part ") - .AppendLine(" join [spcepiworld].[dbo].[test_dat] td ") - .AppendLine(" on sl.f_test = td.f_test ") - .AppendLine(" where sl.f_prcs = 0 ") - .Append(" and td.f_name = '").Append(find).AppendLine("' ") - .AppendLine(" and isnull(( ") - .AppendLine(" select count(sl_b.f_spec) ") - .AppendLine(" from [spcepiworld].[dbo].[spec_lim] sl_b ") - .AppendLine(" join [spcepiworld].[dbo].[part_dat] pd_b ") - .AppendLine(" on sl_b.f_part = pd_b.f_part ") - .AppendLine(" join [spcepiworld].[dbo].[test_dat] td_b ") - .AppendLine(" on sl_b.f_test = td_b.f_test ") - .AppendLine(" where sl_b.f_prcs = 0 ") - .Append(" and td_b.f_name = '").Append(replace).AppendLine("' ") - .AppendLine(" and pd_b.f_name = pd.f_name ") - .AppendLine(" and sl_b.f_url = sl.f_url ") - .AppendLine(" and sl_b.f_usl = sl.f_usl ") - .AppendLine(" and sl_b.f_ugb = sl.f_ugb ") - .AppendLine(" and sl_b.f_tar = sl.f_tar ") - .AppendLine(" and sl_b.f_lgb = sl.f_lgb ") - .AppendLine(" and sl_b.f_lsl = sl.f_lsl ") - .AppendLine(" and sl_b.f_lrl = sl.f_lrl ") - .AppendLine(" group by sl_b.f_spec ") - .AppendLine(" ), 0) = 0 ") - .AppendLine(" for json path "); - return result.ToString(); + results.Add(" select pd.f_name [Part Name], "); + results.Add(" null [Part Revision], "); + results.Add($" '{replace}' [Test Name], "); + results.Add(" null [Description], "); + results.Add(" null [Lot Number], "); + results.Add(" null [Job Name], "); + results.Add(" null [Process Name], "); + results.Add(" case when sl.f_url = 0 then null else sl.f_url end [Reasonable Limit (Upper)], "); + results.Add(" case when sl.f_url = 0 then 0 else 1 end [Alarm Reasonable Limit (Upper)], "); + results.Add(" case when sl.f_usl = 0 then null else sl.f_usl end [Specification Limit (Upper)], "); + results.Add(" case when sl.f_usl = 0 then 0 else 1 end [Alarm Specification Limit (Upper)], "); + results.Add(" case when sl.f_ugb = 0 then null else sl.f_ugb end [Warning Limit (Upper)], "); + results.Add(" case when sl.f_ugb = 0 then 0 else 1 end [Alarm Warning Limit (Upper)], "); + results.Add(" case when sl.f_tar = 0 then null else sl.f_tar end [Specification Limit (Target)], "); + results.Add(" case when sl.f_lgb = 0 then null else sl.f_lgb end [Warning Limit (Lower)], "); + results.Add(" case when sl.f_lgb = 0 then 0 else 1 end [Alarm Warning Limit (Lower)], "); + results.Add(" case when sl.f_lsl = 0 then null else sl.f_lsl end [Specification Limit (Lower)], "); + results.Add(" case when sl.f_lsl = 0 then 0 else 1 end [Alarm Specification Limit (Lower)], "); + results.Add(" case when sl.f_lrl = 0 then null else sl.f_lrl end [Reasonable Limit (Lower)], "); + results.Add(" case when sl.f_lrl = 0 then 0 else 1 end [Alarm Reasonable Limit (Lower)], "); + results.Add(" td.f_name [Original Test Name], "); + results.Add(" td.f_test [Test Id], "); + results.Add(" ( "); + results.Add(" select count(sl_b.f_spec) "); + results.Add(" from [spcepiworld].[dbo].[spec_lim] sl_b "); + results.Add(" join [spcepiworld].[dbo].[part_dat] pd_b "); + results.Add(" on sl_b.f_part = pd_b.f_part "); + results.Add(" join [spcepiworld].[dbo].[test_dat] td_b "); + results.Add(" on sl_b.f_test = td_b.f_test "); + results.Add(" where sl_b.f_prcs = 0 "); + results.Add($" and td_b.f_name = '{replace}' "); + results.Add(" and pd_b.f_name = pd.f_name "); + results.Add(" and sl_b.f_url = sl.f_url "); + results.Add(" and sl_b.f_usl = sl.f_usl "); + results.Add(" and sl_b.f_ugb = sl.f_ugb "); + results.Add(" and sl_b.f_tar = sl.f_tar "); + results.Add(" and sl_b.f_lgb = sl.f_lgb "); + results.Add(" and sl_b.f_lsl = sl.f_lsl "); + results.Add(" and sl_b.f_lrl = sl.f_lrl "); + results.Add(" group by sl_b.f_spec "); + results.Add(" ) count "); + results.Add(" from [spcepiworld].[dbo].[spec_lim] sl "); + results.Add(" join [spcepiworld].[dbo].[part_dat] pd "); + results.Add(" on sl.f_part = pd.f_part "); + results.Add(" join [spcepiworld].[dbo].[test_dat] td "); + results.Add(" on sl.f_test = td.f_test "); + results.Add(" where sl.f_prcs = 0 "); + results.Add($" and td.f_name = '{find}' "); + results.Add(" and isnull(( "); + results.Add(" select count(sl_b.f_spec) "); + results.Add(" from [spcepiworld].[dbo].[spec_lim] sl_b "); + results.Add(" join [spcepiworld].[dbo].[part_dat] pd_b "); + results.Add(" on sl_b.f_part = pd_b.f_part "); + results.Add(" join [spcepiworld].[dbo].[test_dat] td_b "); + results.Add(" on sl_b.f_test = td_b.f_test "); + results.Add(" where sl_b.f_prcs = 0 "); + results.Add($" and td_b.f_name = '{replace}' "); + results.Add(" and pd_b.f_name = pd.f_name "); + results.Add(" and sl_b.f_url = sl.f_url "); + results.Add(" and sl_b.f_usl = sl.f_usl "); + results.Add(" and sl_b.f_ugb = sl.f_ugb "); + results.Add(" and sl_b.f_tar = sl.f_tar "); + results.Add(" and sl_b.f_lgb = sl.f_lgb "); + results.Add(" and sl_b.f_lsl = sl.f_lsl "); + results.Add(" and sl_b.f_lrl = sl.f_lrl "); + results.Add(" group by sl_b.f_spec "); + results.Add(" ), 0) = 0 "); + results.Add(" for json path "); + return string.Join(Environment.NewLine, results); } // cSpell:restore internal static void SaveCopy(string fileConnectorConfigurationSourceFileLocation, string connectionString, string name, string[] iqsCopyValues) diff --git a/Adaptation/FileHandlers/OpenInsight/Root.cs b/Adaptation/FileHandlers/OpenInsight/Root.cs new file mode 100644 index 0000000..0f6be43 --- /dev/null +++ b/Adaptation/FileHandlers/OpenInsight/Root.cs @@ -0,0 +1,47 @@ +using System; +using System.Text.Json.Serialization; + +namespace Adaptation.FileHandlers.OpenInsight; + +public class Root +{ + + [JsonPropertyName("count_se_sgtm")] public long CountSeSgtm { get; } + [JsonPropertyName("date_time")] public DateTime DateTime { get; } + [JsonPropertyName("max_max_se_test")] public long MaxMaxSeTest { get; } + [JsonPropertyName("max_max_se_test_name")] public string MaxMaxSeTestName { get; } + [JsonPropertyName("max_max_se_val")] public double MaxMaxSeVal { get; } + [JsonPropertyName("max_se_lot")] public long MaxSeLot { get; } + [JsonPropertyName("max_se_lot_name")] public string MaxSeLotName { get; } + [JsonPropertyName("max_se_part")] public long MaxSePart { get; } + [JsonPropertyName("max_se_part_name")] public string MaxSePartName { get; } + [JsonPropertyName("max_se_prcs")] public long MaxSePrcs { get; } + [JsonPropertyName("max_se_prcs_name")] public string MaxSePrcsName { get; } + [JsonPropertyName("max_se_sgrp")] public long MaxSeSgrp { get; } + [JsonPropertyName("min_min_se_test")] public long MinMinSeTest { get; } + [JsonPropertyName("min_min_se_test_name")] public string MinMinSeTestName { get; } + [JsonPropertyName("min_min_se_val")] public double MinMinSeVal { get; } + [JsonPropertyName("min_se_sgrp")] public long MinSeSgrp { get; } + + [JsonConstructor] + public Root(long countSeSgtm, DateTime dateTime, long maxMaxSeTest, string maxMaxSeTestName, double maxMaxSeVal, long maxSeLot, string maxSeLotName, long maxSePart, string maxSePartName, long maxSePrcs, string maxSePrcsName, long maxSeSgrp, long minMinSeTest, string minMinSeTestName, double minMinSeVal, long minSeSgrp) + { + CountSeSgtm = countSeSgtm; + DateTime = dateTime; + MaxMaxSeTest = maxMaxSeTest; + MaxMaxSeTestName = maxMaxSeTestName; + MaxMaxSeVal = maxMaxSeVal; + MaxSeLot = maxSeLot; + MaxSeLotName = maxSeLotName; + MaxSePart = maxSePart; + MaxSePartName = maxSePartName; + MaxSePrcs = maxSePrcs; + MaxSePrcsName = maxSePrcsName; + MaxSeSgrp = maxSeSgrp; + MinMinSeTest = minMinSeTest; + MinMinSeTestName = minMinSeTestName; + MinMinSeVal = minMinSeVal; + MinSeSgrp = minSeSgrp; + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/json/FileRead.cs b/Adaptation/FileHandlers/json/FileRead.cs index cfe88ef..0662fcb 100644 --- a/Adaptation/FileHandlers/json/FileRead.cs +++ b/Adaptation/FileHandlers/json/FileRead.cs @@ -27,6 +27,8 @@ public class FileRead : Shared.FileRead, IFileRead throw new Exception(cellInstanceConnectionName); if (_IsDuplicator) throw new Exception(cellInstanceConnectionName); + if (_IsEAFHosted) + NestExistingFiles(_FileConnectorConfiguration); } void IFileRead.Move(Tuple> extractResults, Exception exception) => Move(extractResults); diff --git a/Adaptation/MET08RESISRP2100.Tests.csproj b/Adaptation/MET08RESISRP2100.Tests.csproj index 3b75a8a..41039e7 100644 --- a/Adaptation/MET08RESISRP2100.Tests.csproj +++ b/Adaptation/MET08RESISRP2100.Tests.csproj @@ -49,23 +49,23 @@ - + - - - - - + + + + + - - + + NU1701 - - + + - - + + diff --git a/Adaptation/Shared/FileRead.cs b/Adaptation/Shared/FileRead.cs index 1004c7f..0bbc72e 100644 --- a/Adaptation/Shared/FileRead.cs +++ b/Adaptation/Shared/FileRead.cs @@ -489,6 +489,43 @@ public class FileRead : Properties.IFileRead } } + protected static void NestExistingFiles(FileConnectorConfiguration fileConnectorConfiguration) + { + if (!fileConnectorConfiguration.IncludeSubDirectories.Value) + { + string[] matches = GetMatches(fileConnectorConfiguration); + if (matches is not null && matches.Length > 0) + { + string fileName; + string nestedDirectory = Path.Combine(fileConnectorConfiguration.SourceFileLocation, DateTime.Now.Ticks.ToString()); + if (!Directory.Exists(nestedDirectory)) + _ = Directory.CreateDirectory(nestedDirectory); + foreach (string match in matches) + { + fileName = Path.GetFileName(match); + File.Move(match, Path.Combine(nestedDirectory, fileName)); + } + } + } + } + + protected static string[] GetMatches(FileConnectorConfiguration fileConnectorConfiguration) + { + string[] segments; + string[] results = null; + foreach (string subSourceFileFilter in fileConnectorConfiguration.SourceFileFilters) + { + segments = subSourceFileFilter.Split('\\'); + if (fileConnectorConfiguration.IncludeSubDirectories.Value) + results = Directory.GetFiles(fileConnectorConfiguration.SourceFileLocation, segments.Last(), SearchOption.AllDirectories); + else + results = Directory.GetFiles(fileConnectorConfiguration.SourceFileLocation, segments.Last(), SearchOption.TopDirectoryOnly); + if (results.Length != 0) + break; + } + return results; + } + protected Tuple> ReExtract(IFileRead fileRead, List headerNames, Dictionary keyValuePairs) { Tuple> results; @@ -496,18 +533,7 @@ public class FileRead : Properties.IFileRead results = null; else { - string[] segments; - string[] matches = null; - foreach (string subSourceFileFilter in _FileConnectorConfiguration.SourceFileFilters) - { - segments = subSourceFileFilter.Split('\\'); - if (_FileConnectorConfiguration.IncludeSubDirectories.Value) - matches = Directory.GetFiles(_FileConnectorConfiguration.SourceFileLocation, segments.Last(), SearchOption.AllDirectories); - else - matches = Directory.GetFiles(_FileConnectorConfiguration.SourceFileLocation, segments.Last(), SearchOption.TopDirectoryOnly); - if (matches.Length != 0) - break; - } + string[] matches = GetMatches(_FileConnectorConfiguration); if (matches is null || matches.Length == 0) results = null; else diff --git a/Adaptation/_Tests/Shared/AdaptationTesting.cs b/Adaptation/_Tests/Shared/AdaptationTesting.cs index dad8ffe..8a341d4 100644 --- a/Adaptation/_Tests/Shared/AdaptationTesting.cs +++ b/Adaptation/_Tests/Shared/AdaptationTesting.cs @@ -974,8 +974,8 @@ public class AdaptationTesting : ISMTP } if (!string.IsNullOrEmpty(fileConnectorConfigurationTuple.Item2.AlternateTargetFolder)) { - if (!Directory.Exists(fileConnectorConfigurationTuple.Item2.AlternateTargetFolder)) - _ = Directory.CreateDirectory(fileConnectorConfigurationTuple.Item2.AlternateTargetFolder); + if (!Directory.Exists(fileConnectorConfigurationTuple.Item2.AlternateTargetFolder.Split('|')[0])) + _ = Directory.CreateDirectory(fileConnectorConfigurationTuple.Item2.AlternateTargetFolder.Split('|')[0]); } } catch (IOException ex) diff --git a/MET08RESISRP2100.csproj b/MET08RESISRP2100.csproj index 2eac7e8..74410c3 100644 --- a/MET08RESISRP2100.csproj +++ b/MET08RESISRP2100.csproj @@ -125,8 +125,6 @@ - - @@ -155,6 +153,7 @@ +