Inserimento progress in dedup FL

This commit is contained in:
Samuele Locatelli
2023-10-21 12:41:44 +02:00
parent edae1a19ec
commit 7f7a3b6f51
9 changed files with 109 additions and 150 deletions
+50 -145
View File
@@ -8,6 +8,7 @@ using NLog.LayoutRenderers;
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
@@ -553,6 +554,7 @@ namespace MP.Data.Controllers
/// <returns></returns>
public async Task<bool> FluxLogDataRedux(string idxMaccSel, List<string> fluxList, Periodo currPeriodo, Enum.ValSelection valMode, Enum.DataInterval intReq)
{
Log.Info($"Inizio FluxLogDataRedux | idxMaccSel: {idxMaccSel} | periodo: {currPeriodo.Inizio} --> {currPeriodo.Fine}");
bool fatto = false;
TimeSpan step = TimeSpan.FromHours(1);
switch (intReq)
@@ -569,6 +571,7 @@ namespace MP.Data.Controllers
default:
break;
}
List<LogFLDedupModel> procStats = new List<LogFLDedupModel>();
// setup parametri costanti x stored
var pIdxMacchina = new SqlParameter("@IdxMacchina", idxMaccSel);
@@ -578,6 +581,10 @@ namespace MP.Data.Controllers
// processo 1:1 ogni flusso
foreach (var item in fluxList)
{
Log.Info($"FluxLogDataRedux | Flux: {item}");
int numRecProc = 0;
Stopwatch sw = new Stopwatch();
sw.Start();
// parametri x flusso
var pCodFlux = new SqlParameter("@CodFlux", item);
// inizializzo cursore timer
@@ -596,67 +603,14 @@ namespace MP.Data.Controllers
.Where(x => (x.CodFlux == item) && (x.dtEvento >= dtCursStart && x.dtEvento < dtCursEnd) && (x.IdxMacchina == idxMaccSel))
.ToListAsync();
// incremento dt fine periodo
dtCursStart = dtCursEnd;
dtCursEnd = dtCursStart.Add(step);
int numRec = currFlux.Count;
numRecProc += numRec;
if (numRec > 1)
{
if (dtCursStart > currPeriodo.Fine)
{
setCompleted = true;
}
#if false
//var set2del = currFlux;
//switch (valMode)
//{
// case Enum.ValSelection.First:
// // tolgo il primo (che quindi lascio)
// set2del.RemoveAt(0);
// break;
// case Enum.ValSelection.Last:
// set2del.RemoveAt(numRec - 1);
// break;
// case Enum.ValSelection.Center:
// set2del.RemoveAt(numRec / 2);
// break;
// default:
// break;
//}
//dbCtx.DbSetFluxLog.RemoveRange(set2del);
#endif
#if false
switch (valMode)
{
case Enum.ValSelection.First:
// tolgo il primo (che quindi lascio)
currFlux.RemoveAt(0);
break;
case Enum.ValSelection.Last:
currFlux.RemoveAt(numRec - 1);
break;
case Enum.ValSelection.Center:
currFlux.RemoveAt(numRec / 2);
break;
default:
break;
}
dbCtx.RemoveRange(currFlux);
dbCtx.ChangeTracker.DetectChanges();
Log.Trace(dbCtx.ChangeTracker.DebugView.LongView);
try
{
// salvo
await dbCtx.SaveChangesAsync(false);
}
catch (Exception exc)
{
Log.Error($"Eccezione in deduplica dati FluxLog{Environment.NewLine}{exc}");
}
#endif
List<Periodo> listPeriodi = new List<Periodo>();
@@ -687,8 +641,6 @@ namespace MP.Data.Controllers
// ciclo x tutti i periodi e chiamo stored...
foreach (var slot in listPeriodi)
{
// parametri x periodo (base)
var pDtStart = new SqlParameter("@DtStart", slot.Inizio);
var pDtEnd = new SqlParameter("@DtEnd", slot.Fine);
@@ -696,99 +648,52 @@ namespace MP.Data.Controllers
.Database
.ExecuteSqlRaw("EXEC man.stp_ReduceFluxLog @IdxMacchina, @CodFlux, @DtStart, @DtEnd, @OnlyTest, @DoReIndex", pIdxMacchina, pCodFlux, pDtStart, pDtEnd, pOnlyTest, pDoReIndex);
}
#if false
if (dtCursStart > currPeriodo.Fine)
{
setCompleted = true;
}
var currSet = currFlux.ToList();
if (currSet.Count > 0)
{
switch (valMode)
{
case Enum.ValSelection.First:
// tolgo il primo (che quindi lascio)
currSet.RemoveAt(0);
break;
case Enum.ValSelection.Last:
currSet.RemoveAt(currSet.Count - 1);
break;
case Enum.ValSelection.Center:
currSet.RemoveAt(currSet.Count / 2);
break;
default:
break;
}
//// elimino i dati processati
//foreach (var item2del in currSet)
//{
// currFlux.Remove(item2del);
//}
dbCtx.DbSetFluxLog.RemoveRange(currSet);
try
{
// salvo
dbCtx.SaveChanges();
}
catch (Exception exc)
{
Log.Error($"Eccezione in deduplica dati FluxLog{Environment.NewLine}{exc}");
}
}
#endif
#if false
// seleziono dati da processare
var currSet = currFlux.Where(x => x.dtEvento < dtCursStart).ToList();
if (currSet.Count > 0)
{
switch (valMode)
{
case Enum.ValSelection.First:
// tolgo il primo (che quindi lascio)
currSet.RemoveAt(0);
break;
case Enum.ValSelection.Last:
currSet.RemoveAt(currSet.Count - 1);
break;
case Enum.ValSelection.Center:
currSet.RemoveAt(currSet.Count / 2);
break;
default:
break;
}
//// elimino i dati processati
//foreach (var item2del in currSet)
//{
// currFlux.Remove(item2del);
//}
dbCtx.DbSetFluxLog.RemoveRange(currSet);
try
{
// salvo
dbCtx.SaveChanges();
}
catch (Exception exc)
{
Log.Error($"Eccezione in deduplica dati FluxLog{Environment.NewLine}{exc}");
}
// tengo solo i dati successivi x prossimo giro...
currFlux = currFlux.Where(x => x.dtEvento >= dtCursStart).ToList();
}
#endif
}
}
// incremento dt fine periodo
dtCursStart = dtCursEnd;
dtCursEnd = dtCursStart.Add(step);
}
}
// fermo cronometro e salvo su DB...
sw.Stop();
LogFLDedupModel currStat = new LogFLDedupModel()
{
IdxMacchina = idxMaccSel,
CodFlux = item,
DtRif = DateTime.Now,
NumRec = numRecProc,
ProcTime = sw.Elapsed.TotalSeconds
};
procStats.Add(currStat);
}
// salvo le statistiche di processing...
fatto = LogFLDedupInsert(procStats);
Log.Info($"FINE FluxLogDataRedux | idxMaccSel: {idxMaccSel} | periodo: {currPeriodo.Inizio} --> {currPeriodo.Fine}");
return fatto;
}
/// <summary>
/// Inserimento record risultati deduplica FluxLog
/// </summary>
/// <param name="rec2ins"></param>
/// <returns></returns>
protected bool LogFLDedupInsert(List<LogFLDedupModel> rec2ins)
{
bool fatto = false;
using (var dbCtx = new MoonProContext(_configuration))
{
try
{
dbCtx.DbSetLogFLDedup.AddRange(rec2ins);
var res = dbCtx.SaveChanges();
fatto = res != 0;
}
catch (Exception exc)
{
Log.Error($"Errore in fase inserimento log dedup x FL{Environment.NewLine}{exc}");
}
}
//await Task.Delay(1500);
return fatto;
}
+40
View File
@@ -0,0 +1,40 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
[Table("LogFLDedup")]
public partial class LogFLDedupModel
{
#region Public Properties
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int DedupIdx { get; set; } = 0;
[MaxLength(50)]
public string IdxMacchina { get; set; } = "";
[MaxLength(50)]
public string CodFlux { get; set; } = "";
public DateTime DtRif { get; set; }=DateTime.Now;
/// <summary>
/// Num record processati
/// </summary>
public int NumRec { get; set; } = 0;
/// <summary>
/// Tempo processing (secondi)
/// </summary>
public double ProcTime { get; set; } = 1;
#endregion Public Properties
}
}
+2
View File
@@ -90,7 +90,9 @@ namespace MP.Data
public virtual DbSet<CommentiModel> DbSetCommenti { get; set; }
public virtual DbSet<FermiNonQualModel> DbSetFNQ { get; set; }
public virtual DbSet<LogFLDedupModel> DbSetLogFLDedup { get; set; }
public virtual DbSet<vSelEventiBCodeModel> DbSetVSEB { get; set; }
public virtual DbSet<vSelOdlModel> DbSetVSODL { get; set; }
+1 -1
View File
@@ -5,7 +5,7 @@
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>MP.SPEC</RootNamespace>
<Version>6.16.2310.2111</Version>
<Version>6.16.2310.2112</Version>
</PropertyGroup>
<ItemGroup>
+1
View File
@@ -33,6 +33,7 @@
<div class="card-body">
@if (isProcessing)
{
<ProgressDisplay CurrVal="@countFlux" MaxVal="numFlux" ExpTimeMSec="@expTimeMsec"></ProgressDisplay>
<LoadingData DisplaySize="LoadingData.CtrlSize.Large" DisplayMode="LoadingData.SpinMode.BounceLine"></LoadingData>
}
else
+12 -1
View File
@@ -116,11 +116,22 @@ namespace MP.SPEC.Pages
protected async Task DoCleanup()
{
isProcessing = true;
// processo i flussi in subset x mandare update ad avanzamento
await MDataServ.FluxLogDataRedux(idxMaccSel, fluxList, CurrPeriodo, ValMode, IntReq);
isProcessing = false;
}
/// <summary>
/// Tempo atteso processing
/// - da calcolare in abse al num eventi e alla tab logProcessing...
/// </summary>
private int expTimeMsec = 10000;
private int countFlux = 0;
private int numFlux
{
get => fluxList.Count * 10;
}
protected ValSelection ValMode = ValSelection.Center;
protected DataInterval IntReq = DataInterval.hour;
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>Modulo MAPOSPEC </i>
<h4>Versione: 6.16.2310.2111</h4>
<h4>Versione: 6.16.2310.2112</h4>
<br /> Note di rilascio:
<ul>
<li>
+1 -1
View File
@@ -1 +1 @@
6.16.2310.2111
6.16.2310.2112
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>6.16.2310.2111</version>
<version>6.16.2310.2112</version>
<url>https://nexus.steamware.net/repository/SWS/MP-SPEC/stable/LAST/MP.SPEC.zip</url>
<changelog>https://nexus.steamware.net/repository/SWS/MP-SPEC/stable/LAST/ChangeLog.html</changelog>
<mandatory>false</mandatory>