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