From 987d468cac96fab0e109cb57185a194d2ec1fdc7 Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Fri, 7 Aug 2026 17:07:28 +0800 Subject: [PATCH] =?UTF-8?q?docs(changelog):=20holdMode=3D0=E7=9B=B4?= =?UTF-8?q?=E6=B4=BE=E5=85=BC=E5=AE=B9=E5=85=A8=E7=A8=8B=E5=8D=A0=E4=BD=8D?= =?UTF-8?q?=E8=A1=8C=E6=8B=93=E6=89=91=E6=A0=A1=E9=AA=8C=EF=BC=88#5649?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...位行拓扑校验(修复既有缺口)-修改接口-管理后台.md | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 changelogs-v2/2026-08/07_5649_holdMode0直派兼容全程占位行拓扑校验(修复既有缺口)-修改接口-管理后台.md diff --git a/changelogs-v2/2026-08/07_5649_holdMode0直派兼容全程占位行拓扑校验(修复既有缺口)-修改接口-管理后台.md b/changelogs-v2/2026-08/07_5649_holdMode0直派兼容全程占位行拓扑校验(修复既有缺口)-修改接口-管理后台.md new file mode 100644 index 0000000..af576dc --- /dev/null +++ b/changelogs-v2/2026-08/07_5649_holdMode0直派兼容全程占位行拓扑校验(修复既有缺口)-修改接口-管理后台.md @@ -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,服务健康