feat(api, dal): в SettingsFromDb добавлен параметр WeekendCacheTtl - время кэша для выходных. Доработан сервис WeekendDayService с учетом кэша. В апи добавлен контроллер по управлению выходными днями WeekendController
This commit is contained in:
@@ -109,7 +109,8 @@ namespace PARR.DAL.Context
|
||||
new { Name = nameof(SettingsFromDb.ScheduleExclude), Description = "Расписание регламентной работы - Тип исключения", Value = "Нет исключений" },
|
||||
new { Name = nameof(SettingsFromDb.ScheduleRepeatRange), Description = "Расписание регламентной работы - Диапазн повторов", Value = "Отсутствует дата завершения" },
|
||||
new { Name = nameof(SettingsFromDb.OrderSearchDeltaDate), Description = "Промежуток времени для поиска нарядов в ЕСПП", Value = new TimeSpan(1, 30, 0).ToString() },
|
||||
new { Name = nameof(SettingsFromDb.EsppRobotAccountTimeZoneHour), Description = "Таймзона УЗ роботов в ЕСПП, в часах (может быть положительная и отрицательная)", Value = "3" }
|
||||
new { Name = nameof(SettingsFromDb.EsppRobotAccountTimeZoneHour), Description = "Таймзона УЗ роботов в ЕСПП, в часах (может быть положительная и отрицательная)", Value = "3" },
|
||||
new { Name = nameof(SettingsFromDb.WeekendCacheTtl), Description = "Время хранения в кэше данных о выходных и рабочих днях", Value = new TimeSpan(1, 0, 0).ToString() }
|
||||
);
|
||||
});
|
||||
#endregion
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
/// <summary>
|
||||
/// Расписание регламентной работы - В каком часовом поясе
|
||||
/// </summary>
|
||||
public string ScheduleTimezone { get; set; } = string.Empty;
|
||||
public string ScheduleTimezone { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Расписание регламентной работы - Тип исключения
|
||||
@@ -68,6 +68,11 @@
|
||||
/// </summary>
|
||||
public int EsppRobotAccountTimeZoneHour { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Время хранения в кэше данных о выходных и рабочих днях
|
||||
/// </summary>
|
||||
public TimeSpan WeekendCacheTtl { get; set; } = new TimeSpan(0, 5, 0);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
3073
PARR.DAL/Migrations/20240917000125_tblSettingsAddWeekendCacheTtl.Designer.cs
generated
Normal file
3073
PARR.DAL/Migrations/20240917000125_tblSettingsAddWeekendCacheTtl.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,28 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace PARR.DAL.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class tblSettingsAddWeekendCacheTtl : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.InsertData(
|
||||
table: "Settings",
|
||||
columns: new[] { "Name", "Description", "Value" },
|
||||
values: new object[] { "WeekendCacheTtl", "Время хранения в кэше данных о выходных и рабочих днях", "01:00:00" });
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DeleteData(
|
||||
table: "Settings",
|
||||
keyColumn: "Name",
|
||||
keyValue: "WeekendCacheTtl");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2208,6 +2208,12 @@ namespace PARR.DAL.Migrations
|
||||
Name = "EsppRobotAccountTimeZoneHour",
|
||||
Description = "Таймзона УЗ роботов в ЕСПП, в часах (может быть положительная и отрицательная)",
|
||||
Value = "3"
|
||||
},
|
||||
new
|
||||
{
|
||||
Name = "WeekendCacheTtl",
|
||||
Description = "Время хранения в кэше данных о выходных и рабочих днях",
|
||||
Value = "01:00:00"
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -119,10 +119,6 @@ namespace PARR.DAL
|
||||
services.AddSingleton(settingsFromDb);
|
||||
|
||||
PrefixSettings.PrefixWithoutVariable = settingsFromDb.TemplatePrefixWithoutVariable;
|
||||
|
||||
var weekendCacheSettings = new WeekendCacheSettings();
|
||||
configuration.GetSection(nameof(WeekendCacheSettings)).Bind(weekendCacheSettings);
|
||||
services.AddSingleton(weekendCacheSettings);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using PARR.DAL.CacheServices;
|
||||
using PARR.DAL.Context;
|
||||
using PARR.DAL.Contracts;
|
||||
using PARR.DAL.Models;
|
||||
using PARR.DAL.Services.Abstracts;
|
||||
using PARR.DAL.Services.Interfaces;
|
||||
using PARR.DAL.Settings;
|
||||
|
||||
namespace PARR.DAL.Services.Implementations
|
||||
{
|
||||
@@ -14,7 +14,7 @@ namespace PARR.DAL.Services.Implementations
|
||||
private readonly DataContext dataContext;
|
||||
private readonly ILogger<WeekendDayService> logger;
|
||||
private readonly IRedisCacheService redisCacheService;
|
||||
private readonly WeekendCacheSettings weekendCacheSettings;
|
||||
private readonly SettingsFromDb settings;
|
||||
|
||||
protected override DbSet<WeekendDay> EntitySet => dataContext.WeekendDays;
|
||||
|
||||
@@ -24,13 +24,13 @@ namespace PARR.DAL.Services.Implementations
|
||||
DataContext dataContext,
|
||||
ILogger<WeekendDayService> logger,
|
||||
IRedisCacheService redisCacheService,
|
||||
WeekendCacheSettings weekendCacheSettings
|
||||
SettingsFromDb settings
|
||||
) : base(logger)
|
||||
{
|
||||
this.dataContext = dataContext;
|
||||
this.logger = logger;
|
||||
this.redisCacheService = redisCacheService;
|
||||
this.weekendCacheSettings = weekendCacheSettings;
|
||||
this.settings = settings;
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,6 @@ namespace PARR.DAL.Services.Implementations
|
||||
}
|
||||
|
||||
|
||||
|
||||
public async Task<bool> IsWorkDayAsync(DateOnly date, bool useCache = false)
|
||||
{
|
||||
if (useCache)
|
||||
@@ -62,13 +61,45 @@ namespace PARR.DAL.Services.Implementations
|
||||
|
||||
//сохраняем всегда в КЭШ значение выходного и рабочего дня
|
||||
var cacheKey = isWorkday ? GetWorkDayKey(date) : GetWeekendKey(date);
|
||||
//TODO:!!! Тут настройки вынести в DB settings
|
||||
await redisCacheService.SetCachedDataAsync(cacheKey, date, weekendCacheSettings.WeekendTtl);
|
||||
await redisCacheService.SetCachedDataAsync(cacheKey, date, settings.WeekendCacheTtl);
|
||||
|
||||
return isWorkday;
|
||||
}
|
||||
|
||||
|
||||
public override async Task<bool> CreateAsync(WeekendDay obj)
|
||||
{
|
||||
// При создании выходного дня, смотрим, был ли он в кэше, если был, удаляем
|
||||
await redisCacheService.DeleteCachedDataAsync(GetWeekendKey(obj.Date));
|
||||
await redisCacheService.DeleteCachedDataAsync(GetWorkDayKey(obj.Date));
|
||||
|
||||
return await base.CreateAsync(obj);
|
||||
}
|
||||
|
||||
|
||||
public override bool Delete(WeekendDay obj)
|
||||
{
|
||||
// При создании выходного дня, смотрим, был ли он в кэше, если был, удаляем
|
||||
redisCacheService.DeleteCachedData(GetWeekendKey(obj.Date));
|
||||
redisCacheService.DeleteCachedData(GetWorkDayKey(obj.Date));
|
||||
|
||||
return base.Delete(obj);
|
||||
}
|
||||
|
||||
|
||||
public override async Task<bool> DeleteAsync(Guid id)
|
||||
{
|
||||
var exist = await GetAsync(id);
|
||||
if (exist == null)
|
||||
{
|
||||
logger.LogError($"Ошибка при удалении из БД. Не найдена запись в БД с id: {id}");
|
||||
return false;
|
||||
}
|
||||
|
||||
return Delete(exist);
|
||||
}
|
||||
|
||||
|
||||
private string GetWeekendKey(DateOnly day)
|
||||
{
|
||||
return $"weekend_{day.ToString("yyyy-MM-dd")}";
|
||||
|
||||
@@ -6,6 +6,13 @@ namespace PARR.DAL.Services.Interfaces
|
||||
public interface IWeekendDayService : IBaseService<WeekendDay>
|
||||
{
|
||||
IQueryable<DateOnly> GetWeekends(DateOnly start, DateOnly end);
|
||||
|
||||
/// <summary>
|
||||
/// Проверка, это рабочий день?
|
||||
/// </summary>
|
||||
/// <param name="date"></param>
|
||||
/// <param name="useCache">разрешить использовать кэш? По умолчанию false</param>
|
||||
/// <returns></returns>
|
||||
Task<bool> IsWorkDayAsync(DateOnly date, bool useCache = false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
namespace PARR.DAL.Settings
|
||||
{
|
||||
public class WeekendCacheSettings
|
||||
{
|
||||
/// <summary>
|
||||
/// Время хранения в кэше данных о выходных и рабочих днях
|
||||
/// </summary>
|
||||
public TimeSpan WeekendTtl { get; set; } = new TimeSpan(0, 5, 0);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user