From 44c19a2c5fc27f0aebf65489887770e8ddc6065a Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Wed, 27 May 2026 19:45:29 +0200 Subject: [PATCH] Update metodi async con FusionCache --- MP.Core/Utils.cs | 2 + MP.Data/Controllers/MpSpecController.cs | 16 ++-- MP.Data/Services/TabDataService.cs | 2 +- MP.SPEC/Data/MpDataService.cs | 111 +++++++++++++----------- 4 files changed, 70 insertions(+), 61 deletions(-) diff --git a/MP.Core/Utils.cs b/MP.Core/Utils.cs index df5f8ec3..81d30f39 100644 --- a/MP.Core/Utils.cs +++ b/MP.Core/Utils.cs @@ -13,6 +13,8 @@ namespace MP.Core public const string redisAnagGruppi = redisBaseAddr + "Cache:AnagGruppi"; public const string redisAnagStati = redisBaseAddr + "Cache:AnagStati"; + public const string redisLinkMenu = redisBaseAddr + "Cache:LinkMenu"; + public const string redisArtByDossier = redisBaseAddr + "Cache:ArtByDossier"; public const string redisArtList = redisBaseAddr + "Cache:ArtList"; diff --git a/MP.Data/Controllers/MpSpecController.cs b/MP.Data/Controllers/MpSpecController.cs index c1d5e02d..e040f492 100644 --- a/MP.Data/Controllers/MpSpecController.cs +++ b/MP.Data/Controllers/MpSpecController.cs @@ -2531,17 +2531,15 @@ namespace MP.Data.Controllers /// /// /// - public List TemplateKitFilt(string KitCode, string codChild) + public async Task> TemplateKitFiltAsync(string KitCode, string codChild) { List dbResult = new List(); - using (var dbCtx = new MoonProContext(options)) - { - dbResult = dbCtx - .DbSetTempKit - .Where(x => (string.IsNullOrEmpty(KitCode) && string.IsNullOrEmpty(codChild)) || (x.CodArtParent.Contains(KitCode) && !string.IsNullOrEmpty(KitCode)) || (x.CodArtChild.Contains(codChild) && !string.IsNullOrEmpty(codChild))) - .AsNoTracking() - .ToList(); - } + using var dbCtx = new MoonProContext(options); + dbResult = await dbCtx + .DbSetTempKit + .Where(x => (string.IsNullOrEmpty(KitCode) && string.IsNullOrEmpty(codChild)) || (x.CodArtParent.Contains(KitCode) && !string.IsNullOrEmpty(KitCode)) || (x.CodArtChild.Contains(codChild) && !string.IsNullOrEmpty(codChild))) + .AsNoTracking() + .ToListAsync(); return dbResult; } diff --git a/MP.Data/Services/TabDataService.cs b/MP.Data/Services/TabDataService.cs index 0f9f4397..51ad1231 100644 --- a/MP.Data/Services/TabDataService.cs +++ b/MP.Data/Services/TabDataService.cs @@ -3498,7 +3498,7 @@ namespace MP.Data.Services result = new List(); } sw.Stop(); - Log.Debug($"TemplateKitFilt | {source} | {sw.Elapsed.TotalMilliseconds}ms"); + Log.Debug($"TemplateKitFiltAsync | {source} | {sw.Elapsed.TotalMilliseconds}ms"); return result; } diff --git a/MP.SPEC/Data/MpDataService.cs b/MP.SPEC/Data/MpDataService.cs index 13acb697..8c23d654 100644 --- a/MP.SPEC/Data/MpDataService.cs +++ b/MP.SPEC/Data/MpDataService.cs @@ -290,6 +290,7 @@ namespace MP.SPEC.Data ); } +#if false public async Task> AnagTipoArtLvAsync() { using var activity = ActivitySource.StartActivity("AnagTipoArtLvAsync"); @@ -318,6 +319,22 @@ namespace MP.SPEC.Data activity?.Stop(); LogTrace($"AnagTipoArtLvAsync Read from {source}: {activity?.Duration.TotalMilliseconds}ms"); return result; + } +#endif + + /// + /// Restituisce elenco tipi articolo livello anagrafica + /// + /// + public async Task> AnagTipoArtLvAsync() + { + return await GetOrFetchAsync( + operationName: "AnagTipoArtLvAsync", + cacheKey: Utils.redisTipoArt, + expiration: TimeSpan.FromMinutes(redisLongTimeCache), + fetchFunc: async () => await dbController.AnagTipoArtLvAsync() ?? new List(), + tagList: [Utils.redisTipoArt] + ); } /// @@ -835,18 +852,18 @@ namespace MP.SPEC.Data } /// - /// Elenco link validi + /// Elenco link validi per il menu /// /// public async Task> ElencoLinkAsync() { - using var activity = ActivitySource.StartActivity("ElencoLinkAsync"); - string source = "DB"; - var linkList = await dbController.ElencoLinkAsync(); - activity?.SetTag("data.source", source); - activity?.Stop(); - LogTrace($"ElencoLinkAsync | Read from {source}: {activity?.Duration.TotalMilliseconds}ms"); - return linkList; + return await GetOrFetchAsync( + operationName: "ElencoLinkAsync", + cacheKey: Utils.redisLinkMenu, + expiration: TimeSpan.FromMinutes(redisLongTimeCache), + fetchFunc: async () => await dbController.ElencoLinkAsync() ?? new List(), + tagList: [Utils.redisLinkMenu] + ); } /// @@ -1797,6 +1814,28 @@ namespace MP.SPEC.Data return result; } + public async Task> MachineWithOdlAsync() + { + string redisKey = Utils.redisOdlCurrByMac; + + return await GetOrFetchAsync( + operationName: "MachineWithOdlAsync", + cacheKey: redisKey, + expiration: TimeSpan.FromSeconds(3), + fetchFunc: async () => + { + var rawData = await dbController.OdlGetCurrentAsync(); + var dbResult = rawData + .Select(x => x.IdxMacchina) + .Distinct() + .ToList(); + + return dbResult ?? new List(); + }, + tagList: [Utils.redisOdlCurrByMac] + ); + } + /// /// Recupero info Machine-IOB x TAB (da info registrate IOB-WIN --> MP-IO) /// @@ -2000,28 +2039,6 @@ namespace MP.SPEC.Data return dbResult; } - public async Task> MachineWithOdlAsync() - { - string redisKey = Utils.redisOdlCurrByMac; - - return await GetOrFetchAsync( - operationName: "MachineWithOdlAsync", - cacheKey: redisKey, - expiration: TimeSpan.FromSeconds(3), - fetchFunc: async () => - { - var rawData = await dbController.OdlGetCurrentAsync(); - var dbResult = rawData - .Select(x => x.IdxMacchina) - .Distinct() - .ToList(); - - return dbResult ?? new List(); - }, - tagList: [Utils.redisOdlCurrByMac] - ); - } - /// /// ODL correnti (tutti) /// @@ -2770,33 +2787,23 @@ namespace MP.SPEC.Data /// /// Elenco Template KIT da ricerca /// - /// - /// + /// Codice articolo padre + /// Codice articolo figlio /// public async Task> TemplateKitFiltAsync(string codParent, string codChild) { using var activity = ActivitySource.StartActivity("TemplateKitFiltAsync"); string source = "DB"; - List? result = new List(); - // cerco in redis... string currKey = $"{Utils.redisKitTempl}:{codParent}:{codChild}"; - RedisValue rawData = await redisDb.StringGetAsync(currKey); - if (rawData.HasValue) - { - result = JsonConvert.DeserializeObject>($"{rawData}"); - source = "REDIS"; - } - else - { - result = dbController.TemplateKitFilt(codParent, codChild); - // serializzo e salvo... - rawData = JsonConvert.SerializeObject(result); - await redisDb.StringSetAsync(currKey, rawData, TimeSpan.FromMinutes(redisLongTimeCache)); - } - if (result == null) - { - result = new List(); - } + + var result = await GetOrFetchAsync( + operationName: "TemplateKitFiltAsync", + cacheKey: currKey, + expiration: TimeSpan.FromMinutes(redisLongTimeCache), + fetchFunc: async () => await dbController.TemplateKitFiltAsync(codParent, codChild) ?? new List(), + tagList: [Utils.redisKitTempl] + ); + activity?.SetTag("data.source", source); activity?.SetTag("result.count", result.Count); activity?.Stop(); @@ -3312,9 +3319,11 @@ namespace MP.SPEC.Data case "DB": LogTrace($"{operationName} | {source} | {activity?.Duration.TotalMilliseconds:F4} ms", reqLevel: NLog.LogLevel.Info); break; + case "REDIS": LogTrace($"{operationName} | {source} | {activity?.Duration.TotalMilliseconds:F4} ms", reqLevel: NLog.LogLevel.Debug); break; + default: LogTrace($"{operationName} | {source} | {activity?.Duration.TotalMilliseconds:F4} ms"); break;