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

View File

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

View File

@@ -2372,7 +2372,7 @@ func (s *StatisticsApplicationServiceImpl) AdminGetConsumptionDomainStatistics(c
defaultEndDate := time.Now()
defaultStartDate := defaultEndDate.AddDate(0, 0, -7)
consumptionTrend, err = s.walletTransactionRepo.GetSystemDailyStats(ctx, defaultStartDate, defaultEndDate)
if err != nil {
if err != nil {
s.logger.Error("获取消费每日趋势失败", zap.Error(err))
return nil, err
}