feat(emergency): 新增急救员建群接口,人员接口返回手机号
- 新增 GET /api/emergency/createGroupMagFirstAider(不发起通话,自动拉关爱/急救员) - createGroupMag 原始逻辑不受影响,新方法独立实现 - OrderOperator.operatorType 注释同步数据库(新增3/4/5) - EmergencyProfessionUser/GroupMemberVO 新增 phone 字段 - searchExpert/getGroupMemberList 填充手机号 - API文档-移动端接口.md 同步更新
This commit is contained in:
@@ -39,7 +39,7 @@
|
|||||||
"userId": "xxx", "realname": "张医生", "avatar": "https://...",
|
"userId": "xxx", "realname": "张医生", "avatar": "https://...",
|
||||||
"type": "6", "centerId": "xxx",
|
"type": "6", "centerId": "xxx",
|
||||||
"post": "主任医师", "school": "北京大学", "edu": "博士",
|
"post": "主任医师", "school": "北京大学", "edu": "博士",
|
||||||
"goodAt": "心血管内科", "deptName": "急诊科"
|
"goodAt": "心血管内科", "deptName": "急诊科", "phone": "13800000001"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"total": 50, "size": 10, "current": 1
|
"total": 50, "size": 10, "current": 1
|
||||||
@@ -58,6 +58,7 @@
|
|||||||
| edu | 学历 |
|
| edu | 学历 |
|
||||||
| goodAt | 擅长领域 |
|
| goodAt | 擅长领域 |
|
||||||
| deptName | 科室 |
|
| deptName | 科室 |
|
||||||
|
| phone | 手机号 |
|
||||||
|
|
||||||
### 1.2 搜索员工 `GET /order/searchEmployee`
|
### 1.2 搜索员工 `GET /order/searchEmployee`
|
||||||
|
|
||||||
@@ -105,9 +106,21 @@
|
|||||||
| latitude | String | 是 | 纬度 |
|
| latitude | String | 是 | 纬度 |
|
||||||
| type | String | 否 | 类型 |
|
| type | String | 否 | 类型 |
|
||||||
|
|
||||||
> 返回 `groupId`(群组ID),作为后续拉人接口的入参。
|
> 返回 `groupId`(群组ID),作为后续拉人接口的入参。**此接口会发起音视频通话。**
|
||||||
|
|
||||||
### 1.4 邀请进群 `POST /addGroupUser`
|
### 1.4 创建群聊-急救员 `GET /createGroupMagFirstAider` 🆕
|
||||||
|
|
||||||
|
> 不发起音视频通话,建群后自动拉入关爱联络员和急救员(通过安眼系统查询)。
|
||||||
|
|
||||||
|
| 参数 | 类型 | 必填 | 说明 |
|
||||||
|
|------|------|:---:|------|
|
||||||
|
| name | String | 是 | 群聊名称 |
|
||||||
|
| longitude | String | 是 | 经度 |
|
||||||
|
| latitude | String | 是 | 纬度 |
|
||||||
|
|
||||||
|
> 返回结构与 `createGroupMag` 一致(`CreateGroupMagVO`),群成员 = 发起人 + 操作人员 + 专业人员 + 关爱联络员 + 急救员1 + 急救员2。
|
||||||
|
|
||||||
|
### 1.5 邀请进群 `POST /addGroupUser`
|
||||||
|
|
||||||
拉专家或员工加入应急群聊。
|
拉专家或员工加入应急群聊。
|
||||||
|
|
||||||
@@ -133,7 +146,7 @@
|
|||||||
|
|
||||||
> 已在群中的人员会自动跳过,不会报错。所有选中的人都在群中时返回失败。
|
> 已在群中的人员会自动跳过,不会报错。所有选中的人都在群中时返回失败。
|
||||||
|
|
||||||
### 1.5 移除群成员 `POST /removeGroupUser`
|
### 1.6 移除群成员 `POST /removeGroupUser`
|
||||||
|
|
||||||
```json
|
```json
|
||||||
// Request Body
|
// Request Body
|
||||||
@@ -152,7 +165,7 @@
|
|||||||
|
|
||||||
> 只能移除后续拉入的协助人员,不能移除发起人和初始操作/专业人员。
|
> 只能移除后续拉入的协助人员,不能移除发起人和初始操作/专业人员。
|
||||||
|
|
||||||
### 1.6 群成员列表 `GET /order/getGroupMemberList`
|
### 1.7 群成员列表 `GET /order/getGroupMemberList`
|
||||||
|
|
||||||
| 参数 | 类型 | 必填 | 说明 |
|
| 参数 | 类型 | 必填 | 说明 |
|
||||||
|------|------|:---:|------|
|
|------|------|:---:|------|
|
||||||
@@ -161,11 +174,11 @@
|
|||||||
```json
|
```json
|
||||||
// 响应 result
|
// 响应 result
|
||||||
[
|
[
|
||||||
{ "orderId": "...", "userId": "发起人id", "userName": "李四", "avatar": "https://...", "isGroupMember": 1, "memberType": -1 },
|
{ "orderId": "...", "userId": "发起人id", "userName": "李四", "avatar": "https://...", "phone": "13800000001", "isGroupMember": 1, "memberType": -1 },
|
||||||
{ "orderId": "...", "userId": "操作人员id", "userName": "王五", "avatar": "https://...", "isGroupMember": 1, "memberType": 0 },
|
{ "orderId": "...", "userId": "操作人员id", "userName": "王五", "avatar": "https://...", "phone": "13800000002", "isGroupMember": 1, "memberType": 0 },
|
||||||
{ "orderId": "...", "userId": "专业人员id", "userName": "张医生", "avatar": "https://...", "isGroupMember": 1, "memberType": 1 },
|
{ "orderId": "...", "userId": "专业人员id", "userName": "张医生", "avatar": "https://...", "phone": "13800000003", "isGroupMember": 1, "memberType": 1 },
|
||||||
{ "orderId": "...", "userId": "员工id", "userName": "张三", "avatar": "https://...", "isGroupMember": 1, "memberType": 2 },
|
{ "orderId": "...", "userId": "员工id", "userName": "张三", "avatar": "https://...", "phone": "13800000004", "isGroupMember": 1, "memberType": 2 },
|
||||||
{ "orderId": "...", "userId": "其他专业人id", "userName": "赵医生", "avatar": "https://...", "isGroupMember": 0, "memberType": 1 }
|
{ "orderId": "...", "userId": "其他专业人id", "userName": "赵医生", "avatar": "https://...", "phone": "13800000005", "isGroupMember": 0, "memberType": 1 }
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -175,10 +188,11 @@
|
|||||||
| userId | 用户ID |
|
| userId | 用户ID |
|
||||||
| userName | 姓名 |
|
| userName | 姓名 |
|
||||||
| avatar | 头像 |
|
| avatar | 头像 |
|
||||||
|
| phone | 手机号 |
|
||||||
| isGroupMember | `1`=在群中, `0`=可邀请 |
|
| isGroupMember | `1`=在群中, `0`=可邀请 |
|
||||||
| memberType | `-1`=发起人, `0`=操作人员, `1`=专业人员, `2`=员工 |
|
| memberType | `-1`=发起人, `0`=操作人员, `1`=专业人员, `2`=员工 |
|
||||||
|
|
||||||
### 1.7 memberType 字典
|
### 1.8 memberType 字典
|
||||||
|
|
||||||
| 值 | 含义 | 场景 |
|
| 值 | 含义 | 场景 |
|
||||||
|:---:|------|------|
|
|:---:|------|------|
|
||||||
@@ -189,10 +203,21 @@
|
|||||||
|
|
||||||
### 典型调用流程
|
### 典型调用流程
|
||||||
|
|
||||||
|
**应急就医(带音视频通话)**:
|
||||||
```
|
```
|
||||||
1. 创建群聊
|
1. 创建群聊
|
||||||
GET /health-emergency/api/emergency/createGroupMag?name=xxx&longitude=xxx&latitude=xxx
|
GET /health-emergency/api/emergency/createGroupMag?name=xxx&longitude=xxx&latitude=xxx
|
||||||
|
|
||||||
|
2. 查看当前成员 → 搜索要拉的人 → 确认邀请 → 移除成员 → 刷新列表
|
||||||
|
(同下方急救员流程步骤 2-6)
|
||||||
|
```
|
||||||
|
|
||||||
|
**急救员(不发起通话,自动拉关爱/急救员)**:
|
||||||
|
```
|
||||||
|
1. 创建群聊
|
||||||
|
GET /health-emergency/api/emergency/createGroupMagFirstAider?name=xxx&longitude=xxx&latitude=xxx
|
||||||
|
→ 自动拉入:发起人 + 操作人员 + 专业人员 + 关爱联络员 + 急救员1 + 急救员2
|
||||||
|
|
||||||
2. 查看当前成员
|
2. 查看当前成员
|
||||||
GET /health-emergency/api/emergency/order/getGroupMemberList?sessionId={groupId}
|
GET /health-emergency/api/emergency/order/getGroupMemberList?sessionId={groupId}
|
||||||
→ 展示群成员列表(按 memberType 区分标签展示)
|
→ 展示群成员列表(按 memberType 区分标签展示)
|
||||||
|
|||||||
+4
@@ -130,4 +130,8 @@ public class EmergencyProfessionUser implements Serializable {
|
|||||||
// 科室名称
|
// 科室名称
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private String deptName;
|
private String deptName;
|
||||||
|
|
||||||
|
// 手机号(非持久字段,查询时填充)
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String phone;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -35,9 +35,9 @@ public class OrderOperator implements Serializable {
|
|||||||
private String orderId;
|
private String orderId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 人员类型(人员类型0:操作人员 1:专业人员)
|
* 人员类型(0:操作人员 1:专业人员 3:急救人员1 4:急救人员2 5:关爱联络员)
|
||||||
*/
|
*/
|
||||||
@Schema(title = "人员类型(人员类型0:操作人员 1:专业人员 2:员工)")
|
@Schema(title = "人员类型(0:操作人员 1:专业人员 2:员工 3:急救人员1 4:急救人员2 5:关爱联络员)")
|
||||||
private Integer operatorType;
|
private Integer operatorType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+6
@@ -48,4 +48,10 @@ public class GroupMemberVO {
|
|||||||
@Schema(title = "成员类型(-1:发起人, 0:操作人员, 1:专业人员, 2:员工)")
|
@Schema(title = "成员类型(-1:发起人, 0:操作人员, 1:专业人员, 2:员工)")
|
||||||
private Integer memberType;
|
private Integer memberType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 手机号
|
||||||
|
*/
|
||||||
|
@Schema(title = "手机号")
|
||||||
|
private String phone;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+8
@@ -104,6 +104,14 @@ public class EmergencyApiController {
|
|||||||
return Result.OK(emergencyApiService.createGroupMag(name, longitude, latitude, type));
|
return Result.OK(emergencyApiService.createGroupMag(name, longitude, latitude, type));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "创建群聊-应急就医-急救员(不发起音视频通话,自动拉入关爱联络员和急救员)")
|
||||||
|
@GetMapping(value = "/createGroupMagFirstAider")
|
||||||
|
public Result<CreateGroupMagVO> createGroupMagFirstAider(@RequestParam("name") String name,
|
||||||
|
@RequestParam("longitude") String longitude,
|
||||||
|
@RequestParam("latitude") String latitude) {
|
||||||
|
return Result.OK(emergencyApiService.createGroupMagFirstAider(name, longitude, latitude));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Operation(summary = "创建群聊-干预")
|
@Operation(summary = "创建群聊-干预")
|
||||||
@GetMapping(value = "/createGroupMagIntervene")
|
@GetMapping(value = "/createGroupMagIntervene")
|
||||||
|
|||||||
+5
@@ -33,6 +33,11 @@ public interface EmergencyApiService {
|
|||||||
|
|
||||||
CreateGroupMagVO createGroupMag(String name, String longitude, String latitude, String type);
|
CreateGroupMagVO createGroupMag(String name, String longitude, String latitude, String type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建群聊-应急就医-急救员(不发起音视频通话,额外拉入关爱联络员和急救员)
|
||||||
|
*/
|
||||||
|
CreateGroupMagVO createGroupMagFirstAider(String name, String longitude, String latitude);
|
||||||
|
|
||||||
Result<Map<String, Object>> createGroupMagIntervene(String name, String longitude, String latitude, String type);
|
Result<Map<String, Object>> createGroupMagIntervene(String name, String longitude, String latitude, String type);
|
||||||
|
|
||||||
List<String> fixOrderStatus();
|
List<String> fixOrderStatus();
|
||||||
|
|||||||
+202
@@ -7,7 +7,11 @@ import cn.hutool.core.util.ObjectUtil;
|
|||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import com.renkang.anyan.client.AnYanClient;
|
||||||
|
import com.renkang.anyan.model.dto.EmergencyContactParam;
|
||||||
|
import com.renkang.anyan.model.vo.EmergencyContactVO;
|
||||||
import com.renkang.emergency.api.service.EmergencyApiService;
|
import com.renkang.emergency.api.service.EmergencyApiService;
|
||||||
import com.renkang.emergency.bean.request.CallBack;
|
import com.renkang.emergency.bean.request.CallBack;
|
||||||
import com.renkang.emergency.bean.request.EmergencyCall;
|
import com.renkang.emergency.bean.request.EmergencyCall;
|
||||||
@@ -37,6 +41,7 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.shiro.SecurityUtils;
|
import org.apache.shiro.SecurityUtils;
|
||||||
import org.jeecg.bean.request.ListUser;
|
import org.jeecg.bean.request.ListUser;
|
||||||
|
import org.jeecg.bean.response.BaseEmployeeInfo;
|
||||||
import org.jeecg.common.api.vo.Result;
|
import org.jeecg.common.api.vo.Result;
|
||||||
import org.jeecg.common.constant.CommonConstant;
|
import org.jeecg.common.constant.CommonConstant;
|
||||||
import org.jeecg.common.exception.ExceptionAssertsUtil;
|
import org.jeecg.common.exception.ExceptionAssertsUtil;
|
||||||
@@ -45,6 +50,7 @@ import org.jeecg.common.system.vo.LoginUser;
|
|||||||
import org.jeecg.common.system.vo.LoginUserNew;
|
import org.jeecg.common.system.vo.LoginUserNew;
|
||||||
import org.jeecg.global.GlobalUtils;
|
import org.jeecg.global.GlobalUtils;
|
||||||
import org.jeecg.modules.manager.ISysCache;
|
import org.jeecg.modules.manager.ISysCache;
|
||||||
|
import org.jeecg.modules.system.entity.SysUser;
|
||||||
import org.parboiled.common.StringUtils;
|
import org.parboiled.common.StringUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -117,6 +123,8 @@ public class EmergencyApiServiceImpl implements EmergencyApiService {
|
|||||||
private OrderOperatorMapper orderOperatorMapper;
|
private OrderOperatorMapper orderOperatorMapper;
|
||||||
@Autowired
|
@Autowired
|
||||||
private EmergencyProfessionUserMapper emergencyProfessionUserMapper;
|
private EmergencyProfessionUserMapper emergencyProfessionUserMapper;
|
||||||
|
@Autowired
|
||||||
|
private AnYanClient anYanClient;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -887,6 +895,200 @@ public class EmergencyApiServiceImpl implements EmergencyApiService {
|
|||||||
return createGroupMagVO;
|
return createGroupMagVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
@Override
|
||||||
|
public CreateGroupMagVO createGroupMagFirstAider(String name, String longitude, String latitude) {
|
||||||
|
CreateGroupMagVO createGroupMagVO = new CreateGroupMagVO();
|
||||||
|
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
||||||
|
//查是否有已经存在的应急工单,有则直接返回相关信息
|
||||||
|
Order order = emergencyResourceApiServiceImpl.sessionNowSession(sysUser.getId());
|
||||||
|
List<String> userList = new ArrayList<>();
|
||||||
|
if (order != null) {
|
||||||
|
createGroupMagVO.setUserId(sysUser.getId());
|
||||||
|
createGroupMagVO.setGroupId(order.getSessionId());
|
||||||
|
createGroupMagVO.setTfNew("0");
|
||||||
|
userList.add(order.getOperationUserId());
|
||||||
|
userList.add(order.getMajorUserId());
|
||||||
|
if (null != order.getMajorUserTwoId()) {
|
||||||
|
userList.add(order.getMajorUserTwoId());
|
||||||
|
}
|
||||||
|
createGroupMagVO.setMember(userList);
|
||||||
|
createGroupMagVO.setId(order.getId());
|
||||||
|
return createGroupMagVO;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询当前应急中心值班人员
|
||||||
|
Call rs = this.officerOnDuty();
|
||||||
|
if (rs == null || CollectionUtils.isEmpty(rs.getMajors()) || CollectionUtils.isEmpty(rs.getOperators())) {
|
||||||
|
ExceptionAssertsUtil.fail("没有接受方人员!");
|
||||||
|
}
|
||||||
|
String majorsId = rs.getMajors().get(0).getUserId();
|
||||||
|
String operatorsId = rs.getOperators().get(0).getUserId();
|
||||||
|
String majorsTwoId = null;
|
||||||
|
userList.add(operatorsId);
|
||||||
|
userList.add(majorsId);
|
||||||
|
List<String> yesIds = new ArrayList<>();
|
||||||
|
yesIds.add(sysUser.getId());
|
||||||
|
yesIds.add(majorsId);
|
||||||
|
yesIds.add(operatorsId);
|
||||||
|
//获取参与应急的人员信息
|
||||||
|
ConSessionRequestDO conSessionRequestDO = selectConSessionRequestDO(yesIds, "", name);
|
||||||
|
conSessionRequestDO.setUserId(sysUser.getId());
|
||||||
|
//调用IM创建群组
|
||||||
|
Result<Map<String, Object>> imrs = iMHelloApi.creatGroupMagNew(conSessionRequestDO);
|
||||||
|
if (!imrs.isSuccess()) {
|
||||||
|
ExceptionAssertsUtil.fail("应急单创建失败");
|
||||||
|
}
|
||||||
|
String sessionId = (String) imrs.getResult().get("groupId");
|
||||||
|
createGroupMagVO.setGroupId(sessionId);
|
||||||
|
//直接保存应急工单(不发起点对点音视频通话)
|
||||||
|
String orderId = insertOrderForFirstAider(sysUser, Double.valueOf(longitude), Double.valueOf(latitude), rs.getCenterId());
|
||||||
|
//拉入关爱联络员和急救人员
|
||||||
|
addCareUsersToGroup(sysUser.getId(), sessionId, orderId);
|
||||||
|
//保存参与应急的人员信息
|
||||||
|
saveOderOperationInfo(orderId, sessionId, majorsId, operatorsId, majorsTwoId, rs.getCenterId(), conSessionRequestDO.getAccountList());
|
||||||
|
imrs.getResult().put("member", userList);
|
||||||
|
imrs.getResult().put("tfNew", "1");
|
||||||
|
imrs.getResult().put("id", orderId);
|
||||||
|
createGroupMagVO.setMember(userList);
|
||||||
|
createGroupMagVO.setTfNew("1");
|
||||||
|
createGroupMagVO.setId(orderId);
|
||||||
|
return createGroupMagVO;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 急救员场景插入工单(不触发大屏推送和短信)
|
||||||
|
*/
|
||||||
|
private String insertOrderForFirstAider(LoginUser loginUser, Double longitude, Double latitude, String centerId) {
|
||||||
|
Order order = new Order();
|
||||||
|
order.setInitiatorType("4");
|
||||||
|
order.setIsFill(EmergencyConstants.ORDER_IS_FILL_0);
|
||||||
|
// 发起人
|
||||||
|
order.setInitiatorUserId(loginUser.getId());
|
||||||
|
order.setInitiatorUserSex(String.valueOf(loginUser.getSex()));
|
||||||
|
order.setInitiatorUserName(loginUser.getRealname());
|
||||||
|
order.setInitiatorUserMobile(loginUser.getPhone());
|
||||||
|
order.setInitiatorUserIdCard(loginUser.getIdCard());
|
||||||
|
order.setInitiatorLongitude(BigDecimal.valueOf(longitude));
|
||||||
|
order.setInitiatorLatitude(BigDecimal.valueOf(latitude));
|
||||||
|
order.setInitiatorUserDepart(loginUser.getOrgCode());
|
||||||
|
order.setInitiatorUserAvatar(loginUser.getAvatar());
|
||||||
|
// 救助人
|
||||||
|
order.setSalvageUserId(loginUser.getId());
|
||||||
|
order.setSalvageUserSex(String.valueOf(loginUser.getSex()));
|
||||||
|
order.setSalvageUserName(loginUser.getRealname());
|
||||||
|
order.setSalvageUserMobile(loginUser.getPhone());
|
||||||
|
order.setSalvageUserIdCard(loginUser.getIdCard());
|
||||||
|
order.setSalvageUserDepart(loginUser.getOrgCode());
|
||||||
|
order.setSalvageUserAvatar(loginUser.getAvatar());
|
||||||
|
order.setCenterId(centerId);
|
||||||
|
orderMapper.insert(order);
|
||||||
|
return order.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 拉入关爱联络员和急救人员到群聊
|
||||||
|
* <p>通过手机号匹配安眼系统联系人 → 本系统用户ID</p>
|
||||||
|
*
|
||||||
|
* @param userId 发起人ID
|
||||||
|
* @param groupId IM群组ID
|
||||||
|
* @param orderId 应急工单ID
|
||||||
|
*/
|
||||||
|
private void addCareUsersToGroup(String userId, String groupId, String orderId) {
|
||||||
|
try {
|
||||||
|
// 1. 获取发起人工号
|
||||||
|
List<BaseEmployeeInfo> employeeInfos = sysBaseAPI.queryBaseEmployeeInfo(Collections.singleton(userId));
|
||||||
|
if (CollUtil.isEmpty(employeeInfos)) {
|
||||||
|
log.warn("未找到发起人的员工信息,跳过拉入关爱/急救人员, userId={}", userId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String workNo = employeeInfos.get(0).getWorkNo();
|
||||||
|
if (StrUtil.isBlank(workNo)) {
|
||||||
|
log.warn("发起人工号为空,跳过拉入关爱/急救人员, userId={}", userId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 查安眼系统获取关爱联络员和急救人员信息
|
||||||
|
EmergencyContactParam param = new EmergencyContactParam();
|
||||||
|
param.setEmployeeNum(workNo);
|
||||||
|
IPage<EmergencyContactVO> page = anYanClient.queryEmergencyContact(param);
|
||||||
|
if (page == null || CollUtil.isEmpty(page.getRecords())) {
|
||||||
|
log.warn("安眼系统未查到关爱/急救人员信息, workNo={}", workNo);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
EmergencyContactVO contact = page.getRecords().get(0);
|
||||||
|
|
||||||
|
// 3. 收集3个人的手机号 → 角色映射
|
||||||
|
Map<String, Integer> phoneRoleMap = new LinkedHashMap<>();
|
||||||
|
if (StrUtil.isNotBlank(contact.getRelationEmpPhone())) {
|
||||||
|
phoneRoleMap.put(contact.getRelationEmpPhone(), 5); // 关爱联络员
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(contact.getFirstAiderPhone())) {
|
||||||
|
phoneRoleMap.put(contact.getFirstAiderPhone(), 3); // 急救人员1
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(contact.getFirstAiderPhone2())) {
|
||||||
|
phoneRoleMap.put(contact.getFirstAiderPhone2(), 4); // 急救人员2
|
||||||
|
}
|
||||||
|
if (phoneRoleMap.isEmpty()) {
|
||||||
|
log.warn("关爱/急救人员手机号均为空, workNo={}", workNo);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4. 手机号反查本系统用户ID
|
||||||
|
List<String> phones = new ArrayList<>(phoneRoleMap.keySet());
|
||||||
|
Result<List<SysUser>> userResult = sysBaseAPI.getUserByPhoneList(phones);
|
||||||
|
if (!userResult.isSuccess() || CollUtil.isEmpty(userResult.getResult())) {
|
||||||
|
log.warn("关爱/急救人员手机号均未匹配到本系统用户, phones={}", phones);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List<SysUser> sysUsers = userResult.getResult();
|
||||||
|
log.info("关爱/急救人员手机号匹配到{}个系统用户, phones={}", sysUsers.size(), phones);
|
||||||
|
|
||||||
|
// 5. 拉入IM群聊
|
||||||
|
List<String> memberAccounts = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
|
||||||
|
AddGroupMemberDTO addDto = new AddGroupMemberDTO();
|
||||||
|
addDto.setGroupId(groupId);
|
||||||
|
addDto.setSilence(1);
|
||||||
|
addDto.setMemberList(memberAccounts.stream().map(account -> {
|
||||||
|
AddGroupMemberDTO.MemberListDTO m = new AddGroupMemberDTO.MemberListDTO();
|
||||||
|
m.setMemberAccount(account);
|
||||||
|
return m;
|
||||||
|
}).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
try {
|
||||||
|
iMHelloApi.addGroupMember(addDto);
|
||||||
|
log.info("关爱/急救人员拉入群聊成功, groupId={}, userIds={}", groupId, memberAccounts);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("关爱/急救人员拉入群聊失败, groupId={}, userIds={}", groupId, memberAccounts, e);
|
||||||
|
// IM拉人失败不影响建群流程,继续写入 order_operator
|
||||||
|
}
|
||||||
|
|
||||||
|
// 6. 写入 order_operator 表
|
||||||
|
Date now = new Date();
|
||||||
|
Map<String, Integer> userIdRoleMap = new HashMap<>();
|
||||||
|
for (SysUser sysUser : sysUsers) {
|
||||||
|
for (Map.Entry<String, Integer> entry : phoneRoleMap.entrySet()) {
|
||||||
|
if (entry.getKey().equals(sysUser.getPhone())) {
|
||||||
|
userIdRoleMap.put(sysUser.getId(), entry.getValue());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (Map.Entry<String, Integer> entry : userIdRoleMap.entrySet()) {
|
||||||
|
OrderOperator orderOperator = new OrderOperator();
|
||||||
|
orderOperator.setOrderId(orderId);
|
||||||
|
orderOperator.setOperatorType(entry.getValue());
|
||||||
|
orderOperator.setUserId(entry.getKey());
|
||||||
|
orderOperator.setJoinType(1);
|
||||||
|
orderOperator.setJoinDate(now);
|
||||||
|
orderOperatorMapper.insert(orderOperator);
|
||||||
|
log.info("写入order_operator, orderId={}, userId={}, operatorType={}", orderId, entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("拉入关爱/急救人员异常,不影响建群主流程, userId={}, groupId={}, orderId={}", userId, groupId, orderId, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void saveOderOperationInfo(String orderId, String sessionId, String majorsId, String operatorsId, String majorsTwoId,
|
public void saveOderOperationInfo(String orderId, String sessionId, String majorsId, String operatorsId, String majorsTwoId,
|
||||||
String centerId, List<LoginUserNew> accountList) {
|
String centerId, List<LoginUserNew> accountList) {
|
||||||
Map<String, LoginUserNew> userMap = accountList.stream().collect(Collectors.toMap(LoginUserNew::getId, user -> user));
|
Map<String, LoginUserNew> userMap = accountList.stream().collect(Collectors.toMap(LoginUserNew::getId, user -> user));
|
||||||
|
|||||||
+24
-2
@@ -623,6 +623,7 @@ public class EmergencyOrderApiServiceImpl implements EmergencyOrderApiService {
|
|||||||
order.getInitiatorUserId(),
|
order.getInitiatorUserId(),
|
||||||
order.getInitiatorUserName(),
|
order.getInitiatorUserName(),
|
||||||
order.getInitiatorUserAvatar(),
|
order.getInitiatorUserAvatar(),
|
||||||
|
order.getInitiatorUserMobile(),
|
||||||
1, -1);
|
1, -1);
|
||||||
|
|
||||||
// 已加入应急单人员
|
// 已加入应急单人员
|
||||||
@@ -662,19 +663,22 @@ public class EmergencyOrderApiServiceImpl implements EmergencyOrderApiService {
|
|||||||
for (OrderOperator op : orderOperators) {
|
for (OrderOperator op : orderOperators) {
|
||||||
String userName = "";
|
String userName = "";
|
||||||
String avatar = "";
|
String avatar = "";
|
||||||
|
String phone = "";
|
||||||
EmergencyProfessionUser profUser = profUserMap.get(op.getUserId());
|
EmergencyProfessionUser profUser = profUserMap.get(op.getUserId());
|
||||||
if (profUser != null) {
|
if (profUser != null) {
|
||||||
userName = profUser.getRealname();
|
userName = profUser.getRealname();
|
||||||
avatar = profUser.getAvatar();
|
avatar = profUser.getAvatar();
|
||||||
|
phone = profUser.getPhone();
|
||||||
} else {
|
} else {
|
||||||
LoginUserNew sysUser = sysUserMap.get(op.getUserId());
|
LoginUserNew sysUser = sysUserMap.get(op.getUserId());
|
||||||
if (sysUser != null) {
|
if (sysUser != null) {
|
||||||
userName = sysUser.getRealname();
|
userName = sysUser.getRealname();
|
||||||
avatar = sysUser.getAvatar();
|
avatar = sysUser.getAvatar();
|
||||||
|
phone = sysUser.getPhone();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
handleGroupMember(groupMemberVos, orderId,
|
handleGroupMember(groupMemberVos, orderId,
|
||||||
op.getUserId(), userName, avatar, 1, op.getOperatorType());
|
op.getUserId(), userName, avatar, phone, 1, op.getOperatorType());
|
||||||
}
|
}
|
||||||
|
|
||||||
// 其他专业人员(排除已在应急单中的用户),memberType=1
|
// 其他专业人员(排除已在应急单中的用户),memberType=1
|
||||||
@@ -685,22 +689,37 @@ public class EmergencyOrderApiServiceImpl implements EmergencyOrderApiService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<EmergencyProfessionUser> otherMajorMemberList = emergencyProfessionUserMapper.selectList(otherMajorQuery);
|
List<EmergencyProfessionUser> otherMajorMemberList = emergencyProfessionUserMapper.selectList(otherMajorQuery);
|
||||||
|
// 批量查手机号
|
||||||
|
Map<String, String> otherMajorPhoneMap = new HashMap<>();
|
||||||
|
if (!otherMajorMemberList.isEmpty()) {
|
||||||
|
List<String> otherMajorUserIds = otherMajorMemberList.stream()
|
||||||
|
.map(EmergencyProfessionUser::getUserId).collect(Collectors.toList());
|
||||||
|
Map<String, LoginUserNew> otherUserMap = emergencyCloudManager.listUser(otherMajorUserIds);
|
||||||
|
for (EmergencyProfessionUser m : otherMajorMemberList) {
|
||||||
|
LoginUserNew u = otherUserMap.get(m.getUserId());
|
||||||
|
if (u != null) {
|
||||||
|
otherMajorPhoneMap.put(m.getUserId(), u.getPhone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
otherMajorMemberList.forEach(otherMajorMember ->
|
otherMajorMemberList.forEach(otherMajorMember ->
|
||||||
handleGroupMember(groupMemberVos, orderId,
|
handleGroupMember(groupMemberVos, orderId,
|
||||||
otherMajorMember.getUserId(),
|
otherMajorMember.getUserId(),
|
||||||
otherMajorMember.getRealname(),
|
otherMajorMember.getRealname(),
|
||||||
otherMajorMember.getAvatar(),
|
otherMajorMember.getAvatar(),
|
||||||
|
otherMajorPhoneMap.get(otherMajorMember.getUserId()),
|
||||||
0, 1)
|
0, 1)
|
||||||
);
|
);
|
||||||
return groupMemberVos.stream().filter(groupMemberVO -> !groupMemberVO.getUserId().equals(loginUser.getId())).collect(Collectors.toList());
|
return groupMemberVos.stream().filter(groupMemberVO -> !groupMemberVO.getUserId().equals(loginUser.getId())).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handleGroupMember(List<GroupMemberVO> groupMemberVos, String orderId, String userId, String userName, String avatar, Integer isGroupMember, Integer memberType) {
|
public void handleGroupMember(List<GroupMemberVO> groupMemberVos, String orderId, String userId, String userName, String avatar, String phone, Integer isGroupMember, Integer memberType) {
|
||||||
GroupMemberVO groupMemberVO = new GroupMemberVO();
|
GroupMemberVO groupMemberVO = new GroupMemberVO();
|
||||||
groupMemberVO.setOrderId(orderId);
|
groupMemberVO.setOrderId(orderId);
|
||||||
groupMemberVO.setUserId(userId);
|
groupMemberVO.setUserId(userId);
|
||||||
groupMemberVO.setUserName(userName);
|
groupMemberVO.setUserName(userName);
|
||||||
groupMemberVO.setAvatar(avatar);
|
groupMemberVO.setAvatar(avatar);
|
||||||
|
groupMemberVO.setPhone(phone);
|
||||||
groupMemberVO.setIsGroupMember(isGroupMember);
|
groupMemberVO.setIsGroupMember(isGroupMember);
|
||||||
groupMemberVO.setMemberType(memberType);
|
groupMemberVO.setMemberType(memberType);
|
||||||
groupMemberVos.add(groupMemberVO);
|
groupMemberVos.add(groupMemberVO);
|
||||||
@@ -742,6 +761,9 @@ public class EmergencyOrderApiServiceImpl implements EmergencyOrderApiService {
|
|||||||
if (sysUser != null && StrUtil.isNotBlank(sysUser.getOrgCode())) {
|
if (sysUser != null && StrUtil.isNotBlank(sysUser.getOrgCode())) {
|
||||||
prof.setDeptName(emergencyCacheManager.getUserDepart(sysUser.getOrgCode()).getDepartName());
|
prof.setDeptName(emergencyCacheManager.getUserDepart(sysUser.getOrgCode()).getDepartName());
|
||||||
}
|
}
|
||||||
|
if (sysUser != null) {
|
||||||
|
prof.setPhone(sysUser.getPhone());
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
Reference in New Issue
Block a user