This commit is contained in:
2026-04-25 11:59:10 +08:00
parent e246271a24
commit ba463ae38d
33 changed files with 1600 additions and 112 deletions

View File

@@ -261,18 +261,18 @@ func (s *ApiApplicationServiceImpl) validateApiCall(ctx context.Context, cmd *co
zap.Strings("whiteListIPs", whiteListIPs))
}
// 5. 验证钱包状态
if err := s.validateWalletStatus(ctx, apiUser.UserId, product); err != nil {
return nil, err
}
// 6. 验证订阅状态并获取订阅信息
// 5. 验证订阅(与扣费金额一致,便于余额预检使用订阅价)
subscription, err := s.validateSubscriptionStatus(ctx, apiUser.UserId, product)
if err != nil {
return nil, err
}
result.SetSubscription(subscription)
// 6. 验证钱包状态(有订阅时按订阅价与目录价取较大者预检,避免代配价高于目录价时误判余额不足)
if err := s.validateWalletStatus(ctx, apiUser.UserId, product, subscription); err != nil {
return nil, err
}
// 7. 解密参数
requestParams, err := crypto.AesDecrypt(cmd.Data, apiUser.SecretKey)
if err != nil {
@@ -1201,7 +1201,7 @@ func (s *ApiApplicationServiceImpl) ProcessCompensation(ctx context.Context, cmd
}
// validateWalletStatus 验证钱包状态
func (s *ApiApplicationServiceImpl) validateWalletStatus(ctx context.Context, userID string, product *product_entities.Product) error {
func (s *ApiApplicationServiceImpl) validateWalletStatus(ctx context.Context, userID string, product *product_entities.Product, subscription *product_entities.Subscription) error {
// 1. 获取用户钱包信息
wallet, err := s.walletService.LoadWalletByUserId(ctx, userID)
if err != nil {
@@ -1219,8 +1219,13 @@ func (s *ApiApplicationServiceImpl) validateWalletStatus(ctx context.Context, us
return ErrFrozenAccount
}
// 3. 检查钱包余额是否充足
// 3. 检查钱包余额是否充足(有订阅时与扣费金额对齐:取目录价与订阅价较大者)
requiredAmount := product.Price
if subscription != nil {
if subscription.Price.GreaterThan(requiredAmount) {
requiredAmount = subscription.Price
}
}
if wallet.Balance.LessThan(requiredAmount) {
s.logger.Error("钱包余额不足",
zap.String("user_id", userID),