---
schema: "hl-changelog/v2"
ticket: "5935"
title: "排车新增「按日期清理改期残留」轻动作"
consumer: "admin"
author: "wx"
change_type: "新增接口"
backend_status: "deployed"
gateway_status: "verified"
frontend_status: "pending"
frontend_owner: ""
frontend_ref: ""
target_release: ""
verified_at: ""
status_note: "后端完成：PR #5985 已合并 dev-v3（1fe44677a）并部署 TEST（hl-fleet-service 双实例 UP）。软取消语义/范围隔离/拆行引擎复用/Step2 快照收敛/占用按子集重算由 7 个新增单测覆盖（AssignmentServiceTest 506/506 全绿）。"
updated_at: "2026-08-16"
base: "dev-v3"
generated: "2026-08-16T00:35:00+08:00"
---

# 排车新增「按日期清理改期残留」轻动作（#5935）

## 背景

需求改期后，旧日期的逐日派车切片成为「改期残留」挂在槽位上。此前要么整槽删除、要么整单取消，过重。本次新增**按日期子集**清理残留的轻动作。

## 变更接口

| 接口 | 变更 |
| --- | --- |
| `POST /admin/fleet/assignments/slots/{slotId}/clear-residue-dates` | **新增**。入参 `{serviceDates: [YYYY-MM-DD,...]}`；对命中指定旧日期的逐日切片软取消+释放当日占用，**其余日期行 vehicle/driver/价格/状态不动** |

## 行为口径

- **命中行**走完整取消链路（状态机 CANCEL + CAS + 取消事件），`cancelSource=null`（车务操作非订单真取消，#5924 口径）。
- **全程行**先拆逐日（含 PREP_DAILY_SPLIT 重绑事件防幽灵 prep 重复计费）再按子集清，不碰原全程行；未命中行不动。
- **Step2 快照** version+1、digest 重算；retained/editableServiceDates 不动。
- **占用**只按命中日期子集重算（OCCUPANCY_RECOMPUTE），不误伤全组。
- **无命中**返 **605071**「指定服务日没有在途改期残留可清理，请核对日期后重试」（非静默成功，防误以为已清）。
- 门禁：行程已结束 605047 / 需求已终止 605054 / 关账期 605600 / HOLD 通知未收敛拒关组。
- **与同族动作的边界**：本端点按日期清残留；`soft-clear-assignment`（#5936）清司机/车辆保留行；DELETE 删槽整槽移除；DELETE 整单取消。按场景选用。

## 前端动作

- 改期残留清理入口：选中槽位 + 勾选要清理的旧日期，调本端点传 `serviceDates[]`。
- 无命中（605071）提示车务核对日期；幂等 key 按 `slotId + 勾选日期原始顺序`，重复连点有效防重，但**改顺序重提等同新请求**。
- 清理成功后受影响日期回到可重派，其余日期不变。

## 验证证据

- AssignmentServiceTest 506/506（基线 489 + 本单 7 个新增用例：命中取消/其余行 never 反证/全程拆行+prep 重绑/无命中 605071/关账 605600/行程结束 605047/空参 100001）+ FleetRedLineArchTest 13 + spotless 全绿。
