diff --git a/PARR.API/Controllers/V1/Statistics/StatRobotHistoryController.cs b/PARR.API/Controllers/V1/Statistics/StatRobotHistoryController.cs index 2e9db8c4..bdf07f33 100644 --- a/PARR.API/Controllers/V1/Statistics/StatRobotHistoryController.cs +++ b/PARR.API/Controllers/V1/Statistics/StatRobotHistoryController.cs @@ -47,12 +47,23 @@ namespace PARR.API.Controllers.V1.Statistics if (!request.Date.HasValue) request.Date = DateOnly.FromDateTime(DateTimeOffset.UtcNow.Date); - // всего - var allStat = await robotHistoryService.Get() + #region всего + + var allQuery = robotHistoryService.Get() + .AsNoTracking(); + + if (request.HistoryLevel.HasValue) + allQuery = allQuery.Where(t => t.HistoryLevel == (int)request.HistoryLevel); + + var allStat = await allQuery .GroupBy(t => t.HistoryLevel) .Select(t => new { HistoryLevel = t.Key, Count = t.Count() }) .ToListAsync(); + var allStatDict = allStat.ToDictionary(s => s.HistoryLevel, s => s.Count); + + #endregion + // Формируем диапазон в пользовательском времени var userDateStart = new DateTimeOffset(request.Date.Value.Year, request.Date.Value.Month, request.Date.Value.Day, 0, 0, 0, timeZoneQuery.TimeZoneOffset); var userDateEnd = userDateStart.AddDays(1); @@ -62,15 +73,37 @@ namespace PARR.API.Controllers.V1.Statistics var utcEnd = userDateEnd.UtcDateTime; // за дату - var dateStat = await robotHistoryService.Get() - //.Where(t => t.DateCreated.DateTime.Date == request.Date.Value.Date) - //.Where(t => t.DateCreated.UtcDateTime >= utcStart && t.DateCreated.UtcDateTime < utcEnd) - .FilterByDateRangeUtc(t => t.DateCreated, utcStart, utcEnd) - .GroupBy(t => t.HistoryLevel) - .Select(t => new { HistoryLevel = t.Key, Count = t.Count() }) - .ToListAsync(); - IQueryable levelsQuery = robotHistoryLevelService.Get(); + #region Статистика за дату + + var dateStatQuery = robotHistoryService.Get() + .AsNoTracking(); + + if (request.HistoryLevel.HasValue) + dateStatQuery = dateStatQuery.Where(t => t.HistoryLevel == (int)request.HistoryLevel); + + var dateStat = await dateStatQuery + //.Where(t => t.DateCreated.DateTime.Date == request.Date.Value.Date) + //.Where(t => t.DateCreated.UtcDateTime >= utcStart && t.DateCreated.UtcDateTime < utcEnd) + .FilterByDateRangeUtc(t => t.DateCreated, utcStart, utcEnd) + .GroupBy(t => t.HistoryLevel) + .Select(t => new { HistoryLevel = t.Key, Count = t.Count() }) + .ToListAsync(); + + var dateStatDict = dateStat.ToDictionary(s => s.HistoryLevel, s => s.Count); + + //var dateStat = await robotHistoryService.Get() + // .AsNoTracking() + // //.Where(t => t.DateCreated.DateTime.Date == request.Date.Value.Date) + // //.Where(t => t.DateCreated.UtcDateTime >= utcStart && t.DateCreated.UtcDateTime < utcEnd) + // .FilterByDateRangeUtc(t => t.DateCreated, utcStart, utcEnd) + // .GroupBy(t => t.HistoryLevel) + // .Select(t => new { HistoryLevel = t.Key, Count = t.Count() }) + // .ToListAsync(); + + #endregion + + IQueryable levelsQuery = robotHistoryLevelService.Get().AsNoTracking(); if (request.HistoryLevel.HasValue) levelsQuery = levelsQuery.Where(t => t.Level == (int)request.HistoryLevel.Value); @@ -83,8 +116,8 @@ namespace PARR.API.Controllers.V1.Statistics { response.Add(new StatRobotHistoryResponse { - AllCount = allStat.FirstOrDefault(t => t.HistoryLevel == level.Level)?.Count ?? 0, - DateCount = dateStat.FirstOrDefault(t => t.HistoryLevel == level.Level)?.Count ?? 0, + AllCount = allStatDict.GetValueOrDefault(level.Level, 0), //allStat.FirstOrDefault(t => t.HistoryLevel == level.Level)?.Count ?? 0, + DateCount = dateStatDict.GetValueOrDefault(level.Level, 0), //dateStat.FirstOrDefault(t => t.HistoryLevel == level.Level)?.Count ?? 0, Date = request.Date.Value, Level = mapper.Map(level) });