Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouseTest
This commit is contained in:
@@ -19,6 +19,24 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
|
||||
#region Public Methods
|
||||
|
||||
/// <summary>
|
||||
/// Helper conversione a LogMachineDTO
|
||||
/// </summary>
|
||||
/// <param name="currRec"></param>
|
||||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Conversion of base class to DB model class
|
||||
/// </summary>
|
||||
@@ -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
|
||||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Helper conversione a LogMachineDTO
|
||||
/// </summary>
|
||||
/// <param name="currRec"></param>
|
||||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create machine LOG record
|
||||
/// </summary>
|
||||
@@ -122,7 +122,6 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
/// <returns></returns>
|
||||
public bool Create(Core.MachLog newMachLog)
|
||||
{
|
||||
|
||||
// converto record
|
||||
var dbLogModel = ConvertFromCore(newMachLog);
|
||||
return Create(dbLogModel);
|
||||
@@ -244,7 +243,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recupero i dati in ordine crescente fino al num max indicato
|
||||
/// Recupero i dati NON sincronizzati in ordine crescente fino al num max indicato
|
||||
/// </summary>
|
||||
/// <param name="dtStart"></param>
|
||||
/// <param name="dtEnd"></param>
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Esegue sync dei dati LogMacchina su cloud:
|
||||
/// - upload
|
||||
/// - cicla secondo parametri indicati
|
||||
/// </summary>
|
||||
/// <param name="batchSize">num record da inviare in ogni singolo batch (std: 50)</param>
|
||||
/// <param name="num2send">num max di record da inviare (std: 1000)</param>
|
||||
/// <returns></returns>
|
||||
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<LogMachineModel> 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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Esegue sync dei CloudId x Materiali e RawItems:
|
||||
/// - upload + sync (cloud)
|
||||
@@ -311,69 +376,6 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Esegue sync dei dati LogMacchina su cloud:
|
||||
/// - upload
|
||||
/// - cicla secondo parametri indicati
|
||||
/// </summary>
|
||||
/// <param name="batchSize">num record da inviare in ogni singolo batch (std: 50)</param>
|
||||
/// <param name="num2send">num max di record da inviare (std: 1000)</param>
|
||||
/// <returns></returns>
|
||||
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<LogMachineModel> 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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Esegue sync dei dati PROJ su cloud (se NON sincronizzati):
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
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<ProdModel> 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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 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
|
||||
}
|
||||
}
|
||||
@@ -586,6 +586,25 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
return nextId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recupero i dati NON sincronizzati in ordine crescente fino al num max indicato
|
||||
/// </summary>
|
||||
/// <param name="dtStart"></param>
|
||||
/// <param name="dtEnd"></param>
|
||||
/// <returns></returns>
|
||||
public List<ProdModel> GetUnsentAsc()
|
||||
{
|
||||
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
|
||||
{
|
||||
// retrieve
|
||||
return localDbCtx
|
||||
.ProdList
|
||||
.Where(x => x.ProjCloudId == 0)
|
||||
.OrderBy(x => x.ProdDbId)
|
||||
.ToList();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 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)
|
||||
|
||||
Reference in New Issue
Block a user