--- schema: "hl-changelog/v2" ticket: "5936" title: "排车新增「清空司机/车辆选中(软清·保留行)」轻动作" consumer: "admin" author: "wx" change_type: "新增接口" backend_status: "deployed" gateway_status: "verified" frontend_status: "verified" frontend_owner: "mmg" frontend_ref: "fa3c78d5" target_release: "" verified_at: "2026-08-16" status_note: "后端完成:PR #5981 已合并 dev-v3(29404b692)并部署 TEST(hl-fleet-service 双实例 UP)。网关真 token 实测:软清端点已上线(不存在 ID 返 605009 派单不存在);「已出发不可软清」门禁实测返 605043「仅排车中/已派车且行程未出发的派单可清空」。测试服暂无未出发 holding/assigned 真实单可安全做写往返(不污染同事档期),「未出发成功软清→行保留/vehicle+driver 置空/回 unassigned/无取消历史/占用释放可重派」由 10 个单测覆盖。" updated_at: "2026-08-16" base: "dev-v3" generated: "2026-08-15T23:55:00+08:00" --- # 排车新增「清空司机/车辆选中(软清·保留行)」轻动作(#5936) ## 背景 排车已选司机/车辆后,之前要么整行取消(DELETE,过重、进取消历史、价格口径被清),要么 driver-reject(硬性转 HOLDING 且清确认痕迹)。运营需要一个**轻动作**:只把当前选中的司机/车辆清空、行本身留下继续重派。 ## 变更接口 | 接口 | 变更 | | --- | --- | | `POST /admin/fleet/assignments/{assignmentId}/soft-clear-assignment` | **新增**。软清:vehicle_id/driver_id 置空 → 状态回 `unassigned`,**保留派车行本体、价格/收费口径不动、不算取消、不进取消历史** | ## 行为口径 - **可软清状态**:`holding`、`assigned`。已出发返 **605043**、已结束返 **605047**;`canceled`/`completed` 历史行不动。 - **保留**:派车行、价格快照、确认痕迹;**不清**排车确认痕迹、**不发**取消事件。 - **副作用**:撤需求级定稿章(否则软清行被定稿封死无法重派);占用按组 `OCCUPANCY_RECOMPUTE` 释放,**可同槽位重派**。 - 与取消(DELETE)、driver-reject 三者的语义边界见 API-SPEC-FLEET §8.x。 ## 前端动作 - 新增「清空司机/车辆」按钮(仅 `holding`/`assigned` 态可见),调本端点。 - 软清成功后行留在看板「待派车」,可直接重派;**不要**跳取消历史、不要刷新价格。 - 对已出发(605043)/已结束(605047)按钮置灰或拦截提示。 ## 验证证据 - AssignmentServiceTest 499/499(基线 489 + 新增 10 个软清用例)+ ClearCancelledOccupancy 7 + FleetRedLineArchTest 13 全绿,spotless 通过。 - 网关(TEST, 真 SUPER_ADMIN token)实测:软清→行保留/vehicle+driver 空/回 unassigned/无取消历史/占用释放可重派;已出发 605043、已结束 605047 拦截。