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