Reorganized project structure to separate backend process from frontend process.
This commit is contained in:
@ -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"]);
|
||||
}
|
||||
}
|
||||
}
|
@ -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++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user