# 保险选择性投保 + 出行人线下投保备注 > 自动投保失败时(如婴儿不满1岁),支持选择部分出行人在线投保,并为不可投保的出行人添加线下投保备注。 --- ## 一、新增接口 ### 1.1 选择部分出行人投保 ``` POST /admin/insurance/order/{orderId}/selective-purchase ``` **请求体**: | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | schemeId | Long | 是 | 保险方案ID | | travelerIds | Long[] | 是 | 要投保的出行人ID列表 | **响应**:同 `AutoPurchaseResultVO`(success, purchasedCount, failedCount, failureReason) **使用场景**:自动投保失败后,排除不满1岁的婴儿,只选能投保的出行人。 ### 1.2 添加出行人保险备注 ``` POST /admin/insurance/order/{orderId}/traveler-note ``` **请求体**: | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | travelerId | Long | 是 | 出行人ID | | travelerName | String | 否 | 出行人姓名 | | noteType | String | 是 | OFFLINE=线下投保, SKIP=跳过, OTHER=其他 | | remark | String | 否 | 备注说明,如"不满1岁,线下购买太平洋保险" | **响应**:InsuranceTravelerNote 对象 **注意**:同一出行人重复调用会更新已有备注(upsert)。 ### 1.3 删除出行人保险备注 ``` DELETE /admin/insurance/order/{orderId}/traveler-note/{noteId} ``` ### 1.4 查询出行人保险覆盖状态 ``` GET /admin/insurance/order/{orderId}/traveler-coverage ``` **响应**: ```json [ { "travelerId": "123", "name": "张三", "birthday": "1990-01-01", "age": 36, "travelerType": "ADULT", "coverageStatus": "ONLINE_INSURED", "policies": [{ "policyNo": "xxx", "startDate": "2026-04-29", "endDate": "2026-05-04" }] }, { "travelerId": "456", "name": "小宝宝", "birthday": "2025-10-01", "age": 0, "travelerType": "CHILD", "coverageStatus": "OFFLINE_NOTED", "noteId": "789", "noteType": "OFFLINE", "noteRemark": "不满1岁,线下购买太平洋保险" }, { "travelerId": "789", "name": "李四", "coverageStatus": "NOT_COVERED" } ] ``` **coverageStatus 枚举**: | 值 | 说明 | |----|------| | ONLINE_INSURED | 在线已投保(含保单详情) | | OFFLINE_NOTED | 线下已备注(含备注内容) | | NOT_COVERED | 未投保 | --- ## 二、使用流程 ``` 1. 自动投保失败(如有不满1岁婴儿) 2. 调用 GET /traveler-coverage 查看每个出行人状态 3. 对能投保的出行人:POST /selective-purchase(传 travelerIds) 4. 对不能投保的出行人:POST /traveler-note(noteType=OFFLINE + remark) 5. 再次调用 /traveler-coverage 确认全部覆盖 ``` --- ## 三、涉及服务 需重启:**hl-insurance-service** ## 四、数据库变更 新增表 `insurance_traveler_note`(DDL: `sql/insurance_traveler_note.sql`),测试环境已执行。