比较提交

...
4 次代码提交
共修改 3 个文件,包含 99 行新增和 3 行删除
@@ -10,7 +10,7 @@ gateway_status: "verified"
frontend_status: "verified"
frontend_owner: "mmg"
frontend_ref: "c157cde4"
target_release: ""
target_release: "2026-08-18"
verified_at: "2026-08-18"
status_note: "后端完成:PR #6029 已合并 dev-v3(bf80a6f2ac)并部署 TEST(hl-fleet-service jar 15:29 更新、双实例重启)。bug1 看板状态派生识别「槽位清空需求」回待派车;bug2 逐日 vehicle_fee_total 按天拆分 + Flyway V20260818_001 回填存量。测试随 PR 自证。"
updated_at: "2026-08-18"
@@ -40,7 +40,7 @@ generated: "2026-08-18T15:40:00+08:00"
## 响应示例(逐日车费,bug2)
确认执行页「逐日车费」逐日单元格(`SnapshotCellVO`)字段——每天一行,关键是 **`protocolPrice`(当天派车价/协议价)现在=该天单日价**,不再是整槽总价平铺:
确认执行页「逐日车费」接口返回里,**逐日单元格数组**的每个元素 = 一天的派车明细(字段名见下,前端按字段名取)。关键是 **`protocolPrice`(当天派车价/协议价)现在=该天单日价**,不再是整槽总价平铺:
```json
{
@@ -12,7 +12,7 @@ frontend_owner: "mmg"
frontend_ref: ""
target_release: ""
verified_at: "2026-08-18"
status_note: "后端完成:PR #6049 已合并 dev-v3(4f32480f1)并部署 TEST(hl-fleet-service 双实例 18:27 重启、jar 18:27:32 更新)。后端 confirmRequirement 自 #5827 起已按槽位落地(groups[].sendItinerarySms 逐组独立创建/跳过 ITINERARY_SMS 事件),本次 #6045 正式补录 §8.3a 契约 + 测试补强(混合决策逐组事件断言 + 决策缺失 605056 拦截)。网关实测:需求级 confirm 带 null sendItinerarySms → 400「请选择是否向本段司机发送行程短信」(按槽位必填校验生效)。前端需按槽位渲染选择器、全部槽位选定后才可提交。后端契约交接:确认执行页「行程短信」由整组统一单选改为按执行段(槽位)独立选择。后端 confirmRequirement 自 #5827 起已按槽位落地(groups[].sendItinerarySms 逐组独立创建/跳过 ITINERARY_SMS 事件),本次 #6045 正式补录 §8.3a 契约 + 测试补强(混合决策逐组事件断言 + 决策缺失 605056 拦截)。前端需按槽位渲染选择器、全部槽位选定后才可提交。"
status_note: "后端完成:PR #6049 已合并 dev-v3(4f32480f1)并部署 TEST(hl-fleet-service 双实例 18:27 重启、jar 18:27:32 更新)。后端 confirmRequirement 自 #5827 起已按槽位落地(groups[].sendItinerarySms 逐组独立创建/跳过 ITINERARY_SMS 事件),本次 #6045 正式补录 §8.3a 契约 + 测试补强(混合决策逐组事件断言 + 决策缺失 605056 拦截)。网关实测:需求级 confirm 带 null sendItinerarySms → 400「请选择是否向本段司机发送行程短信」(按槽位必填校验生效)。前端需按槽位渲染选择器、全部槽位选定后才可提交。"
updated_at: "2026-08-18"
base: "dev-v3"
generated: "2026-08-18T11:20:00+08:00"
@@ -73,3 +73,10 @@ generated: "2026-08-18T11:20:00+08:00"
- `GET /admin/fleet/board/orders` → 200(fleet 服务在线)
- `POST /admin/fleet/assignments/requirements/{requirementId}/confirm` 带 `groups[].sendItinerarySms=null` → code 400「请选择是否向本段司机发送行程短信」——按槽位必选校验真实生效
- **测试**: AssignmentServiceTest 509 绿(含 #6045 新增 2 用例:两槽位混合决策逐组事件断言、决策缺失 605056 拦截)+ AssignmentControllerTest 43 绿 + FleetRedLineArchTest 13 绿 + spotless:check 绿
## 关联 / 联系人
- Issue:https://git.1814.love:8443/wx/HL/issues/6045
- PR:https://git.1814.love:8443/wx/HL/pulls/6049
- Commit(merge):https://git.1814.love:8443/wx/HL/commit/4f32480f1b
- 后端负责人:wx
@@ -0,0 +1,89 @@
---
schema: "hl-changelog/v2"
ticket: "6052"
title: "整程行改期换版 stale 详情回拨成待派车(详情 activeAssignments/vehicleSlots 补 stale 覆写)"
consumer: "admin"
author: "wx"
change_type: "修改接口"
backend_status: "deployed"
gateway_status: "verified"
frontend_status: "pending"
frontend_owner: "mmg"
frontend_ref: ""
target_release: ""
verified_at: "2026-08-18"
status_note: "后端完成:PR #6053 已合并 dev-v3(a433bfb7fa)并部署 TEST(hl-fleet-service jar 21:07、双实例 21:08 重启)。根因=C:详情组装路径(activeAssignments/vehicleSlots)不经 stale 覆写——#6014 只修了列表卡片,详情未覆盖;本单给详情两组装点补 stale 覆写(逐日/全程同判据)。board 域 238 全绿 + ArchTest 13 + spotless。网关实测复现单详情 activeAssignments/vehicleSlots 回拨 unassigned。"
updated_at: "2026-08-18"
base: "dev-v3"
generated: "2026-08-18T21:15:00+08:00"
---
# 整程行改期换版 stale 详情回拨成待派车(#6052)
## 背景
#6014 修了「改期换版后纯改期残留回拨成待派车」,但只覆盖了**看板列表卡片**(`GET /admin/fleet/board/orders` 的 `assignmentStatus`)。**订单详情接口**(`GET /admin/fleet/board/orders/{orderId}`)的 `activeAssignments` / `vehicleSlots` 是**另一条组装路径,没走 stale 覆写**——整程行(全程槽,service_date=NULL)改期换版后,详情接口仍显示「已派车(assigned)」,与列表卡片/订单侧「待配」分叉。
## 根因
详情组装(`activeAssignments` / `vehicleSlots`)只用落库状态走状态派生,**没有应用「陈旧定稿(stale)覆写」**;stale 覆写此前只存在于列表卡片与早筛。逐日切片行与整程行在详情路径共用同一断点。
## 变更接口
| 接口 | 变更 |
| --- | --- |
| `GET /admin/fleet/board/orders/{orderId}` 的 `activeAssignments[]` | **行为变更**。该需求存在陈旧定稿(`plan_finalized_requirement_id` ≠ 当前需求 ID)且可进配车流程时,`assignmentStatus` 由落库态回拨为「待派车(unassigned)」;`baseAssignmentStatus` 保留落库态(如 assigned),`availableActionCodes` 含 `ASSIGN` |
| `GET /admin/fleet/board/orders/{orderId}` 的 `vehicleSlots[]` | **行为变更**。同上口径,`slotStatus` 回拨 unassigned;`rescheduleResidue` 徽标、`canDelete`(取消/改派入口)保留 |
## 行为口径
- **状态回拨**:详情 `activeAssignments[].assignmentStatus` / `vehicleSlots[].slotStatus` 在「陈旧定稿 + 可进配车流程」时回拨成待派车,与列表卡片、订单侧对齐。
- **落库不改**:回拨只改读侧派生,`baseAssignmentStatus` 保留落库态;旧派车**不自动清除**(残留徽标 `rescheduleResidue`、取消/改派入口 `canDelete` 全保留,由车务手动清理)。
- **缺口不虚高**:列表缺口进度纯改期残留分流(unassigned=0)未动。
- **当代定稿不误伤**:`plan_finalized_requirement_id` = 当前需求 ID 时保持 assigned 不回拨。
- **V2 新槽机制**:#5810 槽位人工制——平移行保持人工现状不自动补槽,车务取消旧行后按新日期重派(同逐日切片机制)。
## 响应示例
`GET /admin/fleet/board/orders/{orderId}` → `data.activeAssignments[]`(修复后,整程行 stale 场景):
```json
{
"assignmentId": null,
"serviceDate": null,
"assignmentStatus": "unassigned",
"baseAssignmentStatus": "assigned",
"rescheduleResidue": true,
"canDelete": true,
"availableActionCodes": ["ASSIGN", "REJECT_REQUIREMENT"]
}
```
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `assignmentStatus` | String | **回拨后状态**:陈旧定稿可进配车流程时 = `unassigned`(待派车) |
| `baseAssignmentStatus` | String | 落库真实状态(如 `assigned`),不受回拨影响 |
| `rescheduleResidue` | Boolean | 是否改期残留旧日期行(true 挂「改期残留/待清理」徽标) |
| `canDelete` | Boolean | 是否可删除/取消(残留行恒 true,车务手动清理入口) |
| `availableActionCodes` | String[] | 可执行动作(回拨成待派车后含 `ASSIGN`) |
`vehicleSlots[]` 同口径:`slotStatus` 回拨 unassigned,`rescheduleResidue` / `canDelete` 保留。
## 前端动作
- 详情页 `activeAssignments` / `vehicleSlots` 直接消费 `assignmentStatus` / `slotStatus`(已是回拨后状态),`baseAssignmentStatus` 可用于显示落库真实态。
- 残留行 `rescheduleResidue=true` 时挂「改期残留」徽标,`canDelete=true` 时保留取消/改派入口。
- 列表卡片(#6014)行为不变。
## 验证证据
- 单测:BoardOrderServiceTest +2(整程行 stale 回拨 unassigned + baseAssignmentStatus=assigned + 车辆信息保留;当代定稿保持 assigned 防误伤);board 域 238 全绿 + ArchTest 13 + spotless。
- 部署:PR #6053 squash 合并 dev-v3(merge commit a433bfb7fa),Deploy Panel task c87ac963 success(jar 21:07、双实例 21:08 重启)。
- 网关实测(TEST):复现单 `2089664548595240962`(改期 V1→V2,整程行 plan_finalized_requirement_id=V1)→ 详情 `activeAssignments[0].assignmentStatus=unassigned`(待派车)、`baseAssignmentStatus=assigned`、`vehicleSlots[0].slotStatus=unassigned`、`rescheduleResidue=true`、`canDelete=true`。
## 关联 / 联系人
- Issue:https://git.1814.love:8443/wx/HL/issues/6052
- PR:https://git.1814.love:8443/wx/HL/pulls/6053
- Commit(merge):https://git.1814.love:8443/wx/HL/commit/a433bfb7fa
- 后端负责人:wx