feat: add billing pricing rules
This commit is contained in:
+29
@@ -430,3 +430,32 @@
|
||||
- `UserWallet` / `ApiKey` 放在 `apps.users`,`PointsLedger` / `CallRecord` 放在 `apps.billing`;T-201 只建数据结构,不实现扣点服务、计费规则、充值订单或 API 鉴权。
|
||||
- `PointsLedger.ref_order_id` 在 RechargeOrder 模型落地前先保留为索引化数值引用,充值任务落地时再正式关联或补迁移。
|
||||
- 下一步:领取 T-202 PricingRule / ExchangeRate 模型 + 计费计算。
|
||||
|
||||
## 2026-07-02 T-202 PricingRule / ExchangeRate 模型 + 计费计算
|
||||
|
||||
- 状态:DONE
|
||||
- 变更:
|
||||
- `apps/billing/models.py`:新增 `PricingRule`(按 `operation_type + alias + resolution` 唯一,`points_cost > 0`,active 开关)与 `ExchangeRate`(`currency + effective_from` 当前汇率,`points_per_unit > 0`),并归一化分辨率/币种。
|
||||
- `apps/billing/pricing.py`:新增计费计算服务;定价优先精确分辨率,再回退空 `resolution` 默认价;缺规则抛 `NoPricingRuleError(code="no_pricing_rule")`;充值点数按当前 active 汇率 `floor(amount * points_per_unit)` 计算。
|
||||
- `apps/billing/admin.py`:注册 `PricingRule` / `ExchangeRate`,运营可在 admin 配规则与汇率。
|
||||
- `apps/billing/tests.py`:覆盖分辨率精确价优先、默认价回退、换底层 `ModelAlias.ai_model` 不影响别名价格、缺规则错误码、当前汇率选择与点数向下取整。
|
||||
- 新增迁移 `billing.0002_exchangerate_pricingrule`,已应用到当前 MySQL。
|
||||
- 同步更新 `README.md`、`docs/00-ai-start-here.md`、`docs/04-architecture.md`、`docs/api.md`、`docs/06-tasks.md`、`docs/current-state.md`、`docs/project-brief.md`、`docs/project-onepager.md`。
|
||||
- 验证:
|
||||
- `py -3.12 -m py_compile apps\billing\models.py apps\billing\pricing.py apps\billing\admin.py apps\billing\tests.py`:通过。
|
||||
- `py -3.12 manage.py check`:通过,0 issues。
|
||||
- `py -3.12 manage.py makemigrations --check`:通过,No changes detected。
|
||||
- `py -3.12 manage.py migrate`:通过,应用 `billing.0002_exchangerate_pricingrule`。
|
||||
- `py -3.12 manage.py showmigrations billing`:通过,`billing.0001_initial` / `billing.0002_exchangerate_pricingrule` 均为 `[X]`。
|
||||
- `Test-NetConnection 43.128.3.240 -Port 3306`:通过,`TcpTestSucceeded=True`。
|
||||
- `py -3.12 manage.py test apps.billing --noinput --keepdb`:通过,10 tests OK。
|
||||
- `py -3.12 manage.py test apps.users --noinput --keepdb`:通过,2 tests OK。
|
||||
- `py -3.12 -m compileall apps`:通过。
|
||||
- `git diff --check`:通过,仅 Windows CRLF 提示。
|
||||
- `./init.ps1`:通过,依赖同步与基础检查正常。
|
||||
- `py -3.12 manage.py test --noinput --keepdb`:两次未作为绿灯;一次跑到 31 tests 后在 `apps.ai` 测试类建事务时远程 MySQL 连接超时,一次在测试库连接阶段被远程主机重置。`py -3.12 manage.py test apps.ai --noinput --keepdb` 也在远程连接重建时超时;已跑过测试无断言失败。失败点均为远程 MySQL `43.128.3.240:3306` 连接问题。
|
||||
- 阻塞:无代码阻塞。远程 MySQL 对全量测试仍有间歇连接超时/重置;T-203 做并发扣点时需要继续使用 `--keepdb` 并必要时分 app 重试。
|
||||
- 决策:
|
||||
- 定价规则绑定能力别名字符串,不外键到具体 `AiModel`;后台切换 `ModelAlias` 指向不改变价格。
|
||||
- T-202 不实现扣点、退点、充值订单或 API 编排;这些留给 T-203/T-304/T-305/T-302。
|
||||
- 下一步:领取 T-203 并发安全扣点 / 退点(billing 层)。
|
||||
|
||||
Reference in New Issue
Block a user