Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouseTest

This commit is contained in:
Emmanuele Sassi
2024-04-29 19:16:08 +02:00
2 changed files with 70 additions and 4 deletions
@@ -246,8 +246,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// <summary>
/// Recupero i dati NON sincronizzati in ordine crescente fino al num max indicato
/// </summary>
/// <param name="dtStart"></param>
/// <param name="dtEnd"></param>
/// <param name="numMax"></param>
/// <returns></returns>
public List<LogMachineModel> GetUnsentAsc(int numMax)
{
@@ -256,7 +255,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
// retrieve
return localDbCtx
.LogMachineList
.Where(x => x.DtSent == null || x.DtSent < x.DtEvent)
.Where(x => (x.DtSent == null || x.DtSent < x.DtEvent) && x.ProjCloudId > 0)
.OrderBy(x => x.DtEvent)
.Take(numMax)
.ToList();
@@ -293,6 +292,67 @@ namespace EgtBEAMWALL.DataLayer.Controllers
return done;
}
/// <summary>
/// Cerca di sistemare gli ID di Prod e ProjCloud mancanti
/// </summary>
/// <returns></returns>
public bool TryFixProjCloudId()
{
// init vars
bool fatto = false;
int prodId = 0;
// vado sul DB
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// retrieve
var list2proc = localDbCtx
.LogMachineList
.Where(x => x.ProjCloudId == 0 && (x.EvType == Core.MachLog.MachLogTypes.PART_STATUS || x.EvType == Core.MachLog.MachLogTypes.MACHGROUP_STATUS))
.OrderBy(x => x.DtEvent)
.ToList();
// se ci sono...
if (list2proc != null && list2proc.Count > 0)
{
// recupero elenco PROD
List<ProdModel> prodList = localDbCtx
.ProdList
.AsNoTracking()
.ToList();
foreach (var item in list2proc)
{
prodId = 0;
// cerco valore
string[] dataList = item.VarValue.Split(';');
if (dataList != null && dataList.Count() > 0)
{
int.TryParse(dataList[0], out prodId);
// se trovato
if (prodId > 0)
{
// salvo il valore prodId
item.ProdId = prodId;
// cerco il projCloudId in elenco
var projRec = prodList.Where(x => x.ProdId == prodId).FirstOrDefault();
if (projRec != null)
{
item.ProjCloudId = projRec.ProjCloudId;
}
// indico modificato
localDbCtx.Entry(item).State = System.Data.Entity.EntityState.Modified;
}
}
}
// salvo
localDbCtx.SaveChanges();
// registro
fatto = true;
}
}
// risultato
return fatto;
}
/// <summary>
/// Update single LogMachineModel
/// </summary>
@@ -219,8 +219,9 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// </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>
/// <param name="tryFixProj">Ture: cerca di sistemare ProdId e ProjCloudId prima di inviare</param>
/// <returns></returns>
public SyncResult CloudLogMaccSyncro(int batchSize = 50, int num2send = 1000)
public SyncResult CloudLogMaccSyncro(int batchSize = 50, int num2send = 1000, bool tryFixProj = false)
{
SyncResult answ = SyncResult.ERR_ND;
// verifico server ok
@@ -235,6 +236,11 @@ namespace EgtBEAMWALL.DataLayer.Controllers
using (LogMachineController lmDbContr = new LogMachineController())
{
bool okSend = false;
// se richiesto PRIMA fa il try-fix ProdId e ProjCloudId
if(tryFixProj)
{
bool fixDone = lmDbContr.TryFixProjCloudId();
}
// elenco record da inviare...
List<LogMachineModel> recList = lmDbContr.GetUnsentAsc(num2send);
// controllo ci sia qulcosa da inviare...