Aggiunta metodi FixDayOdl (con/senza conf pezzi)

This commit is contained in:
Samuele Locatelli
2026-04-15 08:23:10 +02:00
parent 732449f516
commit e5178e19fc
8 changed files with 252 additions and 4 deletions
+1
View File
@@ -46,6 +46,7 @@ namespace MP.Core
public const string redisOdlByBatch = redisXdlData + "OdlByBatch";
public const string redisOdlCurrByMac = redisXdlData + "OdlByMac";
public const string redisOdlLastByMac = redisXdlData + "LastOdlByMac";
public const string redisOdlList = redisXdlData + "OdlList";
+100
View File
@@ -572,6 +572,77 @@ namespace MP.Data.Controllers
return dbResult;
}
/// <summary>
/// Generazione automatica ODL
/// </summary>
/// <param name="idxMacchina"></param>
/// <returns></returns>
public async Task<bool> OdlAutoDayGenAsync(string idxMacchina, DateTime dataInizio, DateTime dataFine, string codArticolo)
{
bool answ = false;
using (var dbCtx = new MoonProContext(_configuration))
{
try
{
var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina);
var DataInizio = new SqlParameter("@DataInizio", dataInizio);
var DataFine = new SqlParameter("@DataFine", dataFine);
var CodArticolo = new SqlParameter("@CodArticolo", codArticolo);
var result = dbCtx
.Database
.ExecuteSqlRaw("EXEC stp_ODL_AutoDayGener @IdxMacchina, @DataInizio, @DataFine, @CodArticolo", IdxMacchina, DataInizio, DataFine, CodArticolo);
// indico eseguito!
answ = result > 0;
}
catch (Exception exc)
{
Log.Error($"Eccezione durante stp_ODL_AutoDayGener{Environment.NewLine}{exc}");
}
}
return answ;
}
/// <summary>
/// Generazione automatica ODL completa
/// </summary>
/// <param name="idxMacchina"></param>
/// <returns></returns>
public async Task<bool> OdlAutoDayGenFullAsync(string idxMacchina, DateTime dataInizio, DateTime dataFine, string codArticolo, int? pzPODL, int? pzPallet, string? keyRichiesta, int? tcAssegnato, string? codGruppo, bool flgCreaPODL, bool flgCheckTC)
{
bool answ = false;
using (var dbCtx = new MoonProContext(_configuration))
{
try
{
var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina);
var DataInizio = new SqlParameter("@DataInizio", dataInizio);
var DataFine = new SqlParameter("@DataFine", dataFine);
var CodArticolo = new SqlParameter("@CodArticolo", codArticolo);
var PzPODL = new SqlParameter("@PzPODL", pzPODL);
var PzPallet = new SqlParameter("@PzPallet", pzPallet);
var KeyRichiesta = new SqlParameter("@KeyRichiesta", keyRichiesta);
var TCAssegnato = new SqlParameter("@TCAssegnato", tcAssegnato);
var CodGruppo = new SqlParameter("@CodGruppo", codGruppo);
var FlgCreaPODL = new SqlParameter("@flgCreaPODL", flgCreaPODL);
var FlgCheckTC = new SqlParameter("@flgCheckTC", flgCheckTC);
var result = dbCtx
.Database
.ExecuteSqlRaw("EXEC stp_ODL_AutoDayGenerFull @IdxMacchina, @DataInizio, @DataFine, @CodArticolo, @PzPODL, @PzPallet, @KeyRichiesta, @TCAssegnato, @CodGruppo, @flgCreaPODL, @flgCheckTC", IdxMacchina, DataInizio, DataFine, CodArticolo, PzPODL, PzPallet, KeyRichiesta, TCAssegnato, CodGruppo, FlgCreaPODL, FlgCheckTC);
// indico eseguito!
answ = result > 0;
}
catch (Exception exc)
{
Log.Error($"Eccezione durante stp_ODL_AutoDayGenerFull{Environment.NewLine}{exc}");
}
}
return answ;
}
/// <summary>
/// ODL corrente macchina
/// </summary>
@@ -629,6 +700,35 @@ namespace MP.Data.Controllers
return answ;
}
/// <summary>
/// ODL corrente macchina
/// </summary>
/// <param name="idxMacchina"></param>
/// <returns></returns>
public async Task<ODLExpModel> OdlLastByMaccAsync(string idxMacchina)
{
ODLExpModel answ = new();
using (var dbCtx = new MoonProContext(_configuration))
{
try
{
var pIdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina);
// attenzione: se la stored resituisce una tabella, il primo elemento va recuperato in RAM!!!
var dbRes = (await dbCtx.DbSetODLExp
.FromSqlRaw("EXEC stp_ODL_getLastByMacchina @IdxMacchina", pIdxMacchina)
.AsNoTracking()
.ToListAsync()) // Esegue la query e scarica i risultati in memoria
.FirstOrDefault(); // Prende il primo elemento dalla lista in RAM
answ = dbRes ?? new();
}
catch (Exception exc)
{
Log.Error($"Eccezione durante OdlCurrByMaccAsync{Environment.NewLine}{exc}");
}
}
return answ;
}
/// <summary>
/// Elenco ODL data macchina e periodo
/// </summary>
+87
View File
@@ -74,6 +74,93 @@ namespace MP.IOC.Controllers
}
}
/// <summary>
/// Sistema ODL giornalieri x impianto indicato, andando a generare 1 ODL giornaliero x ogni
/// giornata dall'ultimo ODL aperto alla data corrente
/// es: http://url_site/MP/IO/IOB/fixDailyOdl/SIMUL_03
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("fixDailyOdl/{id}")]
public async Task<IActionResult> FixDailyOdl(string id)
{
if (string.IsNullOrEmpty(id)) return BadRequest("Missing ID");
// Multi: gestione carattere "|" trasformato in "#"
id = id.Replace("|", "#");
string answ = "";
// chiamo metodo redis/db...
try
{
// recupero ultimo ODL macchina...
var lastOdlStarted = await DService.GetLastOdlAsync(id);
if (lastOdlStarted != null && lastOdlStarted.DataInizio.HasValue)
{
// calcolo data ultimo avviato e chiedo dal giorno dopo...
DateTime dtFrom = lastOdlStarted.DataInizio.Value.AddDays(1);
DateTime dtTo = DateTime.Today;
if (dtTo >= dtFrom)
{
string codArt = lastOdlStarted.CodArticolo;
// chiamo la stored x sistemare gli ODL
bool fatto = await DService.OdlAutoDayGenAsync(id, dtFrom, dtTo, codArt);
answ = fatto ? "OK" : "KO";
}
}
return Ok(answ);
}
catch (Exception exc)
{
Log.Error($"Errore in FixDailyOdl{Environment.NewLine}{exc}");
return StatusCode(StatusCodes.Status500InternalServerError, "NO");
}
}
/// <summary>
/// Sistema ODL giornalieri x impianto indicato, andando a generare 1 ODL giornaliero x ogni
/// giornata dall'ultimo ODL aperto alla data corrente + conferma pezzi (es TFT x ODL
/// giornalieri energia)
/// es: http://url_site/MP/IO/IOB/fixDailyOdlConfPzCount/SIMUL_03
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("fixDailyOdlConfPzCount/{id}")]
public async Task<IActionResult> FixDailyOdlConfPzCount(string id)
{
if (string.IsNullOrEmpty(id)) return BadRequest("Missing ID");
// Multi: gestione carattere "|" trasformato in "#"
id = id.Replace("|", "#");
string answ = "";
// chiamo metodo redis/db...
try
{
// recupero ultimo ODL macchina...
var lastOdlStarted = await DService.GetLastOdlAsync(id);
if (lastOdlStarted != null && lastOdlStarted.DataInizio.HasValue)
{
// calcolo data ultimo avviato e chiedo dal giorno dopo...
DateTime dtFrom = lastOdlStarted.DataInizio.Value.AddDays(1);
DateTime dtTo = DateTime.Today;
if (dtTo >= dtFrom)
{
string codArt = lastOdlStarted.CodArticolo;
// chiamo la stored x sistemare gli ODL
bool fatto = await DService.OdlAutoDayGenFullAsync(id, dtFrom, dtTo, codArt, null, null, null, null, null, true, false);
answ = fatto ? "OK" : "KO";
}
}
return Ok(answ);
}
catch (Exception exc)
{
Log.Error($"Errore in FixDailyOdlConfPzCount{Environment.NewLine}{exc}");
return StatusCode(StatusCodes.Status500InternalServerError, "NO");
}
}
/// <summary>
/// Invio record flog direttamente via URL GET
/// GET: IOB/flog/SIMUL_03?flux=PROG&valore=P0001&dtEve=20161223180600000&dtCurr=20161223180600000&cnt=999&disabKA=false
+60
View File
@@ -1038,6 +1038,31 @@ namespace MP.IOC.Data
return answ;
}
/// <summary>
/// Restituisce il valore dell'ultimo ODL
/// </summary>
/// <param name="idxMacchina"></param>
/// <returns></returns>
public async Task<ODLExpModel> GetLastOdlAsync(string idxMacchina)
{
ODLExpModel result = new ODLExpModel();
string currKey = $"{Utils.redisOdlLastByMac}:{idxMacchina}";
// cerco in redis dato valore sel macchina...
RedisValue rawData = redisDb.StringGet(currKey);
if (rawData.HasValue)
{
result = JsonConvert.DeserializeObject<ODLExpModel>($"{rawData}") ?? new();
}
else
{
result = await IocDbController.OdlLastByMaccAsync(idxMacchina);
// serializzo e salvo...
rawData = JsonConvert.SerializeObject(result);
redisDb.StringSet(currKey, rawData, getRandTOut(redisLongTimeCache));
}
return result;
}
/// <summary>
/// Effettua calcolo data-ora di riferimento per il server a partire da
/// </summary>
@@ -1668,6 +1693,41 @@ namespace MP.IOC.Data
return answ;
}
/// <summary>
/// Generazione autoOdl
/// </summary>
/// <param name="idxMacchina"></param>
/// <param name="dataInizio"></param>
/// <param name="dataFine"></param>
/// <param name="codArticolo"></param>
/// <returns></returns>
public async Task<bool> OdlAutoDayGenAsync(string idxMacchina, DateTime dataInizio, DateTime dataFine, string codArticolo)
{
var result = await IocDbController.OdlAutoDayGenAsync(idxMacchina, dataInizio, dataFine, codArticolo);
return result;
}
/// <summary>
/// Generazione autoOdl
/// </summary>
/// <param name="idxMacchina"></param>
/// <param name="dataInizio"></param>
/// <param name="dataFine"></param>
/// <param name="codArticolo"></param>
/// <param name="pzPODL"></param>
/// <param name="pzPallet"></param>
/// <param name="keyRichiesta"></param>
/// <param name="tcAssegnato"></param>
/// <param name="codGruppo"></param>
/// <param name="flgCreaPODL"></param>
/// <param name="flgCheckTC"></param>
/// <returns></returns>
public async Task<bool> OdlAutoDayGenFullAsync(string idxMacchina, DateTime dataInizio, DateTime dataFine, string codArticolo, int? pzPODL, int? pzPallet, string? keyRichiesta, int? tcAssegnato, string? codGruppo, bool flgCreaPODL, bool flgCheckTC)
{
var result = await IocDbController.OdlAutoDayGenFullAsync(idxMacchina, dataInizio, dataFine, codArticolo, pzPODL, pzPallet, keyRichiesta, tcAssegnato, codGruppo, flgCreaPODL, flgCheckTC);
return result;
}
/// <summary>
/// Elenco ODL dato batch selezionato
/// </summary>
+1 -1
View File
@@ -4,7 +4,7 @@
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<Version>6.16.2604.1507</Version>
<Version>6.16.2604.1508</Version>
</PropertyGroup>
<ItemGroup>
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>Modulo MP-IOC </i>
<h4>Versione: 6.16.2604.1507</h4>
<h4>Versione: 6.16.2604.1508</h4>
<br /> Note di rilascio:
<ul>
<li>
+1 -1
View File
@@ -1 +1 @@
6.16.2604.1507
6.16.2604.1508
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>6.16.2604.1507</version>
<version>6.16.2604.1508</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>