248 lines
6.9 KiB
C#
248 lines
6.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.AspNetCore.Components;
|
|
using MP.Stats.Data;
|
|
|
|
namespace MP.Stats.Components
|
|
{
|
|
public partial class ChartOEE
|
|
{
|
|
#region Protected Fields
|
|
|
|
protected object barChartOptions = new
|
|
{
|
|
Scales = new
|
|
{
|
|
XAxes = new object[]
|
|
{
|
|
new {
|
|
Display = false
|
|
}
|
|
},
|
|
YAxes = new object[]
|
|
{
|
|
new {
|
|
Display = true,
|
|
ticks= new {
|
|
suggestedMin = 0
|
|
}
|
|
}
|
|
}
|
|
},
|
|
Tooltips = new
|
|
{
|
|
Mode = "nearest",
|
|
Intersect = false
|
|
},
|
|
Hover = new
|
|
{
|
|
Mode = "nearest",
|
|
Intersect = false
|
|
},
|
|
Animation = false,
|
|
AspectRatio = 3.5
|
|
};
|
|
|
|
protected object lineChartOptions = new
|
|
{
|
|
Scales = new
|
|
{
|
|
XAxes = new object[]
|
|
{
|
|
new {
|
|
Display = true,
|
|
//type = "time"
|
|
}
|
|
},
|
|
YAxes = new object[]
|
|
{
|
|
new {
|
|
Display = true,
|
|
ticks= new {
|
|
min = 0,
|
|
max = 100
|
|
}
|
|
}
|
|
}
|
|
},
|
|
Tooltips = new
|
|
{
|
|
Mode = "nearest",
|
|
Intersect = false
|
|
},
|
|
Hover = new
|
|
{
|
|
Mode = "nearest",
|
|
Intersect = false
|
|
},
|
|
Animation = false,
|
|
AspectRatio = 3.5
|
|
};
|
|
|
|
protected List<double> NumGuasti = new List<double>();
|
|
|
|
protected List<double> ParetoGuasti = new List<double>();
|
|
|
|
#endregion Protected Fields
|
|
|
|
#region Protected Properties
|
|
|
|
protected SelectData _currFilter { get; set; } = new SelectData();
|
|
|
|
protected List<MP.Data.DatabaseModels.TurniOee> _rawData { get; set; } = new List<MP.Data.DatabaseModels.TurniOee>();
|
|
|
|
[Inject]
|
|
protected MessageService MessageService { get; set; }
|
|
|
|
protected List<ChartKV> ParetoData { get; set; } = new List<ChartKV>();
|
|
|
|
[Inject]
|
|
protected MpStatsService StatService { get; set; }
|
|
|
|
protected List<ChartTS> TSData { get; set; } = new List<ChartTS>();
|
|
|
|
#endregion Protected Properties
|
|
|
|
#region Public Properties
|
|
|
|
[Parameter]
|
|
public List<MP.Data.DatabaseModels.TurniOee> RawData
|
|
{
|
|
get => _rawData;
|
|
set
|
|
{
|
|
// salvo valori
|
|
_rawData = value;
|
|
if (value != null)
|
|
{
|
|
// ricalcolo charting data
|
|
recalcData();
|
|
var dataReload = Task.Run(async () =>
|
|
{
|
|
await HandleRedraw();
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion Public Properties
|
|
|
|
#region Private Methods
|
|
|
|
#if false
|
|
private BarChartDataset<double> GetBarChartDataset()
|
|
{
|
|
var answ = new BarChartDataset<double>
|
|
{
|
|
Label = "Pareto OEE Macchine",
|
|
Data = ParetoData.Select(x => x.value).ToList(),
|
|
BackgroundColor = backgroundColors(ParetoData.Count, 0.4f),
|
|
BorderColor = backgroundColors(ParetoData.Count, 1f),
|
|
HoverBorderWidth = 5
|
|
};
|
|
return answ;
|
|
}
|
|
#endif
|
|
|
|
private List<string> GetBarChartLabels()
|
|
{
|
|
var answ = ParetoData.Select(x => x.label).ToList();
|
|
return answ;
|
|
}
|
|
|
|
#if false
|
|
private LineChartDataset<double> GetLineChartDataset()
|
|
{
|
|
var answ = new LineChartDataset<double>
|
|
{
|
|
Label = "TRS/OEE Periodo",
|
|
Data = TSData.Select(x => x.Value).ToList(),
|
|
BorderColor = backgroundColors(1, 1f),
|
|
Fill = true,
|
|
PointRadius = 2,
|
|
LineTension = 0,
|
|
BorderDash = new List<int> { }
|
|
};
|
|
return answ;
|
|
}
|
|
#endif
|
|
|
|
private List<string> GetLineChartLabels()
|
|
{
|
|
var answ = TSData.Select(x => x.TLabel.ToString("ddd dd.MM")).ToList();
|
|
return answ;
|
|
}
|
|
|
|
private void recalcData()
|
|
{
|
|
if (RawData != null)
|
|
{
|
|
ParetoData = RawData
|
|
.GroupBy(x => x.IdxMacchina)
|
|
.Select(y => new ChartKV() { label = y.First().CodMacchina, value = Math.Round(y.Average(c => c.OEE) * 100, 2) })
|
|
.OrderByDescending(x => x.value)
|
|
.ToList();
|
|
|
|
TSData = RawData
|
|
.GroupBy(x => x.DataRif.Date)
|
|
.Select(y => new ChartTS() { TLabel = y.First().DataRif.Date, Value = Math.Round(y.Average(c => c.OEE) * 100, 2) })
|
|
.OrderBy(x => x.TLabel)
|
|
.ToList();
|
|
}
|
|
}
|
|
|
|
#endregion Private Methods
|
|
|
|
#region Protected Methods
|
|
|
|
/// <summary>
|
|
/// Genera colori sfondo 33% rosso / arancione / giallo
|
|
/// </summary>
|
|
/// <param name="numRecords"></param>
|
|
/// <returns></returns>
|
|
protected List<string> backgroundColors(int numRecords, float alpha)
|
|
{
|
|
List<string> answ = new List<string>();
|
|
#if false
|
|
// verde...
|
|
for (int i = 0; i < numRecords / 3; i++)
|
|
{
|
|
answ.Add(ChartColor.FromRgba(54, 235, 82, alpha));
|
|
}
|
|
// arancione
|
|
for (int i = 0; i < numRecords / 3; i++)
|
|
{
|
|
answ.Add(ChartColor.FromRgba(255, 206, 86, alpha));
|
|
}
|
|
while (answ.Count < numRecords)
|
|
{
|
|
answ.Add(ChartColor.FromRgba(255, 99, 132, alpha));
|
|
}
|
|
#endif
|
|
|
|
return answ;
|
|
}
|
|
|
|
protected async Task HandleRedraw()
|
|
{
|
|
if (ParetoGuasti != null)
|
|
{
|
|
#if false
|
|
await ParetoGuasti.Clear();
|
|
await ParetoGuasti.AddLabelsDatasetsAndUpdate(GetBarChartLabels(), GetBarChartDataset());
|
|
#endif
|
|
}
|
|
if (NumGuasti != null)
|
|
{
|
|
#if false
|
|
await NumGuasti.Clear();
|
|
await NumGuasti.AddLabelsDatasetsAndUpdate(GetLineChartLabels(), GetLineChartDataset());
|
|
#endif
|
|
}
|
|
}
|
|
|
|
#endregion Protected Methods
|
|
}
|
|
} |