文件
hl-api-changelog/changelogs-v2/2026-08/08_5701_登记司机确认不被通知结果确认中拦截(人工确认直接成功)-修改接口-管理后台.md
T
2026-08-08 18:18:21 +08:00

7.0 KiB
原始文件 Blame 文件历史

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 事实(原有校验不变)。

前端交接

  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 维持不变。