From d564f4eb1b77ade57625d4ccfd0df51c1518e8ec Mon Sep 17 00:00:00 2001 From: liangzai <2440983361@qq.com> Date: Sat, 25 Apr 2026 20:44:34 +0800 Subject: [PATCH] f --- .../task/handlers/api_task_handler.go | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/internal/infrastructure/task/handlers/api_task_handler.go b/internal/infrastructure/task/handlers/api_task_handler.go index ebb22c2..cfe9997 100644 --- a/internal/infrastructure/task/handlers/api_task_handler.go +++ b/internal/infrastructure/task/handlers/api_task_handler.go @@ -6,9 +6,9 @@ import ( "time" "github.com/hibiken/asynq" - "github.com/shopspring/decimal" "go.uber.org/zap" + api_commands "tyapi-server/internal/application/api/commands" "tyapi-server/internal/application/api" finance_services "tyapi-server/internal/domains/finance/services" product_services "tyapi-server/internal/domains/product/services" @@ -84,25 +84,23 @@ func (h *ApiTaskHandler) HandleDeduction(ctx context.Context, t *asynq.Task) err zap.String("amount", payload.Amount), zap.String("transaction_id", payload.TransactionID)) - // 调用钱包服务进行扣款 - if h.walletService != nil { - amount, err := decimal.NewFromString(payload.Amount) - if err != nil { - h.logger.Error("金额格式错误", zap.Error(err)) - h.updateTaskStatus(ctx, t, "failed", "金额格式错误") - return err - } - - if err := h.walletService.Deduct(ctx, payload.UserID, amount, payload.ApiCallID, payload.TransactionID, payload.ProductID); err != nil { - h.logger.Error("扣款处理失败", zap.Error(err)) - h.updateTaskStatus(ctx, t, "failed", "扣款处理失败: "+err.Error()) - return err - } - } else { - h.logger.Warn("钱包服务未初始化,跳过扣款", zap.String("user_id", payload.UserID)) - h.updateTaskStatus(ctx, t, "failed", "钱包服务未初始化") + // 统一走应用服务扣费链路(额度优先,钱包兜底) + if h.apiApplicationService == nil { + h.logger.Warn("API应用服务未初始化,无法处理扣款", zap.String("user_id", payload.UserID)) + h.updateTaskStatus(ctx, t, "failed", "API应用服务未初始化") return nil } + if err := h.apiApplicationService.ProcessDeduction(ctx, &api_commands.ProcessDeductionCommand{ + UserID: payload.UserID, + Amount: payload.Amount, + ApiCallID: payload.ApiCallID, + TransactionID: payload.TransactionID, + ProductID: payload.ProductID, + }); err != nil { + h.logger.Error("扣款处理失败", zap.Error(err)) + h.updateTaskStatus(ctx, t, "failed", "扣款处理失败: "+err.Error()) + return err + } // 更新任务状态为成功 h.updateTaskStatus(ctx, t, "completed", "")