Bozza riscrittura WASM applicazione MON

This commit is contained in:
Samuele Locatelli
2022-07-08 17:27:08 +02:00
parent c24935afce
commit 7634fc42ba
14 changed files with 715 additions and 64 deletions
-18
View File
@@ -7,12 +7,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Data", "MP.Data\MP.Data.
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Mon", "MP.Mon\MP.Mon.csproj", "{7780FA7A-3597-4098-81C1-DC9AD6AE7A98}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.WASM.Mon.Server", "MP.WASM.Mon\Server\MP.WASM.Mon.Server.csproj", "{4A98B7F4-4EC6-4284-9D6C-63203DB981B1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.WASM.Mon.Client", "MP.WASM.Mon\Client\MP.WASM.Mon.Client.csproj", "{9BF7BDE7-016A-458C-8791-494FD4204301}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.WASM.Mon.Shared", "MP.WASM.Mon\Shared\MP.WASM.Mon.Shared.csproj", "{A3B1190C-6F98-434B-8B31-27522C78918A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -27,18 +21,6 @@ Global
{7780FA7A-3597-4098-81C1-DC9AD6AE7A98}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7780FA7A-3597-4098-81C1-DC9AD6AE7A98}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7780FA7A-3597-4098-81C1-DC9AD6AE7A98}.Release|Any CPU.Build.0 = Release|Any CPU
{4A98B7F4-4EC6-4284-9D6C-63203DB981B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4A98B7F4-4EC6-4284-9D6C-63203DB981B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4A98B7F4-4EC6-4284-9D6C-63203DB981B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4A98B7F4-4EC6-4284-9D6C-63203DB981B1}.Release|Any CPU.Build.0 = Release|Any CPU
{9BF7BDE7-016A-458C-8791-494FD4204301}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9BF7BDE7-016A-458C-8791-494FD4204301}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9BF7BDE7-016A-458C-8791-494FD4204301}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9BF7BDE7-016A-458C-8791-494FD4204301}.Release|Any CPU.Build.0 = Release|Any CPU
{A3B1190C-6F98-434B-8B31-27522C78918A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A3B1190C-6F98-434B-8B31-27522C78918A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A3B1190C-6F98-434B-8B31-27522C78918A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A3B1190C-6F98-434B-8B31-27522C78918A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
+49
View File
@@ -0,0 +1,49 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.32126.317
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Data", "MP.Data\MP.Data.csproj", "{10BA8450-301D-49C7-8E1E-21B7469C225C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Mon", "MP.Mon\MP.Mon.csproj", "{7780FA7A-3597-4098-81C1-DC9AD6AE7A98}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.WASM.Mon.Server", "MP.WASM.Mon\Server\MP.WASM.Mon.Server.csproj", "{4A98B7F4-4EC6-4284-9D6C-63203DB981B1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.WASM.Mon.Client", "MP.WASM.Mon\Client\MP.WASM.Mon.Client.csproj", "{9BF7BDE7-016A-458C-8791-494FD4204301}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.WASM.Mon.Shared", "MP.WASM.Mon\Shared\MP.WASM.Mon.Shared.csproj", "{A3B1190C-6F98-434B-8B31-27522C78918A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Release|Any CPU.Build.0 = Release|Any CPU
{7780FA7A-3597-4098-81C1-DC9AD6AE7A98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7780FA7A-3597-4098-81C1-DC9AD6AE7A98}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7780FA7A-3597-4098-81C1-DC9AD6AE7A98}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7780FA7A-3597-4098-81C1-DC9AD6AE7A98}.Release|Any CPU.Build.0 = Release|Any CPU
{4A98B7F4-4EC6-4284-9D6C-63203DB981B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4A98B7F4-4EC6-4284-9D6C-63203DB981B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4A98B7F4-4EC6-4284-9D6C-63203DB981B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4A98B7F4-4EC6-4284-9D6C-63203DB981B1}.Release|Any CPU.Build.0 = Release|Any CPU
{9BF7BDE7-016A-458C-8791-494FD4204301}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9BF7BDE7-016A-458C-8791-494FD4204301}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9BF7BDE7-016A-458C-8791-494FD4204301}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9BF7BDE7-016A-458C-8791-494FD4204301}.Release|Any CPU.Build.0 = Release|Any CPU
{A3B1190C-6F98-434B-8B31-27522C78918A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A3B1190C-6F98-434B-8B31-27522C78918A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A3B1190C-6F98-434B-8B31-27522C78918A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A3B1190C-6F98-434B-8B31-27522C78918A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {632D11D1-088B-4795-97E5-048534002558}
EndGlobalSection
EndGlobal
@@ -0,0 +1,9 @@
<div class="row text-light">
<div class="col-5 pe-0 text-left">
<b>Mapo MON @(DateTime.Today.Year)</b> | <span class="small">v.@version</span>
</div>
<div class="col-7 ps-0 text-end">
<span class="small">@($"{DateTime.Now:HH:mm:ss}")</span> | <a class="text-light" href="https://www.egalware.com/" target="_blank"><img class="img-fluid" width="16" src="images/LogoEgw.png" /> Egalware </a>
</div>
</div>
@@ -0,0 +1,58 @@
using NLog;
namespace MP.WASM.Mon.Client.Components
{
public partial class CmpFooter
{
#region Public Methods
public void Dispose()
{
//aTimer.Elapsed -= ElapsedTimer;
aTimer.Stop();
aTimer.Dispose();
}
public void ElapsedTimer(object? source, System.Timers.ElapsedEventArgs e)
{
var pUpd = Task.Run(async () =>
{
await Task.Delay(1);
await InvokeAsync(StateHasChanged);
});
pUpd.Wait();
Log.Trace($"Elapsed Timer Footer");
}
public void StartTimer()
{
int tOutPeriod = 1000;
//int.TryParse(Configuration["ReloadStatusTimer"], out tOutPeriod);
aTimer = new System.Timers.Timer(tOutPeriod);
aTimer.Elapsed += ElapsedTimer;
aTimer.Enabled = true;
aTimer.Start();
}
#endregion Public Methods
#region Protected Methods
protected override void OnInitialized()
{
var currAssembly = typeof(Program).Assembly.GetName();
version = currAssembly.Version != null ? currAssembly.Version : new Version();
StartTimer();
}
#endregion Protected Methods
#region Private Fields
private static System.Timers.Timer aTimer = null!;
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
private Version version = null!;
#endregion Private Fields
}
}
@@ -0,0 +1,49 @@
<div class="px-2">
<img class="logoImg img-fluid" src="images/LogoMapo.png" width="80" />
<span class="mainHead p-3"><b><span style="color: #DEDEDE;">MP MON</span>itor</b></span>
</div>
<div class="px-2">
<span id="text-white text-right">
@($"{DateTime.Now:dddd dd MMMM yyyy}")
</span>
<img class="logoImg img-fluid" src="images/logoCliente.png" width="32" />
EgalWare
</div>
@code {
//protected override async Task OnInitializedAsync()
//{
// StartTimer();
//}
//public void Dispose()
//{
// aTimer.Stop();
// aTimer.Dispose();
//}
//private static System.Timers.Timer aTimer;
//public void StartTimer()
//{
// int tOutPeriod = 60000;
// //int.TryParse(Configuration["ReloadStatusTimer"], out tOutPeriod);
// aTimer = new System.Timers.Timer(tOutPeriod);
// aTimer.Elapsed += ElapsedTimer;
// aTimer.Enabled = true;
// aTimer.Start();
//}
//public void ElapsedTimer(Object source, System.Timers.ElapsedEventArgs e)
//{
// var pUpd = Task.Run(async () =>
// {
// //await ReloadData();
// await Task.Delay(1);
// await InvokeAsync(StateHasChanged);
// });
// pUpd.Wait();
//}
}
@@ -0,0 +1,134 @@
<div class="col machBlock">
@if (CurrRecord == null || !dataLoaded)
{
<LoadingDataSmall></LoadingDataSmall>
}
else
{
<div class="@cssStatus(CurrRecord.Semaforo) p-1">
<div class="d-flex mb-1 ui-title justify-content-center align-items-center text-uppercase">
@CurrRecord.Nome
</div>
@if (hasRow(1))
{
<div class="d-flex justify-content-between pt-0 pb-0 px-1">
@foreach (var item in rowValues(1))
{
<div class="px-1 @item.TagCss">@item.TagName: <b>@currVal(item.TagLocation)</b></div>
}
</div>
}
else
{
<div class="d-flex justify-content-between pt-0 pb-2 px-1 fontSmall text-uppercase">
<div class="px-1 pe-0">Art</div>
<div class="px-1 ps-0 ui-art">
@if (showArt == "CodArticolo")
{
<span>@CurrRecord.CodArticolo</span>
}
else
{
if (string.IsNullOrEmpty(CurrRecord.Disegno))
{
<span>[@CurrRecord.CodArticolo]</span>
}
else
{
<span>@CurrRecord.Disegno</span>
}
}
</div>
</div>
}
@if (hasRow(2))
{
<div class="d-flex justify-content-between pt-0 pb-0 px-1">
@foreach (var item in rowValues(2))
{
<div class="px-1 @item.TagCss">@item.TagName: <b>@currVal(item.TagLocation)</b></div>
}
</div>
}
else
{
<div class="d-flex justify-content-between pt-0 pb-2 px-1 fontSmall">
<div class="px-1 text-uppercase"><b>@CurrRecord.DescrizioneStato</b></div>
<div class="px-1 ps-0">@getMinSec(getDecimal(@CurrRecord.Durata))</div>
</div>
}
@if (hasRow(3))
{
<div class="d-flex justify-content-between pt-0 pb-0 px-1">
@foreach (var item in rowValues(3))
{
<div class="px-1 @item.TagCss">@item.TagName: <b>@currVal(item.TagLocation)</b></div>
}
</div>
}
else
{
<div class="d-flex justify-content-between pt-0 pb-2 px-1 fontSmall text-uppercase">
@*<div class="col-6 pe-0">OEE</div>
<div class="col-6 ps-0">xx%</div>*@
<div class="px-1 pe-0">TCiclo</div>
<div class="px-1 ps-0">std: @getMinSec(@CurrRecord.TCAssegnato)</div>
<div class="px-1 ps-0">act: @getMinSec(@CurrRecord.TCLavRT)</div>
</div>
}
@if (hasRow(4))
{
<div class="d-flex justify-content-between pt-0 pb-0 px-1">
@foreach (var item in rowValues(4))
{
<div class="px-1 @item.TagCss">@item.TagName: <b>@currVal(item.TagLocation)</b></div>
}
</div>
}
else
{
<div class="d-flex justify-content-between pt-0 pb-0 px-1 fontSmall1 text-uppercase">
<div class="px-1 pe-0">Pezzi<sub>(prod/ord)</sub></div>
<div class="px-1 ps-0">@CurrRecord.PezziProd / @CurrRecord.NumPezzi</div>
</div>
}
@if (hasRow(5))
{
<div class="d-flex justify-content-between pt-0 pb-0 px-1">
@foreach (var item in rowValues(5))
{
<div class="px-1 @item.TagCss">@item.TagName: <b>@currVal(item.TagLocation)</b></div>
}
</div>
}
@if (hasRow(6))
{
<div class="d-flex justify-content-between pt-0 pb-0 px-1">
@foreach (var item in rowValues(6))
{
<div class="px-1 @item.TagCss">@item.TagName: <b>@currVal(item.TagLocation)</b></div>
}
</div>
}
</div>
<div class="@cssComStatus(CurrRecord.Semaforo, CurrRecord.LastUpdate) p-1">
<div class="row fontSmaller mt-1">
<div class="col-12">
<div class="text-right ui-footer px-2">
<div class="row">
@if (showComErr(CurrRecord.LastUpdate))
{
<div class="col text-warning">
<b>C.101</b>
</div>
}
<div class="col text-end">
@CurrRecord.LastUpdate
</div>
</div>
</div>
</div>
</div>
</div>
}
</div>
@@ -0,0 +1,286 @@
using Microsoft.AspNetCore.Components;
using MP.Data.Conf;
using MP.Data.DatabaseModels;
using NLog;
namespace MP.WASM.Mon.Client.Components
{
public partial class DetailMSE
{
#region Public Properties
[Parameter]
public MappaStatoExpl? CurrRecord { get; set; } = null;
/// <summary>
/// Valore precedente x calcolo variazione
/// </summary>
private MappaStatoExpl? OldRecord { get; set; } = null;
[Parameter]
public List<TagData>? currTagConf { get; set; } = null;
[Parameter]
public Dictionary<string, string> currTagVal { get; set; } = new Dictionary<string, string>();
[Parameter]
public bool doAnimate { get; set; } = true;
[Parameter]
public int keepAliveMin { get; set; } = 5;
[Parameter]
public string showArt { get; set; } = "";
#endregion Public Properties
#region Public Methods
public void Dispose()
{
//aTimer.Elapsed -= ElapsedTimer;
aTimer.Stop();
aTimer.Dispose();
}
public void ElapsedTimer(object? source, System.Timers.ElapsedEventArgs e)
{
var pUpd = Task.Run(async () =>
{
await Task.Delay(1);
// verifica variazione x blink...
bool needUpdate = false;
if (CurrRecord == null)
{
needUpdate = true;
}
else
{
if (OldRecord == null)
{
needUpdate = true;
}
else
{
if (!CurrRecord.Semaforo.Equals(OldRecord.Semaforo) || CurrRecord.Semaforo != "sVe")
{
needUpdate = true;
}
}
}
if (needUpdate)
{
if (false)
{
Log.Trace($"Elapsed Timer {CurrRecord?.CodMacchina}");
}
await InvokeAsync(StateHasChanged);
}
OldRecord = CurrRecord;
});
pUpd.Wait();
}
public void StartTimer()
{
int tOutPeriod = 1000;
//int.TryParse(Configuration["ReloadStatusTimer"], out tOutPeriod);
aTimer = new System.Timers.Timer(tOutPeriod);
aTimer.Elapsed += ElapsedTimer;
aTimer.Enabled = true;
aTimer.Start();
}
#endregion Public Methods
#region Protected Fields
protected string baseCss = "sem";
protected int kaFactor = 60 / 2;
#endregion Protected Fields
#region Protected Properties
protected string codIOB
{
get
{
string answ = "";
if (CurrRecord != null)
{
answ = CurrRecord.IdxMacchina;
}
return answ;
}
}
protected bool dataLoaded { get; set; } = false;
#endregion Protected Properties
#region Protected Methods
/// <summary>
/// restituisce il valore data la tagLocation
/// </summary>
/// <param name="tagLocation"></param>
/// <returns></returns>
protected string currVal(string tagLocation)
{
string answ = "";
if (currTagVal.ContainsKey(tagLocation))
{
answ = currTagVal[tagLocation];
}
return answ;
}
/// <summary>
/// Verifica se ci sia un override per la riga indicata
/// </summary>
/// <param name="numRow"></param>
/// <returns></returns>
protected bool hasRow(int numRow)
{
bool answ = false;
if (currTagConf != null)
{
if (currTagConf.Count > 0)
{
var currVals = rowValues(numRow);
answ = currVals.Count > 0;
}
}
return answ;
}
protected override async Task OnInitializedAsync()
{
StartTimer();
Random rnd = new Random();
await Task.Delay(rnd.Next(5));
setupConf();
dataLoaded = true;
}
/// <summary>
/// Restituisce (se presenti) valori di override per la riga indicata
/// </summary>
/// <param name="numRow"></param>
/// <returns></returns>
protected List<TagData> rowValues(int numRow)
{
List<TagData>? rowVals = null;
if (currTagConf != null)
{
if (currTagConf.Count > 0)
{
//cerco solo la riga corrente...
rowVals = currTagConf.Where(x => x.RowNum == numRow).ToList();
}
}
if (rowVals == null)
{
rowVals = new List<TagData>();
}
return rowVals;
}
#endregion Protected Methods
#region Private Fields
private static System.Timers.Timer aTimer { get; set; } = null!;
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
#endregion Private Fields
#region Private Methods
private string cssComStatus(string semaforo, DateTime? lastUpdateN)
{
DateTime lastUpdate = lastUpdateN.HasValue ? (DateTime)lastUpdateN : DateTime.Now.AddHours(-1);
string answ = cssStatus(semaforo);
if (DateTime.Now.Subtract(lastUpdate).TotalSeconds > (keepAliveMin * kaFactor))
{
answ = $"{baseCss}Ro";
// blink se secondo pari...
DateTime adesso = DateTime.Now;
int resto = 0;
Math.DivRem(adesso.Second, 2, out resto);
if (resto == 0)
{
answ += "_b";
}
}
return answ;
}
private string cssStatus(string codSemaforo)
{
// se vuoto --> mostra nero!
if (string.IsNullOrEmpty(codSemaforo))
{
codSemaforo = "sNe";
}
string codColore = codSemaforo.Substring(1, 2);
string answ = $"{baseCss}{codColore}";
if (doAnimate && codColore != "Ve")
{
// blink se secondo pari...
DateTime adesso = DateTime.Now;
int resto = 0;
Math.DivRem(adesso.Second, 2, out resto);
if (resto == 0)
{
answ += "_b";
}
}
return answ;
}
private decimal getDecimal(object? rawData)
{
decimal answ = 0;
if (rawData != null)
{
decimal.TryParse($"{rawData}", out answ);
}
return answ;
}
private string getMinSec(decimal? currTimeMin)
{
string answ = "nd";
TimeSpan tSpan = new TimeSpan(0);
try
{
double cTimeMin = currTimeMin != null ? (double)currTimeMin : 0;
tSpan = TimeSpan.FromMinutes(cTimeMin);
answ = $"{tSpan:mm}:{tSpan:ss}";
}
catch
{ }
return answ;
}
private void setupConf()
{
//baseCss = doAnimate ? "semBlink" : "sem";
}
private bool showComErr(DateTime? lastUpdateN)
{
DateTime lastUpdate = lastUpdateN.HasValue ? (DateTime)lastUpdateN : DateTime.Now.AddHours(-1);
bool answ = false;
if (DateTime.Now.Subtract(lastUpdate).TotalSeconds > (keepAliveMin * kaFactor))
{
answ = true;
}
return answ;
}
#endregion Private Methods
}
}
@@ -0,0 +1,6 @@
<div class="row p-5 m-5 bg-light">
<div class="col-12 text-center mt-5 py-5 alert alert-primary">
<h3>loading data</h3>
<i class="fas fa-spinner fa-spin fa-5x"></i>
</div>
</div>
@@ -0,0 +1,6 @@
<div class="row p-2 m-2">
<div class="col-12 text-center mt-2 py-2 alert alert-primary">
<b>loading data</b>
<i class="fas fa-spinner fa-spin"></i>
</div>
</div>
@@ -12,6 +12,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\MP.Data\MP.Data.csproj" />
<ProjectReference Include="..\Shared\MP.WASM.Mon.Shared.csproj" />
</ItemGroup>
+48
View File
@@ -0,0 +1,48 @@
@page "/fetchmse"
@using MP.Data
@using MP.Data.DatabaseModels
@using MP.WASM.Mon.Shared
@inject HttpClient Http
<PageTitle>MSE Data</PageTitle>
<h1>MSE Data</h1>
@if (listMSE == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Date</th>
<th>Macc</th>
<th>Sem</th>
<th>Art</th>
</tr>
</thead>
<tbody>
@foreach (var item in listMSE)
{
<tr>
<td>@item.LastUpdate?.ToShortDateString()</td>
<td>@item.CodMacchina</td>
<td>@item.Semaforo</td>
<td>@item.CodArticolo</td>
</tr>
}
</tbody>
</table>
}
@code {
private List<MappaStatoExpl>? listMSE;
protected override async Task OnInitializedAsync()
{
listMSE = await Http.GetFromJsonAsync<List<MappaStatoExpl>>("api/MSE");
}
}
+6 -1
View File
@@ -21,7 +21,12 @@
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="fetchdata">
<span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
<span class="oi oi-list-rich" aria-hidden="true"></span> Weather
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="fetchmse">
<span class="oi oi-list-rich" aria-hidden="true"></span> MSE
</NavLink>
</div>
</nav>
+2
View File
@@ -6,5 +6,7 @@
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.AspNetCore.Components.WebAssembly.Http
@using Microsoft.JSInterop
@using MP.Data
@using MP.WASM.Mon.Client
@using MP.WASM.Mon.Client.Shared
@using MP.WASM.Mon.Client.Components
+61 -45
View File
@@ -1,8 +1,6 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using MP.Data.Conf;
using MP.Data.DatabaseModels;
using MP.WASM.Mon.Shared;
using Newtonsoft.Json;
using NLog;
using StackExchange.Redis;
@@ -14,30 +12,13 @@ namespace MP.WASM.Mon.Server.Controllers
[Route("api/[controller]")]
public class MSEController : ControllerBase
{
public static MP.Data.Controllers.MpMonController dbController { get; set; } = null!;
private static IConfiguration _configuration = null!;
//private static ILogger<MSEController> _logger = null!;
private readonly ILogger<MSEController> _logger;
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
#region Public Constructors
/// <summary>
/// Oggetto per connessione a REDIS
/// Avvio controller dei dati MSE
/// </summary>
private ConnectionMultiplexer redisConn = null!;
//ISubscriber sub = redis.GetSubscriber();
/// <summary>
/// Oggetto DB redis da impiegare x chiamate R/W
/// </summary>
private IDatabase redisDb = null!;
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
/// <param name="configuration"></param>
/// <param name="logger"></param>
public MSEController(IConfiguration configuration, ILogger<MSEController> logger)
{
_logger = logger;
@@ -67,26 +48,22 @@ namespace MP.WASM.Mon.Server.Controllers
tryLoadIobTags();
}
#endregion Public Constructors
#region Public Properties
public static MP.Data.Controllers.MpMonController dbController { get; set; } = null!;
/// <summary>
/// Dizionario dei tag configurati per IOB
/// </summary>
public Dictionary<string, List<TagData>> currTagConf { get; set; } = new Dictionary<string, List<TagData>>();
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
#endregion Public Properties
#region Public Methods
[HttpGet("GetConfig")]
[HttpGet("getConfig")]
public Task<List<ConfigModel>> ConfigGetAll()
{
return Task.FromResult(dbController.ConfigGetAll().ToList());
@@ -103,7 +80,7 @@ namespace MP.WASM.Mon.Server.Controllers
/// </summary>
/// <param name="redKey">Chiave in cui cercare il valore</param>
/// <returns></returns>
[HttpGet("GetTagConf/{redKey}")]
[HttpGet("getTagConf/{redKey}")]
public string getTagConf(string redKey)
{
string outVal = "";
@@ -116,14 +93,17 @@ namespace MP.WASM.Mon.Server.Controllers
return outVal;
}
[HttpGet("GetMachines")]
[HttpGet("getMachines")]
public Task<List<Macchine>> MacchineGetAll()
{
return Task.FromResult(dbController.MacchineGetAll().ToList());
}
[HttpGet("GetMSE")]
/// <summary>
/// Metodo principale x ricevere tutte i dati MSE di tutti gli impianti
/// </summary>
/// <returns></returns>
[HttpGet()]
public Task<List<MappaStatoExpl>> MseGetAll()
{
var dbResult = dbController.MseGetAll();
@@ -134,7 +114,42 @@ namespace MP.WASM.Mon.Server.Controllers
return Task.FromResult(dbResult);
}
#endregion Public Methods
#region Private Fields
private static IConfiguration _configuration = null!;
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
//private static ILogger<MSEController> _logger = null!;
private readonly ILogger<MSEController> _logger;
/// <summary>
/// Oggetto per connessione a REDIS
/// </summary>
private ConnectionMultiplexer redisConn = null!;
//ISubscriber sub = redis.GetSubscriber();
/// <summary>
/// Oggetto DB redis da impiegare x chiamate R/W
/// </summary>
private IDatabase redisDb = null!;
#endregion Private Fields
#region Private Methods
//[HttpGet]
//public IEnumerable<WeatherForecast> Get()
//{
// return Enumerable.Range(1, 5).Select(index => new WeatherForecast
// {
// Date = DateTime.Now.AddDays(index),
// TemperatureC = Random.Shared.Next(-20, 55),
// Summary = Summaries[Random.Shared.Next(Summaries.Length)]
// })
// .ToArray();
//}
/// <summary>
/// Prova a caricare da file la conf degli IOB se presente
/// </summary>
@@ -156,7 +171,8 @@ namespace MP.WASM.Mon.Server.Controllers
var fileConfData = JsonConvert.DeserializeObject<IobTags>(rawData);
if (fileConfData != null)
{
// effettuo esplosione conf SE contenesse il valore "***" = tutti gli IOB
// effettuo esplosione conf SE contenesse il valore "***" = tutti
// gli IOB
if (fileConfData.IobSetup.ContainsKey("***"))
{
// recupero elenco macchine...
@@ -167,8 +183,8 @@ namespace MP.WASM.Mon.Server.Controllers
{
if (!string.IsNullOrEmpty(item.IdxMacchina))
{
// converto i valori x la macchina corrente...
// clono in nuovo oggetto
// converto i valori x la macchina corrente... clono in
// nuovo oggetto
var specVal = baseConf.Value.Select(i => i.Clone()).ToList();
// sostituisco segnaposto
foreach (var singleVal in specVal)
@@ -200,7 +216,6 @@ namespace MP.WASM.Mon.Server.Controllers
currConf.Add(item.IdxMacchina, specVal);
}
}
}
// altrimenti copio ed ho finito
else
@@ -218,5 +233,6 @@ namespace MP.WASM.Mon.Server.Controllers
}
}
#endregion Private Methods
}
}
}