using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using GWMS.Data.DTO; using Microsoft.Extensions.Configuration; using NLog; namespace GWMS.Data.Controllers { public class GWMSController : IDisposable { #region Private Fields private static IConfiguration _configuration; private static GWMSContext dbCtx; private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); #endregion Private Fields #region Public Constructors public GWMSController(IConfiguration configuration) { _configuration = configuration; dbCtx = new GWMSContext(configuration); Log.Info("Avviata classe GWMSController"); } #endregion Public Constructors #region Public Methods public void Dispose() { // Clear database context dbCtx.Dispose(); } public List GetConfig() { var dbResult = dbCtx .DbSetConfig .ToList(); return dbResult; } public List GetItems() { var dbResult = dbCtx .DbSetItems .ToList(); return dbResult; } public DatabaseModels.PlantDetailModel GetPlant(int PlantId) { var dbResult = dbCtx .DbSetPlant .Where(x => x.PlantId == PlantId) .FirstOrDefault(); return dbResult; } public List GetPlants() { var dbResult = dbCtx .DbSetPlant .ToList(); return dbResult; } public List GetPlantsDTO() { var plantList = dbCtx .DbSetPlant .ToList(); var dbResult = plantList .Select(x => PlantDTO(x.PlantId)) .ToList(); return dbResult; } /// /// Recupero info PLANT modalità DTO /// /// /// public PlantDTO PlantDTO(int PlantId) { var currPlant = GetPlant(PlantId); // FIXME TODO !!!! è casuale Random rnd = new Random(); int soglia01 = rnd.Next(6000, 7500); int soglia02 = rnd.Next(1000, 3000); var simLevel = rnd.Next(1, (int)currPlant.LevelMax); List SimLevelTS = new List(); List SimOrderTS = new List(); DateTime adesso = DateTime.Now; int lastLevel = simLevel; int lastOrder = 0; int anticipo = 0; for (int i = 200; i > 0; i--) { anticipo = i * 30; lastLevel = lastLevel - rnd.Next(0, 200); // se inferiore a soglia 1 --> ordine if (lastLevel + lastOrder < soglia01) { lastOrder = rnd.Next(10000 - soglia01, 10000 - soglia02); SimOrderTS.Add(new TSData() { DtEvent = adesso.AddMinutes(-anticipo), ValDouble = lastOrder }); } // se inferiore a soglia 2 --> refill if (lastLevel < soglia02) { lastLevel += lastOrder; lastOrder = 0; } SimLevelTS.Add(new TSData() { DtEvent = adesso.AddMinutes(-anticipo), ValDouble = lastLevel }); //SimLevelTS.Add(new TSData() { DtEvent = adesso.AddMinutes(-i), ValDouble = simLevel + i * 20 + rnd.Next(0, 5) }); } PlantDTO answ = new PlantDTO() { PlantId = PlantId, PlantCode = currPlant.PlantCode, PlantDesc = currPlant.PlantDesc, LevelAct = simLevel, LevelMax = currPlant.LevelMax, LevelTS = SimLevelTS, OrderTS = SimOrderTS }; return answ; } #endregion Public Methods } }