--- schema: "hl-changelog/v2" ticket: "5562" title: "用车需求槽位模型改为全程槽(expand 生成按车型全程行,车务每槽派 1 辆管全程)" consumer: "admin" author: "wx(GIT)" change_type: "修改接口" backend_status: "deployed" gateway_status: "verified" frontend_status: "pending" frontend_owner: "" frontend_ref: "" target_release: "" verified_at: "" 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 区间行迁移逻辑保留