diff --git a/MP-Site/MappaStatoSeq.aspx b/MP-Site/MappaStatoSeq.aspx
index 78775b0a..9acd55ea 100644
--- a/MP-Site/MappaStatoSeq.aspx
+++ b/MP-Site/MappaStatoSeq.aspx
@@ -21,22 +21,23 @@
- <%----%>
-
-
- <%----%>
- <%--
-
-
-
-
-
-
- --%>
- <%--
--%>
+
+
+
+
diff --git a/MP-Site/MappaStatoSeq.aspx.cs b/MP-Site/MappaStatoSeq.aspx.cs
index b506c7e5..100335e4 100644
--- a/MP-Site/MappaStatoSeq.aspx.cs
+++ b/MP-Site/MappaStatoSeq.aspx.cs
@@ -9,6 +9,15 @@ namespace MoonPro
{
public partial class MappaStatoSeq : System.Web.UI.Page
{
+
+ public bool enableGraphJS
+ {
+ get
+ {
+ return memLayer.ML.CRB("enableGraphJS");
+ }
+ }
+
public resoconti _resoconti;
public int numGg
{
@@ -79,15 +88,23 @@ namespace MoonPro
protected DS_applicazione.MacchineDataTable tabMacchine;
protected void Page_Load(object sender, EventArgs e)
{
- //_resoconti = new resoconti();
- //tabMacchine = MapoDb.DataLayer.obj.taMacchine.GetData();
+ divGraphJS.Visible = enableGraphJS;
+ divGraphLegacy.Visible = !enableGraphJS;
+ if (!enableGraphJS)
+ {
+ _resoconti = new resoconti();
+ tabMacchine = MapoDb.DataLayer.obj.taMacchine.GetData();
+ }
if (!Page.IsPostBack)
{
ddlNumgg.DataBind();
ddlNumgg.SelectedValue = memLayer.ML.confReadString("seq_gg");
- // imposto date di intervallo
- mod_sequencerStatiJS2.periodo = intervalloAnalisi;
- mod_sequencerStatiJS2.numSplit = memLayer.ML.CRS("seq_numSpl");
+ if (enableGraphJS)
+ {
+ // imposto date di intervallo
+ mod_sequencerStatiJS2.periodo = intervalloAnalisi;
+ mod_sequencerStatiJS2.numSplit = memLayer.ML.CRS("seq_numSpl");
+ }
}
}
@@ -104,8 +121,9 @@ namespace MoonPro
sequencer.doUpdate();
sequencer.Visible = true;
}
- catch
+ catch (Exception exc)
{
+ logger.lg.scriviLog(string.Format("Eccezione recupero dati{0}{1}", Environment.NewLine, exc), tipoLog.EXCEPTION);
sequencer.Visible = false;
}
}
@@ -119,7 +137,10 @@ namespace MoonPro
protected void ddlNumgg_SelectedIndexChanged(object sender, EventArgs e)
{
- mod_sequencerStatiJS2.numGG = Convert.ToInt32(ddlNumgg.SelectedValue);
+ if (enableGraphJS)
+ {
+ mod_sequencerStatiJS2.numGG = Convert.ToInt32(ddlNumgg.SelectedValue);
+ }
}
///
/// recupera nome macchina da idx
@@ -158,7 +179,10 @@ namespace MoonPro
protected void btnReload_Click(object sender, EventArgs e)
{
- mod_sequencerStatiJS2.periodo = intervalloAnalisi;
+ if (enableGraphJS)
+ {
+ mod_sequencerStatiJS2.periodo = intervalloAnalisi;
+ }
}
}
}
\ No newline at end of file
diff --git a/MP-Site/MappaStatoSeq.aspx.designer.cs b/MP-Site/MappaStatoSeq.aspx.designer.cs
index 92ee994d..1f80a56a 100644
--- a/MP-Site/MappaStatoSeq.aspx.designer.cs
+++ b/MP-Site/MappaStatoSeq.aspx.designer.cs
@@ -48,6 +48,15 @@ namespace MoonPro {
///
protected global::MoonPro.WebUserControls.mod_mainMap mod_mainMap;
+ ///
+ /// Controllo divGraphJS.
+ ///
+ ///
+ /// Campo generato automaticamente.
+ /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
+ ///
+ protected global::System.Web.UI.HtmlControls.HtmlGenericControl divGraphJS;
+
///
/// Controllo mod_sequencerStatiJS2.
///
@@ -56,5 +65,41 @@ namespace MoonPro {
/// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
///
protected global::MoonPro.WebUserControls.mod_sequencerStatiJS mod_sequencerStatiJS2;
+
+ ///
+ /// Controllo divGraphLegacy.
+ ///
+ ///
+ /// Campo generato automaticamente.
+ /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
+ ///
+ protected global::System.Web.UI.HtmlControls.HtmlGenericControl divGraphLegacy;
+
+ ///
+ /// Controllo repSeq.
+ ///
+ ///
+ /// Campo generato automaticamente.
+ /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
+ ///
+ protected global::System.Web.UI.WebControls.Repeater repSeq;
+
+ ///
+ /// Controllo odsMappa.
+ ///
+ ///
+ /// Campo generato automaticamente.
+ /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
+ ///
+ protected global::System.Web.UI.WebControls.ObjectDataSource odsMappa;
+
+ ///
+ /// Controllo btnReload.
+ ///
+ ///
+ /// Campo generato automaticamente.
+ /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
+ ///
+ protected global::System.Web.UI.WebControls.Button btnReload;
}
}
diff --git a/MP-Site/Web.config b/MP-Site/Web.config
index 3ed616d1..f8056538 100644
--- a/MP-Site/Web.config
+++ b/MP-Site/Web.config
@@ -69,6 +69,7 @@
+
@@ -82,15 +83,22 @@
-
+
+
+
+
+
+
-
-
+
+
+
diff --git a/MP-Site/WebUserControls/mod_sequencerStati.ascx.cs b/MP-Site/WebUserControls/mod_sequencerStati.ascx.cs
index ead60a04..97654715 100644
--- a/MP-Site/WebUserControls/mod_sequencerStati.ascx.cs
+++ b/MP-Site/WebUserControls/mod_sequencerStati.ascx.cs
@@ -1,3 +1,5 @@
+using MapoDb;
+using Newtonsoft.Json;
using SteamWare;
using System;
using System.Web.UI.DataVisualization.Charting;
@@ -254,88 +256,119 @@ namespace MoonPro.WebUserControls
private void plottaGruppi(DataLayer_generic.serieDatiDataTable dati)
{
DataLayer_generic.serieDatiDataTable datiGrouped = new DataLayer_generic.serieDatiDataTable();
- TableRow r = new TableRow();
- double valMin = totale / numSplit;
- double valRigaCum = 0.0;
- double valR = 0.0;
- double valG = 0.0;
- double valV = 0.0;
- double valB = 0.0;
- double valS = 0.0;
- DateTime _t_0 = new DateTime(9999, 1, 1);
- string _mostCodArticolo = "";
- int _maxVal = 0;
- string colore;
- foreach (DataLayer_generic.serieDatiRow riga in dati)
+ // verifico se ho i dati in cache REDIS...
+ double numGG = _grafico.intervallo.fine.Subtract(_grafico.intervallo.inizio).TotalDays;
+ logger.lg.scriviLog(string.Format("Richiesta dati legacySeq GROUPED per {0} gg", numGG));
+ string rKey = DataLayer.mHash(string.Format("legacySeq:spl_{0}:mac_{1}_{2}_{3}", numSplit, _grafico.idxMacchina, _grafico.intervallo.inizio.ToString("yyyyMMdd_HHmmss"), _grafico.intervallo.fine.ToString("yyyyMMdd_HHmmss")).Replace(" ", "_"));
+ bool needRecalc = true;
+ string redJson = memLayer.ML.getRSV(rKey);
+ // controllo se ho già in sessione un oggetto seq...
+ if (redJson != null && redJson != "")
{
- // salvo prima data...
- if (riga.timeData < _t_0)
+ try
{
- _t_0 = riga.timeData;
+ needRecalc = false;
+ // deserializzo
+ datiGrouped = JsonConvert.DeserializeObject(redJson);
+ logger.lg.scriviLog("Recuperato " + rKey);
}
- if (riga.valore > _maxVal)
+ catch
{
- _maxVal = Convert.ToInt32(riga.valore);
- _mostCodArticolo = riga.label;
}
- valRigaCum = valRigaCum + riga.valore;
- // accumulo valori...
- switch (riga.colore)
+ }
+ if (needRecalc)
+ {
+ logger.lg.scriviLog(string.Format("INIZIO calcolo dati per {0}", rKey));
+ TableRow r = new TableRow();
+ double valMin = totale / numSplit;
+ double valRigaCum = 0.0;
+ double valR = 0.0;
+ double valG = 0.0;
+ double valV = 0.0;
+ double valB = 0.0;
+ double valS = 0.0;
+ DateTime _t_0 = new DateTime(9999, 1, 1);
+ string _mostCodArticolo = "";
+ int _maxVal = 0;
+ string colore;
+ foreach (DataLayer_generic.serieDatiRow riga in dati)
{
- case "sVe":
- valV = valV + riga.valore;
- break;
- case "sGi":
- valG = valG + riga.valore;
- break;
- case "sRo":
- valR = valR + riga.valore;
- break;
- case "sBl":
- valB = valB + riga.valore;
- break;
- case "sGr":
- valS = valS + riga.valore;
- break;
- }
- // se è maggiore plotto...
- if (valRigaCum >= valMin)
- {
- // determino il colore...
- if (valV / valRigaCum >= minVerde)
+ // salvo prima data...
+ if (riga.timeData < _t_0)
{
- colore = "sVe";
- valV = 0.0;
+ _t_0 = riga.timeData;
}
- else if (valR / valRigaCum >= minRosso)
+ if (riga.valore > _maxVal)
{
- colore = "sRo";
- valR = 0.0;
+ _maxVal = Convert.ToInt32(riga.valore);
+ _mostCodArticolo = riga.label;
}
- else if (valS / valRigaCum >= minSpento)
+ valRigaCum = valRigaCum + riga.valore;
+ // accumulo valori...
+ switch (riga.colore)
{
- colore = "sGr";
- valS = 0.0;
+ case "sVe":
+ valV = valV + riga.valore;
+ break;
+ case "sGi":
+ valG = valG + riga.valore;
+ break;
+ case "sRo":
+ valR = valR + riga.valore;
+ break;
+ case "sBl":
+ valB = valB + riga.valore;
+ break;
+ case "sGr":
+ valS = valS + riga.valore;
+ break;
}
- else if (valB / valRigaCum >= minSpento)
+ // se è maggiore plotto...
+ if (valRigaCum >= valMin)
{
- colore = "sBl";
- valB = 0.0;
- }
- else
- {
- colore = "sGi";
- valG = 0.0;
- }
- // salvo riga dati
- datiGrouped.AddserieDatiRow(valRigaCum, colore, _mostCodArticolo, _t_0);
- // reset dei contatori...
- valRigaCum = 0.0;
+ // determino il colore...
+ if (valV / valRigaCum >= minVerde)
+ {
+ colore = "sVe";
+ valV = 0.0;
+ }
+ else if (valR / valRigaCum >= minRosso)
+ {
+ colore = "sRo";
+ valR = 0.0;
+ }
+ else if (valS / valRigaCum >= minSpento)
+ {
+ colore = "sGr";
+ valS = 0.0;
+ }
+ else if (valB / valRigaCum >= minSpento)
+ {
+ colore = "sBl";
+ valB = 0.0;
+ }
+ else
+ {
+ colore = "sGi";
+ valG = 0.0;
+ }
+ // salvo riga dati
+ datiGrouped.AddserieDatiRow(valRigaCum, colore, _mostCodArticolo, _t_0);
+ // reset dei contatori...
+ valRigaCum = 0.0;
- _t_0 = new DateTime(9999, 1, 1);
- _mostCodArticolo = "";
- _maxVal = 0;
+ _t_0 = new DateTime(9999, 1, 1);
+ _mostCodArticolo = "";
+ _maxVal = 0;
+ }
}
+ //registro fine
+ logger.lg.scriviLog(string.Format("FINE calcolo dati per {0}", rKey));
+ // salvo sequenza in REDIS...
+ string rData = JsonConvert.SerializeObject(datiGrouped);
+ // salvo in sessione l'oggetto... secondo durata impostata in web.config.. moltiplicata x numero gg...
+ memLayer.ML.setRSV(rKey, rData, 60 * memLayer.ML.CRI("seqCacheDurMin") * (int)numGG);
+ logger.lg.scriviLog(string.Format("Salvataggio in sessione {0} effettuato", rKey));
}
plottaDettaglio(datiGrouped);
}
diff --git a/MapoDb/MapoDb.csproj b/MapoDb/MapoDb.csproj
index 568e165c..8da4aed3 100644
--- a/MapoDb/MapoDb.csproj
+++ b/MapoDb/MapoDb.csproj
@@ -64,14 +64,15 @@
False
ExtLib\Microsoft.ReportViewer.WinForms.dll
-
- ..\packages\Newtonsoft.Json.5.0.4\lib\net45\Newtonsoft.Json.dll
+
+ ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll
+
diff --git a/MapoDb/app.config b/MapoDb/app.config
index 5427e522..ce77c437 100644
--- a/MapoDb/app.config
+++ b/MapoDb/app.config
@@ -1,13 +1,19 @@
-
+
-
+
-
+
+
+
+
+
+
+
+
+
diff --git a/MapoDb/resoconti.cs b/MapoDb/resoconti.cs
index 62fb4e69..d4dc1f3e 100644
--- a/MapoDb/resoconti.cs
+++ b/MapoDb/resoconti.cs
@@ -1,9 +1,11 @@
using MapoDb;
+using Newtonsoft.Json;
using SteamWare;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
+using System.Web.Script.Serialization;
///
/// Summary description for resoconti
@@ -22,6 +24,13 @@ public enum statoMacchina
///
public struct objSequencer
{
+ ///
+ /// Macchina selezionata
+ ///
+ public string idxMacchina;
+ ///
+ /// Intervallo date
+ ///
public intervalloDate intervallo;
///
/// serie dei dati da plottare
@@ -534,24 +543,56 @@ public class resoconti
objSequencer _sequenza = new objSequencer();
if (idxMacchina != null && idxMacchina != "")
{
- _sequenza.serieDati = new DataLayer_generic.serieDatiDataTable();
- // seleziono i dati...
- MapoDb.DS_applicazione.DiarioDiBordoDataTable tabSeq = taDiarioDiBordo.GetSequenza(idxMacchina, _intervallo.inizio, _intervallo.fine);
- foreach (MapoDb.DS_applicazione.DiarioDiBordoRow riga in tabSeq.Rows)
+ // verifico se ho i dati in cache REDIS...
+ double numGG = _intervallo.fine.Subtract(_intervallo.inizio).TotalDays;
+ logger.lg.scriviLog(string.Format("Richiesta dati legacySeq per {0} gg", numGG));
+ string rKey = DataLayer.mHash(string.Format("legacySeq:spl_{0}:mac_{1}_{2}_{3}", 0, idxMacchina, _intervallo.inizio.ToString("yyyyMMdd_HHmmss"), _intervallo.fine.ToString("yyyyMMdd_HHmmss")).Replace(" ", "_"));
+ bool needRecalc = true;
+ string redJson = memLayer.ML.getRSV(rKey);
+ // controllo se ho già in sessione un oggetto seq...
+ if (redJson != null && redJson != "")
{
- _sequenza.serieDati.AddserieDatiRow(riga.DurataMinuti, semaforoDaIdxStato(riga.IdxStato), riga.CodArticolo, riga.InizioStato);
+ try
+ {
+ needRecalc = false;
+ // deserializzo
+ _sequenza = JsonConvert.DeserializeObject(redJson);
+ logger.lg.scriviLog("Recuperato legacySeq " + rKey);
+ }
+ catch
+ {
+ }
}
- // faccio trim x primo evento...
- if (_sequenza.serieDati[0].timeData < _intervallo.inizio)
+ if (needRecalc)
{
- _sequenza.serieDati[0].valore -= _intervallo.inizio.Subtract(_sequenza.serieDati[0].timeData).TotalMinutes;
- _sequenza.serieDati[0].timeData = _intervallo.inizio;
+ logger.lg.scriviLog(string.Format("INIZIO calcolo dati per {0}", rKey));
+ // altrimenti procedo come al solito...
+ _sequenza.idxMacchina = idxMacchina;
+ _sequenza.serieDati = new DataLayer_generic.serieDatiDataTable();
+ // seleziono i dati...
+ MapoDb.DS_applicazione.DiarioDiBordoDataTable tabSeq = taDiarioDiBordo.GetSequenza(idxMacchina, _intervallo.inizio, _intervallo.fine);
+ foreach (MapoDb.DS_applicazione.DiarioDiBordoRow riga in tabSeq.Rows)
+ {
+ _sequenza.serieDati.AddserieDatiRow(riga.DurataMinuti, semaforoDaIdxStato(riga.IdxStato), riga.CodArticolo, riga.InizioStato);
+ }
+ // faccio trim x primo evento...
+ if (_sequenza.serieDati[0].timeData < _intervallo.inizio)
+ {
+ _sequenza.serieDati[0].valore -= _intervallo.inizio.Subtract(_sequenza.serieDati[0].timeData).TotalMinutes;
+ _sequenza.serieDati[0].timeData = _intervallo.inizio;
+ }
+ //...e ultimo evento...
+ int numValori = _sequenza.serieDati.Count - 1;
+ _sequenza.serieDati[numValori].valore = _intervallo.fine.Subtract(_sequenza.serieDati[numValori].timeData).TotalMinutes;
+ // salvo intervallo
+ _sequenza.intervallo = _intervallo;
+ logger.lg.scriviLog(string.Format("FINE calcolo dati per {0}", rKey));
+ // salvo sequenza in REDIS...
+ string rData = JsonConvert.SerializeObject(_sequenza);
+ // salvo in sessione l'oggetto... secondo durata impostata in web.config.. moltiplicata x numero gg...
+ memLayer.ML.setRSV(rKey, rData, 60 * memLayer.ML.CRI("seqCacheDurMin") * (int)numGG);
+ logger.lg.scriviLog(string.Format("Salvataggio in sessione legacySeq {0} effettuato", rKey));
}
- //...e ultimo evento...
- int numValori = _sequenza.serieDati.Count - 1;
- _sequenza.serieDati[numValori].valore = _intervallo.fine.Subtract(_sequenza.serieDati[numValori].timeData).TotalMinutes;
- // salvo intervallo
- _sequenza.intervallo = _intervallo;
}
return _sequenza;
}
@@ -606,7 +647,7 @@ public class resoconti
}
else
{
- int index = 0;
+ int index = 0;
// ciclo su tutte le macchine
var elMacchine = DataLayer.obj.taSelMacc.getAttive();
foreach (var item in elMacchine)
@@ -937,7 +978,7 @@ public class visjsDsOptions
///
/// Data End
///
- public string end;
+ public string end;
}
///
/// Oggetto timeline vis.js con gruppi + items