hl-api-changelog/changelogs-v2/2026-05/23_2935_R6-bugs_PR2937.md

2.8 KiB

R6 真测发现 + 修复:insurance 翻页 + refund review PARTIAL 静默错位

服务: hl-order-service-v3 PR: #2937 Issue: #2935 日期: 2026-05-23 影响: 1 P0 + 1 P1 + 1 P2(其中 P2 是更深的静默业务错位 bug)


⚠️ 关键变化(前端 mmg)

1. 🔴 退款审批 PARTIAL 必传 approvedAmount(behavior change)

之前:POST /v3/admin/refund/review {decision: "PARTIAL"} 不传 approvedAmount → Service fallback 到 calculatedAmount/paidAmount,PARTIAL 被静默当 APPROVED 全额处理(语义错位 bug) 之后:必返 code=530403 REFUND_REVIEW_PARTIAL_AMOUNT_REQUIRED "PARTIAL 审批必须传 approvedAmount"

前端如果有 PARTIAL 审批漏传 approvedAmount 的场景必须补传,否则会被 530403 拒绝。

2. 🟢 /v3/admin/insurance/products 翻页边界返 400

之前:page=0 → 500 IndexOutOfBoundsException / pageSize=10000 不拒 之后:page=0 → 400 / pageSize > 100 → 400(与其他 7/8 list 接口一致)


改动

P0+P1 R6L: AdminInsuranceController.listProducts 翻页校验缺失

  • 新建 InsuranceProductListReqVO 继承 PageParam(page @Min(1) + pageSize @Min(1) @Max(100),含 isOverseas 字段)
  • Controller 改 @Valid InsuranceProductListReqVO req,@PageParam 注解直接拦截非法
  • 与其余 7 接口风格一致

P2 R6M: AdminRefundController.review PARTIAL 静默错位修复

  • R6-M 报告误判为 NPE,实际是更隐蔽的语义错位 bug:
    • Service 层映射后枚举 APPROVE/REJECT 丢失 PARTIAL 信息
    • approvedAmount=null 时 fallback 到 calculatedAmount/paidAmount
    • 实际行为:PARTIAL 被静默当 APPROVED 全额退款 — 业务静默 bug
  • 修:Controller 持有原 decision 枚举,前置校验 decision=PARTIAL && approvedAmount=null → 抛 BusinessException(530403)
  • 错误码 530403 REFUND_REVIEW_PARTIAL_AMOUNT_REQUIREDOrderRefundErrorCode:127 已存在(设计预留实现遗漏),复用

验证

  • 50 直接相关测试 0 failure
  • 3 新单测:
    • listProducts_pageNum_zero_returns400
    • listProducts_pageSize_over100_returns400
    • review_PARTIAL_without_approvedAmount_throws530403(断言 refundReviewService.review never() 被调,Service 完全没接到错误数据)

R6 累计测试发现(4 agent)

Agent 维度 结果
R6-J 状态机异常 22 反例全走业务码 0 BUG + 3 UX 文案改进
R6-K 并发竞态 5 @Lock4j + 4 @Idempotent + 1 死锁实测 0 BUG(R5-G RateLimiter 5 阈值误判 → 实际 10)
R6-L 翻页边界 8 接口 × 18 维度 = 144 点 84.7% 通过,1 P0 + 1 P1
R6-M ErrorCode 22 类 ~265 总数 50+ 真触发 段位合规 100%,1 P2

5 文件 +87 -8 + 1 新 VO。

关联

  • 工单 #2935(closed)
  • PR #2937(squash merged)
  • R6 报告 .tmp/qa-r6{j,k,l,m}-*-report.txt(共 4 份)