---
schema: "hl-changelog/v2"
ticket: "6045"
title: "确认执行页行程短信按槽位独立选择（groups[].sendItinerarySms）"
consumer: "admin"
author: "wx"
change_type: "修改接口"
backend_status: "deployed"
gateway_status: "verified"
frontend_status: "verified"
frontend_owner: "mmg"
frontend_ref: "e94c0333"
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「请选择是否向本段司机发送行程短信」（按槽位必填校验生效）。前端需按槽位渲染选择器、全部槽位选定后才可提交。"
updated_at: "2026-08-18"
base: "dev-v3"
generated: "2026-08-18T11:20:00+08:00"
---

# 确认执行页行程短信按槽位独立选择

> 前端契约交接（#6045）。后端能力已具备（#5827 起按槽位），前端需适配 UI 与提交结构。

## 变更接口

**需求级原子确认**：`POST /admin/fleet/assignments/requirements/{requirementId}/confirm`

（整组确认执行页当前已调用；§8.3a 契约详见 API-SPEC-FLEET-V1.5）

## 入参变更（关键字段）

`groups[]` 逐槽位携带 `sendItinerarySms`（布尔，**必填**）：

```json
{
  "orderId": "1934567890123456789",
  "requestId": "fleet-confirm-20260815-001",
  "expectedRequirementVersion": 3,
  "expectedRequirementSha256": "<Board 返回的 64 位 hex>",
  "expectedPlanGeneration": 1024,
  "groups": [
    { "assignmentGroupId": "<执行段1 ID>", "sendItinerarySms": true },
    { "assignmentGroupId": "<执行段2 ID>", "sendItinerarySms": false }
  ]
}
```

## 前端要求

1. 「行程短信」区块按执行段（槽位）逐个渲染「发送短信 / 不发送短信」选择器，**逐槽位独立**提交 `groups[].sendItinerarySms`。
2. 可部分槽位发、部分槽位不发（槽位 1 发、槽位 2 不发可正常提交）。
3. **全部槽位都选定后才允许点「确认订单执行」**；任一槽位未选禁用按钮并提示（后端 605056「执行段集合已变化，请刷新后重试」兜底）。
4. 「不发送短信」文案口径沿用：「仅不发送确认后的行程短信，派单通知短信仍会发送」。
5. 单槽位订单退化为单选，行为与现状一致。
6. 出参 `groups[]` 逐组返回 `sendItinerarySms`（可回显已选状态）。

## 错误码（新增感知）

- 605056：执行段集合已变化或槽位短信决策缺失（刷新后重试，不可静默重发同 requestId 旧结构）

## 范围

- 只影响确认后的行程短信；派单通知短信（ASSIGNED 通知中心）不受影响。
- 单组确认 `POST /admin/fleet/assignments/{assignmentId}/confirm` 入参 `sendItinerarySms`（单布尔）不变，单槽位退化路径继续使用。


## 验证证据

- **PR**: #6049 squash 合并 dev-v3 → 4f32480f1（head 分支已删）
- **部署**: Deploy Panel task 9f3d36e9 success；SSH 核实 hl-fleet-service 双实例 18:27 重启（PID 4005261@8187 / 4006125@8087），jar 时间戳 2026-08-18 18:27:32，日志 Started FleetServiceApplication in 5.547s 无 ERROR
- **网关实测**（api.test.1814.love:9443，admin 登录）：
  - `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
