diff --git a/MP.MONO.UI/Components/AlarmsHistory.razor b/MP.MONO.UI/Components/AlarmsHistory.razor deleted file mode 100644 index 8166476..0000000 --- a/MP.MONO.UI/Components/AlarmsHistory.razor +++ /dev/null @@ -1,40 +0,0 @@ -@using MP.MONO.Data -@using MP.MONO.UI.Components -@using MP.MONO.Core.DTO -@using MP.MONO.UI.Data - -@inject CurrentDataService MMDataService - -@if (@ListRecords != null) -{ - if (@ListRecords.Count == 0) - { - waiting for data: - - } - else - { - - } -} -else -{ - -} - diff --git a/MP.MONO.UI/Components/AlarmsHistory.razor.cs b/MP.MONO.UI/Components/AlarmsHistory.razor.cs deleted file mode 100644 index e4c40a2..0000000 --- a/MP.MONO.UI/Components/AlarmsHistory.razor.cs +++ /dev/null @@ -1,71 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Components; -using System.Net.Http; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Components.Authorization; -using Microsoft.AspNetCore.Components.Forms; -using Microsoft.AspNetCore.Components.Routing; -using Microsoft.AspNetCore.Components.Web; -using Microsoft.AspNetCore.Components.Web.Virtualization; -using Microsoft.JSInterop; -using MP.MONO.Core.DTO; -using MP.MONO.Data; -using MP.MONO.UI; -using MP.MONO.UI.Shared; -using MP.MONO.UI.Components; -using MP.MONO.UI.Data; -using Newtonsoft.Json; - -namespace MP.MONO.UI.Components -{ - public partial class AlarmsHistory - { - private List? ListRecords { get; set; } = new List(); - protected override async Task OnInitializedAsync() - { - await ReloadData(); - MMDataService.alarmPipe.EA_NewMessage += AlarmPipe_EA_NewMessage; - } - - private void AlarmPipe_EA_NewMessage(object? sender, EventArgs e) - { - PubSubEventArgs currArgs = (PubSubEventArgs)e; - // conversione on-the-fly List --> allarmi - if (!string.IsNullOrEmpty(currArgs.newMessage)) - { - try - { - var alarmList = JsonConvert.DeserializeObject>(currArgs.newMessage); - ListRecords = alarmList.Select(x => new DisplayDataDTO() - { - IsNumeric = false, - Title = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss}", - Value = x, - Order = ListRecords == null ? 0 : ListRecords.Count - }).ToList(); - } - catch - { } - } - InvokeAsync(() => - { - StateHasChanged(); - }); - } - - protected async Task ReloadData() - { - var alarmList = await MMDataService.getAlarms(); - ListRecords = alarmList.Select(x => new DisplayDataDTO() - { - IsNumeric = false, - Title = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss}", - Value = x, - Order = ListRecords == null ? 0 : ListRecords.Count - }).ToList(); - } - } -} \ No newline at end of file diff --git a/MP.MONO.UI/Components/AlarmsOverview.razor b/MP.MONO.UI/Components/AlarmsOverview.razor index 8166476..0e5ac95 100644 --- a/MP.MONO.UI/Components/AlarmsOverview.razor +++ b/MP.MONO.UI/Components/AlarmsOverview.razor @@ -9,12 +9,7 @@ { if (@ListRecords.Count == 0) { - waiting for data: -
    -
  • Current State
  • -
  • Alarms Log
  • -
  • Messages State
  • -
+
All OK
} else { diff --git a/MP.MONO.UI/Components/DataPager.razor b/MP.MONO.UI/Components/DataPager.razor new file mode 100644 index 0000000..878e7eb --- /dev/null +++ b/MP.MONO.UI/Components/DataPager.razor @@ -0,0 +1,77 @@ +
+
+
+
+ @if (totalCount > 0) + { + + + + + + + + + + + + @for (int i = @startPage; i <= endPage; ++i) + { + var pageNum = i; + + + @pageNum + + + } + + + + + + + + + + + + } +
+
+
+
+ @if (showLoading) + { + + + + } +
+
+
+
+
+
+ @if (!showLoading) + { + @totalCount records + } +
+
+ @if (totalCount > 0) + { +
+ +
+ } +
+
+
+
+ diff --git a/MP.MONO.UI/Components/DataPager.razor.cs b/MP.MONO.UI/Components/DataPager.razor.cs new file mode 100644 index 0000000..cc5c24c --- /dev/null +++ b/MP.MONO.UI/Components/DataPager.razor.cs @@ -0,0 +1,177 @@ +using Microsoft.AspNetCore.Components; + +namespace MP.MONO.UI.Components +{ + public partial class DataPager : ComponentBase + { + #region Protected Fields + + protected bool _showLoading = false; + + #endregion Protected Fields + + #region Private Properties + + private int endPage + { + get + { + int answ = (int)(currPage / numPages) * numPages + numPages; + answ = answ < LastPage ? answ : LastPage; + return answ; + } + } + + private int LastPage + { + get + { + return Math.Max((int)Math.Ceiling(totalCount / (double)PageSize), 1); + } + } + + private int nextBlock + { + get + { + int answ = currPage + numPages; + answ = answ < LastPage ? answ : LastPage; + return answ; + } + } + + private int numPages { get; set; } = 10; + + private int prevBlock + { + get + { + int answ = currPage - numPages; + answ = answ > 0 ? answ : 1; + return answ; + } + } + + // calcola un set 1 .. numPages centrato sulla pagina corrente... + private int startPage + { + get + { + int answ = (int)(currPage / numPages) * numPages; + answ = answ > 0 ? answ : 1; + return answ; + } + } + + #endregion Private Properties + + #region Protected Properties + + protected int _numPage { get; set; } = 1; + + protected int _numRecord { get; set; } = 10; + + protected int percLoading { get; set; } = 0; + + #endregion Protected Properties + + #region Public Properties + + [Parameter] + public int currPage + { + get + { + return _numPage; + } + set + { + bool doReport = !_numPage.Equals(value); + if (doReport) + { + _numPage = value; + reportChangePage(); + } + } + } + + [Parameter] + public EventCallback numPageChanged { get; set; } + + [Parameter] + public EventCallback numRecordChanged { get; set; } + + [Parameter] + public int PageSize + { + get + { + return _numRecord; + } + set + { + bool doReport = !_numRecord.Equals(value); + if (doReport) + { + _numRecord = value; + reportChange(); + } + } + } + + [Parameter] + public bool showLoading + { + get + { + return _showLoading; + } + set + { + if (value) + { + Random random = new Random(); + percLoading = random.Next(30, 90); + } + else + { + percLoading = 5; + } + _showLoading = value; + } + } + + [Parameter] + public int totalCount { get; set; } = 0; + + #endregion Public Properties + + #region Private Methods + + private void reportChange() + { + numRecordChanged.InvokeAsync(PageSize); + } + + private void reportChangePage() + { + numPageChanged.InvokeAsync(currPage); + } + + #endregion Private Methods + + #region Protected Methods + + protected void HandlePaginationItemClick(string page) + { + currPage = int.Parse(page); + } + + protected override async Task OnInitializedAsync() + { + await Task.Run(() => showLoading = false); + } + + #endregion Protected Methods + } +} \ No newline at end of file diff --git a/MP.MONO.UI/Data/CurrentDataService.cs b/MP.MONO.UI/Data/CurrentDataService.cs index 109d5b2..4535a44 100644 --- a/MP.MONO.UI/Data/CurrentDataService.cs +++ b/MP.MONO.UI/Data/CurrentDataService.cs @@ -3,9 +3,11 @@ using MP.MONO.Core.CONF; using MP.MONO.Core.DTO; using MP.MONO.Data; using MP.MONO.Data.Controllers; +using MP.MONO.Data.DbModels; using Newtonsoft.Json; using NLog; using StackExchange.Redis; +using System.Diagnostics; namespace MP.MONO.UI.Data { @@ -281,6 +283,17 @@ namespace MP.MONO.UI.Data return await Task.FromResult(dbResult); } + public async Task> AlarmLogGetFilt(int machineId, int skipRec, int numRec) + { + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); + List? dbResult = dbController.AlarmLogGetFilt(machineId, skipRec, numRec); + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Trace($"Effettuata lettura da DB AlarmLogGetFilt: {ts.TotalMilliseconds} ms"); + return await Task.FromResult(dbResult); + } + #endregion Public Methods } } \ No newline at end of file diff --git a/MP.MONO.UI/Pages/Alarms.razor b/MP.MONO.UI/Pages/Alarms.razor index 94639a5..9ee1f6d 100644 --- a/MP.MONO.UI/Pages/Alarms.razor +++ b/MP.MONO.UI/Pages/Alarms.razor @@ -1,25 +1,120 @@ @page "/Alarms" -
-
-
-
+@using MP.MONO.Data +@using MP.MONO.UI.Components +@using MP.MONO.Core.DTO +@using MP.MONO.UI.Data + +@inject CurrentDataService MMDataService + +
+
+
+

Alarms

-
-
-
- +
+
+
+
+ +
-
- +
+
+
+ Max Record: +
+ +
+ @*
+
+
+ + + +
+ +
+
*@
+
+
+
+
Current alarms
+ +
+
+ @if (ListRecords == null) + { + + } + else if (totalCount == 0) + { +
No record found
+ } + else + { + + + + + + + + + + + + @foreach (var record in ListRecords) + { + + + + + + + + } + +
DataOraCodice AreaCodiceStato
+ @record.DtRif.ToString("ddd yyyy.MM.dd") + + @record.DtRif.ToString("HH:mm:ss") + @record.MemAddress / @record.Index + @record.Status + + @if (record.Status == 0) + { + @record.ValDecoded + } + else + { + @record.ValDecoded + } +
+ } + + +
+
+
+
-@code { -} diff --git a/MP.MONO.UI/Pages/Alarms.razor.cs b/MP.MONO.UI/Pages/Alarms.razor.cs new file mode 100644 index 0000000..9622288 --- /dev/null +++ b/MP.MONO.UI/Pages/Alarms.razor.cs @@ -0,0 +1,121 @@ +using MP.MONO.Data.DbModels; + +namespace MP.MONO.UI.Pages +{ + public partial class Alarms + { + #region Private Fields + + private List? ListRecords = null; + + // FARE!!! filtro macchina + private int MachineId = 1; + + private List? SearchRecords = null; + + #endregion Private Fields + + #region Protected Fields + + protected int _MaxRecord = 100; + + #endregion Protected Fields + + #region Private Properties + + 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 => _numRecord; + set + { + if (_numRecord != value) + { + _numRecord = value; + var pUpd = Task.Run(async () => await ReloadData()); + pUpd.Wait(); + } + } + } + + #endregion Private Properties + + #region Protected Properties + + protected int MaxRecord + { + get + { + return _MaxRecord; + } + set + { + if (_MaxRecord != value) + { + _MaxRecord = value; + var pUpd = Task.Run(async () => await ReloadData()); + pUpd.Wait(); + } + } + } + + protected int totalCount + { + get + { + int answ = 0; + if (SearchRecords != null) + { + answ = SearchRecords.Count; + } + return answ; + } + } + + #endregion Protected Properties + + #region Protected Methods + + protected void ForceReload(int newNum) + { + numRecord = newNum; + } + + protected void ForceReloadPage(int newNum) + { + currPage = newNum; + } + + protected override async Task OnInitializedAsync() + { + await ReloadData(); + } + + protected async Task ReloadData() + { + SearchRecords = await MMDataService.AlarmLogGetFilt(MachineId, 0, MaxRecord); + ListRecords = SearchRecords.Skip(numRecord * (currPage - 1)).Take(numRecord).ToList(); + } + + #endregion Protected Methods + } +} \ No newline at end of file