diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiGateWayManager.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiGateWayManager.cs index 22c31057..e81a21cd 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiGateWayManager.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiGateWayManager.cs @@ -516,7 +516,7 @@ public class AiGateWayManager : DomainService await _usageStatisticsManager.SetUsageAsync(userId.Value, request.Model, data.TokenUsage); // 扣减尊享token包用量 - var totalTokens = (data.TokenUsage?.InputTokens ?? 0) + (data.TokenUsage?.OutputTokens ?? 0); + var totalTokens = data.TokenUsage.TotalTokens??0; if (totalTokens > 0) { var consumeSuccess = await PremiumPackageManager.ConsumeTokensAsync(userId.Value, totalTokens); diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/PremiumPackageManager.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/PremiumPackageManager.cs index f666bd96..768cc8d5 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/PremiumPackageManager.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/PremiumPackageManager.cs @@ -73,7 +73,7 @@ public class PremiumPackageManager : DomainService { // 获取用户所有可用的尊享包,按剩余token升序排列(优先消耗快用完的) var availablePackages = await _premiumPackageRepository._DbQueryable - .Where(x => x.UserId == userId && x.IsActive && x.RemainingTokens > 0) + .Where(x => x.UserId == userId && x.IsActive) .OrderBy(x => x.RemainingTokens) .ToListAsync(); @@ -99,18 +99,18 @@ public class PremiumPackageManager : DomainService if (totalAvailableTokens < tokenCount) { _logger.LogWarning( - $"用户 {userId} 尊享包Token不足,需要: {tokenCount}, 可用: {totalAvailableTokens}"); - return false; + $"用户 {userId} 尊享包Token不足,需要: {tokenCount}, 可用: {totalAvailableTokens},将扣减到负数"); } - // 从可用的包中逐个扣除Token + // 从可用的包中逐个扣除Token,允许扣减到负数 var remainingToConsume = tokenCount; foreach (var package in validPackages) { if (remainingToConsume <= 0) break; - var toConsume = Math.Min(remainingToConsume, package.RemainingTokens); + // 直接扣除剩余需要消耗的token,允许扣减到负数 + var toConsume = remainingToConsume; if (package.ConsumeTokens(toConsume)) { await _premiumPackageRepository.UpdateAsync(package); @@ -131,13 +131,10 @@ public class PremiumPackageManager : DomainService /// 可用Token总数 public async Task GetAvailableTokensAsync(Guid userId) { - var packages = await _premiumPackageRepository._DbQueryable + return await _premiumPackageRepository._DbQueryable .Where(x => x.UserId == userId && x.IsActive && x.RemainingTokens > 0) - .ToListAsync(); - - return packages .Where(p => p.IsAvailable()) - .Sum(p => p.RemainingTokens); + .SumAsync(p => p.RemainingTokens); } /// @@ -181,4 +178,4 @@ public class PremiumPackageManager : DomainService _logger.LogInformation($"成功停用 {expiredPackages.Count} 个过期的尊享包"); return expiredPackages.Count; } -} +} \ No newline at end of file