Fix metodo GetArtNum
This commit is contained in:
@@ -20,6 +20,8 @@ namespace MP.Core
|
||||
|
||||
public const string redisConfKey = redisBaseAddr + "Cache:Config";
|
||||
|
||||
public const string redisDecNumArtKey = redisBaseAddr + "Cache:DecNumArt";
|
||||
|
||||
public const string redisDossByMac = redisBaseAddr + "Cache:DossByMac";
|
||||
|
||||
public const string redisEventList = redisBaseAddr + "Cache:EventList";
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.DbModels.Anag;
|
||||
using NLog;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -55,6 +56,28 @@ namespace MP.Data.Controllers
|
||||
return fatto;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Elenco tabella decodifica articoli / codice decimale
|
||||
/// </summary>
|
||||
/// <param name="codArt">Vuoto = tutti / Singolo CodArt</param>
|
||||
/// <returns></returns>
|
||||
public async Task<List<DecNumArticoliModel>> DecNumArtGetFiltAsync(string codArt = "")
|
||||
{
|
||||
List<DecNumArticoliModel> dbResult = new List<DecNumArticoliModel>();
|
||||
using (var dbCtx = new MoonProContext(_configuration))
|
||||
{
|
||||
var query = dbCtx.DbSetDecNumArt
|
||||
.AsNoTracking()
|
||||
.AsQueryable();
|
||||
|
||||
if (!string.IsNullOrEmpty(codArt))
|
||||
query = query.Where(x => x.CodArticolo == codArt);
|
||||
|
||||
dbResult = await query.ToListAsync();
|
||||
}
|
||||
return dbResult;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Elenco da tabella Config
|
||||
/// </summary>
|
||||
@@ -65,10 +88,10 @@ namespace MP.Data.Controllers
|
||||
using (var dbCtx = new MoonProContext(_configuration))
|
||||
{
|
||||
dbResult = dbCtx
|
||||
.DbSetConfig
|
||||
.AsNoTracking()
|
||||
.OrderBy(x => x.Chiave)
|
||||
.ToList();
|
||||
.DbSetConfig
|
||||
.AsNoTracking()
|
||||
.OrderBy(x => x.Chiave)
|
||||
.ToList();
|
||||
}
|
||||
return dbResult;
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ namespace MP.IOC.Controllers
|
||||
[HttpGet("addOptPar/{id}")]
|
||||
public async Task<IActionResult> AddOptPar(string id, string pName, string pValue)
|
||||
{
|
||||
DService.ScriviKeepAlive(id, DateTime.Now);
|
||||
await DService.ScriviKeepAliveAsync(id, DateTime.Now);
|
||||
try
|
||||
{
|
||||
DService.AddOptPar4Machine(id, pName, pValue);
|
||||
@@ -440,7 +440,7 @@ namespace MP.IOC.Controllers
|
||||
id = id.Replace("|", "#");
|
||||
string answ = "";
|
||||
// scrivo keep alive!!! (se necessario, altrimenti è in cache...)
|
||||
DService.ScriviKeepAlive(id, DateTime.Now);
|
||||
await DService.ScriviKeepAliveAsync(id, DateTime.Now);
|
||||
try
|
||||
{
|
||||
// leggo da REDIS eventuale elenco task x macchina...
|
||||
@@ -452,6 +452,109 @@ namespace MP.IOC.Controllers
|
||||
return Ok(answ);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Recupera ArtNum dato CodXdl (per impianti che accettano solo INT in scrittura):
|
||||
/// GET: IOB/getArtNum/SIMUL_03?CodXdl=ABC123
|
||||
/// </summary>
|
||||
/// <param name="id">IdxMacchina (NON considerato)</param>
|
||||
/// <param name="CodArt">CodXdl richiesto, se vuoto restituisce TUTTI i valori in tabella di decodifica</param>
|
||||
/// <returns>Json contenente le righe delle codifiche attive Articolo/Numero</returns>
|
||||
[HttpGet("getArtNum/{id}")]
|
||||
public async Task<IActionResult> GetArtNum(string id, string CodArt = "")
|
||||
{
|
||||
// in realtà ID macchina non conterebbe...
|
||||
if (string.IsNullOrEmpty(id)) return BadRequest("Missing ID");
|
||||
// Multi: gestione carattere "|" trasformato in "#"
|
||||
id = id.Replace("|", "#");
|
||||
string answ = "";
|
||||
try
|
||||
{
|
||||
await DService.ScriviKeepAliveAsync(id, DateTime.Now);
|
||||
// leggo da REDIS eventuale elenco task x macchina...
|
||||
Dictionary<string, int> valori = await DService.GetArtNumAsync(CodArt);
|
||||
answ = JsonConvert.SerializeObject(valori);
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
Log.Error($"Errore in GetArtNum{Environment.NewLine}{exc}");
|
||||
return StatusCode(StatusCodes.Status500InternalServerError, "NO");
|
||||
}
|
||||
return Ok(answ);
|
||||
}
|
||||
|
||||
#if false
|
||||
/// <summary>
|
||||
/// Restituisce il valore dello stato di IDLE della macchina, quindi SOLO SE NON é in lavoro
|
||||
/// e già convertito in minuti...
|
||||
/// GET: IOB/getIdlePeriod/SIMUL_01
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("getIdlePeriod/{id}")]
|
||||
public int GetIdlePeriod(string id)
|
||||
{
|
||||
// attenzione! poiché nell'URL il carattere "#" viene filtrato ci aspettiamo il
|
||||
// carattere "|" che poi trasformiamo ora in "#"
|
||||
id = id.Replace("|", "#");
|
||||
int answ = 0;
|
||||
DataLayer DataLayerObj = new DataLayer();
|
||||
DS_applicazione.StatoMacchineDataTable currData = null;
|
||||
// chiamo metodo redis/db...
|
||||
try
|
||||
{
|
||||
currData = DataLayerObj.currSMTab(id);
|
||||
if (currData.Count > 0)
|
||||
{
|
||||
// recupero da redis elenco stati
|
||||
DS_applicazione.AnagraficaStatiDataTable anagStati = DataLayerObj.AnagraficaStati();
|
||||
DS_applicazione.AnagraficaStatiRow currStato = anagStati.FindByIdxStato(currData[0].IdxStato);
|
||||
// calcolo SE sia idle... OVVERO SEMAFORO NON VERDE!!!
|
||||
if (currStato.Semaforo != "sVe")
|
||||
{
|
||||
// calcolo durata...
|
||||
answ = (int)DateTime.Now.Subtract(currData[0].InizioStato).TotalMinutes;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
logger.lg.scriviLog($"Eccezione in recupero getIdlePeriod{Environment.NewLine}{exc}", tipoLog.EXCEPTION);
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recupera codice numerico ODL/PODL dato CodXdl, in pratica la parte finale SENZA ODL/PODL
|
||||
/// Funzione per impianti che accettano solo INT in scrittura:
|
||||
///
|
||||
/// GET: IOB/getXdlNum/SIMUL_03?CodXdl=ODL00000123
|
||||
/// </summary>
|
||||
/// <param name="id">IdxMacchina (NON considerato)</param>
|
||||
/// <param name="CodXdl">
|
||||
/// CodXdl richiesto, se vuoto restituisce TUTTI i valori in tabella di decodifica
|
||||
/// </param>
|
||||
/// <returns>SINGOLO VALORE calcolato on the fly</returns>
|
||||
[HttpGet("getXdlNum/{id}")]
|
||||
public string GetXdlNum(string id, string CodXdl = "")
|
||||
{
|
||||
// in realtà ID macchina non conta e lo ignoriamo...
|
||||
string answ = "";
|
||||
// scrivo keep alive!!! (se necessario, altrimenti è in cache...)
|
||||
MapoDb.MapoDb connDb = new MapoDb.MapoDb();
|
||||
DataLayer DataLayerObj = new DataLayer();
|
||||
connDb.scriviKeepAlive(id, DateTime.Now);
|
||||
try
|
||||
{
|
||||
// sostituisco PODL/ODL con "" e lascio zero iniziali (conversione INT in IOB)
|
||||
answ = CodXdl.Replace("PODL", "").Replace("ODL", "");
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
return answ;
|
||||
}
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Recupera TASK richiesto x macchina:
|
||||
/// GET: IOB/getTask2Exe/SIMUL_03
|
||||
@@ -468,7 +571,7 @@ namespace MP.IOC.Controllers
|
||||
string answ = "";
|
||||
try
|
||||
{
|
||||
DService.ScriviKeepAlive(id, DateTime.Now);
|
||||
await DService.ScriviKeepAliveAsync(id, DateTime.Now);
|
||||
// leggo da REDIS eventuale elenco task x macchina...
|
||||
Dictionary<string, string> valori = await DService.GetTask2ExeMacchinaAsync(id);
|
||||
answ = JsonConvert.SerializeObject(valori);
|
||||
|
||||
@@ -3,6 +3,7 @@ using MP.Core.DTO;
|
||||
using MP.Core.Objects;
|
||||
using MP.Data;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.DbModels.Anag;
|
||||
using MP.Data.MgModels;
|
||||
using Newtonsoft.Json;
|
||||
using NLog;
|
||||
@@ -687,6 +688,27 @@ namespace MP.IOC.Data
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<List<DecNumArticoliModel>> DecNumArtGetFiltAsync(string codArt = "")
|
||||
{
|
||||
List<DecNumArticoliModel> result = new();
|
||||
string tag = string.IsNullOrEmpty(codArt) ? "ALL" : codArt;
|
||||
string currKey = $"{Utils.redisDecNumArtKey}:{tag}";
|
||||
// cerco in redis dato valore sel macchina...
|
||||
RedisValue rawData = await redisDb.StringGetAsync(currKey);
|
||||
if (rawData.HasValue)
|
||||
{
|
||||
result = JsonConvert.DeserializeObject<List<DecNumArticoliModel>>($"{rawData}") ?? new();
|
||||
}
|
||||
else
|
||||
{
|
||||
result = await IocDbController.DecNumArtGetFiltAsync(codArt);
|
||||
// serializzo e salvo...
|
||||
rawData = JsonConvert.SerializeObject(result);
|
||||
redisDb.StringSet(currKey, rawData, getRandTOut(redisLongTimeCache));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Dispose del connettore ai dati
|
||||
/// </summary>
|
||||
@@ -3593,6 +3615,28 @@ namespace MP.IOC.Data
|
||||
|
||||
#endregion Public Methods
|
||||
|
||||
#region Internal Methods
|
||||
|
||||
/// <summary>
|
||||
/// Recupera ArtNum dato CodArt (per impianti che accettano solo INT in scrittura)
|
||||
/// </summary>
|
||||
/// <param name="CodArt">
|
||||
/// CodArt richiesto, se vuoto restituisce TUTTI i valori in tabella di decodifica
|
||||
/// </param>
|
||||
/// <returns>Dizionario contenente le righe delle codifiche attive Articolo/Numero</returns>
|
||||
internal async Task<Dictionary<string, int>> GetArtNumAsync(string codArt)
|
||||
{
|
||||
Dictionary<string, int> answ = new Dictionary<string, int>();
|
||||
var currData = await DecNumArtGetFiltAsync(codArt);
|
||||
foreach (var item in currData)
|
||||
{
|
||||
answ.Add(item.CodArticolo, item.NumART);
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
#endregion Internal Methods
|
||||
|
||||
#region Protected Fields
|
||||
|
||||
protected Random rand = new Random();
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Version>6.16.2604.1517</Version>
|
||||
<Version>6.16.2604.1518</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>Modulo MP-IOC </i>
|
||||
<h4>Versione: 6.16.2604.1517</h4>
|
||||
<h4>Versione: 6.16.2604.1518</h4>
|
||||
<br /> Note di rilascio:
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
@@ -1 +1 @@
|
||||
6.16.2604.1517
|
||||
6.16.2604.1518
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>6.16.2604.1517</version>
|
||||
<version>6.16.2604.1518</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