feat(emergency): 新增腾讯IM验证的群成员列表接口,优化searchEmployee模糊搜索

- 新增 /order/getActualGroupMemberList 接口,先查本地参与人员再调腾讯IM验证,以交集为准
- 新增 GetGroupMemberInfoVO,封装腾讯IM get_group_member_info API响应
- TencentCloudImUtil 新增 getGroupMemberInfo 方法,TXController/IMHelloApi 新增对应端点
- GroupMemberVO 新增 isSelf 字段区分本人 (0/1),默认值 0
- searchEmployee 姓名/工号/手机号改为模糊搜索(* 包装实现)
- 修复 getActualGroupMemberList IM 调用失败时静默返回空列表的 bug,失败时降级使用本地成员
- 接口文档更新变更摘要,标明新接口替换原 /order/getGroupMemberList 地址

Co-Authored-By: Claude <noreply@anthropic.com>
@
This commit is contained in:
2026-07-07 09:29:19 +08:00
parent 74ecbe6bda
commit 945c0b46d7
9 changed files with 297 additions and 14 deletions
+43 -10
View File
@@ -6,8 +6,9 @@
|---|------|:---:|------|
| 1 | `GET /createGroupMagFirstAider` | **新增** | 急救员建群:不发起音视频通话,自动拉入关爱联络员+急救员1+急救员2 |
| 2 | `GET /order/searchExpert` | 补充 | 响应新增 `phone` 字段 |
| 3 | `GET /order/getGroupMemberList` | 补充 | 响应新增 `phone` 字段 |
| 4 | `order_operator``operatorType` | 扩展 | 新增值:3=急救人员1, 4=急救人员2, 5=关爱联络员 |
| 3 | `GET /order/searchEmployee` | 修复 | 姓名、手机号、员工编号改为模糊搜索(之前为精确匹配) |
| 4 | `GET /order/getActualGroupMemberList` | **新增** | 新增实际群成员列表接口,替换原 `/order/getGroupMemberList`。调用腾讯 IM 验证实际群成员,新增 `isSelf` 字段区分本人 |
| 5 | `GroupMemberVO` 响应 | 扩展 | 新增 `isSelf` 字段:`0`=不是本人, `1`=是本人 |
> **memberType 字典**(群成员列表中用):-1=发起人, 0=操作人员, 1=专业人员, 2=员工
@@ -180,6 +181,8 @@
### 1.7 群成员列表 `GET /order/getGroupMemberList`
> ⚠️ 本接口仅查本地 DB,不验证腾讯 IM。**建议改用 1.8 `/order/getActualGroupMemberList`。**
| 参数 | 类型 | 必填 | 说明 |
|------|------|:---:|------|
| sessionId | String | 是 | 群组ID |
@@ -205,7 +208,37 @@
| isGroupMember | `1`=在群中, `0`=可邀请 |
| memberType | `-1`=发起人, `0`=操作人员, `1`=专业人员, `2`=员工 |
### 1.8 memberType 字典
### 1.8 实际群成员列表 `GET /order/getActualGroupMemberList` 🆕
> **与 1.7 的区别**:本接口先查本地参与人员,再调用腾讯 IM `get_group_member_info` API 获取群内实际成员,以 IM 成员为准取交集,确保返回的都是 IM 群中真实存在的成员。**不过滤本人,通过 `isSelf` 标识。**
| 参数 | 类型 | 必填 | 说明 |
|------|------|:---:|------|
| sessionId | String | 是 | 群组ID |
```json
// 响应 result(与 getGroupMemberList 格式完全一致,但不过滤本人)
[
{ "orderId": "...", "userId": "当前用户id", "userName": "我", "avatar": "https://...", "phone": "13800000000", "isGroupMember": 1, "memberType": 0, "isSelf": 1 },
{ "orderId": "...", "userId": "发起人id", "userName": "李四", "avatar": "https://...", "phone": "13800000001", "isGroupMember": 1, "memberType": -1, "isSelf": 0 },
{ "orderId": "...", "userId": "专业人员id", "userName": "张医生", "avatar": "https://...", "phone": "13800000003", "isGroupMember": 1, "memberType": 1, "isSelf": 0 }
]
```
| 字段 | 说明 |
|------|------|
| orderId | 应急单ID |
| userId | 用户ID |
| userName | 姓名 |
| avatar | 头像 |
| phone | 手机号 |
| isGroupMember | 始终为 `1`(所有返回成员均经 IM 验证在群中) |
| memberType | `-1`=发起人, `0`=操作人员, `1`=专业人员, `2`=员工 |
| isSelf | `0`=不是本人, `1`=是本人 |
> **建议**:前端优先使用本接口获取群成员列表,1.7 接口后续可淘汰。
### 1.9 memberType 字典
| 值 | 含义 | 场景 |
|:---:|------|------|
@@ -222,7 +255,8 @@
GET /health-emergency/api/emergency/createGroupMag?name=xxx&longitude=xxx&latitude=xxx
2. 查看当前成员 → 搜索要拉的人 → 确认邀请 → 移除成员 → 刷新列表
(同下方急救员流程步骤 2-6)
GET /health-emergency/api/emergency/order/getActualGroupMemberList?sessionId={groupId}
(以下步骤同急救员流程)
```
**急救员(不发起通话,自动拉关爱/急救员)**
@@ -231,10 +265,9 @@
GET /health-emergency/api/emergency/createGroupMagFirstAider?name=xxx&longitude=xxx&latitude=xxx
→ 自动拉入:发起人 + 操作人员 + 专业人员 + 关爱联络员 + 急救员1 + 急救员2
2. 查看当前成员
GET /health-emergency/api/emergency/order/getGroupMemberList?sessionId={groupId}
展示群成员列表(按 memberType 区分标签展示)
→ isGroupMember=0 的显示为"可邀请"
2. 查看当前成员(🔀 替换原 /order/getGroupMemberList
GET /health-emergency/api/emergency/order/getActualGroupMemberList?sessionId={groupId}
返回经腾讯IM验证的实际群成员,新增 isSelf 字段区分本人
3. 搜索要拉的人
GET /health-emergency/api/emergency/order/searchExpert?realname=张&excludeSessionId={groupId}
@@ -249,8 +282,8 @@
POST /health-emergency/api/emergency/removeGroupUser
{"groupId": "{groupId}", "memberList": ["id1"]}
6. 刷新成员列表
GET /health-emergency/api/emergency/order/getGroupMemberList?sessionId={groupId}
6. 刷新成员列表(🔀 替换原 /order/getGroupMemberList
GET /health-emergency/api/emergency/order/getActualGroupMemberList?sessionId={groupId}
```
---