From cde6ad77663a80d78d77568428a6287b53347716 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期四, 19 三月 2026 17:19:55 +0800
Subject: [PATCH] feat: 新增API路由缓存预热并完善机器人消息日志

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/HostedService/ApiRouteCacheWarmupHostedService.cs |   64 ++++++++++++++++++++++++++++++++
 1 files changed, 64 insertions(+), 0 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/HostedService/ApiRouteCacheWarmupHostedService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/HostedService/ApiRouteCacheWarmupHostedService.cs
new file mode 100644
index 0000000..040d024
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/HostedService/ApiRouteCacheWarmupHostedService.cs
@@ -0,0 +1,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;
+        }
+    }
+}

--
Gitblit v1.9.3