fix: allow expired members to buy new plans
This commit is contained in:
+30
-1
@@ -63,4 +63,33 @@
|
||||
|
||||
## 状态
|
||||
|
||||
TODO。
|
||||
DONE。
|
||||
|
||||
## 实施结果
|
||||
|
||||
- 新增统一的当前可用权益查询,软件下单和支付发放都只把
|
||||
`status=active` 且尚未超过宽限截止时间的权益视为当前套餐。
|
||||
- 创建支付订单时不提前修改历史权益;用户未付款或支付下单失败不会触发
|
||||
权益状态变化。
|
||||
- 支付回调通过订单状态、通道、金额和交易号校验后,在原事务内锁定并把
|
||||
同产品自然到期的 `active` 权益更新为 `expired`,再决定新建或续订。
|
||||
- 已过期的同套餐和不同套餐都创建新权益;仍可用的同套餐继续续订,仍可用
|
||||
的不同套餐继续返回 `plan_change_not_supported`。
|
||||
- 未修改模型、迁移、接口契约、支付验签、点数账本或订阅模式。
|
||||
|
||||
## 验证结果
|
||||
|
||||
- `py -3.12 -m py_compile apps\licensing\services.py apps\licensing\tests.py`:
|
||||
通过。
|
||||
- SQLite 目标 `SoftwareOrderServiceTests`:8 tests OK,其中新增 5 条覆盖
|
||||
过期跨套餐、过期同套餐、宽限期跨套餐、下单后套餐变化和支付校验失败。
|
||||
- SQLite 非并发 licensing / 软件支付回调扩大回归:40 tests OK。
|
||||
- SQLite 既有软件订单并发测试仍因 `database table is locked` 失败;该测试
|
||||
依赖真实行锁,不能把 SQLite 结果作为 MySQL 并发结论。
|
||||
- 已尝试在生产服务器 MySQL 8.4 上创建唯一命名的隔离测试库,连接成功但
|
||||
项目账号没有建库权限,测试在迁移和断言前退出;生产业务库未被修改。
|
||||
- `manage.py check`:通过,0 issues。
|
||||
- `manage.py makemigrations --check --dry-run`:No changes detected;检查
|
||||
迁移历史时旧本地 MySQL 地址拒绝连接并给出 warning,本任务无迁移。
|
||||
- `./init.ps1`:通过,Python 3.12.3,Django system check 0 issues。
|
||||
- `git diff --check`:通过,仅有 Windows 工作区 LF/CRLF 转换提示。
|
||||
|
||||
Reference in New Issue
Block a user