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,133 @@
using ReportingServices.Shared.HelperClasses;
using ReportingServices.Shared.Models.ProductionReport;
using ReportingServices.Shared.ViewModels.ProductionReport;
namespace ReportingServices.Shared.ViewModels.ProductionReport
{
public class DailyReport
{
public DateTime StartDate { get; set; }
public YieldStatistics CurrentWeek { get; set; }
public YieldStatistics PreviousWeek { get; set; }
public Dictionary<string, List<EquipmentStateByDay>> ToolAvailibilityByType { get; set; }
public Dictionary<string, ToolStateByType> ToolStateByType { get; set; }
public Dictionary<string, List<string>> ToolStatesByOwner { get; set; }
public Dictionary<string, List<int>> DualLayerReactors { get; set; }
public List<ManualReportEntries> PreviousEntries { get; set; }
public List<ManualReportEntries> CurrentEntries { get; set; }
public int NumberOfToolsWaferSize6IN { get; set; }
public int NumberOfToolsWaferSize8IN { get; set; }
public int NumberOfToolsWaferSize6INScheduled { get; set; }
public int NumberOfToolsWaferSize8INScheduled { get; set; }
public QuarterlyTargets QuarterlyTargets { get; set; }
public DailyReport()
{
ToolAvailibilityByType = new();
ToolStateByType = new();
PreviousEntries = new();
CurrentEntries = new();
DualLayerReactors = new();
StartDate = DateTime.Parse(APIHelperFunctions.GetBeginningOfWeekAsAPIString());
CurrentWeek = new(StartDate, true);
PreviousWeek = new(StartDate.AddDays(-7), false);
}
public void AddToolAvailibilityByType(string key, List<EquipmentStateByDay> states)
{
ToolAvailibilityByType.Add(key, states);
}
public void AddToolStateByType(string key, List<ToolStateCurrent> states)
{
ToolStateByType state = new(states);
ToolStateByType.Add(key, state);
}
public void SetReactorInfo(List<Reactor> reactors, List<int> unscheduledReactors)
{
SetToolsByPocketSize(reactors, unscheduledReactors);
SetDisabledLoadlocks(reactors);
}
public void SetRDSInfo(List<RDS> rdsList)
{
SetDualLayerReactors(rdsList);
SetUnloadTempsLessThan700(rdsList);
}
private void SetToolsByPocketSize(List<Reactor> reactors, List<int> unscheduledReactors)
{
NumberOfToolsWaferSize6IN = reactors.Where(react => react.PocketSize.Contains("150")).Count();
NumberOfToolsWaferSize8IN = reactors.Where(react => react.PocketSize.Contains("200")).Count();
NumberOfToolsWaferSize6INScheduled =
reactors.Where(react => !unscheduledReactors.Contains(react.ReactorNumber)
&& react.PocketSize.Contains("150")).Count();
NumberOfToolsWaferSize8INScheduled =
reactors.Where(react => !unscheduledReactors.Contains(react.ReactorNumber)
&& react.PocketSize.Contains("200")).Count();
}
private void SetDisabledLoadlocks(List<Reactor> reactors)
{
List<Reactor> reactorsWithDisabledLoadlocks = reactors.Where(react => react.HasDisabledLoadlock).ToList();
int singleLoadlockASM = reactorsWithDisabledLoadlocks.Where(react => react.Type.Contains("ASM")).Count();
int singleLoadlockHTR = reactorsWithDisabledLoadlocks.Where(react => react.Type.Contains("HTR")).Count();
CurrentEntries[(int)DateTime.Now.DayOfWeek].ASMSingleLoadLock = singleLoadlockASM;
CurrentEntries[(int)DateTime.Now.DayOfWeek].HTRSingleLoadLock = singleLoadlockHTR;
}
private void SetDualLayerReactors(List<RDS> rdsList)
{
List<RDS> rdsWithDualLayerPSN = rdsList.Where(rds => rds.LayerType.Contains("2 Layer")).ToList();
DualLayerReactors.Add("ASM", rdsWithDualLayerPSN.
Where(rds => rds.ReactorType.Contains("ASM")).
OrderBy(rds => rds.Reactor).
Select(rds => rds.Reactor).
Distinct().ToList());
DualLayerReactors.Add("HTR", rdsWithDualLayerPSN.
Where(rds => rds.ReactorType.Contains("HTR")).
OrderBy(rds => rds.Reactor).
Select(rds => rds.Reactor).
Distinct().ToList());
DualLayerReactors.Add("EPP", rdsWithDualLayerPSN.
Where(rds => rds.ReactorType.Contains("EPP")).
OrderBy(rds => rds.Reactor).
Select(rds => rds.Reactor).
Distinct().ToList());
}
private void SetUnloadTempsLessThan700(List<RDS> rdsList)
{
List<RDS> rdsWithTempsLessThan700 = rdsList.Where(rds => rds.UnloadTemp < 700).ToList();
CurrentEntries[(int)DateTime.Now.DayOfWeek].ASMUnloadTempsLessThan700 =
rdsWithTempsLessThan700.
Where(rds => rds.ReactorType.
Contains("ASM")).
Select(rds => rds.Reactor).
Distinct().Count();
CurrentEntries[(int)DateTime.Now.DayOfWeek].HTRUnloadTempsLessThan700 =
rdsWithTempsLessThan700.
Where(rds => rds.ReactorType.
Contains("HTR")).
Select(rds => rds.Reactor).
Distinct().Count();
}
public void ReverseLists()
{
CurrentWeek.ScrapByDay = APIHelperFunctions.ReverseList(CurrentWeek.ScrapByDay);
PreviousWeek.ScrapByDay = APIHelperFunctions.ReverseList(PreviousWeek.ScrapByDay);
ToolAvailibilityByType["ASM"] = APIHelperFunctions.ReverseList(ToolAvailibilityByType["ASM"]);
ToolAvailibilityByType["EPP"] = APIHelperFunctions.ReverseList(ToolAvailibilityByType["EPP"]);
ToolAvailibilityByType["HTR"] = APIHelperFunctions.ReverseList(ToolAvailibilityByType["HTR"]);
}
}
}

View File

@ -0,0 +1,71 @@
using ReportingServices.Shared.Models.ProductionReport;
namespace ReportingServices.Shared.ViewModels.ProductionReport
{
public class ToolStateByType
{
public int DownTools { get; set; }
public int UpTools { get; set; }
public List<ToolStateCurrent> ToolStateCurrents { get; set; }
public List<string> ToolsDownGreaterThan12Hours { get; set; }
public ToolStateByType(List<ToolStateCurrent> toolStateCurrents)
{
ToolStateCurrents = toolStateCurrents;
ToolsDownGreaterThan12Hours = new List<string>();
UpTools = 0;
DownTools = 0;
GetToolsDownGreaterThan12Hours();
GetMostRecentTransactions();
DetermineUpAndDownTools();
}
public void GetMostRecentTransactions()
{
for (int i = ToolStateCurrents.Count - 2; i >= 0; i--)
{
if (ToolStateCurrents[i].Tool == ToolStateCurrents[i + 1].Tool)
ToolStateCurrents.RemoveAt(i);
}
}
public void GetToolsDownGreaterThan12Hours()
{
float elapsedTime = 0f;
if (ToolStateCurrents[^1].BasicStateDescription.ToUpper() is not "PRODUCTIVE" and not "OUT OF SERVICE")
float.Parse(ToolStateCurrents[^1].GanttElapsedHours);
for (int i = ToolStateCurrents.Count - 2; i >= 0; i--)
{
if (ToolStateCurrents[i].Tool == ToolStateCurrents[i + 1].Tool)
{
if (ToolStateCurrents[i].BasicStateDescription.ToUpper() != "PRODUCTIVE" && ToolStateCurrents[^1].BasicStateDescription.ToUpper() != "OUT OF SERVICE")
elapsedTime += float.Parse(ToolStateCurrents[i].GanttElapsedHours);
}
else
{
if (elapsedTime >= 12)
ToolsDownGreaterThan12Hours.Add(ToolStateCurrents[i + 1].Tool);
if (ToolStateCurrents[i].BasicStateDescription.ToUpper() != "PRODUCTIVE" && ToolStateCurrents[^1].BasicStateDescription.ToUpper() != "OUT OF SERVICE")
elapsedTime = float.Parse(ToolStateCurrents[i].GanttElapsedHours);
else
elapsedTime = 0;
}
}
}
public void DetermineUpAndDownTools()
{
foreach (ToolStateCurrent tools in ToolStateCurrents)
{
if (tools.BasicStateDescription == "Productive")
UpTools++;
else if (tools.ReactorStatus != "Out of Service")
DownTools++;
}
}
}
}

View File

@ -0,0 +1,59 @@
using ReportingServices.Shared.Models.ProductionReport;
namespace ReportingServices.Shared.ViewModels.ProductionReport
{
public class YieldStatistics
{
public DateTime StartDate { get; set; }
public List<ReactorOutsByDay> OutsByDay { get; set; }
public List<ScrapByDay> ScrapByDay { get; set; }
public bool IsCurrentWeek { get; set; }
public YieldStatistics(DateTime startDate, bool isCurrentWeek)
{
StartDate = startDate;
IsCurrentWeek = isCurrentWeek;
}
public void SetYieldInformation(List<ReactorOutsByRDS> outs, List<ScrapByDay> scrap)
{
OutsByDay = GetReactorOutsByDay(outs);
ScrapByDay = scrap;
}
public static List<string> GetDistinctDatesFromReactorOuts(List<ReactorOutsByRDS> outs)
{
List<string> dates = new();
foreach (ReactorOutsByRDS rout in outs)
{
if (!dates.Contains(DateTime.Parse(rout.EndProcessTime).Date.ToString()))
dates.Add(DateTime.Parse(rout.EndProcessTime).Date.ToString());
}
return dates;
}
public static List<ReactorOutsByDay> GetReactorOutsByDay(List<ReactorOutsByRDS> outs)
{
List<ReactorOutsByDay> outsByDay = new();
List<string> dates = GetDistinctDatesFromReactorOuts(outs);
foreach (string date in dates)
{
int waferCount = 0;
foreach (ReactorOutsByRDS rout in outs)
{
if (DateTime.Parse(rout.EndProcessTime).Date.ToString() == date)
waferCount += (int)float.Parse(rout.Units);
}
outsByDay.Add(new ReactorOutsByDay { StartDate = date, TotalWafers = waferCount });
}
return outsByDay;
}
}
}