diff --git a/EgtBEAMWALL.DataLayer/Controllers/MagmanController.cs b/EgtBEAMWALL.DataLayer/Controllers/MagmanController.cs index ce3df20b..cff8f85b 100644 --- a/EgtBEAMWALL.DataLayer/Controllers/MagmanController.cs +++ b/EgtBEAMWALL.DataLayer/Controllers/MagmanController.cs @@ -6,9 +6,7 @@ using NLog; using System; using System.Collections.Generic; using System.Linq; -using System.Threading; using System.Threading.Tasks; -using static EgwProxy.MagMan.RestPayload; namespace EgtBEAMWALL.DataLayer.Controllers { @@ -1144,12 +1142,55 @@ namespace EgtBEAMWALL.DataLayer.Controllers #region Private Methods /// - /// Forza sincronizzazione invii non completati + /// Forza sincronizzazione invii non completati SOLO di consumi... /// - /// MockUp: mostra sempre ok anche senza eseguire davvero + /// Restituisce esito resync, ALL OK solo se ha fatto tutti gli invii necessari private SyncResult ForceSyncroSend() { - SyncResult answ = SyncResult.ALL_OK; + SyncResult answ = SyncResult.ERR_ND; + ProjResState projType = ProjResState.Consumed; + // recupero da DB eventuale elenco dati da sincronizzare + using (MagmanSyncController msContr = new MagmanSyncController()) + { + var list2resend = msContr.GetUnsentFilt("", DateTime.Now.AddDays(1), 1000); + if (list2resend == null || list2resend.Count == 0) + { + answ = SyncResult.ALL_OK; + } + else + { + // verifico server ok + bool servOk = commLib.CheckRemote(); + if (!servOk) + { + answ = SyncResult.ERR_ServerKo; + } + else + { + // eseguo re-invio 1:1... + List list2send = new List(); + foreach (var record in list2resend) + { + list2send = JsonConvert.DeserializeObject>(record.Payload); + if (Enum.TryParse(record.SyncType, out projType)) + { + // effettuo invio... + bool resOk = commLib.ResourceSend(record.CloudId, projType, list2send); + if (!resOk) + { + answ = SyncResult.ERR_CloudResNotSent; + } + else + { + answ = SyncResult.ALL_OK; + // registro su DB dataora conclusione invio + msContr.SetCompleted(record.SyncId, DateTime.Now); + } + } + } + } + } + } return answ; } diff --git a/EgtBEAMWALL.DataLayer/Controllers/MagmanSyncController.cs b/EgtBEAMWALL.DataLayer/Controllers/MagmanSyncController.cs index 49e6db4b..ec50b96f 100644 --- a/EgtBEAMWALL.DataLayer/Controllers/MagmanSyncController.cs +++ b/EgtBEAMWALL.DataLayer/Controllers/MagmanSyncController.cs @@ -78,6 +78,28 @@ namespace EgtBEAMWALL.DataLayer.Controllers return dbResult; } + /// + /// Lista record NON inviati filtrati x tipo e num max + /// + /// Tipo di record richiesti, se "" = tutti + /// Data-Ora limite per recupero ordinato ASC + /// num max di record da restituire + /// + public List GetUnsentFilt(string SyncType, DateTime DtMax, int NumMax) + { + List dbResult = new List(); + using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING)) + { + dbResult = localDbCtx + .SyncList + .Where(x => x.DtExe == null && (string.IsNullOrEmpty(SyncType) || x.SyncType == SyncType) && x.DtReq <= DtMax) + .OrderBy(x => x.DtReq) + .Take(NumMax) + .ToList(); + } + return dbResult; + } + /// /// Insert record MagmanSync /// @@ -90,9 +112,9 @@ namespace EgtBEAMWALL.DataLayer.Controllers { try { - // inserisco record - localDbCtx.SyncList.Add(newRec); - + // inserisco record + localDbCtx.SyncList.Add(newRec); + // Commit changes localDbCtx.SaveChanges(); newId = newRec.SyncId;