From 557bbf4ad1c800506dbeefc1694c54fc152ba162 Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Thu, 6 Aug 2026 16:29:30 +0800 Subject: [PATCH] =?UTF-8?q?changelog(v2):=20=E9=80=80=E4=BF=9D=E5=89=8D?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E4=BF=9D=E5=8D=95=E5=B7=B2=E5=87=BA=E5=8D=95?= =?UTF-8?q?=EF=BC=8C=E6=9C=AA=E5=87=BA=E5=8D=95=E6=92=A4=E9=94=80=E6=8A=95?= =?UTF-8?q?=E4=BF=9D=E4=BB=BB=E5=8A=A1=EF=BC=88#5594=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...单已出单未出单撤销投保任务-修改接口-管理后台.md | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 changelogs-v2/2026-08/06_5594_退保前校验保单已出单未出单撤销投保任务-修改接口-管理后台.md diff --git a/changelogs-v2/2026-08/06_5594_退保前校验保单已出单未出单撤销投保任务-修改接口-管理后台.md b/changelogs-v2/2026-08/06_5594_退保前校验保单已出单未出单撤销投保任务-修改接口-管理后台.md new file mode 100644 index 0000000..132d3cb --- /dev/null +++ b/changelogs-v2/2026-08/06_5594_退保前校验保单已出单未出单撤销投保任务-修改接口-管理后台.md @@ -0,0 +1,66 @@ +--- +schema: "hl-changelog/v2" +ticket: "5594" +title: "退保前校验保单已出单,未出单撤销投保任务而非退保成功" +consumer: "admin" +author: "wx(GIT)" +change_type: "修改接口" +backend_status: "deployed" +gateway_status: "verified" +frontend_status: "not_required" +frontend_owner: "" +frontend_ref: "" +target_release: "" +verified_at: "" +status_note: "后端完成:PR #5606 已合并 dev-v3 并部署 TEST,网关验证通过。退保收敛前校验保单已出单(INSURED),未出单时撤销投保任务并收敛退保为撤销终态,不再产生'未投保却退保成功'假象。" +updated_at: "2026-08-06" +base: "dev-v3" +generated: "2026-08-06T16:10:00+08:00" +--- + +# 退保前校验保单已出单,未出单撤销投保任务而非退保成功 + +> 后端完成:PR #5606 已合并 dev-v3 并部署 TEST,网关验证通过。 + +## 关联 / 联系人 + +### 链接 + +- **Issue**: [#5594](https://git.1814.love:8443/wx/HL/issues/5594) +- **PR**: [#5606](https://git.1814.love:8443/wx/HL/pulls/5606) +- **Merge commit**: [a95d949b](https://git.1814.love:8443/wx/HL/commit/a95d949b) + +### 联系人 + +- **后端负责人**: @wx + +## 背景 + +TEST 实证(道尔吉 08-30):派单取消退保时,投保任务(PURCHASE)仍处于 PENDING(错误 100503「司机险任务锁暂不可用」,insurance_order_id 为空),但同日退保检查(REFUND_CHECK)已收敛 SUCCESS——形成「未投保成功却退保成功」假象。 + +根因:`refundServiceDateIfNoActiveAssignment` 在退保候选保单(INSURED/INSURING)为空时直接收敛 REFUND_CHECK 为 SUCCESS;`retryRefund`/`refundPolicyUnderLifecycleLock` 在无保单或非退保候选时按幂等「退保成功」收敛——未出单投保任务被悬挂、退保却显示成功,投保/退保状态机不一致。 + +## 变更接口 + +| 方法 | 路径 | 来源 | 说明 | +|---|---|---|---| +| `GET` | `/fleet/driver-insurance/task/list` | `DriverInsuranceController`(fleet) | 状态枚举新增 `CANCELLED`(已撤销)终态:未出单投保任务撤销后任务列表展示「已撤销」,退保任务同样收敛为「已撤销」而非「成功」 | + +无请求/响应字段增减;仅 `FleetInsuranceTaskStatusEnum` 新增 `CANCELLED` 状态值,管理后台任务状态展示与筛选可见新增状态。**无前端 API 变化**。 + +## 行为变化 + +- **退保前校验保单已出单**:`refundServiceDateIfNoActiveAssignment` 发现该司机该服务日无已出单保单(INSURED)且存在未出单投保任务(PURCHASE PENDING/PROCESSING 且 insurance_order_id 为空)时,先撤销投保任务为 `CANCELLED`(终态),再收敛退保任务为撤销终态,**不再产生「退保成功」假象** +- **幂等边界**:已有保险订单的投保中任务(如退保后重投)不撤销,避免误伤合法在途投保 +- **投保/退保状态机一致性**:PURCHASE 未出单 → CANCELLED(撤销,无保单);REFUND/REFUND_CHECK 在无投保任务时保持既有幂等 SUCCESS(权威保单本就无可退);撤销场景统一收敛 CANCELLED +- **汇总收敛**:`summarizeRefundChecks` 将 CANCELLED 计为撤销收敛,避免误判 RETRYABLE_FAILURE 无限重试 + +## 前端/调用方动作 + +无。任务列表状态展示自动透出新枚举值「已撤销」,无需前端配合。 + +## 验证证据 + +- 定向测试:FleetInsuranceTaskServiceTest 142/142(含 3 个新增用例:取消退保撤销投保、无任务幂等成功、重试退保撤销);保险域 187 项全过 +- fleet verify **3199 项**(含 MySQL 集成)0 失败;spotless 通过 +- 网关验证(TEST,16:22 部署后):① 任务列表 200,道尔吉 08-30 存量任务可见(PURCHASE PENDING 未出单 + REFUND SUCCESS 旧假象),部署未破坏存量;② 保单接口实证 08-30 起保保单 0 张("未投保却退保成功"场景实锤);③ 对已 SUCCESS REFUND 任务 retry 幂等安全(返回 SUCCESS、不调保司、不重复退保)