Compare commits

...

6 Commits

Author SHA1 Message Date
Samuele Locatelli 595ea40e6c Fix grafico dettaglio macchina 2024-01-09 08:29:22 +01:00
Samuele Locatelli 3ce3808995 Fix extra prod 2024-01-08 20:19:17 +01:00
Samuele Locatelli a9011e014b Fix blocco update durante setup ODL 2024-01-08 17:08:34 +01:00
Samuele Locatelli de1d30fdb6 Fix refresh timeout eventi login 2024-01-08 12:25:05 +01:00
Samuele Locatelli 1eb01b0532 Fix due tipologie di login 2024-01-08 12:21:25 +01:00
Samuele Locatelli 20ae251943 Merge tag 'Tab3_FixOdl04' into develop
Fix gestione display odl + riattrezzaggio
2024-01-05 11:53:34 +01:00
17 changed files with 358 additions and 243 deletions
+11 -1
View File
@@ -11,7 +11,17 @@
}
else
{
<ProgBar currVal="@CurrExpVal" maxVal="@MaxExpVal" singleLine="true" baseUM="m" yelLim="@yLimit" redLim="@rLimit"></ProgBar>
if (MatrOper >= 0)
{
if (showProgrBar)
{
<ProgBar currVal="@CurrExpVal" maxVal="@MaxExpVal" singleLine="true" baseUM="m" yelLim="@yLimit" redLim="@rLimit"></ProgBar>
}
}
else
{
<div class="alert alert-info text-center p-0 mb-0">...login...</div>
}
}
}
</div>
+71 -12
View File
@@ -8,9 +8,15 @@ namespace MP_TAB3.Components
{
#region Public Properties
[Parameter]
public Guid CurrDevGuid { get; set; }
[Parameter]
public int DtScadLogin { get; set; } = 0;
[Parameter]
public int MatrOper { get; set; } = -1;
[Parameter]
public int TypeScadLogin { get; set; } = -1;
@@ -41,6 +47,9 @@ namespace MP_TAB3.Components
[Inject]
protected SharedMemService SMServ { get; set; } = null!;
[Inject]
protected TabDataService TDataService { get; set; } = null!;
#endregion Protected Properties
#region Protected Methods
@@ -49,16 +58,50 @@ namespace MP_TAB3.Components
{
var pUpd = Task.Run(async () =>
{
if (TypeScadLogin > 0)
{
var diffOfTime = DateTime.Now.Subtract(MsgServ.dtLastAction);
CurrExpVal = MaxExpVal - diffOfTime.TotalMinutes;
}
else
{
}
adesso = DateTime.Now;
await InvokeAsync(() => StateHasChanged());
// solo se NON sono in login...
if (!IsLoginPage)
{
var diffOfTime = adesso.Subtract(MsgServ.dtLastAction);
CurrExpVal = MaxExpVal - diffOfTime.TotalMinutes;
if (TypeScadLogin == 1)
{
if (CurrExpVal < 0)
{
MsgServ.dtLastAction = adesso;
NavMan.NavigateTo("logout");
}
}
// in questo caso cerco SOLO se sia scaduto su redis
else if (TypeScadLogin == 2)
{
// mitigazione check: solo ogni 10 secondi...
if (adesso.Subtract(MsgServ.dtLastSave).TotalSeconds > 10)
{
MsgServ.dtLastSave = adesso;
// rileggo scadenza ultima...
TimeSpan tsScadenza = TDataService.OperatoreGetGuidTTL(MatrOper, CurrDevGuid);
// mostro scadenza SOLO se inferiore a 24h...
showProgrBar = tsScadenza.TotalHours < 24;
// se < 0 --> login
if (tsScadenza.TotalMinutes < 0)
{
NavMan.NavigateTo("logout");
}
else
{
MsgServ.dtLastAction = adesso.Subtract(TimeSpan.FromMinutes(MaxExpVal)).Add(tsScadenza);
}
// comunque controllo chiave redis
var userTkn = await TDataService.OperatoreGetRedis(MatrOper, CurrDevGuid);
if (string.IsNullOrEmpty(userTkn))
{
NavMan.NavigateTo("logout");
}
}
}
}
await InvokeAsync(StateHasChanged);
});
pUpd.Wait();
}
@@ -68,9 +111,14 @@ namespace MP_TAB3.Components
var rawVers = typeof(Program).Assembly.GetName().Version;
version = rawVers != null ? rawVers : new Version("0.0.0.0");
DtScadLogin = SMServ.GetConfInt("TAB_dtTimerScadLogin");
showProgrBar = TypeScadLogin == 1;
MaxExpVal = DtScadLogin;
yLimit = MaxExpVal * 0.3;
rLimit = MaxExpVal * 0.1;
// rileggo scadenza ultima...
TimeSpan tsScadenza = TDataService.OperatoreGetGuidTTL(MatrOper, CurrDevGuid);
MsgServ.dtLastAction = adesso.Subtract(TimeSpan.FromMinutes(MaxExpVal)).Add(tsScadenza);
showProgrBar = tsScadenza.TotalHours < 24;
StartTimer();
}
@@ -89,6 +137,7 @@ namespace MP_TAB3.Components
private DateTime adesso = DateTime.Now;
private System.Timers.Timer aTimer = null!;
private bool showProgrBar = true;
private Version version = null!;
#endregion Private Fields
@@ -96,20 +145,30 @@ namespace MP_TAB3.Components
#region Private Properties
private double CurrExpVal { get; set; } = 50;
private bool IsLoginPage
{
get
{
string currPage = NavMan.Uri;
return currPage.Contains("logout") || currPage.Contains("reg-new-device");
}
}
private double MaxExpVal { get; set; } = 100;
private double rLimit { get; set; } = 10;
private string timeUm
private string CurrUM
{
get
{
string answ = "m";
if (CurrExpVal > 60)
if (MaxExpVal > 60)
{
answ = "h";
}
else if (CurrExpVal > 1440)
else if (MaxExpVal > 1440)
{
answ = "gg";
}
+7 -45
View File
@@ -17,6 +17,8 @@ namespace MP_TAB3.Components
public List<LinkMenu> CurrMenuItems { get; set; } = new List<LinkMenu>();
[Parameter]
public EventCallback<bool> EA_UserIsOk { get; set; }
[Parameter]
public EventCallback<bool> EA_ReloadMStor { get; set; }
#endregion Public Properties
@@ -29,7 +31,7 @@ namespace MP_TAB3.Components
#region Protected Properties
protected string CurrOprTknLS { get; set; } = null!;
//protected Guid CurrDevGuid { get; set; }
protected string LastOpenedPage { get; set; } = null!;
protected string CurrMacc { get; set; } = null!;
@@ -68,7 +70,7 @@ namespace MP_TAB3.Components
protected async Task RefreshLogIn(string decodValue)
{
bool done = false;
if (TypeScadLogin <= 0)
if (TypeScadLogin <= 0 || TypeScadLogin == 2)
{
done = await MsgServ.DoLogIn(decodValue, false);
}
@@ -107,8 +109,8 @@ namespace MP_TAB3.Components
await MsgServ.SetCurrDevGuidLSAsync(devGuid);
await MsgServ.SetLastMatrOprAsync(lastOpr);
await MsgServ.SetCurrOperDtoLSAsync(currToken);
// reload MStor
await ReloadMemStor();
// richiesta reload MStor
await EA_ReloadMStor.InvokeAsync(true);
// calcolo tempo esecuzione
sw.Stop();
int delta = 500 - (int)sw.ElapsedMilliseconds;
@@ -116,7 +118,7 @@ namespace MP_TAB3.Components
await Task.Delay(delta);
ResetClass = "btn-primary";
// await InvokeAsync(StateHasChanged);
Log.Info($"ForceReload completed in {sw.ElapsedMilliseconds}ms");
Log.Info($"ForceReload completed in {sw.Elapsed.TotalMilliseconds}ms");
// ricarica pagina!
NavMan.NavigateTo("status-map");
}
@@ -135,9 +137,6 @@ namespace MP_TAB3.Components
protected override async Task OnInitializedAsync()
{
await Task.Delay(1);
#if false
TypeScadLogin = SMServ.GetConfInt("TAB_TypeScadLogin");
#endif
var CurrDevGuid = await MsgServ.GetCurrDevGuidLSAsync();
if (CurrDevGuid == Guid.Empty)
@@ -182,43 +181,6 @@ namespace MP_TAB3.Components
}
}
protected async Task ReloadMemStor()
{
// in primis svuoto...
MStor.ClearCache();
// rileggo link
var allData = await MDataService.ListLinkAll();
MStor.SetupMenu(allData);
// fix config...
var allConf = await MDataService.ConfigGetAll();
MStor.SetConfig(allConf);
// fix MSFD...
var allMSFD = await TDService.VMSFDGetAll();
MStor.SetMsfd(allMSFD);
// fix slave
var macSlave = await TDService.Macchine2Slave();
MStor.SetM2S(macSlave);
// fix elenco eventi
var allEvents = await TDService.AnagEventiGetAll();
MStor.SetEventi(allEvents);
// fix elenco stati
var allStati = await TDService.AnaStatiGetAll();
MStor.SetStati(allStati);
// non da farsi globalmente // fix macchine var allMach = await
// MDataService.MacchineByMatrOper(0); MStor.DictMacchine = allMach.ToDictionary(x =>
// x.IdxMacchina, x => $"{x.IdxMacchina} | {x.Nome}");
// fix vocabolario
var allVoc = TDService.VocabolarioGetAll();
MStor.SetVocab(allVoc);
// resetto il tabDServ
await TDService.FlushCache();
// ricarica la config...
TDService.SetupConfig();
}
#endregion Protected Methods
#region Private Fields
+79 -66
View File
@@ -56,10 +56,9 @@ else
<i class="fa-regular fa-circle-check"></i>&nbsp; @($" {RecMSE.PezziConf}") &nbsp;
</div>
<div class="text-danger">
+ &nbsp;
@if (datiProdAct != null)
@if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
{
@($" {datiProdAct.PzConfScarto}")
@($"(- {datiProdAct.PzConfScarto})")
}
</div>
</div>
@@ -95,7 +94,6 @@ else
}
else
{
<div class="cardObj shadow" @onclick="ShowDetail">
<div class="card-body p-0">
<div class="@RecMSE.Semaforo borderStd p-1 text-center">
@@ -107,25 +105,26 @@ else
</div>
@if (showCard)
{
<div class="row">
@*<div class="col-8 text-center text-success d-flex justify-content-between pe-2">*@
<div class="text-center col-4 d-flex justify-content-between text-success">
<div class="col-2"><i class="fa-regular fa-circle-check"></i></div>
<div class="col-10">
@($"{RecMSE.PezziConf}")
<div class="d-flex justify-content-between w-100">
<div class="px-2">
<div class="d-flex text-success">
<div class="px-0">
<i class="fa-regular fa-circle-check"></i>&nbsp;@($"{RecMSE.PezziConf}")
</div>
@if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
{
<div class="px-1">
<div class="text-danger">
@($"(- {datiProdAct.PzConfScarto})")
</div>
</div>
}
</div>
</div>
<div class="text-danger col-4">
+ &nbsp;
@if (datiProdAct != null)
{
@($" {datiProdAct.PzConfScarto}")
}
</div>
@*</div>*@
<div class="text-center col-4 text-warning d-flex justify-content-between">
<div class="col-2"><i class="fa-solid fa-layer-group"></i></div>
<div class="col-10">@($"{RecMSE.PezziProd}")</div>
<div class="px-2">
<div class="text-end text-warning">
<i class="fa-solid fa-layer-group"></i>&nbsp;@($"{RecMSE.PezziProd}")
</div>
</div>
</div>
<div class="d-flex justify-content-between w-100" style="height: 100px; width: 100px;">
@@ -151,66 +150,80 @@ else
else
{
<div class="cardObj px-3 py-1">
<div class="text-center d-flex justify-content-between ">
<div class="col-4">
<div class="py-2">
<h4 class="text-start mb-0 fw-bold">
@RecMSE.Nome
</h4>
</div>
<div style="font-size: 1rem" class="me-3">
<div class="text-center d-flex justify-content-between align-items-center ">
<div class="col-4 fs-5">
<div class="lh-1">
<div class="text-end text-success d-flex justify-content-between">
<div class="col-4"><i class="fa-regular fa-circle-check"></i></div>
<div class="col-8 d-flex justify-content-between">
<div>
&nbsp; @($"{RecMSE.PezziConf}")
</div>
<div class="text-danger">
+ &nbsp;
@if (datiProdAct != null)
{
@($" {datiProdAct.PzConfScarto}")
}
</div>
<div class="px-0">
Confermati
@* <i class="fa-regular fa-circle-check"></i> *@
</div>
<div class="px-0">
@($"{RecMSE.PezziConf}")
</div>
</div>
<div class="text-end text-warning d-flex justify-content-between">
<div class="col-4"><i class="fa-solid fa-layer-group"></i></div>
<div class="col-8">@($"{RecMSE.PezziProd}")</div>
</div>
<div class="text-end text-primary d-flex justify-content-between">
<div class="col-4"><i class="fa-brands fa-stack-overflow"></i></div>
<div class="col-8">@($"{RecMSE.extraVal}")</div>
</div>
</div>
</div>
<div class="col-4" style="max-height: 8rem; max-width: 8rem;">
<EgwCoreLib.Razor.CircleGaugeMulti Titolo="@($"{currMaxVal}")" Testo="#pz prod" maxVal="@currMaxVal" ListInner="@innerCircleVals" ListOuter="@outerCircleVals" ShowCircleBtn="true"></EgwCoreLib.Razor.CircleGaugeMulti>
</div>
<div class="col-4 d-flex flex-wrap justify-content-center align-items-center " style="line-height: 1.6rem;">
<div>
@if (!string.IsNullOrEmpty(IdxMacchSub))
@if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
{
<div class="text-warning border border-warning rounded-3 px-2">
@IdxMacchSub <i class="fa-solid fa-triangle-exclamation"></i>
<div class="text-end text-danger d-flex justify-content-between">
<div class="px-0">
Scarto
</div>
<div class="px-0">
@($"- {datiProdAct.PzConfScarto}")
</div>
</div>
}
<div class="text-end text-warning d-flex justify-content-between">
<div class="px-0">
Prodotti
@* <i class="fa-solid fa-layer-group"></i> *@
</div>
<div class="px-0">@($"{RecMSE.PezziProd}")</div>
</div>
@if (RecMSE.extraVal > 0)
{
<div class="text-end text-primary d-flex justify-content-between">
<div class="px-0">
Extra
@* <i class="fa-brands fa-stack-overflow"></i> *@
</div>
<div class="px-0">@($"{RecMSE.extraVal}")</div>
</div>
}
</div>
</div>
<div class="col-4" style="max-height: 8rem; max-width: 6rem;">
<h4 class="text-center mb-0 fw-bold">
@RecMSE.Nome
</h4>
<EgwCoreLib.Razor.CircleGaugeMulti Titolo="@($"{currMaxVal}")" Testo="#pz prod" maxVal="@currMaxVal" ListInner="@innerCircleVals" ListOuter="@outerCircleVals" ShowCircleBtn="true"></EgwCoreLib.Razor.CircleGaugeMulti>
</div>
<div class="col-4 d-flex flex-wrap justify-content-center align-items-center lh-1">
<div class="w-100">
@if (!string.IsNullOrEmpty(IdxMacchSub))
{
<div class="text-warning border border-warning rounded-3 small px-2 py-1 mb-1">
@IdxMacchSub
</div>
}
</div>
<div class="w-100 fs-5">
<div class="text-light d-flex justify-content-between small lh-sm">
<div class="text-start col-4">ART:</div>
<div class="text-end col-8">@($"{RecMSE.CodArticolo}")</div>
<div class="px-0">ART</div>
<div class="px-0">@RecMSE.CodArticolo</div>
</div>
<div class="text-end text-light d-flex justify-content-between small lh-sm">
<div class="text-start col-4">ODL:</div>
<div class="text-end col-8">@($"ODL{RecMSE.IdxOdl:00000000}")</div>
<div class="px-0">ODL</div>
<div class="px-0">@RecMSE.IdxOdl</div>
</div>
<div class="text-end text-light d-flex justify-content-between small lh-sm">
<div class="text-start col-4">PODL:</div>
<div class="text-end col-8">@($"PODL{RecMSE.IdxPOdl:00000000}")</div>
<div class="px-0">PODL:</div>
<div class="px-0">@RecMSE.IdxPOdl</div>
</div>
</div>
</div>
</div>
<div class="d-flex justify-content-between">
<div class="d-flex justify-content-between mt-1">
<div class="col-10 mb-2 px-2 py-1 @RecMSE.Semaforo statusCard">
<div class="d-flex justify-content-center ">
<div class="p-0 mr-auto me-1">
+8 -3
View File
@@ -175,14 +175,14 @@ namespace MP_TAB3.Components
{
DateTime adesso = DateTime.Now;
isLoading = RecMSE == null;
// controllo SE avessi idxMacchSub --> rileggo!
// controllo SE ho variazioni così rileggo
if (RecMSE != null)
{
if (SDService.MachNumPzGet(RecMSE.IdxMacchina) != RecMSE.NumPezzi)
if (SDService.MachNumPzGet(RecMSE.IdxMacchina) != RecMSE.PezziProd)
{
datiProdAct = await TabDServ.StatoProdMacchina(RecMSE.IdxMacchina, adesso);
SDService.MachProdStSet(RecMSE.IdxMacchina, datiProdAct);
SDService.MachNumPzSet(RecMSE.IdxMacchina, RecMSE.NumPezzi);
SDService.MachNumPzSet(RecMSE.IdxMacchina, RecMSE.PezziProd);
}
else
{
@@ -207,6 +207,11 @@ namespace MP_TAB3.Components
if (RecMSE.PezziConf > 0)
{
innerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#198754", Value = RecMSE.PezziConf });
// se ho scarti aggiungo all'inizio
if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
{
innerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#CD1916", Value = datiProdAct.PzConfScarto });
}
}
if (RecMSE.extraVal > 0)
{
+2 -2
View File
@@ -44,7 +44,7 @@
</div>
}
<div class="col-12 my-2">
<div class="btn btn-danger w-100">
<button class="btn btn-danger w-100" @onclick="GoToMachDetail">
<div class="fs-1">@lblWarnHead</div>
<div class="fs-4">
@lblWarnBody
@@ -52,7 +52,7 @@
Pezzi NC: <b>@numPz2Conf</b>
</div>
</div>
</div>
</button>
</div>
@if (!odlOk)
{
+48 -16
View File
@@ -24,7 +24,22 @@ namespace MP_TAB3.Components
public EventCallback<List<MappaStatoExpl>> E_Updated { get; set; }
[Parameter]
public MappaStatoExpl? RecMSE { get; set; } = null;
public MappaStatoExpl? RecMSE
{
get => currRecMSE;
set
{
// salvo SOLO SE non sono in conferma
if (!setupActive)
{
currRecMSE = value;
}
}
}
private bool setupActive { get; set; } = false;
private MappaStatoExpl? currRecMSE { get; set; } = null;
#endregion Public Properties
@@ -68,6 +83,7 @@ namespace MP_TAB3.Components
get => idxPOdlSel;
set
{
setupActive = value != 0;
if (idxPOdlSel != value)
{
idxPOdlSel = value;
@@ -707,27 +723,33 @@ namespace MP_TAB3.Components
}
protected override async Task OnParametersSetAsync()
{
if (RecMSE != null)
if (!setupActive)
{
if (string.IsNullOrEmpty(IdxMaccSel))
if (RecMSE != null)
{
IdxMaccSel = RecMSE.IdxMacchina;
}
isMulti = SMServ.DictMacchMulti[RecMSE.IdxMacchina] == 1;
if (isMulti)
{
var idxMSel = MServ.UserPrefGet(IdxMaccSel);
if (!string.IsNullOrEmpty(idxMSel))
if (string.IsNullOrEmpty(IdxMaccSel))
{
IdxMaccSel = idxMSel;
IdxMaccSel = RecMSE.IdxMacchina;
}
isMulti = SMServ.DictMacchMulti[RecMSE.IdxMacchina] == 1;
if (isMulti)
{
var idxMSel = MServ.UserPrefGet(IdxMaccSel);
if (!string.IsNullOrEmpty(idxMSel))
{
IdxMaccSel = idxMSel;
}
}
IdxMaccParent = getIdxMaccParent();
}
IdxMaccParent = getIdxMaccParent();
checkAll();
// verifica stato inAttr
await CheckAttr();
await ReloadData(true);
}
checkAll();
// verifica stato inAttr
await CheckAttr();
await ReloadData(true);
// verifica conferma produzione
datiProdAct = await TabDServ.StatoProdMacchina(IdxMaccSel, DateTime.Now);
checkConfProd();
}
protected async Task ProdEnd()
@@ -844,6 +866,12 @@ namespace MP_TAB3.Components
//NavMan.NavigateTo(NavMan.Uri, true);
}
protected void GoToMachDetail()
{
// navigo!
NavMan.NavigateTo($"machine-detail");
}
protected async Task refreshAfterFixOdl(bool has2Refr)
{
if (has2Refr)
@@ -1340,6 +1368,10 @@ namespace MP_TAB3.Components
if (datiProdAct != null)
{
needConfProd = datiProdAct.Pz2RecTot > 0 && !isSlave;
if(needConfProd)
{
StateHasChanged();
}
}
}
+7 -6
View File
@@ -76,15 +76,11 @@ namespace MP_TAB3.Components
get => numPzConfermati - numPzLasciati;
}
//protected int lblPzBuo2Rec { get; set; } = 0;
protected int lblPz2RecScarto
{
get => numPzScarto2Rec;
}
[Inject]
protected StatusData MDataService { get; set; } = null!;
[Inject]
protected MessageService MsgServ { get; set; } = null!;
@@ -131,6 +127,9 @@ namespace MP_TAB3.Components
get => (RecMSE != null && RecMSE.IdxOdl > 0);
}
[Inject]
protected StatusData SDService { get; set; } = null!;
[Inject]
protected SharedMemService SMServ { get; set; } = null!;
@@ -210,7 +209,7 @@ namespace MP_TAB3.Components
// refresh tabella dati tablet...
await TabDServ.RicalcMse(IdxMaccSel, 0);
// rileggo e salvo..
var ListMSE = await MDataService.MseGetAll(true);
var ListMSE = await SDService.MseGetAll(true);
if (ListMSE != null)
{
// salvo in LocalStorage...
@@ -224,6 +223,8 @@ namespace MP_TAB3.Components
confProdActive = false;
numPzLasciati = 0;
dtReqUpdate = DateTime.Now;
// azzero cache pezzi conf
SDService.MachNumPzSet(IdxMaccSel, -1);
await DoUpdate();
await Task.Delay(1);
await RefreshData();
@@ -318,7 +319,7 @@ namespace MP_TAB3.Components
private async Task RefreshData()
{
List<MappaStatoExpl> ListMSE = await MDataService.MseGetAll(true);
List<MappaStatoExpl> ListMSE = await SDService.MseGetAll(true);
await MsgServ.SaveMse(ListMSE);
await E_Updated.InvokeAsync(ListMSE);
}
+1 -1
View File
@@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<Version>6.16.2401.511</Version>
<Version>6.16.2401.908</Version>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>MP_TAB3</RootNamespace>
</PropertyGroup>
+14 -22
View File
@@ -1,41 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Blazored.LocalStorage;
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_TAB3;
using MP_TAB3.Shared;
using MP_TAB3.Components;
using MP.Data;
using MP.Data.DatabaseModels;
using MP.Data.DTO;
using MP.Data.Services;
using Newtonsoft.Json;
using NLog;
using EgwCoreLib.Razor;
using Blazored.LocalStorage;
namespace MP_TAB3.Pages
{
public partial class Logout
{
#region Protected Properties
[Inject]
protected ILocalStorageService localStorage { get; set; } = null!;
[Inject]
protected TabDataService TDService { get; set; } = null!;
[Inject]
protected MessageService MsgServ { get; set; } = null!;
[Inject]
protected NavigationManager NavMan { get; set; } = null!;
[Inject]
protected TabDataService TDService { get; set; } = null!;
#endregion Protected Properties
#region Protected Methods
protected override async Task OnInitializedAsync()
{
await Task.Delay(1);
@@ -60,5 +50,7 @@ namespace MP_TAB3.Pages
MsgServ.RigaOper = null;
NavMan.NavigateTo("reg-new-device", true);
}
#endregion Protected Methods
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>Modulo MAPOSPEC </i>
<h4>Versione: 6.16.2401.511</h4>
<h4>Versione: 6.16.2401.908</h4>
<br /> Note di rilascio:
<ul>
<li>
+1 -1
View File
@@ -1 +1 @@
6.16.2401.511
6.16.2401.908
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>6.16.2401.511</version>
<version>6.16.2401.908</version>
<url>https://nexus.steamware.net/repository/SWS/MP-TAB3/stable/LAST/MP-TAB3.zip</url>
<changelog>https://nexus.steamware.net/repository/SWS/MP-TAB3/stable/LAST/ChangeLog.html</changelog>
<mandatory>false</mandatory>
+3 -3
View File
@@ -4,9 +4,9 @@
<PageTitle>MP-TAB3</PageTitle>
<div class="page" @onclick="()=>handleBodyClick()">
<div class="page" @onclick="()=>HandleBodyClick()">
<main>
<CmpTop TypeScadLogin="@typeScadLogin" CurrMenuItems="@CurrMenuItems" EA_UserIsOk="checkIfUserOk"></CmpTop>
<CmpTop TypeScadLogin="@typeScadLogin" CurrMenuItems="@CurrMenuItems" EA_UserIsOk="SetUserOk" EA_ReloadMStor="ForceReloadMStor"></CmpTop>
@if (userIsOk || NavMan.Uri.Contains("reg-new-device"))
{
<article class="content pt-1 d-flex mb-5">
@@ -24,5 +24,5 @@
</main>
</div>
<div class="fixed-bottom">
<CmpFooter TypeScadLogin="@typeScadLogin" DtScadLogin="@dtScadLogin"></CmpFooter>
<CmpFooter TypeScadLogin="@typeScadLogin" DtScadLogin="@dtScadLogin" MatrOper="@MatrOpr" CurrDevGuid="@currDevGuid"></CmpFooter>
</div>
+47 -23
View File
@@ -3,7 +3,6 @@ using Microsoft.AspNetCore.Components.Routing;
using Microsoft.JSInterop;
using MP.Data.DatabaseModels;
using MP.Data.Services;
using MP_TAB3.Components;
using NLog;
namespace MP_TAB3.Shared
@@ -94,23 +93,25 @@ namespace MP_TAB3.Shared
protected async Task checkDtDiff2Logout()
{
TimeSpan tsDeltaAct = DateTime.Now.Subtract(MsgServ.dtLastAction);
TimeSpan tsDeltaSave = DateTime.Now.Subtract(MsgServ.dtLastSave);
DateTime adesso = DateTime.Now;
TimeSpan tsDeltaAct = adesso.Subtract(MsgServ.dtLastAction);
TimeSpan tsDeltaSave = adesso.Subtract(MsgServ.dtLastSave);
string userTkn = "";
switch (typeScadLogin)
{
case 1:
if (tsDeltaAct.TotalMinutes >= dtScadLogin)
{
var userTkn = await TDataService.OperatoreGetRedis(MatrOpr, currDevGuid);
if (!string.IsNullOrEmpty(userTkn))
userTkn = await TDataService.OperatoreGetRedis(MatrOpr, currDevGuid);
if (string.IsNullOrEmpty(userTkn))
{
await MsgServ.DoLogIn(userTkn, true);
MsgServ.dtLastAction = DateTime.Now;
MsgServ.dtLastSave = DateTime.Now;
NavMan.NavigateTo("logout");
}
else
{
NavMan.NavigateTo("logout");
await MsgServ.DoLogIn(userTkn, true);
MsgServ.dtLastAction = adesso;
MsgServ.dtLastSave = adesso;
}
}
else
@@ -118,21 +119,35 @@ namespace MP_TAB3.Shared
// se fosse oltre 1 minuto da ultimo save --> salvo!
if (tsDeltaSave.TotalMinutes > 1)
{
var userTkn = await TDataService.OperatoreGetRedis(MatrOpr, currDevGuid);
userTkn = await TDataService.OperatoreGetRedis(MatrOpr, currDevGuid);
if (!string.IsNullOrEmpty(userTkn))
{
await MsgServ.DoLogIn(userTkn, true);
MsgServ.dtLastAction = DateTime.Now;
MsgServ.dtLastSave = DateTime.Now;
MsgServ.dtLastAction = adesso;
MsgServ.dtLastSave = adesso;
}
}
}
break;
case 2:
if (tsDeltaAct.TotalMinutes >= dtScadLogin)
// se fosse oltre 1 minuto da ultimo save --> salvo!
if (tsDeltaSave.TotalMinutes > 1)
{
NavMan.NavigateTo("logout");
// mitigazione controlli: solo ogni 1 minuto...
if (tsDeltaSave.TotalMinutes > 1)
{
MsgServ.dtLastSave = adesso;
userTkn = await TDataService.OperatoreGetRedis(MatrOpr, currDevGuid);
if (string.IsNullOrEmpty(userTkn))
{
NavMan.NavigateTo("logout");
}
if (tsDeltaAct.TotalMinutes >= dtScadLogin)
{
NavMan.NavigateTo("logout");
}
}
}
break;
@@ -145,13 +160,12 @@ namespace MP_TAB3.Shared
}
}
protected async Task checkIfUserOk(bool isOk)
protected async Task ForceReloadMStor(bool isOk)
{
await Task.Delay(1);
userIsOk = isOk;
await ReloadMemStor();
}
protected async Task handleBodyClick()
protected async Task HandleBodyClick()
{
await Task.Delay(1);
if (!pageOk)
@@ -160,6 +174,15 @@ namespace MP_TAB3.Shared
}
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
currDevGuid = await MsgServ.GetCurrDevGuidLSAsync();
// rileggo scadenza ultima...
DateTime adesso = DateTime.Now;
TimeSpan tsScadenza = TDataService.OperatoreGetGuidTTL(MatrOpr, currDevGuid);
MsgServ.dtLastSave = adesso.Subtract(TimeSpan.FromMinutes(dtScadLogin)).Add(tsScadenza);
}
/// <summary>
/// Init struttura dati
/// </summary>
@@ -184,11 +207,6 @@ namespace MP_TAB3.Shared
}
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
currDevGuid = await MsgServ.GetCurrDevGuidLSAsync();
}
protected async Task ReloadMemStor()
{
// in primis svuoto...
@@ -223,6 +241,12 @@ namespace MP_TAB3.Shared
TDataService.SetupConfig();
}
protected async Task SetUserOk(bool isOk)
{
await Task.Delay(1);
userIsOk = isOk;
}
#endregion Protected Methods
#region Private Fields
+27 -38
View File
@@ -53,30 +53,6 @@ namespace MP.Data.Services
#endregion Public Events
#if false
protected bool _tReset { get; set; } = false;
protected bool tReset
{
get => _tReset;
set
{
if (_tReset != value)
{
_tReset = value;
resetTimer();
}
}
}
protected void resetTimer()
{
if (EA_ResetFooterTimer != null)
{
EA_ResetFooterTimer?.Invoke();
}
}
#endif
#region Public Properties
public string CognomeNome
@@ -251,8 +227,6 @@ namespace MP.Data.Services
public async Task<bool> DoLogIn(string decodValue, bool saveOpr)
{
bool answ = false;
//expDays = SMService.GetConfInt("cookieDayExpire");
//var expDT = DateTime.Now.AddDays(expDays);
var devGuid = await GetCurrDevGuidLSAsync();
// decifro i valori..
var decrVal = DecryptData(decodValue);
@@ -306,6 +280,7 @@ namespace MP.Data.Services
}
return answ;
}
/// <summary>
/// Restituisce il record OperatoreDTO da localstorage
/// </summary>
@@ -351,6 +326,20 @@ namespace MP.Data.Services
return answ;
}
public TimeSpan GetKeyTTL(string redKey)
{
TimeSpan answ = new TimeSpan();
try
{
answ = redisDb.KeyTimeToLive(redKey) ?? new TimeSpan();
}
catch (Exception exc)
{
Log.Info($"Errore GetKeyTTL | currKey: {redKey}{Environment.NewLine}{exc}");
}
return answ;
}
/// <summary>
/// Restituisce ultima matrOpr registrata da localstorage
/// </summary>
@@ -440,17 +429,6 @@ namespace MP.Data.Services
return hasKey;
}
/// <summary>
/// scrive il record OperatoreDTO nel localstorage
/// </summary>
/// <returns></returns>
public async Task<bool> SetCurrOperDtoLSAsync(string currTkn)
{
bool answ = false;
await localStorage.SetItemAsync("currTkn", currTkn);
answ = true;
return answ;
}
/// <summary>
/// scrive il record Device GUID nel localstorage
/// </summary>
@@ -463,6 +441,18 @@ namespace MP.Data.Services
return answ;
}
/// <summary>
/// scrive il record OperatoreDTO nel localstorage
/// </summary>
/// <returns></returns>
public async Task<bool> SetCurrOperDtoLSAsync(string currTkn)
{
bool answ = false;
await localStorage.SetItemAsync("currTkn", currTkn);
answ = true;
return answ;
}
/// <summary>
/// Scrive il valore di IPV4 del device nel localstoragee
/// </summary>
@@ -515,7 +505,6 @@ namespace MP.Data.Services
return answ;
}
/// <summary>
/// Recupero singola preferenza utente
/// </summary>
+30 -2
View File
@@ -1617,6 +1617,36 @@ namespace MP.Data.Services
return answ;
}
public TimeSpan GetKeyTTL(string redKey)
{
TimeSpan answ = TimeSpan.FromMinutes(-1);
try
{
answ = redisDb.KeyTimeToLive(redKey) ?? new TimeSpan();
}
catch (Exception exc)
{
Log.Info($"Errore GetKeyTTL | currKey: {redKey}{Environment.NewLine}{exc}");
}
return answ;
}
/// <summary>
/// Legge l'oggetto operatore+device loggato e restituisce la sua TTL
/// </summary>
/// <param name="matrOpr"></param>
/// <param name="currDevGuid"></param>
/// <returns></returns>
public TimeSpan OperatoreGetGuidTTL(int matrOpr, Guid currDevGuid)
{
TimeSpan answ = new TimeSpan();
// cerco in redis...
string currKey = $"{redisUserDataKey}:CurrOpr:{matrOpr}:CurrDevGuid:{currDevGuid}";
answ = GetKeyTTL(currKey);
return answ;
}
/// <summary>
/// Legge l'oggetto operatore loggato
/// </summary>
@@ -1633,8 +1663,6 @@ namespace MP.Data.Services
RedisValue rawData = await redisDb.StringGetAsync(currKey);
if (rawData.HasValue)
{
//var encrData = SteamCrypto.DecryptString(rawData, passPhrase);
//answ = JsonConvert.DeserializeObject<string>(rawData);
answ = rawData;
}
if (answ == null)