比较提交

...
8 次代码提交
共修改 4 个文件,包含 200 行新增和 0 行删除
@@ -0,0 +1,51 @@
---
schema: "hl-changelog/v2"
ticket: "5931"
title: "看板/矩阵 Map 跨层清理 + 契约强类型化(fleetCount 下线)"
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 #5984 已合并 dev-v3(617a83dcf)并部署 TEST(user-service + order-v3 + fleet 三服务按顺序发布 UP)。fleetCount 下线/强类型化零 wire 变化由 wire 级单测覆盖;跨服务 Feign unreads[] 字段逐字段一致,容错双向安全。"
updated_at: "2026-08-16"
base: "dev-v3"
generated: "2026-08-16T00:20:00+08:00"
---
# 看板/矩阵 Map 跨层清理 + 契约强类型化(#5931)
## 背景
矩阵/看板若干出参用 `Map` 跨层(违 CODE_RULES §3 VO 强制),且部分契约字段随枚举文案漂移。本次把 Map 全部强类型化,并明确若干统计口径。**矩阵 `fleetCount` 字段删除**(前端已迁 `fleetTeamCounts`)。
## 变更接口与行为变化
| 接口 | 变更 |
| --- | --- |
| `GET /admin/fleet/matrix/grid` | 删除 `fleetCount`(旧 Map);补录 `fleetTeamCounts[]`;`statusCounts.effectiveStatusCounts` 改强类型五字段(`unassigned`/`unassigned_urgent`/`holding`/`holding_urgent`/`assigned`),**JSON 键名与历史 Map 完全一致,前端零感知** |
| `GET /admin/fleet/board/orders` | records[] 新增 `baseAssignmentStatus`(槽位落库基础态,不派生不覆写) |
| `GET /admin/fleet/board/summary` | `todayDepartCount` 口径明确为「start_date==TODAY 且代表槽位**落库** status=assigned」(陈旧定稿覆写后已派车出团不再漏计) |
| `GET /admin/fleet/dashboard/summary` | `pendingStatusCards` 固定顺序+固定中文标签(待派车/待确认),不随枚举文案漂移 |
| 看板候选游标 | 畸形游标由 500 系统异常改业务码 **605310**(请刷新后重试) |
## 前端动作
- **矩阵 `fleetCount` 已下线,勿再使用**——改用 `fleetTeamCounts`(若仍读 fleetCount 会 undefined)。
- `effectiveStatusCounts` 键名不变,零改动。
- 看板/矩阵候选操作遇 605310 提示「刷新后重试」即可。
- 其余为后端口径/健壮性修正,无前端改动。
## 内部 Feign 契约(后端三服务,前端不直连)
- `/internal/message/chat/biz-unread-batch` 出参 `unreadMap`(Map) → `unreads[]`(`{bizId, unreadCount}` 列表)。**部署顺序**:user-service 先于或同批 order-v3/fleet 发布(已按此执行)。
## 验证证据
- fleet 258 目标测试(Matrix/Board/EffectiveStatus/Dashboard 六服务)+ FleetRedLineArchTest 13 + spotless 全绿;order-v3 354 + user-service 4 全绿。
- `effectiveStatusCounts` 键名与旧 Map 一致性经 MockMvc wire 级断言;四处 ChatBizUnreadItemVO 字段逐字段比对一致。
@@ -0,0 +1,49 @@
---
schema: "hl-changelog/v2"
ticket: "5934"
title: "车务契约漂移补录:taskType/status 枚举可筛 + 状态色标口径 + 模板域 VO 分包"
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 #5980 已合并 dev-v3 并部署 TEST。属契约文档对齐 + 代码分包重构,零行为变更。补录 5 项既有实现的契约口径,前端需按补录口径对齐筛选项与状态色标。"
updated_at: "2026-08-16"
base: "dev-v3"
generated: "2026-08-15T23:56:00+08:00"
---
# 车务契约漂移补录(#5934)
## 背景
车务部分已上线实现与 API-SPEC-FLEET 文档存在漂移(实现已具备但文档未补录 / 分包不规范)。本次把 5 项**既有实现**的契约口径补录进文档,并将模板域 VO 下沉到规范子包。**零行为变更**,前端按补录口径对齐即可。
## 变更接口与行为变化(补录项,前端相关)
| 项 | 补录内容 | 前端动作 |
| --- | --- | --- |
| §3.8a.2 任务枚举 | `taskType=REFUND_CHECK`、`taskStatus=CANCELLED` 已在代码支持,可筛 | 筛选下拉补这两个枚举项 |
| §3.8a.2 状态色标 | 任务列表按钮/色标**按 `taskStatus`** 着色(非 taskType) | 按 taskStatus 做色标/按钮可用性判断 |
| §8.10 | 列表项补 `processingStatus` 字段说明 | 信息性,按需展示 |
| §8.11 | 补 `HOLD` status + retry 口径 | 信息性 |
| §11.4a | 补 render-batch 端点说明 | 信息性 |
## 纯后端(前端零感知)
- 模板域 11 个 VO 下沉 `messagetemplate.vo.admin` 子包(分包规范化,类名/字段/wire JSON 不变)。
## 前端动作
- 任务列表筛选项补 `taskType=REFUND_CHECK`、`taskStatus=CANCELLED`。
- 任务行色标/按钮口径**改用 `taskStatus`**(若之前按 taskType 判断请修正)。
## 验证证据
- 范围套件 196/196 全绿(含 FleetRedLineArchTest 13/13),spotless 通过;旧 `vo/` 包 0 残留、旧包引用 grep=0。
- #5928 §3.8a.1 `driver-policies/page` 主链完好,无回归。
@@ -0,0 +1,51 @@
---
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 全绿。
@@ -0,0 +1,49 @@
---
schema: "hl-changelog/v2"
ticket: "5936"
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 #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 拦截。