diff --git a/AppData/ComLib.cs b/AppData/ComLib.cs index 957ba45..6e549bd 100644 --- a/AppData/ComLib.cs +++ b/AppData/ComLib.cs @@ -791,6 +791,27 @@ namespace AppData /// Chiave primo bunk su redis /// protected static string redFirstBunkKey = $"{redProdReq}:FirstBunk"; + /// + /// Chiave primo bunk su redis + /// + protected static string redAllNextBunkKey = $"{redProdReq}:NextBunk"; + /// + /// Chiave primo bunk su redis + /// + protected static string redNextBunkKey(int BunkID) + { + return $"{redProdReq}:NextBunk:{BunkID}"; + } + /// + /// Resetto in REDIS i dati di bunk (corrente e successivi) + /// + public void resetRedisBunkData() + { + redisFirstBunk = null; + } + /// + /// Cache redis del PRIMO bunk da lavorare + /// 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); } } } + + /// + /// Recupero da Redis del SUCCESSIVO bunk da lavorare + /// + /// + /// + 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(rawData); + } + catch + { } + } + return answ; + } + /// + /// Salvo in Redis il SUCCESSIVO bunk da lavorare + /// + /// + /// + 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), ""); + } + } + /// /// Restituisce il PRIMO bunk secondo criterio: /// - posizione = 5 (ho letto da webApp il BUNK e preso in carico) @@ -864,33 +929,38 @@ namespace AppData /// 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; }