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
..
2025-12-13 16:43:57 +08:00
2026-02-02 14:37:31 +08:00
2025-10-11 15:30:09 +08:00
2026-01-26 20:20:16 +08:00
2026-02-04 18:23:17 +08:00
2026-01-02 23:00:33 +08:00
2026-02-04 18:23:17 +08:00
2026-02-04 18:23:17 +08:00
2026-02-04 18:23:17 +08:00
2026-02-05 21:18:43 +08:00
2026-01-03 12:37:50 +08:00
2025-10-30 21:16:42 +08:00
2025-03-15 19:10:12 +08:00
2026-02-06 21:26:26 +08:00
2025-10-11 15:30:09 +08:00
2026-02-05 21:18:43 +08:00
2025-10-11 15:30:09 +08:00
2025-10-11 15:30:09 +08:00
2026-02-04 18:23:17 +08:00
2025-12-13 16:43:57 +08:00
2026-02-05 21:18:43 +08:00
2026-01-14 14:34:12 +08:00
2025-10-11 15:30:09 +08:00
2026-02-04 21:26:07 +08:00
2025-12-13 16:43:38 +08:00
2025-10-11 15:30:09 +08:00
2025-10-28 23:25:43 +08:00
2025-10-11 15:30:09 +08:00
2026-02-04 18:23:17 +08:00
2026-02-05 00:09:32 +08:00
2026-02-06 23:14:25 +08:00
2026-02-06 21:26:26 +08:00
2025-10-11 15:30:09 +08:00
2026-02-03 17:40:43 +08:00
2026-02-05 01:34:04 +08:00
2026-02-03 17:40:43 +08:00
2026-02-03 18:58:28 +08:00
2025-07-21 21:38:53 +08:00
2025-12-15 18:15:35 +08:00
2025-12-16 17:00:19 +08:00
2025-10-11 15:30:09 +08:00
2026-02-06 18:01:11 +08:00
2026-02-03 17:40:43 +08:00
2026-02-03 17:40:43 +08:00
2026-02-03 23:37:12 +08:00
2025-10-11 15:30:09 +08:00
2025-10-11 15:30:09 +08:00
2025-10-11 15:30:09 +08:00
2026-02-05 00:16:17 +08:00
2025-10-11 15:30:09 +08:00
2025-12-09 11:15:27 +08:00
2025-12-09 11:15:27 +08:00
2025-10-11 15:30:09 +08:00