feat(bll, dal): WeekendDayService + БД. CalendarService - получение рабочих дней за период
This commit is contained in:
@@ -2,68 +2,92 @@
|
||||
|
||||
namespace PARR.BLL.Services.Implementations
|
||||
{
|
||||
public delegate Task<List<DateOnly>> GetWeekendsDelegate(DateOnly start, DateOnly end);
|
||||
|
||||
|
||||
internal class CalendarService : ICalendarService
|
||||
{
|
||||
|
||||
private DateOnly GetEndPeriodDate(DateOnly startPeriod, TimeSpan distributionPeriod)
|
||||
{
|
||||
return startPeriod.AddDays(distributionPeriod.Days).AddDays(-1);
|
||||
}
|
||||
|
||||
|
||||
public async Task<List<DateOnly>> GetWorkDatesForPeriodAsync(DateOnly startPeriod, TimeSpan distributionPeriod, GetWeekendsDelegate getWeekends)
|
||||
public List<DateOnly> GetWorkDatesForPeriod(DateOnly startPeriod, TimeSpan distributionPeriod, GetWeekendsDelegate getWeekends)
|
||||
{
|
||||
var endPeriod = GetEndPeriodDate(startPeriod, distributionPeriod);
|
||||
|
||||
//не получилось сделать асинхронным
|
||||
var weekends = getWeekends.Invoke(startPeriod, endPeriod).ToList(); //.ToListAsync();
|
||||
|
||||
var weekends = await getWeekends.Invoke(startPeriod, endPeriod);
|
||||
|
||||
//TODO: logic!!!
|
||||
|
||||
//TODO: переделать метод получения рабочих дней, получать актуальные рабочие дни за период
|
||||
//не стали реализовывать сразу, так как повысится нагрузка на робота
|
||||
// на следующий месяц будет много изменений
|
||||
//временно сделаем список руками рабочих дней
|
||||
var workDates = new List<DateOnly>();
|
||||
var workDays = GetMockWorkDays(startPeriod, endPeriod);
|
||||
|
||||
workDays = workDays.Where(t => weekends.Any(x => x != t)).ToList();
|
||||
|
||||
return workDays;
|
||||
}
|
||||
|
||||
|
||||
return workDates;
|
||||
/// <summary>
|
||||
/// Временные данные пока не реализован сервис и логика
|
||||
/// </summary>
|
||||
/// <param name="startPeriod"></param>
|
||||
/// <param name="EndPeriod"></param>
|
||||
/// <returns></returns>
|
||||
private List<DateOnly> GetMockWorkDays(DateOnly startPeriod, DateOnly EndPeriod)
|
||||
{
|
||||
var workDaysList = new List<DateOnly>();
|
||||
|
||||
var currentDay = startPeriod;
|
||||
while (currentDay <= EndPeriod)
|
||||
{
|
||||
// 29 дней, потому что в феврале 28, чтоб не париться, сделали так
|
||||
if (currentDay.Day < 29)
|
||||
workDaysList.Add(currentDay);
|
||||
|
||||
|
||||
currentDay = currentDay.AddDays(1);
|
||||
}
|
||||
|
||||
return workDaysList.OrderBy(t => t).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class Test
|
||||
{
|
||||
private readonly ICalendarService calendarService;
|
||||
//public class Test
|
||||
//{
|
||||
// private readonly ICalendarService calendarService;
|
||||
|
||||
public Test(ICalendarService calendarService)
|
||||
{
|
||||
this.calendarService = calendarService;
|
||||
}
|
||||
// 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"));
|
||||
// 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);
|
||||
// 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)
|
||||
{
|
||||
//public class TestService
|
||||
//{
|
||||
// public async Task<List<DateOnly>> GetWeekendsAsync(DateOnly start, DateOnly end)
|
||||
// {
|
||||
|
||||
await Task.Delay(1000);
|
||||
// await Task.Delay(1000);
|
||||
|
||||
return new List<DateOnly> { new DateOnly(2024, 1, 12) };
|
||||
}
|
||||
}
|
||||
// return new List<DateOnly> { new DateOnly(2024, 1, 12) };
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
|
||||
using PARR.BLL.Services.Implementations;
|
||||
|
||||
namespace PARR.BLL.Services.Interfaces
|
||||
namespace PARR.BLL.Services.Interfaces
|
||||
{
|
||||
public delegate IQueryable<DateOnly> GetWeekendsDelegate(DateOnly start, DateOnly end);
|
||||
|
||||
public interface ICalendarService
|
||||
{
|
||||
|
||||
Task<List<DateOnly>> GetWorkDatesForPeriodAsync(DateOnly startPeriod, TimeSpan distributionPeriod, GetWeekendsDelegate getWeekends);
|
||||
//Task<List<DateOnly>> GetWorkDatesForPeriodAsync(DateOnly startPeriod, TimeSpan distributionPeriod, Action<List<DateOnly>> getWeekends);
|
||||
//Task<List<DateOnly>> GetWorkDatesForPeriodAsync(DateOnly startPeriod, TimeSpan distributionPeriod, Action getWeekends);
|
||||
/// <summary>
|
||||
/// Получить только рабочие дни за период
|
||||
/// </summary>
|
||||
/// <param name="startPeriod"></param>
|
||||
/// <param name="distributionPeriod"></param>
|
||||
/// <param name="getWeekends"></param>
|
||||
/// <returns></returns>
|
||||
List<DateOnly> GetWorkDatesForPeriod(DateOnly startPeriod, TimeSpan distributionPeriod, GetWeekendsDelegate getWeekends);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user