# 保险订单列表接口路径改名:/orders -> /list - **变更类型**:修改接口(破坏性路径变更) - **端类型**:管理后台 - **日期**:2026-06-16 - **关联 Issue**:[#3681](https://git.1814.love:8443/wx/HL/issues/3681) - **PR**:[#3682](https://git.1814.love:8443/wx/HL/pulls/3682) - **Commit**:[36b787692](https://git.1814.love:8443/wx/HL/commit/36b7876922caf9843b4c4911aa94a237a5fd9573) - **后端负责人**:腰苏图 --- ## 1 接口背景 前端保险模块全量切 v3 联调时,保险列表页整体 404。排查确认网关路由通、服务健康、Nacos 注册正常,真因是前端调用 GET /v3/admin/insurance/list,而后端原路径为 GET /v3/admin/insurance/orders,名称对不上。 本次将后端路径改为与前端对齐,不保留旧路径别名,旧路径 /orders 即时下线(再调返回 404)。 注意:/orders/{id}(详情)、/orders/by-order/{orderId}(按订单查)两个接口路径不变,本次仅修改列表接口。 --- ## 2 变更清单 | # | 变更项 | 原来 | 现在 | |---|--------|------|------| | 1 | 接口路径 | GET /v3/admin/insurance/orders | GET /v3/admin/insurance/list | | 2 | 旧路径状态 | 可用 | **已删除,调用返回 404** | | 3 | 入参字段 | 无变化 | 无变化 | | 4 | 出参字段 | 无变化 | 无变化 | --- ## 3 接口详情 | 项目 | 内容 | |------|------| | **方法 + 路径** | GET /v3/admin/insurance/list | | **接口名** | 保险订单列表 | | **认证** | 需要管理员 JWT Token(Header: Authorization: Bearer token) | | **幂等性** | 查询接口,天然幂等 | | **限流** | 无特殊限流,走网关全局限流 | | **Content-Type** | Query String(无请求体) | | **响应类型** | Result> | --- ## 4 接口入参 ### 4.1 Query 参数(全部可选,继承分页基类) | 字段名 | 类型 | 必填 | 说明 | 示例 | |--------|------|------|------|------| | page | Integer | 否 | 页码,最小 1,默认 1 | 1 | | pageSize | Integer | 否 | 每页条数,最小 1,最大 100,默认 20 | 20 | | orderId | Long | 否 | 关联订单 ID | 1234567890 | | policyNo | String | 否 | 保单号 | POL202605010001 | | status | String | 否 | 保险状态,枚举值见第 6 节 | INSURED | | insuredName | String | 否 | 被保人姓名(模糊匹配) | 张三 | | insuranceProductId | Long | 否 | 保险产品 ID | 200 | ### 4.2 请求体 无(GET 接口,全部参数走 Query String) --- ## 5 出参字段 外层统一响应包装: ```json { "code": 200, "msg": "success", "data": { "list": [ InsuranceOrderVO ], "total": 100, "page": 1, "pageSize": 20 } } ``` InsuranceOrderVO 字段明细: | 字段名 | 类型 | 说明 | |--------|------|------| | insuranceOrderId | Long | 保险订单 ID | | orderId | Long | 关联业务订单 ID | | planId | Long | 保险计划 ID(指向 insurance_plan 表) | | extOrderNo | String | 保游网订单号 | | extPolicyNo | String | 保单号(保游网保单号),推荐使用此字段 | | policyNo | String | 保单号(兼容字段,与 extPolicyNo 同值,后续版本将废弃,请改用 extPolicyNo) | | productName | String | 保险产品名称 | | planName | String | 保险计划名称 | | policyHolderName | String | 投保人(投保主体公司名);列表页「投保人」列读此字段 | | premium | BigDecimal | 保费金额(元) | | totalPremium | BigDecimal | 保费金额(元),与 premium 同值,与详情 VO 字段名对齐 | | insuredCount | Integer | 被保人数 | | coverageStartDate | String(LocalDate) | 保障开始日期,格式 yyyy-MM-dd | | coverageEndDate | String(LocalDate) | 保障结束日期,格式 yyyy-MM-dd | | startDate | String(LocalDate) | 保障开始日期,与 coverageStartDate 同值,与详情 VO 字段名对齐 | | endDate | String(LocalDate) | 保障结束日期,与 coverageEndDate 同值,与详情 VO 字段名对齐 | | status | String | 保险状态枚举,见第 6 节 | | statusLabel | String | 状态中文标签(如「已承保」) | | policyPdfUrl | String / null | 保单 PDF 地址;INSURED 状态下异步回填,未回填或 OSS 未配置时为 null | | source | String | 订单来源,见第 6 节 | | bizType | String | 保单归属业务类型,见第 6 节 | | bizId | String | 归属业务 ID(ORDER=订单 ID,DRIVER=司机 ID;雪花 ID 序列化为字符串防精度丢失) | | createTime | String(LocalDateTime) | 投保时间,格式 yyyy-MM-dd HH:mm:ss | --- ## 6 枚举 / 数据字典 ### 保险状态(status) | 枚举值 | 中文标签 | 说明 | |--------|----------|------| | PENDING | 待投保 | 已创建,尚未发起投保 | | INSURING | 投保中 | 已提交保游网,等待出单 | | INSURED | 已投保 | 出单成功,保障生效 | | CANCELLED | 已取消 | 已退保 | | FAILED | 投保失败 | 投保流程异常 | 备注:入参 InsuranceQueryRequest.status 注解说明是 PENDING=待出单,出参 InsuranceOrderVO.status 注解说明是 PENDING=待投保,含义一致,「待出单」与「待投保」均指同一状态。 ### 订单来源(source) | 枚举值 | 说明 | |--------|------| | BAOYOU | 保游网出单 | | MANUAL | 手工录入(司机年保档案联动) | ### 保单归属业务类型(bizType) | 枚举值 | 说明 | |--------|------| | ORDER | 订单险(bizId = 订单 ID) | | DRIVER | 司机险(bizId = 司机 ID) | --- ## 7 错误码 | HTTP 状态码 | code | 说明 | 触发场景 | |-------------|------|------|---------| | 200 | 200 | 成功 | 正常查询 | | 400 | 400 | 参数校验失败 | page < 1 或 pageSize > 100 | | **404** | **404** | **接口不存在** | **调用旧路径 GET /v3/admin/insurance/orders(已删除)** | | 401 | 401 | 未认证 | JWT Token 缺失或过期 | --- ## 8 示例 ### 8.1 典型成功示例 请求: ``` GET /v3/admin/insurance/list?page=1&pageSize=10&status=INSURED Authorization: Bearer ``` 响应: ```json { "code": 200, "msg": "success", "data": { "list": [ { "insuranceOrderId": "1934567890123456789", "orderId": "1934567890000000001", "planId": 10, "extOrderNo": "BY2026060100001", "extPolicyNo": "POL202606010001", "policyNo": "POL202606010001", "productName": "呼籁旅行意外险", "planName": "标准计划", "policyHolderName": "呼籁旅行有限公司", "premium": 120.00, "totalPremium": 120.00, "insuredCount": 2, "coverageStartDate": "2026-07-01", "coverageEndDate": "2026-07-05", "startDate": "2026-07-01", "endDate": "2026-07-05", "status": "INSURED", "statusLabel": "已承保", "policyPdfUrl": "https://oss.example.com/policy/POL202606010001.pdf", "source": "BAOYOU", "bizType": "ORDER", "bizId": "1934567890000000001", "createTime": "2026-06-01 10:30:00" } ], "total": 1, "page": 1, "pageSize": 10 } } ``` ### 8.2 边界情况示例(无匹配数据) 请求: ``` GET /v3/admin/insurance/list?page=1&pageSize=20&insuredName=不存在的人 Authorization: Bearer ``` 响应: ```json { "code": 200, "msg": "success", "data": { "list": [], "total": 0, "page": 1, "pageSize": 20 } } ``` ### 8.3 业务失败示例——调旧路径返回 404 请求(旧路径,已下线): ``` GET /v3/admin/insurance/orders?page=1&pageSize=20 Authorization: Bearer ``` 响应: ```json { "code": 404, "msg": "No handler found for GET /v3/admin/insurance/orders", "data": null } ``` 请务必将所有调用从 /orders 切换到 /list,旧路径无法回退,调用即 404。 --- ## 9 业务边界 适用场景: - 管理后台保险列表页分页查询 - 可按订单 ID、保单号、状态、被保人姓名、保险产品 ID 任意组合筛选 - 不传任何筛选条件时返回全量分页 不适用场景: - 按订单 ID 获取该订单下所有保险单列表:使用 GET /v3/admin/insurance/orders/by-order/{orderId}(路径未变) - 获取单条保险订单详情:使用 GET /v3/admin/insurance/orders/{id}(路径未变) 特殊边界: - policyPdfUrl 在 INSURED 状态下异步回填,刚出单时可能为 null,前端需兼容 null 展示 - policyNo 为兼容字段,与 extPolicyNo 同值,后续将废弃,建议新代码统一改用 extPolicyNo - premium 与 totalPremium 同值,与详情 VO 字段名对齐而保留双字段;coverageStartDate/startDate、coverageEndDate/endDate 同理 - bizId 为雪花 ID 序列化字符串(非 number),前端不要转 number(精度丢失) --- ## 10 修改前后对比 ### 路径级对比 | 对比项 | 原来 | 现在 | |--------|------|------| | 列表接口路径 | GET /v3/admin/insurance/orders | GET /v3/admin/insurance/list | | 旧路径是否可用 | 可用 | 不可用,返回 404 | | 入参字段 | InsuranceQueryRequest | InsuranceQueryRequest(不变) | | 出参字段 | InsuranceOrderVO | InsuranceOrderVO(不变) | | 其他接口 | 不变 | 不变(详情、按订单查均未动) | ### 未改动接口(确认路径不变) | 接口 | 路径 | 状态 | |------|------|------| | 保险订单详情 | GET /v3/admin/insurance/orders/{id} | 路径不变 | | 按订单查保险列表 | GET /v3/admin/insurance/orders/by-order/{orderId} | 路径不变 | --- ## 11 影响评估 / 回滚 破坏兼容性:是。旧路径 GET /v3/admin/insurance/orders 调用即 404,无降级。 前端需要同步:是。将所有调用保险订单列表的请求 URL 从 /v3/admin/insurance/orders 改为 /v3/admin/insurance/list。 影响范围: - 仅影响保险列表页的数据加载请求 - 详情页、按订单查保险等其他请求不受影响 回滚方案: - 本次改动极小(仅 @GetMapping 注解值变更),如有问题可快速 revert PR #3682 重新部署 - 回滚后前端应切回旧路径 /v3/admin/insurance/orders - 后端回滚与前端切换需同步进行,否则一端改完另一端未跟上仍会 404 --- ## 12 注意事项 1. 立即切换路径:旧路径 GET /v3/admin/insurance/orders 已在 PR #3682 合并时同步删除,不存在过渡期,请尽快切换。 2. 仅列表路径变化:/orders/{id}(详情)和 /orders/by-order/{orderId}(按订单查)路径未变,不需要修改。 3. 字段无变化:入参 InsuranceQueryRequest 和出参 InsuranceOrderVO 的所有字段均未改动,切换路径后无需修改字段映射。 4. 双名字段:VO 中 policyNo/extPolicyNo、premium/totalPremium、coverageStartDate/startDate、coverageEndDate/endDate 均为同值双字段,新代码推荐使用后者(extPolicyNo、totalPremium、startDate、endDate),旧名称后续将废弃。 5. bizId 是字符串:雪花 ID 防精度丢失,不要用 JS Number 解析。 --- ## 13 关联 / 联系人 | 项目 | 链接 / 内容 | |------|------------| | Issue | [#3681 保险订单列表接口 /orders 改名为 /list](https://git.1814.love:8443/wx/HL/issues/3681) | | PR | [#3682 fix(order-v3/保险): 保险订单列表接口 /orders 改名为 /list](https://git.1814.love:8443/wx/HL/pulls/3682) | | Merge Commit | [dc29cb08f](https://git.1814.love:8443/wx/HL/commit/dc29cb08fb6e127f7df375b174528046cdfe2efe) | | 实现 Commit | [36b787692](https://git.1814.love:8443/wx/HL/commit/36b7876922caf9843b4c4911aa94a237a5fd9573) | | 后端负责人 | 腰苏图 | | 服务 | hl-order-service-v3(端口 8086) |