CaIon
0c0ccf510b
refactor: 抽象统一计费会话 BillingSession
将散落在多个文件中的预扣费/结算/退款逻辑抽象为统一的 BillingSession 生命周期管理:
- 新增 BillingSettler 接口 (relay/common/billing.go) 避免循环引用
- 新增 FundingSource 接口 + WalletFunding / SubscriptionFunding 实现 (service/funding_source.go)
- 新增 BillingSession 封装预扣/结算/退款原子操作 (service/billing_session.go)
- 新增 SettleBilling 统一结算辅助函数,替换各 handler 中的 quotaDelta 模式
- 重写 PreConsumeBilling 为 BillingSession 工厂入口
- controller/relay.go 退款守卫改用 BillingSession.Refund()
修复的 Bug:
- 令牌额度泄漏:PreConsumeTokenQuota 成功但 DecreaseUserQuota 失败时未回滚
- 订阅退款遗漏:FinalPreConsumedQuota=0 但 SubscriptionPreConsumed>0 时跳过退款
- 订阅多扣费:subConsume 强制为 1 但 FinalPreConsumedQuota 不同步
- 退款路径不统一:钱包/订阅退款逻辑现统一由 FundingSource.Refund 分派
2026-02-06 23:14:25 +08:00
..
2026-02-05 00:12:16 +08:00
2025-10-11 15:30:09 +08:00
2025-06-07 12:26:23 +08:00
2026-02-06 23:14:25 +08:00
2026-02-06 23:14:25 +08:00
2026-02-02 14:37:31 +08:00
2025-12-13 18:09:10 +08:00
2026-01-12 18:47:45 +08:00
2026-01-14 22:29:43 +08:00
2026-01-14 22:29:43 +08:00
2026-01-14 22:29:43 +08:00
2026-01-14 22:29:43 +08:00
2026-01-25 15:31:23 +08:00
2025-10-11 15:30:09 +08:00
2025-10-11 15:30:09 +08:00
2025-12-26 13:58:44 +08:00
2026-02-04 18:23:17 +08:00
2026-02-04 18:23:17 +08:00
2026-02-06 23:14:25 +08:00
2025-10-30 21:16:42 +08:00
2026-01-15 14:43:53 +08:00
2025-12-30 17:52:57 +08:00
2025-11-21 18:17:01 +08:00
2026-02-03 17:40:43 +08:00
2025-10-11 15:30:09 +08:00
2025-10-11 15:30:09 +08:00
2026-01-11 21:38:07 +08:00
2026-01-26 19:57:41 +08:00
2026-02-06 23:14:25 +08:00
2025-10-11 15:30:09 +08:00
2025-08-15 16:54:26 +08:00
2026-02-03 17:40:43 +08:00
2025-10-11 15:30:09 +08:00
2026-02-04 18:23:17 +08:00
2025-12-02 21:38:58 +08:00
2025-12-02 21:34:39 +08:00
2025-12-02 21:34:39 +08:00
2025-10-11 15:30:09 +08:00
2026-01-26 20:20:30 +08:00
2025-10-11 15:30:09 +08:00