7.0 KiB
schema, ticket, title, consumer, author, change_type, backend_status, gateway_status, frontend_status, frontend_owner, frontend_ref, target_release, verified_at, status_note, updated_at, base, generated
| schema | ticket | title | consumer | author | change_type | backend_status | gateway_status | frontend_status | frontend_owner | frontend_ref | target_release | verified_at | status_note | updated_at | base | generated |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| hl-changelog/v2 | 5701 | 登记司机确认不被「通知结果正在确认」拦截(人工确认直接成功) | admin | wx(GIT) | 修改接口 | deployed | verified | not_required | 后端完成:PR #5705/#5716/#5719 已合并 dev-v3 并部署 TEST(hl-fleet-service 双实例)。登记司机确认(MANUAL_CONTACT)与 confirm 确认执行均不再被 605042 拦截;已冻结 HOLD 组 confirm 不再误判 605020。全链路「登记确认→confirm assigned」网关实证走通(AMBIGUOUS+已冻结组 confirm 200 assigned)。前端交接见下(605042 场景收敛与错误提示口径)。 | 2026-08-08 | dev-v3 | 2026-08-08T18:15:00+08:00 |
登记司机确认不被「通知结果正在确认」拦截(人工确认直接成功)
后端完成:PR #5705 已合并 dev-v3 并部署 TEST,网关全链路验证通过。
关联 / 联系人
链接
联系人
- 后端负责人: @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 事实(原有校验不变)。
前端交接
- 人工登记路径:司机线下确认后,登记请求传
driverReplySource=MANUAL_CONTACT(+操作人)即可直接成功,不再需要等通知结果回执或重试。 - 605042 在该端点不再出现:前端可移除 driver-confirmation 的 605042 重试引导;通知未回执时若用户选「通知回复」来源,会收到 400 提示「请选择人工联系来源」,按文案展示即可。
- 全链路:登记确认成功后,
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):仅
ReleaseEOccupancyMysql8033RecoveryTest10 个基线失败(frozen Release E V002 SHA-256 发布产物缺失,与本案无关),其余 3286 全绿 -
部署:hl-fleet-service 双实例 UP(15:29)
-
网关全链路(TEST,VEHICLE_MANAGER,holding 派单 2085662146632224770):
- 构造通知 AMBIGUOUS(delivery_status=dispatching)→
driver-confirmationMANUAL_CONTACT 登记 → 200 直接成功(修复前 605042)✓ - 通知恢复终态后
confirm确认执行 → 200,confirmed=true、status=assigned、返回行程 H5 链接、车辆/司机状态置 busy ✓(605020 连锁消除)
- 构造通知 AMBIGUOUS(delivery_status=dispatching)→
前端实证确认(2026-08-08 mmg,hl-admin)
确认 not_required 属实,零代码改动:
- 前端唯一登记路径即 MANUAL_CONTACT:
useAssignFlow.js:121 buildDriverConfirmationSubmission硬编码driverReplySource: 'MANUAL_CONTACT',注释明确「此入口只供后台人工电话/微信登记;必须与通知回执事实显式隔离」。后端变更后该路径在 AMBIGUOUS 时直接成功(修复前 605042 拦截),正是本修复目标,前端天然受益。 - 无 605042 特判可移除:grep 全
src/无任何 605042 处理或「正在确认请稍后重试」重试引导;业务错误统一走request.js弹body.message,后端返回文案原样展示(交接项 2 的「可移除重试引导」前端本就不存在)。 - 不会触发新 400:新 400「请选择人工联系来源」仅在 NOTIFICATION 来源或未显式指定来源时出现;前端永远显式 MANUAL_CONTACT,不会命中。
- 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 维持不变。