积分系统:FIFO 消耗与过期
Nov 3, 2026VrmMate Team
积分比金额更琐碎,因为它还要处理过期、撤销和并发。
积分是 usage-based 计费的核心,逻辑比金额更琐碎,因为它要处理过期、撤销和并发。
消耗顺序
按 FIFO 消耗最早到期的批次,避免用户余额里躺着永远用不到的旧积分。每次扣减都要在 atomic 里完成,并有 remaining_credits >= 0 的后置 guard。
撤销怎么做
任务失败时调用 planDeductForRefund 生成回补步骤,和任务状态更新放进同一个 atomic,保证不会出现退了积分但任务还挂着,或反之。
自动发放
注册赠送走幂等键,例如 grant_<orderNo> 或 grant_signup_<userId>,防止重试重复发放。
可观测性
后台要能看到每一笔的余额前后值、来源和过期时间。用户侧则要解释清楚为什么扣了,否则客服成本会吞噬利润。