Skip to content

feat(quota): 把预付费冻结/扣减接到生成任务调度 #350

Description

@xiaocheny214

背景

积分领域已经具备完整的预付费账本能力,但生成任务提交/执行路径还没有调用它们。结果是:用户注册会拿到积分,账号中心也能查余额和流水,真正跑图/跑动作却不会冻结或扣减。

现状(已实现)

  • 注册时创建 windup_credit_account 并写入 REGISTER_GIFT 流水(UserService._create_credit_account
  • QuotaService 已实现预付费三步:reserve_credit(冻结)→ capture_credit(实扣,差额退回)→ release_credit(失败解冻)
  • 定价在 QUOTA_GENERATE_IMAGE_COST / QUOTA_GENERATE_ACTION_COST
  • GET /quota/balanceGET /quota/transactions 与前端账号中心已接上

缺口

AiGenerationService.generate_character_* 只建 PENDING 任务;POST /generation/image|action 只在 commit 后入队;ActionTaskExecutor / ImageTaskExecutor 只把任务打到 COMPLETED / FAILED。整条调度链没有任何 quota 调用。

后付费(Agent token)与邀请码本 issue 不包含(接口里已标明暂不实现)。

建议做法

同一事务内、拿到 task.id 后冻结,ref_id=task:{id}

  1. 提交create_task 后按任务类型 reserve_credit;积分不足则整单回滚,不入队
  2. 成功:executor 写结果时 capture_credit(MVP 实扣 = 冻结额)
  3. 失败:executor 标 FAILEDrelease_credit

验收

  • 积分不足:HTTP 业务错误,库中无任务、无冻结
  • 提交成功:余额减少、冻结增加,流水 FROZEN
  • 任务成功:冻结清零、total_spent 增加,流水 CAPTURED
  • 任务失败:冻结退回可用余额,流水 REFUND
  • 现有生成 API / 编排测试在预置积分账户后仍通过

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions