diff --git a/MP-SITE/WebUserControls/baseUserControl.cs b/MP-SITE/WebUserControls/baseUserControl.cs
index b22f25a3..d8fdf859 100644
--- a/MP-SITE/WebUserControls/baseUserControl.cs
+++ b/MP-SITE/WebUserControls/baseUserControl.cs
@@ -107,5 +107,17 @@ namespace MP_SITE.WebUserControls
}
#endregion Public Methods
+
+
+ ///
+ /// Arrotondamento oggetto datetime all'intervallo timespan indicato
+ ///
+ /// Dataora
+ /// Timespan arrotondamento (x eccesso)
+ ///
+ protected DateTime RoundUp(DateTime dt, TimeSpan d)
+ {
+ return new DateTime((dt.Ticks + d.Ticks - 1) / d.Ticks * d.Ticks, dt.Kind);
+ }
}
}
\ No newline at end of file
diff --git a/MP-Site/WebUserControls/mod_statoMacchina.ascx.cs b/MP-Site/WebUserControls/mod_statoMacchina.ascx.cs
index 31a3fa1f..44ea1f0a 100644
--- a/MP-Site/WebUserControls/mod_statoMacchina.ascx.cs
+++ b/MP-Site/WebUserControls/mod_statoMacchina.ascx.cs
@@ -3,10 +3,11 @@ using Newtonsoft.Json;
using SteamWare;
using System;
using System.IO;
+using System.Linq;
namespace MP_SITE.WebUserControls
{
- public partial class mod_statoMacchina : System.Web.UI.UserControl
+ public partial class mod_statoMacchina : baseUserControl
{
#region Public Properties
@@ -275,7 +276,7 @@ namespace MP_SITE.WebUserControls
DateTime lastKA = DateTime.Now.AddMinutes(-minuti);
if (_IdxMacchina != "nd")
{
- string nomeVar = string.Format("KeepAlive:{0}", _IdxMacchina);
+ string nomeVar = $"KeepAlive:{_IdxMacchina}";
string redKey = memLayer.ML.redHash(nomeVar);
var _lastKA = memLayer.ML.getRSV(redKey);
if (_lastKA == null)
@@ -318,6 +319,63 @@ namespace MP_SITE.WebUserControls
}
}
+ ///
+ /// Recupera riga stato corrente
+ ///
+ ///
+ protected DS_ProdTempi.stp_repDonati_getLastStatoDurataMacchinaRow rigaStato()
+ {
+ DS_ProdTempi.stp_repDonati_getLastStatoDurataMacchinaRow answ = null;
+ // cerco in redis
+ string nomeVar = $"RigaStatoMacc:{IdxMacchina}";
+ string redKey = memLayer.ML.redHash(nomeVar);
+ string rawData = memLayer.ML.getRSV(redKey);
+ if (!string.IsNullOrEmpty(rawData))
+ {
+ answ = JsonConvert.DeserializeObject(rawData);
+ }
+ // altrimenti DB
+ else
+ {
+ answ = DataLayerObj.taDatiStatoMacch.GetData(IdxMacchina, 0.1)[0];
+ rawData = JsonConvert.SerializeObject(answ);
+ memLayer.ML.setRSV(redKey, rawData, 30);
+ }
+ return answ;
+ }
+
+ ///
+ /// Recupera pezzi prodotti
+ ///
+ /// Periodo finestra minuti da considerare dato dataora aggiornata ai 15 sec...
+ ///
+ protected int pezziProd(int numMinuti)
+ {
+ DateTime dtEnd = RoundUp(DateTime.Now, TimeSpan.FromSeconds(60));
+ DateTime dtStart = dtEnd.AddMinutes(-numMinuti);
+ int answ = 0;
+ // cerco in redis
+ string nomeVar = $"PezziProd:{IdxMacchina}:{dtStart:yyyyMMdd-HHmmss}:{dtEnd:yyyyMMdd-HHmmss}";
+ string redKey = memLayer.ML.redHash(nomeVar);
+ string rawData = memLayer.ML.getRSV(redKey);
+ if (!string.IsNullOrEmpty(rawData))
+ {
+ answ = JsonConvert.DeserializeObject(rawData);
+ }
+ // altrimenti DB
+ else
+ {
+ var tcRilTab = DataLayerObj.taTempiCicloRilevati.getByMacchinaPeriodo(IdxMacchina, dtStart, dtEnd);
+ if (tcRilTab != null && tcRilTab.Rows.Count > 0)
+ {
+ answ = tcRilTab.Sum(x => x.PzProd);
+ }
+ rawData = JsonConvert.SerializeObject(answ);
+ memLayer.ML.setRSV(redKey, rawData, 120);
+ }
+ return answ;
+ }
+
///
/// sistema il testo
///
@@ -330,8 +388,6 @@ namespace MP_SITE.WebUserControls
lblStato.Text = "Stato";
lblProd.Text = "T.Ciclo"; // era OEE
lblDurata.Text = "Durata";
- // 2018.02.05 cambio x fix nuovi impianti valMacchina.Text =
- // tabMacchine.FindByIdxMacchina(IdxMacchina).Nome; valCodArticolo.Text = tabStatoMacchine.FindByIdxMacchina(IdxMacchina).CodArticolo;
// leggo valori da MSE...
valMacchina.Text = tabMSE[0].Nome;
@@ -344,26 +400,19 @@ namespace MP_SITE.WebUserControls
float minuti = 0;
try
{
- DS_ProdTempi.stp_repDonati_getLastStatoDurataMacchinaRow rigaStato = DataLayerObj.taDatiStatoMacch.GetData(IdxMacchina, 0.1)[0];
- idxStato = rigaStato.idxStato;
- oreTot = Convert.ToInt32(Math.Floor(rigaStato.Minuti / 60));
- minuti = (float)rigaStato.Minuti - 60 * oreTot;
+ var rigaStatoCurr = rigaStato();
+ idxStato = rigaStatoCurr.idxStato;
+ oreTot = Convert.ToInt32(Math.Floor(rigaStatoCurr.Minuti / 60));
+ minuti = (float)rigaStatoCurr.Minuti - 60 * oreTot;
}
catch
{
// 2018.02.05 cambio x fix nuovi impianti
- //idxStato = tabStatoMacchine.FindByIdxMacchina(IdxMacchina).IdxStato;
- //DateTime inizioStato = tabStatoMacchine.FindByIdxMacchina(IdxMacchina).InizioStato;
- //DateTime ora = DateTime.Now;
- //TimeSpan durata = ora.Subtract(inizioStato);
- //oreTot = durata.Days * 24 + durata.Hours;
- //minuti = durata.Minutes;
idxStato = tabMSE[0].idxStato;
oreTot = (int)tabMSE[0].durata / 60;
minuti = (int)tabMSE[0].durata - 60 * oreTot;
}
// 2018.02.05 cambio x fix nuovi impianti
- //valStato.Text = tabAnagStati.FindByIdxStato(idxStato).Descrizione;
valStato.Text = tabMSE[0].DescrizioneStato;
valDurata.Text = $"{oreTot}h {minuti:N2}min";
// solo se in stato NON di run...
@@ -373,14 +422,12 @@ namespace MP_SITE.WebUserControls
string cauFermo = "nd";
try
{
- cauFermo = tabAnagStati.FindByIdxStato(tabMSE[0].idxStato).Descrizione;
- //cauFermo = tabAnagStati.FindByIdxStato(Convert.ToInt32(tabStatoMacchine.FindByIdxMacchina(IdxMacchina).IdxStato)).Descrizione;
+ cauFermo = tabAnagStati.FindByIdxStato(idxStato).Descrizione;
}
catch
{
// 2018.02.05 cambio x fix nuovi impianti
- //cauFermo = string.Format("IN: {0}", tabStatoMacchine.FindByIdxMacchina(IdxMacchina).Value);
- cauFermo = $"IN: {tabMSE[0].idxStato}";
+ cauFermo = $"IN: {idxStato}";
}
valCausale.Text = cauFermo;
}
@@ -390,75 +437,53 @@ namespace MP_SITE.WebUserControls
valCausale.Text = "";
}
- // ATTENZIONE! dati generati casualmente, da cambiare in produzione!!!
- bool demoRandom = false;
- if (demoRandom)
+
+ DateTime Ora = DateTime.Now;
+ valProd.Text = "1H: ";
+ string emptyVal = "n/a
";
+ int numPezzi = 0;
+ // prova l'ultima ora
+ try
{
- // indico a caso % pz prodotti...
- Random RandomClass = new Random(DateTime.Now.Millisecond);
- if (idxStato == 13)
+ // conto num pezzi e divido 1h/pezzi
+ //2023.05.03 gestione con cache e conteggio corretto
+ //numPezzi = DataLayerObj.taTempiCicloRilevati.getByMacchinaPeriodo(IdxMacchina, Ora.AddHours(-1), Ora).Rows.Count;
+ numPezzi = pezziProd(60);
+ if (numPezzi > 0)
{
- valProd.Text = string.Format("{0:P}", RandomClass.NextDouble() / 4 + 0.75);
- }
- else if (oreTot > 8)
- {
- valProd.Text = string.Format("{0:P}", 0);
+ valProd.Text += $"{Math.Round((double)60 / numPezzi, 3):#.00}m
";
}
else
{
- valProd.Text = string.Format("{0:P}", RandomClass.NextDouble() / 2 + 0.25);
+ valProd.Text += emptyVal;
}
}
- else // mostra lo stesso valore per tutti e due
+ catch
{
- // prova...se non ha dati relativa mostra n/a - not available
+ valProd.Text += emptyVal;
+ }
- DateTime Ora = DateTime.Now;
-
- valProd.Text = "1H: ";
- string emptyVal = "n/a
";
- int numPezzi = 0;
- // prova l'ultima ora
- try
+ // prova le ultime 8 ore
+ valProd.Text += "8H: ";
+ numPezzi = 0;
+ try
+ {
+ // conto num pezzi e divido 1h/pezzi
+ //numPezzi = DataLayerObj.taTempiCicloRilevati.getByMacchinaPeriodo(IdxMacchina, Ora.AddHours(-8), Ora).Rows.Count;
+ numPezzi = pezziProd(480);
+ if (numPezzi > 0)
{
- // conto num pezzi e divido 1h/pezzi
- numPezzi = DataLayerObj.taTempiCicloRilevati.getByMacchinaPeriodo(IdxMacchina, Ora.AddHours(-1), Ora).Rows.Count;
- if (numPezzi > 0)
- {
- valProd.Text += String.Format("{0:#.00}m
", Math.Round((double)60 / numPezzi, 3));
- }
- else
- {
- valProd.Text += emptyVal;
- }
+ valProd.Text += $"{Math.Round((double)480 / numPezzi, 3):#.00}m ";
}
- catch
- {
- valProd.Text += emptyVal;
- }
-
- // prova le ultime 8 ore
-
- valProd.Text += "8H: ";
- numPezzi = 0;
- try
- {
- // conto num pezzi e divido 1h/pezzi
- numPezzi = DataLayerObj.taTempiCicloRilevati.getByMacchinaPeriodo(IdxMacchina, Ora.AddHours(-8), Ora).Rows.Count;
- if (numPezzi > 0)
- {
- valProd.Text += String.Format("{0:#.00}m ", Math.Round((double)480 / numPezzi, 3));
- }
- else
- {
- valProd.Text += emptyVal;
- }
- }
- catch
+ else
{
valProd.Text += emptyVal;
}
}
+ catch
+ {
+ valProd.Text += emptyVal;
+ }
}
}
diff --git a/MP-TAB/WebUserControls/BaseUserControl.cs b/MP-TAB/WebUserControls/BaseUserControl.cs
index ca0643e5..5483bce4 100644
--- a/MP-TAB/WebUserControls/BaseUserControl.cs
+++ b/MP-TAB/WebUserControls/BaseUserControl.cs
@@ -548,6 +548,17 @@ namespace MoonProTablet.WebUserControls
return answ;
}
+ ///
+ /// Arrotondamento oggetto datetime all'intervallo timespan indicato
+ ///
+ /// Dataora
+ /// Timespan arrotondamento (x eccesso)
+ ///
+ protected DateTime RoundUp(DateTime dt, TimeSpan d)
+ {
+ return new DateTime((dt.Ticks + d.Ticks - 1) / d.Ticks * d.Ticks, dt.Kind);
+ }
+
#endregion Protected Methods
}
}
\ No newline at end of file