using Microsoft.Extensions.Logging; using Volo.Abp.Caching; using Volo.Abp.Domain.Services; using Yi.Framework.AiHub.Domain.Entities.Model; using Yi.Framework.SqlSugarCore.Abstractions; namespace Yi.Framework.AiHub.Domain.Managers; /// /// 模型管理器 /// public class ModelManager : DomainService { private readonly ISqlSugarRepository _aiModelRepository; private readonly IDistributedCache, string> _distributedCache; private readonly ILogger _logger; private const string PREMIUM_MODEL_IDS_CACHE_KEY = "PremiumModelIds"; public ModelManager( ISqlSugarRepository aiModelRepository, IDistributedCache, string> distributedCache, ILogger logger) { _aiModelRepository = aiModelRepository; _distributedCache = distributedCache; _logger = logger; } /// /// 获取所有尊享模型ID列表(使用分布式缓存,10分钟过期) /// /// 尊享模型ID列表 public async Task> GetPremiumModelIdsAsync() { var output = await _distributedCache.GetOrAddAsync( PREMIUM_MODEL_IDS_CACHE_KEY, async () => { // 从数据库查询 var premiumModelIds = await _aiModelRepository._DbQueryable .Where(x => x.IsPremium) .Select(x => x.ModelId) .ToListAsync(); return premiumModelIds; }, () => new Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(1) } ); return output ?? new List(); } /// /// 判断指定模型是否为尊享模型 /// /// 模型ID /// 是否为尊享模型 public async Task IsPremiumModelAsync(string modelId) { if (string.IsNullOrWhiteSpace(modelId)) { return false; } var premiumModelIds = await GetPremiumModelIdsAsync(); return premiumModelIds.Contains(modelId); } /// /// 清除尊享模型ID缓存 /// public async Task ClearPremiumModelIdsCacheAsync() { await _distributedCache.RemoveAsync(PREMIUM_MODEL_IDS_CACHE_KEY); _logger.LogInformation("已清除尊享模型ID分布式缓存"); } }