hl-api-changelog/changelogs/2026-04/27_refactor_insurance-scheme_full-trip-totaldays.md
API Changelog Bot c3e5ea13da docs: 修 #1454 changelog 接口路径 — /admin/insurance/scheme/list?totalDays
之前误写成 /admin/insurance/schemes/active?tripDays, 实际路径 /scheme/list, 参数 totalDays.
经测试服 curl 实证修正.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 09:25:15 +08:00

2.2 KiB

保险方案"全程方案"语义对齐 (totalDays 哨兵)

日期: 2026-04-27 PR: #1454 (Closes #1425) 影响端: 管理端 admin

背景

保险方案的「段配置」(InsuranceSchemeSegment) 中 dayOffsetEnd = -1 是「行程最后一天/全程」的合法哨兵值。

之前 computeTotalDays 算法见到 -1 时会跳过该段、错误返回 maxDay=1,导致「全程方案」入库时 totalDays=1AdminInsuranceSchemeController.listActiveSchemestotalDays.equals(s.getTotalDays()) 精确过滤,结果「全程方案」只在 1 天行程下拉里能查到,多天行程查不到,与字段语义不符。

改动

后端

  • 新增哨兵常量 InsuranceConstants.TOTAL_DAYS_FULL_TRIP = -1
  • computeTotalDays 见到任一段 dayOffsetEnd == -1 → 返回哨兵 -1
  • listActiveSchemes 过滤逻辑同步: totalDays==-1 || totalDays==请求tripDays 视为命中

接口字段语义变化

GET /admin/insurance/scheme/list?totalDays=N(启用方案下拉,按行程天数筛选)

  • 之前: 只返回 totalDays == N 的方案
  • 现在: 返回 totalDays == NtotalDays == -1(全程方案)的方案

POST /admin/insurance/scheme / PUT /admin/insurance/scheme/{id}

  • request body 行为不变(前端继续配 dayOffsetEnd: -1 表示全程段)
  • response body 中的 totalDays 字段语义变化:
    • 之前: 全程方案返回 1(错误语义)
    • 现在: 全程方案返回 -1(哨兵, 表示"任意天数都适用"
    • 普通方案不受影响

前端注意

列表页/详情页展示: 如果前端 UI 需要展示 totalDays, 见到 -1 应当展示为「全程」/「任意天数」, 而不是直接显示 "-1天"。

新增/编辑表单: totalDays 字段是后端计算字段, 前端不需要表单填写, 直接读 response 即可。

数据迁移

  • 现存所有方案均为非 -1 段配置, totalDays 都是正值, 无需迁移
  • 本次上线后用户配置全程段时, 入库 totalDays=-1 自动生效

单测

  • InsuranceManageServiceTest: +3 case (单段全程哨兵 / 多段含全程 / 全部正常段保持原算法)
  • AdminInsuranceSchemeControllerTest: +2 case (5 天行程仅命中全程 / 同时命中全程+精确)
  • 全部 56 单测绿