diff --git a/MP.Stats/Components/ChartOEE.razor b/MP.Stats/Components/ChartOEE.razor new file mode 100644 index 00000000..25dfe00a --- /dev/null +++ b/MP.Stats/Components/ChartOEE.razor @@ -0,0 +1,32 @@ +
+ @if (RawData == null || RawData.Count == 0) + { +
+
No Chart Data
+
+ } + else + { +
+ +
+
+
+
+ +
+
+ +
+
+
+ } +
\ No newline at end of file diff --git a/MP.Stats/Components/ChartOEE.razor.cs b/MP.Stats/Components/ChartOEE.razor.cs new file mode 100644 index 00000000..9f6babd2 --- /dev/null +++ b/MP.Stats/Components/ChartOEE.razor.cs @@ -0,0 +1,238 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Blazorise.Charts; +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 { + suggestedMin = 0 + } + } + } + }, + Tooltips = new + { + Mode = "nearest", + Intersect = false + }, + Hover = new + { + Mode = "nearest", + Intersect = false + }, + Animation = false, + AspectRatio = 3.5 + }; + + protected LineChart NumGuasti; + + protected BarChart ParetoGuasti; + + #endregion Protected Fields + + #region Protected Properties + + protected SelectData _currFilter { get; set; } = new SelectData(); + + protected List _rawData { get; set; } = new List(); + + [Inject] + protected MessageService MessageService { get; set; } + + protected List ParetoData { get; set; } = new List(); + + [Inject] + protected MpStatsService StatService { get; set; } + + protected List TSData { get; set; } = new List(); + + #endregion Protected Properties + + #region Public Properties + + [Parameter] + public List 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 + + private BarChartDataset GetBarChartDataset() + { + var answ = new BarChartDataset + { + Label = "Pareto Causali Scarto", + Data = ParetoData.Select(x => x.value).ToList(), + BackgroundColor = backgroundColors(ParetoData.Count, 0.4f), + BorderColor = backgroundColors(ParetoData.Count, 1f), + HoverBorderWidth = 5 + }; + return answ; + } + + private List GetBarChartLabels() + { + var answ = ParetoData.Select(x => x.label).ToList(); + return answ; + } + + private LineChartDataset GetLineChartDataset() + { + var answ = new LineChartDataset + { + Label = "Numero Scarti Periodo", + Data = TSData.Select(x => x.Value).ToList(), + BorderColor = backgroundColors(1, 1f), + Fill = true, + PointRadius = 2, + SteppedLine = true, + BorderDash = new List { } + }; + return answ; + } + + private List 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.Causale) + .Select(y => new ChartKV() { label = y.First().Descrizione, value = y.Sum(c => c.Qta) }) + .OrderByDescending(x => x.value) + .ToList(); + + TSData = RawData + .GroupBy(x => x.DataOraRif.Date) + .Select(y => new ChartTS() { TLabel = y.First().DataOraRif.Date, Value = y.Sum(c => c.Qta) }) + .OrderBy(x => x.TLabel) + .ToList(); + } + } + + #endregion Private Methods + + #region Protected Methods + + /// + /// Genera colori sfondo 33% rosso / arancione / giallo + /// + /// + /// + protected List backgroundColors(int numRecords, float alpha) + { + List answ = new List(); + // rosso... + for (int i = 0; i < numRecords / 3; i++) + { + answ.Add(ChartColor.FromRgba(255, 99, 132, 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(54, 82, 235, alpha)); + } + + return answ; + } + + protected async Task HandleRedraw() + { + if (ParetoGuasti != null) + { + await ParetoGuasti.Clear(); + await ParetoGuasti.AddLabelsDatasetsAndUpdate(GetBarChartLabels(), GetBarChartDataset()); + } + if (NumGuasti != null) + { + await NumGuasti.Clear(); + await NumGuasti.AddLabelsDatasetsAndUpdate(GetLineChartLabels(), GetLineChartDataset()); + } + } + + #endregion Protected Methods + } +} \ No newline at end of file diff --git a/MP.Stats/Pages/Oee.razor b/MP.Stats/Pages/Oee.razor index 60dee9ab..09a0e6c8 100644 --- a/MP.Stats/Pages/Oee.razor +++ b/MP.Stats/Pages/Oee.razor @@ -4,9 +4,13 @@
- +
+ @if (ShowCharts == true) + { + + } @if (currRecord != null) { diff --git a/MP.Stats/Pages/Oee.razor.cs b/MP.Stats/Pages/Oee.razor.cs index 5b260e77..69a1f8c6 100644 --- a/MP.Stats/Pages/Oee.razor.cs +++ b/MP.Stats/Pages/Oee.razor.cs @@ -34,9 +34,39 @@ namespace MP.Stats.Pages } } - private int currPage { get; set; } = 1; + private int _currPage { get; set; } = 1; + + private int _numRecord { get; set; } = 10; + + private int currPage + { + get => _currPage; + set + { + if (_currPage != value) + { + _currPage = value; + var pUpd = Task.Run(async () => await reloadData()); + pUpd.Wait(); + } + } + } private bool isLoading { get; set; } = false; - private int numRecord { get; set; } = 10; + private int numRecord + { + get => _numRecord; + set + { + if (_numRecord != value) + { + _numRecord = value; + var pUpd = Task.Run(async () => await reloadData()); + pUpd.Wait(); + } + } + } + + private bool ShowCharts { get; set; } = false; #endregion Private Properties @@ -92,16 +122,14 @@ namespace MP.Stats.Pages await reloadData(); } - protected async Task ForceReload(int newNum) + protected void ForceReload(int newNum) { numRecord = newNum; - await reloadData(); } - protected async Task ForceReloadPage(int newNum) + protected void ForceReloadPage(int newNum) { currPage = newNum; - await reloadData(); } protected override async Task OnInitializedAsync() @@ -135,6 +163,14 @@ namespace MP.Stats.Pages currRecord = selRecord; } + protected async Task ToggleChart(bool doShow) + { + ShowCharts = !ShowCharts; + if (ShowCharts) + { + await reloadData(); + } + } protected async Task UpdateData() { currRecord = null; @@ -165,11 +201,19 @@ namespace MP.Stats.Pages MessageService.EA_SearchUpdated -= OnSeachUpdated; } - public void OnSeachUpdated() + // public void OnSeachUpdated() + // { + // InvokeAsync(() => + // { + // UpdateData(); + // StateHasChanged(); + // }); + // } + public async void OnSeachUpdated() { - InvokeAsync(() => + await InvokeAsync(() => { - UpdateData(); + Task task = UpdateData(); StateHasChanged(); }); }