背景
积分领域已经具备完整的预付费账本能力,但生成任务提交/执行路径还没有调用它们。结果是:用户注册会拿到积分,账号中心也能查余额和流水,真正跑图/跑动作却不会冻结或扣减。
现状(已实现)
- 注册时创建
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/balance、GET /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}:
- 提交:
create_task 后按任务类型 reserve_credit;积分不足则整单回滚,不入队
- 成功:executor 写结果时
capture_credit(MVP 实扣 = 冻结额)
- 失败:executor 标
FAILED 时 release_credit
验收
- 积分不足:HTTP 业务错误,库中无任务、无冻结
- 提交成功:余额减少、冻结增加,流水
FROZEN
- 任务成功:冻结清零、
total_spent 增加,流水 CAPTURED
- 任务失败:冻结退回可用余额,流水
REFUND
- 现有生成 API / 编排测试在预置积分账户后仍通过
背景
积分领域已经具备完整的预付费账本能力,但生成任务提交/执行路径还没有调用它们。结果是:用户注册会拿到积分,账号中心也能查余额和流水,真正跑图/跑动作却不会冻结或扣减。
现状(已实现)
windup_credit_account并写入REGISTER_GIFT流水(UserService._create_credit_account)QuotaService已实现预付费三步:reserve_credit(冻结)→capture_credit(实扣,差额退回)→release_credit(失败解冻)QUOTA_GENERATE_IMAGE_COST/QUOTA_GENERATE_ACTION_COSTGET /quota/balance、GET /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}:create_task后按任务类型reserve_credit;积分不足则整单回滚,不入队capture_credit(MVP 实扣 = 冻结额)FAILED时release_credit验收
FROZENtotal_spent增加,流水CAPTUREDREFUND