224 lines
7.1 KiB
C#
224 lines
7.1 KiB
C#
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 Private Methods
|
|
|
|
private void createSimData()
|
|
{
|
|
// generazione dati casuale
|
|
Random rnd = new Random();
|
|
foreach (var plant in GetPlants())
|
|
{
|
|
var currPlant = GetPlant(plant.PlantId);
|
|
// importo limiti e valori...
|
|
currPlant.LevelMax = rnd.Next(22, 30) * 1000;
|
|
|
|
int soglia01 = rnd.Next(6000, 7500);
|
|
int soglia02 = rnd.Next(1000, 3000);
|
|
var simLevel = rnd.Next(1, (int)currPlant.LevelMax);
|
|
List<TSData> SimLevelTS = new List<TSData>();
|
|
List<TSData> SimOrderTS = new List<TSData>();
|
|
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 = plant.PlantId,
|
|
PlantCode = currPlant.PlantCode,
|
|
PlantDesc = currPlant.PlantDesc,
|
|
LevelAct = simLevel,
|
|
LevelMax = currPlant.LevelMax,
|
|
LevelTS = SimLevelTS,
|
|
OrderTS = SimOrderTS
|
|
};
|
|
}
|
|
}
|
|
|
|
#endregion Private Methods
|
|
|
|
#region Public Methods
|
|
|
|
public void Dispose()
|
|
{
|
|
// Clear database context
|
|
dbCtx.Dispose();
|
|
}
|
|
|
|
public List<DatabaseModels.ConfigModel> GetConfig()
|
|
{
|
|
var dbResult = dbCtx
|
|
.DbSetConfig
|
|
.ToList();
|
|
|
|
return dbResult;
|
|
}
|
|
|
|
public List<DatabaseModels.ItemModel> 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<DatabaseModels.PlantDetailModel> GetPlants()
|
|
{
|
|
var dbResult = dbCtx
|
|
.DbSetPlant
|
|
.ToList();
|
|
|
|
return dbResult;
|
|
}
|
|
|
|
public List<PlantDTO> GetPlantsDTO()
|
|
{
|
|
var plantList = dbCtx
|
|
.DbSetPlant
|
|
.ToList();
|
|
|
|
var dbResult = plantList
|
|
.Select(x => PlantDTO(x.PlantId))
|
|
.ToList();
|
|
|
|
return dbResult;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Recupero info PLANT modalità DTO
|
|
/// </summary>
|
|
/// <param name="PlantId"></param>
|
|
/// <returns></returns>
|
|
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<TSData> SimLevelTS = new List<TSData>();
|
|
List<TSData> SimOrderTS = new List<TSData>();
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Rigenera intero DB se riceve ID di un plant SIM...
|
|
/// </summary>
|
|
/// <param name="PlantId"></param>
|
|
public bool RegenDB(int PlantId)
|
|
{
|
|
bool answ = false;
|
|
var currPlant = GetPlant(PlantId);
|
|
if (currPlant.PlantCode.StartsWith("PSIM"))
|
|
{
|
|
// rigenero intero DB
|
|
dbCtx.Database.EnsureDeleted();
|
|
dbCtx.Database.EnsureCreated();
|
|
|
|
//createSimData();
|
|
answ = true;
|
|
}
|
|
return answ;
|
|
}
|
|
|
|
#endregion Public Methods
|
|
}
|
|
} |