using Adaptation.Shared; using Adaptation.Shared.Metrology; using Adaptation.Shared.Properties; using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace Adaptation.FileHandlers.OpenInsightMetrologyViewer; public class WSRequest { public bool SentToMetrology { get; set; } public bool SentToSPC { get; set; } // public int Id { get; set; } public string CellName { get; set; } public string Date { get; set; } public string FilePath { get; set; } public string Layer { get; set; } public string Operator { get; set; } public string PSN { get; set; } public string RDS { get; set; } public string Reactor { get; set; } public string Recipe { get; set; } public string Title { get; set; } public string UniqueId { get; set; } public string Zone { get; set; } public string SineBevelAngle { get; set; } public string XStep { 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; FilePath = string.Empty; CellName = logistics.MesEntity; if (descriptions[0] is not json.Description x) throw new Exception(); Details = new List(); //Header { Date = x.Date; Layer = x.Layer; Operator = x.Employee; PSN = x.PSN; RDS = x.RDS; Reactor = x.Reactor; Recipe = x.Recipe; UniqueId = x.UniqueId; Zone = x.Zone; SineBevelAngle = x.SineBevelAngle; XStep = x.XStep; } json.Detail detail; foreach (json.Description description in descriptions) { detail = new json.Detail { HeaderUniqueId = description.HeaderUniqueId, UniqueId = description.UniqueId, Depth = description.Depth, Raw = description.Raw, Edited = description.Edited, Resistivity = description.Resistivity, CD = description.CD, }; Details.Add(detail); } Date ??= logistics.DateTimeFromSequence.ToString(); if (UniqueId is null && Details.Count != 0) throw new Exception(); } 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[] jsonFiles = Directory.GetFiles(matchDirectory, "*.json", SearchOption.TopDirectoryOnly); if (jsonFiles.Length != 1) throw new Exception($"Invalid source file count for <{results.HeaderId}>!"); List headerAttachments = new() { new WS.Attachment(results, headerIdDirectory, $"{logistics.JobID}_{logistics.MID}_{logistics.DateTimeFromSequence:yyyyMMddHHmmssffff}", "Data.json", jsonFiles.First()) }; WS.AttachFiles(openInsightMetrologyViewerAPI, headerAttachments, dataAttachments: null); } }