Aggiunta metodo getCurrODL

This commit is contained in:
Samuele Locatelli
2026-04-11 10:43:02 +02:00
parent 3c36c24ddb
commit 76d3d6f9e6
2 changed files with 89 additions and 56 deletions
+74 -2
View File
@@ -761,6 +761,58 @@ namespace MP.IOC.Data
return result;
}
/// <summary>
/// Restituisce il valore dell'ODL corrente (ODL deve esserci per gestione contapezzi, senza
/// ODL NO invio/gestione ODL)
/// </summary>
/// <param name="idxMacchina"></param>
/// <returns></returns>
public async Task<string> GetCurrOdlAsync(string idxMacchina)
{
string result = "";
string currKey = $"{Utils.redisOdlCurrByMac}:{idxMacchina}";
// cerco in redis dato valore sel macchina...
RedisValue rawData = redisDb.StringGet(currKey);
if (rawData.HasValue)
{
result = $"{rawData}";
}
else
{
result = await GetCurrOdlByProdAsync(idxMacchina);
// serializzo e salvo...
rawData = JsonConvert.SerializeObject(result);
redisDb.StringSet(currKey, rawData, getRandTOut(redisLongTimeCache));
}
return result;
}
/// <summary>
/// Restituisce il valore dell'ODL corrente (ODL deve esserci per gestione contapezzi, senza
/// ODL NO invio/gestione ODL)
/// </summary>
/// <param name="idxMacchina"></param>
/// <param name="forceDb">indica se forzare lettura da db (true) o meno</param>
/// <returns></returns>
public async Task<string> GetCurrOdlAsync(string idxMacchina, bool forceDb)
{
string answ = "";
// se ho forceDB leggo dai dati prod...
if (forceDb)
{
var datiProd = await StatoProdMacchinaAsync(idxMacchina, DateTime.Now, true);
if (datiProd != null)
{
answ = datiProd.IdxOdl.ToString();
}
}
else
{
answ = await GetCurrOdlAsync(idxMacchina);
}
return answ;
}
/// <summary>
/// Init ricetta
/// </summary>
@@ -2194,6 +2246,26 @@ namespace MP.IOC.Data
#region Private Methods
/// <summary>
/// Recupero info ODL corrente da dati prod macchina
/// </summary>
/// <param name="idxMacchina"></param>
/// <returns></returns>
private async Task<string> GetCurrOdlByProdAsync(string idxMacchina)
{
string answ = "";
// recupero stato...
var datiProd = await StatoProdMacchinaAsync(idxMacchina, DateTime.Now);
if (datiProd != null)
{
answ = datiProd.IdxOdl.ToString();
}
// ultimo controllo su idxOdl...
answ = answ == "" ? "0" : answ;
// restituisco!
return answ;
}
private async Task<bool> POdlFlushCache()
{
bool answ = false;
@@ -2223,7 +2295,7 @@ namespace MP.IOC.Data
/// <param name="idxMacchina"></param>
/// <param name="dtReq"></param>
/// <returns></returns>
private async Task<StatoProdModel> StatoProdMacchinaAsync(string idxMacchina, DateTime dtReq)
private async Task<StatoProdModel> StatoProdMacchinaAsync(string idxMacchina, DateTime dtReq, bool forceDb = false)
{
int rndWait = rnd.Next(0, 2);
await Task.Delay(rndWait);
@@ -2234,7 +2306,7 @@ namespace MP.IOC.Data
string currKey = $"{Utils.redisStatoProd}:{idxMacchina}:{dtReq:HHmm}";
RedisValue rawData = await redisDb.StringGetAsync(currKey);
//if (!string.IsNullOrEmpty($"{rawData}"))
if (rawData.HasValue)
if (rawData.HasValue && !forceDb)
{
result = JsonConvert.DeserializeObject<StatoProdModel>($"{rawData}");
source = "REDIS";