using Adaptation.Shared; using Adaptation.Shared.Metrology; using Adaptation.Shared.Properties; using System; using System.Collections.Generic; using System.IO; 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 RsM.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; } RsM.Detail detail; foreach (RsM.Description description in descriptions) { detail = new RsM.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(); UniqueId = $"{logistics.JobID}_{logistics.MID}_{logistics.DateTimeFromSequence:yyyyMMddHHmmssffff}"; for (int i = 0; i < Details.Count; i++) { Details[i].HeaderUniqueId = UniqueId; Details[i].UniqueId = $"{logistics.JobID}_{logistics.MID}_{logistics.DateTimeFromSequence:yyyyMMddHHmmssffff}_Item-{i + 1}"; } string onlyWSRequest = string.Empty; FilePath = onlyWSRequest; } internal static long GetHeaderId(IFileRead fileRead, Logistics logistics, string openInsightMetrologyViewerAPI, string openInsightMetrologyViewerFileShare, int weekOfYear, WS.Results results, List descriptions) { long result; if (results is not null && results.HeaderId is not null) result = results.HeaderId.Value; else { WSRequest wsRequest = new(fileRead, logistics, descriptions); string directory = Path.Combine(openInsightMetrologyViewerFileShare, logistics.DateTimeFromSequence.Year.ToString(), $"WW{weekOfYear:00}"); (_, WS.Results wsResults) = WS.SendData(openInsightMetrologyViewerAPI, logistics.Sequence, directory, wsRequest); if (wsResults.Success is null || !wsResults.Success.Value) throw new Exception(wsResults.ToString()); result = wsResults.HeaderId.Value; } return result; } #pragma warning disable IDE0060 internal static void PostOpenInsightMetrologyViewerAttachments(IFileRead fileRead, Logistics logistics, string openInsightMetrologyViewerAPI, List descriptions, string matchDirectory, WS.Results results, 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 <{results.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(results, headerIdDirectory, $"{logistics.JobID}_{logistics.MID}_{logistics.DateTimeFromSequence:yyyyMMddHHmmssffff}", "Data.pdf", pdfFiles[0]) }; WS.AttachFiles(openInsightMetrologyViewerAPI, headerAttachments, dataAttachments: null); } }