feat(api): статистика по регламентным работам по ЗО, РГ, РР

This commit is contained in:
Mikhail Trubnikov
2024-08-20 09:33:13 +10:00
parent 2e5424e6df
commit 558e91ce3b
13 changed files with 338 additions and 48 deletions

View File

@@ -0,0 +1,58 @@
using PARR.API.Contracts.V1.Requests.Queries;
using PARR.API.Services.Interfaces;
using PARR.DAL.Models;
namespace PARR.API.Services.Implementations
{
internal class WorkLoadService : IWorkLoadService
{
private DateTime GetStartDate()
{
//начинаем не с сегодняшнего дня, а с завтра, так как на сегодня уже некоторые работы были проведены и их дата изменилась
return DateTimeOffset.UtcNow.Date.AddDays(1);
}
private DateTime GetEndDate(bool? isMonth)
{
var startDate = GetStartDate();
return isMonth == true ? startDate.AddDays(30) : startDate.AddDays(6);
}
public List<DateTimeOffset> GetDatesForPeriod(WorkloadBaseQuery requestQuery)
{
var startDate = GetStartDate();
var endDate = GetEndDate(requestQuery.IsMonth);
var daysList = new List<DateTimeOffset>();
daysList.Add(new DateTimeOffset(startDate, new TimeSpan(0)));
while (daysList.Last() < endDate)
daysList.Add(daysList.Last().AddDays(1));
return daysList.OrderBy(t => t).ToList();
}
public IQueryable<Template> FilterTemplatesQuery(IQueryable<Template> query, WorkloadBaseQuery requestQuery)
{
var startDate = GetStartDate();
var endDate = GetEndDate(requestQuery.IsMonth);
query = query.Where(t =>
t.NextRun.DateTime.Date >= startDate.Date && t.NextRun.DateTime.Date <= endDate.Date
);
if (requestQuery.IsActiveTemplate.HasValue)
query = query.Where(t => t.IsActiveTemplate == requestQuery.IsActiveTemplate.Value);
if (requestQuery.IsActiveSchedule.HasValue)
query = query.Where(t => t.IsActiveTemplate == requestQuery.IsActiveSchedule.Value);
return query;
}
}
}