Back to blog

积分系统:FIFO 消耗与过期

Nov 3, 2026VrmMate Team

积分比金额更琐碎,因为它还要处理过期、撤销和并发。

积分是 usage-based 计费的核心,逻辑比金额更琐碎,因为它要处理过期、撤销和并发。

消耗顺序

按 FIFO 消耗最早到期的批次,避免用户余额里躺着永远用不到的旧积分。每次扣减都要在 atomic 里完成,并有 remaining_credits >= 0 的后置 guard。

撤销怎么做

任务失败时调用 planDeductForRefund 生成回补步骤,和任务状态更新放进同一个 atomic,保证不会出现退了积分但任务还挂着,或反之。

自动发放

注册赠送走幂等键,例如 grant_<orderNo> 或 grant_signup_<userId>,防止重试重复发放。

可观测性

后台要能看到每一笔的余额前后值、来源和过期时间。用户侧则要解释清楚为什么扣了,否则客服成本会吞噬利润。