Files
parr_api/PARR.API/Controllers/V1/Statistics/StatTemplateDistributionController.cs

103 lines
4.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using AutoMapper;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using PARR.API.Contracts.V1;
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.Constants;
using PARR.DAL.Services.Interfaces;
namespace PARR.API.Controllers.V1.Statistics
{
/// <summary>
/// Статистика распределения шаблонов
/// </summary>
[Authorize(Roles = ParrRoles.Administrator.Role)]
public class StatTemplateDistributionController : BaseApiController
{
private readonly ITemplateService templateService;
private readonly IWorkGroupService workGroupService;
private readonly IMapper mapper;
public StatTemplateDistributionController(
ITemplateService templateService,
IWorkGroupService workGroupService,
IMapper mapper
)
{
this.templateService = templateService;
this.workGroupService = workGroupService;
this.mapper = mapper;
}
/// <summary>
/// Статистика распределения шаблонов по JobId (ApplicationInWorkId)
/// </summary>
/// <param name="applicationInWorkId"></param>
/// <returns></returns>
[HttpGet(ApiRoutes.StatTemplateDistribution.Get)]
public async Task<IActionResult> Get([FromRoute] Guid applicationInWorkId)
{
// f87dbe9f-cabf-4108-9c93-12068d4b48a5
var query = templateService.Get()
.Include(t => t.Host)
.Where(t => t.ApplicationInWorkId == applicationInWorkId)
.GroupBy(t => t.Host!.WorkGroupId)
.Select(x => new
{
WorkGroupId = x.Key,
CountTemplates = x.Count(),
IsActivatedAllCount = x.Count(t => t.IsActiveTemplate && t.IsActiveSchedule),
IsDeactivatedAllCount = x.Count(t => !t.IsActiveTemplate || !t.IsActiveSchedule || (!t.IsActiveTemplate && !t.IsActiveSchedule)),
GroupingByDate =
x.GroupBy(d => d.NextRun).OrderBy(d => d.Key).Select(d =>
new
{
Date = d.Key,
//Всего
Count = d.Count(),
//Только активированных
IsActivatedCount = d.Count(t => t.IsActiveTemplate && t.IsActiveSchedule),
//Только деактивированных
IsDeactivatedCount = d.Count(t => !t.IsActiveTemplate || !t.IsActiveSchedule || (!t.IsActiveTemplate && !t.IsActiveSchedule))
}
)
});
var statResult = await query.ToListAsync();
var workGroups = await workGroupService.Get()
.Include(t => t.ResponseArea)
.Where(t => statResult.Select(x => x.WorkGroupId).Any(w => w == t.Id))
.ToListAsync();
var response = statResult.Select(stat => new StatTemplateDistributorResponse
{
WorkGroup = mapper.Map<WorkGroupResponse>(workGroups.FirstOrDefault(x => x.Id == stat.WorkGroupId)),
AllCount = stat.CountTemplates,
IsActivatedAllCount = stat.IsActivatedAllCount,
IsDeactivatedAllCount = stat.IsDeactivatedAllCount,
Stat = stat.GroupingByDate.Select(x => new StatTemplateDistributorDateStat
{
AllCount = x.Count,
Date = x.Date,
IsActivatedCount = x.IsActivatedCount,
IsDeactivatedCount = x.IsDeactivatedCount
}).ToList()
})
.OrderBy(t => t.WorkGroup?.Name)
.ToList();
return Ok(new Response<List<StatTemplateDistributorResponse>>(response, true));
}
}
}