150 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using Adaptation.Eaf.Management.ConfigurationData.CellAutomation;
 | |
| using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration;
 | |
| using Adaptation.Shared;
 | |
| using Adaptation.Shared.Methods;
 | |
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Collections.ObjectModel;
 | |
| using System.IO;
 | |
| using System.Text.Json;
 | |
| using System.Text.RegularExpressions;
 | |
| 
 | |
| namespace Adaptation.FileHandlers.pcl;
 | |
| 
 | |
| public class FileRead : Shared.FileRead, IFileRead
 | |
| {
 | |
| 
 | |
|     private long? _TickOffset;
 | |
|     private readonly string _GhostPCLFileName;
 | |
|     private readonly string _PDFTextStripperFileName;
 | |
| 
 | |
|     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<Shared.Metrology.WS.Results>> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) :
 | |
|         base(new Description(), true, smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null)
 | |
|     {
 | |
|         _MinFileLength = 15;
 | |
|         _NullData = string.Empty;
 | |
|         _Logistics = new(this);
 | |
|         if (_FileParameter is null)
 | |
|             throw new Exception(cellInstanceConnectionName);
 | |
|         if (_ModelObjectParameterDefinitions is null)
 | |
|             throw new Exception(cellInstanceConnectionName);
 | |
|         if (_IsDuplicator)
 | |
|             throw new Exception(cellInstanceConnectionName);
 | |
|         _GhostPCLFileName = Path.Combine(AppContext.BaseDirectory, "gpcl6win64.exe");
 | |
|         if (!File.Exists(_GhostPCLFileName))
 | |
|             throw new Exception("Ghost PCL FileName doesn't Exist!");
 | |
|         _PDFTextStripperFileName = Path.Combine(AppContext.BaseDirectory, "PDF-Text-Stripper.exe");
 | |
|         if (!File.Exists(_PDFTextStripperFileName))
 | |
|             throw new Exception("PDF-Text-Stripper FileName doesn't Exist!");
 | |
|         if (_IsEAFHosted)
 | |
|             NestExistingFiles(_FileConnectorConfiguration);
 | |
|     }
 | |
| 
 | |
|     void IFileRead.Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, Exception exception) => Move(extractResults);
 | |
| 
 | |
|     void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null);
 | |
| 
 | |
|     string IFileRead.GetEventDescription()
 | |
|     {
 | |
|         string result = _Description.GetEventDescription();
 | |
|         return result;
 | |
|     }
 | |
| 
 | |
|     List<string> IFileRead.GetHeaderNames()
 | |
|     {
 | |
|         List<string> results = _Description.GetHeaderNames();
 | |
|         return results;
 | |
|     }
 | |
| 
 | |
|     string[] IFileRead.Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, string to, string from, string resolvedFileLocation, Exception exception)
 | |
|     {
 | |
|         string[] results = Move(extractResults, to, from, resolvedFileLocation, exception);
 | |
|         return results;
 | |
|     }
 | |
| 
 | |
|     JsonProperty[] IFileRead.GetDefault()
 | |
|     {
 | |
|         JsonProperty[] results = _Description.GetDefault(this, _Logistics);
 | |
|         return results;
 | |
|     }
 | |
| 
 | |
|     Dictionary<string, string> IFileRead.GetDisplayNamesJsonElement()
 | |
|     {
 | |
|         Dictionary<string, string> results = _Description.GetDisplayNamesJsonElement(this);
 | |
|         return results;
 | |
|     }
 | |
| 
 | |
|     List<IDescription> IFileRead.GetDescriptions(IFileRead fileRead, List<Test> tests, IProcessData processData)
 | |
|     {
 | |
|         List<IDescription> results = _Description.GetDescriptions(fileRead, _Logistics, tests, processData);
 | |
|         return results;
 | |
|     }
 | |
| 
 | |
|     Tuple<string, Test[], JsonElement[], List<FileInfo>> IFileRead.GetExtractResult(string reportFullPath, string eventName)
 | |
|     {
 | |
|         Tuple<string, Test[], JsonElement[], List<FileInfo>> results;
 | |
|         if (string.IsNullOrEmpty(eventName))
 | |
|             throw new Exception();
 | |
|         _ReportFullPath = reportFullPath;
 | |
|         DateTime dateTime = DateTime.Now;
 | |
|         results = GetExtractResult(reportFullPath, dateTime);
 | |
|         if (results.Item3 is null)
 | |
|             results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(results.Item1, Array.Empty<Test>(), JsonSerializer.Deserialize<JsonElement[]>("[]"), results.Item4);
 | |
|         if (results.Item3.Length > 0 && _IsEAFHosted)
 | |
|             WritePDSF(this, results.Item3);
 | |
|         UpdateLastTicksDuration(DateTime.Now.Ticks - dateTime.Ticks);
 | |
|         return results;
 | |
|     }
 | |
| 
 | |
|     Tuple<string, Test[], JsonElement[], List<FileInfo>> IFileRead.ReExtract()
 | |
|     {
 | |
|         Tuple<string, Test[], JsonElement[], List<FileInfo>> results;
 | |
|         List<string> headerNames = _Description.GetHeaderNames();
 | |
|         Dictionary<string, string> keyValuePairs = _Description.GetDisplayNamesJsonElement(this);
 | |
|         results = ReExtract(this, headerNames, keyValuePairs);
 | |
|         return results;
 | |
|     }
 | |
| 
 | |
| #nullable enable
 | |
| 
 | |
|     private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime)
 | |
|     {
 | |
|         Tuple<string, Test[], JsonElement[], List<FileInfo>> results = new(string.Empty, Array.Empty<Test>(), Array.Empty<JsonElement>(), new List<FileInfo>());
 | |
|         _TickOffset ??= 0; // new FileInfo(reportFullPath).LastWriteTime.Ticks - dateTime.Ticks;
 | |
|         _Logistics = new Logistics(this, _TickOffset.Value, reportFullPath, useSplitForMID: true);
 | |
|         SetFileParameterLotIDToLogisticsMID();
 | |
|         if (_Logistics.FileInfo.Length < _MinFileLength)
 | |
|             results.Item4.Add(_Logistics.FileInfo);
 | |
|         else
 | |
|         {
 | |
|             ReadOnlyDictionary<string, string> pages = Convert.PDF(_Logistics, _GhostPCLFileName, _PDFTextStripperFileName, results.Item4);
 | |
|             Run? run = Run.Get(_Logistics, results.Item4, pages);
 | |
|             if (run is null)
 | |
|                 throw new Exception(string.Concat("A) No Data - ", dateTime.Ticks));
 | |
|             IProcessData iProcessData = new ProcessData(this, _Logistics, results.Item4, pages, run);
 | |
|             if (iProcessData is not ProcessData processData)
 | |
|                 results = new(string.Concat("B) No Data - ", dateTime.Ticks), Array.Empty<Test>(), Array.Empty<JsonElement>(), results.Item4);
 | |
|             else
 | |
|             {
 | |
|                 string mid;
 | |
|                 if (!string.IsNullOrEmpty(processData.Lot) && string.IsNullOrEmpty(processData.Reactor) && string.IsNullOrEmpty(processData.RDS) && string.IsNullOrEmpty(processData.PSN))
 | |
|                     mid = processData.Lot;
 | |
|                 else if (!string.IsNullOrEmpty(processData.Employee) && string.IsNullOrEmpty(processData.Reactor) && string.IsNullOrEmpty(processData.RDS) && string.IsNullOrEmpty(processData.PSN))
 | |
|                     mid = processData.Employee;
 | |
|                 else
 | |
|                 {
 | |
|                     mid = string.Concat(processData.Reactor, "-", processData.RDS, "-", processData.PSN);
 | |
|                     mid = Regex.Replace(mid, @"[\\,\/,\:,\*,\?,\"",\<,\>,\|]", "_").Split('\r')[0].Split('\n')[0];
 | |
|                 }
 | |
|                 SetFileParameterLotID(mid);
 | |
|                 _Logistics.Update(mid, processData.Reactor);
 | |
|                 if (iProcessData.Details.Count > 0)
 | |
|                     results = iProcessData.GetResults(this, _Logistics, results.Item4);
 | |
|                 else
 | |
|                     results = new(string.Concat("LOGISTICS_1 - C) No Data - ", dateTime.Ticks), Array.Empty<Test>(), Array.Empty<JsonElement>(), results.Item4);
 | |
|             }
 | |
|         }
 | |
|         return results;
 | |
|     }
 | |
| 
 | |
| } |