---
schema: "hl-changelog/v2"
ticket: "5572"
title: "派车全程槽删除支持已派车联动取消释放（删除按钮点击无响应修复）"
consumer: "admin"
change_type: "修改接口"
author: "wx(GIT)"
backend_status: "deployed"
gateway_status: "verified"
frontend_status: "implemented"
frontend_owner: "pi-main-session"
frontend_ref: "hl-admin@045434c1926505d7524239e00464d74e66e52d6b"
target_release: "v2.1"
verified_at: "2026-08-06"
status_note: "后端完成：PR #5576 + #5579 已合并 dev-v3 并部署 TEST；网关验证通过（已派车槽删除联动取消+释放占用 cancelledAssignmentCount=5、605007 仅剩 completed/finalized、slot_removal 防复活、修复占用上下文 500）。前端需修复删除按钮 handler 静默 return 并适配已派车槽删除交互（anchor #5572）。"
updated_at: "2026-08-06"
base: "dev-v3"
generated: "2026-08-06T00:10:04+08:00"
---

# 派车全程槽删除支持已派车联动取消释放

> **服务**: hl-fleet-service
> **PR**: [#5576](https://git.1814.love:8443/wx/HL/pulls/5576) + [#5579](https://git.1814.love:8443/wx/HL/pulls/5579)（占用上下文修复）
> **Issue**: [#5572](https://git.1814.love:8443/wx/HL/issues/5572)
> **日期**: 2026-08-06

## 背景

#5572（P1）协调台实测：26-4220 派车页已派车/待确认全程槽的「删除」按钮点击完全无响应。定位结论：

1. **前端**（hl-ui，本单交接）：`AssignModal.handleDeleteVehicleSlot` 对已派车槽（`isExistingAssignment`）或非草稿模式**静默 return**（无确认/toast），且 #5562 全程槽 changelog 前端未消费（pending）——按钮显示但点击无事件；
2. **后端**（本单修复）：删除接口对 `holding`/`assigned` 槽返回 605007，与 #5562「槽可修改/删除」口径及 #5572 验收「已派车槽位删除的联动（释放车辆/司机占用、日格清理）」冲突。

## 变更接口

| 方法 | 路径 | 来源 |
|---|---|---|
| `DELETE` | `/admin/fleet/assignments/slots/{slotId}` | `AssignmentController`（fleet） |

路径前缀 `/admin/fleet/**` 已由网关登录/角色校验与 `FleetAdminRoleGuardInterceptor`（VEHICLE_MANAGER / SUPER_ADMIN）收口，无需新增网关规则。

## 1. 删除车辆槽位 `DELETE /admin/fleet/assignments/slots/{slotId}`（口径变更）

请求参数不变：`slotId`（PathVar）+ `reason`（Body 选填 ≤200 字）。

**删除规则（业务口径，#5572 变更）**：
- **可删**（含已派车）：槽位行均为 `unassigned`/普通 `canceled` 历史，**或存在 `holding`/`assigned`（已派车/待确认）行**——删除前联动取消派车：逐行 `assigned→canceled`（CAS）+ 状态机 + 取消事件（**释放车辆/司机占用、保险退保意图、需求重开**）+ 操作日志；看板逐日派生自然过滤 canceled（日格清理）
- **拒绝（605007）**：槽位存在 `completed` 行（已完成行程保留历史），或**已最终确认方案（dispatchPlanFinalized=1）的取消行**（防 reconcile 复活 + 对账关联）
- **拒绝（605027）**：行程已出发（today > 服务开始日）的已派车槽位，与取消派单口径一致
- **605012**：槽位不存在

**删除动作（事务内）**：
1. （有已派车时）联动取消该槽全部 `holding`/`assigned` 行并释放占用
2. 软删该槽位全部 `unassigned` 每日切片（canceled 历史行保留——对账/保险 REFUND 关联不丢失）
3. `fleet_assignment_slot_removal` 写入删除意图（**条件放宽**：纯已派车槽 removed=0 也写，防重新展开复活）
4. Step2 canonical 快照：`retainedSlotIds` 移除该槽位 + `snapshotVersion` 递增 + `contentDigest` 重算
5. 派单操作日志追加 `slot_removed`（幂等键 `slot-remove:{slotId}`）

**响应 `data`（新增字段）**：

| 字段 | JSON 类型 | 说明 |
|---|---|---|
| `slotId` | string(Long) | 被删除槽位 ID |
| `requirementId` / `orderId` | string(Long) | 归属需求/订单 |
| `removedRowCount` | int | 软删除的未派单切片行数 |
| `cancelledAssignmentCount` | int | **新增**：联动取消的已派车/待确认行数（0=无已派车） |
| `retainedSlotIds` | array(string) | 删除后快照保留槽位集合 |
| `snapshotVersion` | string(Long) | 删除后快照版本（无快照为 null） |

**错误码变更**：**605007** 文案由「槽位已派车或已确认，请先取消派车后再删除」改为「槽位已完成派车或已最终确认，不可删除」；新增 **605027**（行程已出发，不能删除已派车槽位）。

## 2. 订单详情 `GET /admin/fleet/board/orders/{orderId}`（语义变更，字段不变）

`vehicleSlots[].canDelete`：已派车/待确认槽位由 `false` 改为 **`true`**（删除时联动取消释放）；仅 `completed`/finalized 取消行或订单只读时仍为 `false`。`deleteBlockReason` 文案同步更新。

## 前端/调用方动作（anchor #5572）

1. **修复删除按钮点击无响应**：`AssignModal.handleDeleteVehicleSlot` 对 `isExistingAssignment`/`!slotDraftMode` 的静默 return 需改为可见反馈；已派车槽位删除应弹二次确认（提示将联动取消派车并释放车辆/司机占用）后调 `DELETE /admin/fleet/assignments/slots/{slotId}`
2. **已派车槽位删除入口**：删除按钮 `v-if="!slot.isExistingAssignment"` 需放开至已派车槽（后端已支持联动释放）；或保留按 `canDelete` 控制并展示 605007/605027 错误 toast（**注意前端写死的 605007 文案已过时**，需改为「槽位已完成派车或已最终确认，不可删除」）
3. **#5562 全程槽语义适配**（原 pending）：全程行（service_date NULL）的 `isExistingAssignment` 判定、删除后刷新候选（`cancelledAssignmentCount` 可作删除结果提示）

## 验证证据

- 定向测试：AssignmentServiceTest 371/371（+3：已派车槽联动取消删除成功/已出发 605027/completed 605007）、BoardOrderServiceTest 84/84（已派车槽 canDelete=true）、AssignmentControllerTest 41/41；spotless:check 通过
- 网关验证（TEST）：已派车槽 DELETE 200 + cancelledAssignmentCount=5（5 条 assigned 行联动取消）+ 行全部 canceled + 占用释放 + slot_removal 持久化；修复前网关实测 500（缺 occupancy context）已由 PR #5579 修复
- 环境说明：fleet verify 3167 用例 Failures=0；MySQL 集成测试 13/13（FleetAssignmentSlotRemovalMysqlTest 3/3 + ReleaseEOccupancyMysql8033RecoveryTest 10/10，3306 竞争窗口补跑）

## 关联/联系人

### 链接

- [后端工单 #5572](https://git.1814.love:8443/wx/HL/issues/5572)
- [后端 PR #5576](https://git.1814.love:8443/wx/HL/pulls/5576) + [#5579](https://git.1814.love:8443/wx/HL/pulls/5579)
- 关联：[#5562 全程槽模型](https://git.1814.love:8443/wx/HL/issues/5562)、[#5550 槽位删除](https://git.1814.love:8443/wx/HL/issues/5550)

### 联系人

- **后端负责人**: @wx
- **前端消费**: 待认领（hl-admin）
