using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using MP.Data.DbModels; using NLog; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Threading.Tasks; namespace MP.Data.Controllers { public class MpIocController : IDisposable { #region Public Constructors public MpIocController(IConfiguration configuration) { _configuration = configuration; Log.Info("Avviata classe MpIocController"); } #endregion Public Constructors #region Public Methods /// /// Elenco da tabella Config /// /// public List ConfigGetAll() { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetConfig .AsNoTracking() .OrderBy(x => x.Chiave) .ToList(); } return dbResult; } /// /// Update record config /// /// public bool ConfigUpdate(ConfigModel updRec) { bool fatto = false; ConfigModel dbResult = new ConfigModel(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetConfig .Where(x => x.Chiave == updRec.Chiave) .FirstOrDefault(); if (dbResult != null) { dbResult.Valore = updRec.Valore; dbCtx.SaveChanges(); fatto = true; } } return fatto; } /// /// Intera tab dati macchina /// /// public List DatiMacchineGetAll() { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetDatiMacchine .AsNoTracking() .OrderBy(x => x.IdxMacchina) .ToList(); } return dbResult; } /// /// Inserimento record in DDB /// /// /// /// /// /// /// /// /// public bool DDB_InsStatoBatch(string idxMacchina, DateTime inizioStato, int idxStato, string codArt, string value, int matrOpr, string pallet) { bool fatto = false; using (var dbCtx = new MoonProContext(_configuration)) { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var InizioStato = new SqlParameter("@InizioStato", inizioStato); var IdxStato = new SqlParameter("@IdxStato", idxStato); var CodArticolo = new SqlParameter("@CodArticolo", codArt); var Value = new SqlParameter("@Value", value); var MatrOpr = new SqlParameter("@MatrOpr", matrOpr); var Pallet = new SqlParameter("@pallet", pallet); var result = dbCtx .Database .ExecuteSqlRaw("exec dbo.stp_DDB_InsStatoBatch @IdxMacchina, @InizioStato, @IdxStato, @CodArticolo, @Value, @MatrOpr, @pallet", IdxMacchina, InizioStato, IdxStato, CodArticolo, Value, MatrOpr, Pallet); // indico eseguito! fatto = result > 0; } return fatto; } public void Dispose() { _configuration = null; } /// /// Aggiunta record EventList /// /// /// public bool EvListInsert(EventListModel newRec) { bool fatto = false; using (var dbCtx = new MoonProContext(_configuration)) { try { var currRec = dbCtx .DbSetEvList .Add(newRec); dbCtx.SaveChanges(); } catch (Exception exc) { Log.Error($"Eccezione durante EvListInsert{Environment.NewLine}{exc}"); } } return fatto; } /// /// Aggiunta record EventList /// /// /// public async Task EvListInsertAsync(EventListModel newRec) { bool fatto = false; using (var dbCtx = new MoonProContext(_configuration)) { try { var currRec = dbCtx .DbSetEvList .Add(newRec); await dbCtx.SaveChangesAsync(); } catch (Exception exc) { Log.Error($"Eccezione durante EvListInsertAsync{Environment.NewLine}{exc}"); } } return fatto; } /// /// Elenco ultimi n record flux log dato macchina e flusso (ordinato x data registrazione) /// /// Data massima x eventi /// Data minima x eventi /// * = tutte, altrimenti solo x una data macchina /// *=tutti, altrimenti solo selezionato /// numero massimo record da restituire /// public List FluxLogGetLastFilt(DateTime DtMax, DateTime DtMin, string IdxMacchina, string CodFlux, int MaxRec) { List dbResult = new List(); using (var dbCtx = new MoonPro_FluxContext(_configuration)) { dbResult = dbCtx .DbSetFluxLog .AsNoTracking() .Where(x => (x.dtEvento >= DtMin && x.dtEvento <= DtMax) && (IdxMacchina == "*" || x.IdxMacchina == IdxMacchina) && (CodFlux == "*" || x.CodFlux == CodFlux)) .OrderByDescending(x => x.dtEvento) .Take(MaxRec) .ToList(); } return dbResult; } public bool KeepAliveUpsert(string IdxMacc, DateTime OraServer, DateTime OraMacc) { bool fatto = false; using (var dbCtx = new MoonProContext(_configuration)) { var currRec = dbCtx .DbSetKeepAlive .Where(x => x.IdxMacchina == IdxMacc) .FirstOrDefault(); if (currRec != null) { currRec.DataOraServer = OraServer; currRec.DataOraMacchina = OraMacc; dbCtx.Entry(currRec).State = EntityState.Modified; } else { KeepAliveModel newRec = new KeepAliveModel() { IdxMacchina = IdxMacc, DataOraMacchina = OraMacc, DataOraServer = OraServer, DataOraStart = DateTime.Now }; dbCtx .DbSetKeepAlive .Add(newRec); } dbCtx.SaveChanges(); fatto = true; } return fatto; } public List ListLinkFilt(string tipoLink) { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetLinkMenu .Where(x => x.TipoLink == tipoLink) .AsNoTracking() .OrderBy(x => x.Ordine) .ToList(); } return dbResult; } /// /// Intera tabella relazione master/slave in machine (gestione setup master --> slave) /// /// public List Macchine2Slave() { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetM2S .AsNoTracking() .OrderBy(x => x.IdxMacchina) .ToList(); } return dbResult; } /// /// Elenco Record Macchine /// /// public List MacchineGetAll() { List dbResult = new List(); using (MoonProContext localDbCtx = new MoonProContext(_configuration)) { dbResult = localDbCtx .DbSetMacchine .ToList(); } return dbResult; } public MacchineModel? MacchineGetByIdx(string IdxMacchina) { MacchineModel dbResult = null; using (MoonProContext localDbCtx = new MoonProContext(_configuration)) { dbResult = localDbCtx .DbSetMacchine .FirstOrDefault(x => x.IdxMacchina == IdxMacchina); } return dbResult; } /// /// Elenco da tabella Macchine /// /// /// public List MacchineGetFilt(string codGruppo) { List dbResult = new List(); try { using (var dbCtx = new MoonProContext(_configuration)) { if (codGruppo == "*") { dbResult = dbCtx .DbSetMacchine .AsNoTracking() .OrderBy(x => x.IdxMacchina) .ToList(); } else { dbResult = dbCtx .DbSetGrp2Macc .Where(g => g.CodGruppo == codGruppo) .Join(dbCtx.DbSetMacchine, g => g.IdxMacchina, m => m.IdxMacchina, (g, m) => m ) .AsNoTracking() .OrderBy(x => x.IdxMacchina) .ToList(); } } } catch (Exception exc) { Log.Error($"Eccezione in MacchineGetFilt{Environment.NewLine}{exc}"); } return dbResult; } /// /// Upsert Record Macchine /// /// public bool MacchineUpsert(MacchineModel entity) { using (MoonProContext localDbCtx = new MoonProContext(_configuration)) { // Recuperiamo l'entità tracciata dal context var trackedEntity = localDbCtx.DbSetMacchine.FirstOrDefault(x => x.IdxMacchina == entity.IdxMacchina); if (trackedEntity != null) { // Aggiorna i valori dell'entità tracciata con quelli della nuova localDbCtx.Entry(trackedEntity).CurrentValues.SetValues(entity); } else { localDbCtx.DbSetMacchine.Update(entity); } return localDbCtx.SaveChanges() > 0; } } /// /// Upsert Record Macchine ASYNC /// /// public async Task MacchineUpsertAsync(MacchineModel entity) { using (MoonProContext localDbCtx = new MoonProContext(_configuration)) { // Recuperiamo l'entità tracciata dal context var trackedEntity = await localDbCtx.DbSetMacchine.FirstOrDefaultAsync(x => x.IdxMacchina == entity.IdxMacchina); if (trackedEntity != null) { // Aggiorna i valori dell'entità tracciata con quelli della nuova localDbCtx.Entry(trackedEntity).CurrentValues.SetValues(entity); } else { localDbCtx.DbSetMacchine.Update(entity); } return await localDbCtx.SaveChangesAsync() > 0; } } /// /// Elenco da tabella Macchine /// /// /// public List MicroStatoMacchinaGetByIdxMacc(string IdxMacc) { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetMicroStatoMacc .Where(x => x.IdxMacchina == IdxMacc) .AsNoTracking() .ToList(); return dbResult; } } /// /// Aggiornamento record Microstato macchina /// /// /// public bool MicroStatoMacchinaUpsert(MicroStatoMacchinaModel newRec) { bool fatto = false; using (var dbCtx = new MoonProContext(_configuration)) { var actRec = dbCtx .DbSetMicroStatoMacc .Where(x => x.IdxMacchina == newRec.IdxMacchina) .AsNoTracking() .FirstOrDefault(); if (actRec == null) { dbCtx .DbSetMicroStatoMacc .Add(newRec); } else { actRec.IdxMicroStato = newRec.IdxMicroStato; actRec.InizioStato = newRec.InizioStato; actRec.Value = newRec.Value; dbCtx.Entry(actRec).State = EntityState.Modified; } fatto = dbCtx.SaveChanges() > 0; } return fatto; } /// /// Aggiornamento record Microstato macchina /// /// /// public async Task MicroStatoMacchinaUpsertAsync(MicroStatoMacchinaModel newRec) { bool fatto = false; using (var dbCtx = new MoonProContext(_configuration)) { var actRec = await dbCtx .DbSetMicroStatoMacc .Where(x => x.IdxMacchina == newRec.IdxMacchina) .AsNoTracking() .FirstOrDefaultAsync(); if (actRec == null) { dbCtx .DbSetMicroStatoMacc .Add(newRec); } else { actRec.IdxMicroStato = newRec.IdxMicroStato; actRec.InizioStato = newRec.InizioStato; actRec.Value = newRec.Value; dbCtx.Entry(actRec).State = EntityState.Modified; } fatto = await dbCtx.SaveChangesAsync() > 0; } return fatto; } /// /// Elenco da tabella MappaStatoExplModel /// /// public List MseGetAll(int maxAge = 2000) { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { var maxAgeSec = new SqlParameter("@maxAgeSec", maxAge); dbResult = dbCtx .DbSetMSE .FromSqlRaw("EXEC stp_MSE_getData @maxAgeSec", maxAgeSec) .AsNoTracking() .ToList(); } return dbResult; } /// /// ODL corrente macchina /// /// /// public ODLExpModel OdlCurrByMacc(string idxMacchina) { ODLExpModel answ = new(); using (var dbCtx = new MoonProContext(_configuration)) { try { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var dbRes = dbCtx .DbSetODLExp .FromSqlRaw("EXEC stp_ODL_getByMacchina @IdxMacchina", IdxMacchina) .AsNoTracking() .FirstOrDefault(); answ = dbRes ?? new(); } catch (Exception exc) { Log.Error($"Eccezione durante OdlCurrByMacc{Environment.NewLine}{exc}"); } } return answ; } /// /// ODL corrente macchina /// /// /// public async Task OdlCurrByMaccAsync(string idxMacchina) { ODLExpModel answ = new(); using (var dbCtx = new MoonProContext(_configuration)) { try { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var dbRes = await dbCtx .DbSetODLExp .FromSqlRaw("EXEC stp_ODL_getByMacchina @IdxMacchina", IdxMacchina) .AsNoTracking() .FirstOrDefaultAsync(); answ = dbRes ?? new(); } catch (Exception exc) { Log.Error($"Eccezione durante OdlCurrByMaccAsync{Environment.NewLine}{exc}"); } } return answ; } /// /// Elenco ODL data macchina e periodo /// /// /// /// /// public List OdlListByMaccPeriodo(string idxMacchina, DateTime dtStart, DateTime dtEnd) { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { try { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var DataFrom = new SqlParameter("@dataFrom", dtStart); var DataTo = new SqlParameter("@dataTo", dtEnd); dbResult = dbCtx .DbSetODLExp .FromSqlRaw("EXEC stp_ODL_getByMacchinaPeriodo @IdxMacchina, @dataFrom, @dataTo", IdxMacchina, DataFrom, DataTo) .AsNoTracking() .ToList(); } catch (Exception exc) { Log.Error($"Eccezione durante OdlListByMaccPeriodo{Environment.NewLine}{exc}"); } } return dbResult; } /// /// Stato prod macchina /// /// /// public PzProdModel PezziProdMacchina(string idxMacchina) { PzProdModel dbResult = new PzProdModel(); using (var dbCtx = new MoonProContext(_configuration)) { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); dbResult = dbCtx .DbSetPzProd .FromSqlRaw("EXEC stp_PzProd_getByMacchina @IdxMacchina", IdxMacchina) .AsNoTracking() .FirstOrDefault(); } return dbResult; } /// /// Effettua ricalcolo MSE x macchina indicata /// /// idx macchina da confermare /// Num massimo secondi di "vecchiaia" del dato /// public bool RecalcMse(string idxMacchina, int maxAgeSec) { bool answ = false; try { var rigaProd = StatoProdMacchina(idxMacchina, DateTime.Now); using (var dbCtx = new MoonProContext(_configuration)) { var MaxAgeSec = new SqlParameter("@maxAgeSec ", maxAgeSec); var IdxMacchina = new SqlParameter("@idxMacchina", idxMacchina); var result = dbCtx .Database .ExecuteSqlRaw("EXEC stp_MSE_recalc @maxAgeSec, @idxMacchina ", MaxAgeSec, IdxMacchina); // indico eseguito! answ = result > 0; } } catch (Exception exc) { Log.Error($"Eccezione in RicalcMse:{Environment.NewLine}{exc}"); } return answ; } /// /// Annulla modifiche su una specifica entity (cancel update) /// /// /// public bool RollBackEntity(object item) { bool answ = false; using (var dbCtx = new MoonProContext(_configuration)) { try { if (dbCtx.Entry(item).State == Microsoft.EntityFrameworkCore.EntityState.Deleted || dbCtx.Entry(item).State == Microsoft.EntityFrameworkCore.EntityState.Modified) { dbCtx.Entry(item).Reload(); } } catch (Exception exc) { Log.Error($"Eccezione in rollBackEntity{Environment.NewLine}{exc}"); } } return answ; } /// /// Aggiunta record SignalLog /// /// /// public bool SignalLogInsert(SignalLogModel newRec) { bool fatto = false; using (var dbCtx = new MoonProContext(_configuration)) { try { var currRec = dbCtx .DbSetSignalLog .Add(newRec); dbCtx.SaveChanges(); } catch (Exception exc) { Log.Error($"Eccezione durante SignalLogInsert{Environment.NewLine}{exc}"); } } return fatto; } /// /// Aggiunta record SignalLog Async /// /// /// public async Task SignalLogInsertAsync(SignalLogModel newRec) { bool fatto = false; using (var dbCtx = new MoonProContext(_configuration)) { try { var currRec = dbCtx .DbSetSignalLog .Add(newRec); await dbCtx.SaveChangesAsync(); } catch (Exception exc) { Log.Error($"Eccezione durante SignalLogInsertAsync{Environment.NewLine}{exc}"); } } return fatto; } /// /// Tabella state machine eventi 2 stati data macchina e tipo evento /// /// /// public List SMES_getHwTransitions(string idxMacchina, int idxTipo) { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var IdxTipo = new SqlParameter("@IdxTipo", idxTipo); dbResult = dbCtx .DbSetSMES .FromSqlRaw("exec dbo.stp_TS_getByIdxMacchIdxTipoEv @IdxMacchina, @IdxTipo", IdxMacchina, IdxTipo) .AsNoTracking() .AsEnumerable() .ToList(); } return dbResult; } /// /// Tabella state machine eventi 2 stati data macchina e tipo evento /// /// /// public List SMES_getUserForced(string idxMacchina, int idxTipo) { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var IdxTipo = new SqlParameter("@IdxTipo", idxTipo); dbResult = dbCtx .DbSetSMES .FromSqlRaw("exec dbo.stp_TS_getUserForcedTrans @IdxMacchina, @IdxTipo", IdxMacchina, IdxTipo) .AsNoTracking() .AsEnumerable() .ToList(); } return dbResult; } /// /// Intera tabella state machine ingressi 2 eventi /// /// public List StateMachineIngressi(int idxFam) { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { var IdxFamIn = new SqlParameter("@IdxFamigliaIngresso", idxFam); dbResult = dbCtx .DbSetSMI .FromSqlRaw("exec dbo.stp_TRI_getByIdxFamIng @IdxFamigliaIngresso", IdxFamIn) .AsNoTracking() .AsEnumerable() .ToList(); } return dbResult; } /// /// Stato prod macchina (completo) /// /// /// /// public StatoProdModel StatoProdMacchina(string idxMacchina, DateTime dtReq) { StatoProdModel dbResult = new StatoProdModel(); using (var dbCtx = new MoonProContext(_configuration)) { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var DataOra = new SqlParameter("@DataOra ", dtReq); var rawData = dbCtx .DbSetStatoProd .FromSqlRaw("EXEC stp_StatoProd_getByMacchina @IdxMacchina, @DataOra ", IdxMacchina, DataOra) .AsNoTracking() .AsEnumerable() .ToList(); dbResult = rawData .FirstOrDefault(); } return dbResult; } /// /// Intera vista v_MSFD /// /// public List VMSFDGetAll() { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetMSFD .AsNoTracking() .OrderBy(x => x.IdxMacchina) .ToList(); } return dbResult; } /// /// Vista v_MSFD x singola macchina (da stored) - singolo record /// /// /// public List VMSFDGetByMacc(string idxMacc) { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacc); dbResult = dbCtx .DbSetMSFD .FromSqlRaw("exec dbo.stp_MSFD_getMacc @IdxMacchina", IdxMacchina) .AsNoTracking() .AsEnumerable() .ToList(); } return dbResult; } /// /// Vista v_MSFD delle machine MULTI filtrato x macchina (da stored) /// /// /// public List VMSFDGetMultiByMacc(string idxMacc) { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacc); dbResult = dbCtx .DbSetMSFD .FromSqlRaw("exec dbo.stp_MSFD_getMulti @IdxMacchina", IdxMacchina) .AsNoTracking() .AsEnumerable() .ToList(); } return dbResult; } #endregion Public Methods #region Private Fields private static IConfiguration _configuration; private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); #endregion Private Fields } }