hl-api-changelog/changelogs-v2/2026-08/06_5589_HOLD通知派车组不存在修复-修改接口-管理后台.md
API Changelog Bot cfe34b9439
一些检查失败了
changelog-filename-gate / validate (push) Failing after 2s
changelog(5589): HOLD通知派车组不存在500修复(后端完成,网关验证通过)
2026-08-06 13:23:55 +08:00

52 行
3.4 KiB
Markdown

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

---
schema: "hl-changelog/v2"
ticket: "5589"
title: "HOLD 通知派车组不存在 500 修复(全程槽占位消费组 id 回填 + 单行组查询回退)"
consumer: "admin"
change_type: "修改接口"
author: "wx(GIT)"
backend_status: "deployed"
gateway_status: "verified"
frontend_status: "not_required"
frontend_owner: ""
frontend_ref: ""
target_release: "v2.1"
verified_at: "2026-08-06"
status_note: "后端完成PR #5590 已合并 dev-v3 并部署 TEST13:20 滚动 DONE;网关验证全链路 PASSbatchCreate holdMode=1 200修复前 500 派车组不存在)、组 id 回填=行 id、通知日志/outbox 正常、司机确认→确认执行 assigned。前端无需配合。"
updated_at: "2026-08-06"
base: "dev-v3"
generated: "2026-08-06T12:50:00+08:00"
---
# HOLD 通知派车组不存在 500 修复
> **服务**: hl-fleet-service
> **PR**: [#5590](https://git.1814.love:8443/wx/HL/pulls/5590)
> **Issue**: [#5589](https://git.1814.love:8443/wx/HL/issues/5589)
> **日期**: 2026-08-06
> **影响**: 🟢 **缺陷修复**,无契约变更。管理后台 HOLD 通知派车holdMode=1此前 500「HOLD 通知派车组不存在」,本次修复后全链路可用。前端无需改代码。
## 背景
#5589P1协调台实测`batchCreate` 派单 holdMode=0直接 assigned成功,holdMode=1HOLD 通知500 `IllegalStateException: HOLD 通知派车组不存在: groupId=…`。
**根因**#5562 全程槽模型下,全程/单行占位行的 `assignment_group_id` 保持 NULL有意设计,占位消费升级`consumePlaceholderToActive`也未回填。HOLD 通知链路对单行组使用「组 id=行 id」回退语义`effectiveGroupId`),但组查询(`selectByAssignmentGroupId`)只按 `assignment_group_id` 匹配 → 查空 → 发送结果提交 500。
## 修复内容(内部,无接口/字段变化)
1. **占位消费回填组 id**`consumePlaceholderToActive` 消费单行占位时 `assignment_group_id=自身行 id`(与历史行迁移回填约定一致,新数据根治);
2. **组查询单行组回退**`selectByAssignmentGroupId` / `selectByAssignmentGroupIdForUpdate` 按组 id 查空时,回退 `assignment_id=groupId AND assignment_group_id IS NULL`(覆盖存量 NULL 组行,发送授权/结果提交/行程短信统一入口);
3. **CAS 回写回退**`markHoldNotificationSent` 按组更新 0 行时按行 id 回退更新(单行组 hold_sent_at 回写)。
## 受影响接口(行为修正,无字段增减)
```
POST /admin/fleet/assignments/batch-create holdMode=1 不再 500
POST /admin/fleet/assignment-hold-notifications (发送授权/重试对单行组可用)
```
## 验证
- 定向FleetAssignmentMapperTest 61/61+4组 id 回填/双回退、AssignmentHoldNotificationResultServiceTest 16/16+1全程单行组 commitSent、AssignmentServiceTest 372/372、HOLD 通知域 253/253;fleet 全量 3183 仅 2 个 MySQL 集成 Error 为 3306 端口竞争其他会话容器,空闲窗口补跑全绿MutationFence 2/2 + InsuranceCostFence 2/2 + ReleaseE 10/10
- 网关TEST 13:20 部署 → batchCreate holdMode=1 **200**(修复前 500→ 行 holding + 组 id 回填=行 id → HOLD 通知日志/outbox 正常(无行程短链产品降级为站内通知,非异常)→ 司机确认 driver_confirmed → 车务确认执行 **assigned + confirmedAt** → DB 对账全绿