80 行
5.1 KiB
Markdown
80 行
5.1 KiB
Markdown
---
|
||
schema: "hl-changelog/v2"
|
||
ticket: "5725"
|
||
title: "confirm 确认执行两路径一致解除「通知结果确认中」拦截(含原子引擎整组路径)"
|
||
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 #5726 已合并 dev-v3 并部署 TEST(hl-fleet-service 双实例)。confirm 单段与整组(需求级原子引擎)两路径一致解除 AMBIGUOUS 605042 拦截;实证 26-5484(修复前 605042)与回归 26-8917 均 confirm 200 assigned。接口响应结构不变,无前端消费变化。"
|
||
updated_at: "2026-08-08"
|
||
base: "dev-v3"
|
||
generated: "2026-08-08T21:45:00+08:00"
|
||
---
|
||
|
||
# confirm 确认执行两路径一致解除「通知结果确认中」拦截(含原子引擎整组路径)
|
||
|
||
> 后端完成:PR [#5726](https://git.1814.love:8443/wx/HL/pulls/5726) 已合并 dev-v3 并部署 TEST,网关全链路验证通过。
|
||
|
||
## 关联 / 联系人
|
||
|
||
### 链接
|
||
|
||
- **Issue**: [#5725](https://git.1814.love:8443/wx/HL/issues/5725)
|
||
- **PR**: [#5726](https://git.1814.love:8443/wx/HL/pulls/5726)
|
||
- **Merge commit**: [483cfd1ba](https://git.1814.love:8443/wx/HL/commit/483cfd1ba)
|
||
|
||
### 联系人
|
||
|
||
- **后端负责人**: @wx
|
||
|
||
## 背景
|
||
|
||
#5716 修复时只移除了单段 confirm **legacy 路径**(无派车方案代际)的「通知结果确认中」校验;**有代际的确认走需求级原子引擎路径**(`confirmSingletonThroughRequirementEngine` → `confirmRequirement`),其中 `isRequiredHoldingGroup` 分支残留同类校验,AMBIGUOUS 仍 605042。
|
||
|
||
实证对照(TEST):26-5484(单代 finalized=1 → 原子路径)confirm 被 605042 拦;26-8917(成功时刻为旧行 finalized=0/orphaned 代际 → legacy 路径)放行——同一 AMBIGUOUS 状态结果不一致的根因。
|
||
|
||
## 变更内容
|
||
|
||
`POST /admin/fleet/assignments/{assignmentId}/confirm`(单段确认执行)与需求级整组确认(内部共用原子引擎 `confirmRequirement`)在 HOLD 通知结果仍确认中(AMBIGUOUS,短信已发未回执)时,**一律不再返回 605042**,确认执行正常推进 assigned——与 #5701/#5716 已解除的单段 legacy 路径口径一致。
|
||
|
||
## 行为变化
|
||
|
||
| 场景 | 变更前 | 变更后 |
|
||
|------|--------|--------|
|
||
| HOLD 通知结果确认中(AMBIGUOUS)+ 司机已登记确认 + 单段 legacy 路径 | 200(#5716 已解除) | 200 |
|
||
| HOLD 通知结果确认中(AMBIGUOUS)+ 司机已登记确认 + **有代际(原子引擎/整组)路径** | **605042** | **200 推进 assigned** |
|
||
|
||
### 保留不变的保护
|
||
|
||
- 司机确认登记缺失(未确认/无有效来源):仍拦截(`DRIVER_CONFIRMATION_REQUIRED`)。
|
||
- NOTIFICATION 来源(司机回复系统通知)仍需通知 SENT 事实;AMBIGUOUS 下 NOTIFICATION 来源返回 400 提示人工联系来源(#5701 口径,`assertAtomicReplySourceIdentity`)。
|
||
- 其余 605042 保护点(expand 换版 / cancel / change / undo / 拒接 / 恢复通知等**通知代际推进与身份失效**场景)保留原拦截。
|
||
|
||
## 验证证据
|
||
|
||
- **网关实证(TEST,VEHICLE_MANAGER)**:
|
||
- 26-5484(订单 2086077200523558914,AID 2086077201060397057):holding + AMBIGUOUS(通知日志 delivery_status=dispatching)+ 司机已确认(21:20:15)+ 有代际 finalized=1 → `confirm`(sendItinerarySms=false)→ **200 confirmed=true status=assigned**(修复前 605042)
|
||
- 回归 26-8917(AID 2086050105051250690):同 AMBIGUOUS + 有代际 → confirm **200 confirmed=true status=assigned**
|
||
- 实证后通知日志恢复原状(canceled),两单保持 assigned 正常业务流转
|
||
- **测试**:新增 `confirmRequirement_holdNotificationAmbiguous_proceedsToAssigned`;AssignmentServiceTest 404/404 全绿;fleet verify 仅基线 ReleaseEOccupancyMysql8033RecoveryTest 失败(与本案无关)
|
||
|
||
## 前端交接
|
||
|
||
无接口契约变化(响应结构、字段、错误码集合均不变,仅 605042 出现场景收敛到既有口径)。
|
||
|
||
## 前端实证确认(2026-08-08 mmg,hl-admin)
|
||
|
||
确认 not_required 属实,零代码改动:
|
||
|
||
1. **全 `src/` 零 605042 引用**:grep 无任何 605042 特判/重试引导;confirm 业务错误统一走 `request.js` 弹后端 message,后端不再返回即前端不再展示。
|
||
2. **confirm 两路径前端入口均无 605042 处理**:单段 `useAssignFlow.js:1095 confirmAssignment` 与整组/原子引擎路径 `useAssignFlow.js:1088 confirmRequirementAssignments` 都无错误码特判,后端解除拦截后天然受益。
|
||
3. **AMBIGUOUS 前端展示与 confirm 拦截无关**:仅 `HoldNotificationStatus.vue:178/231`(发送结果标签 + canRetry fail-closed 守卫)与 `OrderDrawer.vue:708`(状态标签)消费 AMBIGUOUS,属通知发送结果展示,本变更(confirm 执行拦截)不触碰,行为不变。
|
||
4. 与 #5701(登记确认解除 605042)/#5716(confirm 单段 legacy 路径解除)同系列收尾:本条把原子引擎整组路径对齐到同一口径,前端无对应差异逻辑。
|