Riscrittura metodo EFCore x avere unica transazione x checkCambiaStato
This commit is contained in:
@@ -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
|
||||
/// <returns></returns>
|
||||
public async Task<List<TransizioneStatiModel>> 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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Processing intera catena eventi verifica cambio stato in singola transazione e con unico DbContext
|
||||
/// </summary>
|
||||
/// <param name="tipoInput"></param>
|
||||
/// <param name="IdxMacchina"></param>
|
||||
/// <param name="InizioStato"></param>
|
||||
/// <param name="IdxTipo"></param>
|
||||
/// <param name="CodArt"></param>
|
||||
/// <param name="Value"></param>
|
||||
/// <param name="MatrOpr"></param>
|
||||
/// <param name="pallet"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> 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<TransizioneStatiModel> listTransit = new List<TransizioneStatiModel>();
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Intera tabella state machine ingressi 2 eventi
|
||||
/// </summary>
|
||||
|
||||
@@ -4307,8 +4307,8 @@ namespace MP.IOC.Data
|
||||
/// <param name="pallet"></param>
|
||||
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<TransizioneStatiModel> listTransit = new List<TransizioneStatiModel>();
|
||||
TransizioneStatiModel? rigaTrans = null;
|
||||
switch (tipoInput)
|
||||
@@ -4355,7 +4355,8 @@ namespace MP.IOC.Data
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Version>8.16.2604.2916</Version>
|
||||
<Version>8.16.2604.2918</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>Modulo MP-IOC </i>
|
||||
<h4>Versione: 8.16.2604.2916</h4>
|
||||
<h4>Versione: 8.16.2604.2918</h4>
|
||||
<br /> Note di rilascio:
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
@@ -1 +1 @@
|
||||
8.16.2604.2916
|
||||
8.16.2604.2918
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>8.16.2604.2916</version>
|
||||
<version>8.16.2604.2918</version>
|
||||
<url>https://nexus.steamware.net/repository/SWS/MP-IOC/stable/LAST/MP.IOC.zip</url>
|
||||
<changelog>https://nexus.steamware.net/repository/SWS/MP-IOC/stable/LAST/ChangeLog.html</changelog>
|
||||
<mandatory>false</mandatory>
|
||||
|
||||
Reference in New Issue
Block a user