Abbozzata anche gest statistiche, RIPORTO IN DEV!!!!
This commit is contained in:
+99
-18
@@ -67,19 +67,30 @@ namespace MapoDb
|
||||
StringBuilder sb = new StringBuilder();
|
||||
Stopwatch sw = new Stopwatch();
|
||||
DateTime tStamp;
|
||||
|
||||
// oggetto gestione dati ts raggruppati
|
||||
var collRawData = database.GetCollection<rawData>("FluxLogRawData");
|
||||
// valutare eventuale eliminazione records x TUTTO il periodo...
|
||||
string startDateStr = data2transfer.ToString("yyyyMMdd");
|
||||
string endDateStr = data2transfer.AddDays(numDays).ToString("yyyyMMdd");
|
||||
var collHistData = database.GetCollection<histData>("FluxLogHistData");
|
||||
var builderRaw = Builders<rawData>.Filter;
|
||||
var builderHist = Builders<histData>.Filter;
|
||||
string currDateStr = "";
|
||||
int startYMD = 0;
|
||||
int endYMD = 0;
|
||||
int currYMD = 0;
|
||||
|
||||
// Effettuo eliminazione records x TUTTO il periodo dei dati RAW e stats...
|
||||
string startDateStr = data2transfer.ToString("yyyyMMdd");
|
||||
string endDateStr = data2transfer.AddDays(numDays).ToString("yyyyMMdd");
|
||||
int.TryParse(startDateStr, out startYMD);
|
||||
int.TryParse(endDateStr, out endYMD);
|
||||
var builder = Builders<rawData>.Filter;
|
||||
var filtExisting = builder.Gte(u => u.dateYMD, startYMD) & builder.Lte(u => u.dateYMD, endYMD);
|
||||
collRawData.DeleteMany(filtExisting);
|
||||
// filtri e delete
|
||||
var filtRawOld = builderRaw.Gte(u => u.dateYMD, startYMD) & builderRaw.Lte(u => u.dateYMD, endYMD);
|
||||
collRawData.DeleteMany(filtRawOld);
|
||||
var filtHistOld = builderHist.Gte(u => u.dateYMD, startYMD) & builderHist.Lte(u => u.dateYMD, endYMD);
|
||||
collHistData.DeleteMany(filtHistOld);
|
||||
|
||||
// faccio ciclo su OGNI macchina
|
||||
sw.Start();
|
||||
var elencoMacchine = DataLayer.obj.taMacchine.GetData();
|
||||
foreach (var macchina in elencoMacchine)
|
||||
{
|
||||
@@ -88,8 +99,9 @@ namespace MapoDb
|
||||
for (int i = 0; i < numDays; i++)
|
||||
{
|
||||
tStamp = data2transfer.AddDays(i);
|
||||
currDateStr = tStamp.ToString("yyyyMMdd");
|
||||
int.TryParse(currDateStr, out currYMD);
|
||||
// leggo da DB i records...
|
||||
sw.Start();
|
||||
DS_applicazione.FluxLogDataTable tabDati = DataLayer.obj.taFL.getFiltOrd(macchina.IdxMacchina, tStamp, tStamp.AddDays(1), true);
|
||||
// solo se ho dati...
|
||||
if (tabDati.Count > 0)
|
||||
@@ -99,22 +111,16 @@ namespace MapoDb
|
||||
// salvo in blocco
|
||||
if (risultato.Count > 0)
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
collRawData.InsertMany(risultato);
|
||||
// calcolo la NUOVA statistica giornaliera...
|
||||
var resStats = getStats(risultato);
|
||||
// salvo!
|
||||
collHistData.InsertOne(resStats);
|
||||
}
|
||||
catch
|
||||
catch (Exception exc)
|
||||
{ }
|
||||
#if false
|
||||
var builder = Builders<rawData>.Filter;
|
||||
var existing = builder.Eq(u => u.varName, macchina.IdxMacchina);
|
||||
#endif
|
||||
#if false
|
||||
var options = new UpdateOptions { IsUpsert = true };
|
||||
var empty = builder.Empty;
|
||||
collRawData.UpdateMany(empty, risultato, options);
|
||||
#endif
|
||||
}
|
||||
sb.AppendLine($"DB {tStamp}: {tabDati.Count}rec | MongoDb {risultato.Count} RAW DOC in {sw.ElapsedMilliseconds / 1000} sec");
|
||||
}
|
||||
@@ -185,9 +191,84 @@ namespace MapoDb
|
||||
// aggiungo ultimo... salvo il VECCHIO record...
|
||||
if (currRecord != null)
|
||||
{
|
||||
currRecord.samples = valori;
|
||||
listaRecords.Add(currRecord);
|
||||
}
|
||||
return listaRecords;
|
||||
}
|
||||
/// <summary>
|
||||
/// Calcola statistiche per i dati giornalieri processati
|
||||
/// </summary>
|
||||
/// <param name="datiGiornalieri"></param>
|
||||
/// <returns></returns>
|
||||
protected histData getStats(List<rawData> datiGiornalieri)
|
||||
{
|
||||
// init oggetti
|
||||
histData currHist;
|
||||
varStats currStat;
|
||||
List<varStats> statistiche = new List<varStats>();
|
||||
int sampleNumRec = 1;
|
||||
float sampleTotal = 0;
|
||||
float sampleMinVal = 0;
|
||||
float sampleMaxVal = 0;
|
||||
float sampleAvg = 0;
|
||||
float currVal = 0;
|
||||
bool fatto = false;
|
||||
string macName = "";
|
||||
int dateYMD = 0;
|
||||
// ciclo x ogni variabile
|
||||
foreach (var item in datiGiornalieri)
|
||||
{
|
||||
if (item.samples != null)
|
||||
{
|
||||
if (string.IsNullOrEmpty(macName))
|
||||
{
|
||||
macName = item.macName;
|
||||
dateYMD = item.dateYMD;
|
||||
}
|
||||
// reset vabiabili
|
||||
sampleTotal = 0;
|
||||
sampleMinVal = 0;
|
||||
sampleMaxVal = 0;
|
||||
sampleAvg = 0;
|
||||
// calcolo statistiche
|
||||
sampleNumRec = item.samples.Count;
|
||||
foreach (var sample in item.samples)
|
||||
{
|
||||
fatto = float.TryParse(sample.value, out currVal);
|
||||
if (fatto)
|
||||
{
|
||||
sampleTotal += currVal;
|
||||
sampleMaxVal = sampleMaxVal < currVal ? currVal : sampleMaxVal;
|
||||
sampleMinVal = sampleMinVal > currVal ? currVal : sampleMinVal;
|
||||
}
|
||||
}
|
||||
if (sampleNumRec > 0)
|
||||
{
|
||||
sampleAvg = sampleTotal / sampleNumRec;
|
||||
}
|
||||
// salvo statistica
|
||||
currStat = new varStats()
|
||||
{
|
||||
varName = item.varName,
|
||||
numRec = sampleNumRec,
|
||||
avg = sampleAvg,
|
||||
min = sampleMinVal,
|
||||
max = sampleMaxVal
|
||||
};
|
||||
statistiche.Add(currStat);
|
||||
}
|
||||
}
|
||||
currHist = new histData()
|
||||
{
|
||||
macName = macName,
|
||||
varType = plcDataType.Real,
|
||||
dateYMD = dateYMD,
|
||||
period = timeWindow.day,
|
||||
stats = statistiche
|
||||
};
|
||||
// restituisco...
|
||||
return currHist;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-10
@@ -328,13 +328,9 @@ namespace MapoSDK
|
||||
public class varStats
|
||||
{
|
||||
/// <summary>
|
||||
/// Data-Ora riferimento campione
|
||||
/// Nome della Variabile tracciata
|
||||
/// </summary>
|
||||
public DateTime timeStamp { get; set; } = DateTime.Now;
|
||||
/// <summary>
|
||||
/// Valore in formato stringa
|
||||
/// </summary>
|
||||
public string value { get; set; } = "";
|
||||
public string varName { get; set; } = "";
|
||||
/// <summary>
|
||||
/// Num record
|
||||
/// </summary>
|
||||
@@ -377,10 +373,6 @@ namespace MapoSDK
|
||||
/// </summary>
|
||||
public string macName { get; set; } = "";
|
||||
/// <summary>
|
||||
/// Nome della Variabile tracciata
|
||||
/// </summary>
|
||||
public string varName { get; set; } = "";
|
||||
/// <summary>
|
||||
/// Tipo di valore registrato (internamente è string)
|
||||
/// </summary>
|
||||
//[JsonConverter(typeof(StringEnumConverter))]
|
||||
|
||||
Reference in New Issue
Block a user