using AutoMapper; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using PARR.API.Contracts.V1; using PARR.API.Contracts.V1.Requests; using PARR.API.Contracts.V1.Requests.Queries; using PARR.API.Contracts.V1.Responses; using PARR.API.Contracts.V1.Responses.Base; using PARR.API.Contracts.V1.Responses.Statistics; using PARR.API.Controllers.V1.Base; using PARR.API.Services.Interfaces; using PARR.Constants; using PARR.DAL.Services.Interfaces; namespace PARR.API.Controllers.V1.Statistics { /// /// Статистика загрузки регламентными работами по ЗО /// [Authorize(Roles = ParrRoles.EsppRobot.RoleOrAdmin)] public class StatResponseAreaWorkLoadController : BaseApiController { private readonly ITemplateService templateService; private readonly IResponseAreaService responseAreaService; private readonly IMapper mapper; private readonly IWorkLoadService workLoadService; public StatResponseAreaWorkLoadController( ITemplateService templateService, IResponseAreaService responseAreaService, IMapper mapper, IWorkLoadService workLoadService ) { this.templateService = templateService; this.responseAreaService = responseAreaService; this.mapper = mapper; this.workLoadService = workLoadService; } ///// ///// Статистика загрузки РР по всем ЗО ///// ///// //[HttpGet(ApiRoutes.StatResponseAreaWorkLoad.GetAll)] //public async Task GetAll([FromQuery] WorkloadBaseQuery requestQuery) //{ // var response = await GetStatisticsAsync(requestQuery); // return Ok(new Response>(response, true)); //} ///// ///// Статистика загрузки РР по списку ЗО ///// ///// //[HttpPost(ApiRoutes.StatResponseAreaWorkLoad.GetByResponseAreas)] //public async Task GetByResponseAreas([FromBody] StatResponseAreaWorkloadRequest request) //{ // var response = await GetStatisticsAsync(request.Filter, request.ResponseAreas); // return Ok(new Response>(response, true)); //} //private async Task> GetStatisticsAsync(WorkloadBaseQuery requestQuery, List? responseAreas = null) //{ // var daysList = workLoadService.GetDatesForPeriod(requestQuery); // IQueryable query = templateService.Get() // .Include(t => t.Host).ThenInclude(t => t.WorkGroup); // query = workLoadService.FilterTemplatesQuery(query, requestQuery); // if (responseAreas != null && responseAreas.Count() > 0) // query = query.Where(t => responseAreas.Any(x => x == t.Host.WorkGroup.ResponseAreaCode)); // //var groupedQuery = query.GroupBy(t => new { t.NextRun.DateTime.Date, t.Host!.WorkGroup!.ResponseAreaCode }) // var groupedQuery = query.GroupBy(t => new { t.NextRun.AddHours(requestQuery.TimeZoneOffsetHours).DateTime.Date, t.Host!.WorkGroup!.ResponseAreaCode }) // .Select(t => new // { // ResponseAreaCode = t.Key.ResponseAreaCode, // Date = t.Key.Date, // TemplateCount = t.Count() // }); // var queryResult = await groupedQuery.ToListAsync(); // var responseAreaQuery = responseAreaService.Get(); // if (responseAreas != null && responseAreas.Count() > 0) // responseAreaQuery = responseAreaQuery.Where(t => responseAreas.Any(x => x == t.Code)); // var allResponseArea = await responseAreaQuery.ToListAsync(); // //if (!allResponseArea.Any()) // // return NoContent(); // var response = new List(); // allResponseArea.ForEach(respArea => // { // var workLoads = daysList.Select(t => new StatWorkLoadDataResponse // { // Date = t, // TemplateCount = queryResult.FirstOrDefault(x => x.ResponseAreaCode == respArea.Code && DateOnly.FromDateTime(x.Date) == t)?.TemplateCount ?? 0 // }).OrderBy(t => t.Date).ToList(); // response.Add( // new StatResponseAreaWorkLoadResponse // { // ResponseArea = mapper.Map(respArea), // WorkLoad = workLoads // }); // }); // response = response.OrderBy(t => t.ResponseArea.Code).ToList(); // return response; //} } }