- 新增尊享包商品类型,支持 5000W 和 10000W Tokens - 增加尊享包折扣计算与折扣后价格获取方法 - PayService 新增获取商品列表接口,支持尊享包折扣展示 - PayManager 支持尊享包订单金额按折扣计算,并新增获取用户累计充值金额方法 - OpenApiService Anthropic接口增加VIP与尊享包用量校验 - AiGateWayManager 增加尊享包Token扣减逻辑 - AiAccountService 返回用户VIP状态、到期时间及尊享包Token统计信息
96 lines
3.4 KiB
C#
96 lines
3.4 KiB
C#
using Mapster;
|
||
using Microsoft.AspNetCore.Authorization;
|
||
using Microsoft.AspNetCore.Mvc;
|
||
using Volo.Abp.Application.Services;
|
||
using Volo.Abp.Users;
|
||
using Yi.Framework.AiHub.Application.Contracts.Dtos;
|
||
using Yi.Framework.AiHub.Domain.Entities;
|
||
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;
|
||
|
||
public class AiAccountService : ApplicationService
|
||
{
|
||
private IAccountService _accountService;
|
||
private ISqlSugarRepository<AiUserExtraInfoEntity> _userRepository;
|
||
private ISqlSugarRepository<AiRechargeAggregateRoot> _rechargeRepository;
|
||
private ISqlSugarRepository<PremiumPackageAggregateRoot> _premiumPackageRepository;
|
||
|
||
public AiAccountService(
|
||
IAccountService accountService,
|
||
ISqlSugarRepository<AiUserExtraInfoEntity> userRepository,
|
||
ISqlSugarRepository<AiRechargeAggregateRoot> rechargeRepository,
|
||
ISqlSugarRepository<PremiumPackageAggregateRoot> premiumPackageRepository)
|
||
{
|
||
_accountService = accountService;
|
||
_userRepository = userRepository;
|
||
_rechargeRepository = rechargeRepository;
|
||
_premiumPackageRepository = premiumPackageRepository;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取ai用户信息
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[Authorize]
|
||
[HttpGet("account/ai")]
|
||
public async Task<AiUserRoleMenuDto> GetAsync()
|
||
{
|
||
var userId = CurrentUser.GetId();
|
||
var userAccount = await _accountService.GetAsync(null, null, userId: CurrentUser.GetId());
|
||
var output = userAccount.Adapt<AiUserRoleMenuDto>();
|
||
|
||
// 是否绑定服务号
|
||
output.IsBindFuwuhao = await _userRepository.IsAnyAsync(x => userId == x.UserId);
|
||
|
||
// 是否为VIP用户
|
||
output.IsVip = CurrentUser.IsAiVip();
|
||
|
||
// 获取VIP到期时间
|
||
if (output.IsVip)
|
||
{
|
||
var recharges = await _rechargeRepository._DbQueryable
|
||
.Where(x => x.UserId == userId)
|
||
.ToListAsync();
|
||
|
||
if (recharges.Any())
|
||
{
|
||
// 如果有任何一个充值记录的过期时间为null,说明是永久VIP
|
||
if (recharges.Any(x => !x.ExpireDateTime.HasValue))
|
||
{
|
||
output.VipExpireTime = null; // 永久VIP
|
||
}
|
||
else
|
||
{
|
||
// 取最大的过期时间
|
||
output.VipExpireTime = recharges
|
||
.Where(x => x.ExpireDateTime.HasValue)
|
||
.Max(x => x.ExpireDateTime);
|
||
}
|
||
}
|
||
}
|
||
|
||
// 获取尊享包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;
|
||
}
|
||
} |