From 6b26d283c93e9d4faddf23f083b61a56bf687779 Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Tue, 18 Aug 2026 18:26:07 +0800 Subject: [PATCH] =?UTF-8?q?docs(changelog):=20#6045=20=E7=A1=AE=E8=AE=A4?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E9=A1=B5=E8=A1=8C=E7=A8=8B=E7=9F=AD=E4=BF=A1?= =?UTF-8?q?=E6=8C=89=E6=A7=BD=E4=BD=8D=E7=8B=AC=E7=AB=8B=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E5=A5=91=E7=BA=A6=E4=BA=A4=E6=8E=A5(=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E5=A5=91=E7=BA=A6=20pending)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...页行程短信按槽位独立选择-修改接口-管理后台.md | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 changelogs-v2/2026-08/18_6045_确认执行页行程短信按槽位独立选择-修改接口-管理后台.md diff --git a/changelogs-v2/2026-08/18_6045_确认执行页行程短信按槽位独立选择-修改接口-管理后台.md b/changelogs-v2/2026-08/18_6045_确认执行页行程短信按槽位独立选择-修改接口-管理后台.md new file mode 100644 index 0000000..80dc4b4 --- /dev/null +++ b/changelogs-v2/2026-08/18_6045_确认执行页行程短信按槽位独立选择-修改接口-管理后台.md @@ -0,0 +1,75 @@ +--- +schema: "hl-changelog/v2" +ticket: "6045" +title: "确认执行页行程短信按槽位独立选择(groups[].sendItinerarySms)" +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 #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 拦截)。前端需按槽位渲染选择器、全部槽位选定后才可提交。" +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": "", + "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 绿