diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5ae238a4..8f46ac26 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -206,7 +206,7 @@ staging: # - *nuget-fix # - dotnet restore script: - - dotnet publish -p:PublishProfile=IISProfile.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release MP.Stats/MP.Stats.csproj -p:output=publish/net5.0 + - dotnet publish -p:PublishProfile=IISProfile.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release MP.Stats/MP.Stats.csproj -o:publish # qui il deploy su nexus... - *hashBuild - *nexusUpload diff --git a/MP.Data/Controllers/MpStatsController.cs b/MP.Data/Controllers/MpStatsController.cs index d02a1c02..a1ebf01f 100644 --- a/MP.Data/Controllers/MpStatsController.cs +++ b/MP.Data/Controllers/MpStatsController.cs @@ -167,10 +167,16 @@ namespace MP.Data.Controllers /// /// Elenco tabella DDB da filtro /// - /// - /// + /// + /// + /// + /// + /// + /// + /// + /// /// - public List StatDdbGetAll(DateTime DataStart, DateTime DataEnd, string IdxMacchina, int IdxODL, string KeyRichiesta, string CodArticolo) + public List StatDdbGetAll(DateTime DataStart, DateTime DataEnd, string IdxMacchina, int IdxODL, string KeyRichiesta, string CodArticolo, int FirstRecord, int NumRecord) { List dbResult = new List(); @@ -180,15 +186,37 @@ namespace MP.Data.Controllers var idxODL = new SqlParameter("@IdxODL", IdxODL); var keyRichiesta = new SqlParameter("@KeyRichiesta", KeyRichiesta); var codArticolo = new SqlParameter("@CodArticolo", CodArticolo); + var firstRecord = new SqlParameter("@FirstRecord", FirstRecord); + var numRecord = new SqlParameter("@NumRecord", NumRecord); dbResult = dbCtx .DbSetDdbTurni - .FromSqlRaw("EXEC stp_UI_DDBTurni_GetByFilter @dataFrom,@dataTo,@idxMacchina,@IdxODL,@KeyRichiesta,@CodArticolo", dataFrom, dataTo, idxMacchina, idxODL, keyRichiesta, codArticolo) + .FromSqlRaw("EXEC stp_UI_DDBTurni_GetByFilter @dataFrom,@dataTo,@idxMacchina,@IdxODL,@KeyRichiesta,@CodArticolo,@FirstRecord,@NumRecord", dataFrom, dataTo, idxMacchina, idxODL, keyRichiesta, codArticolo, firstRecord, numRecord) .ToList(); return dbResult; } + /// + /// Elenco tabella DDB da filtro + /// + /// + /// + /// + /// + /// + /// + /// + public int StatDdbGetCount(DateTime DataStart, DateTime DataEnd, string IdxMacchina, int IdxODL, string KeyRichiesta, string CodArticolo) + { + var dbResult = dbCtx + .DbSetDdbTurni + .Where(x => (x.IdxMacchina == IdxMacchina || IdxMacchina == "*") && (x.IdxOdl == IdxODL || IdxODL == -999) && (x.KeyRichiesta == KeyRichiesta || KeyRichiesta == "*") && (x.CodArticolo == CodArticolo || CodArticolo == "*") && (x.InizioPeriodo >= DataStart && x.InizioPeriodo <= DataEnd)) + .Count(); + + return dbResult; + } + /// /// Elenco tabella ODL da filtro /// diff --git a/MP.Stats/Data/MpStatsService.cs b/MP.Stats/Data/MpStatsService.cs index 123f1a8f..e67fcd14 100644 --- a/MP.Stats/Data/MpStatsService.cs +++ b/MP.Stats/Data/MpStatsService.cs @@ -91,6 +91,14 @@ namespace MP.Stats.Data } } + private DistributedCacheEntryOptions cacheOptLong + { + get + { + return new DistributedCacheEntryOptions().SetAbsoluteExpiration(DateTime.Now.AddMinutes(chAbsExp * 10)).SetSlidingExpiration(TimeSpan.FromMinutes(chSliExp)); + } + } + #endregion Private Properties #region Protected Methods @@ -101,6 +109,12 @@ namespace MP.Stats.Data return answ; } + protected string getCacheKeyPaged(string TableName, SelectData CurrFilter) + { + string answ = $"{TableName}:M_{CurrFilter.IdxMacchina}:A_{CurrFilter.CodArticolo}:K_{CurrFilter.KeyRichiesta}:O_{CurrFilter.IdxOdl}:D_{CurrFilter.DateStart:yyMMddHHmm}_{CurrFilter.DateEnd:yyMMddHHmm}:R_{CurrFilter.FirstRecord}_{CurrFilter.FirstRecord + CurrFilter.NumRecord}"; + return answ; + } + #endregion Protected Methods #region Public Methods @@ -212,7 +226,7 @@ namespace MP.Stats.Data { //return Task.FromResult(dbController.StatDdbGetAll(numRecord, searchVal).ToArray()); List dbResult = new List(); - string cacheKey = getCacheKey("MP:STATS:DDBT", CurrFilter); + string cacheKey = getCacheKeyPaged("MP:STATS:DDBT", CurrFilter); string rawData; var redisDataList = await distributedCache.GetAsync(cacheKey); if (redisDataList != null) @@ -224,7 +238,7 @@ namespace MP.Stats.Data { Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); - dbResult = dbController.StatDdbGetAll(CurrFilter.DateStart, CurrFilter.DateEnd, CurrFilter.IdxMacchina, CurrFilter.IdxOdl, CurrFilter.KeyRichiesta, CurrFilter.CodArticolo); + dbResult = dbController.StatDdbGetAll(CurrFilter.DateStart, CurrFilter.DateEnd, CurrFilter.IdxMacchina, CurrFilter.IdxOdl, CurrFilter.KeyRichiesta, CurrFilter.CodArticolo, CurrFilter.FirstRecord, CurrFilter.NumRecord); rawData = JsonConvert.SerializeObject(dbResult); redisDataList = Encoding.UTF8.GetBytes(rawData); await distributedCache.SetAsync(cacheKey, redisDataList, cacheOpt); @@ -235,6 +249,32 @@ namespace MP.Stats.Data return await Task.FromResult(dbResult); } + public async Task StatDdbGetCount(SelectData CurrFilter, string searchVal = "") + { + int numRec = 0; + string cacheKey = getCacheKeyPaged("MP:STATS:DDBT-COUNT", CurrFilter); + string rawData; + var redisDataList = await distributedCache.GetAsync(cacheKey); + if (redisDataList != null) + { + rawData = Encoding.UTF8.GetString(redisDataList); + int.TryParse(rawData, out numRec); + } + else + { + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); + numRec = dbController.StatDdbGetCount(CurrFilter.DateStart, CurrFilter.DateEnd, CurrFilter.IdxMacchina, CurrFilter.IdxOdl, CurrFilter.KeyRichiesta, CurrFilter.CodArticolo); + rawData = $"{numRec}"; + redisDataList = Encoding.UTF8.GetBytes(rawData); + await distributedCache.SetAsync(cacheKey, redisDataList, cacheOptLong); + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Info($"Effettuata lettura da DB + caching per DdbTurni: {ts.TotalMilliseconds} ms"); + } + return await Task.FromResult(numRec); + } + public async Task> StatOdlGetAll(SelectData CurrFilter, string searchVal = "") { //return Task.FromResult(dbController.StatOdlGetAll(numRecord, searchVal)); diff --git a/MP.Stats/Data/SelectData.cs b/MP.Stats/Data/SelectData.cs index 546014d8..6279c601 100644 --- a/MP.Stats/Data/SelectData.cs +++ b/MP.Stats/Data/SelectData.cs @@ -12,10 +12,38 @@ namespace MP.Stats.Data public string CodArticolo { get; set; } = "*"; public DateTime DateEnd { get; set; } = DateTime.Now.AddMinutes(1); public DateTime DateStart { get; set; } = DateTime.Now.AddDays(-7); + + /// + /// Primo record x selezione paginata, tipicamente primo della "decina" della pagina corrente + /// + public int FirstRecord + { + get + { + int primaPag = PageNum % 10; + int decina = PageNum - primaPag; + return PageSize * decina + 1; + } + } + public string IdxMacchina { get; set; } = "*"; public int IdxOdl { get; set; } = -999; public string KeyRichiesta { get; set; } = "*"; + /// + /// Numero record da recuperare, tipicamente la decina della pag corrente (10 * PageSize) + /// + public int NumRecord + { + get + { + return PageSize * 10; + } + } + + public int PageNum { get; set; } = 1; + public int PageSize { get; set; } = 10; + #endregion Public Properties #region Public Methods @@ -44,6 +72,10 @@ namespace MP.Stats.Data if (!(obj is SelectData item)) return false; + if (PageSize != item.PageSize) + return false; + if (PageNum != item.PageNum) + return false; if (CodArticolo != item.CodArticolo) return false; if (DateEnd != item.DateEnd) diff --git a/MP.Stats/MP.Stats.csproj b/MP.Stats/MP.Stats.csproj index ad113c8f..656f4e78 100644 --- a/MP.Stats/MP.Stats.csproj +++ b/MP.Stats/MP.Stats.csproj @@ -4,7 +4,7 @@ net5.0 MP.Stats 826e877c-ba70-4253-84cb-d0b1cafd4440 - 1.0.2106.1716 + 1.0.2106.1914 diff --git a/MP.Stats/Pages/Diario.razor.cs b/MP.Stats/Pages/Diario.razor.cs index 7d658435..ef260aee 100644 --- a/MP.Stats/Pages/Diario.razor.cs +++ b/MP.Stats/Pages/Diario.razor.cs @@ -34,9 +34,31 @@ namespace MP.Stats.Pages } } - private int currPage { get; set; } = 1; + private int currPage + { + get + { + return currFilter.PageNum; + } + set + { + currFilter.PageNum = value; + } + } + private bool isLoading { get; set; } = false; - private int numRecord { get; set; } = 10; + + private int numRecord + { + get + { + return currFilter.PageSize; + } + set + { + currFilter.PageSize = value; + } + } #endregion Private Properties @@ -54,18 +76,7 @@ namespace MP.Stats.Pages [Inject] protected MpStatsService StatService { get; set; } - protected int totalCount - { - get - { - int answ = 0; - if (SearchRecords != null) - { - answ = SearchRecords.Count; - } - return answ; - } - } + protected int totalCount { get; set; } = 0; #endregion Protected Properties @@ -74,8 +85,10 @@ namespace MP.Stats.Pages private async Task reloadData() { isLoading = true; + totalCount = await StatService.StatDdbGetCount(currFilter, MessageService.SearchVal); SearchRecords = await StatService.StatDdbGetAll(currFilter, MessageService.SearchVal); - ListRecords = SearchRecords.Skip(numRecord * (currPage - 1)).Take(numRecord).ToList(); + // faccio paginazione SOLO NELLA DECINA attuale... (quindi non tutte le pagine ma solo subset) + ListRecords = SearchRecords.Skip(numRecord * (currPage % 10 - 1)).Take(numRecord).ToList(); isLoading = false; } diff --git a/Resources/ChangeLog.html b/Resources/ChangeLog.html index 93eae0d7..5936be76 100644 --- a/Resources/ChangeLog.html +++ b/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo statistiche MAPO -

Versione: 1.0.2106.1716

+

Versione: 1.0.2106.1914


Note di rilascio:
    diff --git a/Resources/VersNum.txt b/Resources/VersNum.txt index 141eb829..87433c3b 100644 --- a/Resources/VersNum.txt +++ b/Resources/VersNum.txt @@ -1 +1 @@ -1.0.2106.1716 +1.0.2106.1914 diff --git a/Resources/manifest.xml b/Resources/manifest.xml index 9548c50c..43b191ad 100644 --- a/Resources/manifest.xml +++ b/Resources/manifest.xml @@ -1,6 +1,6 @@ - 1.0.2106.1716 + 1.0.2106.1914 http://nexus.steamware.net/repository/SWS/MP-STATS/stable/0/MP.Stats.zip http://nexus.steamware.net/repository/SWS/MP-STATS/stable/0/ChangeLog.html false