diff --git a/MP.SPEC/Components/ProdKit/Manager.razor.cs b/MP.SPEC/Components/ProdKit/Manager.razor.cs
index 1183f648..f42c073f 100644
--- a/MP.SPEC/Components/ProdKit/Manager.razor.cs
+++ b/MP.SPEC/Components/ProdKit/Manager.razor.cs
@@ -129,6 +129,7 @@ namespace MP.SPEC.Components.ProdKit
private List
listPOdlCheck = new List();
private List listTSM = new List();
private List listWSM = new List();
+ private List listPOdl2Kit = new List();
private string padCodXdl = "00000";
private string userName = "";
private string userNameFull = "";
@@ -187,6 +188,7 @@ namespace MP.SPEC.Components.ProdKit
{
listPOdlCheck = new List();
listPOdlAct = await MDService.POdlListGetFiltAsync(ActFilt.HasOdl, ActFilt.CodFase, ActFilt.IdxMacchina, ActFilt.CodReparto, ActFilt.DtStart, ActFilt.DtEnd);
+ listPOdl2Kit = await MDService.POdlToKitListGetFiltAsync(ActFilt.HasOdl, ActFilt.CodFase, ActFilt.IdxMacchina, ActFilt.CodReparto, ActFilt.DtStart, ActFilt.DtEnd);
listWSM = await MDService.WipKitFiltAsync(keyFilt);
listTSM = await MDService.TksScoreAsync(keyFilt, 1000, true);
listIKP = await MDService.IstKitFiltAsync("", "");
@@ -199,7 +201,7 @@ namespace MP.SPEC.Components.ProdKit
// continuo con PODL
if (!string.IsNullOrEmpty(codArtKit))
{
- listPOdlCheck = MDService.ListPODL_ByCodArt(codArtKit, true);
+ listPOdlCheck = await MDService.ListPODL_ByCodArtAsync(codArtKit, true);
}
isLoading = false;
}
diff --git a/MP.SPEC/Data/MpDataService.cs b/MP.SPEC/Data/MpDataService.cs
index e7ba4a1a..90f0a7a3 100644
--- a/MP.SPEC/Data/MpDataService.cs
+++ b/MP.SPEC/Data/MpDataService.cs
@@ -1150,20 +1150,28 @@ namespace MP.SPEC.Data
///
public async Task IstKitDelete(IstanzeKitModel currRecord)
{
- using var activity = ActivitySource.StartActivity("IstKitDelete");
- string source = "DB+REDIS";
+ using var activity = ActivitySource.StartActivity("IstKitDeleteAsync");
+ string source = "DB";
bool fatto = false;
// salvo
- fatto = dbController.IstKitDelete(currRecord);
+ fatto = await dbController.IstKitDeleteAsync(currRecord);
// svuoto cache
- RedisValue pattern = $"{Utils.redisKitInst}:*";
- await ExecFlushRedisPatternAsync(pattern);
+ await FlushKitCache();
activity?.SetTag("data.source", source);
activity?.Stop();
- LogTrace($"IstKitDelete | Read from {source}: {activity?.Duration.TotalMilliseconds}ms");
+ LogTrace($"IstKitDeleteAsync | Read from {source}: {activity?.Duration.TotalMilliseconds}ms");
return fatto;
}
+ private async Task FlushKitCache()
+ {
+#if false
+ RedisValue pattern = $"{Utils.redisKitInst}:*";
+ await ExecFlushRedisPatternAsync(pattern);
+#endif
+ await FlushCacheByTagsAsync(new List() { Utils.redisPOdlList, Utils.redisKitInst, Utils.redisKitWip, Utils.redisKitScore, Utils.redisPOdlByCodArt });
+ }
+
///
/// Elenco Istanze KIT da ricerca
///
@@ -1195,7 +1203,7 @@ namespace MP.SPEC.Data
// salvo
fatto = await dbController.IstKitInsertByWKSAsync(CodArtParent, KeyFilt);
// svuoto cache
- await FlushCacheByTagAsync(Utils.redisPOdlList);
+ await FlushKitCache();
activity?.SetTag("data.source", source);
activity?.Stop();
LogTrace($"IstKitInsertByWKSAsync | {source} | {activity?.Duration.TotalMilliseconds}ms");
@@ -1208,17 +1216,16 @@ namespace MP.SPEC.Data
///
public async Task IstKitUpsert(IstanzeKitModel currRecord)
{
- using var activity = ActivitySource.StartActivity("IstKitUpsert");
- string source = "DB+REDIS";
+ using var activity = ActivitySource.StartActivity("IstKitUpsertAsync");
+ string source = "DB";
bool fatto = false;
// salvo
- fatto = dbController.IstKitUpsert(currRecord);
+ fatto = await dbController.IstKitUpsertAsync(currRecord);
// svuoto cache
- RedisValue pattern = $"{Utils.redisKitInst}:*";
- await ExecFlushRedisPatternAsync(pattern);
+ await FlushKitCache();
activity?.SetTag("data.source", source);
activity?.Stop();
- LogTrace($"IstKitUpsert | {source} | {activity?.Duration.TotalMilliseconds}ms");
+ LogTrace($"IstKitUpsertAsync | {source} | {activity?.Duration.TotalMilliseconds}ms");
return fatto;
}
@@ -1245,15 +1252,24 @@ namespace MP.SPEC.Data
///
/// True = aperti (=senza ODL)
///
- public List ListPODL_ByCodArt(string CodArticolo, bool OnlyAvail)
+ public async Task> ListPODL_ByCodArtAsync(string CodArticolo, bool OnlyAvail)
{
+ string avType = OnlyAvail ? "Avail" : "ALL";
+ string currKey = $"{Utils.redisPOdlByCodArt}:{CodArticolo}:{avType}";
+ return await GetOrFetchAsync(
+ operationName: "ListPODL_ByCodArtAsync",
+ cacheKey: currKey,
+ expiration: getRandTOut(redisLongTimeCache),
+ fetchFunc: async () => await dbController.ListPODL_ByCodArtAsync(CodArticolo, OnlyAvail) ?? new(),
+ tagList: [Utils.redisPOdlByCodArt]
+ );
+
+#if false
List result = new List();
if (!string.IsNullOrEmpty(CodArticolo))
{
using var activity = ActivitySource.StartActivity("ListPODL_ByCodArt");
string source = "DB";
- string avType = OnlyAvail ? "Avail" : "ALL";
- string currKey = $"{Utils.redisPOdlByCodArt}:{CodArticolo}:{avType}";
// cerco in redis dato valore sel idxMaccSel...
RedisValue rawData = redisDb.StringGet(currKey);
if (rawData.HasValue && rawData.Length() > 2)
@@ -1285,7 +1301,8 @@ namespace MP.SPEC.Data
{
Log.Debug("Errore CodArt vuoto");
}
- return result;
+ return result;
+#endif
}
///
@@ -1757,19 +1774,22 @@ namespace MP.SPEC.Data
/// Effettua il task di eliminazione PODL KIT + istanze + riattivazione PODL originali disattivate tramite stored
///
/// IdxPODL parent
- public bool PodlIstKitDelete(int IdxPODL)
+ public async Task PodlIstKitDeleteAsync(int IdxPODL)
{
- using var activity = ActivitySource.StartActivity("PodlIstKitDelete");
+ using var activity = ActivitySource.StartActivity("PodlIstKitDeleteAsync");
bool fatto = false;
// salvo
- fatto = dbController.PodlIstKitDelete(IdxPODL);
+ fatto = await dbController.PodlIstKitDeleteAsync(IdxPODL);
// svuoto cache
+ await FlushCacheByTagsAsync(new List() { Utils.redisPOdlList });
+#if false
string pattern = $"{Utils.redisKit}:*";
if (!string.IsNullOrEmpty(pattern))
{
ExecFlushRedisPattern(pattern);
- }
- activity?.SetTag("data.source", "DB+REDIS");
+ }
+#endif
+ activity?.SetTag("data.source", "DB");
return fatto;
}
@@ -1778,8 +1798,18 @@ namespace MP.SPEC.Data
///
/// IDX PODL parent
///
- public List POdlListByKitParent(int IdxPodlParent)
+ public async Task> POdlListByKitParentAsync(int IdxPodlParent)
{
+ string currKey = $"{Utils.redisPOdlList}_kit:ByParent:{IdxPodlParent}";
+ return await GetOrFetchAsync(
+ operationName: "POdlListByKitParentAsync",
+ cacheKey: currKey,
+ expiration: getRandTOut(redisShortTimeCache),
+ fetchFunc: async () => await dbController.ListPODL_ByKitParentAsync(IdxPodlParent) ?? new(),
+ tagList: [Utils.redisPOdlList]
+ );
+
+#if false
using var activity = ActivitySource.StartActivity("POdlListByKitParent");
List? result = new List();
string source = "DB";
@@ -1793,7 +1823,7 @@ namespace MP.SPEC.Data
}
else
{
- result = dbController.ListPODL_ByKitParent(IdxPodlParent);
+ result = await dbController.ListPODL_ByKitParentAsync(IdxPodlParent);
// serializzo e salvo...
rawData = JsonConvert.SerializeObject(result);
redisDb.StringSet(currKey, rawData, TimeSpan.FromSeconds(redisShortTimeCache));
@@ -1806,7 +1836,8 @@ namespace MP.SPEC.Data
activity?.SetTag("result.count", result.Count);
activity?.Stop();
LogTrace($"POdlListByKitParent | Read from {source}: {activity?.Duration.TotalMilliseconds}ms");
- return result;
+ return result;
+#endif
}
///
diff --git a/MP.SPEC/Pages/Podl2Kit.razor.cs b/MP.SPEC/Pages/Podl2Kit.razor.cs
index ab58f170..47361bd6 100644
--- a/MP.SPEC/Pages/Podl2Kit.razor.cs
+++ b/MP.SPEC/Pages/Podl2Kit.razor.cs
@@ -294,7 +294,7 @@ namespace MP.SPEC.Pages
get => doAddNew ? (isComposing ? "Completare o Resettare" : "Chiudi Composizione KIT") : "Composizione Nuovo KIT";
}
- private SelectXdlParams currFilter { get; set; } = new SelectXdlParams();
+ private SelectXdlParams currFilter { get; set; } = new SelectXdlParams() { NumRec = 5 };
private int currPage
{
diff --git a/Refactor_Plan.md b/Refactor_Plan.md
index ed85dfe8..8120444a 100644
--- a/Refactor_Plan.md
+++ b/Refactor_Plan.md
@@ -19,7 +19,7 @@ Migrare la logica di caching manuale (Redis + DB) verso l'utilizzo di `IFusionCa
### Fase 2: Refactoring Metodi di Lettura (Cache-aside) (In corso)
-#### ✅ Metodi Migrati (Usano già `GetOrFetchAsync` o `FusionCache.GetOrSet`)
+#### ✅ Metodi Migrati (Usano già `GetOrFetchAsync`, `FusionCache.GetOrSet` o `FlushCacheByTagAsync`)
- `AnagEventiGeneralAsync`
- `AnagStatiCommAsync`
- `AnagTipoArtLvAsync`
@@ -46,7 +46,7 @@ Migrare la logica di caching manuale (Redis + DB) verso l'utilizzo di `IFusionCa
- `OdlListGetFiltAsync`
- `OperatoriGetFiltAsync`
- `ParametriGetFiltAsync`
-- `PODL_getDictOdlPodlAsync` (Migrato con gestione manuale L1/L2)
+- `PODL_getDictOdlPodlAsync` (Gestione manuale L1/L2 con FusionCache)
- `POdlGetByOdlAsync`
- `POdlToKitListGetFiltAsync`
- `StatoMacchinaAsync`
@@ -59,11 +59,16 @@ Migrare la logica di caching manuale (Redis + DB) verso l'utilizzo di `IFusionCa
- `TemplateKitUpsertAsync` (Migrato con tag invalidazione)
- `WipKitDeleteAsync` (Migrato con tag invalidazione)
- `WipKitUpsertAsync` (Migrato con tag invalidazione)
+- `AnagGruppiDeleteAsync` (Migrato con tag invalidazione)
+- `AnagGruppiUpsertAsync` (Migrato con tag invalidazione)
+- `Grp2MaccDeleteAsync` (Migrato con tag invalidazione)
+- `Grp2MaccInsertAsync` (Migrato con tag invalidazione)
+- `Grp2OperDeleteAsync` (Migrato con tag invalidazione)
+- `Grp2OperInsertAsync` (Migrato con tag invalidazione)
#### 🛠️ Metodi da Migrare (Usano ancora Redis/DB manuale)
- [ ] Migrazione di `ActionGetReq` (linea 110: usa `redisDb.StringGetAsync`).
- [ ] Migrazione di `ActionSetReq` (linea 136: usa `BroadastMsgPipe.saveAndSendMessage`).
-- [ ] Migrazione di `AnagGruppiDelete`/`Upsert` (linea 189/208: usa `ExecFlushRedisPattern`).
- [ ] Migrazione di `ArticoliDeleteRecord`/`UpdateRecord` (linea 296/372: usa `resetCacheArticoli`).
- [ ] Migrazione di `DbDedupStats` (linea 516: usa `redisDb.StringGet`).
- [ ] Migrazione di `DossiersDeleteRecord` (linea 554: usa `ExecFlushRedisPatternAsync`).
@@ -88,3 +93,4 @@ Migrare la logica di caching manuale (Redis + DB) verso l'utilizzo di `IFusionCa
+