Reorganized project structure to separate backend process from frontend process.

This commit is contained in:
Daniel Wathen
2022-12-22 12:10:18 -07:00
parent b5def3da89
commit 80696e5fe6
131 changed files with 494 additions and 347 deletions

View File

@ -0,0 +1,109 @@
using System.Web;
namespace ReportingServices.Shared.HelperClasses
{
public static class APIHelperFunctions
{
private readonly static string fabTimeServer = "http://messa004.infineon.com/fabtime717service/GetChartData.aspx?";
public static string GetBeginningOfWeekAsAPIString()
{
DateTime date = DateTime.Now;
int dayOfWeek = (int)date.DayOfWeek;
date = dayOfWeek switch
{
0 => date.AddDays(-6),
1 => date.AddDays(-7),
_ => date.AddDays(1 - dayOfWeek)
};
return GetDateTimeAsAPIString(date.ToString(), false);
}
public static string GetDateWithOffsetAsAPIString(string dateString, float offset)
{
DateTime date = DateTime.Parse(dateString);
date = date.AddHours(offset);
return GetDateTimeAsAPIString(date.ToString(), true);
}
public static string GetDateTimeAsAPIString(string dateString, bool fullDateTime)
{
DateTime date = DateTime.Parse(dateString);
if (fullDateTime)
dateString = date.ToString("yyyy-M-d HH:mm:ss");
else
dateString = date.Year + "-" + date.Month + "-" + date.Day + " 0:0:0";
return dateString;
}
public static Dictionary<string, string> SetParameters(string startDate = "", string endDate = "", string chart = "", string periodLen = "",
string areasLike = "", string toolsLike = "", string operationsLike = "", string capacityTypesLike = "")
{
Dictionary<string, string> parameters = new();
startDate = startDate == "" ? HttpUtility.UrlEncode(GetBeginningOfWeekAsAPIString()) : startDate;
endDate = endDate == "" ? HttpUtility.UrlEncode(GetDateTimeAsAPIString(DateTime.Now.ToString(), true)) : endDate;
parameters.Add("chart", chart);
parameters.Add("starttime", startDate);
parameters.Add("endtime", endDate);
parameters.Add("periodlen", periodLen);
parameters.Add("areaslike", areasLike);
parameters.Add("toolslike", toolsLike);
parameters.Add("operationslike", operationsLike);
parameters.Add("capacitytypeslike", capacityTypesLike);
parameters.Add("login", "administrator");
parameters.Add("password", "admin");
parameters.Add("fabtimeauthentication", "1");
return parameters;
}
public static string GenerateURL(Dictionary<string, string> parameters)
{
int count = 0;
string url = fabTimeServer;
foreach (KeyValuePair<string, string> pair in parameters)
{
if (pair.Value != "")
url = url + pair.Key + "=" + pair.Value;
if (count != parameters.Count - 1 && !string.IsNullOrEmpty(pair.Value))
url += "&";
count++;
}
return url;
}
public static string GenerateURLWithParameters(string startDate = "", string endDate = "", string chart = "", string periodLen = "",
string areasLike = "", string toolsLike = "", string operationsLike = "", string capacityTypesLike = "")
{
Dictionary<string, string> parameters = SetParameters(startDate, endDate, chart,
periodLen, areasLike, toolsLike, operationsLike, capacityTypesLike);
return GenerateURL(parameters);
}
public static List<T> ReverseList<T>(List<T> inputList)
{
List<T> temp = new();
for (int i = inputList.Count - 1; i >= 0; i--)
{
temp.Add(inputList[i]);
}
return temp;
}
}
}

View File

@ -0,0 +1,84 @@
using ReportingServices.Shared.Repositories;
using ReportingServices.Shared.Models.ProductionReport;
using ReportingServices.Shared.ViewModels.ProductionReport;
namespace ReportingServices.Shared.HelperClasses
{
public static class DailyReportHelper
{
private static IFabTimeReportingRepository _fabTimeReportingRepository;
private static IScrapeDatabaseRepository _scrapeDatabaseRepository;
private static readonly string _dailyRptFilePath = "wwwroot/Assets/DailyReportInfo.json";
public static void SetRepositories(IFabTimeReportingRepository fabTimeReportingRepository, IScrapeDatabaseRepository scrapeDatabaseRepository)
{
_fabTimeReportingRepository = fabTimeReportingRepository;
_scrapeDatabaseRepository = scrapeDatabaseRepository;
}
public static DailyReport SetUpDailyReport()
{
List<Task> tasks = new();
DailyReport report = new();
Task<List<ReactorOutsByRDS>> task1 = _fabTimeReportingRepository.GetMovesTrendData();
Task<List<ReactorOutsByRDS>> task2 = _fabTimeReportingRepository.GetMovesTrendData(startDate: report.StartDate.AddDays(-7).ToString(), endDate: report.StartDate.ToString());
tasks.Add(_fabTimeReportingRepository.GetToolStateTrendData(report, "ASM"));
tasks.Add(_fabTimeReportingRepository.GetToolStateTrendData(report, "EPP"));
tasks.Add(_fabTimeReportingRepository.GetToolStateTrendData(report, "HTR"));
tasks.Add(_fabTimeReportingRepository.GetToolStateData(report, "ASM"));
tasks.Add(_fabTimeReportingRepository.GetToolStateData(report, "EPP"));
tasks.Add(_fabTimeReportingRepository.GetToolStateData(report, "HTR"));
tasks.Add(_fabTimeReportingRepository.GetToolStateData(report, "Metrology"));
tasks.Add(_fabTimeReportingRepository.GetToolStateData(report, "Cleans"));
report.QuarterlyTargets = _scrapeDatabaseRepository.GetQuarterlyTargets();
Dictionary<string, List<ManualReportEntries>> entries = JsonFileHandler.LoadJSONFile<Dictionary<string, List<ManualReportEntries>>>(_dailyRptFilePath);
report.CurrentEntries = entries["Current Week"];
report.PreviousEntries = entries["Previous Week"];
report.SetRDSInfo(_scrapeDatabaseRepository.GetRDSForLastDay());
Task.WaitAll(tasks.ToArray());
report.SetReactorInfo(_scrapeDatabaseRepository.GetReactors(), GetUnscheduledReactors(report));
List<ScrapByDay> scrap = _scrapeDatabaseRepository.GetScrapByDay(task1.Result);
List<ScrapByDay> previousScrap = _scrapeDatabaseRepository.GetScrapByDay(task2.Result);
report.CurrentWeek.SetYieldInformation(task1.Result, scrap);
report.PreviousWeek.SetYieldInformation(task2.Result, previousScrap);
report.ReverseLists();
entries["Current Week"] = report.CurrentEntries;
JsonFileHandler.SaveJSONFile(entries, _dailyRptFilePath);
return report;
}
public static List<int> GetUnscheduledReactors(DailyReport report)
{
List<int> reactors = new();
foreach (KeyValuePair<string, ToolStateByType> keyValuePairs in report.ToolStateByType)
{
if (keyValuePairs.Key != "Metrology" && keyValuePairs.Key != "Cleans")
{
foreach (ToolStateCurrent tool in keyValuePairs.Value.ToolStateCurrents)
{
if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
{
reactors.Add(int.Parse(tool.Tool.Substring(1)));
}
}
}
}
return reactors;
}
}
}

View File

@ -0,0 +1,19 @@
using System.Text.Json;
namespace ReportingServices.Shared.HelperClasses
{
public static class JsonFileHandler
{
public static T LoadJSONFile<T>(string file)
{
string json = File.ReadAllText(file);
return JsonSerializer.Deserialize<T>(json);
}
public static void SaveJSONFile<T>(T obj, string file)
{
string json = JsonSerializer.Serialize(obj);
File.WriteAllText(file, json);
}
}
}

View File

@ -0,0 +1,9 @@
namespace ReportingServices.Shared.Models.PlanningReport
{
public class ReactorPSNWORuns
{
public string REACTOR { get; set; }
public string PSN { get; set; }
public int WO_COUNT { get; set; }
}
}

View File

@ -0,0 +1,10 @@
namespace ReportingServices.Shared.Models.PlanningReport
{
public class WeeklyPartChanges
{
public int TotalPartChanges { get; set; }
public string StartDate { get; set; }
public string EndDate { get; set; }
public List<ReactorPSNWORuns> ReactorPSNWORuns { get; set; }
}
}

View File

@ -0,0 +1,8 @@
namespace ReportingServices.Shared.Models.ProductionReport
{
public class EquipmentStateByDay
{
public string StartTime { get; set; }
public string AvailablePct { get; set; }
}
}

View File

@ -0,0 +1,27 @@
namespace ReportingServices.Shared.Models.ProductionReport
{
public class ManualReportEntries
{
public DayOfWeek Day { get; set; }
public DateTime Date { get; set; }
public int OperatorHeadcountDays { get; set; }
public int OperatorHeadcountNights { get; set; }
public int OperatorCallOutsDays { get; set; }
public int OperatorCallOutsNights { get; set; }
public int EngineeringHeadcountDays { get; set; }
public int EngineeringHeadcountNights { get; set; }
public int EngineeringCallOutsDays { get; set; }
public int EngineeringCallOutsNights { get; set; }
public int MaintenanceHeadcountDays { get; set; }
public int MaintenanceHeadcountNights { get; set; }
public int MaintenanceCallOutsDays { get; set; }
public int MaintenanceCallOutsNights { get; set; }
public string BottleChanges { get; set; }
public string DailyPartChanges { get; set; }
public string WeeklyPartChanges { get; set; }
public int ASMSingleLoadLock { get; set; }
public int HTRSingleLoadLock { get; set; }
public int ASMUnloadTempsLessThan700 { get; set; }
public int HTRUnloadTempsLessThan700 { get; set; }
}
}

View File

@ -0,0 +1,10 @@
namespace ReportingServices.Shared.Models.ProductionReport
{
public class QuarterlyTargets
{
public int Reactor_Outs { get; set; }
public int Yield_Outs { get; set; }
public int IFX_Scrap { get; set; }
public float Yield { get; set; }
}
}

View File

@ -0,0 +1,11 @@
namespace ReportingServices.Shared.Models.ProductionReport
{
public class RDS
{
public int Reactor { get; set; }
public string ReactorType { get; set; }
public DateTime DateOut { get; set; }
public int UnloadTemp { get; set; }
public string LayerType { get; set; }
}
}

View File

@ -0,0 +1,10 @@
namespace ReportingServices.Shared.Models.ProductionReport
{
public class Reactor
{
public int ReactorNumber { get; set; }
public string Type { get; set; }
public string PocketSize { get; set; }
public bool HasDisabledLoadlock { get; set; }
}
}

View File

@ -0,0 +1,8 @@
namespace ReportingServices.Shared.Models.ProductionReport
{
public class ReactorOutsByDay
{
public string StartDate { get; set; }
public int TotalWafers { get; set; }
}
}

View File

@ -0,0 +1,9 @@
namespace ReportingServices.Shared.Models.ProductionReport
{
public class ReactorOutsByRDS
{
public string RDS_NO { get; set; }
public string Units { get; set; }
public string EndProcessTime { get; set; }
}
}

View File

@ -0,0 +1,11 @@
namespace ReportingServices.Shared.Models.ProductionReport
{
public class ScrapByDay
{
public string StartDate { get; set; }
public int TW_PROD { get; set; }
public int TOT_REJ_CUST { get; set; }
public int TOT_REJ_MANU { get; set; }
public int TOT_REJ_WFRS { get; set; }
}
}

View File

@ -0,0 +1,15 @@
namespace ReportingServices.Shared.Models.ProductionReport
{
public class ToolStateCurrent
{
public string Tool { get; set; }
public string TranTime { get; set; }
public string GanttEndTime { get; set; }
public string GanttElapsedHours { get; set; }
public string BasicStateDescription { get; set; }
public string SubState { get; set; }
public string ReactorStatus { get; set; }
public string Comment { get; set; }
}
}