using AppData; using NKC_SDK; using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.Linq; using System.Web; using System.Web.Http; namespace NKC_WF.Controllers { public class DayStatsController : ApiController { #region Protected Fields protected string dateFormat = "yyyy-MM-dd"; /// /// oggetto static/singleton per fare chiamate sul datalayer /// protected DataLayer DLMan = new DataLayer(); #endregion Protected Fields #region Private Methods /// /// Metodo effettivo recupero dati /// /// /// private List getDataFilt(string id) { DateTime endDate = DateTime.Today.AddDays(1); DateTime startDate = endDate.AddDays(-10); List answ = new List(); var tabDati = DLMan.taDayStats.getFilt(startDate, endDate, id); // ciclo decimal value = 0; foreach (var item in tabDati.OrderBy(x => x.DataOraRif)) { decimal denom = item.MinDisp != 0 ? item.MinDisp : 1; value = item.MinRun / denom * 100; // prendo valore default = NumParts answ.Add(new chartJsTSerie() { x = item.DataOraRif, y = value }); } // restituisco return answ; } /// /// Metodo effettivo recupero dati /// /// Macchina/PlaceCod /// Inizio Periodo /// Fine Periodo /// Tipo di grafico /// private List getDataFilt(string id, DateTime StartDate, DateTime EndDate, string PlotType) { // effettuo calcolo statistiche Stopwatch stopWatchLap = new Stopwatch(); stopWatchLap.Start(); List answ = new List(); var tabDati = DLMan.taDayStats.getFilt(StartDate, EndDate, id); stopWatchLap.Stop(); Log.Instance.Info($"DayStats DB retrieve | machine: {id} | start: {StartDate} | end: {EndDate} | elapsed: {stopWatchLap.Elapsed.TotalMilliseconds} ms"); stopWatchLap.Restart(); DateTime startTime = DateTime.Now.AddYears(1); // ciclo foreach (var item in tabDati.OrderBy(x => x.DataOraRif)) { decimal value = 0; decimal denom = 1; switch (PlotType) { case "AvailTime": value = item.MinDisp; break; case "NumPartsProd": value = item.ItmProd; break; case "NumPartsScrap": value = item.ItmScrap; break; case "RunTime": value = item.MinRun; break; case "AvgPartsHour": denom = item.MinRun != 0 ? item.MinRun : 1; value = item.ItmProd / denom * 100; break; default: case "OEE": denom = item.MinDisp != 0 ? item.MinDisp : 1; value = item.MinRun / denom * 100; break; } answ.Add(new chartJsTSerie() { x = item.DataOraRif, y = value, label = item.PlaceCod }); } stopWatchLap.Stop(); Log.Instance.Info($"DayStats data conversion | machine: {id} | start: {StartDate} | end: {EndDate} | elapsed: {stopWatchLap.Elapsed.TotalMilliseconds} ms"); // restituisco return answ; } #endregion Private Methods #region Public Methods // GET api/DayStats public string Get() { return "NA"; } /// /// Recupero dati x ultimi batch stats /// GET api/DayStats/5 /// /// NUmLast /// public List Get(string id) { // bonifica ID: [ALL] --> * id = id == "[ALL]" ? "*" : id; // restituisco oggetto! return getDataFilt(id); } /// /// Recupero dati x statistiche ultimi batch /// GET api/DayStats/NE01 /// /// Macchina/PlaceCod /// Inizio Periodo /// Fine Periodo /// Tipo di grafico /// public List Get(string id, string StartDate, string EndDate, string PlotType) { // bonifica ID: [ALL] --> * id = id == "[ALL]" ? "*" : id; DateTime dateEnd = DateTime.Today.AddDays(1); DateTime dateStart = dateEnd.AddDays(-10); DateTime.TryParseExact(StartDate, dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateStart); DateTime.TryParseExact(EndDate, dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateEnd); List answ = new List(); answ = getDataFilt(id, dateStart, dateEnd, PlotType); // restituisco oggetto! return answ; } #endregion Public Methods } }