164 lines
5.8 KiB
C#
164 lines
5.8 KiB
C#
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";
|
|
|
|
/// <summary>
|
|
/// oggetto static/singleton per fare chiamate sul datalayer
|
|
/// </summary>
|
|
protected DataLayer DLMan = new DataLayer();
|
|
|
|
#endregion Protected Fields
|
|
|
|
#region Private Methods
|
|
|
|
/// <summary>
|
|
/// Metodo effettivo recupero dati
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
private List<chartJsTSerie> getDataFilt(string id)
|
|
{
|
|
DateTime endDate = DateTime.Today.AddDays(1);
|
|
DateTime startDate = endDate.AddDays(-10);
|
|
List<chartJsTSerie> answ = new List<chartJsTSerie>();
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Metodo effettivo recupero dati
|
|
/// </summary>
|
|
/// <param name="id">Macchina/PlaceCod</param>
|
|
/// <param name="StartDate">Inizio Periodo</param>
|
|
/// <param name="EndDate">Fine Periodo</param>
|
|
/// <param name="PlotType">Tipo di grafico</param>
|
|
/// <returns></returns>
|
|
private List<chartJsTSerie> getDataFilt(string id, DateTime StartDate, DateTime EndDate, string PlotType)
|
|
{
|
|
// effettuo calcolo statistiche
|
|
Stopwatch stopWatchLap = new Stopwatch();
|
|
stopWatchLap.Start();
|
|
List<chartJsTSerie> answ = new List<chartJsTSerie>();
|
|
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";
|
|
}
|
|
|
|
/// <summary>
|
|
/// Recupero dati x ultimi batch stats
|
|
/// GET api/DayStats/5
|
|
/// </summary>
|
|
/// <param name="id">NUmLast</param>
|
|
/// <returns></returns>
|
|
public List<chartJsTSerie> Get(string id)
|
|
{
|
|
// bonifica ID: [ALL] --> *
|
|
id = id == "[ALL]" ? "*" : id;
|
|
// restituisco oggetto!
|
|
return getDataFilt(id);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Recupero dati x statistiche ultimi batch
|
|
/// GET api/DayStats/NE01
|
|
/// </summary>
|
|
/// <param name="id">Macchina/PlaceCod</param>
|
|
/// <param name="StartDate">Inizio Periodo</param>
|
|
/// <param name="EndDate">Fine Periodo</param>
|
|
/// <param name="PlotType">Tipo di grafico</param>
|
|
/// <returns></returns>
|
|
public List<chartJsTSerie> 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<chartJsTSerie> answ = new List<chartJsTSerie>();
|
|
answ = getDataFilt(id, dateStart, dateEnd, PlotType);
|
|
|
|
// restituisco oggetto!
|
|
return answ;
|
|
}
|
|
|
|
#endregion Public Methods
|
|
}
|
|
} |