chore(changelog): #7980 AC-6 司机险台账同名锁回写 mmg 前端复核 note
changelog-filename-gate / validate (push) Failing after 1s

这个提交包含在:
Mimingguang
2026-09-21 00:08:16 +08:00
父节点 bc07d07f20
当前提交 5770e3faa4
@@ -12,7 +12,7 @@ frontend_owner: ""
frontend_ref: ""
target_release: ""
verified_at: ""
status_note: "PR #8072 已 squash 合并 dev-v3(合并提交 8bf9c520c,#7980 AC-6,工单最后一条验收项)。✅ 已部署:2026-09-20 23:43 hl-order-service-v3 测试服滚动更新两实例,8186/8086 分别 12/13 秒起监听,deploy-backend.sh 报 rolling deploy complete;部署记录行 hl-order-service-v3 <- dev-v3 @ 8bf9c520c,即运行版本就是本次合并提交本身(非祖先链判据,是精确相等)。🔴 backend_status=deployed 但本文档没有做任何功能调用取证:没有实际调过 driver-annual/upsert、driver-annual/{driverId}/invalidate、driver-purchase 三个端点里的任何一个,100503 在测试服上一次都没有触发过——这是「没测」不是「测过不会触发」。理由:三个端点都是 /v3/internal/**,不经网关,唯一合法入口是 fleet 经 Feign 调用,手动触发需要真实写司机年保台账/投保行(台账 upsert 会更新或新插 insurance_order 行,投保会触发保游远程出单 HTTP 与真实扣费),本次评估认为不值得为了取一次 100503 读数去污染真实业务台账,故互斥本身只由代码层面的落库级并发 IT(Lock4jSharedNameConcurrencyIT)与按运行期锁键形状反查的契约用例(Lock4jSharedNameContractTest/Lock4jNameGroupGateTest)覆盖,这些是 PR 正文所载的本地/CI 证据,不是本 changelog 在测试服上做的验证。gateway_status=not_required:三个端点路径/方法零变化,且路径前缀 /v3/internal/,InternalInsuranceController 类注释自陈『不经过认证拦截器(/v3/internal/** 已排除)』,与网关路由无关。frontend_status=not_required,结论+依据:①本组无 C 端——全仓 grep driverInsuranceFeignClient 的 upsertAnnualPolicy/invalidateAnnualPolicy/driverPurchase 三个方法调用点,命中的调用方全部在 hl-fleet-service 且全部挂在 /admin/fleet/drivers 前缀下(DriverInsuranceController.java:33 RequestMapping、:56 purchase 端点、:80 insureAnnual 端点均在此前缀),没有任何 mp/小程序侧调用;②唯一可能把新失败码传导到 hl-ui 的路径是 DriverInsuranceService.java:352-353 那次同步 invalidateAnnualPolicy 调用(购买年险时若旧档案是 MANUAL 年保,出单成功后同步作废旧台账),但已逐行核实:该调用若失败(含本次新增的 100503),被 DriverInsuranceService.java:226 的 catch(AnnualBindingRollbackQueuedException) 捕获,统一重新包装成既有错误码 600206(DriverErrorCode.ANNUAL_BIND_FAILED,:241-242),即便触发的具体原因是 100503,hl-ui 侧看到的仍是它已经在处理的 600206,没有新码需要 hl-ui 适配。"
status_note: "PR #8072 已 squash 合并 dev-v3(合并提交 8bf9c520c,#7980 AC-6,工单最后一条验收项)。✅ 已部署:2026-09-20 23:43 hl-order-service-v3 测试服滚动更新两实例,8186/8086 分别 12/13 秒起监听,deploy-backend.sh 报 rolling deploy complete;部署记录行 hl-order-service-v3 <- dev-v3 @ 8bf9c520c,即运行版本就是本次合并提交本身(非祖先链判据,是精确相等)。🔴 backend_status=deployed 但本文档没有做任何功能调用取证:没有实际调过 driver-annual/upsert、driver-annual/{driverId}/invalidate、driver-purchase 三个端点里的任何一个,100503 在测试服上一次都没有触发过——这是「没测」不是「测过不会触发」。理由:三个端点都是 /v3/internal/**,不经网关,唯一合法入口是 fleet 经 Feign 调用,手动触发需要真实写司机年保台账/投保行(台账 upsert 会更新或新插 insurance_order 行,投保会触发保游远程出单 HTTP 与真实扣费),本次评估认为不值得为了取一次 100503 读数去污染真实业务台账,故互斥本身只由代码层面的落库级并发 IT(Lock4jSharedNameConcurrencyIT)与按运行期锁键形状反查的契约用例(Lock4jSharedNameContractTest/Lock4jNameGroupGateTest)覆盖,这些是 PR 正文所载的本地/CI 证据,不是本 changelog 在测试服上做的验证。gateway_status=not_required:三个端点路径/方法零变化,且路径前缀 /v3/internal/,InternalInsuranceController 类注释自陈『不经过认证拦截器(/v3/internal/** 已排除)』,与网关路由无关。frontend_status=not_required,结论+依据:①本组无 C 端——全仓 grep driverInsuranceFeignClient 的 upsertAnnualPolicy/invalidateAnnualPolicy/driverPurchase 三个方法调用点,命中的调用方全部在 hl-fleet-service 且全部挂在 /admin/fleet/drivers 前缀下(DriverInsuranceController.java:33 RequestMapping、:56 purchase 端点、:80 insureAnnual 端点均在此前缀),没有任何 mp/小程序侧调用;②唯一可能把新失败码传导到 hl-ui 的路径是 DriverInsuranceService.java:352-353 那次同步 invalidateAnnualPolicy 调用(购买年险时若旧档案是 MANUAL 年保,出单成功后同步作废旧台账),但已逐行核实:该调用若失败(含本次新增的 100503),被 DriverInsuranceService.java:226 的 catch(AnnualBindingRollbackQueuedException) 捕获,统一重新包装成既有错误码 600206(DriverErrorCode.ANNUAL_BIND_FAILED,:241-242),即便触发的具体原因是 100503,hl-ui 侧看到的仍是它已经在处理的 600206,没有新码需要 hl-ui 适配。mmg 前端复核 2026-09-21:维持 not_required。driver-annual/driver-purchase//v3/internal 在 hl-admin src 全仓零命中,三端点不经网关前端不可达;唯一间接路径(投保成功后同步作废旧 MANUAL 台账失败)已被 fleet 侧重包装为既有 600206,而 600206 前端已显式处理(DriverEditModal.vue:1300/1339 关弹窗并刷新防重复投保、insurance/orders/index.vue:1040 特判收敛、driverInsurancePurchase.js 导出常量并有 spec 覆盖),新增 100503 无触达 hl-ui 的路径,零改动。"
updated_at: "2026-09-21"
base: "dev-v3"
---