All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m33s
补齐 PRD §2.3.1「退款管理补充字段」:退款列表、详情与导出新增 「当前退款套餐已用量」与「当前退款套餐总量」两个纯展示字段。 - 套餐定位口径与退款套餐失效保持一致,按优先级取唯一一条: 冻结的 package_usage_id(且属于该订单)→ 订单主套餐 → 订单任一套餐, 同级按标识升序。不按当前世代或当前生效套餐推断;不按套餐状态过滤, 使退款后套餐转已失效时仍能回看用量。 - 列表与详情用固定两次查询批量解析(按标识、按订单),查询次数不随条数增长; 详情复用同一函数。解析不到套餐或记录已物理删除时返回 0,不阻断读取。 - 导出新增两列并改用同一优先级的 LATERAL 取法,不再依赖只按 r.package_usage_id 的 join——生产库 1296 条退款仅 157 条带该字段,旧取法会让多数行显示零值。 - 不改变退款金额校验、冻结实收、套餐失效、接续、停机与佣金回溯任何规则。 验证:测试库 junhong_cmp_test 实测冻结记录、订单主套餐回退、记录缺失返回 0 三项 解析场景与「4 条退款固定 2 次查询」;并以同批 43 条退款对拍 Go 解析器与导出 SQL, 口径不一致 0 条;导出 43 行列数与表头一致。无迁移、无接口路径变化。
3.8 KiB
3.8 KiB
1. 查询投影
- 1.1 新增退款套餐用量批量读取:按「冻结套餐使用记录优先级 → 订单主套餐 → 订单任一套餐使用记录、同级按 id 升序取第一条」解析每个退款申请的当前退款套餐,返回真实已用量与真实总量(MB)。实现为固定两次查询(
id IN与order_id IN)+ 内存择一,不得按退款条数逐条查询;套餐记录不存在或字段为空时返回 0,不报错。 证据:internal/service/refund/package_usage.go(loadRefundPackageUsages两次查询 +resolveRefundPackageUsage优先级择一)。烟测实测:冻结套餐记录返回 321/1000;未冻结回退订单主套餐返回 321/1000(非零);套餐记录物理删除返回 0 且不报错;4 条退款的套餐查询次数恒为 2(不随条数增长)。 - 1.2 退款列表、详情响应新增「当前退款套餐已用量」与「当前退款套餐总量」两个字段:列表批量填充、详情单条填充,字段单位与含义写入中文 description,枚举与单位不得与既有套餐 DTO 冲突。 证据:
internal/model/dto/refund_dto.go的RefundResponse.RefundPackageUsedMB/RefundPackageTotalMB(中文 description 含单位与零值语义);internal/service/refund/service.go列表批量填充、详情单条填充。go run cmd/gendocs/main.go生成的 OpenAPI 已包含两个字段。
2. 导出
- 2.1 退款导出场景新增两列「当前退款套餐已用量(MB)」与「当前退款套餐总量(MB)」,插入在既有「套餐名称」列之后;同步调整
refundExportRow、Select 列与表头,保持表头与行元素数量、顺序严格一致。该两列必须覆盖未冻结package_usage_id的退款,不得沿用只按r.package_usage_idjoin 的取法。 证据:internal/exporter/refund_scene.go表头与行新增「当前退款套餐已用量(MB)」「当前退款套餐总量(MB)」两列(位于「套餐名称」之后),并以 LATERAL 按同一优先级取唯一套餐记录,不再依赖r.package_usage_idjoin。烟测实测:导出 43 行列数与表头一致,两个新列下标为 6/7,43/43 行取到套餐总量(改动前仅 30/43 有package_usage_id)。
3. 验证
- 3.1 按 ENG-TEST-001 在维护者指定的
junhong_cmp_testPostgreSQL + Redis DB 6 验证,仅创建与删除本 Change 自有 fixture,禁止重置整库:冻结过套餐使用记录的退款返回该记录用量;未冻结但订单存在主套餐的退款返回主套餐用量而非零;套餐记录已物理删除时返回 0 且列表/详情/导出仍正常;列表与导出的套餐查询次数固定为 2 次、不随条数增长;确认退款金额校验、套餐失效、接续、停机与佣金回溯行为无变化。 证据:测试库junhong_cmp_test实测四项解析场景与 2 次固定查询;并以同批 43 条退款做 Go 解析器与导出 SQL 的口径对拍,不一致 0 条。未修改退款金额校验、套餐失效、接续、停机与佣金回溯相关代码。fixture 全部清理,未重置整库。 - 3.2 运行
gofmt -w、go build ./cmd/api ./cmd/worker、go run cmd/gendocs/main.go、openspec validate add-refund-package-usage-display --strict、openspec validate --all、openspec doctor --json与./scripts/context-health.sh;自动化测试按项目决策为 N/A,验证脚本在完成后删除,不留测试文件。 证据:gofmt -l(变更集)无输出;go build ./cmd/api ./cmd/worker退出码 0;go run cmd/gendocs/main.go退出码 0 且 OpenAPI 含新字段;openspec validate add-refund-package-usage-display --strict有效;openspec validate --all通过;openspec doctor --jsonhealthy;./scripts/context-health.sh通过。验证脚本已删除,仓库内*_test.go计数为 0。