From 71ba46ec95363c3462edb010dbdc96d36958ea5a Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Tue, 3 Oct 2017 14:36:30 +0200 Subject: [PATCH] Continuo implementazione gestione bitmask... --- MapoDb/DS_applicazione.Designer.cs | 98 ++++++++++++++++++++++++++++-- MapoDb/DS_applicazione.xsd | 6 +- MapoDb/DataLayer.cs | 69 +++++++++++++++++++-- MapoDb/MapoDb.cs | 26 +++++++- 4 files changed, 188 insertions(+), 11 deletions(-) diff --git a/MapoDb/DS_applicazione.Designer.cs b/MapoDb/DS_applicazione.Designer.cs index 2b5f83b8..55dbe240 100644 --- a/MapoDb/DS_applicazione.Designer.cs +++ b/MapoDb/DS_applicazione.Designer.cs @@ -8637,8 +8637,12 @@ namespace MapoDb { private global::System.Data.DataColumn columnBitFilt; + private global::System.Data.DataColumn columnMaxVal; + private global::System.Data.DataColumn columnBSR; + private global::System.Data.DataColumn columnExplodeBit; + private global::System.Data.DataColumn columnIdxMicroStato; private global::System.Data.DataColumn columnIdxFamiglia; @@ -8778,6 +8782,14 @@ namespace MapoDb { } } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + public global::System.Data.DataColumn MaxValColumn { + get { + return this.columnMaxVal; + } + } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] public global::System.Data.DataColumn BSRColumn { @@ -8786,6 +8798,14 @@ namespace MapoDb { } } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + public global::System.Data.DataColumn ExplodeBitColumn { + get { + return this.columnExplodeBit; + } + } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] public global::System.Data.DataColumn IdxMicroStatoColumn { @@ -8905,9 +8925,11 @@ namespace MapoDb { bool insEnabled, bool sLogEnabled, int IdxFamigliaIngresso, - bool Multi, + int Multi, int BitFilt, + int MaxVal, int BSR, + bool ExplodeBit, int IdxMicroStato, int IdxFamiglia, int IdxStato, @@ -8930,7 +8952,9 @@ namespace MapoDb { IdxFamigliaIngresso, Multi, BitFilt, + MaxVal, BSR, + ExplodeBit, IdxMicroStato, IdxFamiglia, IdxStato, @@ -8980,7 +9004,9 @@ namespace MapoDb { this.columnIdxFamigliaIngresso = base.Columns["IdxFamigliaIngresso"]; this.columnMulti = base.Columns["Multi"]; this.columnBitFilt = base.Columns["BitFilt"]; + this.columnMaxVal = base.Columns["MaxVal"]; this.columnBSR = base.Columns["BSR"]; + this.columnExplodeBit = base.Columns["ExplodeBit"]; this.columnIdxMicroStato = base.Columns["IdxMicroStato"]; this.columnIdxFamiglia = base.Columns["IdxFamiglia"]; this.columnIdxStato = base.Columns["IdxStato"]; @@ -9013,12 +9039,16 @@ namespace MapoDb { base.Columns.Add(this.columnsLogEnabled); this.columnIdxFamigliaIngresso = new global::System.Data.DataColumn("IdxFamigliaIngresso", typeof(int), null, global::System.Data.MappingType.Element); base.Columns.Add(this.columnIdxFamigliaIngresso); - this.columnMulti = new global::System.Data.DataColumn("Multi", typeof(bool), null, global::System.Data.MappingType.Element); + this.columnMulti = new global::System.Data.DataColumn("Multi", typeof(int), null, global::System.Data.MappingType.Element); base.Columns.Add(this.columnMulti); this.columnBitFilt = new global::System.Data.DataColumn("BitFilt", typeof(int), null, global::System.Data.MappingType.Element); base.Columns.Add(this.columnBitFilt); + this.columnMaxVal = new global::System.Data.DataColumn("MaxVal", typeof(int), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnMaxVal); this.columnBSR = new global::System.Data.DataColumn("BSR", typeof(int), null, global::System.Data.MappingType.Element); base.Columns.Add(this.columnBSR); + this.columnExplodeBit = new global::System.Data.DataColumn("ExplodeBit", typeof(bool), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnExplodeBit); this.columnIdxMicroStato = new global::System.Data.DataColumn("IdxMicroStato", typeof(int), null, global::System.Data.MappingType.Element); base.Columns.Add(this.columnIdxMicroStato); this.columnIdxFamiglia = new global::System.Data.DataColumn("IdxFamiglia", typeof(int), null, global::System.Data.MappingType.Element); @@ -9055,7 +9085,9 @@ namespace MapoDb { this.columnIdxFamigliaIngresso.ReadOnly = true; this.columnMulti.ReadOnly = true; this.columnBitFilt.ReadOnly = true; + this.columnMaxVal.ReadOnly = true; this.columnBSR.ReadOnly = true; + this.columnExplodeBit.ReadOnly = true; this.columnIdxMicroStato.ReadOnly = true; this.columnIdxFamiglia.ReadOnly = true; this.columnIdxStato.ReadOnly = true; @@ -12527,10 +12559,10 @@ namespace MapoDb { [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] - public bool Multi { + public int Multi { get { try { - return ((bool)(this[this.tableMSFD.MultiColumn])); + return ((int)(this[this.tableMSFD.MultiColumn])); } catch (global::System.InvalidCastException e) { throw new global::System.Data.StrongTypingException("Il valore della colonna \'Multi\' nella tabella \'MSFD\' è DBNull.", e); @@ -12557,6 +12589,22 @@ namespace MapoDb { } } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + public int MaxVal { + get { + try { + return ((int)(this[this.tableMSFD.MaxValColumn])); + } + catch (global::System.InvalidCastException e) { + throw new global::System.Data.StrongTypingException("Il valore della colonna \'MaxVal\' nella tabella \'MSFD\' è DBNull.", e); + } + } + set { + this[this.tableMSFD.MaxValColumn] = value; + } + } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] public int BSR { @@ -12573,6 +12621,22 @@ namespace MapoDb { } } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + public bool ExplodeBit { + get { + try { + return ((bool)(this[this.tableMSFD.ExplodeBitColumn])); + } + catch (global::System.InvalidCastException e) { + throw new global::System.Data.StrongTypingException("Il valore della colonna \'ExplodeBit\' nella tabella \'MSFD\' è DBNull.", e); + } + } + set { + this[this.tableMSFD.ExplodeBitColumn] = value; + } + } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] public int IdxMicroStato { @@ -12837,6 +12901,18 @@ namespace MapoDb { this[this.tableMSFD.BitFiltColumn] = global::System.Convert.DBNull; } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + public bool IsMaxValNull() { + return this.IsNull(this.tableMSFD.MaxValColumn); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + public void SetMaxValNull() { + this[this.tableMSFD.MaxValColumn] = global::System.Convert.DBNull; + } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] public bool IsBSRNull() { @@ -12849,6 +12925,18 @@ namespace MapoDb { this[this.tableMSFD.BSRColumn] = global::System.Convert.DBNull; } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + public bool IsExplodeBitNull() { + return this.IsNull(this.tableMSFD.ExplodeBitColumn); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + public void SetExplodeBitNull() { + this[this.tableMSFD.ExplodeBitColumn] = global::System.Convert.DBNull; + } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] public bool IsIdxMicroStatoNull() { @@ -24780,7 +24868,9 @@ SELECT CodArticolo, DescArticolo, CurrRev, ProdRev, FlagIsNew FROM AnagArticoli tableMapping.ColumnMappings.Add("IdxFamigliaIngresso", "IdxFamigliaIngresso"); tableMapping.ColumnMappings.Add("Multi", "Multi"); tableMapping.ColumnMappings.Add("BitFilt", "BitFilt"); + tableMapping.ColumnMappings.Add("MaxVal", "MaxVal"); tableMapping.ColumnMappings.Add("BSR", "BSR"); + tableMapping.ColumnMappings.Add("ExplodeBit", "ExplodeBit"); tableMapping.ColumnMappings.Add("IdxMicroStato", "IdxMicroStato"); tableMapping.ColumnMappings.Add("IdxFamiglia", "IdxFamiglia"); tableMapping.ColumnMappings.Add("IdxStato", "IdxStato"); diff --git a/MapoDb/DS_applicazione.xsd b/MapoDb/DS_applicazione.xsd index 8f0d0336..1db86bd6 100644 --- a/MapoDb/DS_applicazione.xsd +++ b/MapoDb/DS_applicazione.xsd @@ -2359,7 +2359,9 @@ SELECT CodArticolo, DescArticolo, CurrRev, ProdRev, FlagIsNew FROM AnagArticoli + + @@ -3017,9 +3019,11 @@ SELECT CodArticolo, DescArticolo, CurrRev, ProdRev, FlagIsNew FROM AnagArticoli - + + + diff --git a/MapoDb/DataLayer.cs b/MapoDb/DataLayer.cs index 13df6f81..c511feea 100644 --- a/MapoDb/DataLayer.cs +++ b/MapoDb/DataLayer.cs @@ -473,11 +473,22 @@ namespace MapoDb { // scrivo keep alive!!! (se encessario, altrimenti è in cache...) connDb.scriviKeepAlive(idxMacchina, DateTime.Now); - // ora processo e salvo il valore del microstato... INTERNAMENTE gestisce i casi DB/REDIS secondo necessità - connDb.checkMicroStato(idxMacchina, valore, dataOraEvento, contatore); // verifico se sia una macchina MULTI ed in tal caso calcolo i SUB-systems e CHIAMERO' alla fine pure loro.... + if (DataLayer.isMulti(idxMacchina)) + { + // inizio preprocessing + // ora processo e salvo il valore del microstato... INTERNAMENTE gestisce i casi DB/REDIS secondo necessità + connDb.checkMicroStato(idxMacchina, valore, dataOraEvento, contatore); + // ora processo i SUB-systems + + } + else + { + // ora processo e salvo il valore del microstato... INTERNAMENTE gestisce i casi DB/REDIS secondo necessità + connDb.checkMicroStato(idxMacchina, valore, dataOraEvento, contatore); + } // registro in risposta che è andato tutto bene... answ = "OK"; } @@ -503,11 +514,22 @@ namespace MapoDb { // scrivo keep alive!!! (se encessario, altrimenti è in cache...) MapoDb.obj.scriviKeepAlive(idxMacchina, DateTime.Now); - // ora processo e salvo il valore del microstato... - MapoDb.obj.checkMicroStato(idxMacchina, valore, dataOraEvento, contatore); // verifico se sia una macchina MULTI ed in tal caso calcolo i SUB-systems e CHIAMERO' alla fine pure loro.... + if (MapoDb.obj.isMulti(idxMacchina)) + { + // inizio preprocessing + // ora processo e salvo il valore del microstato... + MapoDb.obj.checkMicroStato(idxMacchina, valore, dataOraEvento, contatore); + // ora processo i SUB-systems + + } + else + { + // ora processo e salvo il valore del microstato... + MapoDb.obj.checkMicroStato(idxMacchina, valore, dataOraEvento, contatore); + } answ = "OK"; // registro in risposta che è andato tutto bene... } catch (Exception exc) @@ -643,7 +665,9 @@ namespace MapoDb answ.Add("IdxFamIn", rigaMSFD.IdxFamigliaIngresso.ToString()); answ.Add("Multi", rigaMSFD.Multi.ToString()); answ.Add("BitFilt", rigaMSFD.BitFilt.ToString()); + answ.Add("MaxVal", rigaMSFD.MaxVal.ToString()); answ.Add("BSR", rigaMSFD.BSR.ToString()); + answ.Add("ExplodeBit", rigaMSFD.ExplodeBit.ToString()); answ.Add("IdxFamMacc", rigaMSFD.IdxFamiglia.ToString()); answ.Add("simplePallet", rigaMSFD.simplePallet.ToString()); answ.Add("palletChange", rigaMSFD.palletChange.ToString()); @@ -740,6 +764,43 @@ namespace MapoDb return answ; } + /// + /// Restituisce il valore booleano se la macchina sia di tipo MULTI (con più state machine x INGRESSI) + /// + /// + /// + public static bool isMulti(string idxMacchina) + { + bool answ = false; + if (memLayer.ML.CRB("IOB_RedEnab")) + { + + // conto la richiesta nel contatore REDIS + long nCall = memLayer.ML.setRCntI(mHash("COUNT:isMulti")); + //... se == nCall2Log scrivo su log e resetto + long nCall2Log = memLayer.ML.cdvi("nCall2Log"); + if (nCall >= nCall2Log) + { + // loggo + logger.lg.scriviLog(string.Format("isMulti: effettuate {0} call", nCall), tipoLog.INFO); + // resetto! + memLayer.ML.resetRCnt(mHash("COUNT:isMulti")); + } + try + { + answ = Convert.ToBoolean(mDatiMacchinaVal(idxMacchina, "Multi")); + } + catch + { } + } + // ...oppure dritto su DB + else + { + answ = MapoDb.obj.isMulti(idxMacchina); + } + return answ; + } + #endregion #region gestione State Machine Ingressi diff --git a/MapoDb/MapoDb.cs b/MapoDb/MapoDb.cs index 11479057..39e3c950 100644 --- a/MapoDb/MapoDb.cs +++ b/MapoDb/MapoDb.cs @@ -477,6 +477,28 @@ namespace MapoDb return answ; } /// + /// Restituisce il valore booleano se la macchina sia di tipo MULTI (con più state machine x INGRESSI) + /// + /// + /// + public bool isMulti(string idxMacchina) + { + bool answ = false; + try + { + // 2017.07.11 se richiesto di NON usare singleton... riporto FUORI la gestione NUOVO oggetto + if (!memLayer.ML.CRB("disable_singleton")) + { + //2017.06.09 forzo inizializzazione oggetto.. + taMSFD = new DS_applicazioneTableAdapters.MSFDTableAdapter(); + } + answ = ((DS_applicazione.MSFDRow)taMSFD.getByIdxMacc(idxMacchina)[0]).Multi == 1; + } + catch + { } + return answ; + } + /// /// salva il segnale di "microstato" /// /// idx macchina @@ -648,8 +670,8 @@ namespace MapoDb } string valEsteso = string.Format("[{0}] {1}", contatore.PadLeft(3, '0'), valore); // aggiunto contatore! - answ = scriviRigaEvento(idxMacchina, rigaTransIn.IdxTipoEvento, CodArticolo, valEsteso, 0, "-", dtEve, DateTime.Now); - // 2017.09.12 SE era in modalità redis RICARICA dati macchina... + answ = scriviRigaEvento(idxMacchina, rigaTransIn.IdxTipoEvento, CodArticolo, valEsteso, 0, "-", dtEve, DateTime.Now); + // 2017.09.12 SE era in modalità redis RICARICA dati macchina... if (memLayer.ML.CRB("IOB_RedEnab")) { DataLayer.resetDatiMacchina(idxMacchina);