From 9e67df84a1aa121e4c95a2a31fc3ab153170e447 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Wed, 29 Apr 2026 18:37:18 +0200 Subject: [PATCH] Riscrittura metodo EFCore x avere unica transazione x checkCambiaStato --- MP.Data/Controllers/MpIocController.cs | 109 ++++++++++++++++++++++++- MP.IOC/Data/MpDataService.cs | 7 +- MP.IOC/MP.IOC.csproj | 2 +- MP.IOC/Resources/ChangeLog.html | 2 +- MP.IOC/Resources/VersNum.txt | 2 +- MP.IOC/Resources/manifest.xml | 2 +- 6 files changed, 116 insertions(+), 8 deletions(-) diff --git a/MP.Data/Controllers/MpIocController.cs b/MP.Data/Controllers/MpIocController.cs index 76753997..2565d3cc 100644 --- a/MP.Data/Controllers/MpIocController.cs +++ b/MP.Data/Controllers/MpIocController.cs @@ -9,6 +9,7 @@ using System.Collections.Generic; using System.Data; using System.Linq; using System.Threading.Tasks; +using static MP.Core.Objects.Enums; namespace MP.Data.Controllers { @@ -1243,7 +1244,7 @@ namespace MP.Data.Controllers /// public async Task> SMES_getUserForcedAsync(string idxMacchina, int idxTipo) { - using var dbCtx = new MoonProContext(_configuration); + await using var dbCtx = new MoonProContext(_configuration); var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var IdxTipo = new SqlParameter("@IdxTipo", idxTipo); @@ -1256,6 +1257,112 @@ namespace MP.Data.Controllers return dbResult; } + /// + /// Processing intera catena eventi verifica cambio stato in singola transazione e con unico DbContext + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public async Task CheckCambiaStatoBatchAsync(tipoInputEvento tipoInput, string IdxMacchina, DateTime InizioStato, int IdxTipo, string CodArt, string Value, int MatrOpr, string pallet) + { + // eseguo in transazione... + await using var dbCtx = new MoonProContext(_configuration); + await using var tx = await dbCtx.Database.BeginTransactionAsync(); + + try + { + + List listTransit = new List(); + TransizioneStatiModel? rigaTrans = null; + var pIdxMacchina = new SqlParameter("@IdxMacchina", IdxMacchina); + var pIdxTipo = new SqlParameter("@IdxTipo", IdxTipo); + var pInizioStato = new SqlParameter("@InizioStato", InizioStato); + var pIdxStato = new SqlParameter("@IdxStato", ""); + var pCodArticolo = new SqlParameter("@codArticolo", CodArt); + var pValue = new SqlParameter("@Value", Value); + var pMatrOpr = new SqlParameter("@MatrOpr", MatrOpr); + var pPallet = new SqlParameter("@pallet", pallet); + string opType = "ND"; + switch (tipoInput) + { + case tipoInputEvento.barcode: + opType = "BARCODE"; + // effettuo cambio stato INDIPENDENTEMENTE da stato precedente + rigaTrans = (await dbCtx + .DbSetSMES + .FromSqlRaw("exec dbo.stp_TS_getUserForcedTrans @IdxMacchina, @IdxTipo", pIdxMacchina, pIdxTipo) + .AsNoTracking() + .ToListAsync() + ).FirstOrDefault(); + break; + + case tipoInputEvento.hw: + opType = "HW"; + // verifico se ci sia necessità di cambio stato + rigaTrans = (await dbCtx + .DbSetSMES + .FromSqlRaw("exec dbo.stp_TS_getByIdxMacchIdxTipoEv @IdxMacchina, @IdxTipo", pIdxMacchina, pIdxTipo) + .AsNoTracking() + .ToListAsync() + ).FirstOrDefault(); + break; + + default: + break; + } + + if (rigaTrans != null) + { + // solo se cambia stato... + if (rigaTrans.IdxStato != rigaTrans.next_IdxStato) + { + pIdxStato = new SqlParameter("@IdxStato", rigaTrans.next_IdxStato); + var result = await dbCtx + .Database + .ExecuteSqlRawAsync("EXEC dbo.stp_DDB_InsStatoBatch @IdxMacchina, @InizioStato, @IdxStato, @codArticolo, @Value, @MatrOpr, @pallet", pIdxMacchina, pInizioStato, pIdxStato, pCodArticolo, pValue, pMatrOpr, pPallet); + + // aggiorno produzione macchina (serve?!?) + var pDataOra = new SqlParameter("@DataOra ", DateTime.Now); + var dbResProdMacc = (await dbCtx + .DbSetStatoProd + .FromSqlRaw("EXEC stp_StatoProd_getByMacchina @IdxMacchina, @DataOra ", pIdxMacchina, pDataOra) + .AsNoTracking() + .ToListAsync()) + .FirstOrDefault(); + + + // aggiorno MSE + var pMaxAgeSec = new SqlParameter("@maxAgeSec ", 0); + var mseResult = await dbCtx + .Database + .ExecuteSqlRawAsync("EXEC stp_MSE_recalc @maxAgeSec, @idxMacchina ", pMaxAgeSec, pIdxMacchina); + } + } + else + { + Log.Debug($"Non trovata riga per: {opType} | IdxMacchina: {IdxMacchina} | IdxTipo: {IdxTipo} | CodArt: {CodArt} | Value: {Value} | MatrOpr: {MatrOpr} | pallet: {pallet}"); + } + + // EF Core 8 raggruppa automaticamente INSERT/UPDATE in un batch + var rowsAffected = await dbCtx.SaveChangesAsync(); + await tx.CommitAsync(); + + return rowsAffected > 0; + } + catch + { + await tx.RollbackAsync(); + throw; + } + } + + /// /// Intera tabella state machine ingressi 2 eventi /// diff --git a/MP.IOC/Data/MpDataService.cs b/MP.IOC/Data/MpDataService.cs index d41e1cff..f5ddf73b 100644 --- a/MP.IOC/Data/MpDataService.cs +++ b/MP.IOC/Data/MpDataService.cs @@ -4307,8 +4307,8 @@ namespace MP.IOC.Data /// private async Task CheckCambiaStatoBatchAsync(tipoInputEvento tipoInput, string IdxMacchina, DateTime InizioStato, int IdxTipo, string CodArt, string Value, int MatrOpr, string pallet) { - //DS_applicazione.TransizioneStatiDataTable tabTransStati; - //DS_applicazione.TransizioneStatiRow rigaTransStati; + await IocDbController.CheckCambiaStatoBatchAsync(tipoInput, IdxMacchina, InizioStato, IdxTipo, CodArt, Value, MatrOpr, pallet); +#if false List listTransit = new List(); TransizioneStatiModel? rigaTrans = null; switch (tipoInput) @@ -4355,7 +4355,8 @@ namespace MP.IOC.Data default: break; - } + } +#endif } /// diff --git a/MP.IOC/MP.IOC.csproj b/MP.IOC/MP.IOC.csproj index 65f9b8a0..8fa63d98 100644 --- a/MP.IOC/MP.IOC.csproj +++ b/MP.IOC/MP.IOC.csproj @@ -4,7 +4,7 @@ net8.0 enable enable - 8.16.2604.2916 + 8.16.2604.2918 diff --git a/MP.IOC/Resources/ChangeLog.html b/MP.IOC/Resources/ChangeLog.html index 6eadd1d4..393f5aee 100644 --- a/MP.IOC/Resources/ChangeLog.html +++ b/MP.IOC/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MP-IOC -

Versione: 8.16.2604.2916

+

Versione: 8.16.2604.2918


Note di rilascio:
  • diff --git a/MP.IOC/Resources/VersNum.txt b/MP.IOC/Resources/VersNum.txt index c990cc8a..5b83debe 100644 --- a/MP.IOC/Resources/VersNum.txt +++ b/MP.IOC/Resources/VersNum.txt @@ -1 +1 @@ -8.16.2604.2916 +8.16.2604.2918 diff --git a/MP.IOC/Resources/manifest.xml b/MP.IOC/Resources/manifest.xml index 63bd74a3..67e00d00 100644 --- a/MP.IOC/Resources/manifest.xml +++ b/MP.IOC/Resources/manifest.xml @@ -1,6 +1,6 @@ - 8.16.2604.2916 + 8.16.2604.2918 https://nexus.steamware.net/repository/SWS/MP-IOC/stable/LAST/MP.IOC.zip https://nexus.steamware.net/repository/SWS/MP-IOC/stable/LAST/ChangeLog.html false