using Microsoft.Extensions.Configuration; using NLog; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MP.FileData.Controllers { public class FileController : IDisposable { #region Private Fields private static IConfiguration _configuration; private static MoonPro_ProgContext dbCtx; private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); #endregion Private Fields #region Public Constructors public FileController(IConfiguration configuration) { _configuration = configuration; dbCtx = new MoonPro_ProgContext(configuration); Log.Info("Avviata classe FileController"); } #endregion Public Constructors #if false /// /// Elenco Azioni (decodifica) /// /// public List ActionsGetAll() { List dbResult = new List(); dbResult = dbCtx .DbSetAzioniUL .ToList(); return dbResult; } /// /// Elenco tabella Articoli da filtro /// /// /// /// public List ArticoliGetSearch(int numRecord, string searchVal = "") { List dbResult = new List(); dbResult = dbCtx .DbSetArticoli .Where(x => x.CodArticolo.Contains(searchVal) || x.DescArticolo.Contains(searchVal) || x.Disegno.Contains(searchVal) || string.IsNullOrEmpty(searchVal)) .OrderBy(x => x.CodArticolo) .Take(numRecord) .ToList(); return dbResult; } /// /// Elenco tabella Articoli da filtro /// /// /// /// public List CommesseGetSearch(int numRecord, string searchVal = "") { List dbResult = new List(); dbResult = dbCtx .DbSetODL .Where(x => x.KeyRichiesta.Contains(searchVal) || string.IsNullOrEmpty(searchVal)) .OrderBy(x => x.KeyRichiesta) .Take(numRecord) .ToList(); return dbResult; } #endif #region Public Methods /// /// Elenco tabella Articoli (FILTRATO!!!) /// /// /// /// public List ArtGetFilt(string searchVal, int maxNum = 100) { maxNum = maxNum <= 0 ? 100 : maxNum; List dbResult = new List(); using (MoonPro_ProgContext localDbCtx = new MoonPro_ProgContext(_configuration)) { int totRecord = localDbCtx .DbSetArticoli .Where(x => x.CodArticolo.Contains(searchVal) || x.DescArticolo.Contains(searchVal) || x.Disegno.Contains(searchVal)) .Count(); if (totRecord > maxNum) { dbResult = localDbCtx .DbSetArticoli .Where(x => x.CodArticolo.Contains(searchVal) || x.DescArticolo.Contains(searchVal) || x.Disegno.Contains(searchVal)) .OrderBy(x => x.DescArticolo) .Take(maxNum) .ToList(); dbResult.Add(new DatabaseModels.ArticoloModel() { CodArticolo = "#####", DescArticolo = $"... +{totRecord - maxNum} rec ..." }); } else { dbResult = localDbCtx .DbSetArticoli .Where(x => x.CodArticolo.Contains(searchVal) || x.DescArticolo.Contains(searchVal) || x.Disegno.Contains(searchVal)) .OrderBy(x => x.DescArticolo) .ToList(); } } return dbResult; } /// /// Effettua la comparazione tra i file in archivio ed i file attuali e segna info LastCheck e Changed (se cambiati) /// /// public bool CheckFileArchived(string idxMacchina, string path, string searchPattern) { bool answ = false; DirectoryInfo dirInfo = new DirectoryInfo(path); FileInfo[] fileList = dirInfo.GetFiles("*.*"); List fileNew = new List(); List fileMod = new List(); // recupera elenco file nel DB var archivedFile = FileGetByPath(path, true); // verifica i file foreach (var file in fileList) { // cerca nel DB... var currRecord = archivedFile .Where(x => x.Path == file.FullName) .FirstOrDefault(); // se NON trova lo crea if (currRecord == null) { fileNew.Add(file); } else { fileMod.Add(file); } } // salvo i NUOVI file if (fileNew != null && fileNew.Count > 0) { FileInsert(idxMacchina, fileNew); } // aggiorno i file modificati if (fileMod != null && fileMod.Count > 0) { FileUpdate(idxMacchina, fileMod); } return answ; } public void Dispose() { // Clear database context dbCtx.Dispose(); } public List FileGetByPath(string path, bool onlyActive) { List dbResult = new List(); using (MoonPro_ProgContext localDbCtx = new MoonPro_ProgContext(_configuration)) { dbResult = localDbCtx .DbSetProgFile .Where(x => x.Path.StartsWith(path) && ((onlyActive && x.Active) || !onlyActive)) .OrderBy(x => x.Name) .ToList(); } return dbResult; } public List FileGetFilt(string IdxMacchina, string CodArticolo, string SearchVal = "") { List dbResult = new List(); using (MoonPro_ProgContext localDbCtx = new MoonPro_ProgContext(_configuration)) { dbResult = localDbCtx .DbSetProgFile .Where(x => ((x.IdxMacchina == IdxMacchina || IdxMacchina == "0") || (x.CodArticolo == CodArticolo || CodArticolo == "ND" || CodArticolo == "")) && (x.Name.Contains(SearchVal) || string.IsNullOrEmpty(SearchVal))) .OrderBy(x => x.Name) .ToList(); } return dbResult; } /// /// effettua inserimento di un record in archivio come NUOVO documento tracciato /// /// /// /// public bool FileInsert(string idxMacchina, List newFiles) { bool answ = false; DateTime adesso = DateTime.Now; using (MoonPro_ProgContext localDbCtx = new MoonPro_ProgContext(_configuration)) { // converto List newRec = newFiles.Select(o => new DatabaseModels.FileModel() { Active = true, CodArticolo = "ND", Changed = false, IdxMacchina = idxMacchina, LastCheck = adesso, LastMod = o.LastWriteTime, MimeType = o.Extension, Name = o.Name, Path = o.FullName, Rev = 0, Size = o.Length, FileContent = File.ReadAllBytes(o.FullName) }).ToList(); // aggiungo in blocco localDbCtx .DbSetProgFile .AddRange(newRec); // salvo localDbCtx.SaveChanges(); answ = true; } return answ; } /// /// effettua inserimento di un record in archivio come NUOVO documento tracciato /// /// /// /// public bool FileUpdate(string idxMacchina, List updFiles) { bool answ = false; DateTime adesso = DateTime.Now; using (MoonPro_ProgContext localDbCtx = new MoonPro_ProgContext(_configuration)) { // converto List newRec = updFiles.Select(o => new DatabaseModels.FileModel() { Active = true, CodArticolo = "ND", Changed = false, IdxMacchina = idxMacchina, LastCheck = adesso, LastMod = o.LastWriteTime, MimeType = o.Extension, Name = o.Name, Path = o.FullName, Rev = 0, Size = o.Length, FileContent = File.ReadAllBytes(o.FullName) }).ToList(); // aggiungo in blocco localDbCtx .DbSetProgFile .UpdateRange(newRec); // salvo localDbCtx.SaveChanges(); answ = true; } return answ; } /// /// Elenco tabella Macchine /// /// public List MacchineGetAll() { List dbResult = new List(); using (MoonPro_ProgContext localDbCtx = new MoonPro_ProgContext(_configuration)) { dbResult = localDbCtx .DbSetMacchine .OrderBy(x => x.IdxMacchina) .ToList(); } return dbResult; } public void ResetController() { dbCtx = new MoonPro_ProgContext(_configuration); Log.Info("Effettuato reset FileController"); } /// /// Annulla modifiche su una specifica entity (cancel update) /// /// /// public bool RollBackEntity(object item) { bool answ = false; 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; } #endregion Public Methods #if false /// /// Elenco tabella controlli da filtro /// /// /// /// public List StatControlliGetAll(DateTime DataStart, DateTime DataEnd, string IdxMacchina, int IdxODL, string KeyRichiesta, string CodArticolo) { List dbResult = new List(); var dataFrom = new SqlParameter("@dataFrom", DataStart); var dataTo = new SqlParameter("@dataTo", DataEnd); var idxMacchina = new SqlParameter("@idxMacchina", IdxMacchina); var idxODL = new SqlParameter("@IdxODL", IdxODL); var keyRichiesta = new SqlParameter("@KeyRichiesta", KeyRichiesta); var codArticolo = new SqlParameter("@CodArticolo", CodArticolo); dbResult = dbCtx .DbSetControlli .FromSqlRaw("EXEC stp_UI_RC_GetByFilter @dataFrom,@dataTo,@idxMacchina,@IdxODL,@KeyRichiesta,@CodArticolo", dataFrom, dataTo, idxMacchina, idxODL, keyRichiesta, codArticolo) .ToList(); return dbResult; } /// /// Elenco tabella DDB da filtro /// /// /// /// /// /// /// /// /// /// public List StatDdbGetAll(DateTime DataStart, DateTime DataEnd, string IdxMacchina, int IdxODL, string KeyRichiesta, string CodArticolo, int FirstRecord, int NumRecord) { List dbResult = new List(); var dataFrom = new SqlParameter("@dataFrom", DataStart); var dataTo = new SqlParameter("@dataTo", DataEnd); var idxMacchina = new SqlParameter("@idxMacchina", IdxMacchina); var idxODL = new SqlParameter("@IdxODL", IdxODL); var keyRichiesta = new SqlParameter("@KeyRichiesta", KeyRichiesta); var codArticolo = new SqlParameter("@CodArticolo", CodArticolo); var firstRecord = new SqlParameter("@FirstRecord", FirstRecord); var numRecord = new SqlParameter("@NumRecord", NumRecord); dbResult = dbCtx .DbSetDdbTurni .FromSqlRaw("EXEC stp_UI_DDBTurni_GetByFilter @dataFrom,@dataTo,@idxMacchina,@IdxODL,@KeyRichiesta,@CodArticolo,@FirstRecord,@NumRecord", dataFrom, dataTo, idxMacchina, idxODL, keyRichiesta, codArticolo, firstRecord, numRecord) .ToList(); return dbResult; } /// /// Elenco tabella DDB da filtro /// /// /// /// /// /// /// /// public int StatDdbGetCount(DateTime DataStart, DateTime DataEnd, string IdxMacchina, int IdxODL, string KeyRichiesta, string CodArticolo) { var dbResult = dbCtx .DbSetDdbTurni .Where(x => (x.IdxMacchina == IdxMacchina || IdxMacchina == "*") && (x.IdxOdl == IdxODL || IdxODL == -999) && (x.KeyRichiesta == KeyRichiesta || KeyRichiesta == "*") && (x.CodArticolo == CodArticolo || CodArticolo == "*") && (x.InizioPeriodo >= DataStart && x.InizioPeriodo <= DataEnd)) .Count(); return dbResult; } /// /// Elenco tabella ODL da filtro /// /// /// /// public List StatOdlGetAll(DateTime DataStart, DateTime DataEnd, string IdxMacchina, int IdxODL, string KeyRichiesta, string CodArticolo) { List dbResult = new List(); var dataFrom = new SqlParameter("@dataFrom", DataStart); var dataTo = new SqlParameter("@dataTo", DataEnd); var idxMacchina = new SqlParameter("@idxMacchina", IdxMacchina); var idxODL = new SqlParameter("@IdxODL", IdxODL); var keyRichiesta = new SqlParameter("@KeyRichiesta", KeyRichiesta); var codArticolo = new SqlParameter("@CodArticolo", CodArticolo); dbResult = dbCtx .DbSetODL .FromSqlRaw("EXEC stp_UI_Odl_GetByFilter @dataFrom,@dataTo,@idxMacchina,@IdxODL,@KeyRichiesta,@CodArticolo", dataFrom, dataTo, idxMacchina, idxODL, keyRichiesta, codArticolo) .ToList(); return dbResult; } /// /// Elenco tabella scarti da filtro /// /// /// /// /// /// public List StatScartiGetAll(DateTime DataStart, DateTime DataEnd, string IdxMacchina, int IdxODL, string KeyRichiesta, string CodArticolo) { List dbResult = new List(); var dataFrom = new SqlParameter("@dataFrom", DataStart); var dataTo = new SqlParameter("@dataTo", DataEnd); var idxMacchina = new SqlParameter("@idxMacchina", IdxMacchina); var idxODL = new SqlParameter("@IdxODL", IdxODL); var keyRichiesta = new SqlParameter("@KeyRichiesta", KeyRichiesta); var codArticolo = new SqlParameter("@CodArticolo", CodArticolo); dbResult = dbCtx .DbSetScarti .FromSqlRaw("EXEC stp_UI_RS_GetByFilter @dataFrom,@dataTo,@idxMacchina,@IdxODL,@KeyRichiesta,@CodArticolo", dataFrom, dataTo, idxMacchina, idxODL, keyRichiesta, codArticolo) .ToList(); return dbResult; } /// /// Elenco tabella TurniOee da filtro /// /// /// /// /// /// public List StatTurniOeeGetAll(DateTime DataStart, DateTime DataEnd, string IdxMacchina, int IdxODL, string KeyRichiesta, string CodArticolo) { List dbResult = new List(); var dataFrom = new SqlParameter("@dataFrom", DataStart); var dataTo = new SqlParameter("@dataTo", DataEnd); var idxMacchina = new SqlParameter("@idxMacchina", IdxMacchina); var idxODL = new SqlParameter("@IdxODL", IdxODL); var keyRichiesta = new SqlParameter("@KeyRichiesta", KeyRichiesta); var codArticolo = new SqlParameter("@CodArticolo", CodArticolo); dbResult = dbCtx .DbSetTurniOee .FromSqlRaw("EXEC stp_UI_TurniOee_GetByFilter @dataFrom,@dataTo,@idxMacchina,@IdxODL,@KeyRichiesta,@CodArticolo", dataFrom, dataTo, idxMacchina, idxODL, keyRichiesta, codArticolo) .ToList(); return dbResult; } /// /// Elenco tabella UserLog da filtro /// /// /// /// public List StatUserLogGetAll(DateTime DataStart, DateTime DataEnd, string IdxMacchina, int IdxODL, string KeyRichiesta, string CodArticolo) { List dbResult = new List(); //dbResult = dbCtx // .DbSetUserLog // .Where(x => x.Valore.Contains(searchVal) || x.Cognome.Contains(searchVal) || x.CodArticolo.Contains(searchVal) || string.IsNullOrEmpty(searchVal)) // .OrderByDescending(x => x.DataOraRif) // .Take(numRecord) // .ToList(); var dataFrom = new SqlParameter("@dataFrom", DataStart); var dataTo = new SqlParameter("@dataTo", DataEnd); var idxMacchina = new SqlParameter("@idxMacchina", IdxMacchina); var idxODL = new SqlParameter("@IdxODL", IdxODL); var keyRichiesta = new SqlParameter("@KeyRichiesta", KeyRichiesta); var codArticolo = new SqlParameter("@CodArticolo", CodArticolo); dbResult = dbCtx .DbSetUserLog .FromSqlRaw("EXEC stp_UI_UL_GetByFilter @dataFrom,@dataTo,@idxMacchina,@IdxODL,@KeyRichiesta,@CodArticolo", dataFrom, dataTo, idxMacchina, idxODL, keyRichiesta, codArticolo) .ToList(); return dbResult; } #endif } }