89 行
7.0 KiB
Markdown
89 行
7.0 KiB
Markdown
---
|
||
schema: "hl-changelog/v2"
|
||
ticket: "5701"
|
||
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 #5705/#5716/#5719 已合并 dev-v3 并部署 TEST(hl-fleet-service 双实例)。登记司机确认(MANUAL_CONTACT)与 confirm 确认执行均不再被 605042 拦截;已冻结 HOLD 组 confirm 不再误判 605020。全链路「登记确认→confirm assigned」网关实证走通(AMBIGUOUS+已冻结组 confirm 200 assigned)。前端交接见下(605042 场景收敛与错误提示口径)。"
|
||
updated_at: "2026-08-08"
|
||
base: "dev-v3"
|
||
generated: "2026-08-08T18:15: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) / [#5716](https://git.1814.love:8443/wx/HL/pulls/5716) / [#5719](https://git.1814.love:8443/wx/HL/pulls/5719)
|
||
- **Merge commit**: [d28d2cd11](https://git.1814.love:8443/wx/HL/commit/d28d2cd11)
|
||
|
||
### 联系人
|
||
|
||
- **后端负责人**: @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/失败/取消) | 不变 | 不变 |
|
||
|
||
### `POST /admin/fleet/assignments/{assignmentId}/confirm` 行为变化(补修)
|
||
|
||
| 场景 | 变更前 | 变更后 |
|
||
|------|--------|--------|
|
||
| 通知结果确认中(AMBIGUOUS)+ 已登记司机确认 | 605042 拦截 | **直接推进 assigned**(同登记确认口径,与异步通知结果解耦) |
|
||
| 已冻结 HOLD 组(dispatch_plan_finalized=1,#5697 冻结方案常态) | **605020 误判**(组级冻结 CAS 对已冻结行幂等跳过,但断言要求全量更新,自相矛盾) | 正常推进 assigned(断言只覆盖未冻结行) |
|
||
|
||
### 不变的保护
|
||
|
||
- 其余 605042 保护点(expand 换版 / cancel / change / undo 等**通知代际推进与身份失效**场景)保留原拦截。
|
||
- NOTIFICATION 来源仍需通知 SENT 事实(原有校验不变)。
|
||
|
||
## 前端交接
|
||
|
||
1. **人工登记路径**:司机线下确认后,登记请求传 `driverReplySource=MANUAL_CONTACT`(+操作人)即可直接成功,不再需要等通知结果回执或重试。
|
||
2. **605042 在该端点不再出现**:前端可移除 driver-confirmation 的 605042 重试引导;通知未回执时若用户选「通知回复」来源,会收到 400 提示「请选择人工联系来源」,按文案展示即可。
|
||
3. **全链路**:登记确认成功后,`POST /{assignmentId}/confirm`(确认执行)即可走通 assigned(605020 连锁消除)。
|
||
|
||
## 验证证据
|
||
|
||
- **网关全链路(补修实证,TEST,holding 派单 2085978741208481793)**:通知 AMBIGUOUS(delivery_status=dispatching)+ 已冻结组(dispatch_plan_finalized=1)+ 已登记 MANUAL_CONTACT 司机确认 → `confirm` 确认执行 → **200 成功,confirmed=true、status=assigned**、返回行程 H5 链接(一次实证同时覆盖 AMBIGUOUS 放行与已冻结组 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 连锁消除)
|
||
|
||
## 前端实证确认(2026-08-08 mmg,hl-admin)
|
||
|
||
确认 not_required 属实,零代码改动:
|
||
|
||
1. **前端唯一登记路径即 MANUAL_CONTACT**:`useAssignFlow.js:121 buildDriverConfirmationSubmission` 硬编码 `driverReplySource: 'MANUAL_CONTACT'`,注释明确「此入口只供后台人工电话/微信登记;必须与通知回执事实显式隔离」。后端变更后该路径在 AMBIGUOUS 时直接成功(修复前 605042 拦截),正是本修复目标,前端天然受益。
|
||
2. **无 605042 特判可移除**:grep 全 `src/` 无任何 605042 处理或「正在确认请稍后重试」重试引导;业务错误统一走 `request.js` 弹 `body.message`,后端返回文案原样展示(交接项 2 的「可移除重试引导」前端本就不存在)。
|
||
3. **不会触发新 400**:新 400「请选择人工联系来源」仅在 NOTIFICATION 来源或未显式指定来源时出现;前端永远显式 MANUAL_CONTACT,不会命中。
|
||
4. **confirm 确认执行**(2026-08-08 补修后更新):后端补修(PR #5716/#5719)已让 confirm 在 AMBIGUOUS + 已登记司机确认时**也不再被 605042 拦截**(与登记确认同口径解耦),并修复已冻结 HOLD 组(dispatch_plan_finalized=1)confirm 误判 605020。前端实证:全 `src/` 无任何 605042 业务处理;唯一 605020 引用是 `baselineDifference.spec.js:47` 断言它**不是**基线差异错误(即不特殊处理);confirm 提交链 `useAssignFlow.js:1095 confirmAssignment` 无错误码特判,错误统一走 `request.js` 弹后端 message。补修属后端行为放宽,前端天然受益,零改动——not_required 维持不变。
|