From 67a2701b163d2f87530020e9323b8afc82c2b883 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Mon, 29 Apr 2024 16:54:20 +0200 Subject: [PATCH 1/2] Typo minori --- .../Controllers/LogMachineController.cs | 45 +++--- .../Controllers/MagmanController.cs | 128 +++++++++--------- 2 files changed, 86 insertions(+), 87 deletions(-) diff --git a/EgtBEAMWALL.DataLayer/Controllers/LogMachineController.cs b/EgtBEAMWALL.DataLayer/Controllers/LogMachineController.cs index 07ac2c41..551b11fc 100644 --- a/EgtBEAMWALL.DataLayer/Controllers/LogMachineController.cs +++ b/EgtBEAMWALL.DataLayer/Controllers/LogMachineController.cs @@ -19,6 +19,24 @@ namespace EgtBEAMWALL.DataLayer.Controllers #region Public Methods + /// + /// Helper conversione a LogMachineDTO + /// + /// + /// + public static LogMachineDTO ConvToItemDto(LogMachineModel currRec) + { + LogMachineDTO answ = new LogMachineDTO() + { + DtEvent = currRec.DtEvent, + EvType = (EgwProxy.MagMan.MachLogTypes)currRec.EvType, + ProjCloudId = currRec.ProjId, + SupervId = currRec.SupervId, + VarValue = currRec.VarValue + }; + return answ; + } + /// /// Conversion of base class to DB model class /// @@ -27,7 +45,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers public LogMachineModel ConvertFromCore(Core.MachLog coreMacLog) { int projCloudId = 0; - // calcolo projCloudId da ProjDbId... + // calcolo projCloudId da ProjId... using (var localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING)) { // Add to database @@ -60,28 +78,10 @@ namespace EgtBEAMWALL.DataLayer.Controllers /// public Core.MachLog ConvertToCore(LogMachineModel dbLog) { - var newRecord = (Core.MachLog)Core.MachLog.CreateMachLog(dbLog.EvType, dbLog.DtEvent, dbLog.VarValue,dbLog.ProjId, dbLog.SupervId); + var newRecord = (Core.MachLog)Core.MachLog.CreateMachLog(dbLog.EvType, dbLog.DtEvent, dbLog.VarValue, dbLog.ProjId, dbLog.SupervId); return newRecord; } - /// - /// Helper conversione a LogMachineDTO - /// - /// - /// - public static LogMachineDTO ConvToItemDto(LogMachineModel currRec) - { - LogMachineDTO answ = new LogMachineDTO() - { - DtEvent = currRec.DtEvent, - EvType = (EgwProxy.MagMan.MachLogTypes)currRec.EvType, - ProjCloudId = currRec.ProjId, - SupervId = currRec.SupervId, - VarValue = currRec.VarValue - }; - return answ; - } - /// /// Create machine LOG record /// @@ -122,7 +122,6 @@ namespace EgtBEAMWALL.DataLayer.Controllers /// public bool Create(Core.MachLog newMachLog) { - // converto record var dbLogModel = ConvertFromCore(newMachLog); return Create(dbLogModel); @@ -283,8 +282,8 @@ namespace EgtBEAMWALL.DataLayer.Controllers if (currRec != null) { currRec.DtSent = adesso; - // indico modificato - localDbCtx.Entry(currRec).State = System.Data.Entity.EntityState.Modified; + // indico modificato + localDbCtx.Entry(currRec).State = System.Data.Entity.EntityState.Modified; } } // Salvataggio finale diff --git a/EgtBEAMWALL.DataLayer/Controllers/MagmanController.cs b/EgtBEAMWALL.DataLayer/Controllers/MagmanController.cs index 9aee4317..7745d100 100644 --- a/EgtBEAMWALL.DataLayer/Controllers/MagmanController.cs +++ b/EgtBEAMWALL.DataLayer/Controllers/MagmanController.cs @@ -211,6 +211,70 @@ namespace EgtBEAMWALL.DataLayer.Controllers return answ; } + /// + /// Esegue sync dei dati LogMacchina su cloud: + /// - upload + /// - cicla secondo parametri indicati + /// + /// num record da inviare in ogni singolo batch (std: 50) + /// num max di record da inviare (std: 1000) + /// + public SyncResult CloudLogMaccSyncro(int batchSize = 50, int num2send = 1000) + { + SyncResult answ = SyncResult.ERR_ND; + // verifico server ok + bool servOk = commLib.CheckRemote(); + if (!servOk) + { + answ = SyncResult.ERR_ServerKo; + } + else + { + int numSent = 0; + using (LogMachineController lmDbContr = new LogMachineController()) + { + bool okSend = false; + // elenco record da inviare... + List recList = lmDbContr.GetUnsentAsc(num2send); + // controllo ci sia qulcosa da inviare... + if (recList.Count > 0) + { + // fintanto che ce ne sono procedo... + while (numSent < num2send) + { + var currList = recList + .Skip(numSent) + .Take(batchSize) + .ToList(); + // converto il blocco + var listDto = currList + .Select(x => LogMachineController.ConvToItemDto(x)) + .ToList(); + // invio! + okSend = commLib.LogMachineSend(listDto); + if (okSend) + { + // registro dati inviati... + lmDbContr.SetDtSent(currList); + Log.Info($"Inviati {batchSize}rec | {numSent} --> {numSent + batchSize}"); + numSent += batchSize; + } + // altrimenti esco con errore... + else + { + Log.Info($"Errore in invio: {batchSize}rec | inviati {numSent} di {recList.Count}"); + // registro errore + answ = SyncResult.ERR_LogMaccSyncUncomplete; + // condizione uscita + numSent = num2send + 1; + } + } + } + } + } + return answ; + } + /// /// Esegue sync dei CloudId x Materiali e RawItems: /// - upload + sync (cloud) @@ -311,69 +375,6 @@ namespace EgtBEAMWALL.DataLayer.Controllers return answ; } - /// - /// Esegue sync dei dati LogMacchina su cloud: - /// - upload - /// - cicla secondo parametri indicati - /// - /// num record da inviare in ogni singolo batch (std: 50) - /// num max di record da inviare (std: 1000) - /// - public SyncResult CloudLogMaccSyncro(int batchSize = 50, int num2send = 1000) - { - SyncResult answ = SyncResult.ERR_ND; - // verifico server ok - bool servOk = commLib.CheckRemote(); - if (!servOk) - { - answ = SyncResult.ERR_ServerKo; - } - else - { - int numSent = 0; - using (LogMachineController lmDbContr = new LogMachineController()) - { - bool okSend = false; - // elenco record da inviare... - List recList = lmDbContr.GetUnsentAsc(num2send); - // controllo ci sia qulcosa da inviare... - if (recList.Count > 0) - { - // fintanto che ce ne sono procedo... - while (numSent < num2send) - { - var currList = recList - .Skip(numSent) - .Take(batchSize) - .ToList(); - // converto il blocco - var listDto = currList - .Select(x => LogMachineController.ConvToItemDto(x)) - .ToList(); - // invio! - okSend = commLib.LogMachineSend(listDto); - if (okSend) - { - // registro dati inviati... - lmDbContr.SetDtSent(currList); - Log.Info($"Inviati {batchSize}rec | {numSent} --> {numSent + batchSize}"); - numSent += batchSize; - } - // altrimenti esco con errore... - else - { - Log.Info($"Errore in invio: {batchSize}rec | inviati {numSent} di {recList.Count}"); - // registro errore - answ = SyncResult.ERR_LogMaccSyncUncomplete; - // condizione uscita - numSent = num2send + 1; - } - } - } - } - } - return answ; - } public void Dispose() { commLib = null; @@ -1591,7 +1592,6 @@ namespace EgtBEAMWALL.DataLayer.Controllers return answ; } - #endregion Private Methods } } \ No newline at end of file From 9a57d0df033ca2f0caacb131be88f5d7b63287dc Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Mon, 29 Apr 2024 18:12:06 +0200 Subject: [PATCH 2/2] Update sync x proj (all) --- .../Controllers/LogMachineController.cs | 2 +- .../Controllers/MagmanController.cs | 53 +++++++++++++++++++ .../Controllers/ProdController.cs | 21 +++++++- 3 files changed, 74 insertions(+), 2 deletions(-) diff --git a/EgtBEAMWALL.DataLayer/Controllers/LogMachineController.cs b/EgtBEAMWALL.DataLayer/Controllers/LogMachineController.cs index 551b11fc..4a95a066 100644 --- a/EgtBEAMWALL.DataLayer/Controllers/LogMachineController.cs +++ b/EgtBEAMWALL.DataLayer/Controllers/LogMachineController.cs @@ -243,7 +243,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers } /// - /// Recupero i dati in ordine crescente fino al num max indicato + /// Recupero i dati NON sincronizzati in ordine crescente fino al num max indicato /// /// /// diff --git a/EgtBEAMWALL.DataLayer/Controllers/MagmanController.cs b/EgtBEAMWALL.DataLayer/Controllers/MagmanController.cs index 7745d100..728623f1 100644 --- a/EgtBEAMWALL.DataLayer/Controllers/MagmanController.cs +++ b/EgtBEAMWALL.DataLayer/Controllers/MagmanController.cs @@ -69,6 +69,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers RES_CheckChanged, RES_CheckEqual, RES_CheckND, + ERR_AllProjSyncUncomplete, ERR_LogMaccSyncUncomplete } @@ -774,6 +775,58 @@ namespace EgtBEAMWALL.DataLayer.Controllers return answ; } + /// + /// Esegue sync dei dati PROJ su cloud (se NON sincronizzati): + /// + /// + public SyncResult ProjAllSyncro() + { + SyncResult answ = SyncResult.ERR_ND; + // verifico server ok + bool servOk = commLib.CheckRemote(); + if (!servOk) + { + answ = SyncResult.ERR_ServerKo; + } + else + { + int numSent = 0; + using (ProdController lmDbContr = new ProdController()) + { + bool syncEnabled = true; + // elenco record da inviare... + List recList = lmDbContr.GetUnsentAsc(); + // controllo ci sia qulcosa da inviare... + if (recList.Count > 0) + { + foreach (var item in recList) + { + if (syncEnabled) + { + answ = ProjSyncro(item.ProdId); + if (answ != SyncResult.ALL_OK) + { + // disabilito altri sync + syncEnabled = false; + // loggo + Log.Error($"ProjAllSyncro | Errore in sincornizzazione progetto: prodId: {item.ProdId} | prodDbId: {item.ProdDbId} record"); + // salvo errore + answ = SyncResult.ERR_AllProjSyncUncomplete; + } + else + { + numSent++; + } + } + } + // loggo completato + Log.Info($"ProjAllSyncro | Eseguita sincronizzazione di {numSent}/{recList.Count} record"); + } + } + } + return answ; + } + /// /// Esegue sync di un SINGOLO PROD (cloud proj): /// - legge il progetto locale + upload x sync (verso cloud) diff --git a/EgtBEAMWALL.DataLayer/Controllers/ProdController.cs b/EgtBEAMWALL.DataLayer/Controllers/ProdController.cs index 8f3238cc..79726f27 100644 --- a/EgtBEAMWALL.DataLayer/Controllers/ProdController.cs +++ b/EgtBEAMWALL.DataLayer/Controllers/ProdController.cs @@ -586,6 +586,25 @@ namespace EgtBEAMWALL.DataLayer.Controllers return nextId; } + /// + /// Recupero i dati NON sincronizzati in ordine crescente fino al num max indicato + /// + /// + /// + /// + public List GetUnsentAsc() + { + using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING)) + { + // retrieve + return localDbCtx + .ProdList + .Where(x => x.ProjCloudId == 0) + .OrderBy(x => x.ProdDbId) + .ToList(); + } + } + /// /// Verifica prod assegnato a supervisor: ...se c'e' anche un solo machgroup del prod /// assegnato ad un supervisor o in stato 0 (dovrebbe essere la stessa cosa?) @@ -812,7 +831,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers // salvo record PROD localDbCtx.SaveChanges(); - // cerco se ci siano prod colelgati ed aggiorno pure loro... + // cerco se ci siano projects collegati ed aggiorno pure loro... var projList = localDbCtx .ProjList .Where(x => x.ProdDbId == currData.ProdDbId)