---
schema: "hl-changelog/v2"
ticket: "5923"
title: "派单看板已取消 tab 只收订单真取消来源"
consumer: "admin"
author: "wx"
change_type: "修改接口"
backend_status: "deployed"
gateway_status: "verified"
frontend_status: "not_required"
frontend_owner: "mmg"
frontend_ref: ""
target_release: ""
verified_at: "2026-08-16"
status_note: "后端完成：PR #5978 已合并 dev-v3（dbdf2723f）并部署 TEST（hl-fleet-service 双实例 UP）。已取消 tab 列表与计数只纳入 cancel_source=order_cancelled 的派单；车务删槽/换版/占位撤销/手动取消联动取消行不再误挂。测试环境当前无取消数据故实测返回空，过滤语义由 172 单测覆盖。"
updated_at: "2026-08-16"
base: "dev-v3"
generated: "2026-08-15T21:31:00+08:00"
---

# 派单看板已取消 tab 只收订单真取消来源（#5923）

## 背景

派单看板「已取消」tab 原按 `assignment_status=canceled` 计数/展示。但 canceled 行有多种来源：订单真取消、车务删槽联动取消、换版跟随取消、占位撤销、手动取消等。按 #5828 决策，**已取消 tab 只收「订单真取消」**——订单 order_status=CANCELLED 的派单才进已取消 tab；车务删槽/换版等联动取消的派单不再误挂（否则 26-9313 这类车务操作单被误归类）。

## 实现口径

- 权威路径采用 #5924 落地的 `cancel_source` 结构化枚举（比读订单态更稳，#5924 已把订单取消事件经 internal Feign 在 fleet 单事务盖章 `cancel_source=order_cancelled`）。
- 已取消 facet 过滤：`cancel_source=order_cancelled` 才计入/展示；`manual`/`requirement_replaced`/`slot_removed`/`unassigned_placeholder_revoked`/`NULL` 一律排除。

## 变更接口

| 接口 | 变更 |
| --- | --- |
| `GET /admin/fleet/board/orders?statuses=canceled` | 已取消 facet 只返回 `cancel_source=order_cancelled` 的派单 |
| `GET /admin/fleet/board/summary` | `statusCounts.canceled` 计数口径同步只数订单真取消 |

## 行为变化

- 车务删槽/换版/占位撤销/手动取消产生的 canceled 派单，**不再**出现在已取消 tab、不计入已取消计数。
- 其它 tab（待派/排车/已派/已完结）口径不受影响。

## 前端动作

- 已取消 tab 现在只代表「订单真取消」。如前端曾对已取消 tab 做「车务操作单也在这」的提示/分类，请按新口径调整文案。

## 验证证据

- BoardOrderServiceTest 147 + BoardSummaryServiceTest 12 + FleetRedLineArchTest 13 = 172 全绿（六来源仅 order_cancelled 通过、非取消 facet 回归、计数一致），spotless 通过。
- 网关（TEST, 真 SUPER_ADMIN token）实测：`/admin/fleet/board/summary` 返回 `statusCounts.canceled=0`（测试环境当前无取消数据），`orders?statuses=canceled` 返回空——过滤语义由单测覆盖。
