hl-api-changelog/changelogs-v2/2026-08/07_5649_holdMode0直派兼容全程占位行拓扑校验(修复既有缺口)-修改接口-管理后台.md
API Changelog Bot 987d468cac
所有检测均成功
changelog-filename-gate / validate (push) Successful in 1s
docs(changelog): holdMode=0直派兼容全程占位行拓扑校验(#5649)
2026-08-07 17:07:34 +08:00

71 行
3.8 KiB
Markdown

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

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

---
schema: "hl-changelog/v2"
ticket: "5649"
title: "holdMode=0直派兼容全程占位行拓扑校验修复既有缺口"
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 #5653 已合并 dev-v3 并部署 TESThl-fleet-service 双实例)。修复 holdMode=0 直派+全程占位行需求拓扑校验必挂(既有缺口,#5643 发现非回归)。无请求/响应契约变化,仅派单 finalize 内部拓扑校验逻辑兼容全程形态。"
updated_at: "2026-08-07"
base: "dev-v3"
generated: "2026-08-07T17:10:00+08:00"
---
# holdMode=0 直派兼容全程占位行拓扑校验(修复既有缺口)
> 后端完成PR #5653 已合并 dev-v3 并部署 TEST,网关验证通过。
## 关联 / 联系人
### 链接
- **Issue**: [#5649](https://git.1814.love:8443/wx/HL/issues/5649)
- **PR**: [#5653](https://git.1814.love:8443/wx/HL/pulls/5653)
- **Merge commit**: [86a8a8aa9](https://git.1814.love:8443/wx/HL/commit/86a8a8aa9)
### 联系人
- **后端负责人**: @wx
## 背景
#5643 发现的既有缺口非回归holdMode=0 直派的 batch dailyPlan 在**全程占位行需求**上必挂——`finalizeDailyBatchDispatchPlan` 期望逐日切片(`isSingleDaySlice`),但全程占位行(#5562 全程槽模型:`service_date` NULL、`startDate~endDate` 覆盖整个服务期)被整段消费后保持全程形态,只产生 `slot:startDate` 一个拓扑 key,与逐日 items`slot:start..slot:end`)不匹配,单行 `isSingleDaySlice` 校验也必挂,拓扑校验误报「最终实派方案写入不完整」。考古 274b03561288#5595 前基线同样逻辑。holdMode=1 HOLD 路径跳过 finalize 不受影响。
## 修复
`finalizeDailyBatchDispatchPlan` 拓扑校验兼容全程占位行:
1. **key 展开**:将 `isFullTripRow` 的全程行按服务期逐日展开为多个逻辑 key`slot:start..slot:end` 全部映射到同一物理行),与逐日 items 的 key 集合对齐
2. **单行校验**:合法形态从「仅 `isSingleDaySlice`」放宽为「`isSingleDaySlice || isFullTripRow`」——整段消费的全程行不再误判为写入不完整
3. **ID 去重**:全程行跨多天展开为多个逻辑 key 但对应同一物理行,`finalizedAssignmentIds` 按物理行去重(只收一次 ID,避免 `markDispatchPlanGeneration` 的 distinct 校验误报
## 变更接口
**无请求/响应契约变化**——仅派单 finalize 内部拓扑校验逻辑修复(`POST /admin/fleet/assignments/batch` 的 dailyPlan 直派路径行为修正:全程占位行需求从「必挂报错」变为「正常冻结」)。
## 行为变化
- **holdMode=0 直派 + 全程占位行需求**:从「拓扑校验必挂、报『最终实派方案写入不完整』」修复为「正常冻结最终实派方案」
- **holdMode=1 HOLD 路径**:跳过 finalize,完全不受影响
- **逐日切片路径**`isFullTripRow` 为 false 走原逻辑,行为不变
- **拓扑真缺失**仍正确报「写入不完整」key 集合不匹配时不放松校验)
## 前端/调用方动作
无需改动(仅修复了直派路径在全程占位行需求上的误报,前端调用方式不变)。
## 验证证据
- **新增 3 用例**:直派全程占位行不误报 / 直派逐日切片不受影响 / 直派拓扑缺失仍报不完整
- AssignmentServiceTest **386/386 全绿**;fleet spotless:check 通过
- fleet verifymvn-throttle 错峰3243 测试仅 `ReleaseEOccupancyMysql8033RecoveryTest`(需 MySQL 8.0.33 环境)基线失败,与本案无关
- **部署**hl-fleet-service 双实例 UP17:05
- **网关验证**VEHICLE_MANAGER 调 `/admin/fleet/board/summary``/admin/fleet/reconciliation/cars` 均 200,服务健康