From 00f6bfd4a5f09b5f82ca89d8c9040cbcb0586b7d Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Fri, 24 Jul 2026 17:14:39 +0800 Subject: [PATCH] docs(changelog): hand off fleet board SSE refresh (#5226) --- ...求提交后实时刷新派单看板-修改接口-管理后台.md | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 changelogs-v2/2026-07/24_5226_用车需求提交后实时刷新派单看板-修改接口-管理后台.md diff --git a/changelogs-v2/2026-07/24_5226_用车需求提交后实时刷新派单看板-修改接口-管理后台.md b/changelogs-v2/2026-07/24_5226_用车需求提交后实时刷新派单看板-修改接口-管理后台.md new file mode 100644 index 0000000..ebcb0ca --- /dev/null +++ b/changelogs-v2/2026-07/24_5226_用车需求提交后实时刷新派单看板-修改接口-管理后台.md @@ -0,0 +1,97 @@ +--- +schema: "hl-changelog/v2" +ticket: "5226" +title: "用车需求提交后实时刷新派单看板" +consumer: "admin" +change_type: "修改接口" +backend_status: "deployed" +gateway_status: "verified" +frontend_status: "pending" +frontend_owner: "" +frontend_ref: "" +target_release: "hl-ui/v2.1" +verified_at: "2026-07-24T17:12:49+08:00" +status_note: "后端已部署且网关 SSE 契约已验证;管理台仍待消费 fleet-board-changed,前端状态保持 pending。" +updated_at: "2026-07-24" +base: "origin/dev-v3" +generated: "2026-07-24T16:41:16+08:00" +--- + +# 用车需求提交后实时刷新派单看板 + +> 自动草稿不会代表已验证;完成实际测试后再更新 frontmatter。 + +## 关联 + +- Issue: [wx/HL#5226](https://git.1814.love:8443/wx/HL/issues/5226) +- PR: [wx/HL#5232](https://git.1814.love:8443/wx/HL/pulls/5232) + +## 变更接口 + +| 方法 | 路径 | 来源 | +|---|---|---| +| `POST` | `/internal/notification/fleet-board/broadcast` | Fleet 事务提交后调用 user-service 的内部广播端点 | +| `GET` | `/ws/admin-msg/stream` | 既有 SSE 流新增命名事件 `fleet-board-changed` | + +## 契约影响文件 + +- `hl-fleet-service/src/main/java/com/hulalv/fleet/board/port/vo/FleetBoardChangedFeignReqVO.java` +- `hl-user-service/src/main/java/com/hulalv/user/notification/sse/vo/FleetBoardChangedReqVO.java` + +## 前端/调用方动作 + +管理台继续复用现有 `/ws/admin-msg/stream` 连接,不新建第二条 EventSource。全局 SSE +组合式函数新增命名事件监听: + +```js +eventSource.addEventListener('fleet-board-changed', onFleetBoardChanged) +``` + +事件数据示例: + +```json +{ + "type": "FLEET_BOARD", + "targetRoleKey": "VEHICLE_MANAGER", + "orderId": "2079000000000000001", + "requirementId": "2079000000000000101" +} +``` + +- 该事件是“看板数据已失效”信令,不承载订单行数据;收到后重新查询当前看板。 +- 只刷新 `getBoardSummary` 和当前页 `getBoardOrders`,保留状态、日期、车型、关键词、页码和展开状态。 +- 事件可能短时间连续到达,必须合并刷新并避免并发请求覆盖;不得每个事件各发一组请求。 +- `orderId/requirementId` 只用于定位和诊断,按 String 保存,不能转为 Number。 +- 页面不可见时先标记 dirty,恢复可见或 SSE 重连成功后刷新一次。 +- 刷新失败保留现有列表,不清空页面;沿用现有错误提示与下一次事件重试。 + +### 展示矩阵 + +| 场景 | 汇总卡 | 看板列表 | 筛选/页码 | 请求策略 | +| --- | --- | --- | --- | --- | +| 页面可见,收到一次事件 | 重新查询 | 重新查询当前页 | 完整保留 | 合并为一轮刷新 | +| 短时间收到多次事件 | 最终值更新一次 | 最终值更新一次 | 完整保留 | debounce/coalesce,禁止并发覆盖 | +| 刷新进行中又收到事件 | 当前请求完成后再补一次 | 同左 | 完整保留 | 最多保留一个 pending refresh | +| 页面隐藏时收到事件 | 暂不请求 | 暂不请求 | 完整保留 | 标记 dirty,恢复可见后刷新一次 | +| SSE 重连成功 | 重新查询 | 重新查询当前页 | 完整保留 | 主动补偿一次,覆盖断线窗口 | +| 查询失败 | 保留旧值 | 保留旧列表 | 完整保留 | 展示既有错误提示,等待重试 | +| 非车务当前角色 | 不收到事件 | 不刷新 | 不变 | 后端仅投递 `VEHICLE_MANAGER` | + +## 验证证据 + +- Fleet 定向测试:254 项通过,0 failure / 0 error。 +- User 定向测试:40 项通过,0 failure / 0 error。 +- `mvn -f hl-fleet-service/pom.xml spotless:check` 通过。 +- `mvn -pl hl-fleet-service -am verify` 通过。 +- `mvn -pl hl-user-service -am verify` 通过。 +- 事务语义:只有用车需求展开事务 `AFTER_COMMIT` 才广播;回滚不发事件,广播失败不阻断主流程。 +- 路由语义:事件名固定为 `fleet-board-changed`,仅投递当前角色为 `VEHICLE_MANAGER` 的连接。 +- 测试环境部署:`hl-user-service` 任务 `6d567b7f`、`hl-fleet-service` 任务 `561b1051` + 均成功,两个滚动实例分别恢复健康。 +- 网关/SSE:`GET /ws/admin-msg/stream` 返回 HTTP 200 和 `text/event-stream`; + `8081/8181` 两实例内部广播均返回业务码 200,未带内部令牌返回 403。 +- 实际事件:当前角色为 `VEHICLE_MANAGER` 的连接收到 `fleet-board-changed`, + `type=FLEET_BOARD`,`targetRoleKey=VEHICLE_MANAGER`,订单与需求 ID 按 String 到达。 +- 脱敏证据:`5226-gateway-sse.json`,SHA-256 + `00f3a2d441e9993ea7df706924fa792497170f1d4efee7ca190f741ca5844936`。 +- 兼容性结论:既有 SSE 事件和看板查询接口不变;未消费新命名事件的前端保持原行为。