Removed all references to FabTime
This commit is contained in:
parent
43e5ec3e28
commit
6436465fa1
@ -1,52 +0,0 @@
|
|||||||
using Microsoft.AspNetCore.Http;
|
|
||||||
using Microsoft.AspNetCore.Mvc;
|
|
||||||
using ReportingServices.Shared.Models.ProductionReport;
|
|
||||||
using ReportingServices.Shared.Repositories;
|
|
||||||
|
|
||||||
namespace ReportingServices.API.Controllers
|
|
||||||
{
|
|
||||||
[Route("api/[controller]")]
|
|
||||||
[ApiController]
|
|
||||||
public class FabTimeController : ControllerBase
|
|
||||||
{
|
|
||||||
private readonly IFabTimeReportingRepository _fabTimeReportingRepository;
|
|
||||||
private readonly IScrapeDatabaseRepository _scrapeDBRepository;
|
|
||||||
|
|
||||||
public FabTimeController(IFabTimeReportingRepository fabTimeReportingRepository, IScrapeDatabaseRepository scrapeDBRepository)
|
|
||||||
{
|
|
||||||
_fabTimeReportingRepository = fabTimeReportingRepository;
|
|
||||||
_scrapeDBRepository = scrapeDBRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
[HttpGet("ReactorOuts")]
|
|
||||||
public async Task<YieldInformation> GetReactorOuts(string startDate, string endDate)
|
|
||||||
{
|
|
||||||
List<ReactorOutsByRDS> outs = await _fabTimeReportingRepository.GetMovesTrendData(startDate, endDate);
|
|
||||||
YieldInformation yieldInformation = new()
|
|
||||||
{
|
|
||||||
Outs = outs,
|
|
||||||
Scrap = _scrapeDBRepository.GetScrapByDay(outs)
|
|
||||||
};
|
|
||||||
|
|
||||||
return yieldInformation;
|
|
||||||
}
|
|
||||||
|
|
||||||
[HttpGet("ToolStateTrend")]
|
|
||||||
public async Task<List<EquipmentStateByDay>> GetToolStateTrendData(string toolType)
|
|
||||||
{
|
|
||||||
return await _fabTimeReportingRepository.GetToolStateTrendData(toolType);
|
|
||||||
}
|
|
||||||
|
|
||||||
[HttpGet("ToolState")]
|
|
||||||
public async Task<List<ToolStateCurrent>> GetToolStateData(string toolType)
|
|
||||||
{
|
|
||||||
return await _fabTimeReportingRepository.GetToolStateData(toolType);
|
|
||||||
}
|
|
||||||
|
|
||||||
[HttpGet("Testing")]
|
|
||||||
public string Testing()
|
|
||||||
{
|
|
||||||
return "This Works!";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -14,7 +14,6 @@ builder.Services.AddControllers();
|
|||||||
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
||||||
builder.Services.AddEndpointsApiExplorer();
|
builder.Services.AddEndpointsApiExplorer();
|
||||||
builder.Services.AddSwaggerGen();
|
builder.Services.AddSwaggerGen();
|
||||||
builder.Services.AddScoped<IFabTimeReportingRepository, FabTimeReportingRepository>();
|
|
||||||
builder.Services.AddScoped<IScrapeDatabaseRepository, ScrapeDatabaseRepository>();
|
builder.Services.AddScoped<IScrapeDatabaseRepository, ScrapeDatabaseRepository>();
|
||||||
|
|
||||||
var app = builder.Build();
|
var app = builder.Build();
|
||||||
|
@ -4,8 +4,6 @@ namespace ReportingServices.Shared.HelperClasses
|
|||||||
{
|
{
|
||||||
public static class APIHelperFunctions
|
public static class APIHelperFunctions
|
||||||
{
|
{
|
||||||
private readonly static string fabTimeServer = "http://messa004.infineon.com/fabtime717service/GetChartData.aspx?";
|
|
||||||
|
|
||||||
public static string GetBeginningOfWeekAsAPIString()
|
public static string GetBeginningOfWeekAsAPIString()
|
||||||
{
|
{
|
||||||
DateTime date = DateTime.Now;
|
DateTime date = DateTime.Now;
|
||||||
@ -43,57 +41,6 @@ namespace ReportingServices.Shared.HelperClasses
|
|||||||
return dateString;
|
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)
|
public static List<T> ReverseList<T>(List<T> inputList)
|
||||||
{
|
{
|
||||||
List<T> temp = new();
|
List<T> temp = new();
|
||||||
|
@ -10,18 +10,11 @@ namespace ReportingServices.Shared.HelperClasses
|
|||||||
{
|
{
|
||||||
T deserializedJson = default(T);
|
T deserializedJson = default(T);
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
using (HttpClient client = new())
|
using (HttpClient client = new())
|
||||||
{
|
{
|
||||||
string apiResponse = await client.GetStringAsync(url);
|
string apiResponse = await client.GetStringAsync(url);
|
||||||
deserializedJson = JsonSerializer.Deserialize<T>(apiResponse);
|
deserializedJson = JsonSerializer.Deserialize<T>(apiResponse);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return deserializedJson;
|
return deserializedJson;
|
||||||
}
|
}
|
||||||
|
@ -9,8 +9,23 @@ namespace ReportingServices.Shared.HelperClasses
|
|||||||
private static readonly string _dailyRptFilePath = "wwwroot/Assets/DailyReportInfo.json";
|
private static readonly string _dailyRptFilePath = "wwwroot/Assets/DailyReportInfo.json";
|
||||||
private static readonly string _SLLFilePath = "wwwroot/Assets/SLLTools.json";
|
private static readonly string _SLLFilePath = "wwwroot/Assets/SLLTools.json";
|
||||||
|
|
||||||
public static DailyReport SetUpDailyReport(ILogger logger, string baseUrlFabtime, string baseUrlScrapeDb)
|
public static DailyReport SetUpDailyReport(ILogger logger, string baseUrlScrapeDb)
|
||||||
{
|
{
|
||||||
|
DailyReport report = new();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
report.SLLTools = JsonFileHandler.LoadJSONFile<List<SLLTool>>(_SLLFilePath);
|
||||||
|
report.ManualReportEntries = JsonFileHandler.LoadJSONFile<ManualReportEntries>(_dailyRptFilePath);
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.LogError(ex, "Failed to load JsonFiles.");
|
||||||
|
logger.LogInformation("SLL File Path: {path}", _SLLFilePath);
|
||||||
|
logger.LogInformation("Manual Report Entries File Path: {path}", _dailyRptFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
List<string> cleanTools = new()
|
List<string> cleanTools = new()
|
||||||
{
|
{
|
||||||
"AHPS",
|
"AHPS",
|
||||||
@ -38,16 +53,17 @@ namespace ReportingServices.Shared.HelperClasses
|
|||||||
"SRP"
|
"SRP"
|
||||||
};
|
};
|
||||||
|
|
||||||
List<Task<List<EquipmentStateByDay>>> tasksEQState = new();
|
|
||||||
List<Task<List<ToolStateCurrent>>> tasksState = new();
|
|
||||||
DailyReport report = new();
|
|
||||||
|
|
||||||
List<Reactor> reactors = ApiCaller.GetApi<List<Reactor>>(baseUrlScrapeDb + "Reactors").Result;
|
List<Reactor> reactors = ApiCaller.GetApi<List<Reactor>>(baseUrlScrapeDb + "Reactors").Result;
|
||||||
|
|
||||||
List<Task<List<ReactorEvent>>> toolEvents = new();
|
List<Task<List<ReactorEvent>>> toolEvents = new();
|
||||||
List<Task<ToolEvent>> cleanEvents = new();
|
List<Task<ToolEvent>> cleanEvents = new();
|
||||||
List<Task<ToolEvent>> metrologyEvents = new();
|
List<Task<ToolEvent>> metrologyEvents = new();
|
||||||
|
|
||||||
|
Task<YieldInformation> task1 = null;
|
||||||
|
Task<YieldInformation> task2 = null;
|
||||||
|
Task<QuarterlyTargets> targets = null;
|
||||||
|
Task<List<RDS>> rds = null;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
foreach (Reactor reactor in reactors)
|
foreach (Reactor reactor in reactors)
|
||||||
@ -65,80 +81,17 @@ namespace ReportingServices.Shared.HelperClasses
|
|||||||
{
|
{
|
||||||
metrologyEvents.Add(ApiCaller.GetApi<ToolEvent>(baseUrlScrapeDb + "ToolEvents?toolID=" + tool));
|
metrologyEvents.Add(ApiCaller.GetApi<ToolEvent>(baseUrlScrapeDb + "ToolEvents?toolID=" + tool));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
report.SLLTools = JsonFileHandler.LoadJSONFile<List<SLLTool>>(_SLLFilePath);
|
|
||||||
report.ManualReportEntries = JsonFileHandler.LoadJSONFile<ManualReportEntries>(_dailyRptFilePath);
|
|
||||||
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
logger.LogError(ex, "Failed to load JsonFiles.");
|
|
||||||
logger.LogInformation("SLL File Path: {path}", _SLLFilePath);
|
|
||||||
logger.LogInformation("Manual Report Entries File Path: {path}", _dailyRptFilePath);
|
|
||||||
}
|
|
||||||
|
|
||||||
Task<YieldInformation> task1 = null;
|
|
||||||
Task<YieldInformation> task2 = null;
|
|
||||||
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
task1 = ApiCaller.GetApi<YieldInformation>(baseUrlScrapeDb + "ReactorOuts?startDate=" + report.StartDate.ToString() + "&endDate=" + DateTime.Now.ToString());
|
task1 = ApiCaller.GetApi<YieldInformation>(baseUrlScrapeDb + "ReactorOuts?startDate=" + report.StartDate.ToString() + "&endDate=" + DateTime.Now.ToString());
|
||||||
task2 = ApiCaller.GetApi<YieldInformation>(baseUrlScrapeDb + "ReactorOuts?startDate=" + report.StartDate.AddDays(-7).ToString() + "&endDate=" + report.StartDate.ToString());
|
task2 = ApiCaller.GetApi<YieldInformation>(baseUrlScrapeDb + "ReactorOuts?startDate=" + report.StartDate.AddDays(-7).ToString() + "&endDate=" + report.StartDate.ToString());
|
||||||
|
|
||||||
tasksEQState.Add(ApiCaller.GetApi<List<EquipmentStateByDay>>(baseUrlFabtime + "ToolStateTrend?toolType=ASM"));
|
|
||||||
tasksEQState.Add(ApiCaller.GetApi<List<EquipmentStateByDay>>(baseUrlFabtime + "ToolStateTrend?toolType=EPP"));
|
|
||||||
tasksEQState.Add(ApiCaller.GetApi<List<EquipmentStateByDay>>(baseUrlFabtime + "ToolStateTrend?toolType=HTR"));
|
|
||||||
tasksState.Add(ApiCaller.GetApi<List<ToolStateCurrent>>(baseUrlFabtime + "ToolState?toolType=ASM"));
|
|
||||||
tasksState.Add(ApiCaller.GetApi<List<ToolStateCurrent>>(baseUrlFabtime + "ToolState?toolType=EPP"));
|
|
||||||
tasksState.Add(ApiCaller.GetApi<List<ToolStateCurrent>>(baseUrlFabtime + "ToolState?toolType=HTR"));
|
|
||||||
tasksState.Add(ApiCaller.GetApi<List<ToolStateCurrent>>(baseUrlFabtime + "ToolState?toolType=Metrology"));
|
|
||||||
tasksState.Add(ApiCaller.GetApi<List<ToolStateCurrent>>(baseUrlFabtime + "ToolState?toolType=Cleans"));
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
logger.LogCritical(ex, "Failed to send get requests to fabtime endpoints.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Task<QuarterlyTargets> targets = null;
|
|
||||||
Task<List<RDS>> rds = null;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
targets = ApiCaller.GetApi<QuarterlyTargets>(baseUrlScrapeDb + "Targets");
|
targets = ApiCaller.GetApi<QuarterlyTargets>(baseUrlScrapeDb + "Targets");
|
||||||
rds = ApiCaller.GetApi<List<RDS>>(baseUrlScrapeDb + "RDS?date=" + report.StartDate.ToString());
|
rds = ApiCaller.GetApi<List<RDS>>(baseUrlScrapeDb + "RDS?date=" + report.StartDate.ToString());
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
logger.LogCritical(ex, "Failed to send get requests to scrapedb endpoints.");
|
logger.LogCritical(ex, "Failed to send get requests to scrapedb endpoints.");
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
report.AddToolAvailibilityByType("ASM", tasksEQState[0].Result);
|
|
||||||
report.AddToolAvailibilityByType("EPP", tasksEQState[1].Result);
|
|
||||||
report.AddToolAvailibilityByType("HTR", tasksEQState[2].Result);
|
|
||||||
|
|
||||||
report.AddToolStateByType("ASM", tasksState[0].Result);
|
|
||||||
report.AddToolStateByType("EPP", tasksState[1].Result);
|
|
||||||
report.AddToolStateByType("HTR", tasksState[2].Result);
|
|
||||||
report.AddToolStateByType("Metrology", tasksState[3].Result);
|
|
||||||
report.AddToolStateByType("Cleans", tasksState[4].Result);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
logger.LogCritical(ex, "Failed to retrieve data back from Tool State and Tool State Trend FabTime endpoints.");
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
report.QuarterlyTargets = targets.Result;
|
report.QuarterlyTargets = targets.Result;
|
||||||
@ -165,20 +118,13 @@ namespace ReportingServices.Shared.HelperClasses
|
|||||||
|
|
||||||
report.CleanEvents = report.CleanEvents.Where(x => (x.TOOL_MODE != "PROD" || x.TOOL_MODE_DESC != "Production") && x.TOOL_MODE != "OUT").ToList();
|
report.CleanEvents = report.CleanEvents.Where(x => (x.TOOL_MODE != "PROD" || x.TOOL_MODE_DESC != "Production") && x.TOOL_MODE != "OUT").ToList();
|
||||||
report.MetrologyEvents = report.MetrologyEvents.Where(x => (x.TOOL_MODE != "PROD" || x.TOOL_MODE_DESC != "Production") && x.TOOL_MODE != "OUT").ToList();
|
report.MetrologyEvents = report.MetrologyEvents.Where(x => (x.TOOL_MODE != "PROD" || x.TOOL_MODE_DESC != "Production") && x.TOOL_MODE != "OUT").ToList();
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
logger.LogCritical(ex, "Failed to retrieve data back from Scrape DB endpoints.");
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
report.CurrentWeek.SetYieldInformation(task1.Result, report.QuarterlyTargets);
|
report.CurrentWeek.SetYieldInformation(task1.Result, report.QuarterlyTargets);
|
||||||
report.PreviousWeek.SetYieldInformation(task2.Result, report.QuarterlyTargets);
|
report.PreviousWeek.SetYieldInformation(task2.Result, report.QuarterlyTargets);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
logger.LogCritical(ex, "Failed to retreive data back from ReactorOuts and Scrap endpoints.");
|
logger.LogCritical(ex, "Failed to retrieve data back from Scrape DB endpoints.");
|
||||||
}
|
}
|
||||||
|
|
||||||
report.ReverseLists();
|
report.ReverseLists();
|
||||||
@ -203,17 +149,11 @@ namespace ReportingServices.Shared.HelperClasses
|
|||||||
{
|
{
|
||||||
List<int> reactors = new();
|
List<int> reactors = new();
|
||||||
|
|
||||||
foreach (KeyValuePair<string, ToolStateByType> keyValuePairs in report.ToolStateByType)
|
foreach (ToolEventView tool in report.ToolEvents)
|
||||||
{
|
{
|
||||||
if (keyValuePairs.Key != "Metrology" && keyValuePairs.Key != "Cleans")
|
if (!tool.IsInProduction)
|
||||||
{
|
{
|
||||||
foreach (ToolStateCurrent tool in keyValuePairs.Value.ToolStateCurrents)
|
reactors.Add(int.Parse(tool.Reactor));
|
||||||
{
|
|
||||||
if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
|
|
||||||
{
|
|
||||||
reactors.Add(int.Parse(tool.Tool.Substring(1)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
using System.Text.Json.Serialization;
|
|
||||||
|
|
||||||
namespace ReportingServices.Shared.Models.ProductionReport
|
|
||||||
{
|
|
||||||
public class EquipmentStateByDay
|
|
||||||
{
|
|
||||||
[JsonPropertyName("StartTime")]
|
|
||||||
public string StartTime { get; set; }
|
|
||||||
[JsonPropertyName("AvailablePct")]
|
|
||||||
public string AvailablePct { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,25 +0,0 @@
|
|||||||
using System.Text.Json.Serialization;
|
|
||||||
|
|
||||||
namespace ReportingServices.Shared.Models.ProductionReport
|
|
||||||
{
|
|
||||||
public class ToolStateCurrent
|
|
||||||
{
|
|
||||||
[JsonPropertyName("Tool")]
|
|
||||||
public string Tool { get; set; }
|
|
||||||
[JsonPropertyName("TranTime")]
|
|
||||||
public string TranTime { get; set; }
|
|
||||||
[JsonPropertyName("GanttEndTime")]
|
|
||||||
public string GanttEndTime { get; set; }
|
|
||||||
[JsonPropertyName("GanttElapsedHours")]
|
|
||||||
public string GanttElapsedHours { get; set; }
|
|
||||||
[JsonPropertyName("BasicStateDescription")]
|
|
||||||
public string BasicStateDescription { get; set; }
|
|
||||||
[JsonPropertyName("SubState")]
|
|
||||||
public string SubState { get; set; }
|
|
||||||
[JsonPropertyName("ReactorStatus")]
|
|
||||||
public string ReactorStatus { get; set; }
|
|
||||||
[JsonPropertyName("Comment")]
|
|
||||||
public string Comment { get; set; }
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,106 +0,0 @@
|
|||||||
using Microsoft.Extensions.Logging;
|
|
||||||
using ReportingServices.Shared.HelperClasses;
|
|
||||||
using ReportingServices.Shared.Models.ProductionReport;
|
|
||||||
using ReportingServices.Shared.ViewModels.ProductionReport;
|
|
||||||
using System.Text.Json;
|
|
||||||
using System.Web;
|
|
||||||
|
|
||||||
namespace ReportingServices.Shared.Repositories
|
|
||||||
{
|
|
||||||
public class FabTimeReportingRepository : IFabTimeReportingRepository
|
|
||||||
{
|
|
||||||
private readonly string _toolFilter = "~R76%2C%20~R78%2C%20~R25%2C%20~R67%2C%20~R69%2C%20~R71%2C%20~R47%2C%20~R51%2C%20~R28";
|
|
||||||
private readonly ILogger<FabTimeReportingRepository> _logger;
|
|
||||||
|
|
||||||
public FabTimeReportingRepository(ILogger<FabTimeReportingRepository> logger)
|
|
||||||
{
|
|
||||||
_logger = logger;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<List<ReactorOutsByRDS>> GetMovesTrendData(string startDate = "", string endDate = "")
|
|
||||||
{
|
|
||||||
string url = APIHelperFunctions.GenerateURLWithParameters(startDate: startDate, endDate: endDate, chart: "MOVESLOTLIST", areasLike: "CLEANROOM", operationsLike: "1UNLOAD");
|
|
||||||
|
|
||||||
_logger.LogInformation("FabTime URL: {url}", url);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return await GetJsonData<List<ReactorOutsByRDS>>(url);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.LogCritical(ex, "Error in API call.");
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<List<EquipmentStateByDay>> GetToolStateTrendData(string toolType)
|
|
||||||
{
|
|
||||||
string url = APIHelperFunctions.GenerateURLWithParameters(chart: "TOOLSTATE", periodLen: "24", capacityTypesLike: toolType, toolsLike: _toolFilter);
|
|
||||||
|
|
||||||
_logger.LogInformation("FabTime URL: {url}", url);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return await GetJsonData<List<EquipmentStateByDay>>(url);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.LogCritical(ex, "Error in API call.");
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<List<ToolStateCurrent>> GetToolStateData(string toolType)
|
|
||||||
{
|
|
||||||
string capacityFilter = toolType == "ASM" ? toolType + "%2CASM%2B" : toolType;
|
|
||||||
string startDate = HttpUtility.UrlEncode(APIHelperFunctions.GetDateWithOffsetAsAPIString(DateTime.Now.ToString(), -12.5f));
|
|
||||||
|
|
||||||
string url = APIHelperFunctions.GenerateURLWithParameters(chart: "ToolStateGantt", periodLen: "24",
|
|
||||||
capacityTypesLike: capacityFilter, toolsLike: _toolFilter, startDate: startDate);
|
|
||||||
|
|
||||||
_logger.LogInformation("FabTime URL: {url}", url);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return await GetJsonData<List<ToolStateCurrent>>(url);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.LogCritical(ex, "Error in API call.");
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<T> GetJsonData<T>(string url)
|
|
||||||
{
|
|
||||||
T deserializedJson = default(T);
|
|
||||||
|
|
||||||
using (var client = new HttpClient())
|
|
||||||
{
|
|
||||||
using (HttpResponseMessage response = await client.GetAsync(url))
|
|
||||||
{
|
|
||||||
string apiResponse = await response.Content.ReadAsStringAsync();
|
|
||||||
|
|
||||||
_logger.LogInformation("API Response: {response}" + apiResponse);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
deserializedJson = JsonSerializer.Deserialize<T>(apiResponse);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.LogCritical(ex, "Failed to deserialize Json object.");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return deserializedJson;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,13 +0,0 @@
|
|||||||
using ReportingServices.Shared.Models.ProductionReport;
|
|
||||||
using ReportingServices.Shared.ViewModels.ProductionReport;
|
|
||||||
|
|
||||||
namespace ReportingServices.Shared.Repositories
|
|
||||||
{
|
|
||||||
public interface IFabTimeReportingRepository
|
|
||||||
{
|
|
||||||
public Task<List<ReactorOutsByRDS>> GetMovesTrendData(string startDate = "", string endDate = "");
|
|
||||||
public Task<List<EquipmentStateByDay>> GetToolStateTrendData(string toolType);
|
|
||||||
public Task<List<ToolStateCurrent>> GetToolStateData(string toolType);
|
|
||||||
public Task<T> GetJsonData<T>(string url);
|
|
||||||
}
|
|
||||||
}
|
|
@ -9,8 +9,6 @@ namespace ReportingServices.Shared.ViewModels.ProductionReport
|
|||||||
public YieldStatistics CurrentWeek { get; set; }
|
public YieldStatistics CurrentWeek { get; set; }
|
||||||
public YieldStatistics PreviousWeek { get; set; }
|
public YieldStatistics PreviousWeek { get; set; }
|
||||||
public List<ToolEventView> ToolEvents { get; set; }
|
public List<ToolEventView> ToolEvents { get; set; }
|
||||||
public Dictionary<string, List<EquipmentStateByDay>> ToolAvailibilityByType { get; set; }
|
|
||||||
public Dictionary<string, ToolStateByType> ToolStateByType { get; set; }
|
|
||||||
public List<ToolEvent> CleanEvents { get; set; }
|
public List<ToolEvent> CleanEvents { get; set; }
|
||||||
public List<ToolEvent> MetrologyEvents { get; set; }
|
public List<ToolEvent> MetrologyEvents { get; set; }
|
||||||
public Dictionary<string, List<string>> ToolStatesByOwner { get; set; }
|
public Dictionary<string, List<string>> ToolStatesByOwner { get; set; }
|
||||||
@ -26,8 +24,6 @@ namespace ReportingServices.Shared.ViewModels.ProductionReport
|
|||||||
|
|
||||||
public DailyReport()
|
public DailyReport()
|
||||||
{
|
{
|
||||||
ToolAvailibilityByType = new();
|
|
||||||
ToolStateByType = new();
|
|
||||||
CleanEvents = new();
|
CleanEvents = new();
|
||||||
MetrologyEvents = new();
|
MetrologyEvents = new();
|
||||||
DualLayerReactors = new();
|
DualLayerReactors = new();
|
||||||
@ -38,18 +34,6 @@ namespace ReportingServices.Shared.ViewModels.ProductionReport
|
|||||||
PreviousWeek = new(StartDate.AddDays(-7), false);
|
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)
|
public void SetReactorInfo(List<Reactor> reactors, List<int> unscheduledReactors)
|
||||||
{
|
{
|
||||||
SetToolsByPocketSize(reactors, unscheduledReactors);
|
SetToolsByPocketSize(reactors, unscheduledReactors);
|
||||||
@ -141,10 +125,6 @@ namespace ReportingServices.Shared.ViewModels.ProductionReport
|
|||||||
{
|
{
|
||||||
CurrentWeek.ScrapByDay = APIHelperFunctions.ReverseList(CurrentWeek.ScrapByDay);
|
CurrentWeek.ScrapByDay = APIHelperFunctions.ReverseList(CurrentWeek.ScrapByDay);
|
||||||
PreviousWeek.ScrapByDay = APIHelperFunctions.ReverseList(PreviousWeek.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"]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,71 +0,0 @@
|
|||||||
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++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -36,7 +36,7 @@ namespace ReportingServices.UI.Controllers
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
DailyReport dailyReport = DailyReportHelper.SetUpDailyReport(_logger, baseFabTimeUrl, baseScrapeDbUrl);
|
DailyReport dailyReport = DailyReportHelper.SetUpDailyReport(_logger, baseScrapeDbUrl);
|
||||||
Dictionary<string, List<string>> toolStateOwners = JsonFileHandler.LoadJSONFile<Dictionary<string, List<string>>>(_toolStateOwnerFilePath);
|
Dictionary<string, List<string>> toolStateOwners = JsonFileHandler.LoadJSONFile<Dictionary<string, List<string>>>(_toolStateOwnerFilePath);
|
||||||
|
|
||||||
dailyReport.ToolStatesByOwner = toolStateOwners;
|
dailyReport.ToolStatesByOwner = toolStateOwners;
|
||||||
|
@ -13,8 +13,6 @@ Serilog.ILogger log = Log.ForContext<Program>();
|
|||||||
|
|
||||||
// Add services to the container.
|
// Add services to the container.
|
||||||
builder.Services.AddControllersWithViews();
|
builder.Services.AddControllersWithViews();
|
||||||
builder.Services.AddScoped<IScrapeDatabaseRepository, ScrapeDatabaseRepository>();
|
|
||||||
builder.Services.AddScoped<IFabTimeReportingRepository, FabTimeReportingRepository>();
|
|
||||||
|
|
||||||
var app = builder.Build();
|
var app = builder.Build();
|
||||||
|
|
||||||
|
@ -1,17 +1 @@
|
|||||||
[
|
[{"Date":"2023-01-09T00:00:00-07:00","ASM":8,"HTR":16},{"Date":"2023-01-10T00:00:00-07:00","ASM":8,"HTR":16},{"Date":"2023-01-11T00:00:00-07:00","ASM":8,"HTR":16}]
|
||||||
{
|
|
||||||
"Date": "2023-01-09T00:00:00-07:00",
|
|
||||||
"ASM": 8,
|
|
||||||
"HTR": 16
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Date": "2023-01-10T00:00:00-07:00",
|
|
||||||
"ASM": 8,
|
|
||||||
"HTR": 16
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Date": "2023-01-11T00:00:00-07:00",
|
|
||||||
"ASM": 8,
|
|
||||||
"HTR": 16
|
|
||||||
}
|
|
||||||
]
|
|
Loading…
x
Reference in New Issue
Block a user