feat: 增加尊享包商品及折扣逻辑,完善VIP与尊享包相关接口和数据返回
- 新增尊享包商品类型,支持 5000W 和 10000W Tokens - 增加尊享包折扣计算与折扣后价格获取方法 - PayService 新增获取商品列表接口,支持尊享包折扣展示 - PayManager 支持尊享包订单金额按折扣计算,并新增获取用户累计充值金额方法 - OpenApiService Anthropic接口增加VIP与尊享包用量校验 - AiGateWayManager 增加尊享包Token扣减逻辑 - AiAccountService 返回用户VIP状态、到期时间及尊享包Token统计信息
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user