Delete SelfHost PackageReference

cellInstanceVersion.EdaConnection.PortNumber
Convert before throwing the error
CA1862 and GetWeekOfYear for WritePDSF
Removed Open Insight API IFX Directory from Save
dotnet_diagnostic
Delete File if Exists
yml ec fix
net8.0
This commit is contained in:
2024-04-09 12:55:04 -07:00
parent ae47e7dbd5
commit 3355fb3318
89 changed files with 914 additions and 1687 deletions

View File

@ -128,7 +128,7 @@ public class FileRead : Shared.FileRead, IFileRead
string jobIdDirectory = Path.Combine(_JobIdParentDirectory, _Logistics.JobID);
if (!Directory.Exists(jobIdDirectory))
_ = Directory.CreateDirectory(jobIdDirectory);
if (!Directory.GetDirectories(jobIdDirectory).Any())
if (Directory.GetDirectories(jobIdDirectory).Length == 0)
File.Copy(reportFullPath, Path.Combine(destinationArchiveDirectory, Path.GetFileName(reportFullPath)));
else
{

View File

@ -157,7 +157,7 @@ public class FileRead : Shared.FileRead, IFileRead
if (!Directory.Exists(inProcessDirectory))
_ = Directory.CreateDirectory(inProcessDirectory);
files = Directory.GetFiles(inProcessDirectory, "*", SearchOption.AllDirectories);
if (files.Any())
if (files.Length != 0)
{
if (files.Length > 250)
throw new Exception("Safety net!");

View File

@ -111,7 +111,7 @@ public class FileRead : Shared.FileRead, IFileRead
private void SaveIQSFile(string reportFullPath, DateTime dateTime, List<txt.Description> descriptions, Test[] tests)
{
if (!tests.Any())
if (tests.Length == 0)
_LastLines = string.Empty;
else
{

View File

@ -1,31 +0,0 @@
#if NETFRAMEWORK && NET48
using System.Web.Http;
using System.Web.Http.Results;
namespace Adaptation.FileHandlers.MoveAllFiles.ApiController;
[Route("api/[controller]")]
public class BarcodeController : System.Web.Http.ApiController
{
#nullable enable
#pragma warning disable CA1822
public OkNegotiatedContentResult<string> Get()
#pragma warning restore CA1822
{
string result = "record";
return Ok(result);
}
[Route("{id}")]
#pragma warning disable CA1822
public JsonResult<PostReplay?> Post(string id)
#pragma warning restore CA1822
{
PostReplay? postReplay = BarcodeHelper.Post(id, Request.Content);
return Json(postReplay);
}
}
#endif

View File

@ -1,120 +0,0 @@
using Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
using Adaptation.FileHandlers.TIBCO.Transport;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
namespace Adaptation.FileHandlers.MoveAllFiles.ApiController;
public class BarcodeHelper
{
#nullable enable
private static string? GetJson(HttpContent? httpContent)
{
string? result;
if (httpContent is null)
result = null;
else
{
Task<string> task = httpContent.ReadAsStringAsync();
task.Wait();
result = task.Result;
}
return result;
}
private static void Write(string barcodeHostFileShare, string cellInstanceConnectionName, Notification notification)
{
DateTime dateTime = DateTime.Now;
Calendar calendar = new CultureInfo("en-US").Calendar;
string weekOfYear = $"{dateTime:yyyy}_Week_{calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday):00}";
string directory = Path.Combine(barcodeHostFileShare, weekOfYear, dateTime.ToString("yyyy-MM-dd_HH"));
if (!Directory.Exists(directory))
_ = Directory.CreateDirectory(directory);
File.WriteAllText(Path.Combine(directory, $"{cellInstanceConnectionName}.csv"), notification.LastScanServiceResultValue);
}
private static Job GetJob(string lsl2SQLConnectionString, string metrologyFileShare, string barcodeHostFileShare, string id, Notification notification)
{
Job result;
string lastScan = notification.LastScanServiceResultValue.Length < 3 || notification.LastScanServiceResultValue[1] is not 't' and not 'T' || notification.LastScanServiceResultValue[0] != '1' ? notification.LastScanServiceResultValue : notification.LastScanServiceResultValue.Substring(2);
string json = string.Concat("{\"Area\": \"Si\", \"EquipmentType\": \"MET08THFTIRQS408M\", \"MesEntity\": \"", id, "\", \"Sequence\": \"", notification.KeyPressEvent.DateTime.Ticks, "\", \"MID\": \"-", lastScan, "-\", \"Recipe\": \"Recipe\"}");
result = new(lsl2SQLConnectionString, metrologyFileShare, barcodeHostFileShare, json);
return result;
}
private static Root? GetRoot(string rds)
{
HttpClient httpClient = new();
string url = $"{FileRead.OpenInsightApplicationProgrammingInterface}/materials/rds/{rds}";
string httpClientResult = httpClient.GetStringAsync(url).Result;
Root? root = JsonSerializer.Deserialize<Root>(httpClientResult);
httpClient.Dispose();
return root;
}
private static void SetQaMetTests(string toolClass, Root root, Dictionary<string, List<QaMetTest>> qaMetTests)
{
List<QaMetTest>? collection;
foreach (PrsStage prsStage in root.Rds.ProdSpec.PrsStages)
{
if (prsStage.QaMetTests is null)
continue;
foreach (QaMetTest qaMetTest in prsStage.QaMetTests)
{
if (qaMetTest.ToolClass != toolClass)
continue;
if (!qaMetTests.TryGetValue(prsStage.Stage, out collection))
{
qaMetTests.Add(prsStage.Stage, new());
if (!qaMetTests.TryGetValue(prsStage.Stage, out collection))
throw new Exception();
}
collection.Add(qaMetTest);
}
}
}
internal static PostReplay? Post(string id, HttpContent? httpContent)
{
PostReplay? result;
string? json = GetJson(httpContent);
if (json is null)
result = null;
else
{
Notification? notification = JsonSerializer.Deserialize<Notification>(json);
if (notification is null)
result = null;
else
{
Job? job;
string? mid;
Dictionary<string, List<QaMetTest>> qaMetTests = new();
Write(TIBCO.FileRead.BarcodeHostFileShare, id, notification.Value);
try
{
const string hyphen = "-";
job = GetJob(TIBCO.FileRead.LSL2SQLConnectionString, TIBCO.FileRead.MetrologyFileShare, TIBCO.FileRead.BarcodeHostFileShare, id, notification.Value);
mid = job.SpecName == hyphen || job.ProcessSpecName == hyphen ? $"{job.ProcessType}" : $"{job.ProcessType}.{job.SpecName}.{job.ProcessSpecName}";
Root? root = GetRoot(job.LotName);
if (root is not null)
SetQaMetTests(notification.Value.ToolClass, root, qaMetTests);
}
catch (Exception ex)
{
mid = string.Concat(ex.Message, Environment.NewLine, ex.StackTrace);
}
result = new(mid, qaMetTests); // .ProdSpec.PrsStages[0].QaMetTests[0].Recipe);
}
}
return result;
}
}

View File

@ -1,277 +0,0 @@
namespace Adaptation.FileHandlers.MoveAllFiles.ApiController;
/// <summary>
/// Mapping for this can be found here: https://github.com/torvalds/linux/blob/master/include/uapi/linux/input-event-codes.h
/// </summary>
public enum EventCode
{
Reserved = 0,
Esc = 1,
Num1 = 2,
Num2 = 3,
Num3 = 4,
Num4 = 5,
Num5 = 6,
Num6 = 7,
Num7 = 8,
Num8 = 9,
Num9 = 10,
Num0 = 11,
Minus = 12,
Equal = 13,
Backspace = 14,
Tab = 15,
Q = 16,
W = 17,
E = 18,
R = 19,
T = 20,
Y = 21,
U = 22,
I = 23,
O = 24,
P = 25,
LeftBrace = 26,
RightBrace = 27,
Enter = 28,
LeftCtrl = 29,
A = 30,
S = 31,
D = 32,
F = 33,
G = 34,
H = 35,
J = 36,
K = 37,
L = 38,
Semicolon = 39,
Apostrophe = 40,
Grave = 41,
LeftShift = 42,
Backslash = 43,
Z = 44,
X = 45,
C = 46,
V = 47,
B = 48,
N = 49,
M = 50,
Comma = 51,
Dot = 52,
Slash = 53,
RightShift = 54,
KpAsterisk = 55,
LeftAlt = 56,
Space = 57,
Capslock = 58,
F1 = 59,
Pf2 = 60,
F3 = 61,
F4 = 62,
F5 = 63,
F6 = 64,
F7 = 65,
F8 = 66,
Pf9 = 67,
F10 = 68,
Numlock = 69,
ScrollLock = 70,
Kp7 = 71,
Kp8 = 72,
Kp9 = 73,
PkpMinus = 74,
Kp4 = 75,
Kp5 = 76,
Kp6 = 77,
KpPlus = 78,
Kp1 = 79,
Kp2 = 80,
Kp3 = 81,
Kp0 = 82,
KpDot = 83,
Zenkakuhankaku = 85,
//102ND = 86,
F11 = 87,
F12 = 88,
Ro = 89,
Katakana = 90,
Hiragana = 91,
Henkan = 92,
Katakanahiragana = 93,
Muhenkan = 94,
KpJpComma = 95,
KpEnter = 96,
RightCtrl = 97,
KpSlash = 98,
SysRq = 99,
RightAlt = 100,
LineFeed = 101,
Home = 102,
Up = 103,
Pageup = 104,
Left = 105,
Right = 106,
End = 107,
Down = 108,
Pagedown = 109,
Insert = 110,
Delete = 111,
Macro = 112,
Mute = 113,
VolumeDown = 114,
VolumeUp = 115,
Power = 116, // SC System Power Down
KpEqual = 117,
KpPlusMinus = 118,
Pause = 119,
Scale = 120, // AL Compiz Scale (Expose)
KpComma = 121,
Hangeul = 122,
Hanja = 123,
Yen = 124,
LeftMeta = 125,
RightMeta = 126,
Compose = 127,
Stop = 128, // AC Stop
Again = 129,
Props = 130, // AC Properties
Undo = 131, // AC Undo
Front = 132,
Copy = 133, // AC Copy
Open = 134, // AC Open
Paste = 135, // AC Paste
Find = 136, // AC Search
Cut = 137, // AC Cut
Help = 138, // AL Integrated Help Center
Menu = 139, // Menu (show menu)
Calc = 140, // AL Calculator
Setup = 141,
Sleep = 142, // SC System Sleep
Wakeup = 143, // System Wake Up
File = 144, // AL Local Machine Browser
Sendfile = 145,
DeleteFile = 146,
Xfer = 147,
Prog1 = 148,
Prog2 = 149,
Www = 150, // AL Internet Browser
MsDos = 151,
Coffee = 152, // AL Terminal Lock/Screensaver
RotateDisplay = 153, // Display orientation for e.g. tablets
CycleWindows = 154,
Mail = 155,
Bookmarks = 156, // AC Bookmarks
Computer = 157,
Back = 158, // AC Back
Forward = 159, // AC Forward
CloseCd = 160,
EjectCd = 161,
EjectCloseCd = 162,
NextSong = 163,
PlayPause = 164,
PreviousSong = 165,
StopCd = 166,
Record = 167,
Rewind = 168,
Phone = 169, // Media Select Telephone
Iso = 170,
Config = 171, // AL Consumer Control Configuration
Homepage = 172, // AC Home
Refresh = 173, // AC Refresh
Exit = 174, // AC Exit
Move = 175,
Edit = 176,
ScrollUp = 177,
ScrollDown = 178,
KpLeftParen = 179,
KpRightParen = 180,
New = 181, // AC New
Redo = 182, // AC Redo/Repeat
F13 = 183,
F14 = 184,
F15 = 185,
F16 = 186,
F17 = 187,
F18 = 188,
F19 = 189,
F20 = 190,
F21 = 191,
F22 = 192,
F23 = 193,
F24 = 194,
PlayCd = 200,
PauseCd = 201,
Prog3 = 202,
Prog4 = 203,
Dashboard = 204, // AL Dashboard
Suspend = 205,
Close = 206, // AC Close
Play = 207,
FastForward = 208,
BassBoost = 209,
Print = 210, // AC Print
Hp = 211,
Camera = 212,
Sound = 213,
Question = 214,
Email = 215,
Chat = 216,
Search = 217,
Connect = 218,
Finance = 219, // AL Checkbook/Finance
Sport = 220,
Shop = 221,
AltErase = 222,
Cancel = 223, // AC Cancel
BrightnessDown = 224,
BrightnessUp = 225,
Media = 226,
SwitchVideoMode = 227, // Cycle between available video outputs (Monitor/LCD/TV-out/etc)
KbdIllumToggle = 228,
KbdIllumDown = 229,
KbdIllumUp = 230,
Send = 231, // AC Send
Reply = 232, // AC Reply
ForwardMail = 233, // AC Forward Msg
Save = 234, // AC Save
Documents = 235,
Battery = 236,
Bluetooth = 237,
Wlan = 238,
Uwb = 239,
Unknown = 240,
VideoNext = 241, // drive next video source
VideoPrev = 242, // drive previous video source
BrightnessCycle = 243, // brightness up, after max is min
BrightnessAuto = 244, // Set Auto Brightness: manual brightness control is off, rely on ambient
DisplayOff = 245, // display device to off state
Wwan = 246, // Wireless WAN (LTE, UMTS, GSM, etc.)
RfKill = 247, // Key that controls all radios
MicMute = 248, // Mute / unmute the microphone
LeftMouse = 272,
RightMouse = 273,
MiddleMouse = 274,
MouseBack = 275,
MouseForward = 276,
ToolFinger = 325,
ToolQuintTap = 328,
Touch = 330,
ToolDoubleTap = 333,
ToolTripleTap = 334,
ToolQuadTap = 335,
Mic = 582
}

View File

@ -1,20 +0,0 @@
using System;
namespace Adaptation.FileHandlers.MoveAllFiles.ApiController;
public readonly struct KeyPressEvent
{
public DateTime DateTime { get; }
public EventCode EventCode { get; }
public KeyState KeyState { get; }
public TimeSpan TimeSpan { get; }
public KeyPressEvent(DateTime dateTime, EventCode eventCode, KeyState keyState, TimeSpan timeSpan)
{
DateTime = dateTime;
EventCode = eventCode;
KeyState = keyState;
TimeSpan = timeSpan;
}
}

View File

@ -1,8 +0,0 @@
namespace Adaptation.FileHandlers.MoveAllFiles.ApiController;
public enum KeyState
{
KeyUp,
KeyDown,
KeyHold
}

View File

@ -1,20 +0,0 @@
namespace Adaptation.FileHandlers.MoveAllFiles.ApiController;
public readonly struct Notification
{
public KeyPressEvent KeyPressEvent { get; }
public string LastScanServiceResultValue { get; }
public string ToolClass { get; }
public string HttpContentBody { get; }
[System.Text.Json.Serialization.JsonConstructor]
public Notification(KeyPressEvent keyPressEvent, string lastScanServiceResultValue, string toolClass, string httpContentBody)
{
KeyPressEvent = keyPressEvent;
LastScanServiceResultValue = lastScanServiceResultValue;
ToolClass = toolClass;
HttpContentBody = httpContentBody;
}
}

View File

@ -1,21 +0,0 @@
using Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
using System.Collections.Generic;
namespace Adaptation.FileHandlers.MoveAllFiles.ApiController;
public class PostReplay
{
#nullable enable
public string? MId { get; }
public Dictionary<string, List<QaMetTest>> QaMetTests { get; }
[System.Text.Json.Serialization.JsonConstructor]
public PostReplay(string? mid, Dictionary<string, List<QaMetTest>> qaMetTests)
{
MId = mid;
QaMetTests = qaMetTests;
}
}

View File

@ -7,10 +7,6 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Text.Json;
#if NETFRAMEWORK && NET48
using System.Web.Http;
using System.Web.Http.SelfHost;
#endif
namespace Adaptation.FileHandlers.MoveAllFiles;
@ -19,13 +15,7 @@ public class FileRead : Shared.FileRead, IFileRead
#nullable enable
public const string HttpSelfHostConfigurationBaseAddress = "http://localhost:8080/";
public const string OpenInsightApplicationProgrammingInterface = "https://oi-prod-ec-api.mes.infineon.com/api/oiWizard";
private long? _TickOffset;
#if NETFRAMEWORK && NET48
private readonly HttpSelfHostServer? _HttpSelfHostServer;
#endif
public FileRead(ISMTP smtp, Dictionary<string, string> fileParameter, string cellInstanceName, int? connectionCount, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList<ModelObjectParameterDefinition> modelObjectParameters, string equipmentDictionaryName, Dictionary<string, List<long>> dummyRuns, Dictionary<long, List<string>> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) :
base(new Description(), false, smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null)
@ -39,32 +29,6 @@ public class FileRead : Shared.FileRead, IFileRead
throw new Exception(cellInstanceConnectionName);
if (_IsDuplicator)
throw new Exception(cellInstanceConnectionName);
string barcodeHostFileShare = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Barcode.Host.FileShare");
if (barcodeHostFileShare != TIBCO.FileRead.BarcodeHostFileShare)
throw new NotSupportedException($"Update configuration for [{nameof(TIBCO.FileRead.BarcodeHostFileShare)}]");
string httpSelfHostConfigurationBaseAddress = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Http.Self.Host.Configuration.Base.Address");
if (httpSelfHostConfigurationBaseAddress != HttpSelfHostConfigurationBaseAddress)
throw new NotSupportedException($"Update configuration for [{nameof(HttpSelfHostConfigurationBaseAddress)}]");
string lsl2SQLConnectionString = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "ConnectionString.LSL2SQL");
if (lsl2SQLConnectionString != TIBCO.FileRead.LSL2SQLConnectionString)
throw new NotSupportedException($"Update configuration for [{nameof(TIBCO.FileRead.LSL2SQLConnectionString)}]");
string metrologyFileShare = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Metrology.FileShare");
if (metrologyFileShare != TIBCO.FileRead.MetrologyFileShare)
throw new NotSupportedException($"Update configuration for [{nameof(TIBCO.FileRead.MetrologyFileShare)}]");
string openInsightApplicationProgrammingInterface = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "OpenInsight.Application.Programming.Interface");
if (openInsightApplicationProgrammingInterface != OpenInsightApplicationProgrammingInterface)
throw new NotSupportedException($"Update configuration for [{nameof(OpenInsightApplicationProgrammingInterface)}]");
#if NETFRAMEWORK && NET48
if (!_IsEAFHosted)
_HttpSelfHostServer = null;
else
{
HttpSelfHostConfiguration config = new(httpSelfHostConfigurationBaseAddress);
_ = config.Routes.MapHttpRoute("API Default", "api/{controller}/{id}", new { id = RouteParameter.Optional });
_HttpSelfHostServer = new(config);
_HttpSelfHostServer.OpenAsync().Wait();
}
#endif
}
#nullable disable

View File

@ -1,18 +0,0 @@
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
public class BackSide
{
[JsonPropertyName("scratches")]
public int? Scratches { get; set; }
[JsonPropertyName("scratchLen")]
public int? ScratchLen { get; set; }
[JsonPropertyName("nodules")]
public object Nodules { get; set; }
[JsonPropertyName("spikes")]
public object Spikes { get; set; }
}

View File

@ -1,21 +0,0 @@
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
public class CleanInsp
{
[JsonPropertyName("keyId")]
public int KeyId { get; set; }
[JsonPropertyName("stage")]
public string Stage { get; set; }
[JsonPropertyName("cleans")]
public Cleans Cleans { get; set; }
[JsonPropertyName("inspection")]
public Inspection Inspection { get; set; }
[JsonPropertyName("surfScan")]
public SurfScan SurfScan { get; set; }
}

View File

@ -1,22 +0,0 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
public class Cleans
{
[JsonPropertyName("cleanRecipe")]
public object CleanRecipe { get; set; }
[JsonPropertyName("cleanSigReq")]
public bool CleanSigReq { get; set; }
[JsonPropertyName("cleanTools")]
public List<object> CleanTools { get; set; }
[JsonPropertyName("specs")]
public Spec Specs { get; set; }
[JsonPropertyName("operations")]
public List<object> Operations { get; set; }
}

View File

@ -1,9 +0,0 @@
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
public class CustEpiPart
{
[JsonPropertyName("keyId")]
public string KeyId { get; set; }
}

View File

@ -1,12 +0,0 @@
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
public class EpiPart
{
[JsonPropertyName("keyID")]
public int KeyID { get; set; }
[JsonPropertyName("waferSize")]
public string WaferSize { get; set; }
}

View File

@ -1,33 +0,0 @@
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
public class FrontSide
{
[JsonPropertyName("lpd")]
public int? Lpd { get; set; }
[JsonPropertyName("scratches")]
public int? Scratches { get; set; }
[JsonPropertyName("scratchLen")]
public string ScratchLen { get; set; }
[JsonPropertyName("pits")]
public int? Pits { get; set; }
[JsonPropertyName("mounds")]
public int? Mounds { get; set; }
[JsonPropertyName("stackFaults")]
public int? StackFaults { get; set; }
[JsonPropertyName("spikes")]
public int? Spikes { get; set; }
[JsonPropertyName("spots")]
public int? Spots { get; set; }
[JsonPropertyName("blDefects")]
public int? BlDefects { get; set; }
}

View File

@ -1,27 +0,0 @@
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
public class Inspection
{
[JsonPropertyName("microscope")]
public bool Microscope { get; set; }
[JsonPropertyName("brightlight")]
public bool Brightlight { get; set; }
[JsonPropertyName("inspSigReq")]
public bool InspSigReq { get; set; }
[JsonPropertyName("inspInterval")]
public int? InspInterval { get; set; }
[JsonPropertyName("frontSide")]
public FrontSide FrontSide { get; set; }
[JsonPropertyName("backSide")]
public BackSide BackSide { get; set; }
[JsonPropertyName("specs")]
public Spec Specs { get; set; }
}

View File

@ -1,49 +0,0 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
public class ProdSpec
{
// [JsonPropertyName("keyId")]
// public int KeyId { get; set; }
// [JsonPropertyName("specType")]
// public string SpecType { get; set; }
// [JsonPropertyName("status")]
// public string Status { get; set; }
// [JsonPropertyName("minutesPerWafer")]
// public double MinutesPerWafer { get; set; }
// [JsonPropertyName("proveInTime")]
// public double ProveInTime { get; set; }
// [JsonPropertyName("layerType")]
// public string LayerType { get; set; }
// [JsonPropertyName("reactorType")]
// public string ReactorType { get; set; }
// [JsonPropertyName("susceptorType")]
// public string SusceptorType { get; set; }
// [JsonPropertyName("tubePressureType")]
// public string TubePressureType { get; set; }
// [JsonPropertyName("recipeLayers")]
// public List<RecipeLayer> RecipeLayers { get; set; }
// [JsonPropertyName("prodVers")]
// public List<ProdVer> ProdVers { get; set; }
// [JsonPropertyName("epiPart")]
// public EpiPart EpiPart { get; set; }
// [JsonPropertyName("custEpiParts")]
// public List<CustEpiPart> CustEpiParts { get; set; }
[JsonPropertyName("prsStages")]
public List<PrsStage> PrsStages { get; set; }
}

View File

@ -1,9 +0,0 @@
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
public class ProdVer
{
[JsonPropertyName("keyId")]
public int KeyId { get; set; }
}

View File

@ -1,28 +0,0 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
public class PrsStage
{
// [JsonPropertyName("keyId")]
// public string KeyId { get; set; }
// [JsonPropertyName("psn")]
// public int Psn { get; set; }
[JsonPropertyName("stage")]
public string Stage { get; set; }
// [JsonPropertyName("cleans")]
// public Cleans Cleans { get; set; }
// [JsonPropertyName("inspection")]
// public Inspection Inspection { get; set; }
// [JsonPropertyName("surfscan")]
// public SurfScan Surfscan { get; set; }
[JsonPropertyName("qaMetTests")]
public List<QaMetTest> QaMetTests { get; set; }
}

View File

@ -1,51 +0,0 @@
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
public class QaMetTest
{
[JsonPropertyName("test")]
public string Test { get; set; }
[JsonPropertyName("property")]
public string Property { get; set; }
[JsonPropertyName("propertyDesc")]
public string PropertyDesc { get; set; }
[JsonPropertyName("toolClass")]
public string ToolClass { get; set; }
[JsonPropertyName("recipe")]
public string Recipe { get; set; }
[JsonPropertyName("recipePattern")]
public string RecipePattern { get; set; }
[JsonPropertyName("min")]
public object Min { get; set; }
[JsonPropertyName("max")]
public object Max { get; set; }
[JsonPropertyName("phaseMin")]
public object PhaseMin { get; set; }
[JsonPropertyName("slots")]
public object Slots { get; set; }
[JsonPropertyName("wfrQty")]
public int? WfrQty { get; set; }
[JsonPropertyName("reactSched")]
public bool? ReactSched { get; set; }
[JsonPropertyName("interval")]
public int? Interval { get; set; }
[JsonPropertyName("start")]
public int? Start { get; set; }
[JsonPropertyName("sequence")]
public string Sequence { get; set; }
}

View File

@ -1,96 +0,0 @@
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
public class Rds
{
[JsonPropertyName("keyId")]
public int KeyId { get; set; }
[JsonPropertyName("reactor")]
public int Reactor { get; set; }
// [JsonPropertyName("workOrder")]
// public int WorkOrder { get; set; }
// [JsonPropertyName("cassNo")]
// public int CassNo { get; set; }
// [JsonPropertyName("combStatus")]
// public string CombStatus { get; set; }
// [JsonPropertyName("partNo")]
// public int PartNo { get; set; }
// [JsonPropertyName("PSN")]
// public int PSN { get; set; }
// [JsonPropertyName("entryId")]
// public string EntryId { get; set; }
// [JsonPropertyName("entryDtm")]
// public string EntryDtm { get; set; }
// [JsonPropertyName("preEpiSig")]
// public string PreEpiSig { get; set; }
// [JsonPropertyName("preEpiSigDtm")]
// public string PreEpiSigDtm { get; set; }
// [JsonPropertyName("operatorIn")]
// public string OperatorIn { get; set; }
// [JsonPropertyName("dtmIn")]
// public string DtmIn { get; set; }
// [JsonPropertyName("operatorOut")]
// public string OperatorOut { get; set; }
// [JsonPropertyName("dtmOut")]
// public string DtmOut { get; set; }
// [JsonPropertyName("postEpiSig")]
// public string PostEpiSig { get; set; }
// [JsonPropertyName("postEpiSigDtm")]
// public string PostEpiSigDtm { get; set; }
// [JsonPropertyName("supVerSig")]
// public string SupVerSig { get; set; }
// [JsonPropertyName("supVerSigDtm")]
// public string SupVerSigDtm { get; set; }
// [JsonPropertyName("shipDtm")]
// public object ShipDtm { get; set; }
// [JsonPropertyName("subPartNo")]
// public int SubPartNo { get; set; }
// [JsonPropertyName("shipNo")]
// public object ShipNo { get; set; }
// [JsonPropertyName("cassWaferQty")]
// public int CassWaferQty { get; set; }
// [JsonPropertyName("loadLockSide")]
// public string LoadLockSide { get; set; }
// [JsonPropertyName("waferSize")]
// public string WaferSize { get; set; }
// [JsonPropertyName("reactorType")]
// public string ReactorType { get; set; }
[JsonPropertyName("prodSpec")]
public ProdSpec ProdSpec { get; set; }
// [JsonPropertyName("cleanInsp")]
// public List<CleanInsp> CleanInsp { get; set; }
// [JsonPropertyName("woMatQA")]
// public WoMatQA WoMatQA { get; set; }
// [JsonPropertyName("rdsLayers")]
// public List<RdsLayer> RdsLayers { get; set; }
}

View File

@ -1,63 +0,0 @@
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
public class RdsLayer
{
[JsonPropertyName("keyID")]
public string KeyID { get; set; }
[JsonPropertyName("EpiTime")]
public double EpiTime { get; set; }
[JsonPropertyName("DiluentAdjParam")]
public int DiluentAdjParam { get; set; }
[JsonPropertyName("DopantFlow")]
public double DopantFlow { get; set; }
[JsonPropertyName("HCLFlow")]
public object HCLFlow { get; set; }
[JsonPropertyName("BakeTime")]
public string BakeTime { get; set; }
[JsonPropertyName("EpiH2Flow")]
public int EpiH2Flow { get; set; }
[JsonPropertyName("TCSFlow")]
public int TCSFlow { get; set; }
[JsonPropertyName("DCSFlow")]
public object DCSFlow { get; set; }
[JsonPropertyName("FOffset")]
public int FOffset { get; set; }
[JsonPropertyName("SOffset")]
public int SOffset { get; set; }
[JsonPropertyName("ROffset")]
public int ROffset { get; set; }
[JsonPropertyName("Etch1")]
public string Etch1 { get; set; }
[JsonPropertyName("Etch2")]
public string Etch2 { get; set; }
[JsonPropertyName("Etch3")]
public string Etch3 { get; set; }
[JsonPropertyName("AUX1")]
public object AUX1 { get; set; }
[JsonPropertyName("AUX2")]
public object AUX2 { get; set; }
[JsonPropertyName("ULTemp")]
public int ULTemp { get; set; }
[JsonPropertyName("SuscEtch")]
public object SuscEtch { get; set; }
}

View File

@ -1,69 +0,0 @@
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
public class RecipeLayer
{
[JsonPropertyName("layerNo")]
public int LayerNo { get; set; }
[JsonPropertyName("layerId")]
public string LayerId { get; set; }
[JsonPropertyName("layerType")]
public string LayerType { get; set; }
[JsonPropertyName("layerRecipe")]
public int LayerRecipe { get; set; }
[JsonPropertyName("layerDopant")]
public string LayerDopant { get; set; }
[JsonPropertyName("layerThickMin")]
public double LayerThickMin { get; set; }
[JsonPropertyName("layerThickTarget")]
public double LayerThickTarget { get; set; }
[JsonPropertyName("layerThickMax")]
public double LayerThickMax { get; set; }
[JsonPropertyName("layerThickUnits")]
public string LayerThickUnits { get; set; }
[JsonPropertyName("layerThickAMin")]
public object LayerThickAMin { get; set; }
[JsonPropertyName("layerThickATarget")]
public object LayerThickATarget { get; set; }
[JsonPropertyName("layerThickAMaxes")]
public object LayerThickAMaxes { get; set; }
[JsonPropertyName("layerThickAUnits")]
public object LayerThickAUnits { get; set; }
[JsonPropertyName("layerResMin")]
public double LayerResMin { get; set; }
[JsonPropertyName("layerResTarget")]
public int LayerResTarget { get; set; }
[JsonPropertyName("layerResMax")]
public double LayerResMax { get; set; }
[JsonPropertyName("layerResUnits")]
public string LayerResUnits { get; set; }
[JsonPropertyName("layerSResMin")]
public object LayerSResMin { get; set; }
[JsonPropertyName("layerSResTarget")]
public object LayerSResTarget { get; set; }
[JsonPropertyName("layerSResMax")]
public object LayerSResMax { get; set; }
[JsonPropertyName("layerSResUnits")]
public object LayerSResUnits { get; set; }
}

View File

@ -1,15 +0,0 @@
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
public class Root
{
[JsonPropertyName("rds")]
public Rds Rds { get; set; }
[JsonPropertyName("_links")]
public object Links { get; set; }
[JsonPropertyName("_class")]
public string Class { get; set; }
}

View File

@ -1,73 +0,0 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
public class Spec
{
[JsonPropertyName("recipe")]
public string Recipe { get; set; }
[JsonPropertyName("defect")]
public int Defect { get; set; }
[JsonPropertyName("haze")]
public int Haze { get; set; }
[JsonPropertyName("sampleQty")]
public int SampleQty { get; set; }
[JsonPropertyName("tools")]
public List<object> Tools { get; set; }
[JsonPropertyName("recipes")]
public List<object> Recipes { get; set; }
[JsonPropertyName("microscopeReq")]
public bool MicroscopeReq { get; set; }
[JsonPropertyName("brightlightReq")]
public bool BrightlightReq { get; set; }
[JsonPropertyName("lpd")]
public int Lpd { get; set; }
[JsonPropertyName("scratches")]
public int Scratches { get; set; }
[JsonPropertyName("scratchLen")]
public int ScratchLen { get; set; }
[JsonPropertyName("pits")]
public int Pits { get; set; }
[JsonPropertyName("mounds")]
public int Mounds { get; set; }
[JsonPropertyName("stackFaults")]
public int StackFaults { get; set; }
[JsonPropertyName("spikes")]
public int Spikes { get; set; }
[JsonPropertyName("spots")]
public int Spots { get; set; }
[JsonPropertyName("fov")]
public int Fov { get; set; }
[JsonPropertyName("blDefects")]
public int BlDefects { get; set; }
[JsonPropertyName("bsideScratches")]
public int BsideScratches { get; set; }
[JsonPropertyName("bsideScratchLen")]
public int BsideScratchLen { get; set; }
[JsonPropertyName("bsideNodules")]
public object BsideNodules { get; set; }
[JsonPropertyName("bsideSpikes")]
public object BsideSpikes { get; set; }
}

View File

@ -1,13 +0,0 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
public class SurfScan
{
[JsonPropertyName("surfscanSigReq")]
public bool SurfscanSigReq { get; set; }
[JsonPropertyName("surfscanRecipes")]
public List<SurfscanRecipe> SurfscanRecipes { get; set; }
}

View File

@ -1,10 +0,0 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
public class SurfScan2
{
[JsonPropertyName("specs")]
public List<Spec> Specs { get; set; }
}

View File

@ -1,18 +0,0 @@
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
public class SurfscanRecipe
{
[JsonPropertyName("recipe")]
public string Recipe { get; set; }
[JsonPropertyName("defects")]
public int Defects { get; set; }
[JsonPropertyName("haze")]
public int Haze { get; set; }
[JsonPropertyName("sampleSize")]
public int SampleSize { get; set; }
}

View File

@ -1,73 +0,0 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
public class Test
{
[JsonPropertyName("stage")]
public string Stage { get; set; }
[JsonPropertyName("profile")]
public string Profile { get; set; }
[JsonPropertyName("prop")]
public string Prop { get; set; }
[JsonPropertyName("toolClass")]
public string ToolClass { get; set; }
[JsonPropertyName("recipe")]
public string Recipe { get; set; }
[JsonPropertyName("recipePattern")]
public string RecipePattern { get; set; }
[JsonPropertyName("specMin")]
public double SpecMin { get; set; }
[JsonPropertyName("specMax")]
public double SpecMax { get; set; }
[JsonPropertyName("specSlot")]
public object SpecSlot { get; set; }
[JsonPropertyName("testSlot")]
public object TestSlot { get; set; }
[JsonPropertyName("testResult")]
public List<double> TestResult { get; set; }
[JsonPropertyName("testSig")]
public string TestSig { get; set; }
[JsonPropertyName("testSigDtm")]
public string TestSigDtm { get; set; }
[JsonPropertyName("specStdDev")]
public object SpecStdDev { get; set; }
[JsonPropertyName("testStdDev")]
public object TestStdDev { get; set; }
[JsonPropertyName("specWfrQty")]
public int SpecWfrQty { get; set; }
[JsonPropertyName("dataPoints")]
public List<List<object>> DataPoints { get; set; }
[JsonPropertyName("testResultMin")]
public List<object> TestResultMin { get; set; }
[JsonPropertyName("testResultMax")]
public List<object> TestResultMax { get; set; }
[JsonPropertyName("testOutOfSpec")]
public bool TestOutOfSpec { get; set; }
[JsonPropertyName("phaseMin")]
public object PhaseMin { get; set; }
[JsonPropertyName("failReason")]
public object FailReason { get; set; }
}

View File

@ -1,13 +0,0 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace Adaptation.FileHandlers.MoveAllFiles.OpenInsight;
public class WoMatQA
{
[JsonPropertyName("keyId")]
public string KeyId { get; set; }
[JsonPropertyName("tests")]
public List<Test> Tests { get; set; }
}

View File

@ -6,7 +6,6 @@ using Adaptation.Shared.Methods;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading;
@ -129,7 +128,7 @@ public class FileRead : Shared.FileRead, IFileRead
for (int i = 0; i < int.MaxValue; i++)
{
found = Directory.GetFiles(searchDirectory, fileName, SearchOption.AllDirectories);
if (found.Any())
if (found.Length != 0)
{
results.AddRange(found);
break;
@ -205,7 +204,7 @@ public class FileRead : Shared.FileRead, IFileRead
Thread.Sleep(500);
}
}
if (postCollection.Any())
if (postCollection.Count != 0)
{
Thread.Sleep(500);
StringBuilder stringBuilder = new();

View File

@ -21,7 +21,6 @@ public class FileRead : Shared.FileRead, IFileRead
private readonly string _IqsConnectionString;
private readonly string _OpenInsightFilePattern;
private readonly string _OpenInsightApiECDirectory;
private readonly string _OpenInsightApiIFXDirectory;
public FileRead(ISMTP smtp, Dictionary<string, string> fileParameter, string cellInstanceName, int? connectionCount, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList<ModelObjectParameterDefinition> modelObjectParameters, string equipmentDictionaryName, Dictionary<string, List<long>> dummyRuns, Dictionary<long, List<string>> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) :
base(new Description(), false, smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null)
@ -38,7 +37,6 @@ public class FileRead : Shared.FileRead, IFileRead
_LastLines = string.Empty;
_IqsConnectionString = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "IQS.ConnectionString");
_OpenInsightApiECDirectory = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "API.EC.Directory");
_OpenInsightApiIFXDirectory = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "API.IFX.Directory");
_OpenInsightFilePattern = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "OpenInsight.FilePattern");
}
@ -188,7 +186,7 @@ public class FileRead : Shared.FileRead, IFileRead
_ = Directory.CreateDirectory(duplicateDirectory);
}
string duplicateFile = Path.Combine(duplicateDirectory, Path.GetFileName(reportFullPath));
if (!descriptions.Any() || !tests.Any())
if (descriptions.Count == 0 || tests.Length == 0)
_LastLines = string.Empty;
else
{
@ -210,7 +208,7 @@ public class FileRead : Shared.FileRead, IFileRead
else
collection.Add(new(new ScopeInfo(tests[0], $"{subGroupId.Value} {_OpenInsightFilePattern}"), lines.Item1));
string weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
FromIQS.Save(_OpenInsightApiECDirectory, _OpenInsightApiIFXDirectory, _Logistics, reportFullPath, logistics, descriptions.First(), lines.Item1, subGroupId, weekOfYear);
FromIQS.Save(_OpenInsightApiECDirectory, _Logistics, reportFullPath, logistics, descriptions.First(), lines.Item1, subGroupId, weekOfYear);
}
if (!Directory.Exists(duplicateDirectory))
_ = Directory.CreateDirectory(duplicateDirectory);

View File

@ -17,7 +17,7 @@ public class FromIQS
#nullable enable
private static string GetCommandText(Logistics logistics, txt.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 ")
@ -58,7 +58,7 @@ public class FromIQS
.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(" join [spcepiworld].[dbo].[test_dat] td ")
.AppendLine(" on se.f_test = td.f_test ")
.AppendLine(" where se.f_flag = 0 ");
if (subGroupId is not null)
@ -75,7 +75,7 @@ public class FromIQS
.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();
}
} // cSpell:restore
private static StringBuilder GetForJsonPath(string connectionString, string commandText)
{
@ -135,17 +135,17 @@ public class FromIQS
else
{
JsonElement[]? jsonElements = JsonSerializer.Deserialize<JsonElement[]>(stringBuilder.ToString());
if (jsonElements is null || !jsonElements.Any() || jsonElements[0].ValueKind != JsonValueKind.Object)
if (jsonElements is null || jsonElements.Length == 0 || jsonElements[0].ValueKind != JsonValueKind.Object)
commandText = stringBuilder.ToString();
else
{
JsonProperty[] jsonProperties = jsonElements[0].EnumerateObject().ToArray();
if (!jsonProperties.Any() || jsonProperties[3].Name != "se_sgrp" || !long.TryParse(jsonProperties[3].Value.ToString(), out long subGroupId))
if (jsonProperties.Length == 0 || jsonProperties[3].Name != "se_sgrp" || !long.TryParse(jsonProperties[3].Value.ToString(), out long subGroupId))
commandText = stringBuilder.ToString();
else
{
result = subGroupId;
if (jsonProperties.Any() && jsonProperties[0].Name == "ev_count" && int.TryParse(jsonProperties[0].Value.ToString(), out int evCount))
if (jsonProperties.Length != 0 && jsonProperties[0].Name == "ev_count" && int.TryParse(jsonProperties[0].Value.ToString(), out int evCount))
count = evCount;
}
}
@ -204,40 +204,26 @@ public class FromIQS
return result;
}
internal static void Save(string openInsightApiECDirectory, string openInsightApiIFXDirectory, Logistics logistics, string reportFullPath, string logisticLines, txt.Description description, string lines, long? subGroupId, string weekOfYear)
internal static void Save(string openInsightApiECDirectory, Logistics logistics, string reportFullPath, string logisticLines, txt.Description description, string lines, long? subGroupId, string weekOfYear)
{
string checkFile;
string fileName = Path.GetFileName(reportFullPath);
string json = GetJson(logistics, logisticLines, description);
string? ecPathRoot = Path.GetPathRoot(openInsightApiECDirectory);
string? ifxPathRoot = Path.GetPathRoot(openInsightApiIFXDirectory);
bool ecExists = ecPathRoot is not null && Directory.Exists(ecPathRoot);
bool ifxExists = ifxPathRoot is not null && Directory.Exists(ifxPathRoot);
string weekYear = $"{logistics.DateTimeFromSequence:yyyy}_Week_{weekOfYear}";
string ecDirectory = Path.Combine(openInsightApiECDirectory, weekYear, $"-{description.PSN}", $"-{description.Reactor}", $"-{description.RDS}", $"-{subGroupId}");
string ifxDirectory = Path.Combine(openInsightApiIFXDirectory, weekYear, $"-{description.PSN}", $"-{description.Reactor}", $"-{description.RDS}", $"-{subGroupId}");
if (ecExists && !Directory.Exists(ecDirectory))
_ = Directory.CreateDirectory(ecDirectory);
if (ifxExists && !Directory.Exists(ifxDirectory))
_ = Directory.CreateDirectory(ifxDirectory);
checkFile = Path.Combine(ecDirectory, fileName);
if (ecExists && !File.Exists(checkFile))
File.Copy(reportFullPath, checkFile);
checkFile = Path.Combine(ifxDirectory, fileName);
if (ifxExists && !File.Exists(checkFile))
File.Copy(reportFullPath, checkFile);
checkFile = Path.Combine(ecDirectory, $"{logistics.DateTimeFromSequence.Ticks}.txt");
if (ecExists && !File.Exists(checkFile))
File.WriteAllText(checkFile, lines);
checkFile = Path.Combine(ifxDirectory, $"{logistics.DateTimeFromSequence.Ticks}.txt");
if (ifxExists && !File.Exists(checkFile))
File.WriteAllText(checkFile, lines);
checkFile = Path.Combine(ecDirectory, $"{logistics.DateTimeFromSequence.Ticks}.json");
if (ecExists && !File.Exists(checkFile))
File.WriteAllText(checkFile, json);
checkFile = Path.Combine(ifxDirectory, $"{logistics.DateTimeFromSequence.Ticks}.json");
if (ifxExists && !File.Exists(checkFile))
File.WriteAllText(checkFile, json);
}
#nullable disable

View File

@ -31,7 +31,7 @@ public class FileRead : Shared.FileRead, IFileRead
throw new Exception(cellInstanceConnectionName);
if (!_IsDuplicator)
throw new Exception(cellInstanceConnectionName);
_OpenInsightMetrologyViewerFileShare = @"\\messv02ecc1.ec.local\EC_Metrology_Si\MetrologyAttachments\SP1RunHeader_";
_OpenInsightMetrologyViewerFileShare = @"\\mesfs.infineon.com\EC_Metrology_Si\MetrologyAttachments\SP1RunHeader_";
_OpenInsightMetrologyViewerAPI = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "OpenInsight.MetrologyViewerAPI");
}
@ -117,6 +117,8 @@ public class FileRead : Shared.FileRead, IFileRead
if (!Directory.Exists(directory))
_ = Directory.CreateDirectory(directory);
string fullPath = Path.Combine(directory, Path.GetFileName(reportFullPath));
if (File.Exists(fullPath))
File.Delete(fullPath);
File.Copy(reportFullPath, fullPath);
WSRequest wsRequest = new(this, _Logistics, descriptions, fullPath);
(string json, WS.Results wsResults) = WS.SendData(_OpenInsightMetrologyViewerAPI, wsRequest);

View File

@ -609,7 +609,7 @@ public class WSRequest
Details.Add(detail);
}
Date = logistics.DateTimeFromSequence.ToString();
if (UniqueID is null && Details.Any())
if (UniqueID is null && Details.Count != 0)
UniqueID = Details[0].HeaderUniqueID;
}
@ -651,8 +651,6 @@ public class WSRequest
if (summaryFiles.Length != 1)
throw new Exception($"Invalid source file count for <{wsResultsHeaderID}>!{Environment.NewLine}{json}");
string[] prnFiles = Directory.GetFiles(matchDirectory, "WaferMap*.prn", SearchOption.TopDirectoryOnly);
if (prnFiles.Length == 0 || prnFiles.Length != descriptions.Count)
throw new Exception("Invalid WaferMap*.prn file count!");
List<string> pdfFiles = new();
foreach (string prnFile in prnFiles.OrderBy(l => l))
pdfFiles.Add(ConvertSourceFileToPdf(ghostPCLFileName, prnFile));

View File

@ -121,13 +121,13 @@ public class FileRead : Shared.FileRead, IFileRead
_ = Directory.CreateDirectory(jobIdDirectory);
string json;
string[] matchDirectories = GetInProcessDirectory(jobIdDirectory);
if (!_StaticRuns.ContainsKey(_Logistics.Sequence))
if (!_StaticRuns.TryGetValue(_Logistics.Sequence, out List<string> collection))
json = string.Empty;
else
{
if (_StaticRuns[_Logistics.Sequence].Count != 1)
if (collection.Count != 1)
throw new Exception($"{nameof(_StaticRuns)} has too many values for {_Logistics.Sequence}!");
json = _StaticRuns[_Logistics.Sequence][0];
json = collection[0];
lock (_StaticRuns)
_ = _StaticRuns.Remove(_Logistics.Sequence);
}

View File

@ -15,9 +15,9 @@ public class FileRead : Shared.FileRead, IFileRead
#nullable enable
public const string BarcodeHostFileShare = @"\\messv02ecc1.ec.local\EC_Metrology_Si\BarcodeHost\API";
public const string MetrologyFileShare = @"\\messv02ecc1.ec.local\EC_Metrology_Si\WorkMaterialOut\API";
public const string LSL2SQLConnectionString = @"Data Source=10.95.128.28\PROD1,53959;Initial Catalog=LSL2SQL;Persist Security Info=True;User ID=srpadmin;Password=0okm9ijn;";
public const string BarcodeHostFileShare = @"\\mesfs.infineon.com\EC_Metrology_Si\BarcodeHost\API";
public const string MetrologyFileShare = @"\\mesfs.infineon.com\EC_Metrology_Si\WorkMaterialOut\API";
public const string LSL2SQLConnectionString = @"Data Source=messqlec1.infineon.com\PROD1,53959;Initial Catalog=LSL2SQL;Persist Security Info=True;User ID=srpadmin;Password=0okm9ijn;";
private long? _TickOffset;

View File

@ -362,7 +362,7 @@ public class Job
if (fileInfo.LastWriteTime.Ticks > sequence)
continue;
lines = File.ReadAllLines(file);
if (!lines.Any())
if (lines.Length == 0)
continue;
text = lines.First();
if (string.IsNullOrEmpty(text) || text.Length < 3 || text[0] != '1' || (text[1] != 't' && text[1] != 'T'))
@ -437,7 +437,7 @@ public class Job
}
private static string GetCommandText(int? rds, int? workOrderNumber, int? workOrderCassette, int? slot, int? reactor)
{
{ // cSpell:disable
StringBuilder result = new();
_ = result.Append(" select ").
Append(" rr.rds_no ").
@ -512,7 +512,7 @@ public class Job
Append(" ) ").
Append(" for json path ");
return result.ToString();
}
} // cSpell:restore
private static (string, string, int?, string, int?, string) Get(string lsl2SQLConnectionString, string layer, string psn, int? reactorNumber, int? slotNumber, int? workOrderNumber, int? workOrderCassette, string zone)
{
@ -535,7 +535,7 @@ public class Job
{ runs = JsonSerializer.Deserialize<Run[]>(json); }
catch (Exception)
{ runs = Array.Empty<Run>(); }
if (!runs.Any())
if (runs.Length == 0)
{
rdsNumber = null;
comment = hyphen;
@ -583,7 +583,7 @@ public class Job
{ runs = JsonSerializer.Deserialize<Run[]>(json); }
catch (Exception)
{ runs = Array.Empty<Run>(); }
if (!runs.Any())
if (runs.Length == 0)
{
comment = hyphen;
zone = string.Empty;

View File

@ -746,7 +746,7 @@ public class Description : IDescription, Shared.Properties.IDescription
List<IDescription> IDescription.GetDescriptions(IFileRead fileRead, Logistics logistics, List<Test> tests, IProcessData iProcessData)
{
List<IDescription> results = new();
if (iProcessData is null || !iProcessData.Details.Any() || iProcessData is not ProcessData processData)
if (iProcessData is null || iProcessData.Details.Count == 0 || iProcessData is not ProcessData processData)
results.Add(GetDefault(fileRead, logistics));
else
{

View File

@ -5,7 +5,6 @@ using Adaptation.Shared.Methods;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.Json;
using System.Text.RegularExpressions;
@ -120,7 +119,7 @@ public class FileRead : Shared.FileRead, IFileRead
}
SetFileParameterLotID(mid);
_Logistics.Update(mid, processData.Reactor);
if (!iProcessData.Details.Any())
if (iProcessData.Details.Count == 0)
throw new Exception(string.Concat("B) No Data - ", dateTime.Ticks));
results = iProcessData.GetResults(this, _Logistics, results.Item4);
}