xxyy
2025-03-10 ffe8ac13ba8bc9426f8b5f5b88f094a05b31b7ff
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs
@@ -20,6 +20,13 @@
using Swashbuckle.AspNetCore.SwaggerGen;
using Microsoft.OpenApi.Models;
using WIDESEA_StorageTaskServices;
using Autofac.Core;
using WIDESEA_Cache;
using SimpleRedis;
using WIDESEA_DTO.WMS;
using static NewLife.Remoting.ApiHttpClient;
using NewLife.Windows;
using WIDESEA_Core.Enums;
var builder = WebApplication.CreateBuilder(args);
@@ -112,8 +119,41 @@
builder.Services.AddHostedService<MyBackgroundService>();
//缓存设置配置转实体
builder.Services.AddConfigurableOptions<CacheSettingsOptions>();
//禁止在主机启动时通过 App.GetOptions<TOptions> 获取选项,如需获取配置选项理应通过 App.GetConfig<TOptions>("配置节点", true)。
var cacheSettings = AppSettings.Configuration.GetSection("CacheSettings").Get<CacheSettingsOptions>();
//如果有redis连接字符串
if (cacheSettings.UseRedis)
{
    var connectionString =
        $"server={cacheSettings.RedisSettings.Address};db={cacheSettings.RedisSettings.Db}";
    //注入redis
    builder.Services.AddSimpleRedis(connectionString);
    builder.Services.AddScoped<ISimpleCacheService, RedisCacheService>();
}
else
{
    builder.Services.AddScoped<ISimpleCacheService, MemoryCacheService>();
}
var app = builder.Build();
// 验证 Redis 服务是否成功注册
using (var scope = app.Services.CreateScope())
{
    var services = scope.ServiceProvider;
    var redisService = services.GetService<ISimpleCacheService>();
    if (redisService == null)
    {
        WIDESEA_Core.Helper.ConsoleHelper.WriteErrorLine("Redis 服务未成功注册");
    }
    else
    {
        WIDESEA_Core.Helper.ConsoleHelper.WriteSuccessLine("Redis 服务已成功注册");
    }
}
// 3、配置中间件
app.UseMiniProfiler();//性能分析器
@@ -151,5 +191,26 @@
app.MapControllers();
//通过 App.GetOptions<TOptions> 获取选项
var cacheSettingsb = App.GetOptions<CacheSettingsOptions>();
//如果需要清除缓存
if (cacheSettingsb.UseRedis && cacheSettingsb.RedisSettings.ClearRedis)
{
    var redis = app.Services.CreateScope().ServiceProvider.GetService<ISimpleCacheService>(); //获取redis服务
    // 删除redis的key
    redis.DelByPattern(CacheConst.Cache_Prefix);
    WIDESEA_Core.Helper.ConsoleHelper.WriteInfoLine("正在缓存库存信息");
    var stockInfoList = await SqlSugarHelper.DbWMS.Queryable<DtStockInfo>()
        .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock).IncludesAllFirstLayer().ToListAsync();
    // 缓存库存信息
    foreach (var item in stockInfoList)
    {
        item.StockInfoDetails = new List<DtStockInfoDetail>() { { item.StockInfoDetails[0] } };
        redis.HashAdd(CacheConst.Cache_DtStockInfo, item.PalletCode, item);
    }
    WIDESEA_Core.Helper.ConsoleHelper.WriteInfoLine("缓存库存信息完成");
}
app.Run();