Fix lettura current + next BUNK con REDIS

This commit is contained in:
Samuele E. Locatelli
2019-11-04 18:57:51 +01:00
parent 84fd7113a8
commit f4f181b351
+90 -20
View File
@@ -791,6 +791,27 @@ namespace AppData
/// Chiave primo bunk su redis
/// </summary>
protected static string redFirstBunkKey = $"{redProdReq}:FirstBunk";
/// <summary>
/// Chiave primo bunk su redis
/// </summary>
protected static string redAllNextBunkKey = $"{redProdReq}:NextBunk";
/// <summary>
/// Chiave primo bunk su redis
/// </summary>
protected static string redNextBunkKey(int BunkID)
{
return $"{redProdReq}:NextBunk:{BunkID}";
}
/// <summary>
/// Resetto in REDIS i dati di bunk (corrente e successivi)
/// </summary>
public void resetRedisBunkData()
{
redisFirstBunk = null;
}
/// <summary>
/// Cache redis del PRIMO bunk da lavorare
/// </summary>
private static WBunk redisFirstBunk
{
get
@@ -821,10 +842,54 @@ namespace AppData
// se null elimino da redis
{
memLayer.ML.setRSV(redFirstBunkKey, "");
// elimino TUTTI i next...
memLayer.ML.redFlushKey(redAllNextBunkKey);
}
}
}
/// <summary>
/// Recupero da Redis del SUCCESSIVO bunk da lavorare
/// </summary>
/// <param name="currBunkId"></param>
/// <returns></returns>
private static WBunk getRedisNextBunk(int currBunkId)
{
WBunk answ = null;
string rawData = memLayer.ML.getRSV(redNextBunkKey(currBunkId));
if (rawData != "")
{
// provo a deserializzare
try
{
answ = JsonConvert.DeserializeObject<WBunk>(rawData);
}
catch
{ }
}
return answ;
}
/// <summary>
/// Salvo in Redis il SUCCESSIVO bunk da lavorare
/// </summary>
/// <param name="currBunkId"></param>
/// <param name="value"></param>
private static void setRedisNextBunk(int currBunkId, WBunk value)
{
if (value != null)
{
string redVal = JsonConvert.SerializeObject(value);
// default lascio x 5 minuti...
memLayer.ML.setRSV(redNextBunkKey(currBunkId), redVal, 300);
}
else
// se null elimino da redis
{
memLayer.ML.setRSV(redNextBunkKey(currBunkId), "");
}
}
/// <summary>
/// Restituisce il PRIMO bunk secondo criterio:
/// - posizione = 5 (ho letto da webApp il BUNK e preso in carico)
@@ -864,33 +929,38 @@ namespace AppData
/// <returns></returns>
public static WBunk prodGetNextBunk(int BunkID)
{
WBunk answ = null;
// vado sul DB e leggo ...
DS_App.StackListDataTable tabBunks = DataLayer.man.taSTL.getLoaded();
// controllo di averne almeno 1...
if (tabBunks.Count > 0)
WBunk answ = getRedisNextBunk(BunkID);
if (answ == null)
{
DS_App.StackListRow currBunk = null;
bool trovato = false;
// ciclo
foreach (var item in tabBunks)
// vado sul DB e leggo ...
DS_App.StackListDataTable tabBunks = DataLayer.man.taSTL.getLoaded();
// controllo di averne almeno 1...
if (tabBunks.Count > 0)
{
if (trovato)
DS_App.StackListRow currBunk = null;
bool trovato = false;
// ciclo
foreach (var item in tabBunks)
{
currBunk = item;
break;
if (trovato)
{
currBunk = item;
break;
}
// controllo se sia quello richiesto
if (item.StackID == BunkID)
{
trovato = true;
}
}
// controllo se sia quello richiesto
if (item.StackID == BunkID)
// se c'è un bunk trovato --> carico
if (currBunk != null)
{
trovato = true;
answ = getBunkFromDb(currBunk);
// salvo su redis
setRedisNextBunk(BunkID, answ);
}
}
// se c'è un bunk trovato --> carico
if (currBunk != null)
{
answ = getBunkFromDb(currBunk);
}
}
return answ;
}