feat(api, bll): StatHostController, StatApplicationController добавлена статистика за период. ICalendarService - публичный метод для получения списка дат, метод получения даты с учетом часового пояса.
This commit is contained in:
@@ -214,11 +214,13 @@
|
|||||||
{
|
{
|
||||||
public const string Get = BaseStat + "/hosts/";
|
public const string Get = BaseStat + "/hosts/";
|
||||||
public const string GetWithTemplates = BaseStat + "/hosts/templates";
|
public const string GetWithTemplates = BaseStat + "/hosts/templates";
|
||||||
|
public const string GetForPeriod = BaseStat + "/hosts/period";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class StatApplication
|
public static class StatApplication
|
||||||
{
|
{
|
||||||
public const string Get = BaseStat + "/applications/";
|
public const string Get = BaseStat + "/applications/";
|
||||||
|
public const string GetForPeriod = BaseStat + "/applications/period";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class StatOrder
|
public static class StatOrder
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
namespace PARR.API.Contracts.V1.Requests.BaseRequests
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Смещение таймзоны относительно клиента
|
||||||
|
/// </summary>
|
||||||
|
public class TimeZoneOffsetClient
|
||||||
|
{
|
||||||
|
public int TimeZoneOffsetHours { get; set; } = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,9 +1,11 @@
|
|||||||
namespace PARR.API.Contracts.V1.Requests.Queries
|
using PARR.API.Contracts.V1.Requests.BaseRequests;
|
||||||
|
|
||||||
|
namespace PARR.API.Contracts.V1.Requests.Queries
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Базовый запрос по загрузке по ЗО, РГ...
|
/// Базовый запрос по загрузке по ЗО, РГ...
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class WorkloadBaseQuery
|
public class WorkloadBaseQuery: TimeZoneOffsetClient
|
||||||
{
|
{
|
||||||
public bool? IsActiveTemplate { get; set; }
|
public bool? IsActiveTemplate { get; set; }
|
||||||
|
|
||||||
@@ -11,6 +13,6 @@
|
|||||||
|
|
||||||
public bool? IsMonth { get; set; }
|
public bool? IsMonth { get; set; }
|
||||||
|
|
||||||
public int TimeZoneOffsetHours { get; set; } = 0;
|
//public int TimeZoneOffsetHours { get; set; } = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
namespace PARR.API.Contracts.V1.Responses.Statistics
|
||||||
|
{
|
||||||
|
public class StatApplicationPeriodResponse
|
||||||
|
{
|
||||||
|
public DateOnly Date { get; set; }
|
||||||
|
|
||||||
|
public int CreatedApplicationsCount { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
namespace PARR.API.Contracts.V1.Responses.Statistics
|
||||||
|
{
|
||||||
|
public class StatHostPeriodResponse
|
||||||
|
{
|
||||||
|
public DateOnly Date { get; set; }
|
||||||
|
|
||||||
|
public int CreatedHostsCount { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,7 +11,8 @@
|
|||||||
|
|
||||||
public class StatWorkLoadDataResponse
|
public class StatWorkLoadDataResponse
|
||||||
{
|
{
|
||||||
public DateTimeOffset Date { get; set; }
|
//public DateTimeOffset Date { get; set; }
|
||||||
|
public DateOnly Date { get; set; }
|
||||||
public int TemplateCount { get; set; }
|
public int TemplateCount { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,11 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using PARR.API.Contracts.V1;
|
using PARR.API.Contracts.V1;
|
||||||
|
using PARR.API.Contracts.V1.Requests.BaseRequests;
|
||||||
using PARR.API.Contracts.V1.Responses.Base;
|
using PARR.API.Contracts.V1.Responses.Base;
|
||||||
using PARR.API.Contracts.V1.Responses.Statistics;
|
using PARR.API.Contracts.V1.Responses.Statistics;
|
||||||
using PARR.API.Controllers.V1.Base;
|
using PARR.API.Controllers.V1.Base;
|
||||||
|
using PARR.BLL.Services.Interfaces;
|
||||||
using PARR.Constants;
|
using PARR.Constants;
|
||||||
using PARR.DAL.Services.Interfaces;
|
using PARR.DAL.Services.Interfaces;
|
||||||
|
|
||||||
@@ -17,10 +19,12 @@ namespace PARR.API.Controllers.V1.Statistics
|
|||||||
public class StatApplicationController : BaseApiController
|
public class StatApplicationController : BaseApiController
|
||||||
{
|
{
|
||||||
private readonly IApplicationService applicationService;
|
private readonly IApplicationService applicationService;
|
||||||
|
private readonly ICalendarService calendarService;
|
||||||
|
|
||||||
public StatApplicationController(IApplicationService applicationService)
|
public StatApplicationController(IApplicationService applicationService, ICalendarService calendarService)
|
||||||
{
|
{
|
||||||
this.applicationService = applicationService;
|
this.applicationService = applicationService;
|
||||||
|
this.calendarService = calendarService;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -41,5 +45,50 @@ namespace PARR.API.Controllers.V1.Statistics
|
|||||||
|
|
||||||
return Ok(new Response<StatApplicationResponse>(response, true));
|
return Ok(new Response<StatApplicationResponse>(response, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Получить статистику за период
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="timeZoneQuery"></param>
|
||||||
|
/// <param name="startPeriodDays"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet(ApiRoutes.StatApplication.GetForPeriod)]
|
||||||
|
public async Task<IActionResult> GetForPeriod([FromQuery] TimeZoneOffsetClient timeZoneQuery, [FromQuery] int startPeriodDays = 3)
|
||||||
|
{
|
||||||
|
var endPeriod = calendarService.GetDateWithTimeZoneOffset(DateTimeOffset.UtcNow, timeZoneQuery.TimeZoneOffsetHours);
|
||||||
|
var startPeriod = endPeriod.AddDays(-startPeriodDays);
|
||||||
|
|
||||||
|
var query = applicationService.Get()
|
||||||
|
.Where(t => t.DateCreated.DateTime.Date >= startPeriod.Date && t.DateCreated.DateTime.Date <= endPeriod.Date)
|
||||||
|
.GroupBy(t => t.DateCreated.Date)
|
||||||
|
.Select(t => new
|
||||||
|
{
|
||||||
|
Date = t.Key,
|
||||||
|
ApplicationCount = t.Count()
|
||||||
|
});
|
||||||
|
|
||||||
|
var result = await query.ToListAsync();
|
||||||
|
|
||||||
|
var daysList = calendarService.GetDatesForPeriod(startPeriod, endPeriod);
|
||||||
|
|
||||||
|
var response = new List<StatApplicationPeriodResponse>();
|
||||||
|
|
||||||
|
daysList.ForEach(date =>
|
||||||
|
{
|
||||||
|
response.Add(new StatApplicationPeriodResponse
|
||||||
|
{
|
||||||
|
Date = date,
|
||||||
|
CreatedApplicationsCount = result.FirstOrDefault(t => DateOnly.FromDateTime(t.Date) == date)?.ApplicationCount ?? 0
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
response = response.OrderBy(t => t.Date).ToList();
|
||||||
|
|
||||||
|
return Ok(new Response<List<StatApplicationPeriodResponse>>(response, true));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,11 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using PARR.API.Contracts.V1;
|
using PARR.API.Contracts.V1;
|
||||||
|
using PARR.API.Contracts.V1.Requests.BaseRequests;
|
||||||
using PARR.API.Contracts.V1.Responses.Base;
|
using PARR.API.Contracts.V1.Responses.Base;
|
||||||
using PARR.API.Contracts.V1.Responses.Statistics;
|
using PARR.API.Contracts.V1.Responses.Statistics;
|
||||||
using PARR.API.Controllers.V1.Base;
|
using PARR.API.Controllers.V1.Base;
|
||||||
|
using PARR.BLL.Services.Interfaces;
|
||||||
using PARR.Constants;
|
using PARR.Constants;
|
||||||
using PARR.DAL.Services.Interfaces;
|
using PARR.DAL.Services.Interfaces;
|
||||||
|
|
||||||
@@ -17,10 +19,12 @@ namespace PARR.API.Controllers.V1.Statistics
|
|||||||
public class StatHostController : BaseApiController
|
public class StatHostController : BaseApiController
|
||||||
{
|
{
|
||||||
private readonly IHostService hostService;
|
private readonly IHostService hostService;
|
||||||
|
private readonly ICalendarService calendarService;
|
||||||
|
|
||||||
public StatHostController(IHostService hostService)
|
public StatHostController(IHostService hostService, ICalendarService calendarService)
|
||||||
{
|
{
|
||||||
this.hostService = hostService;
|
this.hostService = hostService;
|
||||||
|
this.calendarService = calendarService;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -43,6 +47,48 @@ namespace PARR.API.Controllers.V1.Statistics
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Получить статистику за период
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="timeZoneQuery"></param>
|
||||||
|
/// <param name="startPeriodDays"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet(ApiRoutes.StatHost.GetForPeriod)]
|
||||||
|
public async Task<IActionResult> GetForPeriod([FromQuery] TimeZoneOffsetClient timeZoneQuery, [FromQuery] int startPeriodDays = 3)
|
||||||
|
{
|
||||||
|
var endPeriod = calendarService.GetDateWithTimeZoneOffset(DateTimeOffset.UtcNow, timeZoneQuery.TimeZoneOffsetHours);
|
||||||
|
var startPeriod = endPeriod.AddDays(-startPeriodDays);
|
||||||
|
|
||||||
|
var query = hostService.Get()
|
||||||
|
.Where(t => t.DateCreated.DateTime.Date >= startPeriod.Date && t.DateCreated.DateTime.Date <= endPeriod.Date)
|
||||||
|
.GroupBy(t => t.DateCreated.Date)
|
||||||
|
.Select(t => new
|
||||||
|
{
|
||||||
|
Date = t.Key,
|
||||||
|
HostCount = t.Count()
|
||||||
|
});
|
||||||
|
|
||||||
|
var result = await query.ToListAsync();
|
||||||
|
|
||||||
|
var daysList = calendarService.GetDatesForPeriod(startPeriod, endPeriod);
|
||||||
|
|
||||||
|
var response = new List<StatHostPeriodResponse>();
|
||||||
|
|
||||||
|
daysList.ForEach(date =>
|
||||||
|
{
|
||||||
|
response.Add(new StatHostPeriodResponse
|
||||||
|
{
|
||||||
|
Date = date,
|
||||||
|
CreatedHostsCount = result.FirstOrDefault(t => DateOnly.FromDateTime(t.Date) == date)?.HostCount ?? 0
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
response = response.OrderBy(t => t.Date).ToList();
|
||||||
|
|
||||||
|
return Ok(new Response<List<StatHostPeriodResponse>>(response, true));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Количество хостов в шаблонах
|
/// Количество хостов в шаблонах
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ namespace PARR.API.Controllers.V1.Statistics
|
|||||||
var workLoads = daysList.Select(t => new StatWorkLoadDataResponse
|
var workLoads = daysList.Select(t => new StatWorkLoadDataResponse
|
||||||
{
|
{
|
||||||
Date = t,
|
Date = t,
|
||||||
TemplateCount = queryResult.FirstOrDefault(x => x.ResponseAreaCode == respArea.Code && x.Date.Date == t.Date)?.TemplateCount ?? 0
|
TemplateCount = queryResult.FirstOrDefault(x => x.ResponseAreaCode == respArea.Code && DateOnly.FromDateTime(x.Date) == t)?.TemplateCount ?? 0
|
||||||
}).OrderBy(t => t.Date).ToList();
|
}).OrderBy(t => t.Date).ToList();
|
||||||
|
|
||||||
response.Add(
|
response.Add(
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ namespace PARR.API.Controllers.V1.Statistics
|
|||||||
var workLoads = daysList.Select(t => new StatWorkLoadDataResponse
|
var workLoads = daysList.Select(t => new StatWorkLoadDataResponse
|
||||||
{
|
{
|
||||||
Date = t,
|
Date = t,
|
||||||
TemplateCount = queryResult.FirstOrDefault(x => x.WorkGroupId == wg.Id && x.Date.Date == t.Date)?.TemplateCount ?? 0
|
TemplateCount = queryResult.FirstOrDefault(x => x.WorkGroupId == wg.Id && DateOnly.FromDateTime(x.Date) == t)?.TemplateCount ?? 0
|
||||||
}).OrderBy(t => t.Date).ToList();
|
}).OrderBy(t => t.Date).ToList();
|
||||||
|
|
||||||
response.Add(new StatWorkGroupWorkLoadResponse
|
response.Add(new StatWorkGroupWorkLoadResponse
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ namespace PARR.API.Controllers.V1.Statistics
|
|||||||
var workLoads = daysList.Select(t => new StatWorkLoadDataResponse
|
var workLoads = daysList.Select(t => new StatWorkLoadDataResponse
|
||||||
{
|
{
|
||||||
Date = t,
|
Date = t,
|
||||||
TemplateCount = queryResult.FirstOrDefault(x => x.ApplicationInWorkId == appInWork.Id && x.Date.Date == t.Date && x.WorkGroupId == workGroup.Id)?.TemplateCount ?? 0
|
TemplateCount = queryResult.FirstOrDefault(x => x.ApplicationInWorkId == appInWork.Id && DateOnly.FromDateTime(x.Date) == t && x.WorkGroupId == workGroup.Id)?.TemplateCount ?? 0
|
||||||
}).OrderBy(t => t.Date).ToList();
|
}).OrderBy(t => t.Date).ToList();
|
||||||
|
|
||||||
response.Add(new StatWorkWorkLoadResponse
|
response.Add(new StatWorkWorkLoadResponse
|
||||||
|
|||||||
@@ -1,15 +1,25 @@
|
|||||||
using PARR.API.Contracts.V1.Requests.Queries;
|
using PARR.API.Contracts.V1.Requests.Queries;
|
||||||
using PARR.API.Services.Interfaces;
|
using PARR.API.Services.Interfaces;
|
||||||
|
using PARR.BLL.Services.Interfaces;
|
||||||
using PARR.DAL.Models;
|
using PARR.DAL.Models;
|
||||||
|
|
||||||
namespace PARR.API.Services.Implementations
|
namespace PARR.API.Services.Implementations
|
||||||
{
|
{
|
||||||
internal class WorkLoadService : IWorkLoadService
|
internal class WorkLoadService : IWorkLoadService
|
||||||
{
|
{
|
||||||
|
private readonly ICalendarService calendarService;
|
||||||
|
|
||||||
|
public WorkLoadService(ICalendarService calendarService)
|
||||||
|
{
|
||||||
|
this.calendarService = calendarService;
|
||||||
|
}
|
||||||
|
|
||||||
private DateTime GetStartDate(int timeZoneOffsetHours)
|
private DateTime GetStartDate(int timeZoneOffsetHours)
|
||||||
{
|
{
|
||||||
//начинаем не с сегодняшнего дня, а с завтра, так как на сегодня уже некоторые работы были проведены и их дата изменилась
|
//начинаем не с сегодняшнего дня, а с завтра, так как на сегодня уже некоторые работы были проведены и их дата изменилась
|
||||||
return DateTimeOffset.UtcNow.AddHours(timeZoneOffsetHours).Date.AddDays(1);
|
//return DateTimeOffset.UtcNow.AddHours(timeZoneOffsetHours).Date.AddDays(1);
|
||||||
|
|
||||||
|
return calendarService.GetDateWithTimeZoneOffset(DateTimeOffset.UtcNow, timeZoneOffsetHours).Date.AddDays(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -21,19 +31,23 @@ namespace PARR.API.Services.Implementations
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public List<DateTimeOffset> GetDatesForPeriod(WorkloadBaseQuery requestQuery)
|
public List<DateOnly> GetDatesForPeriod(WorkloadBaseQuery requestQuery)
|
||||||
{
|
{
|
||||||
var startDate = GetStartDate(requestQuery.TimeZoneOffsetHours);
|
var startDate = GetStartDate(requestQuery.TimeZoneOffsetHours);
|
||||||
var endDate = GetEndDate(requestQuery.IsMonth, requestQuery.TimeZoneOffsetHours);
|
var endDate = GetEndDate(requestQuery.IsMonth, requestQuery.TimeZoneOffsetHours);
|
||||||
|
|
||||||
var daysList = new List<DateTimeOffset>();
|
//var daysList = new List<DateTimeOffset>();
|
||||||
|
|
||||||
daysList.Add(new DateTimeOffset(startDate, new TimeSpan(0)));
|
//daysList.Add(new DateTimeOffset(startDate, new TimeSpan(0)));
|
||||||
|
|
||||||
while (daysList.Last() < endDate)
|
//while (daysList.Last() < endDate)
|
||||||
daysList.Add(daysList.Last().AddDays(1));
|
// daysList.Add(daysList.Last().AddDays(1));
|
||||||
|
|
||||||
return daysList.OrderBy(t => t).ToList();
|
//return daysList.OrderBy(t => t).ToList();
|
||||||
|
|
||||||
|
var aaa = DateOnly.FromDateTime(startDate);
|
||||||
|
|
||||||
|
return calendarService.GetDatesForPeriod(DateOnly.FromDateTime(startDate), DateOnly.FromDateTime(endDate));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ namespace PARR.API.Services.Interfaces
|
|||||||
{
|
{
|
||||||
IQueryable<Template> FilterTemplatesQuery(IQueryable<Template> query, WorkloadBaseQuery requestQuery);
|
IQueryable<Template> FilterTemplatesQuery(IQueryable<Template> query, WorkloadBaseQuery requestQuery);
|
||||||
|
|
||||||
List<DateTimeOffset> GetDatesForPeriod(WorkloadBaseQuery requestQuery);
|
List<DateOnly> GetDatesForPeriod(WorkloadBaseQuery requestQuery);
|
||||||
|
|
||||||
//DateTime GetEndDate(DateTime startDate, bool? isMonth);
|
//DateTime GetEndDate(DateTime startDate, bool? isMonth);
|
||||||
//DateTime GetStartDate();
|
//DateTime GetStartDate();
|
||||||
|
|||||||
@@ -46,19 +46,6 @@ namespace PARR.BLL.Services.Implementations
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//private TimeSpan ParseTimeSpan(string value)
|
|
||||||
//{
|
|
||||||
// try
|
|
||||||
// {
|
|
||||||
// return TimeSpan.Parse(value);
|
|
||||||
// }
|
|
||||||
// catch (Exception ex)
|
|
||||||
// {
|
|
||||||
// logger.LogError(ex, $"{nameof(CalendarService)}, получение конца периода. Не смог распарсить string в TimeSpan для значения {value}.");
|
|
||||||
// return new TimeSpan(0);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Возвращает список рабочих дней с начала периода без выходных
|
/// Возвращает список рабочих дней с начала периода без выходных
|
||||||
@@ -100,15 +87,15 @@ namespace PARR.BLL.Services.Implementations
|
|||||||
/// Возвращает список дней между датами
|
/// Возвращает список дней между датами
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="startPeriod"></param>
|
/// <param name="startPeriod"></param>
|
||||||
/// <param name="EndPeriod"></param>
|
/// <param name="endPeriod"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private List<DateOnly> GetDatesForPeriod(DateOnly startPeriod, DateOnly EndPeriod)
|
public List<DateOnly> GetDatesForPeriod(DateOnly startPeriod, DateOnly endPeriod)
|
||||||
{
|
{
|
||||||
var workDaysList = new List<DateOnly>();
|
var workDaysList = new List<DateOnly>();
|
||||||
|
|
||||||
var currentDay = startPeriod;
|
var currentDay = startPeriod;
|
||||||
|
|
||||||
while (currentDay <= EndPeriod)
|
while (currentDay <= endPeriod)
|
||||||
{
|
{
|
||||||
workDaysList.Add(currentDay);
|
workDaysList.Add(currentDay);
|
||||||
currentDay = currentDay.AddDays(1);
|
currentDay = currentDay.AddDays(1);
|
||||||
@@ -116,41 +103,23 @@ namespace PARR.BLL.Services.Implementations
|
|||||||
|
|
||||||
return workDaysList.OrderBy(t => t).ToList();
|
return workDaysList.OrderBy(t => t).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Возвращает список дней между датами
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="startPeriod"></param>
|
||||||
|
/// <param name="endPeriod"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<DateOnly> GetDatesForPeriod(DateTimeOffset startPeriod, DateTimeOffset endPeriod)
|
||||||
|
{
|
||||||
|
return GetDatesForPeriod(DateOnly.FromDateTime(startPeriod.DateTime), DateOnly.FromDateTime(endPeriod.DateTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//public class Test
|
public DateTimeOffset GetDateWithTimeZoneOffset(DateTimeOffset date, int timeZoneOffsetHours)
|
||||||
//{
|
{
|
||||||
// private readonly ICalendarService calendarService;
|
return date.AddHours(timeZoneOffsetHours);
|
||||||
|
}
|
||||||
// public Test(ICalendarService calendarService)
|
|
||||||
// {
|
}
|
||||||
// this.calendarService = calendarService;
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
// public async void Ttt()
|
|
||||||
// {
|
|
||||||
// var tService = new TestService();
|
|
||||||
// // var endPeriod = calendarService.GetEndPeriodDate(new DateOnly(2024, 1, 1), TimeSpan.Parse("30:00:00:00"));
|
|
||||||
|
|
||||||
// var workDays = await calendarService.GetWorkDatesForPeriodAsync(new DateOnly(2024, 1, 1), TimeSpan.Parse("30:00:00:00"), tService.GetWeekendsAsync);
|
|
||||||
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
//public class TestService
|
|
||||||
//{
|
|
||||||
// public async Task<List<DateOnly>> GetWeekendsAsync(DateOnly start, DateOnly end)
|
|
||||||
// {
|
|
||||||
|
|
||||||
// await Task.Delay(1000);
|
|
||||||
|
|
||||||
// return new List<DateOnly> { new DateOnly(2024, 1, 12) };
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,30 @@ namespace PARR.BLL.Services.Interfaces
|
|||||||
|
|
||||||
public interface ICalendarService
|
public interface ICalendarService
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Возвращает список дней между датами
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="startPeriod"></param>
|
||||||
|
/// <param name="endPeriod"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
List<DateOnly> GetDatesForPeriod(DateOnly startPeriod, DateOnly endPeriod);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Возвращает список дней между датами
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="startPeriod"></param>
|
||||||
|
/// <param name="endPeriod"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
List<DateOnly> GetDatesForPeriod(DateTimeOffset startPeriod, DateTimeOffset endPeriod);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Получить дату со смещенной часовой зоной
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="date"></param>
|
||||||
|
/// <param name="timeZoneOffsetHours"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
DateTimeOffset GetDateWithTimeZoneOffset(DateTimeOffset date, int timeZoneOffsetHours);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Получить только рабочие дни за период
|
/// Получить только рабочие дни за период
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user