Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 595ea40e6c | |||
| 3ce3808995 | |||
| a9011e014b | |||
| de1d30fdb6 | |||
| 1eb01b0532 | |||
| 20ae251943 |
@@ -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>
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -56,10 +56,9 @@ else
|
||||
<i class="fa-regular fa-circle-check"></i> @($" {RecMSE.PezziConf}")
|
||||
</div>
|
||||
<div class="text-danger">
|
||||
+
|
||||
@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> @($"{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">
|
||||
+
|
||||
@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> @($"{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>
|
||||
@($"{RecMSE.PezziConf}")
|
||||
</div>
|
||||
<div class="text-danger">
|
||||
+
|
||||
@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">
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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,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 @@
|
||||
6.16.2401.511
|
||||
6.16.2401.908
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user