将散落在多个文件中的预扣费/结算/退款逻辑抽象为统一的 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 分派
| Name |
Last commit
|
Last Update |
|---|---|---|
| .. | ||
| channel | Loading commit data... | |
| common | Loading commit data... | |
| common_handler | Loading commit data... | |
| constant | Loading commit data... | |
| helper | Loading commit data... | |
| reasonmap | Loading commit data... | |
| audio_handler.go | Loading commit data... | |
| chat_completions_via_responses.go | Loading commit data... | |
| claude_handler.go | Loading commit data... | |
| compatible_handler.go | Loading commit data... | |
| embedding_handler.go | Loading commit data... | |
| gemini_handler.go | Loading commit data... | |
| image_handler.go | Loading commit data... | |
| mjproxy_handler.go | Loading commit data... | |
| relay_adaptor.go | Loading commit data... | |
| relay_task.go | Loading commit data... | |
| rerank_handler.go | Loading commit data... | |
| responses_handler.go | Loading commit data... | |
| websocket.go | Loading commit data... |