- aggiunta metodo salvataggio HASH table x MachineIobConf
- bozza x gestire dati opzionali IOB+Macchina
- typo fix vary
This commit is contained in:
Samuele Locatelli
2024-10-14 16:01:09 +02:00
parent 2a73c79eff
commit 5ac070a292
3 changed files with 126 additions and 60 deletions
+103 -53
View File
@@ -2,6 +2,7 @@
using MapoDb;
using MapoSDK;
using Newtonsoft.Json;
using StackExchange.Redis;
using SteamWare;
using System;
using System.Collections.Generic;
@@ -134,7 +135,7 @@ namespace MP_IO.Controllers
catch
{ }
return answ;
}
}
#endif
/// <summary>
@@ -426,7 +427,8 @@ namespace MP_IO.Controllers
/// <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)
/// 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>
@@ -607,6 +609,21 @@ namespace MP_IO.Controllers
return answ;
}
/// <summary> Creazione nuovo ODL dato CodArt + numPz
/// GET: IOB/forceCreatePOdl/SIMUL_03?CodArt=ABCD_1234&numPz=5 </summary> <param
/// name="id"></param> <param name="CodArt"></param> <param name="CodGruppo"></param> <param
/// name="numPz"></param> <returns>IdxODL creato</returns>
public int forceCreatePOdl(string id, string CodArt, string CodGruppo, int numPz)
{
int answ = 0;
// attenzione! poiché nell'URL il carattere "#" viene filtrato ci aspettiamo il
// carattere "|" che poi trasformiamo ora in "#"
id = id.Replace("|", "#");
DataLayer DataLayerObj = new DataLayer();
answ = DataLayerObj.ForceCreatePOdl(id, CodArt, numPz, CodGruppo);
return answ;
}
/// <summary>
/// Chiude ODL precedente ed avvia uno nuovo (duplicandolo e sitemando quantità RIMANENTE),
/// e CONFERMA produzione...
@@ -630,9 +647,12 @@ namespace MP_IO.Controllers
///
/// GET: IOB/forceSplitOdl/SIMUL_03?doConfirm=true&qtyFromLast=true&roundStep=150&extOrderCode=ABCDE1234
///
/// </summary> <param name="id">id impianto</param> <param name="doConfirm"></param> <param
/// name="qtyFromLast"></param> <param name="roundStep"></param> <param
/// name="keyRichiesta">Cod esterno da legare all'ODL x tracciare lotti prod</param>
/// </summary>
/// <param name="id">id impianto</param>
/// <param name="doConfirm"></param>
/// <param name="qtyFromLast"></param>
/// <param name="roundStep"></param>
/// <param name="keyRichiesta">Cod esterno da legare all'ODL x tracciare lotti prod</param>
/// <returns>Esito chiamata (OK/vuoto)</returns>
public string forceSplitOdlFull(string id, bool doConfirm, bool qtyFromLast, int? roundStep, string keyRichiesta = "")
{
@@ -670,26 +690,6 @@ namespace MP_IO.Controllers
return answ;
}
/// <summary>
/// Creazione nuovo ODL dato CodArt + numPz
/// GET: IOB/forceCreatePOdl/SIMUL_03?CodArt=ABCD_1234&numPz=5
/// </summary>
/// <param name="id"></param>
/// <param name="CodArt"></param>
/// <param name="CodGruppo"></param>
/// <param name="numPz"></param>
/// <returns>IdxODL creato</returns>
public int forceCreatePOdl(string id, string CodArt, string CodGruppo, int numPz)
{
int answ = 0;
// attenzione! poiché nell'URL il carattere "#" viene filtrato ci aspettiamo il
// carattere "|" che poi trasformiamo ora in "#"
id = id.Replace("|", "#");
DataLayer DataLayerObj = new DataLayer();
answ = DataLayerObj.ForceCreatePOdl(id, CodArt, numPz, CodGruppo);
return answ;
}
/// <summary>
/// Recupera elenco articoli dei PODL correnti:
///
@@ -837,32 +837,6 @@ namespace MP_IO.Controllers
return answ;
}
/// <summary>
/// Restituisce intera riga dell'odl correntemente in lavorazione sulla macchina...
/// GET: IOB/getCurrOdlRow/SIMUL_01
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public string getCurrOdlRow(string id)
{
// attenzione! poiché nell'URL il carattere "#" viene filtrato ci aspettiamo il
// carattere "|" che poi trasformiamo ora in "#"
id = id.Replace("|", "#");
string answ = "";
DS_ProdTempi.ODLDataTable currData = null;
// chiamo metodo redis/db...
try
{
DataLayer DataLayerObj = new DataLayer();
currData = DataLayerObj.currODLRowTab(id);
answ = JsonConvert.SerializeObject(currData);
}
catch (Exception exc)
{
logger.lg.scriviLog($"Eccezione in getCurrOdlRow{Environment.NewLine}{exc}", tipoLog.EXCEPTION);
}
return answ;
}
/// <summary>
/// Restituisce la quantità pezzi dell'odl correntemente in lavorazione sulla macchina...
/// GET: IOB/getCurrOdlQtaReq/SIMUL_01
@@ -893,6 +867,33 @@ namespace MP_IO.Controllers
return answ;
}
/// <summary>
/// Restituisce intera riga dell'odl correntemente in lavorazione sulla macchina...
/// GET: IOB/getCurrOdlRow/SIMUL_01
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public string getCurrOdlRow(string id)
{
// attenzione! poiché nell'URL il carattere "#" viene filtrato ci aspettiamo il
// carattere "|" che poi trasformiamo ora in "#"
id = id.Replace("|", "#");
string answ = "";
DS_ProdTempi.ODLDataTable currData = null;
// chiamo metodo redis/db...
try
{
DataLayer DataLayerObj = new DataLayer();
currData = DataLayerObj.currODLRowTab(id);
answ = JsonConvert.SerializeObject(currData);
}
catch (Exception exc)
{
logger.lg.scriviLog($"Eccezione in getCurrOdlRow{Environment.NewLine}{exc}", tipoLog.EXCEPTION);
}
return answ;
}
/// <summary>
/// Restituisce data-ora inizio dell'odl correntemente in lavorazione sulla macchina...
/// es: http://url_site/MP/IO/IOB/getCurrOdlStart/SIMUL_03
@@ -1147,7 +1148,7 @@ namespace MP_IO.Controllers
///
/// GET: IOB/getLastDossArt/cod_articolo
/// </summary>
/// <param name="id">codice articolo, se vuoto --> non fa nulla</param>
/// <param name="id">codice articolo, se vuoto --&gt; non fa nulla</param>
/// <returns>Json contenente lista oggetti DOSSIER serializzati</returns>
public string getLastDossByMacc(string id)
{
@@ -1862,6 +1863,55 @@ namespace MP_IO.Controllers
return answ;
}
/// <summary>
/// Processa una chiamata POST per l'invio di una Dictionary HashList da salvare in redis
/// POST: IOB/saveMachineIobConf/SIMUL_03
/// </summary>
/// <param name="id">ID dell'IOB</param>
/// <returns></returns>
[HttpPost]
public string saveMachineIobConf(string id)
{
string answ = "";
if (string.IsNullOrWhiteSpace(id))
{
answ = "Missing IOB";
}
else
{
// questa classe è derivata da Controller.Response... x cui recupero lo stream in
// altro modo...
string content = "";
System.Web.HttpContext.Current.Request.InputStream.Position = 0;
using (var reader = new StreamReader(Request.InputStream, System.Text.Encoding.UTF8, true, 4096, true))
{
content = reader.ReadToEnd();
}
//Rest
System.Web.HttpContext.Current.Request.InputStream.Position = 0;
// procedo a deserializzare in blocco l'oggetto dictionary...
Dictionary<string, string> currDict = new Dictionary<string, string>();
try
{
// deserializzo.
currDict = JsonConvert.DeserializeObject<Dictionary<string, string>>(content);
string keyHashDict = DataLayer.hMachineIobConf(id);
// se != null --> salvo!
if (currDict != null)
{
bool fatto = memLayer.ML.redSaveHashDict(keyHashDict, currDict);
answ = fatto ? "OK" : "KO";
}
}
catch (Exception exc)
{
logger.lg.scriviLog($"Errore in saveMachineIobConf{Environment.NewLine}{exc}");
answ = "EXC";
}
}
return answ;
}
/// <summary>
/// SALVA in blocco un incremento pezzi x macchina restituendo il valore appena inviato o,
/// se mancasse chaive redis, del valore da DB
@@ -2164,7 +2214,7 @@ namespace MP_IO.Controllers
/// <summary>
/// Processa una chiamata POST per l'invio di una Dictionary HashList da salvare in redis
/// POST: IOB/setObjItems/SIMUL_03
/// POST: IOB/setRedisHashDict/SIMUL_03
/// </summary>
/// <param name="id">ID dell'IOB</param>
/// <returns></returns>
+20 -4
View File
@@ -379,15 +379,31 @@ namespace MapoDb
return mHash($"PODLRow:{idxPODL}");
}
/// <summary> Hash dati relativi all'associazione macchina <--> IOB </summary> <param
/// name="IdxMacchina">Macchina PRINCIPALE</param> <returns></returns>
/// <summary>
/// Hash dati relativi all'associazione macchina <--> IOB
/// </summary>
/// <param name="IdxMacchina">Macchina</param>
/// <returns></returns>
public static string hIobDict(string IdxMacchina)
{
return mHash($"IOB:{IdxMacchina}:CurrInfo");
}
/// <summary> Hash dati relativi all'associazione macchina <--> IOB </summary> <param
/// name="IdxMacchina">Macchina PRINCIPALE</param> <returns></returns>
/// <summary>
/// Hash dati relativi a macchina + IOB + conf speciali
/// </summary>
/// <param name="IdxMacchina">Macchina</param>
/// <returns></returns>
public static string hMachineIobConf(string IdxMacchina)
{
return mHash($"IOB:{IdxMacchina}:MachIobConf");
}
/// <summary>
/// Hash dati relativi all'associazione macchina <--> IOB
/// </summary>
/// <param name="IdxMacchina">Macchina PRINCIPALE</param>
/// <returns></returns>
public static string hM2IOB(string IdxMacchina)
{
return mHash(string.Format("hM2IOB:{0}", IdxMacchina));
+3 -3
View File
@@ -6,14 +6,14 @@ using System.Collections.Generic;
namespace MapoDb
{
/// <summary>
/// Classe gestione archivio modelli MTC dei vari IOB
/// Classe gestione archivio modelli MTC in MongoDB
/// </summary>
public class MtcDataModelArchive
{
#region Public Fields
/// <summary>
/// Singleton gestione istanza AlarmsManager
/// Singleton gestione istanza condivisa
/// </summary>
public static MtcDataModelArchive man = new MtcDataModelArchive();
@@ -27,7 +27,7 @@ namespace MapoDb
#region Public Constructors
/// <summary>
/// Classe gestione archivio allarmi
/// init classe x connessione MongoDB
/// </summary>
public MtcDataModelArchive()
{