perf: 优化订单创建逻辑

This commit is contained in:
chenchun
2025-12-19 11:53:17 +08:00
parent 2fa42cd8a3
commit 2cf06a5677
2 changed files with 29 additions and 25 deletions

View File

@@ -122,10 +122,13 @@ public class PayService : ApplicationService, IPayService
// 5. 根据商品类型进行不同的处理
if (order.GoodsType.IsPremiumPackage())
{
var tokenAmount = order.GoodsType.GetTokenAmount();
var packageName = order.GoodsType.GetDisplayName();
// 处理尊享包商品:创建尊享包记录
await _premiumPackageManager.CreatePremiumPackageAsync(
order.UserId,
order.GoodsType,
tokenAmount,
packageName,
order.TotalAmount,
expireMonths: null // 尊享包不设置过期时间,或者可以根据需求设置
);

View File

@@ -14,6 +14,7 @@ public class PremiumPackageManager : DomainService
private readonly ISqlSugarRepository<PremiumPackageAggregateRoot, Guid> _premiumPackageRepository;
private readonly ILogger<PremiumPackageManager> _logger;
private readonly ISqlSugarRepository<AiRechargeAggregateRoot> _rechargeRepository;
public PremiumPackageManager(
ISqlSugarRepository<PremiumPackageAggregateRoot, Guid> premiumPackageRepository,
ILogger<PremiumPackageManager> logger, ISqlSugarRepository<AiRechargeAggregateRoot> rechargeRepository)
@@ -27,24 +28,20 @@ public class PremiumPackageManager : DomainService
/// 为用户创建尊享包
/// </summary>
/// <param name="userId">用户ID</param>
/// <param name="goodsType">商品类型</param>
/// <param name="packageName"></param>
/// <param name="totalAmount">支付金额</param>
/// <param name="expireMonths">过期月数0或null表示永久</param>
/// <param name="tokenAmount"></param>
/// <param name="isCreateRechargeRecord">是否创建订单,如果只购买尊享包,才需要单独创建订单,如果和会员组合一起购买,只需要创建会员套餐订单即可</param>
/// <returns></returns>
public async Task<PremiumPackageAggregateRoot> CreatePremiumPackageAsync(
Guid userId,
GoodsTypeEnum goodsType,
long tokenAmount,
string packageName,
decimal totalAmount,
int? expireMonths = null)
int? expireMonths = null,
bool isCreateRechargeRecord = true)
{
if (!goodsType.IsPremiumPackage())
{
throw new UserFriendlyException($"商品类型 {goodsType} 不是尊享包商品");
}
var tokenAmount = goodsType.GetTokenAmount();
var packageName = goodsType.GetDisplayName();
var premiumPackage = new PremiumPackageAggregateRoot(userId, tokenAmount, packageName)
{
PurchaseAmount = totalAmount
@@ -58,6 +55,8 @@ public class PremiumPackageManager : DomainService
await _premiumPackageRepository.InsertAsync(premiumPackage);
if (isCreateRechargeRecord)
{
// 创建充值记录
var rechargeRecord = new AiRechargeAggregateRoot
{
@@ -72,6 +71,8 @@ public class PremiumPackageManager : DomainService
// 保存充值记录到数据库
await _rechargeRepository.InsertAsync(rechargeRecord);
}
_logger.LogInformation(
$"用户 {userId} 购买尊享包成功: {packageName}, Token数量: {tokenAmount}, 金额: {totalAmount}");