From 6874f67c4545c63f782b4e507ce5bd9e27ac7d9c Mon Sep 17 00:00:00 2001 From: liangzai <2440983361@qq.com> Date: Sun, 14 Sep 2025 16:34:55 +0800 Subject: [PATCH] fix --- .../application/api/api_application_service.go | 17 ++++++++++------- .../application/api/dto/api_call_validation.go | 10 +++++++++- .../statistics_application_service_impl.go | 2 +- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/internal/application/api/api_application_service.go b/internal/application/api/api_application_service.go index 916fdf0..5c99716 100644 --- a/internal/application/api/api_application_service.go +++ b/internal/application/api/api_application_service.go @@ -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调用记录) diff --git a/internal/application/api/dto/api_call_validation.go b/internal/application/api/dto/api_call_validation.go index 0df6cf2..840dd70 100644 --- a/internal/application/api/dto/api_call_validation.go +++ b/internal/application/api/dto/api_call_validation.go @@ -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 } \ No newline at end of file diff --git a/internal/application/statistics/statistics_application_service_impl.go b/internal/application/statistics/statistics_application_service_impl.go index 6137e58..4df66d3 100644 --- a/internal/application/statistics/statistics_application_service_impl.go +++ b/internal/application/statistics/statistics_application_service_impl.go @@ -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 }