diff --git a/MP.Data/Controllers/MpIocController.cs b/MP.Data/Controllers/MpIocController.cs index 2f0f7866..4886d6c8 100644 --- a/MP.Data/Controllers/MpIocController.cs +++ b/MP.Data/Controllers/MpIocController.cs @@ -1060,24 +1060,40 @@ namespace MP.Data.Controllers { bool fatto = false; using var dbCtx = new MoonProContext(_configuration); - using var transaction = await dbCtx.Database.BeginTransactionAsync(); + + // 1. Transazione minima: SOLO INSERT + COMMIT + await using var tx = await dbCtx.Database.BeginTransactionAsync(); try { dbCtx.DbSetRemRebLog.Add(newRec); fatto = await dbCtx.SaveChangesAsync() > 0; - - - var param = new SqlParameter("@num2keep", num2keep); - await dbCtx.Database.ExecuteSqlRawAsync("EXEC dbo.stp_RRL_KeepLatest @num2keep", param); - - await transaction.CommitAsync(); - return true; + await tx.CommitAsync(); // 🔑 Commit prima della pulizia } catch { - await transaction.RollbackAsync(); + await tx.RollbackAsync(); throw; } + + // 2. Cleanup "smart" fuori transazione + if (fatto) + { + try + { + var param = new SqlParameter("@num2keep", num2keep); + await dbCtx.Database.ExecuteSqlRawAsync( + "EXEC dbo.stp_RRL_KeepLatest @num2keep, @multiplier", param, + new SqlParameter("@multiplier", 1.3f)); // Fisso o leggo da config + + } + catch (Exception ex) + { + // Log dell'errore, ma NON rilanciare: il record è già salvo + Log.Error(ex, "Failed to execute RRL cleanup for {Machine}", newRec.IdxMacchina); + } + } + + return fatto; } /// @@ -1119,10 +1135,11 @@ namespace MP.Data.Controllers { using var dbCtx = new MoonProContext(_configuration); - var Num2keep = new SqlParameter("@num2keep", num2keep); - var dbResult = await dbCtx - .Database - .ExecuteSqlRawAsync("exec dbo.stp_RRL_KeepLatest @num2keep", Num2keep); + var pNum2Keep = new SqlParameter("@num2keep", num2keep); + // La SP gestisce già la logica di soglia (1.5x), ma la specifico x sicurezza + var pThresh = new SqlParameter("@threshMult", 1.5); + var dbResult = await dbCtx.Database.ExecuteSqlRawAsync( + "EXEC dbo.stp_RRL_KeepLatest @num2keep, @threshMult", pNum2Keep, pThresh); return dbResult != 0; } diff --git a/MP.IOC/Controllers/IOBController.cs b/MP.IOC/Controllers/IOBController.cs index 2aed29e0..106c33ff 100644 --- a/MP.IOC/Controllers/IOBController.cs +++ b/MP.IOC/Controllers/IOBController.cs @@ -1156,7 +1156,6 @@ namespace MP.IOC.Controllers // recupero IP del client remoto, se vuoto IOC string agent = Request.Headers["User-Agent"].ToString() ?? "IOC"; agent = string.IsNullOrWhiteSpace(agent) ? "IOC" : agent; - //var ipv4 = HttpContext.Connection.RemoteIpAddress?.ToString(); var ipv4 = HttpContext.Connection.RemoteIpAddress?.MapToIPv4().ToString(); // chiamo registrazione reboot diff --git a/MP.IOC/MP.IOC.csproj b/MP.IOC/MP.IOC.csproj index eb7af934..0cb18f13 100644 --- a/MP.IOC/MP.IOC.csproj +++ b/MP.IOC/MP.IOC.csproj @@ -4,7 +4,7 @@ net8.0 enable enable - 8.16.2604.2718 + 8.16.2604.2808 diff --git a/MP.IOC/Resources/ChangeLog.html b/MP.IOC/Resources/ChangeLog.html index 7f2e9aa2..d436cede 100644 --- a/MP.IOC/Resources/ChangeLog.html +++ b/MP.IOC/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MP-IOC -

Versione: 8.16.2604.2718

+

Versione: 8.16.2604.2808


Note di rilascio: