feat: 增加尊享包商品及折扣逻辑,完善VIP与尊享包相关接口和数据返回

- 新增尊享包商品类型,支持 5000W 和 10000W Tokens
- 增加尊享包折扣计算与折扣后价格获取方法
- PayService 新增获取商品列表接口,支持尊享包折扣展示
- PayManager 支持尊享包订单金额按折扣计算,并新增获取用户累计充值金额方法
- OpenApiService Anthropic接口增加VIP与尊享包用量校验
- AiGateWayManager 增加尊享包Token扣减逻辑
- AiAccountService 返回用户VIP状态、到期时间及尊享包Token统计信息
This commit is contained in:
ccnetcore
2025-10-12 20:07:58 +08:00
parent 4d09243efd
commit a9e8b2b01f
9 changed files with 360 additions and 50 deletions

View File

@@ -1,6 +1,7 @@
using System.Text.Json;
using Volo.Abp.Domain.Services;
using Volo.Abp.Users;
using Yi.Framework.AiHub.Domain.Entities;
using Yi.Framework.AiHub.Domain.Entities.Pay;
using Yi.Framework.AiHub.Domain.Shared.Enums;
using Yi.Framework.SqlSugarCore.Abstractions;
@@ -16,14 +17,18 @@ public class PayManager : DomainService
private readonly ISqlSugarRepository<PayNoticeRecordAggregateRoot, Guid> _payNoticeRepository;
private readonly ICurrentUser _currentUser;
private readonly ISqlSugarRepository<PayOrderAggregateRoot, Guid> _payOrderRepository;
private readonly ISqlSugarRepository<AiRechargeAggregateRoot, Guid> _rechargeRepository;
public PayManager(
ISqlSugarRepository<PayNoticeRecordAggregateRoot, Guid> payNoticeRepository,
ICurrentUser currentUser, ISqlSugarRepository<PayOrderAggregateRoot, Guid> payOrderRepository)
ICurrentUser currentUser,
ISqlSugarRepository<PayOrderAggregateRoot, Guid> payOrderRepository,
ISqlSugarRepository<AiRechargeAggregateRoot, Guid> rechargeRepository)
{
_payNoticeRepository = payNoticeRepository;
_currentUser = currentUser;
_payOrderRepository = payOrderRepository;
_rechargeRepository = rechargeRepository;
}
/// <summary>
@@ -39,6 +44,8 @@ public class PayManager : DomainService
throw new UserFriendlyException("用户未登录");
}
var userId = _currentUser.GetId();
// 如果是尊享包商品需要验证用户是否为VIP
if (goodsType.IsPremiumPackage())
{
@@ -53,13 +60,27 @@ public class PayManager : DomainService
// 获取商品信息
var goodsName = goodsType.GetDisplayName();
var totalAmount = goodsType.GetTotalAmount();
// 计算订单金额尊享包使用折扣价格VIP服务使用原价
decimal totalAmount;
if (goodsType.IsPremiumPackage())
{
// 获取用户累加充值金额
var totalRechargeAmount = await GetUserTotalRechargeAmountAsync(userId);
// 使用折扣后的价格
totalAmount = goodsType.GetDiscountedPrice(totalRechargeAmount);
}
else
{
// VIP服务使用原价
totalAmount = goodsType.GetTotalAmount();
}
// 创建订单实体
var payOrder = new PayOrderAggregateRoot
{
OutTradeNo = outTradeNo,
UserId = _currentUser.GetId(),
UserId = userId,
UserName = _currentUser.UserName ?? string.Empty,
TotalAmount = totalAmount,
GoodsName = goodsName,
@@ -145,4 +166,19 @@ public class PayManager : DomainService
}
return TradeStatusEnum.WAIT_TRADE;
}
/// <summary>
/// 获取用户累加充值金额
/// </summary>
/// <param name="userId">用户ID</param>
/// <returns>累加充值金额</returns>
public async Task<decimal> GetUserTotalRechargeAmountAsync(Guid userId)
{
var totalAmount = await _rechargeRepository
._DbQueryable
.Where(x => x.UserId == userId )
.SumAsync(x => x.RechargeAmount);
return totalAmount;
}
}