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
}
}