Aggiunta metodi ulog
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
namespace MP.Core.DTO
|
||||
{
|
||||
/// <summary>
|
||||
/// Tracciato UserLog in formato JSON valido
|
||||
/// </summary>
|
||||
public class ULogDataDto : EvDataDto
|
||||
{
|
||||
#region Public Properties
|
||||
|
||||
/// <summary>
|
||||
/// Nome del flusso (RC/RS/DI)
|
||||
/// </summary>
|
||||
public string flux { get; set; } = "DI";
|
||||
|
||||
/// <summary>
|
||||
/// [OPZIONALE] label = causale scarto / tagCode
|
||||
/// </summary>
|
||||
public string label { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Operatore di riferimento
|
||||
/// </summary>
|
||||
public int matrOpr { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// [OPZIONALE] valNum = esitoOk (0/1) / Quantità di scarto associata
|
||||
/// </summary>
|
||||
public int valNum { get; set; } = 0;
|
||||
|
||||
#endregion Public Properties
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
namespace MP.Core.DTO
|
||||
{
|
||||
/// <summary>
|
||||
/// Array valori tipo UserLogData inviati come JSon
|
||||
/// </summary>
|
||||
public class ULogJsonPayloadDto
|
||||
{
|
||||
#region Public Properties
|
||||
|
||||
public List<ULogDataDto> fluxData { get; set; }
|
||||
|
||||
#endregion Public Properties
|
||||
}
|
||||
}
|
||||
@@ -704,6 +704,112 @@ namespace MP.Data.Controllers
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Registra controllo
|
||||
/// </summary>
|
||||
/// <param name="idxMacchina"></param>
|
||||
/// <param name="matrOpr"></param>
|
||||
/// <param name="esitoOk"></param>
|
||||
/// <param name="note"></param>
|
||||
/// <param name="dataOra"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> RegControlliInsert(string idxMacchina, int matrOpr, bool esitoOk, string note, DateTime dataOra)
|
||||
{
|
||||
bool fatto = false;
|
||||
using (var dbCtx = new MoonProContext(_configuration))
|
||||
{
|
||||
var IdxMacc = new SqlParameter("@IdxMacchina", idxMacchina);
|
||||
var MatrOpr = new SqlParameter("@MatrOpr", matrOpr);
|
||||
var EsitoOk = new SqlParameter("@EsitoOk", esitoOk);
|
||||
var Note = new SqlParameter("@Note", note);
|
||||
var DataOra = new SqlParameter("@DataOra", dataOra);
|
||||
|
||||
var result = await dbCtx
|
||||
.Database
|
||||
.ExecuteSqlRawAsync("EXEC stp_RC_insert @IdxMacchina, @MatrOpr, @EsitoOk, @Note, @DataOra", IdxMacc, MatrOpr, EsitoOk, Note, DataOra);
|
||||
fatto = result != 0;
|
||||
}
|
||||
return fatto;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Aggiunta record Registro Dichiarazioni
|
||||
/// </summary>
|
||||
/// <param name="newRec"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> RegDichiarInsert(RegistroDichiarazioniModel newRec)
|
||||
{
|
||||
bool fatto = false;
|
||||
using (var dbCtx = new MoonProContext(_configuration))
|
||||
{
|
||||
var TagCode = new SqlParameter("@TagCode", newRec.TagCode);
|
||||
var IdxMacchina = new SqlParameter("@IdxMacchina", newRec.IdxMacchina);
|
||||
var DtRec = new SqlParameter("@DtRec", newRec.DtRec);
|
||||
var MatrOpr = new SqlParameter("@MatrOpr", newRec.MatrOpr);
|
||||
var ValString = new SqlParameter("@ValString", newRec.ValString);
|
||||
|
||||
var result = await dbCtx
|
||||
.Database
|
||||
.ExecuteSqlRawAsync("exec dbo.stp_DD_insertQuery @TagCode, @IdxMacchina, @DtRec, @MatrOpr, @ValString", TagCode, IdxMacchina, DtRec, MatrOpr, ValString);
|
||||
// indico eseguito!
|
||||
fatto = result > 0;
|
||||
}
|
||||
return fatto;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update record Registro Dichiarazioni
|
||||
/// </summary>
|
||||
/// <param name="newRec"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> RegDichiarUpdate(RegistroDichiarazioniModel newRec)
|
||||
{
|
||||
bool fatto = false;
|
||||
using (var dbCtx = new MoonProContext(_configuration))
|
||||
{
|
||||
var Original_IdxDich = new SqlParameter("@Original_IdxDich", newRec.IdxDich);
|
||||
var DtRec = new SqlParameter("@DtRec", newRec.DtRec);
|
||||
var TagCode = new SqlParameter("@TagCode", newRec.TagCode);
|
||||
var ValString = new SqlParameter("@ValString", newRec.ValString);
|
||||
var MatrOpr = new SqlParameter("@MatrOpr", newRec.MatrOpr);
|
||||
|
||||
var result = await dbCtx
|
||||
.Database
|
||||
.ExecuteSqlRawAsync("exec dbo.stp_DD_updateQuery @Original_IdxDich, @DtRec, @TagCode, @ValString, @MatrOpr", Original_IdxDich, DtRec, TagCode, ValString, MatrOpr);
|
||||
// indico eseguito!
|
||||
fatto = result > 0;
|
||||
}
|
||||
return fatto;
|
||||
}
|
||||
/// <summary>
|
||||
/// Aggiunta record RegistroScarti
|
||||
/// </summary>
|
||||
/// <param name="newRec"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> RegScartiInsert(RegistroScartiModel newRec)
|
||||
{
|
||||
bool fatto = false;
|
||||
using (var dbCtx = new MoonProContext(_configuration))
|
||||
{
|
||||
var IdxMacchina = new SqlParameter("@idxMacchina", newRec.IdxMacchina);
|
||||
var DataOra = new SqlParameter("@DataOra", newRec.DataOra);
|
||||
var Causale = new SqlParameter("@Causale", newRec.Causale);
|
||||
var Qta = new SqlParameter("@Qta", newRec.Qta);
|
||||
var Note = new SqlParameter("@Note", newRec.Note);
|
||||
var MatrOpr = new SqlParameter("@MatrOpr", newRec.MatrOpr);
|
||||
|
||||
var result = await dbCtx
|
||||
.DbSetRegWithCheck
|
||||
.FromSqlRaw("exec dbo.stp_RS_Insert_withCheck @idxMacchina, @DataOra, @Causale, @Qta, @Note, @MatrOpr", IdxMacchina, DataOra, Causale, Qta, Note, MatrOpr)
|
||||
.AsNoTracking()
|
||||
.ToListAsync();
|
||||
// indico eseguito!
|
||||
// -1 = restituisce una select
|
||||
fatto = result.Count > 0;
|
||||
}
|
||||
return fatto;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Annulla modifiche su una specifica entity (cancel update)
|
||||
/// </summary>
|
||||
|
||||
@@ -8,7 +8,7 @@ using System.ComponentModel.DataAnnotations.Schema;
|
||||
// </Auto-Generated>
|
||||
namespace MP.Data.DbModels
|
||||
{
|
||||
//[Table("DiarioDichiarazioni")]
|
||||
[Table("DiarioDichiarazioni")]
|
||||
public partial class RegistroDichiarazioniModel
|
||||
{
|
||||
#region Public Properties
|
||||
|
||||
@@ -534,6 +534,77 @@ namespace MP.IOC.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Processa una chiamata GET x salvare UserLog
|
||||
/// GET: IOB/ulog/SIMUL_03?flux=PROG&valore=P0001&dtEve=20161223180600000&dtCurr=20161223180600000&cnt=999&matrOpr=0=0&label=&valNum
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="flux"></param>
|
||||
/// <param name="valore"></param>
|
||||
/// <param name="dtEve"></param>
|
||||
/// <param name="dtCurr"></param>
|
||||
/// <param name="cnt"></param>
|
||||
/// <param name="matrOpr"></param>
|
||||
/// <param name="label"></param>
|
||||
/// <param name="valNum"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("ulog/{id}")]
|
||||
public async Task<IActionResult> ULog(string id, string flux, string valore, string dtEve, string dtCurr, string cnt, string matrOpr, string label, string valNum)
|
||||
{
|
||||
if (string.IsNullOrEmpty(id)) return BadRequest("Missing ID");
|
||||
|
||||
// Multi: gestione carattere "|" trasformato in "#"
|
||||
id = id.Replace("|", "#");
|
||||
string answ = "";
|
||||
// formato yyyymmddHHMMSSnnn ovvero da anno a millisecondi
|
||||
if (string.IsNullOrEmpty(cnt))
|
||||
{
|
||||
cnt = "0";
|
||||
}
|
||||
|
||||
DateTime dataOraEvento = DateTime.Now;
|
||||
try
|
||||
{
|
||||
int count = 0;
|
||||
int nMatrOpr = 0;
|
||||
int nValNum = 0;
|
||||
Int32.TryParse(cnt, out count);
|
||||
Int32.TryParse(matrOpr, out nMatrOpr);
|
||||
Int32.TryParse(valNum, out nValNum);
|
||||
answ = await DService.ProcessUserLogAsync(id, flux, valore, dtEve, dtCurr, count, nMatrOpr, label, nValNum);
|
||||
return Ok(answ);
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
Log.Error($"Errore in ulog{Environment.NewLine}{exc}");
|
||||
return StatusCode(StatusCodes.Status500InternalServerError, "NO");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Processa una chiamata POST per l'invio di una List Json 1+ UserAction (contiene
|
||||
/// controlli, scarti, dichiarazioni)
|
||||
/// POST: IOB/ulogJson/SIMUL_03
|
||||
/// </summary>
|
||||
/// <param name="id">ID dell'IOB</param>
|
||||
/// <returns></returns>
|
||||
[HttpPost("ulogJson/{id}")]
|
||||
public async Task<IActionResult> ulogJson(string id, [FromBody] string content = "")
|
||||
{
|
||||
string answ = "-";
|
||||
// se ho dati...
|
||||
if (content != "")
|
||||
{
|
||||
answ = await processULogJsonAsync(id, content);
|
||||
return Ok(answ);
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Error($"Errore in ULogJson - no content");
|
||||
return StatusCode(StatusCodes.Status500InternalServerError, "NO");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Processa una chiamata POST per l'invio di una List Json di UNO O PIU' oggetti objItem
|
||||
/// POST: IOB/upsertObjItems/SIMUL_03
|
||||
@@ -716,6 +787,54 @@ namespace MP.IOC.Controllers
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Effettua processing UserLog
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="content"></param>
|
||||
/// <returns></returns>
|
||||
private async Task<string> processULogJsonAsync(string id, string content)
|
||||
{
|
||||
string answ = "";
|
||||
int insDone = 0;
|
||||
// procedo a deserializzare in blocco l'oggetto...
|
||||
ULogJsonPayloadDto receivedData = new ULogJsonPayloadDto();
|
||||
try
|
||||
{
|
||||
// deserializzo.
|
||||
receivedData = JsonConvert.DeserializeObject<ULogJsonPayloadDto>(content) ?? new();
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
Log.Error($"Errore in fase deserializzazione ulogJson{Environment.NewLine}{exc}");
|
||||
answ = "NO";
|
||||
}
|
||||
// se ho qualcosa da processare...
|
||||
if (receivedData != null)
|
||||
{
|
||||
// per ogni valore --> salvo!
|
||||
try
|
||||
{
|
||||
foreach (var item in receivedData.fluxData)
|
||||
{
|
||||
// formato datetime come yyyyMMddHHmmssfff -->es: 20181223180600000
|
||||
answ = await DService.ProcessUserLogAsync(id, item.flux, item.valore, item.dtEve.ToString("yyyyMMddHHmmssfff"), item.dtCurr.ToString("yyyyMMddHHmmssfff"), item.cnt, item.matrOpr, item.label, item.valNum);
|
||||
}
|
||||
// se vuoto --> OK!
|
||||
if (string.IsNullOrEmpty(answ))
|
||||
{
|
||||
answ = $"OK {insDone} processed";
|
||||
}
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
Log.Error($"Errore in fase invio valori ulogJson{Environment.NewLine}{exc}");
|
||||
answ = "NO";
|
||||
}
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
#endregion Private Methods
|
||||
}
|
||||
}
|
||||
@@ -2116,39 +2116,107 @@ namespace MP.IOC.Data
|
||||
string answ = "";
|
||||
DateTime dataOraEvento = GetSrvDtEvent(dtEve, dtCurr);
|
||||
// inizio processing vero e proprio INPUT...
|
||||
if (idxMacchina != null && valore != null)
|
||||
|
||||
if (string.IsNullOrEmpty(idxMacchina) || string.IsNullOrEmpty(valore))
|
||||
{
|
||||
if (idxMacchina != "" && valore != "")
|
||||
{
|
||||
FluxLogModel newRec = new FluxLogModel()
|
||||
{
|
||||
IdxMacchina = idxMacchina,
|
||||
dtEvento = dataOraEvento,
|
||||
CodFlux = flux,
|
||||
Valore = valore,
|
||||
Cnt = contatore
|
||||
};
|
||||
await IocDbController.FluxLogInsertAsync(newRec);
|
||||
// 2022.06.06 salvo su redis il valore ULTIMO del flux x recupero rapido ultimo valore
|
||||
var currKey = Utils.RedKeyLastFLog(idxMacchina, flux, MpIoNS);
|
||||
// 10 min cache max...
|
||||
await redisDb.StringSetAsync(currKey, valore, TimeSpan.FromMinutes(10));
|
||||
// registro in risposta che è andato tutto bene...
|
||||
answ = "OK";
|
||||
}
|
||||
else
|
||||
{
|
||||
string errore = "processFluxLog | Errore: parametri macchina/valore vuoti";
|
||||
Log.Error(errore);
|
||||
answ = errore;
|
||||
}
|
||||
string errore = "processFluxLog | Errore: parametri macchina/valore vuoti";
|
||||
Log.Error(errore);
|
||||
answ = errore;
|
||||
}
|
||||
else
|
||||
{
|
||||
string errore = "processFluxLog | Errore: mancano parametri macchina/valore";
|
||||
FluxLogModel newRec = new FluxLogModel()
|
||||
{
|
||||
IdxMacchina = idxMacchina,
|
||||
dtEvento = dataOraEvento,
|
||||
CodFlux = flux,
|
||||
Valore = valore,
|
||||
Cnt = contatore
|
||||
};
|
||||
await IocDbController.FluxLogInsertAsync(newRec);
|
||||
// 2022.06.06 salvo su redis il valore ULTIMO del flux x recupero rapido ultimo valore
|
||||
var currKey = Utils.RedKeyLastFLog(idxMacchina, flux, MpIoNS);
|
||||
// 10 min cache max...
|
||||
await redisDb.StringSetAsync(currKey, valore, TimeSpan.FromMinutes(10));
|
||||
// registro in risposta che è andato tutto bene...
|
||||
answ = "OK";
|
||||
}
|
||||
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Processa registrazione UserLog da IOB
|
||||
/// </summary>
|
||||
/// <param name="idxMacchina">Macchina</param>
|
||||
/// <param name="flux">Flusso: DI/RC/RC</param>
|
||||
/// <param name="valore">valore = note/valString</param>
|
||||
/// <param name="dtEve">data evento</param>
|
||||
/// <param name="dtCurr">data corrente</param>
|
||||
/// <param name="contatore">contatore invio</param>
|
||||
/// <param name="matrOpr">Matricola Operatore</param>
|
||||
/// <param name="label">label = causale scarto / tagCode</param>
|
||||
/// <param name="valNum">valNum = esitoOk (0/1) / Quantità di scarto associata</param>
|
||||
/// <returns></returns>
|
||||
public async Task<string> ProcessUserLogAsync(string idxMacchina, string flux, string valore, string dtEve, string dtCurr, int contatore, int matrOpr, string label, int valNum)
|
||||
{
|
||||
// scrivo keep alive!!! (se necessario, altrimenti è in cache...)
|
||||
ScriviKeepAlive(idxMacchina, DateTime.Now);
|
||||
// 2017.09.14 trimmo eventualmente lo zero finale dalle date SE supera i millisecondi...
|
||||
dtEve = dtEve.Length > 17 ? dtEve.Substring(0, 17) : dtEve;
|
||||
dtCurr = dtCurr.Length > 17 ? dtCurr.Substring(0, 17) : dtCurr;
|
||||
|
||||
string answ = "";
|
||||
DateTime dataOraEvento = GetSrvDtEvent(dtEve, dtCurr);
|
||||
|
||||
// inizio processing vero e proprio INPUT...
|
||||
if (string.IsNullOrEmpty(idxMacchina) || string.IsNullOrEmpty(flux))
|
||||
{
|
||||
string errore = "processFluxLog | Errore: parametri macchina/flux vuoti";
|
||||
Log.Error(errore);
|
||||
answ = errore;
|
||||
}
|
||||
else
|
||||
{
|
||||
// in base al flusso decido dove e cosa scrivere...
|
||||
switch (flux)
|
||||
{
|
||||
case "DI":
|
||||
RegistroDichiarazioniModel recDich = new RegistroDichiarazioniModel()
|
||||
{
|
||||
IdxMacchina = idxMacchina,
|
||||
DtRec = dataOraEvento,
|
||||
MatrOpr = matrOpr,
|
||||
ValString = valore,
|
||||
TagCode = label
|
||||
};
|
||||
await IocDbController.RegDichiarInsert(recDich);
|
||||
break;
|
||||
|
||||
case "RC":
|
||||
bool esitoOk = valNum != 0;
|
||||
await IocDbController.RegControlliInsert(idxMacchina, matrOpr, esitoOk, valore, dataOraEvento);
|
||||
break;
|
||||
|
||||
case "RS":
|
||||
RegistroScartiModel recSca = new RegistroScartiModel()
|
||||
{
|
||||
IdxMacchina = idxMacchina,
|
||||
DataOra = dataOraEvento,
|
||||
Causale = label,
|
||||
Qta = valNum,
|
||||
Note = valore,
|
||||
MatrOpr = matrOpr
|
||||
};
|
||||
await IocDbController.RegScartiInsert(recSca);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
// registro in risposta che è andato tutto bene...
|
||||
answ = "OK";
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Version>6.16.2604.1409</Version>
|
||||
<Version>6.16.2604.1416</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>Modulo MP-IOC </i>
|
||||
<h4>Versione: 6.16.2604.1409</h4>
|
||||
<h4>Versione: 6.16.2604.1416</h4>
|
||||
<br /> Note di rilascio:
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
@@ -1 +1 @@
|
||||
6.16.2604.1409
|
||||
6.16.2604.1416
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>6.16.2604.1409</version>
|
||||
<version>6.16.2604.1416</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