---
schema: "hl-changelog/v2"
ticket: "5562"
title: "用车需求槽位模型改为全程槽（expand 生成按车型全程行，车务每槽派 1 辆管全程）"
consumer: "admin"
author: "wx(GIT)"
change_type: "修改接口"
backend_status: "deployed"
gateway_status: "verified"
frontend_status: "implemented"
frontend_owner: "pi-main-session"
frontend_ref: "hl-admin@0da93eaef206f5daa85b99f45ecd0fd07873d5fc"
target_release: "v2.1"
verified_at: "2026-08-06"
status_note: "后端完成：PR #5568（全程槽模型）+ #5569（换版沿用修复）已合并 dev-v3 并部署 TEST；网关验证通过（全新展开 2 条全程行 / 换版保持全程行 / 每槽派 1 辆管全程 / 整组删 removedRowCount=1 / 按天派生展示不回归）。前端槽位列表与派车交互按全程槽语义适配。"
updated_at: "2026-08-05"
base: "dev-v3"
generated: "2026-08-05T22:45:18+08:00"
---

# 用车需求槽位模型改为全程槽（expand 生成按车型全程行，车务每槽派 1 辆管全程）

> 后端完成：PR #5568/#5569 已合并 dev-v3 并部署 TEST，网关验证 7/7 通过。

## 关联 / 联系人

### 链接

- **Issue**: [#5562](https://git.1814.love:8443/wx/HL/issues/5562)
- **PR**: [#5568](https://git.1814.love:8443/wx/HL/pulls/5568)（全程槽模型）、[#5569](https://git.1814.love:8443/wx/HL/pulls/5569)（换版沿用修复）
- **Merge commit**: [e051fb93d](https://git.1814.love:8443/wx/HL/commit/e051fb93d)、[41792d8b9](https://git.1814.love:8443/wx/HL/commit/41792d8b9)

### 联系人

- **后端负责人**: @wx

## 背景（wx 口径）

槽位**数据模型本身**改为全程槽：定制师需求（例 1 SUV + 1 商务 × 4 天）→ `expand` 默认生成 **2 条全程行**（SUV 全程槽 + 商务全程槽，各覆盖整个服务期），车务在每槽派 1 辆管全程的车，槽可修改/删除。**不是**按天 8 条散装切片 + 展示层聚合。存量按天数据不迁移（兼容运行），对账/逐日展示/行程/矩阵等按天界面从全程行派生，保持不变。

## 变更接口

| 方法 | 路径 | 来源 |
|---|---|---|
| `PUT` | `/v3/admin/order/{id}/vehicle-requirement` | `VehicleRequirementAdminController`（order-v3）→ 触发 fleet expand |

路径前缀 `/v3/admin/**` 与 `/admin/fleet/**` 已由网关登录/角色校验收口，无需新增网关规则。**契约字段无变化**：需求提交 VO（fleet[] 车型组合）与既有看板/详情/候选/派车/删除接口字段全部不变，变化在 Fleet 落库模型与派生行为。

## 模型行为（fleet_assignment）

- **新展开**：每需求×车型 1 条全程行——`start_date`/`end_date` 覆盖整个服务期，`service_date`/`assignment_group_id` 均为 NULL（1SUV+1商务×4天 = 2 条 unassigned 行）
- **派车**：create/batchCreate 在全程行上直接升级为 1 条 `assigned` 全程行（每槽 1 辆管全程）；改派在槽上换车/司机
- **删除**：`DELETE /admin/fleet/assignments/slots/{slotId}` 整组删（removedRowCount=1）+ `fleet_assignment_slot_removal` 持久化防展开复活
- **换版**：服务期一致时全程行沿用（rebind 保持 group_id IS NULL）；日期变化取消重建
- **按天派生**（显示/对账/快照层不变）：看板 `dailyVehiclePlan`、矩阵、DAILY_V3 快照、Step2 canonical 候选、对账/保险均从全程行按服务期展开逐日

## 前端/调用方动作

1. 车务槽位列表默认呈现"一条管全程"的槽位（详情 `vehicleSlots[]`、看板 `assignmentSlots[]` 已是全程区间语义）；**删除按钮**调 `DELETE /admin/fleet/assignments/slots/{slotId}`（605007 已派拒绝/605012 不存在）
2. 派车弹窗按全程区间提交（`startDate`=服务开始、`endDate`=服务结束、每槽 1 辆 1 司机）；最终方案提交仍按逐日 `dailyPlan[]`（同槽各日须同一车/司机，后端整槽聚合）
3. 逐日细节（每日车/司机/价格/接送）继续用 `dailyVehiclePlan`，展示不变

## 验证证据

- 定向测试：fleet verify 全绿（3159 用例 + Testcontainers）；新增全程行展开/派车/换版沿用/DAILY_V3 派生/看板派生测试
- 网关验证（TEST）：全新展开 2 条全程行落库 → 换版保持全程行 → 每槽派 1 辆管全程（assigned 全程行）→ 整组删 removedRowCount=1 → 详情 1 条全程槽（canDelete/阻断原因）→ dailyVehiclePlan 派生 6 天不回归
- 兼容性结论：存量按天数据兼容运行（不迁移）；legacy 区间行迁移逻辑保留
