diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/Dtos/AiUserRoleMenuDto.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/Dtos/AiUserRoleMenuDto.cs index fa054cca..e096d523 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/Dtos/AiUserRoleMenuDto.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/Dtos/AiUserRoleMenuDto.cs @@ -18,19 +18,4 @@ public class AiUserRoleMenuDto:UserRoleMenuDto /// VIP到期时间 /// public DateTime? VipExpireTime { get; set; } - - /// - /// 尊享包总Token数 - /// - public long PremiumTotalTokens { get; set; } - - /// - /// 尊享包已使用Token数 - /// - public long PremiumUsedTokens { get; set; } - - /// - /// 尊享包剩余Token数 - /// - public long PremiumRemainingTokens { get; set; } } \ No newline at end of file diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/Dtos/UsageStatistics/PremiumTokenUsageDto.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/Dtos/UsageStatistics/PremiumTokenUsageDto.cs new file mode 100644 index 00000000..c0467b0f --- /dev/null +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/Dtos/UsageStatistics/PremiumTokenUsageDto.cs @@ -0,0 +1,22 @@ +namespace Yi.Framework.AiHub.Application.Contracts.Dtos.UsageStatistics; + +/// +/// 尊享服务Token用量统计DTO +/// +public class PremiumTokenUsageDto +{ + /// + /// 总Token数 + /// + public long PremiumTotalTokens { get; set; } + + /// + /// 已使用Token数 + /// + public long PremiumUsedTokens { get; set; } + + /// + /// 剩余Token数 + /// + public long PremiumRemainingTokens { get; set; } +} diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/IServices/IUsageStatisticsService.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/IServices/IUsageStatisticsService.cs index 625b1cd2..add4d348 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/IServices/IUsageStatisticsService.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/IServices/IUsageStatisticsService.cs @@ -18,4 +18,10 @@ public interface IUsageStatisticsService /// /// 模型Token使用量列表 Task> GetModelTokenUsageAsync(); + + /// + /// 获取当前用户尊享服务Token用量统计 + /// + /// 尊享服务Token用量统计 + Task GetPremiumTokenUsageAsync(); } \ No newline at end of file diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/AiAccountService.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/AiAccountService.cs index c1a15efc..30b453ff 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/AiAccountService.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/AiAccountService.cs @@ -9,7 +9,6 @@ using Yi.Framework.Rbac.Application.Contracts.IServices; using Yi.Framework.Rbac.Domain.Shared.Dtos; using Yi.Framework.SqlSugarCore.Abstractions; using Yi.Framework.AiHub.Domain.Extensions; -using Yi.Framework.AiHub.Domain.Shared.Consts; namespace Yi.Framework.AiHub.Application.Services; @@ -18,18 +17,15 @@ public class AiAccountService : ApplicationService private IAccountService _accountService; private ISqlSugarRepository _userRepository; private ISqlSugarRepository _rechargeRepository; - private ISqlSugarRepository _premiumPackageRepository; public AiAccountService( IAccountService accountService, ISqlSugarRepository userRepository, - ISqlSugarRepository rechargeRepository, - ISqlSugarRepository premiumPackageRepository) + ISqlSugarRepository rechargeRepository) { _accountService = accountService; _userRepository = userRepository; _rechargeRepository = rechargeRepository; - _premiumPackageRepository = premiumPackageRepository; } /// @@ -74,23 +70,6 @@ public class AiAccountService : ApplicationService } } - // 获取尊享包Token信息 - var premiumPackages = await _premiumPackageRepository._DbQueryable - .Where(x => x.UserId == userId && x.IsActive) - .ToListAsync(); - - if (premiumPackages.Any()) - { - // 过滤掉已过期的包 - var validPackages = premiumPackages - .Where(p => p.IsAvailable()) - .ToList(); - - output.PremiumTotalTokens = validPackages.Sum(x => x.TotalTokens); - output.PremiumUsedTokens = validPackages.Sum(x => x.UsedTokens); - output.PremiumRemainingTokens = validPackages.Sum(x => x.RemainingTokens); - } - return output; } } \ No newline at end of file diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/UsageStatisticsService.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/UsageStatisticsService.cs index b96950bf..79287379 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/UsageStatisticsService.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/UsageStatisticsService.cs @@ -6,6 +6,7 @@ using Yi.Framework.AiHub.Application.Contracts.Dtos.UsageStatistics; using Yi.Framework.AiHub.Application.Contracts.IServices; using Yi.Framework.AiHub.Domain.Entities; using Yi.Framework.AiHub.Domain.Entities.Chat; +using Yi.Framework.AiHub.Domain.Extensions; using Yi.Framework.SqlSugarCore.Abstractions; namespace Yi.Framework.AiHub.Application.Services; @@ -18,13 +19,16 @@ public class UsageStatisticsService : ApplicationService, IUsageStatisticsServic { private readonly ISqlSugarRepository _messageRepository; private readonly ISqlSugarRepository _usageStatisticsRepository; + private readonly ISqlSugarRepository _premiumPackageRepository; public UsageStatisticsService( ISqlSugarRepository messageRepository, - ISqlSugarRepository usageStatisticsRepository) + ISqlSugarRepository usageStatisticsRepository, + ISqlSugarRepository premiumPackageRepository) { _messageRepository = messageRepository; _usageStatisticsRepository = usageStatisticsRepository; + _premiumPackageRepository = premiumPackageRepository; } /// @@ -102,4 +106,34 @@ public class UsageStatisticsService : ApplicationService, IUsageStatisticsServic return result; } + + /// + /// 获取当前用户尊享服务Token用量统计 + /// + /// 尊享服务Token用量统计 + public async Task GetPremiumTokenUsageAsync() + { + var userId = CurrentUser.GetId(); + + // 获取尊享包Token信息 + var premiumPackages = await _premiumPackageRepository._DbQueryable + .Where(x => x.UserId == userId && x.IsActive) + .ToListAsync(); + + var result = new PremiumTokenUsageDto(); + + if (premiumPackages.Any()) + { + // 过滤掉已过期的包 + var validPackages = premiumPackages + .Where(p => p.IsAvailable()) + .ToList(); + + result.PremiumTotalTokens = validPackages.Sum(x => x.TotalTokens); + result.PremiumUsedTokens = validPackages.Sum(x => x.UsedTokens); + result.PremiumRemainingTokens = validPackages.Sum(x => x.RemainingTokens); + } + + return result; + } } \ No newline at end of file