# 房务抢单池 SSE 实时广播（新单入池/被抢/释放/加急 → 在线房务实时刷列表）

> 变更类型：✨ 实时能力（后端，**前端需接 SSE 实时刷新抢单池**）
> 端类型：管理后台（房务管家·抢单池）
> 日期：2026-06-24 ｜ 工单：#4357 ｜ PR：#4358 ｜ 服务：hl-order-service-v3 / hl-user-service（均已部署 health UP）

---

## 背景
抢单池此前列表**不实时刷新**：A 房务抢走某单后，B 房务列表还显示「抢单」按钮，点了才返 `808001 需求已被其他房务抢到`（后端 CAS 早已防并发，但前端不知情）。现加 SSE 实时广播，前端实时刷列表（已抢单自动移除）。

## 后端能力（前端需接）
抢单池任一变更 → 实时广播给在线房务（经现有 SSE 长连接 `GET /ws/admin-msg/stream`）。
- **新增 SSE 事件**：`event: grab-pool-changed`，`data` JSON 关键字段：
  - `grabPoolEvent`：`ADDED`(新单入池) / `CLAIMED`(被抢，从池移除) / `RELEASED`(释放回池) / `URGENT`(加急，重排序)
  - `orderId` / `requirementId`：变更的订单/配房需求 ID
  - `type`：`GRAB_POOL`
- **触发时机**：
  - `ADDED`：定制师提交配房需求、核心订单进抢单池（团期审核单不进池不广播）。
  - `CLAIMED`：房务抢单成功（该单应从所有人的抢单池移除）。
  - `RELEASED`：房务释放回池（该单重新出现在抢单池）。
  - `URGENT`：定制师加急/取消加急（抢单池重排序，加急单置顶）。

## 前端配合（重点）
抢单池页面**监听 SSE `grab-pool-changed` 事件**，按 `grabPoolEvent` 实时更新列表：
- `CLAIMED` → 从当前抢单池列表移除该单（`orderId`/`requirementId` 匹配），解决「已被抢还显示抢单按钮」。
- `ADDED` → 刷新/插入新入池单。
- `RELEASED` → 刷新/插回该单。
- `URGENT` → 重新拉列表（加急单置顶，配合 #4342 紧急度排序）。
- 最简实现：收到任一 `grab-pool-changed` 就**重新拉一次抢单池列表**；进阶可按事件做局部增删。
- 其他页面（非抢单池）忽略 `grab-pool-changed` 事件（广播给所有在线连接，按 event 名过滤）。

## 说明
- 后端 CAS 防并发（被抢单他人再抢返 `808001`）一直生效，本次 SSE 是**体验层**实时刷新，不改并发正确性。
- 广播给所有在线连接（抢单池变更频率低、载荷轻）；将来如需精确到房务角色再优化。

## 验证说明
- ✅ 两服务部署 health UP；order-v3 全量 4443/0/0（含 IT）、user SSE 域单测全绿。
- SSE 端到端（claim/release 触发 grab-pool-changed）建议前端接入后联调确认。
