CodeMaid x DataLayer e controller IOB
This commit is contained in:
@@ -136,7 +136,7 @@ namespace MP_IO.Controllers
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Chiude PODL --> ODL x macchina:
|
||||
/// Chiude PODL --> 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 --> 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 --> non fa nulla</param>
|
||||
/// <returns>Json contenente lista oggetti DOSSIER serializzati</returns>
|
||||
public string getLastDossByMacc(string id)
|
||||
{
|
||||
|
||||
+88
-62
@@ -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
|
||||
/// --> 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
|
||||
/// </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;
|
||||
|
||||
Reference in New Issue
Block a user