---
schema: "hl-changelog/v2"
ticket: "6014"
title: "改期换版后纯改期残留回拨成待派车，订单/车务两侧状态对齐"
consumer: "admin"
author: "wx"
change_type: "修改接口"
backend_status: "deployed"
gateway_status: "verified"
frontend_status: "pending"
frontend_owner: "mmg"
frontend_ref: ""
target_release: ""
verified_at: "2026-08-18"
status_note: "后端完成：PR #6017 已合并 dev-v3（6233b8554）并部署 TEST（hl-fleet-service 已重启生效）。看板卡片状态由 recordEffectiveStatus 派生，去掉了 #5912 对纯改期残留的覆写豁免；BoardOrderServiceTest 148/0 全绿 + spotless + ArchTest 门禁绿；网关实测改期单 HL20260818092151954 待派车分面 total=1（unassigned_urgent/staleFinalizedPlan=true）/已派车分面 total=0/缺口 unassignedSlots=0 不虚高。"
updated_at: "2026-08-18"
base: "dev-v3"
generated: "2026-08-18T11:35:00+08:00"
---

# 改期换版后纯改期残留回拨成待派车，订单/车务两侧状态对齐（#6014）

## 背景

订单改出发日期后走 #5810 换版平移（只 rebind `requirement_id` + 作废定稿、不动 `service_date`），旧实派行停在旧日期、`plan_finalized_requirement_id` 指向旧版，本应按 #5851 陈旧定稿口径把看板卡片覆写成「待派车」；但 #5912 在看板卡片处引入的 `pureRescheduleResidue` 豁免让覆写失效——卡片保留「已派车」，与订单侧「待配」分叉，车务误以为已配好、不会主动重配。

## 变更接口

| 接口 | 变更 |
| --- | --- |
| `GET /admin/fleet/board/orders`（看板订单列表/各 status 分面） | **行为变更**。纯改期残留的订单卡片 `assignmentStatus` 由「已派车(assigned)」回拨为「待派车(unassigned/unassigned_urgent)」；`assignmentProgress.staleFinalizedPlan=true`、`finalizedByFleet=false` |
| `GET /admin/fleet/board/orders/{orderId}`（详情） | 同上口径 |

无新增/删除端点，入参出参结构不变，仅卡片状态派生口径变化。

## 行为口径

- **状态回拨**：去掉看板卡片处 `recordEffectiveStatus` 的 `&& !pureRescheduleResidue` 豁免，纯改期残留（在途行全部越出当前订单窗）也按 #5851 陈旧定稿口径回拨成待派车，与订单侧「待配」对齐。
- **缺口不虚高**：缺口进度（`buildAssignmentProgressByRequirement`）的纯改期残留分流保留——`unassignedSlots` 仍为 0，残留行**不**计入待派缺口（状态回拨 + 缺口不虚高，两者配套）。
- **旧派车不自动清除**（铁律）：改期残留行仍在、仍带「改期残留」徽标（`rescheduleResidue`）、仍可**手动取消/改派**（`CANCEL_ASSIGNMENT`/`CHANGE_ASSIGNMENT` 动作保留），由车务手动清理，系统不自动删。
- **605062 越窗门禁不变**：往越出当前订单窗的日期派车仍被拦截；新订单窗内日期可正常建槽派车，不死卡（`canAssign=true`）。
- **混合场景零变化**：部分行落在新窗内（非纯改期残留）本就不享受豁免、走常规换版缺口口径，本次无行为变化。

## 前端动作

- 看板各 status 分面/tab 计数直接消费返回的 `assignmentStatus` 与 `assignmentProgress`，无需前端改逻辑——纯改期残留的订单现在会出现在「待派车」分面而非「已派车」。
- 残留行的「改期残留」徽标与取消/改派入口照常渲染，引导车务先取消旧行再在新日期重派。

## 验证证据

- BoardOrderServiceTest **148/0 全绿**（新增 `queryOrders_pureRescheduleResidue_downgradesToUnassignedWithoutInflatedGap`，覆盖验收：卡片回拨 unassigned + staleFinalizedPlan + !finalizedByFleet、缺口 unassignedSlots=0 不虚高、canAssign+ACTION_ASSIGN 不死卡、残留行 ASSIGNED+含 CHANGE/CANCEL 动作可手动清、早筛与记录级口径一致——待派车分面有数、已派车分面空）；spotless + ArchTest 门禁绿。
- 独立 CR（PASS-WITH-NITS，无阻断；已补 CANCEL_ASSIGNMENT 断言闭环验收）。
- 网关实测（TEST）：改期单 `HL20260818092151954`（3 行 assigned、service_date 8-25/26/27、plan_finalized_requirement_id≠当前 requirementId）→ 待派车分面 **total=1**（`assignmentStatus=unassigned_urgent`、`staleFinalizedPlan=true`）、已派车分面 **total=0**、`unassignedSlots=0`/`assignedSlots=1`（缺口不虚高）。

## 关联 / 联系人

- Issue：https://git.1814.love:8443/wx/HL/issues/6014
- PR：https://git.1814.love:8443/wx/HL/pulls/6017
- Commit（merge）：https://git.1814.love:8443/wx/HL/commit/6233b85542
- 后端负责人：wx
