reshape codice

This commit is contained in:
Samuele E. Locatelli
2020-11-23 15:06:42 +01:00
parent b321400366
commit ad7f85dafd
2 changed files with 296 additions and 226 deletions
+23 -7
View File
@@ -5,18 +5,16 @@ namespace MP_SITE
{
public class BasePage : UserPage
{
#region Internal Fields
/// <summary>
/// Oggetto datalayer specifico
/// </summary>
internal DataLayer DataLayerObj = new DataLayer();
public bool enableGraphJS
{
get
{
return memLayer.ML.CRB("enableGraphJS");
}
}
#endregion Internal Fields
#region Protected Properties
/// <summary>
/// Prox pagina da aprire
@@ -34,6 +32,22 @@ namespace MP_SITE
}
}
#endregion Protected Properties
#region Public Properties
public bool enableGraphJS
{
get
{
return memLayer.ML.CRB("enableGraphJS");
}
}
#endregion Public Properties
#region Public Methods
/// <summary>
/// effettua traduzione del lemma
/// </summary>
@@ -53,5 +67,7 @@ namespace MP_SITE
{
return user_std.UtSn.TraduciEn(lemma);
}
#endregion Public Methods
}
}
+273 -219
View File
@@ -9,6 +9,48 @@ namespace MP_SITE.WebUserControls
{
public partial class mod_sequencerStati : System.Web.UI.UserControl
{
#region Protected Fields
protected objSequencer _grafico;
protected int _larghezza = 100;
protected double _min2plot = 0.0;
protected double _minRosso = 0.5;
protected double _minSpento = 0.5;
protected double _minVerde = 0.5;
protected int _timeSplits = 10;
protected string _titolo = "Sequencer";
/// <summary>
/// totale in minuti da plottare
/// </summary>
protected double totale = 1;
#endregion Protected Fields
#region Public Fields
public resoconti _resoconti;
#endregion Public Fields
#region Public Events
/// <summary>
/// evento di richeista zoom sui dati
/// </summary>
public event EventHandler eh_richiestaZoom;
#endregion Public Events
#region Public Properties
/// <summary>
/// dati x grafico sequencer
/// </summary>
@@ -24,62 +66,198 @@ namespace MP_SITE.WebUserControls
}
}
public resoconti _resoconti;
protected objSequencer _grafico;
protected double _min2plot = 0.0;
protected string _titolo = "Sequencer";
protected int _larghezza = 100;
protected int _timeSplits = 10;
/// <summary>
/// totale in minuti da plottare
/// </summary>
protected double totale = 1;
/// <summary>
/// numero dei segmenti del grafico
/// </summary>
public int numSplit { get; set; }
protected double _minVerde = 0.5;
protected double _minRosso = 0.5;
protected double _minSpento = 0.5;
/// <summary>
/// altezza max grafico
/// </summary>
public int graphHeight { get; set; }
/// <summary>
/// identificativo
/// </summary>
public string identificativo { get; set; }
protected void Page_Load(object sender, EventArgs e)
/// <summary>
/// larghezza totale del grafico (forzo a zero come minimo...)
/// </summary>
public int larghezza
{
doUpdate();
get
{
return _larghezza;
}
set
{
if (value > 0)
{
_larghezza = value;
}
else
{
_larghezza = 0;
}
}
}
/// <summary>
/// disegna la tabella
/// valore minimo da plottare
/// </summary>
protected void plottaGrafico()
public double min2plot
{
// a seconda del numero di eventi da plottare decido la procedura...
DataLayer_generic.serieDatiDataTable dati = _grafico.serieDati;
try
get
{
// è la somma dei minuti totali dall'inizio alla fine...
totale = _grafico.intervallo.fine.Subtract(_grafico.intervallo.inizio).TotalMinutes;
return _min2plot;
}
catch
{ }
int numCelle = dati.Rows.Count;
if (numCelle <= numSplit) // se ho eventi <= _num split....
set
{
plottaDettaglio(dati);
}
else // altrimenti raggruppo!
{
plottaGruppi(dati);
_min2plot = value;
}
}
/// <summary>
/// % minuma nel periodo per dire che sia rosso
/// </summary>
public double minRosso
{
get
{
return _minRosso;
}
set
{
_minRosso = value;
}
}
/// <summary>
/// % minuma nel periodo per dire che sia spento
/// </summary>
public double minSpento
{
get
{
return _minSpento;
}
set
{
_minSpento = value;
}
}
/// <summary>
/// % minuma nel periodo per dire che sia verde
/// </summary>
public double minVerde
{
get
{
return _minVerde;
}
set
{
_minVerde = value;
}
}
/// <summary>
/// numero dei segmenti del grafico
/// </summary>
public int numSplit { get; set; }
/// <summary>
/// titolo del grafico
/// </summary>
public string titolo
{
get
{
return _titolo;
}
set
{
_titolo = value;
}
}
#endregion Public Properties
#region Private Methods
/// <summary>
/// accoda i dati alla serie corretta
/// </summary>
/// <param name="tipo"></param>
/// <param name="inizio"></param>
/// <param name="fine"></param>
/// <param name="rigaPrec"></param>
/// <param name="codV"></param>
/// <param name="codG"></param>
/// <param name="codR"></param>
/// <param name="codB"></param>
/// <param name="codS"></param>
private void accodaDati(ref int tipo, ref DateTime inizio, ref DateTime fine, DataLayer_generic.serieDatiRow rigaPrec, string codV, string codG, string codR, string codB, string codS)
{
switch (rigaPrec.colore)
{
case "sVe":
tipo = 1;
Chart1.Series["SeqV"].Points.AddXY(tipo, inizio, fine);
// aggiungo tooltip
Chart1.Series["SeqV"].Points[Chart1.Series["SeqV"].Points.Count - 1].ToolTip = string.Format("{2} | {0:dd/MM HH:mm:ss} -->{1:dd/MM HH:mm:ss}", inizio, fine, codV);
Chart1.Series["SeqV"].Points[Chart1.Series["SeqV"].Points.Count - 1].PostBackValue = inizio.ToString();
break;
case "sGi":
tipo = 1;
Chart1.Series["SeqG"].Points.AddXY(tipo, inizio, fine);
// aggiungo tooltip
Chart1.Series["SeqG"].Points[Chart1.Series["SeqG"].Points.Count - 1].ToolTip = string.Format("{2} | {0:dd/MM HH:mm:ss} -->{1:dd/MM HH:mm:ss}", inizio, fine, codG);
Chart1.Series["SeqG"].Points[Chart1.Series["SeqG"].Points.Count - 1].PostBackValue = inizio.ToString();
break;
case "sRo":
tipo = 1;
Chart1.Series["SeqR"].Points.AddXY(tipo, inizio, fine);
// aggiungo tooltip
Chart1.Series["SeqR"].Points[Chart1.Series["SeqR"].Points.Count - 1].ToolTip = string.Format("{2} | {0:dd/MM HH:mm:ss} -->{1:dd/MM HH:mm:ss}", inizio, fine, codR);
Chart1.Series["SeqR"].Points[Chart1.Series["SeqR"].Points.Count - 1].PostBackValue = inizio.ToString();
break;
case "sBl":
tipo = 1;
Chart1.Series["SeqB"].Points.AddXY(tipo, inizio, fine);
// aggiungo tooltip
Chart1.Series["SeqB"].Points[Chart1.Series["SeqB"].Points.Count - 1].ToolTip = string.Format("{2} | {0:dd/MM HH:mm:ss} -->{1:dd/MM HH:mm:ss}", inizio, fine, codR);
Chart1.Series["SeqB"].Points[Chart1.Series["SeqB"].Points.Count - 1].PostBackValue = inizio.ToString();
break;
case "sGr":
tipo = 1;
Chart1.Series["SeqS"].Points.AddXY(tipo, inizio, fine);
// aggiungo tooltip
Chart1.Series["SeqS"].Points[Chart1.Series["SeqS"].Points.Count - 1].ToolTip = string.Format("{2} | {0:dd/MM HH:mm:ss} -->{1:dd/MM HH:mm:ss}", inizio, fine, codS);
Chart1.Series["SeqS"].Points[Chart1.Series["SeqS"].Points.Count - 1].PostBackValue = inizio.ToString();
break;
default:
break;
}
}
/// <summary>
/// intercetta richiesta di zoom e zoomma sul giorno in esame...
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lnkb_Click(object sender, EventArgs e)
{
LinkButton lnk = (LinkButton)sender;
// calcolo il giorno...
memLayer.ML.setSessionVal("dataZoom", lnk.CommandArgument.ToString());
if (eh_richiestaZoom != null)
{
eh_richiestaZoom(this, new EventArgs());
}
}
/// <summary>
/// popola il sequencer degli stati riportando tutti i singoli valori
@@ -177,77 +355,7 @@ namespace MP_SITE.WebUserControls
fine = rigaPrec.timeData.AddMinutes(rigaPrec.valore);
accodaDati(ref tipo, ref inizio, ref fine, rigaPrec, codV, codG, codR, codB, codS);
}
/// <summary>
/// accoda i dati alla serie corretta
/// </summary>
/// <param name="tipo"></param>
/// <param name="inizio"></param>
/// <param name="fine"></param>
/// <param name="rigaPrec"></param>
/// <param name="codV"></param>
/// <param name="codG"></param>
/// <param name="codR"></param>
/// <param name="codB"></param>
/// <param name="codS"></param>
private void accodaDati(ref int tipo, ref DateTime inizio, ref DateTime fine, DataLayer_generic.serieDatiRow rigaPrec, string codV, string codG, string codR, string codB, string codS)
{
switch (rigaPrec.colore)
{
case "sVe":
tipo = 1;
Chart1.Series["SeqV"].Points.AddXY(tipo, inizio, fine);
// aggiungo tooltip
Chart1.Series["SeqV"].Points[Chart1.Series["SeqV"].Points.Count - 1].ToolTip = string.Format("{2} | {0:dd/MM HH:mm:ss} -->{1:dd/MM HH:mm:ss}", inizio, fine, codV);
Chart1.Series["SeqV"].Points[Chart1.Series["SeqV"].Points.Count - 1].PostBackValue = inizio.ToString();
break;
case "sGi":
tipo = 1;
Chart1.Series["SeqG"].Points.AddXY(tipo, inizio, fine);
// aggiungo tooltip
Chart1.Series["SeqG"].Points[Chart1.Series["SeqG"].Points.Count - 1].ToolTip = string.Format("{2} | {0:dd/MM HH:mm:ss} -->{1:dd/MM HH:mm:ss}", inizio, fine, codG);
Chart1.Series["SeqG"].Points[Chart1.Series["SeqG"].Points.Count - 1].PostBackValue = inizio.ToString();
break;
case "sRo":
tipo = 1;
Chart1.Series["SeqR"].Points.AddXY(tipo, inizio, fine);
// aggiungo tooltip
Chart1.Series["SeqR"].Points[Chart1.Series["SeqR"].Points.Count - 1].ToolTip = string.Format("{2} | {0:dd/MM HH:mm:ss} -->{1:dd/MM HH:mm:ss}", inizio, fine, codR);
Chart1.Series["SeqR"].Points[Chart1.Series["SeqR"].Points.Count - 1].PostBackValue = inizio.ToString();
break;
case "sBl":
tipo = 1;
Chart1.Series["SeqB"].Points.AddXY(tipo, inizio, fine);
// aggiungo tooltip
Chart1.Series["SeqB"].Points[Chart1.Series["SeqB"].Points.Count - 1].ToolTip = string.Format("{2} | {0:dd/MM HH:mm:ss} -->{1:dd/MM HH:mm:ss}", inizio, fine, codR);
Chart1.Series["SeqB"].Points[Chart1.Series["SeqB"].Points.Count - 1].PostBackValue = inizio.ToString();
break;
case "sGr":
tipo = 1;
Chart1.Series["SeqS"].Points.AddXY(tipo, inizio, fine);
// aggiungo tooltip
Chart1.Series["SeqS"].Points[Chart1.Series["SeqS"].Points.Count - 1].ToolTip = string.Format("{2} | {0:dd/MM HH:mm:ss} -->{1:dd/MM HH:mm:ss}", inizio, fine, codS);
Chart1.Series["SeqS"].Points[Chart1.Series["SeqS"].Points.Count - 1].PostBackValue = inizio.ToString();
break;
default:
break;
}
}
/// <summary>
/// intercetta richiesta di zoom e zoomma sul giorno in esame...
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void lnkb_Click(object sender, EventArgs e)
{
LinkButton lnk = (LinkButton)sender;
// calcolo il giorno...
memLayer.ML.setSessionVal("dataZoom", lnk.CommandArgument.ToString());
if (eh_richiestaZoom != null)
{
eh_richiestaZoom(this, new EventArgs());
}
}
/// <summary>
/// popola il sequencer degli stati raggruppando perché troppi valori
/// </summary>
@@ -256,7 +364,7 @@ namespace MP_SITE.WebUserControls
private void plottaGruppi(DataLayer_generic.serieDatiDataTable dati)
{
DataLayer_generic.serieDatiDataTable datiGrouped = new DataLayer_generic.serieDatiDataTable();
// verifico se ho i dati in cache REDIS...
// 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} {1} gg", _grafico.idxMacchina, 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(" ", "_"));
@@ -268,7 +376,7 @@ namespace MP_SITE.WebUserControls
try
{
needRecalc = false;
// deserializzo
// deserializzo
datiGrouped = JsonConvert.DeserializeObject<DataLayer_generic.serieDatiDataTable>(redJson);
logger.lg.scriviLog("Recuperato " + rKey);
}
@@ -310,15 +418,19 @@ namespace MP_SITE.WebUserControls
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;
@@ -364,7 +476,7 @@ namespace MP_SITE.WebUserControls
}
//registro fine
logger.lg.scriviLog(string.Format("FINE calcolo dati per {0} {1}", _grafico.idxMacchina, rKey));
// salvo sequenza in REDIS...
// 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);
@@ -373,6 +485,30 @@ namespace MP_SITE.WebUserControls
plottaDettaglio(datiGrouped);
}
#endregion Private Methods
#region Protected Methods
/// <summary>
/// evento click su sequencer: zoom 2X
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Chart1_Click(object sender, ImageMapEventArgs e)
{
// alzo evento
if (eh_richiestaZoom != null)
{
if (e != null)
{
ImageMapEventArgs evIM = e;
// salvo in sessione
memLayer.ML.setSessionVal("zoomCenter", e.PostBackValue);
eh_richiestaZoom(this, new EventArgs());
}
}
}
/// <summary>
/// restituisce true se ci sono dati...
/// </summary>
@@ -393,97 +529,40 @@ namespace MP_SITE.WebUserControls
return answ;
}
/// <summary>
/// valore minimo da plottare
/// </summary>
public double min2plot
protected void Page_Load(object sender, EventArgs e)
{
get
doUpdate();
}
/// <summary>
/// disegna la tabella
/// </summary>
protected void plottaGrafico()
{
// a seconda del numero di eventi da plottare decido la procedura...
DataLayer_generic.serieDatiDataTable dati = _grafico.serieDati;
try
{
return _min2plot;
// è la somma dei minuti totali dall'inizio alla fine...
totale = _grafico.intervallo.fine.Subtract(_grafico.intervallo.inizio).TotalMinutes;
}
set
catch
{ }
int numCelle = dati.Rows.Count;
if (numCelle <= numSplit) // se ho eventi <= _num split....
{
_min2plot = value;
}
}
/// <summary>
/// titolo del grafico
/// </summary>
public string titolo
{
get
{
return _titolo;
}
set
{
_titolo = value;
}
}
/// <summary>
/// larghezza totale del grafico (forzo a zero come minimo...)
/// </summary>
public int larghezza
{
get
{
return _larghezza;
}
set
{
if (value > 0)
{
_larghezza = value;
}
else
{
_larghezza = 0;
}
}
}
/// <summary>
/// % minuma nel periodo per dire che sia verde
/// </summary>
public double minVerde
{
get
{
return _minVerde;
}
set
{
_minVerde = value;
}
}
/// <summary>
/// % minuma nel periodo per dire che sia rosso
/// </summary>
public double minRosso
{
get
{
return _minRosso;
}
set
{
_minRosso = value;
}
}
/// <summary>
/// % minuma nel periodo per dire che sia spento
/// </summary>
public double minSpento
{
get
{
return _minSpento;
}
set
{
_minSpento = value;
plottaDettaglio(dati);
}
else // altrimenti raggruppo!
{
plottaGruppi(dati);
}
}
#endregion Protected Methods
#region Public Methods
/// <summary>
/// aggiorna il controllo
/// </summary>
@@ -499,31 +578,6 @@ namespace MP_SITE.WebUserControls
}
}
/// <summary>
/// evento di richeista zoom sui dati
/// </summary>
public event EventHandler eh_richiestaZoom;
/// <summary>
/// evento click su sequencer: zoom 2X
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Chart1_Click(object sender, ImageMapEventArgs e)
{
// alzo evento
if (eh_richiestaZoom != null)
{
if (e != null)
{
ImageMapEventArgs evIM = e;
// salvo in sessione
memLayer.ML.setSessionVal("zoomCenter", e.PostBackValue);
eh_richiestaZoom(this, new EventArgs());
}
}
}
#endregion Public Methods
}
}