This commit is contained in:
2025-09-14 16:34:55 +08:00
parent a0fc9dc246
commit 6874f67c45
3 changed files with 20 additions and 9 deletions

View File

@@ -229,10 +229,12 @@ func (s *ApiApplicationServiceImpl) validateApiCall(ctx context.Context, cmd *co
return nil, err return nil, err
} }
// 6. 验证订阅状态 // 6. 验证订阅状态并获取订阅信息
if err := s.validateSubscriptionStatus(ctx, apiUser.UserId, product); err != nil { subscription, err := s.validateSubscriptionStatus(ctx, apiUser.UserId, product)
if err != nil {
return nil, err return nil, err
} }
result.SetSubscription(subscription)
// 7. 解密参数 // 7. 解密参数
requestParams, err := crypto.AesDecrypt(cmd.Data, apiUser.SecretKey) requestParams, err := crypto.AesDecrypt(cmd.Data, apiUser.SecretKey)
@@ -1119,8 +1121,8 @@ func (s *ApiApplicationServiceImpl) validateWalletStatus(ctx context.Context, us
return nil return nil
} }
// validateSubscriptionStatus 验证订阅状态 // validateSubscriptionStatus 验证订阅状态并返回订阅信息
func (s *ApiApplicationServiceImpl) validateSubscriptionStatus(ctx context.Context, userID string, product *product_entities.Product) error { func (s *ApiApplicationServiceImpl) validateSubscriptionStatus(ctx context.Context, userID string, product *product_entities.Product) (*product_entities.Subscription, error) {
// 1. 检查用户是否已订阅该产品 // 1. 检查用户是否已订阅该产品
subscription, err := s.subscriptionService.UserSubscribedProductByCode(ctx, userID, product.Code) subscription, err := s.subscriptionService.UserSubscribedProductByCode(ctx, userID, product.Code)
if err != nil { if err != nil {
@@ -1129,7 +1131,7 @@ func (s *ApiApplicationServiceImpl) validateSubscriptionStatus(ctx context.Conte
zap.String("user_id", userID), zap.String("user_id", userID),
zap.String("product_code", product.Code), zap.String("product_code", product.Code),
zap.Error(err)) zap.Error(err))
return ErrProductNotSubscribed return nil, ErrProductNotSubscribed
} }
// 2. 检查订阅是否有效(未删除) // 2. 检查订阅是否有效(未删除)
@@ -1138,16 +1140,17 @@ func (s *ApiApplicationServiceImpl) validateSubscriptionStatus(ctx context.Conte
zap.String("user_id", userID), zap.String("user_id", userID),
zap.String("subscription_id", subscription.ID), zap.String("subscription_id", subscription.ID),
zap.String("product_code", product.Code)) zap.String("product_code", product.Code))
return ErrSubscriptionExpired return nil, ErrSubscriptionExpired
} }
s.logger.Info("订阅状态验证通过", s.logger.Info("订阅状态验证通过",
zap.String("user_id", userID), zap.String("user_id", userID),
zap.String("subscription_id", subscription.ID), zap.String("subscription_id", subscription.ID),
zap.String("product_code", product.Code), zap.String("product_code", product.Code),
zap.String("subscription_price", subscription.Price.String()),
zap.Int64("api_used", subscription.APIUsed)) zap.Int64("api_used", subscription.APIUsed))
return nil return subscription, nil
} }
// batchGetCompanyNamesForApiCalls 批量获取企业名称映射用于API调用记录 // batchGetCompanyNamesForApiCalls 批量获取企业名称映射用于API调用记录

View File

@@ -22,6 +22,7 @@ type ApiCallValidationResult struct {
ApiCall *api_entities.ApiCall `json:"api_call"` ApiCall *api_entities.ApiCall `json:"api_call"`
RequestParams map[string]interface{} `json:"request_params"` RequestParams map[string]interface{} `json:"request_params"`
Product *product_entities.Product `json:"product"` Product *product_entities.Product `json:"product"`
Subscription *product_entities.Subscription `json:"subscription"`
} }
// GetUserID 获取用户ID // GetUserID 获取用户ID
@@ -76,8 +77,8 @@ func (r *ApiCallValidationResult) SetApiUser(apiUser *api_entities.ApiUser) {
// SetProduct 设置产品 // SetProduct 设置产品
func (r *ApiCallValidationResult) SetProduct(product *product_entities.Product) { func (r *ApiCallValidationResult) SetProduct(product *product_entities.Product) {
r.ProductID = product.ID r.ProductID = product.ID
r.Amount = product.Price
r.Product = product r.Product = product
// 注意这里不设置Amount应该通过SetSubscription来设置实际的扣费金额
} }
// SetApiCall 设置API调用 // SetApiCall 设置API调用
@@ -94,3 +95,10 @@ func (r *ApiCallValidationResult) SetRequestParams(params map[string]interface{}
func (r *ApiCallValidationResult) SetContractCode(code string) { func (r *ApiCallValidationResult) SetContractCode(code string) {
r.ContractCode = code r.ContractCode = code
} }
// SetSubscription 设置订阅信息(包含实际扣费金额)
func (r *ApiCallValidationResult) SetSubscription(subscription *product_entities.Subscription) {
r.SubscriptionID = subscription.ID
r.Amount = subscription.Price // 使用订阅价格作为扣费金额
r.Subscription = subscription
}