using EgwProxy.DataLayer.DbModel;
using EgwProxy.MagMan.DTO;
using NLog;
using System;
using System.Collections.Generic;
using System.Collections.Concurrent;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Data.Entity.Infrastructure.Design.Executor;
namespace EgwProxy.DataLayer.Controllers
{
public class LogMachineController : IDisposable
{
#region Public Constructors
///
/// Init classe
///
///
public LogMachineController()
{
}
#endregion Public Constructors
#region Public Methods
///
/// Helper conversione a LogMachineDTO
///
///
///
public static LogMachineDTO ConvToItemDto(LogMachineModel currRec)
{
LogMachineDTO answ = new LogMachineDTO()
{
DtEvent = currRec.DtEvent,
EvType = (MagMan.MachLogTypes)currRec.EvType,
ProjCloudId = currRec.ProjCloudId,
SupervId = currRec.SupervId,
VarValue = currRec.VarValue
};
return answ;
}
public void Dispose()
{
}
///
/// Recupero i dati in ordine crescente fino al num max indicato
///
///
///
public List GetUnsentAsc(int numMax)
{
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// retrieve
return localDbCtx
.DbSetLogMac
.Where(x => (x.DtSent == null || x.DtSent < x.DtEvent) && x.ProjCloudId > 0)
.OrderBy(x => x.DtEvent)
.Take(numMax)
.ToList();
}
}
///
/// Aggiorna i record indicati inserendo dataora corrente x DtSent
///
///
///
public bool SetDtSent(List rec2upd)
{
bool done = false;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
DateTime adesso = DateTime.Now;
foreach (var item in rec2upd)
{
var currRec = localDbCtx
.DbSetLogMac
.Where(x => (x.DtSent == null || x.DtSent < new DateTime(2000, 1, 1)) && x.LogDbId == item.LogDbId)
.FirstOrDefault();
if (currRec != null)
{
currRec.DtSent = adesso;
}
// indico modificato
localDbCtx.Entry(currRec).State = System.Data.Entity.EntityState.Modified;
}
// Salvataggio finale
localDbCtx.SaveChanges();
}
return done;
}
///
/// Cerca di sistemare gli ID di Prod e ProjCloud mancanti
///
///
public bool TryFixProjCloudId()
{
// init vars
bool fatto = false;
List> listBatch = new List>();
// vado sul DB
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// retrieve
var list2proc = localDbCtx
.DbSetLogMac
.Where(x => x.ProjCloudId == 0 && ((int)x.EvType == 1 || (int)x.EvType == 2))
.OrderBy(x => x.DtEvent)
.ToList();
// se ci sono...
if (list2proc != null && list2proc.Count > 0)
{
// chiamo stored...
localDbCtx.Database.ExecuteSqlCommand("call stp_LogMachineFixPid");
}
}
// risultato
return fatto;
}
#endregion Public Methods
#region Private Fields
///
/// Istanza logger
///
private NLog.Logger Log = LogManager.GetCurrentClassLogger();
#endregion Private Fields
}
}