From 754f14555984567f21c1e5376e9420233aa61813 Mon Sep 17 00:00:00 2001 From: ccnetcore Date: Sun, 12 Oct 2025 21:12:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=85=81=E8=AE=B8=E5=B0=8A=E4=BA=AB?= =?UTF-8?q?=E5=8C=85=E6=89=A3=E5=87=8F=E5=88=B0=E8=B4=9F=E6=95=B0=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96Token=E7=BB=9F=E8=AE=A1=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Managers/AiGateWayManager.cs | 2 +- .../Managers/PremiumPackageManager.cs | 19 ++++++++----------- 2 files changed, 9 insertions(+), 12 deletions(-) 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