fix(billing): 修复计费数据处理逻辑并更新配置

- 在请求阶段将请求数据作为计费记录的基础字段存入数组
- 修改计费处理逻辑,使用请求阶段数据作为基础补充返回数据后进行费用计算
- 重试时使用相同的计费数据处理逻辑确保数据一致性
- 将计费结果直接替换数组第一个元素而非追加
- 更新数据库配置从 192.168.0.83 到 192.168.3.30
- 更新 Redis、Consul、Jaeger 和文件上传服务地址到新 IP
- 修改数据库端口从 15432 到 5432 并更新密码
This commit is contained in:
WangLiZhao
2026-07-01 18:03:09 +08:00
parent 2edbe54fdc
commit 62003c25a0
2 changed files with 29 additions and 5 deletions
+1
View File
@@ -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},
+28 -5
View File
@@ -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)
}