Merge branch 'release/UpdatereportStatiCommesse02'

This commit is contained in:
Samuele Locatelli
2023-05-03 16:48:58 +02:00
3 changed files with 121 additions and 73 deletions
@@ -107,5 +107,17 @@ namespace MP_SITE.WebUserControls
}
#endregion Public Methods
/// <summary>
/// Arrotondamento oggetto datetime all'intervallo timespan indicato
/// </summary>
/// <param name="dt">Dataora</param>
/// <param name="d">Timespan arrotondamento (x eccesso)</param>
/// <returns></returns>
protected DateTime RoundUp(DateTime dt, TimeSpan d)
{
return new DateTime((dt.Ticks + d.Ticks - 1) / d.Ticks * d.Ticks, dt.Kind);
}
}
}
@@ -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
}
}
/// <summary>
/// Recupera riga stato corrente
/// </summary>
/// <returns></returns>
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<DS_ProdTempi.stp_repDonati_getLastStatoDurataMacchinaRow>(rawData);
}
// altrimenti DB
else
{
answ = DataLayerObj.taDatiStatoMacch.GetData(IdxMacchina, 0.1)[0];
rawData = JsonConvert.SerializeObject(answ);
memLayer.ML.setRSV(redKey, rawData, 30);
}
return answ;
}
/// <summary>
/// Recupera pezzi prodotti
/// </summary>
/// <param name="numMinuti">Periodo finestra minuti da considerare dato dataora aggiornata ai 15 sec...</param>
/// <returns></returns>
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<int>(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;
}
/// <summary>
/// sistema il testo
/// </summary>
@@ -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 <br />";
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 <br />";
}
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 <br />";
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 <br />", 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;
}
}
}
+11
View File
@@ -548,6 +548,17 @@ namespace MoonProTablet.WebUserControls
return answ;
}
/// <summary>
/// Arrotondamento oggetto datetime all'intervallo timespan indicato
/// </summary>
/// <param name="dt">Dataora</param>
/// <param name="d">Timespan arrotondamento (x eccesso)</param>
/// <returns></returns>
protected DateTime RoundUp(DateTime dt, TimeSpan d)
{
return new DateTime((dt.Ticks + d.Ticks - 1) / d.Ticks * d.Ticks, dt.Kind);
}
#endregion Protected Methods
}
}