Files
junhong_cmp_fiber/openspec/changes/archive/2026-09-14-fix-depleted-package-display/design.md
break 48c85a4916
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m35s
docs(归档): 归档已用完套餐展示与支付购包即时复机两个变更
- fix-depleted-package-display → archive/2026-09-14-fix-depleted-package-display;
  补记验证:`GetCurrentMainPackage`(package_usage_store.go:63-66)按 status IN (1,2) 读取主套餐,
  资产信息 `fillPackageInfo`(service/asset/service.go:348-349)复用该读取,
  已用完主套餐返回名称、使用记录、时间与流量指标,待生效/已过期/已失效仍不作为当前套餐;
  实现提交 ff25586,4 项任务全部完成。
- fix-immediate-package-payment-resume → archive/2026-09-14-fix-immediate-package-payment-resume;
  补记八月迭代同步验证:定点同步提交 b38b2b3 已是 Iteration/8-11 的 HEAD 祖先,
  在途支付商户装配保留(98c145f);services.go:277 `orderService.SetResumeCallback(stopResumeService)`
  在位,`go build ./cmd/api ./cmd/worker` 通过;2.1/2.2 据此勾选。
- 主 Spec 同步:personal-customer 新增「资产信息展示当前可用或已用完主套餐」;
  package-lifecycle 修改为支付成功后已生效主套餐触发一次即时自动复机检查。

openspec validate --all 为 38 passed / 0 failed;doctor healthy。
2026-09-14 09:49:03 +08:00

28 lines
1.5 KiB
Markdown

## Context
现有资产信息组装只查询 `status=1` 的主套餐。套餐达到有效业务阈值会变为 `status=2`,但仍未到期;此时 C 端资产信息把套餐摘要投影为无套餐零值。
## Goals / Non-Goals
**Goals:**
- 让 C 端资产信息对 `status IN (1,2)` 的当前主套餐使用同一套摘要投影。
- 维持既有主套餐选择顺序与空套餐响应形状。
**Non-Goals:**
- 不改变虚流量耗尽阈值或任何套餐状态流转。
- 不改变待生效、已过期、已失效套餐的展示规则。
- 不修改套餐历史接口、价格、续费资格、Schema 或迁移。
## Decisions
- 将资产信息使用的主套餐查询语义扩展为 `status IN (1,2)`,并仅限 `master_usage_id IS NULL`。两种状态都是当前生命周期内占位的主套餐;已有生命周期与到期扫描也以这两个状态共同处理。
- 保留既有 `priority ASC, activated_at ASC` 排序,避免多记录异常时改变当前选择结果。
- 套餐摘要继续直接使用选中的 `PackageUsage` 快照及统一流量指标计算,避免针对已用完状态复制或重算数据。
## Risks / Trade-offs
- B1 的 `current_package_*` 字段会从零值变为已用完套餐数据;这是用户要求的兼容性行为修正,前端需按已用完状态展示而非将有使用记录视为可继续使用。
- 若存量数据同时存在多条 `status IN (1,2)` 主套餐,接口沿用既有排序选第一条;本变更不修复该数据不变量问题。