using Microsoft.Extensions.Hosting;
|
using Microsoft.Extensions.Logging;
|
using WIDESEAWCS_Common;
|
using WIDESEAWCS_Common.HttpEnum;
|
using WIDESEAWCS_Core.Caches;
|
|
namespace WIDESEAWCS_Server.HostedService
|
{
|
/// <summary>
|
/// Preloads API route mappings into cache at application startup.
|
/// </summary>
|
public class ApiRouteCacheWarmupHostedService : IHostedService
|
{
|
private static readonly (string ConfigKey, string RoutePath)[] ApiRouteMappings =
|
{
|
(nameof(ConfigKey.CreateTaskInboundAsync), "Task/CreateTaskInbound"),
|
(nameof(ConfigKey.GetTasksLocation), "Task/GetTasksLocation"),
|
(nameof(ConfigKey.OutboundFinishTaskAsync), "Task/OutboundFinishTask"),
|
(nameof(ConfigKey.InboundFinishTaskAsync), "Task/InboundFinishTask"),
|
(nameof(ConfigKey.GetOutBoundTrayTaskAsync), "Task/GetOutBoundTrayTask"),
|
(nameof(ConfigKey.CreateTaskInboundTrayAsync), "Task/CreateTaskInboundTray"),
|
(nameof(ConfigKey.GroupPalletAsync), "Stock/GroupPalletAsync"),
|
(nameof(ConfigKey.ChangePalletAsync), "Stock/ChangePalletAsync"),
|
(nameof(ConfigKey.SplitPalletAsync), "Stock/SplitPalletAsync"),
|
(nameof(ConfigKey.UpdateTaskByStatus), "Task/UpdateTaskByStatus"),
|
(nameof(ConfigKey.TransferCheck), "LocationInfo/TransferCheck"),
|
(nameof(ConfigKey.RelocationFinishTask), "Task/RelocationFinishTask"),
|
(nameof(ConfigKey.CreateRobotGroupPalletTask), "Task/CreateRobotGroupPalletTask"),
|
(nameof(ConfigKey.CreateRobotChangePalletTask), "Task/CreateRobotChangePalletTask"),
|
(nameof(ConfigKey.CreateRobotSplitPalletTask), "Task/CreateRobotSplitPalletTask")
|
};
|
|
private readonly ICacheService _cache;
|
private readonly ILogger<ApiRouteCacheWarmupHostedService> _logger;
|
|
public ApiRouteCacheWarmupHostedService(
|
ICacheService cache,
|
ILogger<ApiRouteCacheWarmupHostedService> logger)
|
{
|
_cache = cache;
|
_logger = logger;
|
}
|
|
public Task StartAsync(CancellationToken cancellationToken)
|
{
|
const string cacheKeyPrefix = $"{RedisPrefix.Code}:{RedisName.API}:";
|
int warmedCount = 0;
|
|
foreach ((string configKey, string routePath) in ApiRouteMappings)
|
{
|
_cache.TryAdd($"{cacheKeyPrefix}{configKey}", routePath);
|
warmedCount++;
|
}
|
|
_logger.LogInformation("£ºAPI·ÓÉ»º´æÔ¤ÈÈÍê³É¡£¼ÆÊý={Count}", warmedCount);
|
return Task.CompletedTask;
|
}
|
|
public Task StopAsync(CancellationToken cancellationToken)
|
{
|
return Task.CompletedTask;
|
}
|
}
|
}
|