# 新增「房务组长」只读监督角色 + 组长↔房务基于订单的聊天

> 变更类型：✨ 新增角色 + 新增接口（房务管家·监督视图/聊天）
> 端类型：管理后台（房务管家）
> 日期：2026-06-27 ｜ 工单：#4493 ｜ PR：#4494 ｜ 服务：hl-order-service-v3 + hl-user-service（双服务已部署测试服，house_keeper_lead 账号 API 实测通过）

---

## 一、新增角色：房务组长（house_keeper_lead）

新增 sys_role `role_key=house_keeper_lead`（房务组长）。**只读监督角色**：
- 看**全部房务**抢到的订单 + 全部房务待办（标明属哪个房务）。
- **不可任何写操作**、**不能抢单**。
- 可基于订单与对应房务在线聊天。

由超管在「管理员管理」给账号指派该角色。登录后 JWT `role=house_keeper_lead`。

---

## 二、新增：组长监督全部已抢订单

`GET /v3/admin/order/grab-pool/all-claims/hotel`（入参同「我的接单」`HouseMyOrderPageReqVO`：page/pageSize/houseStatus 等）
- **权限**：仅 `house_keeper_lead` / `SUPER_ADMIN` 可调；普通房务调用返 `808091`（无权）。
- **出参**：同「我的接单」`HouseMyOrderPageRespVO`（`total` + `stats` 全局计数 + `list[]`），**列表项新增 2 字段**：
  - `claimerId`（String，雪花）—— 该单所属房务 ID，**前端开「组长↔房务」会话时作 peerAdminId 传入**。
  - `claimerName`（String）—— 该单所属房务姓名，用于「属哪个房务」展示。

> 「我的接单」`GET .../my-claims/hotel`（房务看自己的）不变。

---

## 三、组长待办（复用现有端点）

`GET /v3/admin/order/todos?scope=all`：组长传 `scope=all` 即看全部房务待办；待办项 `ownerUserId` / `ownerName` 标明归属房务。**无需新接口、无字段变更**。

---

## 四、组长写操作一律被拒（只读铁律）

组长调用任何房务写端点（抢单 claim / 配房保存 / 单日确认 / 整体确认 / release / transfer / close / reopen / 删配房 / 改价 / 验房日志 / 水单回执 等）一律返：
- `code: 808091`「房务组长为只读监督角色，无权执行该操作」。

前端：组长视图隐藏所有操作按钮（抢单/配房/确认/释放/转单等），仅保留查看 + 聊天入口。

---

## 五、新增：组长↔房务基于订单的聊天（方案 A 独立会话）

`POST /admin/message/chat/open-house-lead`
- Body：`{ "orderId": Long, "peerAdminId": Long }` —— `peerAdminId` = 该订单房务（claimer），**前端从 all-claims 列表的 `claimerId` 取**。两者均必填。
- 行为：幂等找回/新建会话，键 = **`HOUSE_LEAD:{orderId}`**（与定制师↔房务的 `HOUSE:{orderId}` **独立隔离**，互不污染）。转单后房务变更，再调自动对齐对端。
- 出参：`ChatOpenRespVO`（`conversationKey=HOUSE_LEAD:{orderId}` + `isNew` + 对端/未读信息）。
- **后续发消息/拉线程/标已读/会话列表/未读总数全部复用现有端点**（按 `conversationKey` 工作）：
  - 发消息 `POST /admin/message/chat/{conversationKey}/messages`
  - 拉线程 `GET /admin/message/chat/{conversationKey}/messages`
  - 标已读 `POST /admin/message/chat/{conversationKey}/read`
- 房务侧：该会话出现在房务现有聊天 Tab（对端角色 `HOUSE_LEAD`「房务组长」），可正常读取与回复。`senderRole` 自动正确（组长发=HOUSE_LEAD，房务回=HOUSE）。

前端需：聊天角色徽章新增 `HOUSE_LEAD`「房务组长」；组长在订单行点「联系房务」走 `/open-house-lead`（传 orderId + claimerId）。

---

## 六、测试服实测（house_keeper_lead 账号）

组长看 all-claims（带 claimerId/claimerName）✓；纯房务调 all-claims 拒 808091 ✓；组长抢单/配房/release/reopen 全拒 808091 ✓，普通房务写不被误拦 ✓；组长 open-house-lead→`HOUSE_LEAD:{orderId}`、发消息→房务成员行建出 unread+1、房务可读可回复、与 `HOUSE:{orderId}` 隔离 ✓。

> 后端已完成并实测，前端按本单接入。
>
> 补充（#4496 已落地）：**普通房务调 all-claims 被拒的错误码为 `808092`「无权查看全部房务订单（仅房务组长或超管可查看）」**（与组长写操作被拒的 `808091`「房务组长为只读监督角色」语义区分）。前端：`808092` 出现在普通房务误调监督端点时，按普通无权提示即可。
