From 8f072b5f8e14b6543de8dcd2b7341bd75df78bd2 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 9 Nov 2023 18:35:59 +0100 Subject: [PATCH] Ancora fix gestione ODL --- MP-TAB-SERV/Components/OdlMan.razor | 29 ++++--- MP-TAB-SERV/Components/OdlMan.razor.cs | 92 +++++++++++++++------ MP-TAB-SERV/Components/ProdConfirm.razor.cs | 4 +- MP-TAB-SERV/MP-TAB-SERV.csproj | 2 +- MP-TAB-SERV/Pages/ProdStop.razor.cs | 26 +++--- MP-TAB-SERV/Pages/StatusMap.razor.cs | 2 +- MP-TAB-SERV/Resources/ChangeLog.html | 2 +- MP-TAB-SERV/Resources/VersNum.txt | 2 +- MP-TAB-SERV/Resources/manifest.xml | 2 +- MP.Data/Constants.cs | 4 + MP.Data/Controllers/MpTabController.cs | 2 +- MP.Data/DatabaseModels/ODLExpModel.cs | 1 + MP.Data/Services/StatusData.cs | 8 +- MP.Data/Services/TabDataService.cs | 5 +- 14 files changed, 117 insertions(+), 64 deletions(-) diff --git a/MP-TAB-SERV/Components/OdlMan.razor b/MP-TAB-SERV/Components/OdlMan.razor index af703efc..e7f4f399 100644 --- a/MP-TAB-SERV/Components/OdlMan.razor +++ b/MP-TAB-SERV/Components/OdlMan.razor @@ -6,15 +6,17 @@ @if (isProcessing) { - + } else { @if (needConfProd) { -
-
@lblWarnHead
-
@lblWarnBody @numPz2Conf.ToString("N0") pz NC
+
+
+
@lblWarnHead
+
@lblWarnBody @numPz2Conf.ToString("N0") pz NC
+
@if (!odlOk) { @@ -41,7 +43,7 @@ @if (!inAttr && !showOdlDetail) {
- +
} @@ -56,7 +58,7 @@
@if (idxPOdlSel == 0 && !inAttr) { - + }
@@ -220,15 +222,18 @@ } else { -
-
- - + if (odlOk) + { +
+
+ + +
-
+ } }
- +
diff --git a/MP-TAB-SERV/Components/OdlMan.razor.cs b/MP-TAB-SERV/Components/OdlMan.razor.cs index 3e2cf2d3..c08f2941 100644 --- a/MP-TAB-SERV/Components/OdlMan.razor.cs +++ b/MP-TAB-SERV/Components/OdlMan.razor.cs @@ -5,6 +5,7 @@ using MP.Data.DatabaseModels; using MP.Data.Objects; using MP.Data.Services; using NLog; +using System; using System.Text; using static MP.Data.Objects.Enums; @@ -281,12 +282,19 @@ namespace MP_TAB_SERV.Components checkAll(); // imposto odl... idxOdl = idxODLStart; + IdxPOdlSel = 0; + inAttr = false; + IdxPOdlSel = 0; + RecMSE = null; await advStep(currStep++); // faccio refresh e riporto await RefreshData(); await CheckAttr(); // chiudo update... isProcessing = false; + //await InvokeAsync(StateHasChanged); + // qui rimando a pag principale... + NavMan.NavigateTo("/", true); } /// @@ -312,22 +320,7 @@ namespace MP_TAB_SERV.Components int currStep = 0; await advStep(currStep); isProcessing = true; - DateTime adesso = DateTime.Now; -#if false - // se fosse multi mi chiedo se sia DAVVERO in attrezzaggio... - if (isMulti) - { - try - { - // controllo se NON SONO gia in attrezzaggio... - var rigaStato = TabDServ.StatoMacchina(IdxMaccParent); - inAttr = (rigaStato.IdxStato == 2); - } - catch - { } - } -#endif await advStep(currStep++); // proseguo int idxODL_curr = 0; @@ -340,7 +333,7 @@ namespace MP_TAB_SERV.Components { tcRichAttr = currPodl.Tcassegnato; } - if (enableSplitODL) + if (enableSplitODL && !forceCloseOdl) { // splitto VECCHIO ODL (se fosse rimasto qualcosa da produrre e ne sia rimasto uno.......) try @@ -480,8 +473,6 @@ namespace MP_TAB_SERV.Components await TabDServ.saveCounter(IdxMaccSel, "0"); // imposto ODL su redis... TabDServ.saveCurrODL(IdxMaccSel, idxODL_curr); - // salvo odl selezionato - idxOdl = idxODL_curr; await advStep(currStep++); } else @@ -490,12 +481,19 @@ namespace MP_TAB_SERV.Components } // refresh finale + var tmpTCR = tcRichAttr; checkBtnStatus(); fixSplitBtn(false); // faccio refresh e riporto + idxOdl = idxODL_curr; + IdxPOdlSel = 0; + RecMSE = null; await RefreshData(); await CheckAttr(); + inAttr = true; + tcRichAttr = tmpTCR; isProcessing = false; + await InvokeAsync(StateHasChanged); } protected override async Task OnInitializedAsync() @@ -530,6 +528,7 @@ namespace MP_TAB_SERV.Components { if (!await JSRuntime.InvokeAsync("confirm", $"Confermi fine produzione?")) return; + // preparo gestione progress display MaxVal = 7; isProcessing = true; @@ -626,18 +625,27 @@ namespace MP_TAB_SERV.Components } await advStep(currStep++); // faccio refresh e riporto + IdxPOdlSel = 0; + RecMSE = null; + currOdl = new ODLExpModel(); + inAttr = false; + IdxPOdlSel = 0; + forceCloseOdl = true; + //await Task.Delay(250); await RefreshData(); await CheckAttr(); await advStep(currStep++); isProcessing = false; + await InvokeAsync(StateHasChanged); + //NavMan.NavigateTo(NavMan.Uri, true); } protected async Task RefreshData() { // refresh tabella dati tablet... - TabDServ.RicalcMse(IdxMaccSel, 0); + RecMSE = null; // rileggo e salvo.. - var ListMSE = await MDataService.MseGetAll(); + var ListMSE = await MDataService.MseGetAll(true); if (ListMSE != null) { // salvo in LocalStorage... @@ -699,20 +707,44 @@ namespace MP_TAB_SERV.Components { showOdlDetail = !showOdlDetail; // se devo mostrare, carico dati ODL! - if (showOdlDetail && RecMSE != null) + if (showOdlDetail) { await ReloadXDL(true); } } + private string txtForceCloseOdl + { + get => forceCloseOdl ? Traduci("ForceCloseODL") : Traduci("SplitCurrODL"); + } + private async Task ReloadXDL(bool reloadFromOdl) { int currIdxPOdl = IdxPOdlSel; - if (reloadFromOdl) + if (RecMSE != null) { - currIdxPOdl = RecMSE != null ? RecMSE.IdxPOdl ?? 0 : 0; + if (reloadFromOdl) + { + currIdxPOdl = RecMSE.IdxPOdl ?? 0; + } + // se ho PODL valido... + if (currIdxPOdl > 0) + { + currPodl = await TabDServ.PODLExp_getByKey(currIdxPOdl); + } + else + { + currPodl = new PODLExpModel() + { + IdxOdl = RecMSE.IdxOdl ?? 0, + KeyRichiesta = "-", + CodArticolo = RecMSE.CodArticolo, + DescArticolo = RecMSE.CodArticolo, + NumPezzi = RecMSE.NumPezzi, + Tcassegnato = RecMSE.TCAssegnato + }; + } } - currPodl = await TabDServ.PODLExp_getByKey(currIdxPOdl); // update a runtime dati ODL se assegnato if (currPodl.IdxOdl > 0) { @@ -1193,7 +1225,7 @@ namespace MP_TAB_SERV.Components inCmd2 = await TabDServ.EvListInsert(newRecParent, Enums.tipoInputEvento.barcode); } // chiamo refresh MSE - TabDServ.RicalcMse(idxMaccCurr, 0); + await TabDServ.RicalcMse(idxMaccCurr, 0); lblOut = userMsg; // loggo USR MSG Log.Info(userMsg); @@ -1225,7 +1257,15 @@ namespace MP_TAB_SERV.Components // imposto tcRichAttr in base allo stato... if (odlOk) { - tcRichAttr = currPodl.Tcassegnato; ; + // prendo TCRich da ODL... + if (IdxOdl > 0) + { + tcRichAttr = currOdl.TCRichAttr; + } + else + { + tcRichAttr = currPodl.Tcassegnato; + } } } diff --git a/MP-TAB-SERV/Components/ProdConfirm.razor.cs b/MP-TAB-SERV/Components/ProdConfirm.razor.cs index 0206570d..b9867dc0 100644 --- a/MP-TAB-SERV/Components/ProdConfirm.razor.cs +++ b/MP-TAB-SERV/Components/ProdConfirm.razor.cs @@ -165,9 +165,9 @@ namespace MP_TAB_SERV.Components // effettua conferma con conf da DB del tipo (giorni / turni / periodo bool fatto = effettuaConfermaProd(); // refresh tabella dati tablet... - TabDServ.RicalcMse(IdxMaccSel, 0); + await TabDServ.RicalcMse(IdxMaccSel, 0); // rileggo e salvo.. - var ListMSE = await MDataService.MseGetAll(); + var ListMSE = await MDataService.MseGetAll(true); if (ListMSE != null) { // salvo in LocalStorage... diff --git a/MP-TAB-SERV/MP-TAB-SERV.csproj b/MP-TAB-SERV/MP-TAB-SERV.csproj index 56514f72..85516259 100644 --- a/MP-TAB-SERV/MP-TAB-SERV.csproj +++ b/MP-TAB-SERV/MP-TAB-SERV.csproj @@ -3,7 +3,7 @@ net6.0 enable - 6.16.2311.915 + 6.16.2311.918 enable MP_TAB_SERV diff --git a/MP-TAB-SERV/Pages/ProdStop.razor.cs b/MP-TAB-SERV/Pages/ProdStop.razor.cs index 3715eb4f..e76ce62c 100644 --- a/MP-TAB-SERV/Pages/ProdStop.razor.cs +++ b/MP-TAB-SERV/Pages/ProdStop.razor.cs @@ -66,7 +66,7 @@ namespace MP_TAB_SERV.Pages protected SharedMemService SMServ { get; set; } = null!; [Inject] - protected TabDataService TabServ { get; set; } = null!; + protected TabDataService TabDServ { get; set; } = null!; #endregion Protected Properties @@ -87,7 +87,7 @@ namespace MP_TAB_SERV.Pages var rigaEvento = SMServ.GetEventRow(IdxEv); if (rigaEvento != null) { - var rigaStato = TabServ.StatoMacchina(IdxMacc); + var rigaStato = TabDServ.StatoMacchina(IdxMacc); // processo evento... if (insRealtime) { @@ -103,14 +103,14 @@ namespace MP_TAB_SERV.Pages pallet = rigaStato.pallet }; // se realtime - await TabServ.EvListInsert(newRec, MP.Data.Objects.Enums.tipoInputEvento.barcode); + await TabDServ.EvListInsert(newRec, MP.Data.Objects.Enums.tipoInputEvento.barcode); // resetta il microstato in modo da ricevere successive info HW - TabServ.resetMicrostatoMacchina(IdxMacc); + TabDServ.resetMicrostatoMacchina(IdxMacc); } else { // in primis disabilito insert... - TabServ.MacchinaSetInsEnab(IdxMacc, false); + TabDServ.MacchinaSetInsEnab(IdxMacc, false); // calcolo evento string evento = $"{IdxEv}"; @@ -128,7 +128,7 @@ namespace MP_TAB_SERV.Pages try { // cerco da 1 sec DOPO evento... - var tabNext = TabServ.DDB_getNext(IdxMacc, DtRif.AddSeconds(1)); + var tabNext = TabDServ.DDB_getNext(IdxMacc, DtRif.AddSeconds(1)); DateTime nextEvDT = tabNext != null ? tabNext.InizioStato : DateTime.Now.AddMinutes(-1); @@ -145,7 +145,7 @@ namespace MP_TAB_SERV.Pages MatrOpr = MatrOpr, pallet = rigaStato.pallet }; - await TabServ.EvListInsert(newRec, MP.Data.Objects.Enums.tipoInputEvento.barcode); + await TabDServ.EvListInsert(newRec, MP.Data.Objects.Enums.tipoInputEvento.barcode); // update commento apertura! commento = $"999 - Dich StartEvt: {evento} [{codRich}]"; @@ -159,11 +159,11 @@ namespace MP_TAB_SERV.Pages MatrOpr = MatrOpr, pallet = rigaStato.pallet }; - await TabServ.EvListInsert(newRec, MP.Data.Objects.Enums.tipoInputEvento.barcode); + await TabDServ.EvListInsert(newRec, MP.Data.Objects.Enums.tipoInputEvento.barcode); // eseguo ricalcolo! DateTime startRicalcolo = DtRif.AddMinutes(minAnticipoRicalcolo); // eseguo ricalcolo periodo.. - await TabServ.DDB_DoRecalc(IdxMacc, startRicalcolo, 1, rdm_nEvStep, rdm_nEvCheck, rdm_ChkOnly); + await TabDServ.DDB_DoRecalc(IdxMacc, startRicalcolo, 1, rdm_nEvStep, rdm_nEvCheck, rdm_ChkOnly); // chiamo registrazione commento... if (noteEdit != null) { @@ -177,7 +177,7 @@ namespace MP_TAB_SERV.Pages } // riabilito insert... anche se non dovrebbe servire x stored ricalcolo precedente... - TabServ.MacchinaSetInsEnab(IdxMacc, true); + TabDServ.MacchinaSetInsEnab(IdxMacc, true); } // mostro esito alertCss = "alert-succes"; @@ -190,9 +190,9 @@ namespace MP_TAB_SERV.Pages } } // faccio refresh x singola macchina 2019.03.26 - TabServ.RicalcMse(IdxMacc, 0); + await TabDServ.RicalcMse(IdxMacc, 0); // rileggo e salvo.. - var ListMSE = await MDataService.MseGetAll(); + var ListMSE = await MDataService.MseGetAll(true); if (ListMSE != null) { // salvo in LocalStorage... @@ -268,7 +268,7 @@ namespace MP_TAB_SERV.Pages { CurrMSE = await MServ.GetMachineMse(IdxMacc); } - var eventsAll = await TabServ.AnagEventiGetByMacch(IdxMacc); + var eventsAll = await TabDServ.AnagEventiGetByMacch(IdxMacc); if (eventsAll != null) { events2show = eventsAll.Where(x => x.EventoTablet).OrderBy(x => x.Label).ToList(); diff --git a/MP-TAB-SERV/Pages/StatusMap.razor.cs b/MP-TAB-SERV/Pages/StatusMap.razor.cs index 49cfeb7b..cbc1c392 100644 --- a/MP-TAB-SERV/Pages/StatusMap.razor.cs +++ b/MP-TAB-SERV/Pages/StatusMap.razor.cs @@ -96,7 +96,7 @@ namespace MP_TAB_SERV.Pages { await getWDim(); isCalcSize = false; - ListMSE = await MDataService.MseGetAll(); + ListMSE = await MDataService.MseGetAll(true); await InvokeAsync(StateHasChanged); } if (ListMSE != null) diff --git a/MP-TAB-SERV/Resources/ChangeLog.html b/MP-TAB-SERV/Resources/ChangeLog.html index ffefa68b..02639326 100644 --- a/MP-TAB-SERV/Resources/ChangeLog.html +++ b/MP-TAB-SERV/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MAPOSPEC -

Versione: 6.16.2311.915

+

Versione: 6.16.2311.918


Note di rilascio:
  • diff --git a/MP-TAB-SERV/Resources/VersNum.txt b/MP-TAB-SERV/Resources/VersNum.txt index 8fd925f8..98e1300d 100644 --- a/MP-TAB-SERV/Resources/VersNum.txt +++ b/MP-TAB-SERV/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2311.915 +6.16.2311.918 diff --git a/MP-TAB-SERV/Resources/manifest.xml b/MP-TAB-SERV/Resources/manifest.xml index cb13f8ba..70263c9f 100644 --- a/MP-TAB-SERV/Resources/manifest.xml +++ b/MP-TAB-SERV/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2311.915 + 6.16.2311.918 https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/MP-TAB-SERV.zip https://nexus.steamware.net/repository/SWS/MP-TAB-SERV/stable/LAST/ChangeLog.html false diff --git a/MP.Data/Constants.cs b/MP.Data/Constants.cs index 0fde3879..9f43bd5b 100644 --- a/MP.Data/Constants.cs +++ b/MP.Data/Constants.cs @@ -17,6 +17,10 @@ // REDIS KEY Dati correnti public static readonly string CONF_MON_KEY = $"{BASE_HASH}:Conf:MonDispData"; + + + public static string redisMseKey = "MP:MON:Cache:MSE"; + #endregion Public Fields } } \ No newline at end of file diff --git a/MP.Data/Controllers/MpTabController.cs b/MP.Data/Controllers/MpTabController.cs index 58d01c22..a3190441 100644 --- a/MP.Data/Controllers/MpTabController.cs +++ b/MP.Data/Controllers/MpTabController.cs @@ -504,7 +504,7 @@ namespace MP.Data.Controllers var FlgStorico = new SqlParameter("@flgStorico", flgStorico); var result = dbCtx .Database - .ExecuteSqlRaw("EXEC stp_EL_UpsertByOdl @IdxMacchina, @flgStorico, @DoInsert", IdxOdl, FlgStorico); + .ExecuteSqlRaw("EXEC stp_EL_UpsertByOdl @IdxODL, @flgStorico", IdxOdl, FlgStorico); fatto = result != 0; } catch (Exception exc) diff --git a/MP.Data/DatabaseModels/ODLExpModel.cs b/MP.Data/DatabaseModels/ODLExpModel.cs index dbfd429e..e2ed9a4b 100644 --- a/MP.Data/DatabaseModels/ODLExpModel.cs +++ b/MP.Data/DatabaseModels/ODLExpModel.cs @@ -21,6 +21,7 @@ namespace MP.Data.DatabaseModels public string IdxMacchina { get; set; } public int NumPezzi { get; set; } public decimal Tcassegnato { get; set; } + public decimal TCRichAttr { get; set; } public DateTime? DataInizio { get; set; } public DateTime? DataFine { get; set; } [MaxLength(2500)] diff --git a/MP.Data/Services/StatusData.cs b/MP.Data/Services/StatusData.cs index 5eb81cec..3c1782c9 100644 --- a/MP.Data/Services/StatusData.cs +++ b/MP.Data/Services/StatusData.cs @@ -118,7 +118,7 @@ namespace MP.Data.Services stopWatch.Start(); List? result = new List(); // cerco in redis... - RedisValue rawData = redisDb.StringGet(redisMseKey); + RedisValue rawData = redisDb.StringGet(Constants.redisMseKey); if (rawData.HasValue && !forceDb) { result = JsonConvert.DeserializeObject>($"{rawData}"); @@ -131,7 +131,7 @@ namespace MP.Data.Services result = await Task.FromResult(dbController.MseGetAll(maxAge)); // serializzp e salvo... rawData = JsonConvert.SerializeObject(result); - await redisDb.StringSetAsync(redisMseKey, rawData, TimeSpan.FromMilliseconds(maxAge)); + await redisDb.StringSetAsync(Constants.redisMseKey, rawData, TimeSpan.FromMilliseconds(maxAge)); stopWatch.Stop(); TimeSpan ts = stopWatch.Elapsed; Log.Debug($"Read from DB: {ts.TotalMilliseconds}ms"); @@ -165,7 +165,9 @@ namespace MP.Data.Services private static IConfiguration _configuration = null!; private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); private int maxAge = 2000; - private string redisMseKey = "MP:MON:Cache:MSE"; +#if false + private string redisMseKey = "MP:MON:Cache:MSE"; +#endif #endregion Private Fields diff --git a/MP.Data/Services/TabDataService.cs b/MP.Data/Services/TabDataService.cs index 8489419e..191de962 100644 --- a/MP.Data/Services/TabDataService.cs +++ b/MP.Data/Services/TabDataService.cs @@ -1199,7 +1199,7 @@ namespace MP.Data.Services answ = dbTabController.OdlInizioSetup(idxODL, matrOpr, idxMacchina, tcRich, pzPallet, note); await FlushCache("ODL"); await FlushCache("PODL"); - await FlushCache("VSODL"); + await FlushCache("VSODL"); } catch (Exception exc) { @@ -1893,10 +1893,11 @@ namespace MP.Data.Services /// idx macchina da confermare /// Num massimo secondi di "vecchiaia" del dato /// - public bool RicalcMse(string idxMacchina, int maxAgeSec) + public async Task RicalcMse(string idxMacchina, int maxAgeSec) { bool answ = false; answ = dbTabController.RicalcMse(idxMacchina, maxAgeSec); + await FlushCache(Constants.redisMseKey); return answ; }