diff --git a/EgtBEAMWALL.DataLayer/Controllers/LogMachineController.cs b/EgtBEAMWALL.DataLayer/Controllers/LogMachineController.cs
index 07ac2c41..4a95a066 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);
@@ -244,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
///
///
///
@@ -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..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
}
@@ -211,6 +212,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 +376,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;
@@ -773,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)
@@ -1591,7 +1645,6 @@ namespace EgtBEAMWALL.DataLayer.Controllers
return answ;
}
-
#endregion Private Methods
}
}
\ No newline at end of file
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)