From 62003c25a02c0addc1846fdc97610e9f8fb2c1a1 Mon Sep 17 00:00:00 2001 From: WangLiZhao <1838393649@qq.com> Date: Wed, 1 Jul 2026 18:03:09 +0800 Subject: [PATCH] =?UTF-8?q?fix(billing):=20=E4=BF=AE=E5=A4=8D=E8=AE=A1?= =?UTF-8?q?=E8=B4=B9=E6=95=B0=E6=8D=AE=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E5=B9=B6=E6=9B=B4=E6=96=B0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在请求阶段将请求数据作为计费记录的基础字段存入数组 - 修改计费处理逻辑,使用请求阶段数据作为基础补充返回数据后进行费用计算 - 重试时使用相同的计费数据处理逻辑确保数据一致性 - 将计费结果直接替换数组第一个元素而非追加 - 更新数据库配置从 192.168.0.83 到 192.168.3.30 - 更新 Redis、Consul、Jaeger 和文件上传服务地址到新 IP - 修改数据库端口从 15432 到 5432 并更新密码 --- service/task/task_service.go | 1 + service/task/worker.go | 33 ++++++++++++++++++++++++++++----- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/service/task/task_service.go b/service/task/task_service.go index 3d83461..9b89032 100644 --- a/service/task/task_service.go +++ b/service/task/task_service.go @@ -110,6 +110,7 @@ func (s *taskService) Create(ctx context.Context, req *dto.CreateTaskReq) (res * // 6) 模型计费 if len(model.BillingConfig) > 0 { requestData := util.ExtractRequestBilling(ctx, model.BillingConfig, req.RequestPayload) + // 请求数据作为计费记录的基础字段,先存入数组 task.BillingData = append(task.BillingData, requestData) _, _ = dao.ModelGatewayTask.Update(ctx, &entity.ModelGatewayTask{ SQLBaseDO: beans.SQLBaseDO{Id: task.Id}, diff --git a/service/task/worker.go b/service/task/worker.go index 34903e1..580391c 100644 --- a/service/task/worker.go +++ b/service/task/worker.go @@ -93,14 +93,26 @@ func (w *asyncWorker) handleOne(ctx context.Context, task *entity.ModelGatewayTa w.failTask(ctx, task, startTime, err.Error()) return } + // 计费处理 - if len(model.BillingConfig) > 0 { + if len(model.BillingConfig) > 0 && len(task.BillingData) > 0 { + // 取请求阶段数据作为基础 + billingInput := make(map[string]any) + for k, v := range task.BillingData[0] { + billingInput[k] = v + } + // 补充返回数据 responseData := util.ExtractResponseBilling(model.BillingConfig, mapped) - billingResult := util.CalculateBilling(model.BillingConfig, responseData) + for k, v := range responseData { + billingInput[k] = v + } + // 计算费用,替换数组第一个元素 + billingResult := util.CalculateBilling(model.BillingConfig, billingInput) if billingResult != nil { - task.BillingData = append(task.BillingData, billingResult) + task.BillingData[0] = billingResult } } + task.ExpendTokens = gconv.Int64(mapped[entity.TotalTokens]) if _, err = dao.ModelGatewayTask.Update(ctx, task); err != nil { g.Log().Errorf(ctx, "[handleOne] 更新DB失败 taskId=%s err=%v", task.TaskID, err) @@ -279,10 +291,21 @@ func (w *asyncWorker) parseAndRetry(ctx context.Context, body map[string]any, ta continue } - // 记录重试计费 + // parseAndRetry 重试时 if len(model.BillingConfig) > 0 { + requestData := task.BillingData[0] // 请求数据从第一个元素取 + + retryData := make(map[string]any) + for k, v := range requestData { + retryData[k] = v + } + responseData := util.ExtractResponseBilling(model.BillingConfig, mapped) - billingResult := util.CalculateBilling(model.BillingConfig, responseData) + for k, v := range responseData { + retryData[k] = v + } + + billingResult := util.CalculateBilling(model.BillingConfig, retryData) if billingResult != nil { task.BillingData = append(task.BillingData, billingResult) }