-
+
<% =scriviOra() %>
diff --git a/MapoDb/resoconti.cs b/MapoDb/resoconti.cs
index ff482b27..fec76769 100644
--- a/MapoDb/resoconti.cs
+++ b/MapoDb/resoconti.cs
@@ -11,48 +11,62 @@ using System.Linq;
///
public enum statoMacchina
{
- Run = 1,
- Setup,
- Guasto,
- Campionatura,
- Disposizione,
- Varie
-}
-///
-/// oggetto dati per grafico sequencer
-///
-public struct objSequencer
-{
- ///
- /// Macchina selezionata
- ///
- public string idxMacchina;
- ///
- /// Intervallo date
- ///
- public intervalloDate intervallo;
- ///
- /// serie dei dati da plottare
- ///
- public DataLayer_generic.serieDatiDataTable serieDati;
+ Run = 1,
+ Setup,
+ Guasto,
+ Campionatura,
+ Disposizione,
+ Varie
}
+
///
/// oggetto dati per grafico sequencer
///
public struct jsonVisJS
{
- ///
- /// idx macchina
- ///
- public string idxMacchina;
- ///
- /// intervallo analisi
- ///
- public intervalloDate intervallo;
- ///
- /// serie dei dati già elaborati come json stream
- ///
- public string jsonDati;
+ #region Public Fields
+
+ ///
+ /// idx macchina
+ ///
+ public string idxMacchina;
+
+ ///
+ /// intervallo analisi
+ ///
+ public intervalloDate intervallo;
+
+ ///
+ /// serie dei dati già elaborati come json stream
+ ///
+ public string jsonDati;
+
+ #endregion Public Fields
+}
+
+///
+/// oggetto dati per grafico sequencer
+///
+public struct objSequencer
+{
+ #region Public Fields
+
+ ///
+ /// Macchina selezionata
+ ///
+ public string idxMacchina;
+
+ ///
+ /// Intervallo date
+ ///
+ public intervalloDate intervallo;
+
+ ///
+ /// serie dei dati da plottare
+ ///
+ public DataLayer_generic.serieDatiDataTable serieDati;
+
+ #endregion Public Fields
}
///
@@ -60,16 +74,23 @@ public struct jsonVisJS
///
public struct objTempiCiclo
{
- public intervalloDate intervallo;
- public decimal minVal;
- public decimal maxVal;
- public decimal targetVal;
- public bool palletChange;
- ///
- /// serie dei dati da plottare
- ///
- public DataLayer_generic.serieTimeValDataTable serieDati;
+ #region Public Fields
+
+ public intervalloDate intervallo;
+ public decimal maxVal;
+ public decimal minVal;
+ public bool palletChange;
+
+ ///
+ /// serie dei dati da plottare
+ ///
+ public DataLayer_generic.serieTimeValDataTable serieDati;
+
+ public decimal targetVal;
+
+ #endregion Public Fields
}
+
//public struct intervallo
//{
// public DateTime inizio;
@@ -77,674 +98,333 @@ public struct objTempiCiclo
//}
public class resoconti
{
- #region area protected
+ #region Protected Fields
- protected MapoDb.DS_applicazioneTableAdapters.MacchineTableAdapter taMacchine;
- protected MapoDb.DS_ProdTempiTableAdapters.TempiCicloRilevatiTableAdapter taTempiCiclo;
- protected DS_applicazione.MacchineDataTable _Macchine;
- protected DS_applicazione.MacchineDataTable Macchine
- {
- get
- {
- if (!memLayer.ML.isInCacheObject("Macchine"))
- {
- _Macchine = taMacchine.GetData();
- string serVal = JsonConvert.SerializeObject(_Macchine);
- memLayer.ML.setCacheVal("Macchine", serVal, true);
- }
- else
- {
- string redKey = memLayer.ML.redHash("Macchine");
- string serVal = memLayer.ML.getRSV(redKey);
- _Macchine = JsonConvert.DeserializeObject
(serVal);
- }
- return _Macchine;
- }
- }
- protected MapoDb.DS_applicazioneTableAdapters.StatoMacchineTableAdapter taStatoMacchine;
- protected DS_applicazione.StatoMacchineDataTable _StatoMacchine;
- protected DS_applicazione.StatoMacchineDataTable StatoMacchine
- {
- get
- {
- if (!memLayer.ML.isInCacheObject("StatoMacchine"))
- {
- _StatoMacchine = taStatoMacchine.GetData();
- string serVal = JsonConvert.SerializeObject(_StatoMacchine);
- memLayer.ML.setCacheVal("StatoMacchine", serVal, true);
- }
- else
- {
- string redKey = memLayer.ML.redHash("StatoMacchine");
- string serVal = memLayer.ML.getRSV(redKey);
- _StatoMacchine = JsonConvert.DeserializeObject(serVal);
- }
- return _StatoMacchine;
- }
- }
- protected MapoDb.DS_applicazioneTableAdapters.AnagraficaStatiTableAdapter taStati;
- protected DS_applicazione.AnagraficaStatiDataTable _Stati;
- protected DS_applicazione.AnagraficaStatiDataTable Stati
- {
- get
- {
- if (!memLayer.ML.isInCacheObject("Stati"))
- {
- _Stati = taStati.GetData();
- string serVal = JsonConvert.SerializeObject(_Stati);
- memLayer.ML.setCacheVal("Stati", serVal, true);
- }
- else
- {
- string redKey = memLayer.ML.redHash("Stati");
- string serVal = memLayer.ML.getRSV(redKey);
- _Stati = JsonConvert.DeserializeObject(serVal);
- }
- return _Stati;
- }
- }
- protected MapoDb.DS_applicazioneTableAdapters.DiarioDiBordoTableAdapter taDiarioDiBordo;
- protected DS_applicazione.DiarioDiBordoDataTable _DiarioDiBordo;
- protected DS_applicazione.DiarioDiBordoDataTable DiarioDiBordo
- {
- get
- {
- if (_DiarioDiBordo == null)
- {
- _DiarioDiBordo = taDiarioDiBordo.GetData();
- }
- return _DiarioDiBordo;
- }
- }
- protected MapoDb.DS_applicazioneTableAdapters.ParetoDurateTableAdapter taParetoDurate;
- protected MapoDb.DS_applicazioneTableAdapters.AnagraficaEventiTableAdapter taAnagraficaEventi;
- protected DS_applicazione.AnagraficaEventiDataTable _AnagraficaEventi;
- protected DS_applicazione.AnagraficaEventiDataTable AnagraficaEventi
- {
- get
- {
- if (!memLayer.ML.isInCacheObject("AnagraficaEventi"))
- {
- _AnagraficaEventi = taAnagraficaEventi.GetData();
- string serVal = JsonConvert.SerializeObject(_AnagraficaEventi);
- memLayer.ML.setCacheVal("AnagraficaEventi", serVal, true);
- }
- else
- {
- string redKey = memLayer.ML.redHash("AnagraficaEventi");
- string serVal = memLayer.ML.getRSV(redKey);
- _AnagraficaEventi = JsonConvert.DeserializeObject(serVal);
- }
- return _AnagraficaEventi;
- }
- }
- protected MapoDb.DS_applicazioneTableAdapters.AnagArticoliTableAdapter taAnagArt;
- protected DS_applicazione.AnagArticoliDataTable _AnagArt;
- protected DS_applicazione.AnagArticoliDataTable AnagArt
- {
- get
- {
- if (!memLayer.ML.isInCacheObject("AnagArt"))
- {
- _AnagArt = taAnagArt.GetData();
- string serVal = JsonConvert.SerializeObject(_AnagArt);
- memLayer.ML.setCacheVal("AnagArt", serVal, true);
- }
- else
- {
- string redKey = memLayer.ML.redHash("AnagArt");
- string serVal = memLayer.ML.getRSV(redKey);
- _AnagArt = JsonConvert.DeserializeObject(serVal);
- }
- return _AnagArt;
- }
- }
- protected MapoDb.DS_applicazioneTableAdapters.AnagraficaOperatoriTableAdapter taAnagOpr;
- protected DS_applicazione.AnagraficaOperatoriDataTable _AnagOpr;
- protected DS_applicazione.AnagraficaOperatoriDataTable AnagOpr
- {
- get
- {
- if (!memLayer.ML.isInCacheObject("AnagOpr"))
- {
- _AnagOpr = taAnagOpr.GetData();
- string serVal = JsonConvert.SerializeObject(_AnagOpr);
- memLayer.ML.setCacheVal("AnagOpr", serVal, true);
- }
- else
- {
- string redKey = memLayer.ML.redHash("AnagOpr");
- string serVal = memLayer.ML.getRSV(redKey);
- _AnagOpr = JsonConvert.DeserializeObject(serVal);
- }
- return _AnagOpr;
- }
- }
+ protected DS_applicazione.AnagArticoliDataTable _AnagArt;
+ protected DS_applicazione.AnagraficaOperatoriDataTable _AnagOpr;
+ protected DS_applicazione.AnagraficaEventiDataTable _AnagraficaEventi;
+ protected DS_applicazione.DiarioDiBordoDataTable _DiarioDiBordo;
+ protected DS_applicazione.MacchineDataTable _Macchine;
+ protected DS_applicazione.AnagraficaStatiDataTable _Stati;
+ protected DS_applicazione.StatoMacchineDataTable _StatoMacchine;
+ protected MapoDb.DS_applicazioneTableAdapters.AnagArticoliTableAdapter taAnagArt;
+ protected MapoDb.DS_applicazioneTableAdapters.AnagraficaOperatoriTableAdapter taAnagOpr;
+ protected MapoDb.DS_applicazioneTableAdapters.AnagraficaEventiTableAdapter taAnagraficaEventi;
+ protected MapoDb.DS_applicazioneTableAdapters.DiarioDiBordoTableAdapter taDiarioDiBordo;
+ protected MapoDb.DS_applicazioneTableAdapters.MacchineTableAdapter taMacchine;
+ protected MapoDb.DS_applicazioneTableAdapters.ParetoDurateTableAdapter taParetoDurate;
+ protected MapoDb.DS_applicazioneTableAdapters.AnagraficaStatiTableAdapter taStati;
+ protected MapoDb.DS_applicazioneTableAdapters.StatoMacchineTableAdapter taStatoMacchine;
+ protected MapoDb.DS_ProdTempiTableAdapters.TempiCicloRilevatiTableAdapter taTempiCiclo;
- #endregion
+ #endregion Protected Fields
- #region area public
+ #region Public Fields
- public resoconti()
- {
- AvviaTabAdapt();
- setConnString();
- }
- ///
- /// singleton accesso resoconti
- ///
- public static resoconti mngr = new resoconti();
+ ///
+ /// singleton accesso resoconti
+ ///
+ public static resoconti mngr = new resoconti();
- ///
- /// avvio i table adapter della classe
- ///
- private void AvviaTabAdapt()
- {
- taMacchine = new MapoDb.DS_applicazioneTableAdapters.MacchineTableAdapter();
- taStatoMacchine = new MapoDb.DS_applicazioneTableAdapters.StatoMacchineTableAdapter();
- taStati = new MapoDb.DS_applicazioneTableAdapters.AnagraficaStatiTableAdapter();
- taDiarioDiBordo = new MapoDb.DS_applicazioneTableAdapters.DiarioDiBordoTableAdapter();
- taParetoDurate = new MapoDb.DS_applicazioneTableAdapters.ParetoDurateTableAdapter();
- taAnagraficaEventi = new MapoDb.DS_applicazioneTableAdapters.AnagraficaEventiTableAdapter();
- taAnagArt = new MapoDb.DS_applicazioneTableAdapters.AnagArticoliTableAdapter();
- taAnagOpr = new MapoDb.DS_applicazioneTableAdapters.AnagraficaOperatoriTableAdapter();
- taTempiCiclo = new MapoDb.DS_ProdTempiTableAdapters.TempiCicloRilevatiTableAdapter();
- }
- ///
- /// forza la connString x i vari table adapters
- ///
- private void setConnString()
- {
- string _connectionString = memLayer.ML.confReadString("MoonProConnectionString");
- taMacchine.Connection.ConnectionString = _connectionString;
- taStatoMacchine.Connection.ConnectionString = _connectionString;
- taStati.Connection.ConnectionString = _connectionString;
- taDiarioDiBordo.Connection.ConnectionString = _connectionString;
- taParetoDurate.Connection.ConnectionString = _connectionString;
- taAnagraficaEventi.Connection.ConnectionString = _connectionString;
- taAnagArt.Connection.ConnectionString = _connectionString;
- taAnagOpr.Connection.ConnectionString = _connectionString;
- taTempiCiclo.Connection.ConnectionString = _connectionString;
- }
+ #endregion Public Fields
- public string locazioneDaIdx(string idx)
- {
- string answ = "";
- try
- {
- DS_applicazione.MacchineRow riga = Macchine.FindByIdxMacchina(idx);
- if (riga != null)
- {
- answ = riga.locazione;
- }
- }
- catch
- { }
- return answ;
- }
- public string idxDaLocazione(string locazione)
- {
- string answ = "";
- DS_applicazione.MacchineRow riga = null;
- try
- {
- riga = (DS_applicazione.MacchineRow)Macchine.Select(string.Format("locazione = '{0}'", locazione))[0];
- answ = riga.IdxMacchina;
- }
- catch
- {
- }
- return answ;
- }
- public string nomeMacchina(string idx)
- {
- string answ = "";
- DS_applicazione.MacchineRow riga = Macchine.FindByIdxMacchina(idx);
- try
- {
- answ = string.Format("{0} ({1} - {2})", riga.Nome, riga.CodMacchina, riga.Descrizione);
- }
- catch
- { }
- return answ;
- }
- public string macchinaDaIdx(string idx)
- {
- string answ = "";
- try
- {
- DS_applicazione.MacchineRow riga = Macchine.FindByIdxMacchina(idx);
- answ = riga.CodMacchina;
- }
- catch
- { }
- return answ;
- }
- public string urlMacchina(string idx)
- {
- string answ = "";
- DS_applicazione.MacchineRow riga = null;
- try
- {
- riga = Macchine.FindByIdxMacchina(idx);
- answ = riga.url;
- }
- catch
- { }
- return answ;
- }
- ///
- /// fornisce idxStato della macchina indicata
- ///
- ///
- ///
- public int statoMacchina(string idx)
- {
- int answ = 0;
- try
- {
- DataLayer DataLayerObj = new DataLayer();
- if (memLayer.ML.CRB("RedEnab"))
- {
- // recupero SE IMPIEGATO REDIS i valori del Dictionary della macchina...
- Dictionary datiMacc = DataLayerObj.mDatiMacchine(idx);
- answ = Convert.ToInt32(datiMacc["IdxStato"]);
- }
- if (answ == 0)
- {
+ #region Public Constructors
- DS_ProdTempi.stp_repDonati_getLastStatoDurataMacchinaRow riga = DataLayerObj.taDatiStatoMacch.GetData(idx, 0)[0];
- answ = riga.idxStato;
- }
- }
- catch
- { }
- return answ;
- }
- ///
- /// fornisce descrizione stato da IdxStato
- ///
- ///
- ///
- public string statoDaIdx(int idx)
- {
- return Stati.FindByIdxStato(idx).Descrizione;
- }
- ///
- /// fornisce cod operatore data matricola
- ///
- ///
- ///
- public string oprDaMatr(int matr)
- {
- string answ = "nd";
- try
+ public resoconti()
{
- DS_applicazione.AnagraficaOperatoriRow riga = AnagOpr.FindByMatrOpr(matr);
- answ = string.Format("{0} {1}", riga.Cognome, riga.Nome);
+ AvviaTabAdapt();
+ setConnString();
}
- catch
- { }
- return answ;
- }
- ///
- /// Dizionario codici colore (chiave = idxStato), valore = codice colore
- ///
- protected Dictionary codColore
- {
- get
+
+ #endregion Public Constructors
+
+ #region Protected Properties
+
+ protected DS_applicazione.AnagraficaOperatoriDataTable AnagOpr
{
- Dictionary answ = new Dictionary();
- if (memLayer.ML.isInCacheObject("codColore"))
- {
- string redKey = memLayer.ML.redHash("codColore");
- string serVal = memLayer.ML.getRSV(redKey);
- answ = JsonConvert.DeserializeObject>(serVal);
- }
- else
- {
- string _colore = "";
- foreach (DS_applicazione.AnagraficaStatiRow item in Stati)
+ get
{
- switch (item.Semaforo)
- {
- case "sGi": // giallo
- _colore = "#ffec00";
- break;
- case "sRo": // rosso
- _colore = "#e2001a";
- break;
- case "sGr": // grigio - spenta
- _colore = "#bcbcbc";
- break;
- case "sVe": // verde
- _colore = "#009036";
- break;
- case "sBl": // blu
- _colore = "#3690FF";
- break;
- default:
- break;
- }
- answ.Add(item.IdxStato, _colore);
+ if (!memLayer.ML.isInCacheObject("AnagOpr"))
+ {
+ _AnagOpr = taAnagOpr.GetData();
+ string serVal = JsonConvert.SerializeObject(_AnagOpr);
+ memLayer.ML.setCacheVal("AnagOpr", serVal, true);
+ }
+ else
+ {
+ string redKey = memLayer.ML.redHash("AnagOpr");
+ string serVal = memLayer.ML.getRSV(redKey);
+ _AnagOpr = JsonConvert.DeserializeObject(serVal);
+ }
+ return _AnagOpr;
}
- string serVal = JsonConvert.SerializeObject(answ);
- memLayer.ML.setCacheVal("codColore", serVal, true);
- }
- return answ;
}
- }
- ///
- /// Dizionario codici semaforo (chiave = idxStato), valore = codice semaforo
- ///
- protected Dictionary codSemaforo
- {
- get
- {
- Dictionary answ = new Dictionary();
- if (memLayer.ML.isInCacheObject("codSemaforo"))
- {
- string redKey = memLayer.ML.redHash("codSemaforo");
- string serVal = memLayer.ML.getRSV(redKey);
- answ = JsonConvert.DeserializeObject>(serVal);
- }
- else
- {
- foreach (DS_applicazione.AnagraficaStatiRow item in Stati)
- {
- answ.Add(item.IdxStato, item.Semaforo);
- }
- string serVal = JsonConvert.SerializeObject(answ);
- memLayer.ML.setCacheVal("codSemaforo", serVal, true);
- }
- return answ;
- }
- }
- ///
- /// Restituisce colore da IdxStato
- ///
- ///
- ///
- public string coloreDaIdx(int idx)
- {
- string _answ = "";
- if (memLayer.ML.CRB("fastColorDecode"))
+ ///
+ /// Dizionario codici colore (chiave = idxStato), valore = codice colore
+ ///
+ protected Dictionary codColore
{
- _answ = codColore[idx];
- }
- else
- {
- switch (Stati.FindByIdxStato(idx).Semaforo)
- {
- case "sGi": // giallo
- _answ = "#ffec00";
- break;
- case "sRo": // rosso
- _answ = "#e2001a";
- break;
- case "sGr": // grigio - spenta
- _answ = "#bcbcbc";
- break;
- case "sVe": // verde
- _answ = "#009036";
- break;
- case "sBl": // blu
- _answ = "#3690FF";
- break;
- default:
- break;
- }
- }
- return _answ;
- }
- ///
- /// restituisce cod semaforo dato IdxStato
- ///
- ///
- ///
- public string semaforoDaIdxStato(int idx)
- {
- string _answ = "";
- if (memLayer.ML.CRB("fastColorDecode"))
- {
- _answ = codSemaforo[idx];
- }
- else
- {
- _answ = Stati.FindByIdxStato(idx).Semaforo;
- }
- return _answ;
- }
- ///
- /// fornisce una torta stati
- ///
- ///
- ///
- ///
- ///
- ///
- public DataLayer_generic.serieDatiDataTable tortaStati(string idx, intervalloDate _intervallo, int minDurata, bool hideSpenta)
- {
- // leggo i dati e costituisco una collezione...
- DataLayer_generic.serieDatiDataTable punti = new DataLayer_generic.serieDatiDataTable();
- // seleziono i dati...
- DS_applicazione.ParetoDurateDataTable tabPareto;
- if (hideSpenta)
- {
- tabPareto = taParetoDurate.GetParetoDurateHideSpenta(idx, minDurata, _intervallo.fine, _intervallo.inizio);
- }
- else
- {
- tabPareto = taParetoDurate.GetParetoDurateFilt(idx, minDurata, _intervallo.fine, _intervallo.inizio);
- }
- double totale = 1;
- try
- {
- totale = (double)tabPareto.Compute("SUM(DurataMinuti)", "");
- }
- catch
- {
- }
- foreach (DS_applicazione.ParetoDurateRow riga in tabPareto.Rows)
- {
- punti.AddserieDatiRow((float)((Math.Round(((float)riga.DurataMinuti) / totale * 1000)) / 1000), coloreDaIdx(riga.IdxStato), statoDaIdx(riga.IdxStato), riga.InizioStato);
- }
- return punti;
- }
- ///
- /// tipo evento da Idx
- ///
- ///
- ///
- public string tipoDaIdx(int idx)
- {
- return AnagraficaEventi.FindByIdxTipo(idx).Nome;
- }
- ///
- /// oggetto sequenza dati x sequencer
- ///
- /// IdxMacchina
- ///
- ///
- public objSequencer sequenzaDati(string idxMacchina, intervalloDate _intervallo)
- {
- DateTime start = DateTime.Now;
- // leggo i dati e costituisco una collezione...
- objSequencer _sequenza = new objSequencer();
- if (idxMacchina != null && idxMacchina != "")
- {
- // verifico se ho i dati in cache REDIS...
- double numGG = _intervallo.fine.Subtract(_intervallo.inizio).TotalDays;
- logger.lg.scriviLog(string.Format("Richiesta dati legacySeq idxMacc {0} per {1} gg", idxMacchina, 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 != "")
- {
- try
+ get
{
- needRecalc = false;
- // deserializzo
- _sequenza = JsonConvert.DeserializeObject(redJson);
- logger.lg.scriviLog("Recuperato legacySeq " + idxMacchina + " " + rKey);
- }
- catch
- { }
- }
- if (needRecalc)
- {
- logger.lg.scriviLog(string.Format("INIZIO calcolo dati per {0} {1}", idxMacchina, rKey));
- // altrimenti procedo come al solito...
- _sequenza.idxMacchina = idxMacchina;
- _sequenza.serieDati = new DataLayer_generic.serieDatiDataTable();
- // seleziono i dati...
- DS_applicazione.DiarioDiBordoDataTable tabSeq = taDiarioDiBordo.GetSequenza(idxMacchina, _intervallo.inizio, _intervallo.fine);
- logger.lg.scriviLog(string.Format("Recuperate per {0} {1} righe da DB", idxMacchina, tabSeq.Count));
- // processo
- foreach (DS_applicazione.DiarioDiBordoRow riga in tabSeq.Rows)
- {
- _sequenza.serieDati.AddserieDatiRow(riga.DurataMinuti, semaforoDaIdxStato(riga.IdxStato), riga.CodArticolo, riga.InizioStato);
- }
- // SE HO ALMENO un evento
- if (tabSeq.Count > 0)
- {
- // 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} {1}", idxMacchina, 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("Salvato legacySeq in REDIS {0} {1}", idxMacchina, rKey));
- }
- }
- return _sequenza;
- }
- ///
- /// oggetto GRUPPI x sequencer formato VisJS
- ///
- /// IdxMacchina
- ///
- public List groupsVisJS(string idxMacchina)
- {
- List sequenza = new List();
- // se idxMacchina = 0 --> ciclo su tutte con 1 / numMacch eventi ciascuna...
- if (idxMacchina != "0")
- {
- sequenza.Add(new visjsDsGroups
- {
- id = idxMacchina,
- content = idxMacchina,
- className = ""
- });
- }
- else
- {
- // ciclo su tutte le macchine
- DataLayer DataLayerObj = new DataLayer();
- var elMacchine = DataLayerObj.taSelMacc.getAttive();
- foreach (var item in elMacchine)
- {
- sequenza.Add(new visjsDsGroups
- {
- id = item.value,
- content = item.label,
- className = ""
- });
- }
- }
- return sequenza;
- }
- ///
- /// oggetto sequenza dati x sequencer formato VisJS
- ///
- /// IdxMacchina
- ///
- /// num massimo segmenti da restituire
- ///
- public List sequenzaDatiVisJS(string idxMacchina, intervalloDate _intervallo, int numSplit)
- {
- List sequenza = new List();
- // se idxMacchina = 0 --> ciclo su tutte con 1 / numMacch eventi ciascuna...
- if (idxMacchina != "0")
- {
- sequenza.AddRange(seqSingleMachine(idxMacchina, _intervallo, numSplit, 0));
- }
- else
- {
- int index = 0;
- // ciclo su tutte le macchine
- DataLayer DataLayerObj = new DataLayer();
- var elMacchine = DataLayerObj.taSelMacc.getAttive();
- foreach (var item in elMacchine)
- {
- sequenza.AddRange(seqSingleMachine(item.value, _intervallo, numSplit, index));
- index = sequenza.Count;
- }
- }
- return sequenza;
- }
- ///
- /// recupera sequenza x una SINGOLA macchina
- ///
- ///
- ///
- ///
- ///
- ///
- private List seqSingleMachine(string idxMacchina, intervalloDate _intervallo, int numSplit, int index)
- {
- List sequenza = new List();
- Stopwatch stopwatch = new Stopwatch();
- DateTime start = DateTime.Now;
- // leggo i dati e costituisco una collezione...
- int i = index;
- if (idxMacchina != null && idxMacchina != "")
- {
- logger.lg.scriviLog("inizio WS");
- stopwatch.Restart();
- // seleziono i dati...
- DS_applicazione.DiarioDiBordoDataTable tabSeq = taDiarioDiBordo.GetSequenza(idxMacchina, _intervallo.inizio, _intervallo.fine);
- logger.lg.scriviLog(string.Format("Letta tabella: {0} rec, {1} msec", tabSeq.Rows.Count, stopwatch.ElapsedMilliseconds));
+ Dictionary answ = new Dictionary();
+ if (memLayer.ML.isInCacheObject("codColore"))
+ {
+ string redKey = memLayer.ML.redHash("codColore");
+ string serVal = memLayer.ML.getRSV(redKey);
+ answ = JsonConvert.DeserializeObject>(serVal);
+ }
+ else
+ {
+ string _colore = "";
+ foreach (DS_applicazione.AnagraficaStatiRow item in Stati)
+ {
+ switch (item.Semaforo)
+ {
+ case "sGi": // giallo
+ _colore = "#ffec00";
+ break;
- // se ho troppi dati faccio la riduzione dei dati, MAX numSplit...
- if (tabSeq.Rows.Count > numSplit)
- {
- double sogliaMin = _intervallo.fine.Subtract(_intervallo.inizio).TotalMinutes / numSplit;
- tabSeq = riduciSeq(tabSeq, sogliaMin);
- }
- logger.lg.scriviLog(string.Format("Riduzione seq fatta: {0} rec, {1} msec", tabSeq.Count, stopwatch.ElapsedMilliseconds));
- // ora converto in oggetto definitivo x vis.js
- sequenza = tabSeq.AsEnumerable().Select(riga => new visjsDsItem
- {
- //id = i,
- content = "",//riga.CodArticolo,
- start = riga.InizioStato.ToString("yyyy-MM-dd HH:mm:ss"),
- end = riga.FineStato.ToString("yyyy-MM-dd HH:mm:ss"),
- group = riga.IdxMacchina,// "1", // per mostrare multi macchine
- type = "background", // importante x non vedere bordi...
- className = semaforoDaIdxStato(riga.IdxStato)
- }).ToList();
+ case "sRo": // rosso
+ _colore = "#e2001a";
+ break;
- foreach (var item in sequenza)
- {
- //item.content = i.ToString();
- item.id = i;
- i++;
- }
- logger.lg.scriviLog(string.Format("Conversione oggetto eseguita: {0} rec, {1} msec", sequenza.Count, stopwatch.ElapsedMilliseconds));
+ case "sGr": // grigio - spenta
+ _colore = "#bcbcbc";
+ break;
+
+ case "sVe": // verde
+ _colore = "#009036";
+ break;
+
+ case "sBl": // blu
+ _colore = "#3690FF";
+ break;
+
+ default:
+ break;
+ }
+ answ.Add(item.IdxStato, _colore);
+ }
+ string serVal = JsonConvert.SerializeObject(answ);
+ memLayer.ML.setCacheVal("codColore", serVal, true);
+ }
+ return answ;
+ }
+ }
+
+ ///
+ /// Dizionario codici semaforo (chiave = idxStato), valore = codice semaforo
+ ///
+ protected Dictionary codSemaforo
+ {
+ get
+ {
+ Dictionary answ = new Dictionary();
+ if (memLayer.ML.isInCacheObject("codSemaforo"))
+ {
+ string redKey = memLayer.ML.redHash("codSemaforo");
+ string serVal = memLayer.ML.getRSV(redKey);
+ answ = JsonConvert.DeserializeObject>(serVal);
+ }
+ else
+ {
+ foreach (DS_applicazione.AnagraficaStatiRow item in Stati)
+ {
+ answ.Add(item.IdxStato, item.Semaforo);
+ }
+ string serVal = JsonConvert.SerializeObject(answ);
+ memLayer.ML.setCacheVal("codSemaforo", serVal, true);
+ }
+ return answ;
+ }
+ }
+
+ protected DS_applicazione.AnagraficaStatiDataTable Stati
+ {
+ get
+ {
+ if (!memLayer.ML.isInCacheObject("Stati"))
+ {
+ _Stati = taStati.GetData();
+ string serVal = JsonConvert.SerializeObject(_Stati);
+ memLayer.ML.setCacheVal("Stati", serVal, true);
+ }
+ else
+ {
+ string redKey = memLayer.ML.redHash("Stati");
+ string serVal = memLayer.ML.getRSV(redKey);
+ _Stati = JsonConvert.DeserializeObject(serVal);
+ }
+ return _Stati;
+ }
+ }
+
+ #endregion Protected Properties
+
+ #region Public Properties
+
+ protected DS_applicazione.AnagArticoliDataTable AnagArt
+ {
+ get
+ {
+ if (!memLayer.ML.isInCacheObject("AnagArt"))
+ {
+ _AnagArt = taAnagArt.GetData();
+ string serVal = JsonConvert.SerializeObject(_AnagArt);
+ memLayer.ML.setCacheVal("AnagArt", serVal, true);
+ }
+ else
+ {
+ string redKey = memLayer.ML.redHash("AnagArt");
+ string serVal = memLayer.ML.getRSV(redKey);
+ _AnagArt = JsonConvert.DeserializeObject(serVal);
+ }
+ return _AnagArt;
+ }
+ }
+
+ protected DS_applicazione.AnagraficaEventiDataTable AnagraficaEventi
+ {
+ get
+ {
+ if (!memLayer.ML.isInCacheObject("AnagraficaEventi"))
+ {
+ _AnagraficaEventi = taAnagraficaEventi.GetData();
+ string serVal = JsonConvert.SerializeObject(_AnagraficaEventi);
+ memLayer.ML.setCacheVal("AnagraficaEventi", serVal, true);
+ }
+ else
+ {
+ string redKey = memLayer.ML.redHash("AnagraficaEventi");
+ string serVal = memLayer.ML.getRSV(redKey);
+ _AnagraficaEventi = JsonConvert.DeserializeObject(serVal);
+ }
+ return _AnagraficaEventi;
+ }
+ }
+
+ protected DS_applicazione.DiarioDiBordoDataTable DiarioDiBordo
+ {
+ get
+ {
+ if (_DiarioDiBordo == null)
+ {
+ _DiarioDiBordo = taDiarioDiBordo.GetData();
+ }
+ return _DiarioDiBordo;
+ }
+ }
+
+ protected DS_applicazione.MacchineDataTable Macchine
+ {
+ get
+ {
+ if (!memLayer.ML.isInCacheObject("Macchine"))
+ {
+ _Macchine = taMacchine.GetData();
+ string serVal = JsonConvert.SerializeObject(_Macchine);
+ memLayer.ML.setCacheVal("Macchine", serVal, true);
+ }
+ else
+ {
+ string redKey = memLayer.ML.redHash("Macchine");
+ string serVal = memLayer.ML.getRSV(redKey);
+ _Macchine = JsonConvert.DeserializeObject(serVal);
+ }
+ return _Macchine;
+ }
+ }
+
+ protected DS_applicazione.StatoMacchineDataTable StatoMacchine
+ {
+ get
+ {
+ if (!memLayer.ML.isInCacheObject("StatoMacchine"))
+ {
+ _StatoMacchine = taStatoMacchine.GetData();
+ string serVal = JsonConvert.SerializeObject(_StatoMacchine);
+ memLayer.ML.setCacheVal("StatoMacchine", serVal, true);
+ }
+ else
+ {
+ string redKey = memLayer.ML.redHash("StatoMacchine");
+ string serVal = memLayer.ML.getRSV(redKey);
+ _StatoMacchine = JsonConvert.DeserializeObject(serVal);
+ }
+ return _StatoMacchine;
+ }
+ }
+
+ #endregion Public Properties
+
+ #region Private Methods
+
+ ///
+ /// avvio i table adapter della classe
+ ///
+ private void AvviaTabAdapt()
+ {
+ taMacchine = new MapoDb.DS_applicazioneTableAdapters.MacchineTableAdapter();
+ taStatoMacchine = new MapoDb.DS_applicazioneTableAdapters.StatoMacchineTableAdapter();
+ taStati = new MapoDb.DS_applicazioneTableAdapters.AnagraficaStatiTableAdapter();
+ taDiarioDiBordo = new MapoDb.DS_applicazioneTableAdapters.DiarioDiBordoTableAdapter();
+ taParetoDurate = new MapoDb.DS_applicazioneTableAdapters.ParetoDurateTableAdapter();
+ taAnagraficaEventi = new MapoDb.DS_applicazioneTableAdapters.AnagraficaEventiTableAdapter();
+ taAnagArt = new MapoDb.DS_applicazioneTableAdapters.AnagArticoliTableAdapter();
+ taAnagOpr = new MapoDb.DS_applicazioneTableAdapters.AnagraficaOperatoriTableAdapter();
+ taTempiCiclo = new MapoDb.DS_ProdTempiTableAdapters.TempiCicloRilevatiTableAdapter();
+ }
+
+ ///
+ /// recupera sequenza x una SINGOLA macchina
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ private List seqSingleMachine(string idxMacchina, intervalloDate _intervallo, int numSplit, int index)
+ {
+ List sequenza = new List();
+ Stopwatch stopwatch = new Stopwatch();
+ DateTime start = DateTime.Now;
+ // leggo i dati e costituisco una collezione...
+ int i = index;
+ if (idxMacchina != null && idxMacchina != "")
+ {
+ logger.lg.scriviLog("inizio WS");
+ stopwatch.Restart();
+ // seleziono i dati...
+ DS_applicazione.DiarioDiBordoDataTable tabSeq = taDiarioDiBordo.GetSequenza(idxMacchina, _intervallo.inizio, _intervallo.fine);
+ logger.lg.scriviLog(string.Format("Letta tabella: {0} rec, {1} msec", tabSeq.Rows.Count, stopwatch.ElapsedMilliseconds));
+
+ // se ho troppi dati faccio la riduzione dei dati, MAX numSplit...
+ if (tabSeq.Rows.Count > numSplit)
+ {
+ double sogliaMin = _intervallo.fine.Subtract(_intervallo.inizio).TotalMinutes / numSplit;
+ tabSeq = riduciSeq(tabSeq, sogliaMin);
+ }
+ logger.lg.scriviLog(string.Format("Riduzione seq fatta: {0} rec, {1} msec", tabSeq.Count, stopwatch.ElapsedMilliseconds));
+ // ora converto in oggetto definitivo x vis.js
+ sequenza = tabSeq.AsEnumerable().Select(riga => new visjsDsItem
+ {
+ //id = i,
+ content = "",//riga.CodArticolo,
+ start = riga.InizioStato.ToString("yyyy-MM-dd HH:mm:ss"),
+ end = riga.FineStato.ToString("yyyy-MM-dd HH:mm:ss"),
+ group = riga.IdxMacchina,// "1", // per mostrare multi macchine
+ type = "background", // importante x non vedere bordi...
+ className = semaforoDaIdxStato(riga.IdxStato)
+ }).ToList();
+
+ foreach (var item in sequenza)
+ {
+ //item.content = i.ToString();
+ item.id = i;
+ i++;
+ }
+ logger.lg.scriviLog(string.Format("Conversione oggetto eseguita: {0} rec, {1} msec", sequenza.Count, stopwatch.ElapsedMilliseconds));
#if false
// faccio trim x primo evento...
if (_sequenza[0].start < _intervallo.inizio)
@@ -754,181 +434,635 @@ public class resoconti
}
//...e ultimo evento...
int numValori = _sequenza.serieDati.Count - 1;
- _sequenza.serieDati[numValori].valore = _intervallo.fine.Subtract(_sequenza.serieDati[numValori].timeData).TotalMinutes;
+ _sequenza.serieDati[numValori].valore = _intervallo.fine.Subtract(_sequenza.serieDati[numValori].timeData).TotalMinutes;
#endif
+ }
+
+ return sequenza;
}
- return sequenza;
- }
-
- ///
- /// Effettua riduzione per accorpamento valori
- ///
- ///
- ///
- protected DS_applicazione.DiarioDiBordoDataTable riduciSeq(DS_applicazione.DiarioDiBordoDataTable original, double sogliaMin)
- {
- DS_applicazione.DiarioDiBordoDataTable copia = new DS_applicazione.DiarioDiBordoDataTable();
- //DS_applicazione.DiarioDiBordoRow currRow;
- // valori x setup
- double minVerde = 0.5;
- double minRosso = 0.5;
- double minSpento = 0.5;
-
- 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;
- foreach (var riga in original)
+ ///
+ /// forza la connString x i vari table adapters
+ ///
+ private void setConnString()
{
- // salvo prima data...
- if (riga.InizioStato < _t_0)
- {
- _t_0 = riga.InizioStato;
- }
- if (riga.DurataMinuti > _maxVal)
- {
- _maxVal = Convert.ToInt32(riga.DurataMinuti);
- _mostCodArticolo = riga.CodArticolo;
- }
- valRigaCum = valRigaCum + riga.DurataMinuti;
- // accumulo valori...
- switch (semaforoDaIdxStato(riga.IdxStato))
- {
- case "sVe":
- valV = valV + riga.DurataMinuti;
- break;
- case "sGi":
- valG = valG + riga.DurataMinuti;
- break;
- case "sRo":
- valR = valR + riga.DurataMinuti;
- break;
- case "sBl":
- valB = valB + riga.DurataMinuti;
- break;
- case "sGr":
- valS = valS + riga.DurataMinuti;
- break;
- }
- // se è maggiore plotto...
- if (valRigaCum >= sogliaMin)
- {
- // determino il colore...
- if (valV / valRigaCum >= minVerde)
+ string _connectionString = memLayer.ML.confReadString("MoonProConnectionString");
+ taMacchine.Connection.ConnectionString = _connectionString;
+ taStatoMacchine.Connection.ConnectionString = _connectionString;
+ taStati.Connection.ConnectionString = _connectionString;
+ taDiarioDiBordo.Connection.ConnectionString = _connectionString;
+ taParetoDurate.Connection.ConnectionString = _connectionString;
+ taAnagraficaEventi.Connection.ConnectionString = _connectionString;
+ taAnagArt.Connection.ConnectionString = _connectionString;
+ taAnagOpr.Connection.ConnectionString = _connectionString;
+ taTempiCiclo.Connection.ConnectionString = _connectionString;
+ }
+
+ #endregion Private Methods
+
+ #region Protected Methods
+
+ ///
+ /// Effettua riduzione per accorpamento valori
+ ///
+ ///
+ ///
+ protected DS_applicazione.DiarioDiBordoDataTable riduciSeq(DS_applicazione.DiarioDiBordoDataTable original, double sogliaMin)
+ {
+ DS_applicazione.DiarioDiBordoDataTable copia = new DS_applicazione.DiarioDiBordoDataTable();
+ //DS_applicazione.DiarioDiBordoRow currRow;
+ // valori x setup
+ double minVerde = 0.5;
+ double minRosso = 0.5;
+ double minSpento = 0.5;
+
+ 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;
+ foreach (var riga in original)
{
- valV = 0.0;
+ // salvo prima data...
+ if (riga.InizioStato < _t_0)
+ {
+ _t_0 = riga.InizioStato;
+ }
+ if (riga.DurataMinuti > _maxVal)
+ {
+ _maxVal = Convert.ToInt32(riga.DurataMinuti);
+ _mostCodArticolo = riga.CodArticolo;
+ }
+ valRigaCum = valRigaCum + riga.DurataMinuti;
+ // accumulo valori...
+ switch (semaforoDaIdxStato(riga.IdxStato))
+ {
+ case "sVe":
+ valV = valV + riga.DurataMinuti;
+ break;
+
+ case "sGi":
+ valG = valG + riga.DurataMinuti;
+ break;
+
+ case "sRo":
+ valR = valR + riga.DurataMinuti;
+ break;
+
+ case "sBl":
+ valB = valB + riga.DurataMinuti;
+ break;
+
+ case "sGr":
+ valS = valS + riga.DurataMinuti;
+ break;
+ }
+ // se è maggiore plotto...
+ if (valRigaCum >= sogliaMin)
+ {
+ // determino il colore...
+ if (valV / valRigaCum >= minVerde)
+ {
+ valV = 0.0;
+ }
+ else if (valR / valRigaCum >= minRosso)
+ {
+ valR = 0.0;
+ }
+ else if (valS / valRigaCum >= minSpento)
+ {
+ valS = 0.0;
+ }
+ else if (valB / valRigaCum >= minSpento)
+ {
+ valB = 0.0;
+ }
+ else
+ {
+ valG = 0.0;
+ }
+ // modifico riga corrente...
+ riga.DurataMinuti = valRigaCum;
+ riga.CodArticolo = _mostCodArticolo;
+ //riga.InizioStato = _t_0;
+ copia.ImportRow(riga);
+ // modifico inizio stato...
+ ((DS_applicazione.DiarioDiBordoRow)copia.Rows[copia.Rows.Count - 1]).InizioStato = _t_0;
+ // reset dei contatori...
+ valRigaCum = 0.0;
+
+ _t_0 = new DateTime(9999, 1, 1);
+ _mostCodArticolo = "";
+ _maxVal = 0;
+ }
}
- else if (valR / valRigaCum >= minRosso)
+ // restituisco valori "ridotti"
+ return copia;
+ }
+
+ #endregion Protected Methods
+
+ #region Public Methods
+
+ ///
+ /// Restituisce colore da IdxStato
+ ///
+ ///
+ ///
+ public string coloreDaIdx(int idx)
+ {
+ string _answ = "";
+
+ if (memLayer.ML.CRB("fastColorDecode"))
{
- valR = 0.0;
- }
- else if (valS / valRigaCum >= minSpento)
- {
- valS = 0.0;
- }
- else if (valB / valRigaCum >= minSpento)
- {
- valB = 0.0;
+ _answ = codColore[idx];
}
else
{
- valG = 0.0;
+ switch (Stati.FindByIdxStato(idx).Semaforo)
+ {
+ case "sGi": // giallo
+ _answ = "#ffec00";
+ break;
+
+ case "sRo": // rosso
+ _answ = "#e2001a";
+ break;
+
+ case "sGr": // grigio - spenta
+ _answ = "#bcbcbc";
+ break;
+
+ case "sVe": // verde
+ _answ = "#009036";
+ break;
+
+ case "sBl": // blu
+ _answ = "#3690FF";
+ break;
+
+ default:
+ break;
+ }
}
- // modifico riga corrente...
- riga.DurataMinuti = valRigaCum;
- riga.CodArticolo = _mostCodArticolo;
- //riga.InizioStato = _t_0;
- copia.ImportRow(riga);
- // modifico inizio stato...
- ((DS_applicazione.DiarioDiBordoRow)copia.Rows[copia.Rows.Count - 1]).InizioStato = _t_0;
- // reset dei contatori...
- valRigaCum = 0.0;
-
- _t_0 = new DateTime(9999, 1, 1);
- _mostCodArticolo = "";
- _maxVal = 0;
- }
+ return _answ;
}
- // restituisco valori "ridotti"
- return copia;
- }
- ///
- /// oggetto sequenza tempi ciclo x visualizzatore
- ///
- ///
- ///
- /// tempo target di riferimento (se zero calcola la media...)
- ///
- public objTempiCiclo tempiCiclo(string idxMacchina, intervalloDate _intervallo, decimal targetVal)
- {
- // inizializzo
- objTempiCiclo _serie = new objTempiCiclo();
- if (idxMacchina != null && idxMacchina != "")
+ ///
+ /// oggetto GRUPPI x sequencer formato VisJS
+ ///
+ /// IdxMacchina
+ ///
+ public List groupsVisJS(string idxMacchina)
{
- _serie.serieDati = new DataLayer_generic.serieTimeValDataTable();
- // seleziono i dati
- if (targetVal > 0)
- {
- _serie.targetVal = targetVal;
- }
- else
- {
+ List sequenza = new List();
+ // se idxMacchina = 0 --> ciclo su tutte con 1 / numMacch eventi ciascuna...
+ if (idxMacchina != "0")
+ {
+ sequenza.Add(new visjsDsGroups
+ {
+ id = idxMacchina,
+ content = idxMacchina,
+ className = ""
+ });
+ }
+ else
+ {
+ // ciclo su tutte le macchine
+ DataLayer DataLayerObj = new DataLayer();
+ var elMacchine = DataLayerObj.taSelMacc.getAttive();
+ foreach (var item in elMacchine)
+ {
+ sequenza.Add(new visjsDsGroups
+ {
+ id = item.value,
+ content = item.label,
+ className = ""
+ });
+ }
+ }
+ return sequenza;
+ }
+
+ public string idxDaLocazione(string locazione)
+ {
+ string answ = "";
+ DS_applicazione.MacchineRow riga = null;
try
{
- _serie.targetVal = taTempiCiclo.getMedByMacchinaPeriodo(idxMacchina, _intervallo.inizio, _intervallo.fine)[0].TCMedio;
+ riga = (DS_applicazione.MacchineRow)Macchine.Select(string.Format("locazione = '{0}'", locazione))[0];
+ answ = riga.IdxMacchina;
+ }
+ catch
+ {
+ }
+ return answ;
+ }
+
+ public string locazioneDaIdx(string idx)
+ {
+ string answ = "";
+ try
+ {
+ DS_applicazione.MacchineRow riga = Macchine.FindByIdxMacchina(idx);
+ if (riga != null)
+ {
+ answ = riga.locazione;
+ }
}
catch
{ }
- }
- int TcMaxFactor = memLayer.ML.CRI("TcMaxFactor");
- DS_ProdTempi.TempiCicloRilevatiDataTable tabTempi = taTempiCiclo.getByMacchinaPeriodoFiltMax(idxMacchina, _intervallo.inizio, _intervallo.fine, _serie.targetVal * TcMaxFactor);
- // converto!
- DateTime inizio;
- foreach (MapoDb.DS_ProdTempi.TempiCicloRilevatiRow riga in tabTempi.Rows)
- {
- inizio = riga.DataOraRif.AddMinutes(Convert.ToDouble(-riga.TCMedio * riga.PzProd)); // tolgo il tempo necessario a produrre i pezzi indicati come inizio
- _serie.serieDati.AddserieTimeValRow(inizio, riga.DataOraRif, riga.TCMedio, string.Format("Art: {0} - T.C. {1}'", riga.CodArticolo, riga.TCMedio), riga.CodArticolo);
- }
- // sistemo estremi x date e valori
- try
- {
- _serie.maxVal = taTempiCiclo.getMaxByMacchinaPeriodo(idxMacchina, _intervallo.inizio, _intervallo.fine)[0].TCMedio;
- if (_serie.maxVal > _serie.targetVal * TcMaxFactor)
- {
- _serie.maxVal = _serie.targetVal * TcMaxFactor;
- }
- }
- catch
- { }
- try
- {
- _serie.minVal = taTempiCiclo.getMinByMacchinaPeriodo(idxMacchina, _intervallo.inizio, _intervallo.fine)[0].TCMedio;
- }
- catch
- { }
- _serie.intervallo = _intervallo;
-
- // imposto se abbia cambio pallet
- _serie.palletChange = false;
- try
- {
- DataLayer DataLayerObj = new DataLayer();
- _serie.palletChange = DataLayerObj.taDatiMacchine.getByIdx(idxMacchina)[0].palletChange;
- }
- catch
- { }
+ return answ;
}
- return _serie;
- }
- #endregion
+ public string macchinaDaIdx(string idx)
+ {
+ string answ = "";
+ try
+ {
+ DS_applicazione.MacchineRow riga = Macchine.FindByIdxMacchina(idx);
+ answ = riga.CodMacchina;
+ }
+ catch
+ { }
+ return answ;
+ }
+
+ public string nomeMacchina(string idx)
+ {
+ string answ = "";
+ DS_applicazione.MacchineRow riga = Macchine.FindByIdxMacchina(idx);
+ try
+ {
+ answ = string.Format("{0} ({1} - {2})", riga.Nome, riga.CodMacchina, riga.Descrizione);
+ }
+ catch
+ { }
+ return answ;
+ }
+
+ ///
+ /// fornisce cod operatore data matricola
+ ///
+ ///
+ ///
+ public string oprDaMatr(int matr)
+ {
+ string answ = "nd";
+ try
+ {
+ DS_applicazione.AnagraficaOperatoriRow riga = AnagOpr.FindByMatrOpr(matr);
+ answ = string.Format("{0} {1}", riga.Cognome, riga.Nome);
+ }
+ catch
+ { }
+ return answ;
+ }
+
+ ///
+ /// restituisce cod semaforo dato IdxStato
+ ///
+ ///
+ ///
+ public string semaforoDaIdxStato(int idx)
+ {
+ string _answ = "";
+ if (memLayer.ML.CRB("fastColorDecode"))
+ {
+ _answ = codSemaforo[idx];
+ }
+ else
+ {
+ _answ = Stati.FindByIdxStato(idx).Semaforo;
+ }
+ return _answ;
+ }
+
+ ///
+ /// oggetto sequenza dati x sequencer
+ ///
+ /// IdxMacchina
+ ///
+ ///
+ public objSequencer sequenzaDati(string idxMacchina, intervalloDate _intervallo)
+ {
+ DateTime start = DateTime.Now;
+ // leggo i dati e costituisco una collezione...
+ objSequencer _sequenza = new objSequencer();
+ if (idxMacchina != null && idxMacchina != "")
+ {
+ // verifico se ho i dati in cache REDIS...
+ double numGG = _intervallo.fine.Subtract(_intervallo.inizio).TotalDays;
+ logger.lg.scriviLog(string.Format("Richiesta dati legacySeq idxMacc {0} per {1} gg", idxMacchina, 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 != "")
+ {
+ try
+ {
+ needRecalc = false;
+ // deserializzo
+ _sequenza = JsonConvert.DeserializeObject(redJson);
+ logger.lg.scriviLog("Recuperato legacySeq " + idxMacchina + " " + rKey);
+ }
+ catch
+ { }
+ }
+ if (needRecalc)
+ {
+ logger.lg.scriviLog(string.Format("INIZIO calcolo dati per {0} {1}", idxMacchina, rKey));
+ // altrimenti procedo come al solito...
+ _sequenza.idxMacchina = idxMacchina;
+ _sequenza.serieDati = new DataLayer_generic.serieDatiDataTable();
+ // seleziono i dati...
+ DS_applicazione.DiarioDiBordoDataTable tabSeq = taDiarioDiBordo.GetSequenza(idxMacchina, _intervallo.inizio, _intervallo.fine);
+ logger.lg.scriviLog(string.Format("Recuperate per {0} {1} righe da DB", idxMacchina, tabSeq.Count));
+ // processo
+ foreach (DS_applicazione.DiarioDiBordoRow riga in tabSeq.Rows)
+ {
+ _sequenza.serieDati.AddserieDatiRow(riga.DurataMinuti, semaforoDaIdxStato(riga.IdxStato), riga.CodArticolo, riga.InizioStato);
+ }
+ // SE HO ALMENO un evento
+ if (tabSeq.Count > 0)
+ {
+ // 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} {1}", idxMacchina, 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("Salvato legacySeq in REDIS {0} {1}", idxMacchina, rKey));
+ }
+ }
+ return _sequenza;
+ }
+
+ ///
+ /// oggetto sequenza dati x sequencer formato VisJS
+ ///
+ /// IdxMacchina
+ ///
+ /// num massimo segmenti da restituire
+ ///
+ public List sequenzaDatiVisJS(string idxMacchina, intervalloDate _intervallo, int numSplit)
+ {
+ List sequenza = new List();
+ // se idxMacchina = 0 --> ciclo su tutte con 1 / numMacch eventi ciascuna...
+ if (idxMacchina != "0")
+ {
+ sequenza.AddRange(seqSingleMachine(idxMacchina, _intervallo, numSplit, 0));
+ }
+ else
+ {
+ int index = 0;
+ // ciclo su tutte le macchine
+ DataLayer DataLayerObj = new DataLayer();
+ var elMacchine = DataLayerObj.taSelMacc.getAttive();
+ foreach (var item in elMacchine)
+ {
+ sequenza.AddRange(seqSingleMachine(item.value, _intervallo, numSplit, index));
+ index = sequenza.Count;
+ }
+ }
+ return sequenza;
+ }
+
+ ///
+ /// fornisce descrizione stato da IdxStato
+ ///
+ ///
+ ///
+ public string statoDaIdx(int idx)
+ {
+ return user_std.UtSn.Traduci(Stati.FindByIdxStato(idx).Descrizione.Replace(" ", "_"));
+ }
+
+ ///
+ /// fornisce idxStato della macchina indicata
+ ///
+ ///
+ ///
+ public int statoMacchina(string idx)
+ {
+ int answ = 0;
+ try
+ {
+ DataLayer DataLayerObj = new DataLayer();
+ if (memLayer.ML.CRB("RedEnab"))
+ {
+ // recupero SE IMPIEGATO REDIS i valori del Dictionary della macchina...
+ Dictionary datiMacc = DataLayerObj.mDatiMacchine(idx);
+ answ = Convert.ToInt32(datiMacc["IdxStato"]);
+ }
+ if (answ == 0)
+ {
+ DS_ProdTempi.stp_repDonati_getLastStatoDurataMacchinaRow riga = DataLayerObj.taDatiStatoMacch.GetData(idx, 0)[0];
+ answ = riga.idxStato;
+ }
+ }
+ catch
+ { }
+ return answ;
+ }
+
+ ///
+ /// oggetto sequenza tempi ciclo x visualizzatore
+ ///
+ ///
+ ///
+ /// tempo target di riferimento (se zero calcola la media...)
+ ///
+ public objTempiCiclo tempiCiclo(string idxMacchina, intervalloDate _intervallo, decimal targetVal)
+ {
+ // inizializzo
+ objTempiCiclo _serie = new objTempiCiclo();
+ if (idxMacchina != null && idxMacchina != "")
+ {
+ _serie.serieDati = new DataLayer_generic.serieTimeValDataTable();
+ // seleziono i dati
+ if (targetVal > 0)
+ {
+ _serie.targetVal = targetVal;
+ }
+ else
+ {
+ try
+ {
+ _serie.targetVal = taTempiCiclo.getMedByMacchinaPeriodo(idxMacchina, _intervallo.inizio, _intervallo.fine)[0].TCMedio;
+ }
+ catch
+ { }
+ }
+ int TcMaxFactor = memLayer.ML.CRI("TcMaxFactor");
+ DS_ProdTempi.TempiCicloRilevatiDataTable tabTempi = taTempiCiclo.getByMacchinaPeriodoFiltMax(idxMacchina, _intervallo.inizio, _intervallo.fine, _serie.targetVal * TcMaxFactor);
+ // converto!
+ DateTime inizio;
+ foreach (MapoDb.DS_ProdTempi.TempiCicloRilevatiRow riga in tabTempi.Rows)
+ {
+ inizio = riga.DataOraRif.AddMinutes(Convert.ToDouble(-riga.TCMedio * riga.PzProd)); // tolgo il tempo necessario a produrre i pezzi indicati come inizio
+ _serie.serieDati.AddserieTimeValRow(inizio, riga.DataOraRif, riga.TCMedio, string.Format("Art: {0} - T.C. {1}'", riga.CodArticolo, riga.TCMedio), riga.CodArticolo);
+ }
+ // sistemo estremi x date e valori
+ try
+ {
+ _serie.maxVal = taTempiCiclo.getMaxByMacchinaPeriodo(idxMacchina, _intervallo.inizio, _intervallo.fine)[0].TCMedio;
+ if (_serie.maxVal > _serie.targetVal * TcMaxFactor)
+ {
+ _serie.maxVal = _serie.targetVal * TcMaxFactor;
+ }
+ }
+ catch
+ { }
+ try
+ {
+ _serie.minVal = taTempiCiclo.getMinByMacchinaPeriodo(idxMacchina, _intervallo.inizio, _intervallo.fine)[0].TCMedio;
+ }
+ catch
+ { }
+ _serie.intervallo = _intervallo;
+
+ // imposto se abbia cambio pallet
+ _serie.palletChange = false;
+ try
+ {
+ DataLayer DataLayerObj = new DataLayer();
+ _serie.palletChange = DataLayerObj.taDatiMacchine.getByIdx(idxMacchina)[0].palletChange;
+ }
+ catch
+ { }
+ }
+ return _serie;
+ }
+
+ ///
+ /// tipo evento da Idx
+ ///
+ ///
+ ///
+ public string tipoDaIdx(int idx)
+ {
+ return AnagraficaEventi.FindByIdxTipo(idx).Nome;
+ }
+
+ ///
+ /// fornisce una torta stati
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public DataLayer_generic.serieDatiDataTable tortaStati(string idx, intervalloDate _intervallo, int minDurata, bool hideSpenta)
+ {
+ // leggo i dati e costituisco una collezione...
+ DataLayer_generic.serieDatiDataTable punti = new DataLayer_generic.serieDatiDataTable();
+ // seleziono i dati...
+ DS_applicazione.ParetoDurateDataTable tabPareto;
+ if (hideSpenta)
+ {
+ tabPareto = taParetoDurate.GetParetoDurateHideSpenta(idx, minDurata, _intervallo.fine, _intervallo.inizio);
+ }
+ else
+ {
+ tabPareto = taParetoDurate.GetParetoDurateFilt(idx, minDurata, _intervallo.fine, _intervallo.inizio);
+ }
+ double totale = 1;
+ try
+ {
+ totale = (double)tabPareto.Compute("SUM(DurataMinuti)", "");
+ }
+ catch
+ {
+ }
+ foreach (DS_applicazione.ParetoDurateRow riga in tabPareto.Rows)
+ {
+ punti.AddserieDatiRow((float)((Math.Round(((float)riga.DurataMinuti) / totale * 1000)) / 1000), coloreDaIdx(riga.IdxStato), statoDaIdx(riga.IdxStato), riga.InizioStato);
+ }
+ return punti;
+ }
+
+ public string urlMacchina(string idx)
+ {
+ string answ = "";
+ DS_applicazione.MacchineRow riga = null;
+ try
+ {
+ riga = Macchine.FindByIdxMacchina(idx);
+ answ = riga.url;
+ }
+ catch
+ { }
+ return answ;
+ }
+
+ #endregion Public Methods
+}
+
+///
+/// Oggetto timeline vis.js con gruppi + items
+///
+public class timelineVisJs
+{
+ #region Public Fields
+
+ ///
+ /// Gruppi contenuti
+ ///
+ public List Groups;
+
+ ///
+ /// Valori
+ ///
+ public List Items;
+
+ ///
+ /// Opzioni
+ ///
+ public visjsDsOptions Options;
+
+ #endregion Public Fields
+}
+
+///
+/// Groups Dataset di vis.js
+///
+public class visjsDsGroups
+{
+ #region Public Fields
+
+ ///
+ /// Classe css
+ ///
+ public string className;
+
+ ///
+ /// Testo descrittivo
+ ///
+ public string content;
+
+ ///
+ /// identificativo univoco
+ ///
+ public string id;
+
+ #endregion Public Fields
}
///
@@ -936,98 +1070,82 @@ public class resoconti
///
public class visjsDsItem
{
- ///
- /// identificativo univoco
- ///
- public int id;
- ///
- /// Testo descrittivo
- ///
- public string content;
- ///
- /// typo box/point/range/background
- ///
- public string type;
- ///
- /// Inizio dell'evento
- ///
- public string start;
- ///
- /// Fine dell'evento
- ///
- public string end;
- ///
- /// Gruppo dell'item
- ///
- public string group;
- ///
- /// Classe css
- ///
- public string className;
-}
-///
-/// Groups Dataset di vis.js
-///
-public class visjsDsGroups
-{
- ///
- /// identificativo univoco
- ///
- public string id;
- ///
- /// Testo descrittivo
- ///
- public string content;
- ///
- /// Classe css
- ///
- public string className;
+ #region Public Fields
+
+ ///
+ /// Classe css
+ ///
+ public string className;
+
+ ///
+ /// Testo descrittivo
+ ///
+ public string content;
+
+ ///
+ /// Fine dell'evento
+ ///
+ public string end;
+
+ ///
+ /// Gruppo dell'item
+ ///
+ public string group;
+
+ ///
+ /// identificativo univoco
+ ///
+ public int id;
+
+ ///
+ /// Inizio dell'evento
+ ///
+ public string start;
+
+ ///
+ /// typo box/point/range/background
+ ///
+ public string type;
+
+ #endregion Public Fields
}
+
///
/// Groups Dataset di vis.js
///
public class visjsDsOptions
{
- ///
- /// Indica se debba salvare come stacked i valori (false = in linea x gruppo)
- ///
- public bool stack;
- ///
- /// Abilita scroll orizzontale
- ///
- public bool horizontalScroll;
- ///
- /// Abilita spostamento
- ///
- public bool moveable;
- ///
- /// Abilita zoom
- ///
- public bool zoomable;
- ///
- /// Data Start
- ///
- public string start;
- ///
- /// Data End
- ///
- public string end;
-}
-///
-/// Oggetto timeline vis.js con gruppi + items
-///
-public class timelineVisJs
-{
- ///
- /// Gruppi contenuti
- ///
- public List Groups;
- ///
- /// Valori
- ///
- public List Items;
- ///
- /// Opzioni
- ///
- public visjsDsOptions Options;
+ #region Public Fields
+
+ ///
+ /// Data End
+ ///
+ public string end;
+
+ ///
+ /// Abilita scroll orizzontale
+ ///
+ public bool horizontalScroll;
+
+ ///
+ /// Abilita spostamento
+ ///
+ public bool moveable;
+
+ ///
+ /// Indica se debba salvare come stacked i valori (false = in linea x gruppo)
+ ///
+ public bool stack;
+
+ ///
+ /// Data Start
+ ///
+ public string start;
+
+ ///
+ /// Abilita zoom
+ ///
+ public bool zoomable;
+
+ #endregion Public Fields
}
\ No newline at end of file