using Adaptation.Shared; using Adaptation.Shared.Metrology; using Adaptation.Shared.Properties; using System; using System.Collections.Generic; using System.IO; using System.Text.Json; namespace Adaptation.FileHandlers.OpenInsightMetrologyViewer; public class WSRequest { public bool SentToMetrology { get; set; } public bool SentToSPC { get; set; } // public string AutoOptimizeGain { get; set; } public string AutoProbeHeightSet { get; set; } public string Avg { get; set; } public string CellName { get; set; } public string DLRatio { get; set; } public string DataReject { get; set; } public string Date { get; set; } public string Engineer { get; set; } public string EquipId { get; set; } public string FileName { get; set; } public string FilePath { get; set; } public int Id { get; set; } public string Layer { get; set; } public string LotId { get; set; } public string Op { get; set; } public string PSN { get; set; } public string RDS { get; set; } public string Reactor { get; set; } public string Recipe { get; set; } public string ResistivitySpec { get; set; } public string Run { get; set; } public string SemiRadial { get; set; } public string StDev { get; set; } public string Temp { get; set; } public string UniqueId { get; set; } public string Zone { get; set; } public List Details { get; protected set; } [Obsolete("For json")] public WSRequest() { } #pragma warning disable IDE0060 internal WSRequest(IFileRead fileRead, Logistics logistics, List descriptions, string processDataStandardFormat = null) #pragma warning restore IDE0060 { Id = -1; CellName = logistics.MesEntity; Details = new List(); if (descriptions[0] is not txt.Description x) throw new Exception(); //Header { AutoOptimizeGain = x.AutoOptimizeGain; AutoProbeHeightSet = x.AutoProbeHeightSet; Avg = x.Avg; DLRatio = x.DLRatio; DataReject = x.DataReject; Date = x.Date; Op = x.Employee; Engineer = x.Engineer; EquipId = logistics.MesEntity; FileName = x.FileName; Layer = x.Layer; LotId = x.Lot; PSN = x.PSN; RDS = x.RDS; Reactor = x.Reactor; Recipe = x.Recipe; ResistivitySpec = x.ResistivitySpec; Run = x.Run; SemiRadial = x.SemiRadial; StDev = x.StdDev; Temp = x.Temp; UniqueId = x.UniqueId; Zone = x.Zone; } txt.Detail detail; foreach (txt.Description description in descriptions) { detail = new txt.Detail { HeaderUniqueId = description.HeaderUniqueId, Merit = description.Merit, Pt = description.Pt, R = description.R, Rs = description.Rs, T = description.T, UniqueId = description.UniqueId }; Details.Add(detail); } Date ??= logistics.DateTimeFromSequence.ToString(); if (UniqueId is null && Details.Count != 0) UniqueId = Details[0].HeaderUniqueId; string onlyWSRequest = string.Empty; FilePath = onlyWSRequest; } internal static long GetHeaderId(IFileRead fileRead, Logistics logistics, string openInsightMetrologyViewerAPI, string openInsightMetrologyViewerFileShare, int weekOfYear, string json, List descriptions) { long result; if (string.IsNullOrEmpty(json)) { WSRequest wsRequest = new(fileRead, logistics, descriptions); string directory = Path.Combine(openInsightMetrologyViewerFileShare, logistics.DateTimeFromSequence.Year.ToString(), $"WW{weekOfYear:00}"); (json, WS.Results wsResults) = WS.SendData(openInsightMetrologyViewerAPI, logistics.Sequence, directory, wsRequest); if (!wsResults.Success) throw new Exception(wsResults.ToString()); } WS.Results metrologyWSRequest = JsonSerializer.Deserialize(json, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); result = metrologyWSRequest.HeaderID; return result; } #pragma warning disable IDE0060 internal static void PostOpenInsightMetrologyViewerAttachments(IFileRead fileRead, Logistics logistics, string openInsightMetrologyViewerAPI, List descriptions, string matchDirectory, string subGroupId, long headerId, string headerIdDirectory) #pragma warning restore IDE0060 { string[] txtFiles = Directory.GetFiles(matchDirectory, "*.txt", SearchOption.TopDirectoryOnly); if (txtFiles.Length != 1) throw new Exception($"Invalid source file count for <{headerId}>!"); List pdfFiles = new(); pdfFiles.AddRange(Directory.GetFiles(matchDirectory, "*.pdf_old", SearchOption.TopDirectoryOnly)); foreach (string pdfFile in pdfFiles) File.Delete(pdfFile); pdfFiles.Clear(); pdfFiles.AddRange(Directory.GetFiles(matchDirectory, "*.pdf", SearchOption.TopDirectoryOnly)); foreach (string pdfFile in pdfFiles) File.Move(pdfFile, Path.ChangeExtension(pdfFile, ".pdf_old")); pdfFiles.Clear(); if (pdfFiles.Count == 0) throw new Exception("Invalid *.pdf file count!"); List headerAttachments = new() { new WS.Attachment(subGroupId, headerId, headerIdDirectory, descriptions[0].HeaderUniqueId, "Data.pdf", pdfFiles[0]) }; WS.AttachFiles(openInsightMetrologyViewerAPI, headerAttachments, dataAttachments: null); } }