From 216ca98f7eef0ebed40260a9df06f6d71cef1faf Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 24 Mar 2023 18:53:50 +0100 Subject: [PATCH] CodeMaid x DataLayer e controller IOB --- MP-IO/Controllers/IOBController.cs | 18 ++-- MapoDb/DataLayer.cs | 150 +++++++++++++++++------------ 2 files changed, 95 insertions(+), 73 deletions(-) diff --git a/MP-IO/Controllers/IOBController.cs b/MP-IO/Controllers/IOBController.cs index 352698e1..2f31858d 100644 --- a/MP-IO/Controllers/IOBController.cs +++ b/MP-IO/Controllers/IOBController.cs @@ -136,7 +136,7 @@ namespace MP_IO.Controllers } /// - /// Chiude PODL --> ODL x macchina: + /// Chiude PODL --> ODL x macchina: /// /// GET: IOB/closePODL/SIMUL_03?idxPOdl=123 /// @@ -564,19 +564,15 @@ namespace MP_IO.Controllers return DataLayerObj.AutoStartOdl(id, doConfirm, qtyFromLast, (int)roundStep, keyRichiesta); } - /// - /// Avvia PODL indicato + /// 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 - /// - /// - /// idx del PDL da avviare - /// data-ora di avvio (opzionale) - /// data-ora attuale (opzionale) - /// Esito chiamata (OK/vuoto) + /// idx del PDL da + /// avviare data-ora di avvio (opzionale) data-ora attuale (opzionale) Esito chiamata (OK/vuoto) 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 /// - /// codice articolo, se vuoto --> non fa nulla + /// codice articolo, se vuoto --> non fa nulla /// Json contenente lista oggetti DOSSIER serializzati public string getLastDossArt(string id) { @@ -1016,7 +1012,7 @@ namespace MP_IO.Controllers /// /// GET: IOB/getLastDossArt/cod_articolo /// - /// codice articolo, se vuoto --> non fa nulla + /// codice articolo, se vuoto --> non fa nulla /// Json contenente lista oggetti DOSSIER serializzati public string getLastDossByMacc(string id) { diff --git a/MapoDb/DataLayer.cs b/MapoDb/DataLayer.cs index 8e520f82..8c56ab43 100644 --- a/MapoDb/DataLayer.cs +++ b/MapoDb/DataLayer.cs @@ -1661,11 +1661,11 @@ namespace MapoDb } /// - /// 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 /// /// macchina /// IDX PODL da processare @@ -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; } - /// - /// Effettua calcolo data-ora di riferimento per il server a poartire da - /// - /// - /// - /// - 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; - } /// /// Processa input da IOB eventualmente registrando i segnali inviati @@ -4481,6 +4443,60 @@ namespace MapoDb SetAllCommandTimeouts(taComm, sqlLongCommandTimeout); } + /// + /// Effettua calcolo data-ora di riferimento per il server a poartire da + /// + /// + /// + /// + 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; + } + /// /// Recupero dati stato prod da macchina... /// @@ -4570,6 +4586,16 @@ namespace MapoDb return newVal; } + /// + /// Reset cache REDIS dati PODL + /// + /// + 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;