diff --git a/changelogs-v2/2026-08/07_5550_派单车辆槽位可删除-新增接口-管理后台.md b/changelogs-v2/2026-08/07_5550_派单车辆槽位可删除-新增接口-管理后台.md new file mode 100644 index 0000000..65589d4 --- /dev/null +++ b/changelogs-v2/2026-08/07_5550_派单车辆槽位可删除-新增接口-管理后台.md @@ -0,0 +1,74 @@ +--- +schema: "hl-changelog/v2" +ticket: "5550" +title: "派单车辆槽位可删除(车务可删任意未派单槽位含定制师傅建议的)" +consumer: "admin" +change_type: "新增接口" +author: "wx(GIT)" +backend_status: "deployed" +gateway_status: "verified" +frontend_status: "pending" +frontend_owner: "" +frontend_ref: "" +target_release: "" +verified_at: "" +status_note: "后端完成:PR #5551 已合并 dev-v3 并部署 TEST;网关验证通过(未派单槽位删除成功+关联一致、已派槽位拒绝、不存在 605012)。前端在派单页槽位操作区增加删除入口即可。" +updated_at: "2026-08-05" +base: "dev-v3" +--- + +# 车务: 派单车辆槽位可删除 + +> **服务**: hl-fleet-service +> **PR**: #5551 +> **Issue**: [#5550](https://git.1814.love:8443/wx/HL/issues/5550) +> **日期**: 2026-08-05 + +## 背景 + +派单页面车辆槽位(槽位 1/2)此前无删除入口。本次新增槽位删除能力:**车务可删除任意未派单槽位**(含定制师傅建议的),删除后日切片/Step2 canonical 快照/看板自动一致。 + +## 变更接口 + +| 方法 | 路径 | 来源 | +|---|---|---| +| `DELETE` | `/admin/fleet/assignments/slots/{slotId}` | `AssignmentController`(fleet) | + +路径前缀 `/admin/fleet/**` 已由网关登录/角色校验与 `FleetAdminRoleGuardInterceptor`(VEHICLE_MANAGER / SUPER_ADMIN)收口,无需新增网关规则。 + +## 1. 删除车辆槽位 `DELETE /admin/fleet/assignments/slots/{slotId}` + +请求参数: + +| 参数 | 类型 | 必填 | 说明 | +|---|---|---|---| +| `slotId` | string(Long) | 是 | PathVar,稳定槽位 ID(Step2 快照 retainedSlotIds 中的值) | +| `reason` | string | 否 | Body,删除原因(≤200 字,操作日志留痕) | + +**删除规则(业务口径)**: +- **可删**:槽位全部行均为 `unassigned`(未派单),或仅含普通 `canceled` 历史行(取消流水保留不删) +- **拒绝(605007)**:槽位存在 `holding`/`assigned`/`completed` 行,或**已最终确认方案(dispatchPlanFinalized=1)的取消行**——finalized 取消行会使槽位在 Step2 reconcile 中复活且关联对账,禁止删除 +- **605012**:槽位不存在 + +**删除动作(事务内)**: +1. 软删该槽位全部 `unassigned` 每日切片(canceled 历史行保留——对账/保险 REFUND 关联不丢失) +2. Step2 canonical 快照:`retainedSlotIds` 移除该槽位 + `snapshotVersion` 递增 + `contentDigest` 重算(与 Board 口径一致) +3. 派单操作日志追加 `slot_removed`(幂等键 `slot-remove:{slotId}`,按槽位幂等) + +响应 `data`: + +| 字段 | JSON 类型 | 说明 | +|---|---|---| +| `slotId` | string(Long) | 被删除槽位 ID | +| `requirementId` / `orderId` | string(Long) | 归属需求/订单 | +| `removedRowCount` | int | 软删除的未派单切片行数 | +| `retainedSlotIds` | array(string) | 删除后快照保留槽位集合 | +| `snapshotVersion` | string(Long) | 删除后快照版本(无快照为 null) | + +**错误码**:**605012** 槽位不存在 / **605007** 槽位已派车或已确认,请先取消派车后再删除 / **605008** 抢锁超时 / 401 未登录。 + +## 前端配合 + +派单页面槽位操作区增加「删除槽位」入口: +- 槽位存在已派车/已确认时后端返回 605007,前端展示错误提示并引导先取消派车; +- 删除成功后可刷新候选(canonicalSnapshot.retainedSlotIds 已收敛),无需其他联动。