Merge branch 'release/UpdatereportStatiCommesse02'
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user