---
schema: "hl-changelog/v2"
ticket: "6052"
title: "整程行改期换版 stale 详情回拨成待派车（详情 activeAssignments/vehicleSlots 补 stale 覆写）"
consumer: "admin"
author: "wx"
change_type: "修改接口"
backend_status: "deployed"
gateway_status: "verified"
frontend_status: "not_required"
frontend_owner: "mmg"
frontend_ref: ""
target_release: ""
verified_at: "2026-08-19"
status_note: "后端完成：PR #6053 已合并 dev-v3（a433bfb7fa）并部署 TEST（hl-fleet-service jar 21:07、双实例 21:08 重启）。根因=C：详情组装路径（activeAssignments/vehicleSlots）不经 stale 覆写——#6014 只修了列表卡片，详情未覆盖；本单给详情两组装点补 stale 覆写（逐日/全程同判据）。board 域 238 全绿 + ArchTest 13 + spotless。网关实测复现单详情 activeAssignments/vehicleSlots 回拨 unassigned。"
updated_at: "2026-08-18"
base: "dev-v3"
generated: "2026-08-18T21:15:00+08:00"
---

# 整程行改期换版 stale 详情回拨成待派车（#6052）

## 背景

#6014 修了「改期换版后纯改期残留回拨成待派车」，但只覆盖了**看板列表卡片**（`GET /admin/fleet/board/orders` 的 `assignmentStatus`）。**订单详情接口**（`GET /admin/fleet/board/orders/{orderId}`）的 `activeAssignments` / `vehicleSlots` 是**另一条组装路径，没走 stale 覆写**——整程行（全程槽，service_date=NULL）改期换版后，详情接口仍显示「已派车（assigned）」，与列表卡片/订单侧「待配」分叉。

## 根因

详情组装（`activeAssignments` / `vehicleSlots`）只用落库状态走状态派生，**没有应用「陈旧定稿（stale）覆写」**；stale 覆写此前只存在于列表卡片与早筛。逐日切片行与整程行在详情路径共用同一断点。

## 变更接口

| 接口 | 变更 |
| --- | --- |
| `GET /admin/fleet/board/orders/{orderId}` 的 `activeAssignments[]` | **行为变更**。该需求存在陈旧定稿（`plan_finalized_requirement_id` ≠ 当前需求 ID）且可进配车流程时，`assignmentStatus` 由落库态回拨为「待派车（unassigned）」；`baseAssignmentStatus` 保留落库态（如 assigned），`availableActionCodes` 含 `ASSIGN` |
| `GET /admin/fleet/board/orders/{orderId}` 的 `vehicleSlots[]` | **行为变更**。同上口径，`slotStatus` 回拨 unassigned；`rescheduleResidue` 徽标、`canDelete`（取消/改派入口）保留 |

## 行为口径

- **状态回拨**：详情 `activeAssignments[].assignmentStatus` / `vehicleSlots[].slotStatus` 在「陈旧定稿 + 可进配车流程」时回拨成待派车，与列表卡片、订单侧对齐。
- **落库不改**：回拨只改读侧派生，`baseAssignmentStatus` 保留落库态；旧派车**不自动清除**（残留徽标 `rescheduleResidue`、取消/改派入口 `canDelete` 全保留，由车务手动清理）。
- **缺口不虚高**：列表缺口进度纯改期残留分流（unassigned=0）未动。
- **当代定稿不误伤**：`plan_finalized_requirement_id` = 当前需求 ID 时保持 assigned 不回拨。
- **V2 新槽机制**：#5810 槽位人工制——平移行保持人工现状不自动补槽，车务取消旧行后按新日期重派（同逐日切片机制）。

## 响应示例

`GET /admin/fleet/board/orders/{orderId}` → `data.activeAssignments[]`（修复后，整程行 stale 场景）：

```json
{
  "assignmentId": null,
  "serviceDate": null,
  "assignmentStatus": "unassigned",
  "baseAssignmentStatus": "assigned",
  "rescheduleResidue": true,
  "canDelete": true,
  "availableActionCodes": ["ASSIGN", "REJECT_REQUIREMENT"]
}
```

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `assignmentStatus` | String | **回拨后状态**：陈旧定稿可进配车流程时 = `unassigned`（待派车） |
| `baseAssignmentStatus` | String | 落库真实状态（如 `assigned`），不受回拨影响 |
| `rescheduleResidue` | Boolean | 是否改期残留旧日期行（true 挂「改期残留/待清理」徽标） |
| `canDelete` | Boolean | 是否可删除/取消（残留行恒 true，车务手动清理入口） |
| `availableActionCodes` | String[] | 可执行动作（回拨成待派车后含 `ASSIGN`） |

`vehicleSlots[]` 同口径：`slotStatus` 回拨 unassigned，`rescheduleResidue` / `canDelete` 保留。

## 前端动作

- 详情页 `activeAssignments` / `vehicleSlots` 直接消费 `assignmentStatus` / `slotStatus`（已是回拨后状态），`baseAssignmentStatus` 可用于显示落库真实态。
- 残留行 `rescheduleResidue=true` 时挂「改期残留」徽标，`canDelete=true` 时保留取消/改派入口。
- 列表卡片（#6014）行为不变。

## 验证证据

- 单测：BoardOrderServiceTest +2（整程行 stale 回拨 unassigned + baseAssignmentStatus=assigned + 车辆信息保留；当代定稿保持 assigned 防误伤）；board 域 238 全绿 + ArchTest 13 + spotless。
- 部署：PR #6053 squash 合并 dev-v3（merge commit a433bfb7fa），Deploy Panel task c87ac963 success（jar 21:07、双实例 21:08 重启）。
- 网关实测（TEST）：复现单 `2089664548595240962`（改期 V1→V2，整程行 plan_finalized_requirement_id=V1）→ 详情 `activeAssignments[0].assignmentStatus=unassigned`（待派车）、`baseAssignmentStatus=assigned`、`vehicleSlots[0].slotStatus=unassigned`、`rescheduleResidue=true`、`canDelete=true`。

## 关联 / 联系人

- Issue：https://git.1814.love:8443/wx/HL/issues/6052
- PR：https://git.1814.love:8443/wx/HL/pulls/6053
- Commit（merge）：https://git.1814.love:8443/wx/HL/commit/a433bfb7fa
- 后端负责人：wx
