wanshenmean
2026-03-27 dcbd4934d063f471c01cbcf93574c2e2ac5f16b5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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;
        }
    }
}