From fa3e9a8273efc385b70171527f4a2a305212760b Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 28 Nov 2024 12:01:19 +0100 Subject: [PATCH 01/14] =?UTF-8?q?Aggiunbti=20nuovi=20metodi=20x=20gestioen?= =?UTF-8?q?=20PODL=20running/Act=20e=20inizio=20deprecate=20curr=20(che=20?= =?UTF-8?q?=C3=A8=20NEXT...)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MP-IO/Controllers/IOBController.cs | 103 +++++++++++++++++++++-------- MapoSDK/Enums.cs | 1 + 2 files changed, 77 insertions(+), 27 deletions(-) diff --git a/MP-IO/Controllers/IOBController.cs b/MP-IO/Controllers/IOBController.cs index 9259f2cc..5323a602 100644 --- a/MP-IO/Controllers/IOBController.cs +++ b/MP-IO/Controllers/IOBController.cs @@ -740,33 +740,6 @@ namespace MP_IO.Controllers return answ; } - /// - /// Recupera codice numerico ODL/PODL dato CodXdl, in pratica la parte finale SENZA ODL/PODL - /// Funzione per impianti che accettano solo INT in scrittura: - /// - /// GET: IOB/getXdlNum/SIMUL_03?CodXdl=ODL00000123 - /// - /// IdxMacchina (NON considerato) - /// CodXdl richiesto, se vuoto restituisce TUTTI i valori in tabella di decodifica - /// SINGOLO VALORE calcolato on the fly - public string getXdlNum(string id, string CodXdl = "") - { - // in realtà ID macchina non conta e lo ignoriamo... - string answ = ""; - // scrivo keep alive!!! (se necessario, altrimenti è in cache...) - MapoDb.MapoDb connDb = new MapoDb.MapoDb(); - DataLayer DataLayerObj = new DataLayer(); - connDb.scriviKeepAlive(id, DateTime.Now); - try - { - // sostituisco PODL/ODL con "" e lascio zero iniziali (conversione INT in IOB) - answ = CodXdl.Replace("PODL", "").Replace("ODL", ""); - } - catch - { } - return answ; - } - /// /// Recupera elenco articoli USATI: /// @@ -986,6 +959,19 @@ namespace MP_IO.Controllers /// id macchina, se "" mostra tutto /// Json contenente lista oggetti PODL serializzati public string getCurrPODL(string id) + { + // lasciato x retrocompatibilità, FixMe ToDo ELiminare con udpate IOB.... + return getPOdlNext(id); + } + + /// + /// Recupera DATI PODL NEXT (=NON AVVIATI) x macchina: (copia di getCurrPODL) + /// + /// GET: IOB/getPOdlNext/SIMUL_03 + /// + /// id macchina, se "" mostra tutto + /// Json contenente lista oggetti PODL serializzati + public string getPOdlNext(string id) { // attenzione! poiché nell'URL il carattere "#" viene filtrato ci aspettiamo il // carattere "|" che poi trasformiamo ora in "#" @@ -1506,6 +1492,40 @@ namespace MP_IO.Controllers return answ; } + /// + /// Recupera DATI PODL Running/Actual (AVVIATO e in corso) x macchina: + /// + /// GET: IOB/getPOdlAct/SIMUL_03 + /// + /// id macchina, se "" mostra tutto + /// Json contenente lista 1 oggetto PODL serializzato, se presente + public string getPOdlAct(string id) + { + // attenzione! poiché nell'URL il carattere "#" viene filtrato ci aspettiamo il + // carattere "|" che poi trasformiamo ora in "#" + if (!string.IsNullOrEmpty(id)) + { + id = id.Replace("|", "#"); + } + string answ = ""; + + // init obj DataLayer + DataLayer DataLayerObj = new DataLayer(); + try + { + // recupero IdxOdl corrente + string sIdxOdl = DataLayerObj.currODL(id); + int IdxOdl = 0; + int.TryParse(sIdxOdl, out IdxOdl); + // recupero Podl running x macchina ... + DS_ProdTempi.PromesseODLDataTable elencoOdl = DataLayerObj.taPODL.getByIdxOdl(IdxOdl); + answ = JsonConvert.SerializeObject(elencoOdl); + } + catch + { } + return answ; + } + /// /// Recupera TASK richiesto x macchina: /// @@ -1531,6 +1551,35 @@ namespace MP_IO.Controllers return answ; } + /// + /// Recupera codice numerico ODL/PODL dato CodXdl, in pratica la parte finale SENZA ODL/PODL + /// Funzione per impianti che accettano solo INT in scrittura: + /// + /// GET: IOB/getXdlNum/SIMUL_03?CodXdl=ODL00000123 + /// + /// IdxMacchina (NON considerato) + /// + /// CodXdl richiesto, se vuoto restituisce TUTTI i valori in tabella di decodifica + /// + /// SINGOLO VALORE calcolato on the fly + public string getXdlNum(string id, string CodXdl = "") + { + // in realtà ID macchina non conta e lo ignoriamo... + string answ = ""; + // scrivo keep alive!!! (se necessario, altrimenti è in cache...) + MapoDb.MapoDb connDb = new MapoDb.MapoDb(); + DataLayer DataLayerObj = new DataLayer(); + connDb.scriviKeepAlive(id, DateTime.Now); + try + { + // sostituisco PODL/ODL con "" e lascio zero iniziali (conversione INT in IOB) + answ = CodXdl.Replace("PODL", "").Replace("ODL", ""); + } + catch + { } + return answ; + } + // GET: IOB (è un check alive del server) public string Index() { diff --git a/MapoSDK/Enums.cs b/MapoSDK/Enums.cs index 857bd5c8..32f05a29 100644 --- a/MapoSDK/Enums.cs +++ b/MapoSDK/Enums.cs @@ -265,6 +265,7 @@ namespace MapoSDK /// Imposta Articolo su PLC /// setArt, + /// /// Imposta Articolo IN MODALITA' NUMERICA su PLC /// From f4aee79d608ad330572e48825b68e05a093d8fda Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 28 Nov 2024 12:03:40 +0100 Subject: [PATCH 02/14] Typo reordering codice --- MP-IO/Controllers/IOBController.cs | 60 +++++++++++++++--------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/MP-IO/Controllers/IOBController.cs b/MP-IO/Controllers/IOBController.cs index 5323a602..1feb9f1a 100644 --- a/MP-IO/Controllers/IOBController.cs +++ b/MP-IO/Controllers/IOBController.cs @@ -964,36 +964,6 @@ namespace MP_IO.Controllers return getPOdlNext(id); } - /// - /// Recupera DATI PODL NEXT (=NON AVVIATI) x macchina: (copia di getCurrPODL) - /// - /// GET: IOB/getPOdlNext/SIMUL_03 - /// - /// id macchina, se "" mostra tutto - /// Json contenente lista oggetti PODL serializzati - public string getPOdlNext(string id) - { - // attenzione! poiché nell'URL il carattere "#" viene filtrato ci aspettiamo il - // carattere "|" che poi trasformiamo ora in "#" - if (!string.IsNullOrEmpty(id)) - { - id = id.Replace("|", "#"); - } - string answ = ""; - - // init obj DataLayer - DataLayer DataLayerObj = new DataLayer(); - try - { - // recupero dati macchina... - var elencoOdl = DataLayerObj.taPODL.getByMaccArt(id, "", "", true); - answ = JsonConvert.SerializeObject(elencoOdl); - } - catch - { } - return answ; - } - /// /// Restituisce intera riga dello stato di macchina... /// GET: IOB/getCurrStatoRow/SIMUL_01 @@ -1526,6 +1496,36 @@ namespace MP_IO.Controllers return answ; } + /// + /// Recupera DATI PODL NEXT (=NON AVVIATI) x macchina: (copia di getCurrPODL) + /// + /// GET: IOB/getPOdlNext/SIMUL_03 + /// + /// id macchina, se "" mostra tutto + /// Json contenente lista oggetti PODL serializzati + public string getPOdlNext(string id) + { + // attenzione! poiché nell'URL il carattere "#" viene filtrato ci aspettiamo il + // carattere "|" che poi trasformiamo ora in "#" + if (!string.IsNullOrEmpty(id)) + { + id = id.Replace("|", "#"); + } + string answ = ""; + + // init obj DataLayer + DataLayer DataLayerObj = new DataLayer(); + try + { + // recupero dati macchina... + var elencoOdl = DataLayerObj.taPODL.getByMaccArt(id, "", "", true); + answ = JsonConvert.SerializeObject(elencoOdl); + } + catch + { } + return answ; + } + /// /// Recupera TASK richiesto x macchina: /// From 9c7585b86f9230ce11cb0a57835c18fdc62ceb4b Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 28 Nov 2024 12:09:00 +0100 Subject: [PATCH 03/14] Typo --- MP-IO/Controllers/IOBController.cs | 28 +--------------------------- 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/MP-IO/Controllers/IOBController.cs b/MP-IO/Controllers/IOBController.cs index 1feb9f1a..3f8fd9f8 100644 --- a/MP-IO/Controllers/IOBController.cs +++ b/MP-IO/Controllers/IOBController.cs @@ -111,33 +111,6 @@ namespace MP_IO.Controllers return answ; } -#if false - /// - /// Chiude ODL x macchina: - /// - /// GET: IOB/closeODL/SIMUL_03?idxOdl=123 - /// - /// id macchina - /// idx dell'ODL da chiudere - /// bool esecuzione - public bool closeODL(string id, int idxOdl) - { - bool answ = false; - // init obj DataLayer - DataLayer DataLayerObj = new DataLayer(); - try - { - // chiamata diretta sul DB... - DateTime dtEvento = DateTime.Now; - DataLayerObj.taODL.forceClose(idxOdl, id, dtEvento); - answ = true; - } - catch - { } - return answ; - } -#endif - /// /// Chiude ODL x macchina: /// @@ -2045,6 +2018,7 @@ namespace MP_IO.Controllers } return answ; } + /// /// SALVA in blocco un incremento pezzi x macchina restituendo il valore appena inviato o, /// se mancasse chaive redis, del valore da DB From fb354fecb8c415df4630ee5fe6e641f1520d403e Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Mon, 10 Feb 2025 10:10:58 +0100 Subject: [PATCH 04/14] Aggiunta conf x nuovo DB FluxData --- MP-ADM/Web.config | 4 + MP-IO/Controllers/IOBController.cs | 11 +- MP-IO/Web.config | 4 + MP-SITE/example-NLog.config | 31 ---- MP-SITE/example-app.config | 17 -- MP-SITE/example-config-table.txt | 30 ---- MP-SITE/example-favicon.ico | Bin 31702 -> 0 bytes MP-Site/MP-Site.csproj | 4 - MP-Site/Web.config | 4 + MP-TAB/Web.config | 4 + MapoDb/DS_DossPar.Designer.cs | 4 +- MapoDb/DS_DossPar.xsd | 33 ++-- MapoDb/DS_applicazione.Designer.cs | 2 +- MapoDb/DS_applicazione.xsd | 67 ++++---- MapoDb/DataLayer.cs | 7 +- MapoDb/Properties/Settings.Designer.cs | 13 +- MapoDb/Properties/Settings.settings | 8 + MapoDb/app.config | 228 +++++++++++++------------ 18 files changed, 223 insertions(+), 248 deletions(-) delete mode 100644 MP-SITE/example-NLog.config delete mode 100644 MP-SITE/example-app.config delete mode 100644 MP-SITE/example-config-table.txt delete mode 100644 MP-SITE/example-favicon.ico diff --git a/MP-ADM/Web.config b/MP-ADM/Web.config index 1a3fc145..f7d16808 100644 --- a/MP-ADM/Web.config +++ b/MP-ADM/Web.config @@ -32,6 +32,7 @@ + @@ -43,6 +44,9 @@ + diff --git a/MP-IO/Controllers/IOBController.cs b/MP-IO/Controllers/IOBController.cs index 3f8fd9f8..47b3a7ec 100644 --- a/MP-IO/Controllers/IOBController.cs +++ b/MP-IO/Controllers/IOBController.cs @@ -39,15 +39,18 @@ namespace MP_IO.Controllers return answ; } - /// AGGIUNGE TASK richiesto x macchina: + /// + /// AGGIUNGE TASK richiesto x macchina: /// /// GET: IOB/addTask2Exe/3010?taskName=startSetup&taskVal=T190406101512 /// GET: IOB/addTask2Exe/3010?taskName=stopSetup&taskVal=T190406101512 /// GET: IOB/addTask2Exe/SIMUL_03?taskName=setProg&taskVal=P00000001 /// GET: IOB/addTask2Exe/SIMUL_03?taskName=setComm&taskVal=ODL_0000123 /// GET: IOB/addTask2Exe/SIMUL_03?taskName=setArt&taskVal=ART_0000321 - /// - /// + /// + /// + /// + /// public string addTask2Exe(string id, string taskName, string taskVal) { string answ = ""; @@ -2055,7 +2058,7 @@ namespace MP_IO.Controllers /// /// Registrazione variazione allarmi /// - /// GET: IOB/sendAlarmBankUpdate/SIMUL_03 + /// GET: IOB/sendAlarmBankUpdate/SIMUL_03?memAddr=SIM_BANK&index=0&currStatus=22 /// /// /// diff --git a/MP-IO/Web.config b/MP-IO/Web.config index 9b4053a2..63becdb7 100644 --- a/MP-IO/Web.config +++ b/MP-IO/Web.config @@ -40,6 +40,7 @@ + @@ -50,6 +51,9 @@ + diff --git a/MP-SITE/example-NLog.config b/MP-SITE/example-NLog.config deleted file mode 100644 index a11a39e6..00000000 --- a/MP-SITE/example-NLog.config +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/MP-SITE/example-app.config b/MP-SITE/example-app.config deleted file mode 100644 index fb421650..00000000 --- a/MP-SITE/example-app.config +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/MP-SITE/example-config-table.txt b/MP-SITE/example-config-table.txt deleted file mode 100644 index dd0ab8ef..00000000 --- a/MP-SITE/example-config-table.txt +++ /dev/null @@ -1,30 +0,0 @@ -# chiave valore valoreStd note -_adminEmail samuele@steamware.net,info@steamware.net samuele@steamware.net,info@steamware.net info@steamware.net -_allowForceUser true true abilita login forzato -_commonPages menu menu pagina comune -_emailPwd drmfsls16 drmfsls16 drmfsls16 -_emailUser steamwarebot@gmail.com steamwarebot@gmail.com steamwarebot@gmail.com -_enableSSL true true true -_fromEmail webmaster@admodelling.org webmaster@admodelling.org email mittente eventuali msg -_righeDataGrid 30 30 Num righe datagrid std -_righeDataGridAnagr 20 20 Num righe datagrid anagrafiche -_righeDataGridLong 30 30 Num righe datagrid long -_righeDataGridMed 15 15 Num righe datagrid med -_righeDataGridShort 10 10 Num righe datagrid short -_smtpCli smtp.gmail.com smtp.gmail.com smtp.gmail.com -_useAIMSmtp false false impiego client posta elettronica alternativo -_useAuthSmtp true true true -AuthCookieName admodellingAuth admodellingAuth Cookie applicativo -autoConfCmd true true Conferma automatica comandi barcode -baseUrl http://site_name http://iis02/site_name URL base del sito -cacheValSec 60 60 Validità cache dati in gestore Barcode -cookieDayExp 365 365 Periodo validità cookie -cookieUsed admodellingAuth admodellingAuth,CTrack_CodOpr,CTrack_CodPost Elenco dei cookie impiegati -enableCookie true true Abilitazione uso cookie -enableLogOut true false Abilita button logout COMPLETO in alto a sx -enablePlain true true Abilitazione decode plain -maxAuth 1000 1000 num auth minimo per NON consumare tokens -serializeSession true true Serializzazione valori in sessione (REDIS) -SiteName iis02/site_name iis02/site_name Nome sito -enableDumpDiag false false abilitazione dumb diagnostico x eccezioni di default -doShrinkFolder true true Imposta compressione area LOGS \ No newline at end of file diff --git a/MP-SITE/example-favicon.ico b/MP-SITE/example-favicon.ico deleted file mode 100644 index 4f0e0ad0a8300d86881040676f2c05f93ec4c1a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31702 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 BZR`L5 diff --git a/MP-Site/MP-Site.csproj b/MP-Site/MP-Site.csproj index 08e3cf62..4fea6212 100644 --- a/MP-Site/MP-Site.csproj +++ b/MP-Site/MP-Site.csproj @@ -290,8 +290,6 @@ - - @@ -373,8 +371,6 @@ - - diff --git a/MP-Site/Web.config b/MP-Site/Web.config index 2461f8b4..e196412c 100644 --- a/MP-Site/Web.config +++ b/MP-Site/Web.config @@ -34,6 +34,7 @@ + @@ -42,6 +43,9 @@ + diff --git a/MP-TAB/Web.config b/MP-TAB/Web.config index ad6c3ff9..3af4aeb2 100644 --- a/MP-TAB/Web.config +++ b/MP-TAB/Web.config @@ -61,6 +61,7 @@ + @@ -74,6 +75,9 @@ + diff --git a/MapoDb/DS_DossPar.Designer.cs b/MapoDb/DS_DossPar.Designer.cs index 004cece7..fe5aa18e 100644 --- a/MapoDb/DS_DossPar.Designer.cs +++ b/MapoDb/DS_DossPar.Designer.cs @@ -1340,7 +1340,7 @@ SELECT IdxDossier, IdxMacchina, DtRif, IdxODL, CodArticolo, DataType, Valore FRO [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "17.0.0.0")] private void InitConnection() { this._connection = new global::System.Data.SqlClient.SqlConnection(); - this._connection.ConnectionString = global::MapoDb.Properties.Settings.Default.MoonProConnectionString; + this._connection.ConnectionString = global::MapoDb.Properties.Settings.Default.MoonPro_FluxDataConnectionString; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] @@ -1796,7 +1796,7 @@ SELECT IdxMacchina, CodFlux, EnabDoss FROM ConfFlux WHERE (CodFlux = @CodFlux) A [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "17.0.0.0")] private void InitConnection() { this._connection = new global::System.Data.SqlClient.SqlConnection(); - this._connection.ConnectionString = global::MapoDb.Properties.Settings.Default.MoonProConnectionString; + this._connection.ConnectionString = global::MapoDb.Properties.Settings.Default.MoonPro_FluxDataConnectionString; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] diff --git a/MapoDb/DS_DossPar.xsd b/MapoDb/DS_DossPar.xsd index df93671a..703e23ce 100644 --- a/MapoDb/DS_DossPar.xsd +++ b/MapoDb/DS_DossPar.xsd @@ -2,14 +2,15 @@ - + + - + DELETE FROM [Dossiers] WHERE (([IdxDossier] = @Original_IdxDossier) AND ([IdxMacchina] = @Original_IdxMacchina) AND ([DtRif] = @Original_DtRif) AND ([IdxODL] = @Original_IdxODL) AND ([CodArticolo] = @Original_CodArticolo) AND ([DataType] = @Original_DataType)) @@ -77,7 +78,7 @@ SELECT IdxDossier, IdxMacchina, DtRif, IdxODL, CodArticolo, DataType, Valore FRO - + dbo.stp_DOSS_getLastByArt @@ -88,7 +89,7 @@ SELECT IdxDossier, IdxMacchina, DtRif, IdxODL, CodArticolo, DataType, Valore FRO - + dbo.stp_DOSS_getLastByMacch @@ -99,7 +100,7 @@ SELECT IdxDossier, IdxMacchina, DtRif, IdxODL, CodArticolo, DataType, Valore FRO - + dbo.stp_DOSS_getLastByPODL @@ -113,7 +114,7 @@ SELECT IdxDossier, IdxMacchina, DtRif, IdxODL, CodArticolo, DataType, Valore FRO - + DELETE FROM [ConfFlux] WHERE (([IdxMacchina] = @Original_IdxMacchina) AND ([CodFlux] = @Original_CodFlux) AND ([EnabDoss] = @Original_EnabDoss)) @@ -179,30 +180,30 @@ SELECT IdxMacchina, CodFlux, EnabDoss FROM ConfFlux WHERE (CodFlux = @CodFlux) A - + - - - + + + - + - + @@ -212,24 +213,24 @@ SELECT IdxMacchina, CodFlux, EnabDoss FROM ConfFlux WHERE (CodFlux = @CodFlux) A - + - + - + - + diff --git a/MapoDb/DS_applicazione.Designer.cs b/MapoDb/DS_applicazione.Designer.cs index 92186888..134cebca 100644 --- a/MapoDb/DS_applicazione.Designer.cs +++ b/MapoDb/DS_applicazione.Designer.cs @@ -29176,7 +29176,7 @@ SELECT IdxMacchina, dtEvento, CodFlux, Valore, Cnt FROM FluxLog WHERE (CodFlux = [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "17.0.0.0")] private void InitConnection() { this._connection = new global::System.Data.SqlClient.SqlConnection(); - this._connection.ConnectionString = global::MapoDb.Properties.Settings.Default.MoonProConnectionString; + this._connection.ConnectionString = global::MapoDb.Properties.Settings.Default.MoonPro_FluxDataConnectionString; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] diff --git a/MapoDb/DS_applicazione.xsd b/MapoDb/DS_applicazione.xsd index fc37c08a..e78c8e9b 100644 --- a/MapoDb/DS_applicazione.xsd +++ b/MapoDb/DS_applicazione.xsd @@ -5,6 +5,7 @@ + @@ -2475,7 +2476,7 @@ SELECT CodArticolo, DescArticolo, CurrRev, ProdRev, FlagIsNew, Disegno FROM Anag - + DELETE FROM [dbo].[FluxLog] WHERE (([IdxMacchina] = @Original_IdxMacchina) AND ([dtEvento] = @Original_dtEvento) AND ([CodFlux] = @Original_CodFlux) AND ([Valore] = @Original_Valore) AND ([Cnt] = @Original_Cnt)) @@ -2535,7 +2536,7 @@ SELECT IdxMacchina, dtEvento, CodFlux, Valore, Cnt FROM FluxLog WHERE (CodFlux = - + dbo.stp_FL_getFilt @@ -2549,7 +2550,7 @@ SELECT IdxMacchina, dtEvento, CodFlux, Valore, Cnt FROM FluxLog WHERE (CodFlux = - + dbo.stp_FL_getFiltCount @@ -2564,7 +2565,7 @@ SELECT IdxMacchina, dtEvento, CodFlux, Valore, Cnt FROM FluxLog WHERE (CodFlux = - + dbo.stp_FL_getFiltOrdered @@ -2579,7 +2580,7 @@ SELECT IdxMacchina, dtEvento, CodFlux, Valore, Cnt FROM FluxLog WHERE (CodFlux = - + dbo.stp_FL_getFiltPaged @@ -2596,7 +2597,7 @@ SELECT IdxMacchina, dtEvento, CodFlux, Valore, Cnt FROM FluxLog WHERE (CodFlux = - + dbo.stp_FL_getFirstByMacc @@ -2608,7 +2609,7 @@ SELECT IdxMacchina, dtEvento, CodFlux, Valore, Cnt FROM FluxLog WHERE (CodFlux = - + dbo.stp_FL_InsNew @@ -2623,7 +2624,7 @@ SELECT IdxMacchina, dtEvento, CodFlux, Valore, Cnt FROM FluxLog WHERE (CodFlux = - + dbo.stp_FL_TakeSnapshot @@ -2635,7 +2636,7 @@ SELECT IdxMacchina, dtEvento, CodFlux, Valore, Cnt FROM FluxLog WHERE (CodFlux = - + dbo.stp_FL_TakeSnapshotLast @@ -3985,17 +3986,17 @@ SELECT IdxMacchina, dtEvento, CodFlux, Valore, Cnt FROM FluxLog WHERE (CodFlux = - + - + - + @@ -4136,33 +4137,33 @@ SELECT IdxMacchina, dtEvento, CodFlux, Valore, Cnt FROM FluxLog WHERE (CodFlux = - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MapoDb/DataLayer.cs b/MapoDb/DataLayer.cs index e8687ab3..dd88eba2 100644 --- a/MapoDb/DataLayer.cs +++ b/MapoDb/DataLayer.cs @@ -4369,6 +4369,7 @@ namespace MapoDb string connectionStringIS = memLayer.ML.confReadString("MoonProConnectionStringIS"); string connectionStringArca = memLayer.ML.confReadString("MoonProConnectionStringArca"); string connectionStringES3 = memLayer.ML.confReadString("MoonProConnectionStringES3"); + string connectionStringFluxData = memLayer.ML.confReadString("MoonProConnectionStringFluxData"); string connectionStringMAG = memLayer.ML.confReadString("MoonProConnectionStringMAG"); // connections del db taAG.Connection.ConnectionString = connectionString; @@ -4383,7 +4384,7 @@ namespace MapoDb taCalFF.Connection.ConnectionString = connectionString; taConfig.Connection.ConnectionString = connectionString; taComm.Connection.ConnectionString = connectionString; - taConfFlux.Connection.ConnectionString = connectionString; + taConfFlux.Connection.ConnectionString = connectionStringFluxData; taDatiConf.Connection.ConnectionString = connectionString; taDatiMacchine.Connection.ConnectionString = connectionString; taDatiProd.Connection.ConnectionString = connectionString; @@ -4391,9 +4392,9 @@ namespace MapoDb taDatiProdMacchPer.Connection.ConnectionString = connectionString; taDatiStatoMacch.Connection.ConnectionString = connectionString; taDiarioDich.Connection.ConnectionString = connectionString; - taDOSS.Connection.ConnectionString = connectionString; + taDOSS.Connection.ConnectionString = connectionStringFluxData; taEventi.Connection.ConnectionString = connectionString; - taFL.Connection.ConnectionString = connectionString; + taFL.Connection.ConnectionString = connectionStringFluxData; taIS_TrDati.Connection.ConnectionString = connectionStringIS; taIstK.Connection.ConnectionString = connectionStringIS; taKeepAlive.Connection.ConnectionString = connectionString; diff --git a/MapoDb/Properties/Settings.Designer.cs b/MapoDb/Properties/Settings.Designer.cs index a40daa65..fb665dea 100644 --- a/MapoDb/Properties/Settings.Designer.cs +++ b/MapoDb/Properties/Settings.Designer.cs @@ -12,7 +12,7 @@ namespace MapoDb.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.11.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.12.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); @@ -88,5 +88,16 @@ namespace MapoDb.Properties { return ((string)(this["MoonPro_MAGConnectionString"])); } } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)] + [global::System.Configuration.DefaultSettingValueAttribute("Data Source=SQL2016DEV;Initial Catalog=MoonPro_FluxData;Persist Security Info=Tru" + + "e;User ID=sa;Password=keyhammer16;TrustServerCertificate=True")] + public string MoonPro_FluxDataConnectionString { + get { + return ((string)(this["MoonPro_FluxDataConnectionString"])); + } + } } } diff --git a/MapoDb/Properties/Settings.settings b/MapoDb/Properties/Settings.settings index bf25ac11..3afda9f2 100644 --- a/MapoDb/Properties/Settings.settings +++ b/MapoDb/Properties/Settings.settings @@ -50,5 +50,13 @@ </SerializableConnectionString> Data Source=SQL2016DEV;Initial Catalog=MoonPro_MAG;Persist Security Info=True;User ID=sa;Password=keyhammer16; TrustServerCertificate=True; + + <?xml version="1.0" encoding="utf-16"?> +<SerializableConnectionString xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <ConnectionString>Data Source=SQL2016DEV;Initial Catalog=MoonPro_FluxData;Persist Security Info=True;User ID=sa;Password=keyhammer16;TrustServerCertificate=True</ConnectionString> + <ProviderName>System.Data.SqlClient</ProviderName> +</SerializableConnectionString> + Data Source=SQL2016DEV;Initial Catalog=MoonPro_FluxData;Persist Security Info=True;User ID=sa;Password=keyhammer16;TrustServerCertificate=True + \ No newline at end of file diff --git a/MapoDb/app.config b/MapoDb/app.config index 1b427616..016338f7 100644 --- a/MapoDb/app.config +++ b/MapoDb/app.config @@ -1,109 +1,125 @@  - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From a7bfc78395602df7094eac52114620a1561bf1b5 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Wed, 19 Feb 2025 12:11:15 +0100 Subject: [PATCH 05/14] Fix ritardo autoOdl x evitare problemi conferme non prese da sim in ufficio (clock drift IIS/SQL) --- MapoDb/DataLayer.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MapoDb/DataLayer.cs b/MapoDb/DataLayer.cs index dd88eba2..5ba70cbe 100644 --- a/MapoDb/DataLayer.cs +++ b/MapoDb/DataLayer.cs @@ -832,8 +832,8 @@ namespace MapoDb Log.Info($"Eccezione in ConfermaProduzione{Environment.NewLine}{exc}", tipoLog.EXCEPTION); } } - // attendo 100 msec - Thread.Sleep(100); + // attendo 1000 msec x chiudere ODL + Thread.Sleep(1000); // chiamo splitOdl MapoDbObj.taODL.autoStart(currData[0].IdxODL, 0, idxMacchina, currData[0].TCRichAttr, currData[0].PzPallet, $"Nuovo ODL da forceSplitOdl", true, qtyNew, keyRichiesta); // elimino eventuale ODL precedente... From 0e646b1d6fbd25aa20d00c5e28ea5b594743f98b Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Mon, 24 Feb 2025 11:40:02 +0100 Subject: [PATCH 06/14] Update stored AutoODL --- MapoDb/DS_ProdTempi.xsd | 560 ++++++++++++++++++++-------------------- MapoDb/DS_ProdTempi.xss | 30 +-- MapoDb/DataLayer.cs | 1 + MapoDb/MapoDb.csproj | 1 - MapoDb/app.config | 31 +-- 5 files changed, 305 insertions(+), 318 deletions(-) diff --git a/MapoDb/DS_ProdTempi.xsd b/MapoDb/DS_ProdTempi.xsd index 4f9097e8..22f2e0d3 100644 --- a/MapoDb/DS_ProdTempi.xsd +++ b/MapoDb/DS_ProdTempi.xsd @@ -269,7 +269,7 @@ FROM v_ODL_exp ORDER BY IdxODL DESC - + dbo.stp_ODL_AutoDayGenerFull @@ -290,7 +290,7 @@ FROM v_ODL_exp ORDER BY IdxODL DESC - + dbo.stp_ODL_AutoStart @@ -309,7 +309,7 @@ FROM v_ODL_exp ORDER BY IdxODL DESC - + dbo.stp_ODL_clearSetup @@ -321,7 +321,7 @@ FROM v_ODL_exp ORDER BY IdxODL DESC - + dbo.stp_ODL_deleteQuery @@ -332,7 +332,7 @@ FROM v_ODL_exp ORDER BY IdxODL DESC - + dbo.stp_ODL_dividiDaAltraTav @@ -345,7 +345,7 @@ FROM v_ODL_exp ORDER BY IdxODL DESC - + dbo.stp_ODL_fineProd @@ -357,7 +357,7 @@ FROM v_ODL_exp ORDER BY IdxODL DESC - + dbo.stp_ODL_fixMachineSlave @@ -370,7 +370,7 @@ FROM v_ODL_exp ORDER BY IdxODL DESC - + dbo.stp_ODL_forceClose @@ -488,7 +488,7 @@ FROM v_ODL_exp ORDER BY IdxODL DESC - + dbo.stp_ODL_inizioSetup @@ -504,7 +504,7 @@ FROM v_ODL_exp ORDER BY IdxODL DESC - + dbo.stp_ODL_inizioSetupPromessa @@ -521,7 +521,7 @@ FROM v_ODL_exp ORDER BY IdxODL DESC - + dbo.stp_ODL_inizioSetupPromessaPostuma @@ -534,7 +534,7 @@ FROM v_ODL_exp ORDER BY IdxODL DESC - + dbo.stp_ODL_insertProvv @@ -550,7 +550,7 @@ FROM v_ODL_exp ORDER BY IdxODL DESC - + dbo.stp_ODL_insertQuery @@ -568,7 +568,7 @@ FROM v_ODL_exp ORDER BY IdxODL DESC - + dbo.stp_ODL_insPostumo @@ -591,7 +591,7 @@ FROM v_ODL_exp ORDER BY IdxODL DESC - + dbo.stp_ODL_split @@ -609,7 +609,7 @@ FROM v_ODL_exp ORDER BY IdxODL DESC - + dbo.stp_ODL_updateQta @@ -622,7 +622,7 @@ FROM v_ODL_exp ORDER BY IdxODL DESC - + dbo.stp_ODL_update @@ -642,7 +642,7 @@ FROM v_ODL_exp ORDER BY IdxODL DESC - + dbo.stp_ODL_updateSetup @@ -2511,7 +2511,7 @@ FROM v_ECP - + dbo.stp_StatoProd_getByMacchina @@ -2535,6 +2535,7 @@ FROM v_ECP + @@ -2628,109 +2629,109 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + - + - + - + - - - + + + - + - - + + - + - + - + - + - - - - - + + + + + - - + + - - - - + + + + - - + + - + @@ -2740,53 +2741,53 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + - + - + - + - + - + - - + + - + @@ -2796,72 +2797,72 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + - - + + - - + + - - - + + + - + - + - + - + - + - + - - - + + + @@ -2871,70 +2872,70 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + - + - - - + + + - + - - - - - - + + + + + + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + - - + + @@ -2944,50 +2945,50 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + - + - + - - - - - - + + + + + + - + - - - - - - - - + + + + + + + + - + @@ -2997,178 +2998,178 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - + + - + - - - - - + + + + + - + - + - - - + + + - + - - - + + + - + - + - + - - - + + + - + - - - - + + + + - - + + - - - - - - - - - - - - + + + + + + + + + + + + - + - - - - - - + + + + + + - + - - - - - - + + + + + + - + @@ -3178,35 +3179,35 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + - + - + - + - - - - - + + + + + @@ -3216,36 +3217,36 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + - - - + + + - - + + - - - + + + - + @@ -3255,63 +3256,63 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + - + - - + + - + - - + + - + - - - + + + - + - + @@ -3321,89 +3322,89 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + - - + + - + - - - + + + - + - + - + - + - + - - - - - - + + + + + + - + - - + + @@ -3413,32 +3414,32 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + - - + + - - - - - - - + + + + + + + - - + + @@ -3448,39 +3449,40 @@ SELECT IdxMacchina, IdxMacchinaSlave FROM Macchine2Slave WHERE (IdxMacchina = @I - + - + - - - - - - - - - + + + + + + + + + + - + - + - + diff --git a/MapoDb/DS_ProdTempi.xss b/MapoDb/DS_ProdTempi.xss index 8bbfcec7..bd561064 100644 --- a/MapoDb/DS_ProdTempi.xss +++ b/MapoDb/DS_ProdTempi.xss @@ -4,32 +4,32 @@ Changes to this file may cause incorrect behavior and will be lost if the code is regenerated. --> - + - - + + - + - - + + - + - + - - + + - - - + + + - - + + \ No newline at end of file diff --git a/MapoDb/DataLayer.cs b/MapoDb/DataLayer.cs index 5ba70cbe..cce79563 100644 --- a/MapoDb/DataLayer.cs +++ b/MapoDb/DataLayer.cs @@ -832,6 +832,7 @@ namespace MapoDb Log.Info($"Eccezione in ConfermaProduzione{Environment.NewLine}{exc}", tipoLog.EXCEPTION); } } + // 2025.02.19 portato da 100 a 1000 ms attesa x evitare che ODL sia avviato PRIMA della conferma // attendo 1000 msec x chiudere ODL Thread.Sleep(1000); // chiamo splitOdl diff --git a/MapoDb/MapoDb.csproj b/MapoDb/MapoDb.csproj index 8a0a08f6..6053d09d 100644 --- a/MapoDb/MapoDb.csproj +++ b/MapoDb/MapoDb.csproj @@ -385,7 +385,6 @@ Designer MSDataSetGenerator - DS_ProdTempi1.Designer.cs DS_ProdTempi.xsd diff --git a/MapoDb/app.config b/MapoDb/app.config index 016338f7..02bee836 100644 --- a/MapoDb/app.config +++ b/MapoDb/app.config @@ -5,29 +5,14 @@
- - - - - - - - + + + + + + + + From ce8c5ba23ee726aba925db17048aaa9714bf0d3d Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Mon, 24 Feb 2025 16:40:40 +0100 Subject: [PATCH 07/14] Update metodo lettura reboot --- MP-IO/Controllers/IOBController.cs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/MP-IO/Controllers/IOBController.cs b/MP-IO/Controllers/IOBController.cs index 47b3a7ec..93ea9087 100644 --- a/MP-IO/Controllers/IOBController.cs +++ b/MP-IO/Controllers/IOBController.cs @@ -258,7 +258,7 @@ namespace MP_IO.Controllers { if (memLayer.ML.CRI("_logLevel") > 6) { - logger.lg.scriviLog($"Valori letti: idxMacchina: {id} | valore: {item.valore}", tipoLog.INFO); + logger.lg.scriviLog($"Valori letti: id: {id} | valore: {item.valore}", tipoLog.INFO); } // formato datetime come yyyyMMddHHmmssfff -->es: 20181223180600000 @@ -455,7 +455,7 @@ namespace MP_IO.Controllers DateTime dataOraEvento = DateTime.Now; if (memLayer.ML.CRI("_logLevel") > 6) { - logger.lg.scriviLog($"Valori letti: idxMacchina: {id} | flux: {flux} valore: {valore}", tipoLog.INFO); + logger.lg.scriviLog($"Valori letti: id: {id} | flux: {flux} valore: {valore}", tipoLog.INFO); } try { @@ -1589,7 +1589,7 @@ namespace MP_IO.Controllers DateTime dataOraEvento = DateTime.Now; if (memLayer.ML.CRI("_logLevel") > 6) { - logger.lg.scriviLog($"Valori letti: idxMacchina: {id} | valore: {valore}", tipoLog.INFO); + logger.lg.scriviLog($"Valori letti: id: {id} | valore: {valore}", tipoLog.INFO); } try { @@ -1652,7 +1652,7 @@ namespace MP_IO.Controllers DateTime dataOraEvento = DateTime.Now; if (memLayer.ML.CRI("_logLevel") > 6) { - logger.lg.scriviLog($"Valori Live:{Environment.NewLine}idxMacchina: {id}{Environment.NewLine}liveData: {liveData}", tipoLog.INFO); + logger.lg.scriviLog($"Valori Live:{Environment.NewLine}id: {id}{Environment.NewLine}liveData: {liveData}", tipoLog.INFO); } try { @@ -2008,7 +2008,7 @@ namespace MP_IO.Controllers string answ = ""; DateTime dataOraEvento = DateTime.Now; // salvo SEMPRE log x questo tipo di dati! - logger.lg.scriviLog($"Salvataggio incremento contapezzi | idxMacchina: {id} | pezzi: {qty}", tipoLog.INFO); + logger.lg.scriviLog($"Salvataggio incremento contapezzi | id: {id} | pezzi: {qty}", tipoLog.INFO); try { DataLayer DataLayerObj = new DataLayer(); @@ -2041,7 +2041,7 @@ namespace MP_IO.Controllers string answ = ""; DateTime dataOraEvento = DateTime.Now; // salvo SEMPRE log x questo tipo di dati! - logger.lg.scriviLog($"Salvataggio incremento contapezzi | idxMacchina: {id} | pezzi: {qty}", tipoLog.INFO); + logger.lg.scriviLog($"Salvataggio incremento contapezzi | id: {id} | pezzi: {qty}", tipoLog.INFO); try { DataLayer DataLayerObj = new DataLayer(); @@ -2114,9 +2114,9 @@ namespace MP_IO.Controllers } /// Salva MAC adress + IP dopo il reboot - /// GET: IOB/sendReboot?idxMacchina=5&mac=18:C0:4D:37:3C:8C IP + /// GET: IOB/sendReboot/SIMUL_05?mac=18:C0:4D:37:3C:8C
IP /// del Gateway - public string sendReboot(string idxMacchina, string mac) + public string sendReboot(string id, string mac) { string answ = "NO"; string IPv4 = ""; @@ -2133,7 +2133,7 @@ namespace MP_IO.Controllers { // ora salvo che la macchina è stata (ri)avviata... MapoDb.MapoDb MapoDbObj = new MapoDb.MapoDb(); - MapoDbObj.registraStartup(idxMacchina, IPv4, agent, mac); + MapoDbObj.registraStartup(id, IPv4, agent, mac); answ = "OK"; } catch (Exception exc) @@ -2179,7 +2179,7 @@ namespace MP_IO.Controllers DateTime dataOraEvento = DateTime.Now; if (memLayer.ML.CRI("_logLevel") > 6) { - logger.lg.scriviLog($"Salvataggio counter | idxMacchina: {id}", tipoLog.INFO); + logger.lg.scriviLog($"Salvataggio counter | id: {id}", tipoLog.INFO); } try { @@ -2394,7 +2394,7 @@ namespace MP_IO.Controllers DateTime dataOraEvento = DateTime.Now; if (memLayer.ML.CRI("_logLevel") > 6) { - logger.lg.scriviLog($"ulog | Valori letti: idxMacchina: {id} | flux: {flux} valore: {valore} | matrOpr: {matrOpr} | label: {label} | valNum: {valNum}", tipoLog.INFO); + logger.lg.scriviLog($"ulog | Valori letti: id: {id} | flux: {flux} valore: {valore} | matrOpr: {matrOpr} | label: {label} | valNum: {valNum}", tipoLog.INFO); } try { @@ -2591,7 +2591,7 @@ namespace MP_IO.Controllers DateTime dataOraEvento = DateTime.Now; if (memLayer.ML.CRI("_logLevel") > 6) { - logger.lg.scriviLog($"{caller} | Richiesta snapshot dati FluxLog macchina: idxMacchina: {id} | periodo: {dtStart} - {dtEnd}", tipoLog.INFO); + logger.lg.scriviLog($"{caller} | Richiesta snapshot dati FluxLog macchina: id: {id} | periodo: {dtStart} - {dtEnd}", tipoLog.INFO); } try { From 8e14f689c58b060ebb26b7e202e3692e2397dcef Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 4 Mar 2025 08:11:21 +0100 Subject: [PATCH 08/14] Aggiunta scrittura keepalive su check enabled IOB --- MP-IO/Controllers/IOBController.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/MP-IO/Controllers/IOBController.cs b/MP-IO/Controllers/IOBController.cs index 93ea9087..9b80ba42 100644 --- a/MP-IO/Controllers/IOBController.cs +++ b/MP-IO/Controllers/IOBController.cs @@ -185,7 +185,11 @@ namespace MP_IO.Controllers return answ; } - // GET: IOB/enabled/SIMUL_03 + /// + /// GET: IOB/enabled/SIMUL_03 + /// + /// + /// public string enabled(string id) { string answ = "ND"; @@ -201,6 +205,9 @@ namespace MP_IO.Controllers DataLayer DataLayerObj = new DataLayer(); // salvo risposta! answ = DataLayerObj.insEnab(id) ? "OK" : "NO"; + // 2025.03.04 aggiunto keepalive x evitare C101 + MapoDb.MapoDb connDb = new MapoDb.MapoDb(); + connDb.scriviKeepAlive(id, DateTime.Now); } catch (Exception exc) { From 48d868d58dd8c174da2c4a2ba27fd3e8fe97b72a Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 11 Mar 2025 15:41:30 +0100 Subject: [PATCH 09/14] Update gestione creazione FluxLog automatici --- MP-IO/Controllers/IOBController.cs | 13 +++++++++---- MapoDb/DataLayer.cs | 5 +++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/MP-IO/Controllers/IOBController.cs b/MP-IO/Controllers/IOBController.cs index 9b80ba42..bd64e85f 100644 --- a/MP-IO/Controllers/IOBController.cs +++ b/MP-IO/Controllers/IOBController.cs @@ -592,10 +592,15 @@ namespace MP_IO.Controllers return answ; } - /// Creazione nuovo ODL dato CodXdl + numPz - /// GET: IOB/forceCreatePOdl/SIMUL_03?CodXdl=ABCD_1234&numPz=5 IdxODL creato + /// + /// Creazione nuovo ODL dato CodXdl + numPz + /// GET: IOB/forceCreatePOdl/SIMUL_03?CodXdl=ABCD_1234&numPz=5 + /// + /// + /// + /// + /// + /// IdxODL creato public int forceCreatePOdl(string id, string CodArt, string CodGruppo, int numPz) { int answ = 0; diff --git a/MapoDb/DataLayer.cs b/MapoDb/DataLayer.cs index cce79563..53680f28 100644 --- a/MapoDb/DataLayer.cs +++ b/MapoDb/DataLayer.cs @@ -836,7 +836,7 @@ namespace MapoDb // attendo 1000 msec x chiudere ODL Thread.Sleep(1000); // chiamo splitOdl - MapoDbObj.taODL.autoStart(currData[0].IdxODL, 0, idxMacchina, currData[0].TCRichAttr, currData[0].PzPallet, $"Nuovo ODL da forceSplitOdl", true, qtyNew, keyRichiesta); + MapoDbObj.taODL.autoStart(currData[0].IdxODL, 0, idxMacchina, currData[0].TCRichAttr, currData[0].PzPallet, $"Nuovo ODL da forceSplitOdl.autoStart", true, qtyNew, keyRichiesta); // elimino eventuale ODL precedente... string rKey = memLayer.ML.redHash($"ODL:{idxMacchina}"); memLayer.ML.setRSV(rKey, ""); @@ -887,6 +887,7 @@ namespace MapoDb ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now); outData = $"TS:{ts}|MATR:{MatrOpr}|ODL:{newOdl}"; addTask4Machine(machine.IdxMacchinaSlave, taskType.fixStopSetup, outData); + addTask4Machine(machine.IdxMacchinaSlave, taskType.forceResetPzCount, outData); // invio task caricamento dati ODL addTask4Machine(machine.IdxMacchinaSlave, taskType.setArt, setArtVal); @@ -2366,7 +2367,7 @@ namespace MapoDb // ...oppure dritto su DB else { - answ = MapoDbObj.isMulti(idxMacchina); + answ = MapoDbObj.isSlave(idxMacchina); } return answ; } From 9ef4349380410a336db4178b0e89f0516e5f87ba Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 11 Mar 2025 15:54:13 +0100 Subject: [PATCH 10/14] Fix create MAX ADD Auto Dossiers --- MP-IO/Controllers/IOBController.cs | 3 ++- MapoDb/DataLayer.cs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/MP-IO/Controllers/IOBController.cs b/MP-IO/Controllers/IOBController.cs index bd64e85f..5770e5db 100644 --- a/MP-IO/Controllers/IOBController.cs +++ b/MP-IO/Controllers/IOBController.cs @@ -332,7 +332,8 @@ namespace MP_IO.Controllers string caller = $"takeFlogSnapshot({id})"; DateTime dtStart = dtFrom.Date; DateTime dtEnd = dtFrom; - int maxAdd = 5; + // max 10 dossier alla volta (se non configurato diversamente) + int maxAdd = memLayer.ML.CRI("IO_numDossMaxCreate"); if (dtStart < dtTo) { // verifico di avere almeno 1 dossier da produrre ciclo fino ad esaurire le diff --git a/MapoDb/DataLayer.cs b/MapoDb/DataLayer.cs index 53680f28..10c28ea0 100644 --- a/MapoDb/DataLayer.cs +++ b/MapoDb/DataLayer.cs @@ -1461,7 +1461,7 @@ namespace MapoDb { DataLayer man = new DataLayer(); rawData = memLayer.ML.getRSV(redKey); - if (!string.IsNullOrEmpty(rawData)) + if (!string.IsNullOrEmpty(rawData) && rawData.Length > 2) { var redisResult = JsonConvert.DeserializeObject>(rawData); resultList = redisResult != null ? redisResult : new List(); From b8a4bdb8a53bafd7888ba4ef59743c2b5ba61133 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Mon, 17 Mar 2025 13:36:53 +0100 Subject: [PATCH 11/14] Update x gestione padding a 6 zeri dati ODL/PODL --- MP-Site/WebUserControls/mod_infoAggiuntive.ascx.cs | 4 ++-- MP-Site/WebUserControls/mod_statoMacchina.ascx.cs | 2 +- MP-TAB/WebUserControls/mod_ODL.ascx.cs | 2 +- MP-TAB/WebUserControls/mod_dettMacchina.ascx | 2 +- MP-TAB/WebUserControls/mod_mappaStato.ascx | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/MP-Site/WebUserControls/mod_infoAggiuntive.ascx.cs b/MP-Site/WebUserControls/mod_infoAggiuntive.ascx.cs index 1e9883b9..27ced16d 100644 --- a/MP-Site/WebUserControls/mod_infoAggiuntive.ascx.cs +++ b/MP-Site/WebUserControls/mod_infoAggiuntive.ascx.cs @@ -78,8 +78,8 @@ namespace MP_SITE.WebUserControls } } dataFrom = rigaOdl.DataInizio; - lblOdl.Text = idxPOdl > 0 ? $"PODL{idxPOdl:00000000} | " : "[NO PODL] "; - lblOdl.Text += $"ODL{idxOdl:00000000}"; + lblOdl.Text = idxPOdl > 0 ? $"PODL{idxPOdl:000000} | " : "[NO PODL] "; + lblOdl.Text += $"ODL{idxOdl:000000}"; lblOdlPer.Text = $"start: {dataFrom:dd/MM/yy HH:mm}"; } catch diff --git a/MP-Site/WebUserControls/mod_statoMacchina.ascx.cs b/MP-Site/WebUserControls/mod_statoMacchina.ascx.cs index a424c639..2bf65653 100644 --- a/MP-Site/WebUserControls/mod_statoMacchina.ascx.cs +++ b/MP-Site/WebUserControls/mod_statoMacchina.ascx.cs @@ -392,7 +392,7 @@ namespace MP_SITE.WebUserControls // leggo valori da MSE... valMacchina.Text = tabMSE[0].Nome; valCodArticolo.Text = tabMSE[0].CodArticolo; - valPODL.Text = tabMSE[0].idxPODL > 0 ? $"PODL{tabMSE[0].idxPODL:00000000}" : "PODL -"; + valPODL.Text = tabMSE[0].idxPODL > 0 ? $"PODL{tabMSE[0].idxPODL:000000}" : "PODL -"; valODL.Text = tabMSE[0].idxODL > 0 ? $"ODL{tabMSE[0].idxODL}" : "ODL -"; // carico ultimo stato che sia durato almeno 6 sec (0.1 min) int idxStato = 0; diff --git a/MP-TAB/WebUserControls/mod_ODL.ascx.cs b/MP-TAB/WebUserControls/mod_ODL.ascx.cs index df4804c2..dbeb6217 100644 --- a/MP-TAB/WebUserControls/mod_ODL.ascx.cs +++ b/MP-TAB/WebUserControls/mod_ODL.ascx.cs @@ -1209,7 +1209,7 @@ namespace MoonProTablet.WebUserControls var datiODL = DataLayerObj.taODL.getByMacchina(idxMacchinaFix)[0]; string setArtVal = $"{datiODL.CodArticolo}"; string setPzCommVal = $"{datiODL.NumPezzi}"; - string setCommVal = $"ODL{datiODL.IdxODL:00000000}"; + string setCommVal = $"ODL{datiODL.IdxODL:000000}"; // FIXME TODO: scrivere come sotto? testare valvital x linea LASCO DataLayerObj.addTask4Machine(idxMacchinaFix, taskType.startSetup, outData); DataLayerObj.addTask4Machine(idxMacchinaFix, taskType.setArt, setArtVal); diff --git a/MP-TAB/WebUserControls/mod_dettMacchina.ascx b/MP-TAB/WebUserControls/mod_dettMacchina.ascx index deab4ed4..84e961c7 100644 --- a/MP-TAB/WebUserControls/mod_dettMacchina.ascx +++ b/MP-TAB/WebUserControls/mod_dettMacchina.ascx @@ -21,7 +21,7 @@
- +
diff --git a/MP-TAB/WebUserControls/mod_mappaStato.ascx b/MP-TAB/WebUserControls/mod_mappaStato.ascx index f0ab645a..ee979854 100644 --- a/MP-TAB/WebUserControls/mod_mappaStato.ascx +++ b/MP-TAB/WebUserControls/mod_mappaStato.ascx @@ -23,10 +23,10 @@
- +
- +
From 8c063797e2756f47898da4ea83c1952641063f1b Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 21 Mar 2025 16:39:58 +0100 Subject: [PATCH 12/14] Update x nomi + favicon --- MP-ADM/WebMasterPages/MoonPro.master | 2 +- MP-IO/status.aspx | 2 +- MP-SITE/images/favicon.png | Bin 0 -> 83407 bytes MP-Site/MP-Site.csproj | 1 + MP-Site/WebMasterPages/MAPO_refresh.master | 2 +- 5 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 MP-SITE/images/favicon.png diff --git a/MP-ADM/WebMasterPages/MoonPro.master b/MP-ADM/WebMasterPages/MoonPro.master index d123435c..c43db5d5 100644 --- a/MP-ADM/WebMasterPages/MoonPro.master +++ b/MP-ADM/WebMasterPages/MoonPro.master @@ -12,7 +12,7 @@ - MP-ADM: <%: SteamWare.devicesAuthProxy.getPage(Request.Url) %> + MP-ADM diff --git a/MP-IO/status.aspx b/MP-IO/status.aspx index 99803f15..e91e0b32 100644 --- a/MP-IO/status.aspx +++ b/MP-IO/status.aspx @@ -4,7 +4,7 @@ - + MP-IO
diff --git a/MP-SITE/images/favicon.png b/MP-SITE/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..7552c223686fb1dcf364d0720c5fe908485f24dc GIT binary patch literal 83407 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 literal 0 HcmV?d00001 diff --git a/MP-Site/MP-Site.csproj b/MP-Site/MP-Site.csproj index 4fea6212..4280c12b 100644 --- a/MP-Site/MP-Site.csproj +++ b/MP-Site/MP-Site.csproj @@ -324,6 +324,7 @@ + diff --git a/MP-Site/WebMasterPages/MAPO_refresh.master b/MP-Site/WebMasterPages/MAPO_refresh.master index f07801c1..10b87914 100644 --- a/MP-Site/WebMasterPages/MAPO_refresh.master +++ b/MP-Site/WebMasterPages/MAPO_refresh.master @@ -6,7 +6,7 @@ - MP.SITE: <%: SteamWare.devicesAuthProxy.getPage(Request.Url) %> + MP-SITE <%--vecchie libs esterne da deprecare--%> <%----%> <%-- From 57eda21415868ebfafad432597bd91db7c667182 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 29 May 2025 08:58:28 +0200 Subject: [PATCH 13/14] update naming files + eliminazione file vecchio, typo --- MP-ADM/WebUserControls/mod_barcode.ascx.cs | 4 +- ...1.Designer.cs => DS_ProdTempi.Designer.cs} | 48 ++++++++++++++++++- MapoDb/MapoDb.csproj | 3 +- 3 files changed, 50 insertions(+), 5 deletions(-) rename MapoDb/{DS_ProdTempi1.Designer.cs => DS_ProdTempi.Designer.cs} (99%) diff --git a/MP-ADM/WebUserControls/mod_barcode.ascx.cs b/MP-ADM/WebUserControls/mod_barcode.ascx.cs index 1c445b2f..a69d29ab 100644 --- a/MP-ADM/WebUserControls/mod_barcode.ascx.cs +++ b/MP-ADM/WebUserControls/mod_barcode.ascx.cs @@ -382,7 +382,7 @@ namespace MP_ADM.WebUserControls DS_ProdTempi.PromesseODLDataTable tabPODL = new DS_ProdTempi.PromesseODLDataTable(); if (memLayer.ML.cdvb("mpAdm_TcFromPODL")) { - // controllos e richiesto ricerca preliminare x articolo + macchina + // controllo se richiesto ricerca preliminare x articolo + macchina if (memLayer.ML.cdvb("mpAdm_TcByMachine")) { // recupero TC promessa da ultimo per articolo/macchina @@ -673,7 +673,7 @@ namespace MP_ADM.WebUserControls #region Public Methods /// - /// effettua al ettura da sessione del comando cliccato e lo inserisce come fosse barcode + /// effettua la lettura da sessione del comando cliccato e lo inserisce come fosse barcode /// public void loadBtnClickComando() { diff --git a/MapoDb/DS_ProdTempi1.Designer.cs b/MapoDb/DS_ProdTempi.Designer.cs similarity index 99% rename from MapoDb/DS_ProdTempi1.Designer.cs rename to MapoDb/DS_ProdTempi.Designer.cs index 4c7d77c9..5c8fe055 100644 --- a/MapoDb/DS_ProdTempi1.Designer.cs +++ b/MapoDb/DS_ProdTempi.Designer.cs @@ -9864,6 +9864,8 @@ namespace MapoDb { private global::System.Data.DataColumn columnDataTo; + private global::System.Data.DataColumn columnPz2RecRilav; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "17.0.0.0")] public StatoProdDataTable() { @@ -9977,6 +9979,14 @@ namespace MapoDb { } } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "17.0.0.0")] + public global::System.Data.DataColumn Pz2RecRilavColumn { + get { + return this.columnPz2RecRilav; + } + } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "17.0.0.0")] [global::System.ComponentModel.Browsable(false)] @@ -10014,7 +10024,7 @@ namespace MapoDb { [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "17.0.0.0")] - public StatoProdRow AddStatoProdRow(string idxMacchina, int IdxOdl, int PzTotODL, int PzConfScarto, int PzConfBuoni, int PzRichODL, int Pz2RecTot, int Pz2RecScarto, System.DateTime DataFrom, System.DateTime DataTo) { + public StatoProdRow AddStatoProdRow(string idxMacchina, int IdxOdl, int PzTotODL, int PzConfScarto, int PzConfBuoni, int PzRichODL, int Pz2RecTot, int Pz2RecScarto, System.DateTime DataFrom, System.DateTime DataTo, int Pz2RecRilav) { StatoProdRow rowStatoProdRow = ((StatoProdRow)(this.NewRow())); object[] columnValuesArray = new object[] { idxMacchina, @@ -10026,7 +10036,8 @@ namespace MapoDb { Pz2RecTot, Pz2RecScarto, DataFrom, - DataTo}; + DataTo, + Pz2RecRilav}; rowStatoProdRow.ItemArray = columnValuesArray; this.Rows.Add(rowStatoProdRow); return rowStatoProdRow; @@ -10059,6 +10070,7 @@ namespace MapoDb { this.columnPz2RecScarto = base.Columns["Pz2RecScarto"]; this.columnDataFrom = base.Columns["DataFrom"]; this.columnDataTo = base.Columns["DataTo"]; + this.columnPz2RecRilav = base.Columns["Pz2RecRilav"]; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] @@ -10084,6 +10096,8 @@ namespace MapoDb { base.Columns.Add(this.columnDataFrom); this.columnDataTo = new global::System.Data.DataColumn("DataTo", typeof(global::System.DateTime), null, global::System.Data.MappingType.Element); base.Columns.Add(this.columnDataTo); + this.columnPz2RecRilav = new global::System.Data.DataColumn("Pz2RecRilav", typeof(int), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnPz2RecRilav); this.columnidxMacchina.ReadOnly = true; this.columnidxMacchina.MaxLength = 50; this.columnIdxOdl.ReadOnly = true; @@ -10095,6 +10109,7 @@ namespace MapoDb { this.columnPz2RecScarto.ReadOnly = true; this.columnDataFrom.ReadOnly = true; this.columnDataTo.ReadOnly = true; + this.columnPz2RecRilav.ReadOnly = true; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] @@ -15756,6 +15771,22 @@ namespace MapoDb { } } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "17.0.0.0")] + public int Pz2RecRilav { + get { + try { + return ((int)(this[this.tableStatoProd.Pz2RecRilavColumn])); + } + catch (global::System.InvalidCastException e) { + throw new global::System.Data.StrongTypingException("The value for column \'Pz2RecRilav\' in table \'StatoProd\' is DBNull.", e); + } + } + set { + this[this.tableStatoProd.Pz2RecRilavColumn] = value; + } + } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "17.0.0.0")] public bool IsidxMacchinaNull() { @@ -15875,6 +15906,18 @@ namespace MapoDb { public void SetDataToNull() { this[this.tableStatoProd.DataToColumn] = global::System.Convert.DBNull; } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "17.0.0.0")] + public bool IsPz2RecRilavNull() { + return this.IsNull(this.tableStatoProd.Pz2RecRilavColumn); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "17.0.0.0")] + public void SetPz2RecRilavNull() { + this[this.tableStatoProd.Pz2RecRilavColumn] = global::System.Convert.DBNull; + } } /// @@ -29230,6 +29273,7 @@ SELECT IdxMacchina, T1, T2, T3 FROM TurniMacchina WHERE (IdxMacchina = @IdxMacch tableMapping.ColumnMappings.Add("Pz2RecScarto", "Pz2RecScarto"); tableMapping.ColumnMappings.Add("DataFrom", "DataFrom"); tableMapping.ColumnMappings.Add("DataTo", "DataTo"); + tableMapping.ColumnMappings.Add("Pz2RecRilav", "Pz2RecRilav"); this._adapter.TableMappings.Add(tableMapping); } diff --git a/MapoDb/MapoDb.csproj b/MapoDb/MapoDb.csproj index 6053d09d..710d4b5b 100644 --- a/MapoDb/MapoDb.csproj +++ b/MapoDb/MapoDb.csproj @@ -268,7 +268,7 @@ DS_ProdTempi.xsd - + True True DS_ProdTempi.xsd @@ -385,6 +385,7 @@ Designer MSDataSetGenerator + DS_ProdTempi.Designer.cs DS_ProdTempi.xsd From 9bf846553672aa99e3980a3fd9387ed71e577fae Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 29 May 2025 08:58:47 +0200 Subject: [PATCH 14/14] SDK: aggiunto boolean x abilitazione invio parametri + threshold --- MapoSDK/dataConf.cs | 1 - MapoSDK/dataConfTSVC.cs | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/MapoSDK/dataConf.cs b/MapoSDK/dataConf.cs index a7f68619..94551b4a 100644 --- a/MapoSDK/dataConf.cs +++ b/MapoSDK/dataConf.cs @@ -67,7 +67,6 @@ namespace MapoSDK /// public string value { get; set; } = ""; - /// /// Decodifica per tipoMem = BitMap: /// Array di valori assegnati ai singoli bit diff --git a/MapoSDK/dataConfTSVC.cs b/MapoSDK/dataConfTSVC.cs index 932b5302..70d80d08 100644 --- a/MapoSDK/dataConfTSVC.cs +++ b/MapoSDK/dataConfTSVC.cs @@ -22,6 +22,22 @@ namespace MapoSDK /// public int period { get; set; } = 60; + /// + /// Indica se invio parametro abilitato (false = filtrato, no FluxLog send) + /// + public bool sendEnabled { get; set; } = true; + + /// + /// Valore della DeadBand per rilevare variazioni in valore assoluto, se nullo non impiegato + /// + public double? thresholdAbs { get; set; } = null; + + /// + /// Valore della DeadBand per rilevare variazioni in valore percentuale (5% = 0.05), se nullo non impiegato + /// + public double? thresholdPerc { get; set; } = null; + + #endregion Public Properties } } \ No newline at end of file