---
schema: "hl-changelog/v2"
ticket: "5586"
title: "投保成功出单后司机档案保险状态自动同步为有保（INSURED回调兜底重绑）"
consumer: "admin"
change_type: "修改接口"
author: "wx(GIT)"
backend_status: "deployed"
gateway_status: "verified"
frontend_status: "not_required"
frontend_owner: ""
frontend_ref: ""
target_release: ""
verified_at: ""
status_note: "后端完成：PR #5587 已合并 dev-v3 并部署 TEST；网关实测 bindAnnual=false 投保（档案 none）→ INSURED 回调 → 档案自动兜底重绑 annual+保单号；退保→解绑→再投保闭环正常。纯后端数据同步修复，无前端契约变更。"
updated_at: "2026-08-06"
base: "dev-v3"
generated: "2026-08-06T11:58:00+08:00"
---

# 投保成功出单后司机档案保险状态自动同步为有保（INSURED回调兜底重绑）

> **服务**: hl-fleet-service
> **PR**: [#5587](https://git.1814.love:8443/wx/HL/pulls/5587)
> **Issue**: [#5586](https://git.1814.love:8443/wx/HL/issues/5586)
> **日期**: 2026-08-06

## 背景

协调台实测（2026-08-06 11:14）：司机"菜单师傅"（2073742230014644225）真实保游投保成功出单（insurance_order 2085202532040155138，INSURED，保单号 11209006600507258063，¥3），但 `fleet_driver.insurance_type` 仍 none、policy_no 空——投保成功→司机档案保险状态同步链路未闭合。#5558 已修"投保 bindAnnual 缺省绑定全年保险"（受理即绑），但档案无保（投保受理绑定缺失，或 FAILED/CANCELLED 通知先于 INSURED 乱序到达把绑定解掉后未重绑）时，INSURED 回调仍被"绑定一致性/来源守卫"提前跳过。

## 变更接口

| 方法 | 路径 | 来源 | 变更 |
|---|---|---|---|
| `POST` | `/internal/fleet/drivers/insurance/annual-policy-status` | `InternalDriverInsuranceController`（fleet） | 语义变更：INSURED 通知在 CAS 补填未命中且档案无保（none/空）时**兜底重绑年保**（type=annual+保单号+保费+保障起止+insurance_order_id+source=baoyou） |

字段结构不变，仅通知处理语义调整。**行为矩阵**：

| 档案状态 | INSURED 通知 | FAILED/CANCELLED 通知 |
|---|---|---|
| 绑该单（annual+baoyou+orderId 匹配） | CAS 补填保单号（原行为） | CAS 解绑回 none（原行为） |
| **档案无保（none/空，orderId=null）** | **兜底重绑年保（#5586 新增）** | 解绑 CAS 短路（affectedRows=0，静默） |
| 绑别的单 / perTrip / manual 台账年保 | 跳过（不覆盖换绑与手动语义） | 跳过 |

## 前端/调用方动作

- **无需前端改动**（纯后端数据同步修复，接口字段不变）。
- 司机详情"投保"后刷新即可看到档案有保（保险 Tab 展示源=档案 insurance 字段 + 保单列表）。

## 验证证据

- 定向测试：DriverServiceTest 147/147（+3：档案 none+INSURED→兜底重绑 / perTrip 档案→不动 / 缺保障起止→跳过）；既有守卫测试（绑定不一致/source 非 baoyou/FAILED 解绑/INSURED 补填）保持通过；DriverInsuranceServiceTest 25/25、DriverPolicyStatusOutboxEffectServiceTest 2/2。
- fleet 全量 `mvn -pl hl-fleet-service -am verify`：BUILD SUCCESS（3168 tests，0 failures，0 errors，4 skipped，含 spotless）。
- 网关验证（TEST，司机=菜单师傅）：① bindAnnual=true 投保→受理即绑 annual→INSURED 回调补填保单号；② 退保→保单 CANCELLED→档案解绑回 none；③ **bindAnnual=false 投保（档案保持 none）→ INSURED 回调→档案自动兜底重绑**（type=annual、policyNo=11209006600507256613、orderId=2085211341932400641、source=baoyou）；④ 司机详情"有保"显示与 insurance_order 一致。
- 历史数据批量同步 SOP：internal 端点幂等重放 INSURED 通知（档案 none 自动兜底重绑）；本环境 Nacos 断连期间无法经网关直达 internal 端点（403 属正常，Feign LB 直连），重放由 Nacos 可达环境执行。

## 关联/联系人

### 链接

- [后端工单 #5586](https://git.1814.love:8443/wx/HL/issues/5586)
- [后端 PR #5587](https://git.1814.love:8443/wx/HL/pulls/5587)
- Merge commit: [df0c5d2c7](https://git.1814.love:8443/wx/HL/commit/df0c5d2c7029f19eae85c39ad9c04223faeffc5e)
- 关联：[#5558 投保缺省绑定全年保险](https://git.1814.love:8443/wx/HL/issues/5558)、[#3760 保游年险绑定](https://git.1814.love:8443/wx/HL/issues/3760)

### 联系人

- **后端负责人**: @wx
- **前端消费**: 无需改动
