docs(changelog): holdMode=0直派兼容全程占位行拓扑校验(#5649)
所有检测均成功
changelog-filename-gate / validate (push) Successful in 1s
所有检测均成功
changelog-filename-gate / validate (push) Successful in 1s
这个提交包含在:
父节点
c810f5be2d
当前提交
987d468cac
@ -0,0 +1,70 @@
|
||||
---
|
||||
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 并部署 TEST(hl-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 verify(mvn-throttle 错峰):3243 测试仅 `ReleaseEOccupancyMysql8033RecoveryTest`(需 MySQL 8.0.33 环境)基线失败,与本案无关
|
||||
- **部署**:hl-fleet-service 双实例 UP(17:05)
|
||||
- **网关验证**:VEHICLE_MANAGER 调 `/admin/fleet/board/summary`、`/admin/fleet/reconciliation/cars` 均 200,服务健康
|
||||
正在加载...
x
在新工单中引用
屏蔽一个用户