diff --git a/changelogs-v2/2026-08/08_5701_登记司机确认不被通知结果确认中拦截(人工确认直接成功)-修改接口-管理后台.md b/changelogs-v2/2026-08/08_5701_登记司机确认不被通知结果确认中拦截(人工确认直接成功)-修改接口-管理后台.md new file mode 100644 index 0000000..3dfe24f --- /dev/null +++ b/changelogs-v2/2026-08/08_5701_登记司机确认不被通知结果确认中拦截(人工确认直接成功)-修改接口-管理后台.md @@ -0,0 +1,70 @@ +--- +schema: "hl-changelog/v2" +ticket: "5701" +title: "登记司机确认不被「通知结果正在确认」拦截(人工确认直接成功)" +consumer: "admin" +author: "wx(GIT)" +change_type: "修改接口" +backend_status: "deployed" +gateway_status: "verified" +frontend_status: "pending" +frontend_owner: "" +frontend_ref: "" +target_release: "" +verified_at: "" +status_note: "后端完成:PR #5705 已合并 dev-v3 并部署 TEST(hl-fleet-service 双实例)。登记司机确认(MANUAL_CONTACT)不再被 605042 拦截,全链路「登记确认→confirm assigned」网关实证走通。前端交接见下(605042 场景收敛与错误提示口径)。" +updated_at: "2026-08-08" +base: "dev-v3" +generated: "2026-08-08T15:35:00+08:00" +--- + +# 登记司机确认不被「通知结果正在确认」拦截(人工确认直接成功) + +> 后端完成:PR [#5705](https://git.1814.love:8443/wx/HL/pulls/5705) 已合并 dev-v3 并部署 TEST,网关全链路验证通过。 + +## 关联 / 联系人 + +### 链接 + +- **Issue**: [#5701](https://git.1814.love:8443/wx/HL/issues/5701) +- **PR**: [#5705](https://git.1814.love:8443/wx/HL/pulls/5705) +- **Merge commit**: [43b155e14](https://git.1814.love:8443/wx/HL/commit/43b155e14) + +### 联系人 + +- **后端负责人**: @wx + +## 背景 + +派单页点「登记司机已确认」报 **605042「司机通知结果正在确认,请稍后重试」**——HOLD 通知异步发送结果仍 AMBIGUOUS(短信网关未回执)时,人工登记被拦;连锁导致 confirm 确认执行报 605020(司机确认没登记上,状态未到可确认执行)。口径(wx):车务点确认就是确认——系统不知道司机线下结果,人工登记与异步通知结果应解耦。 + +## 变更说明(无接口契约变化,行为修正) + +### `POST /admin/fleet/assignments/{assignmentId}/driver-confirmation` 行为变化 + +| 场景 | 变更前 | 变更后 | +|------|--------|--------| +| 通知结果确认中(AMBIGUOUS)+ **MANUAL_CONTACT** 人工联系登记 | 605042 拦截 | **直接登记成功** | +| 通知结果确认中(AMBIGUOUS)+ **NOTIFICATION** 通知回复来源 | 605042 拦截 | 400「无系统通知发送成功事实时必须显式选择人工联系来源」(更准确的引导) | +| 通知结果确认中 + 未显式指定来源 | 605042 拦截 | 400「无系统通知发送成功事实时必须显式选择人工联系来源」 | +| 通知已发送(SENT)/未发送(NOT_SENT/失败/取消) | 不变 | 不变 | + +### 不变的保护 + +- 其余 605042 保护点(expand 换版 / cancel / change / undo / confirm 等**通知代际推进与身份失效**场景)保留原拦截——confirm 确认执行在通知仍 AMBIGUOUS 时仍返回 605042(确认会触发新行程短信代际,与在途 HOLD 通知存在真实竞态)。 +- NOTIFICATION 来源仍需通知 SENT 事实(原有校验不变)。 + +## 前端交接 + +1. **人工登记路径**:司机线下确认后,登记请求传 `driverReplySource=MANUAL_CONTACT`(+操作人)即可直接成功,不再需要等通知结果回执或重试。 +2. **605042 在该端点不再出现**:前端可移除 driver-confirmation 的 605042 重试引导;通知未回执时若用户选「通知回复」来源,会收到 400 提示「请选择人工联系来源」,按文案展示即可。 +3. **全链路**:登记确认成功后,`POST /{assignmentId}/confirm`(确认执行)即可走通 assigned(605020 连锁消除)。 + +## 验证证据 + +- **单测**:新增 2 用例(AMBIGUOUS+MANUAL_CONTACT 登记成功并写凭证;AMBIGUOUS+未显式来源拒绝并提示人工联系),替换原 605042 拦截用例;AssignmentServiceTest **402/402 全绿**;spotless 通过 +- **fleet verify**(mvn-throttle 错峰,Docker 原生 Testcontainers):仅 `ReleaseEOccupancyMysql8033RecoveryTest` 10 个基线失败(frozen Release E V002 SHA-256 发布产物缺失,与本案无关),其余 3286 全绿 +- **部署**:hl-fleet-service 双实例 UP(15:29) +- **网关全链路**(TEST,VEHICLE_MANAGER,holding 派单 2085662146632224770): + - 构造通知 AMBIGUOUS(delivery_status=dispatching)→ `driver-confirmation` MANUAL_CONTACT 登记 → **200 直接成功**(修复前 605042)✓ + - 通知恢复终态后 `confirm` 确认执行 → **200,confirmed=true、status=assigned**、返回行程 H5 链接、车辆/司机状态置 busy ✓(605020 连锁消除)