339 lines
11 KiB
C#
339 lines
11 KiB
C#
using EgtBEAMWALL.DataLayer.DatabaseModels;
|
|
using EgwProxy.MagMan.DTO;
|
|
using NLog;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace EgtBEAMWALL.DataLayer.Controllers
|
|
{
|
|
public class LogMachineController : IDisposable
|
|
{
|
|
#region Public Constructors
|
|
|
|
public LogMachineController()
|
|
{
|
|
}
|
|
|
|
#endregion Public Constructors
|
|
|
|
#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>
|
|
/// <param name="coreMacLog"></param>
|
|
/// <returns></returns>
|
|
public LogMachineModel ConvertFromCore(Core.MachLog coreMacLog)
|
|
{
|
|
int projCloudId = 0;
|
|
// calcolo projCloudId da ProjId...
|
|
using (var localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
|
|
{
|
|
// Add to database
|
|
var projRec = localDbCtx.ProdList.Where(x => x.ProdId == coreMacLog.ProdId).FirstOrDefault();
|
|
if (projRec != null)
|
|
{
|
|
projCloudId = projRec.ProjCloudId;
|
|
}
|
|
}
|
|
// converto!
|
|
LogMachineModel answ = new LogMachineModel();
|
|
if (coreMacLog != null)
|
|
{
|
|
answ = new LogMachineModel()
|
|
{
|
|
EvType = coreMacLog.EventType,
|
|
DtEvent = coreMacLog.AlarmDateTime,
|
|
SupervId = coreMacLog.VarAddress,
|
|
VarValue = coreMacLog.VarValue,
|
|
ProjId = projCloudId
|
|
};
|
|
}
|
|
return answ;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Conversion from DB to Core class
|
|
/// </summary>
|
|
/// <param name="dbLog"></param>
|
|
/// <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);
|
|
return newRecord;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Create machine LOG record
|
|
/// </summary>
|
|
/// <param name="newLogMac"></param>
|
|
/// <returns></returns>
|
|
public bool Create(LogMachineModel newLogMac)
|
|
{
|
|
bool fatto = false;
|
|
try
|
|
{
|
|
try
|
|
{
|
|
using (var locallocalDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
|
|
{
|
|
// Add to database
|
|
locallocalDbCtx.LogMachineList.Add(newLogMac);
|
|
// Commit changes
|
|
locallocalDbCtx.SaveChanges();
|
|
}
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
string errMessage = $"EXCEPTION on LogMachine.Create: {Environment.NewLine}{exc}";
|
|
Console.WriteLine(errMessage);
|
|
Log.Error(errMessage);
|
|
}
|
|
}
|
|
catch
|
|
{ }
|
|
return fatto;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Create machine LOG record (da modello dati CORE)
|
|
/// </summary>
|
|
/// <param name="newLogMac">Record Log</param>
|
|
/// <param name="projDbId">ProjID da DB (locale)</param>
|
|
/// <returns></returns>
|
|
public bool Create(Core.MachLog newMachLog)
|
|
{
|
|
// converto record
|
|
var dbLogModel = ConvertFromCore(newMachLog);
|
|
return Create(dbLogModel);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Delete by key
|
|
/// </summary>
|
|
/// <param name="LogDbId"></param>
|
|
/// <returns></returns>
|
|
public bool DeleteByKey(int LogDbId)
|
|
{
|
|
bool done = false;
|
|
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
|
|
{
|
|
var items2del = localDbCtx
|
|
.LogMachineList
|
|
.Where(x => x.LogDbId == LogDbId);
|
|
try
|
|
{
|
|
// Add to database
|
|
localDbCtx.LogMachineList.RemoveRange(items2del);
|
|
// Commit changes
|
|
localDbCtx.SaveChanges();
|
|
done = true;
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
string errMessage = $"EXCEPTION on LogMachine.DeleteByKey: {Environment.NewLine}{exc}";
|
|
Console.WriteLine(errMessage);
|
|
Log.Error(errMessage);
|
|
}
|
|
}
|
|
return done;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get record by LogDbId
|
|
/// </summary>
|
|
/// <param name="LogDbId"></param>
|
|
/// <returns></returns>
|
|
public LogMachineModel FindByDbId(int LogDbId)
|
|
{
|
|
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
|
|
{
|
|
return localDbCtx
|
|
.LogMachineList
|
|
.Where(x => x.LogDbId == LogDbId)
|
|
.SingleOrDefault();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get paginated data from DB (ASC ordered)
|
|
/// </summary>
|
|
/// <param name="dtStart"></param>
|
|
/// <param name="dtEnd"></param>
|
|
/// <returns></returns>
|
|
public List<LogMachineModel> GetAsc(DateTime dtStart, DateTime dtEnd)
|
|
{
|
|
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
|
|
{
|
|
// retrieve
|
|
return localDbCtx
|
|
.LogMachineList
|
|
.Where(x => x.DtEvent >= dtStart && x.DtEvent <= dtEnd)
|
|
.OrderBy(x => x.DtEvent)
|
|
.ToList();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get paginated data from DB (ASC ordered) in "core format"
|
|
/// </summary>
|
|
/// <param name="dtStart"></param>
|
|
/// <param name="dtEnd"></param>
|
|
/// <returns></returns>
|
|
public List<Core.MachLog> GetCoreAsc(DateTime dtStart, DateTime dtEnd)
|
|
{
|
|
var rawData = GetAsc(dtStart, dtEnd);
|
|
var coreData = rawData.Select(x => ConvertToCore(x)).ToList();
|
|
return coreData;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get paginated data from DB (DESC ordered) in "core format"
|
|
/// </summary>
|
|
/// <param name="dtStart"></param>
|
|
/// <param name="dtEnd"></param>
|
|
/// <returns></returns>
|
|
public List<Core.MachLog> GetCoreDesc(DateTime dtStart, DateTime dtEnd)
|
|
{
|
|
var rawData = GetDesc(dtStart, dtEnd);
|
|
var coreData = rawData.Select(x => ConvertToCore(x)).ToList();
|
|
return coreData;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get paginated data from DB (DESC ordered)
|
|
/// </summary>
|
|
/// <param name="dtStart"></param>
|
|
/// <param name="dtEnd"></param>
|
|
/// <returns></returns>
|
|
public List<LogMachineModel> GetDesc(DateTime dtStart, DateTime dtEnd)
|
|
{
|
|
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
|
|
{
|
|
// retrieve
|
|
return localDbCtx
|
|
.LogMachineList
|
|
.Where(x => x.DtEvent >= dtStart && x.DtEvent <= dtEnd)
|
|
.OrderByDescending(x => x.DtEvent)
|
|
.ToList();
|
|
}
|
|
}
|
|
|
|
/// <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<LogMachineModel> GetUnsentAsc(int numMax)
|
|
{
|
|
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
|
|
{
|
|
// retrieve
|
|
return localDbCtx
|
|
.LogMachineList
|
|
.Where(x => x.DtSent == null || x.DtSent < x.DtEvent)
|
|
.OrderBy(x => x.DtEvent)
|
|
.Take(numMax)
|
|
.ToList();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Aggiorna i record indicati inserendo dataora corrente x DtSent
|
|
/// </summary>
|
|
/// <param name="rec2upd"></param>
|
|
/// <returns></returns>
|
|
public bool SetDtSent(List<LogMachineModel> rec2upd)
|
|
{
|
|
bool done = false;
|
|
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
|
|
{
|
|
DateTime adesso = DateTime.Now;
|
|
foreach (var item in rec2upd)
|
|
{
|
|
var currRec = localDbCtx
|
|
.LogMachineList
|
|
.Where(x => (x.DtSent == null || x.DtSent < x.DtEvent) && 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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Update single LogMachineModel
|
|
/// </summary>
|
|
/// <param name="updItem"></param>
|
|
/// <returns></returns>
|
|
public bool Update(LogMachineModel updItem)
|
|
{
|
|
bool done = false;
|
|
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
|
|
{
|
|
var item2update = localDbCtx
|
|
.LogMachineList
|
|
.Where(x => x.LogDbId == updItem.LogDbId)
|
|
.SingleOrDefault();
|
|
try
|
|
{
|
|
// update, vers 1...
|
|
localDbCtx.Entry(item2update).CurrentValues.SetValues(updItem);
|
|
|
|
// Commit changes
|
|
localDbCtx.SaveChanges();
|
|
done = true;
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
string errMessage = $"EXCEPTION on LogMachine.Update: {Environment.NewLine}{exc}";
|
|
Console.WriteLine(errMessage);
|
|
Log.Error(errMessage);
|
|
}
|
|
}
|
|
return done;
|
|
}
|
|
|
|
#endregion Public Methods
|
|
|
|
#region Private Fields
|
|
|
|
/// <summary>
|
|
/// Istanza logger
|
|
/// </summary>
|
|
private NLog.Logger Log = LogManager.GetCurrentClassLogger();
|
|
|
|
#endregion Private Fields
|
|
}
|
|
} |