CodeMaid x DataLayer e controller IOB

This commit is contained in:
Samuele Locatelli
2023-03-24 18:53:50 +01:00
parent f88ccf4bfa
commit 216ca98f7e
2 changed files with 95 additions and 73 deletions
+7 -11
View File
@@ -136,7 +136,7 @@ namespace MP_IO.Controllers
}
/// <summary>
/// Chiude PODL --> ODL x macchina:
/// Chiude PODL --&gt; ODL x macchina:
///
/// GET: IOB/closePODL/SIMUL_03?idxPOdl=123
/// </summary>
@@ -564,19 +564,15 @@ namespace MP_IO.Controllers
return DataLayerObj.AutoStartOdl(id, doConfirm, qtyFromLast, (int)roundStep, keyRichiesta);
}
/// <summary>
/// Avvia PODL indicato
/// <summary> Avvia PODL indicato
/// - se esistesse un ODL da altro PODL --> chiude
/// - se fosse già in essere ODL collegato --> lascia aperto
/// - se fosse chiuso ODL collegato --> duplica PODL e poi avvia nuovo ODL.
///
/// GET: IOB/forceStartPOdl/SIMUL_03?idxPODL=123&dtEve=20230323151100000&dtCurr=20230323221100000
/// </summary>
/// <param name="id"></param>
/// <param name="idxPODL">idx del PDL da avviare</param>
/// <param name="dtEve">data-ora di avvio (opzionale)</param>
/// <param name="dtCurr">data-ora attuale (opzionale)</param>
/// <returns>Esito chiamata (OK/vuoto)</returns>
/// </summary> <param name="id"></param> <param name="idxPODL">idx del PDL da
/// avviare</param> <param name="dtEve">data-ora di avvio (opzionale)</param> <param
/// name="dtCurr">data-ora attuale (opzionale)</param> <returns>Esito chiamata (OK/vuoto)</returns>
public string forceStartPOdl(string id, int idxPODL, string dtEve = "", string dtCurr = "")
{
// attenzione! poiché nell'URL il carattere "#" viene filtrato ci aspettiamo il
@@ -981,7 +977,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 getLastDossArt(string id)
{
@@ -1016,7 +1012,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)
{
+88 -62
View File
@@ -1661,11 +1661,11 @@ namespace MapoDb
}
/// <summary>
/// Effettua force Start PODL [CurrProdStatus = 1] se fosse già in essere ODL
/// collegato --> lascia aperto [CurrProdStatus = 2] se esistesse un ODL da altro PODL x
/// diverso articolo/fase --> chiude vecchio x poi far partire nuovo [CurrProdStatus = 3] se
/// fosse chiuso ODL collegato --> duplica PODL e poi avvia nuovo ODL [CurrProdStatus = 4]
/// se fosse già in essere ODL non collegato --> lascia aperto e collego
/// Effettua force Start PODL [CurrProdStatus = 1] se fosse già in essere ODL collegato
/// --&gt; lascia aperto [CurrProdStatus = 2] se esistesse un ODL da altro PODL x diverso
/// articolo/fase --&gt; chiude vecchio x poi far partire nuovo [CurrProdStatus = 3] se
/// fosse chiuso ODL collegato --&gt; duplica PODL e poi avvia nuovo ODL [CurrProdStatus =
/// 4] se fosse già in essere ODL non collegato --&gt; lascia aperto e collego
/// </summary>
/// <param name="idxMacchina">macchina</param>
/// <param name="idxPODL">IDX PODL da processare</param>
@@ -1678,7 +1678,7 @@ namespace MapoDb
string answ = "KO";
int CurrProdStatus = 0;
string sIdxODL = "";
// Verifica se evento realtime oppure ho data specificata x processing @dtEve
// Verifica se evento realtime oppure ho data specificata x processing @dtEve
DateTime dtEvent = DateTime.Now;
bool rtimeProc = string.IsNullOrEmpty(dtEve);
if (!rtimeProc)
@@ -1805,7 +1805,9 @@ namespace MapoDb
}
// avvio PODL: creo nuovo ODL da promessa ed associo
taODL.inizioSetupPromessa(idxPODL, MatrOpr, POdlRow.IdxMacchina, POdlRow.TCAssegnato, POdlRow.PzPallet, POdlRow.Note, dtEvent);
// fix (invio ) dati ODL alla ,acchina tramite IOB
// reseetto info PODL
resetPODLData(idxPODL);
// fix (invio ) dati ODL alla macchina tramite IOB
Thread.Sleep(200);
answ = saveOdlData(idxMacchina, currODLData, reqPODLData);
@@ -1826,14 +1828,27 @@ namespace MapoDb
int newPODL = lastPodl != null ? lastPodl.idxPromessa : POdlRow.idxPromessa;
// avvio (nuovo) PODL
taODL.inizioSetupPromessa(idxPODL, MatrOpr, POdlRow.IdxMacchina, POdlRow.TCAssegnato, POdlRow.PzPallet, POdlRow.Note, dtEvent);
// fix (invio ) dati ODL alla ,acchina tramite IOB
// reseetto info PODL
resetPODLData(idxPODL);
// fix (invio ) dati ODL alla macchina tramite IOB
Thread.Sleep(200);
answ = saveOdlData(idxMacchina, currODLData, reqPODLData);
break;
case 4:
// --> registro in PODL e non tocco ODL
// eventuale chiusura vecchio ODL, 5 sec prima...
if (currODLData.Count > 0)
{
doCloseCurrODL(idxMacchina, doConfirm, qtyConf, currODLData, dtEvent.AddSeconds(-2));
}
// avvio PODL: creo nuovo ODL da promessa ed associo
taODL.inizioSetupPromessa(idxPODL, MatrOpr, POdlRow.IdxMacchina, POdlRow.TCAssegnato, POdlRow.PzPallet, POdlRow.Note, dtEvent);
// reseetto info PODL
resetPODLData(idxPODL);
// fix (invio ) dati ODL alla macchina tramite IOB
Thread.Sleep(200);
answ = saveOdlData(idxMacchina, currODLData, reqPODLData);
break;
@@ -2427,59 +2442,6 @@ namespace MapoDb
}
return answ;
}
/// <summary>
/// Effettua calcolo data-ora di riferimento per il server a poartire da
/// </summary>
/// <param name="dtEve"></param>
/// <param name="dtCurr"></param>
/// <returns></returns>
private DateTime getSrvDtEvent(string dtEve, string dtCurr)
{
DateTime dataOraEvento = 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;
DateTime dtEvento, dtCorrente;
// controllo: se ho valori dt x evento e orario DIVERSI per acquisitore IOB calcolo
// dataOraEvento corretto
if (dtEve != dtCurr)
{
Int64 delta = 0;
try
{
// se ho meno decimali x evento rispetto dtCorrente...
if (dtEve.Length < dtCurr.Length)
{
dtEve = dtEve.PadRight(dtCurr.Length, '0');
}
delta = Convert.ToInt64(dtCurr) - Convert.ToInt64(dtEve);
// se meno di 60'000 ms ...
if (delta < 59999)
{
dataOraEvento = dataOraEvento.AddMilliseconds(-delta);
}
else
{
// in questo caso elimino i MS dalle stringhe e converto i datetime....
CultureInfo provider = CultureInfo.InvariantCulture;
string format = "yyyyMMddHHmmssfff";
dtEvento = DateTime.ParseExact(dtEve, format, provider);
dtCorrente = DateTime.ParseExact(dtCurr, format, provider);
Int64 tiks = dtCorrente.Ticks - dtEvento.Ticks;
dataOraEvento = dataOraEvento.AddTicks(-tiks);
}
}
catch (Exception exc)
{
logger.lg.scriviLog($"getSrvDtEvent | Errore calcolo ms evento/ora corrente da device remoto:{Environment.NewLine}" +
$"dtEve : {dtEve}{Environment.NewLine}" +
$"dtCurr: {dtCurr}{Environment.NewLine}" +
$"{exc}", tipoLog.EXCEPTION);
}
}
return dataOraEvento;
}
/// <summary>
/// Processa input da IOB eventualmente registrando i segnali inviati
@@ -4481,6 +4443,60 @@ namespace MapoDb
SetAllCommandTimeouts(taComm, sqlLongCommandTimeout);
}
/// <summary>
/// Effettua calcolo data-ora di riferimento per il server a poartire da
/// </summary>
/// <param name="dtEve"></param>
/// <param name="dtCurr"></param>
/// <returns></returns>
private DateTime getSrvDtEvent(string dtEve, string dtCurr)
{
DateTime dataOraEvento = 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;
DateTime dtEvento, dtCorrente;
// controllo: se ho valori dt x evento e orario DIVERSI per acquisitore IOB calcolo
// dataOraEvento corretto
if (dtEve != dtCurr)
{
Int64 delta = 0;
try
{
// se ho meno decimali x evento rispetto dtCorrente...
if (dtEve.Length < dtCurr.Length)
{
dtEve = dtEve.PadRight(dtCurr.Length, '0');
}
delta = Convert.ToInt64(dtCurr) - Convert.ToInt64(dtEve);
// se meno di 60'000 ms ...
if (delta < 59999)
{
dataOraEvento = dataOraEvento.AddMilliseconds(-delta);
}
else
{
// in questo caso elimino i MS dalle stringhe e converto i datetime....
CultureInfo provider = CultureInfo.InvariantCulture;
string format = "yyyyMMddHHmmssfff";
dtEvento = DateTime.ParseExact(dtEve, format, provider);
dtCorrente = DateTime.ParseExact(dtCurr, format, provider);
Int64 tiks = dtCorrente.Ticks - dtEvento.Ticks;
dataOraEvento = dataOraEvento.AddTicks(-tiks);
}
}
catch (Exception exc)
{
logger.lg.scriviLog($"getSrvDtEvent | Errore calcolo ms evento/ora corrente da device remoto:{Environment.NewLine}" +
$"dtEve : {dtEve}{Environment.NewLine}" +
$"dtCurr: {dtCurr}{Environment.NewLine}" +
$"{exc}", tipoLog.EXCEPTION);
}
}
return dataOraEvento;
}
/// <summary>
/// Recupero dati stato prod da macchina...
/// </summary>
@@ -4570,6 +4586,16 @@ namespace MapoDb
return newVal;
}
/// <summary>
/// Reset cache REDIS dati PODL
/// </summary>
/// <exception cref="NotImplementedException"></exception>
private void resetPODLData(int idxPODL)
{
string rKey = getPOdlRowHash(idxPODL);
memLayer.ML.setRSV(rKey, "", 1);
}
private string saveOdlData(string idxMacchina, DS_ProdTempi.ODLDataTable currODLData, DS_ProdTempi.PromesseODLDataTable reqPODLData)
{
string answ;