应急支持第二个专业人员加入的四方通话

This commit is contained in:
feng
2025-09-26 15:51:34 +08:00
parent f2503fdd52
commit 6d498f3b74
5 changed files with 104 additions and 23 deletions
@@ -0,0 +1,10 @@
-- ----------------------------
-- Table structure for emergency_order
-- ----------------------------
ALTER TABLE `emergency_order`
ADD COLUMN `major_user_two_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '第二位参与的专业人员id',
ADD COLUMN `major_user_two_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '第二位参与的专业人员姓名',
ADD COLUMN `major_user_two_sex` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '第二位参与的专业人员性别',
ADD COLUMN `major_user_two_mobile` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '第二位参与的专业人员电话',
ADD COLUMN `major_user_two_avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '第二位参与的专业人头像';
@@ -246,6 +246,34 @@ public class Order implements Serializable {
@Excel(name = "专业人头像", width = 15)
@Schema(title = "专业人头像")
private java.lang.String majorUserAvatar;
/**
* 第二位参与的专业人员id
* PS: 新疆项目的临时解决方案 ,为满足四方通话的需求 ,可能会在发起应急的时候拉第二位专业人员加入对话
*/
@Schema(title = "第二位参与的专业人员id")
private java.lang.String majorUserTwoId;
/**
* 第二位参与的专业人员姓名
*/
@Schema(title = "第二位参与的专业人员姓名")
private java.lang.String majorUserTwoName;
/**
* 第二位参与的专业人员性别
*/
@Schema(title = "第二位参与的专业人员性别")
private java.lang.String majorUserTwoSex;
/**
* 第二位参与的专业人员电话
*/
@Schema(title = "第二位参与的专业人员电话")
private java.lang.String majorUserTwoMobile;
/**
* 第二位参与的专业人头像
*/
@Schema(title = "第二位参与的专业人头像")
private java.lang.String majorUserTwoAvatar;
/**
* 驻场人员id
*/
@@ -744,12 +744,10 @@ public class EmergencyApiServiceImpl implements EmergencyApiService {
@Override
public Result<Map<String, Object>> createGroupMag(String name, String longitude, String latitude, String type) {
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
//查是否有已经存在的应急工单,有则直接返回相关信息
Order order = emergencyResourceApiServiceImpl.sessionNowSession(sysUser.getId());
List<String> userList = new ArrayList<>(2);
List<String> userList = new ArrayList<>();
if (order != null) {
Map res = new HashMap<>();
res.put("userId", sysUser.getId());
@@ -757,30 +755,38 @@ public class EmergencyApiServiceImpl implements EmergencyApiService {
res.put("tfNew", "0");
userList.add(order.getOperationUserId());
userList.add(order.getMajorUserId());
if(null != order.getMajorUserTwoId()){
userList.add(order.getMajorUserTwoId());
}
res.put("member", userList);
res.put("id", order.getId());
return Result.OK(res);
}
// 当前值班人员
// 查询当前应急中心值班人员
Call rs = this.officerOnDuty();
if (rs == null || CollectionUtils.isEmpty(rs.getMajors()) || CollectionUtils.isEmpty(rs.getOperators())) {
return Result.error("没有接受方人员!");
}
List<String> yesIds = new ArrayList<>();
String majorsId = rs.getMajors().get(0).getUserId();
String operatorsId = rs.getOperators().get(0).getUserId();
List<String> yesIds = new ArrayList<>();
String majorsTwoId = null;
if(rs.getMajors().size() > 1){
//20250926前是 多个值班人员随机取第一个 , 后改成取两个专业人员 , 将两个专业人员都拉入群聊
majorsTwoId = rs.getMajors().get(1).getUserId();
yesIds.add(majorsTwoId);
userList.add(majorsTwoId);
}
userList.add(operatorsId);
userList.add(majorsId);
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);
boolean isSuccess = imrs.isSuccess();
if (!isSuccess) {
@@ -788,28 +794,63 @@ public class EmergencyApiServiceImpl implements EmergencyApiService {
}
String sessionId = (String) imrs.getResult().get("groupId");
String callType = StrUtil.isNotBlank(type) ? "2" : "1";
//发送IM 提醒消息
sendInitMsg(sessionId, callType, sysUser.getId());
EmergencyCall emergencyCall = new EmergencyCall();
emergencyCall.setCallType(callType);
emergencyCall.setLongitude(Double.valueOf(longitude));
emergencyCall.setLatitude(Double.valueOf(latitude));
emergencyCall.setCenterId(rs.getCenterId());
//保存应急工单
String orderId = this.call(emergencyCall);
CallBack callBack = new CallBack();
callBack.setOrderId(orderId);
callBack.setMajorUserId(majorsId);
callBack.setOperationUserId(operatorsId);
callBack.setSessionId(sessionId);
callBack.setCenterId(rs.getCenterId());
this.callBack(callBack);
userList.add(operatorsId);
userList.add(majorsId);
//保存参与应急的人员信息 PS: 不想大改之前的代码逻辑此处 没有将同一条记录的赋值逻辑合并
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);
return imrs;
}
public void saveOderOperationInfo(String orderId, String sessionId, String majorsId, String operatorsId, String majorsTwoId,
String centerId ,List<LoginUserNew> accountList) {
Map<String,LoginUserNew> userMap = accountList.stream().collect(Collectors.toMap(LoginUserNew::getId, user -> user));
Date now = new Date();
Order order = new Order();
order.setId(orderId);
order.setSessionId(sessionId);
order.setSessionNow(true);
order.setOrderStatus(EmergencyConstants.ORDER_STATUS_1_NEW);
order.setIsDispatch(EmergencyConstants.ORDER_SEND_STATUS_1);
order.setCenterId(centerId);
if(null != operatorsId && null != userMap.get(operatorsId)){
LoginUserNew operationUser = userMap.get(operatorsId);
order.setOperationUserId(operatorsId);
order.setOperationUserName(handleNull(operationUser).getRealname());
order.setOperationUserSex(ifNullReturnEmpty(handleNull(operationUser).getSex()));
order.setOperationUserMobile(handleNull(operationUser).getPhone());
order.setOperationUserAvatar(handleNull(operationUser).getAvatar());
order.setOperationResponseTime(now);
}
if(null != majorsId && null != userMap.get(majorsId)){
LoginUserNew majorUser = userMap.get(majorsId);
order.setMajorUserId(majorsId);
order.setMajorUserName(handleNull(majorUser).getRealname());
order.setMajorUserSex(ifNullReturnEmpty(handleNull(majorUser).getSex()));
order.setMajorUserMobile(handleNull(majorUser).getPhone());
order.setMajorUserAvatar(handleNull(majorUser).getAvatar());
order.setMajorResponseTime(now);
}
if(null != majorsTwoId && null != userMap.get(majorsTwoId)){
LoginUserNew majorUserTwo = userMap.get(majorsTwoId);
order.setMajorUserTwoId(majorsTwoId);
order.setMajorUserTwoName(handleNull(majorUserTwo).getRealname());
order.setMajorUserTwoSex(ifNullReturnEmpty(handleNull(majorUserTwo).getSex()));
order.setMajorUserTwoMobile(handleNull(majorUserTwo).getPhone());
order.setMajorUserTwoAvatar(handleNull(majorUserTwo).getAvatar());
}
orderMapper.updateById(order);
}
@Override
public Result<Map<String, Object>> createGroupMagIntervene(String name, String longitude, String latitude, String type) {
// 干预每次发起都是创建新的应急单
@@ -625,7 +625,7 @@ public class EmergencyOrderApiServiceImpl implements EmergencyOrderApiService {
String userId = GlobalUtils.getLoginUser().getId();
LambdaQueryWrapper<Order> queryWrapper = GlobalUtils.getLambdaQueryWrapper();
if (EmergencyConstants.MAJOR.equals(type)) {
queryWrapper.eq(Order::getMajorUserId, userId);
queryWrapper.and(orWrapper -> orWrapper.eq(Order::getMajorUserId, userId).or().eq(Order::getMajorUserTwoId, userId));
}
if (EmergencyConstants.OPERATION.equals(type)) {
queryWrapper.eq(Order::getOperationUserId, userId);
@@ -169,7 +169,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
QueryWrapper<Order> queryWrapper = new QueryWrapper<>();
handleQueryWrapper(order, order.getSalvageUserName(), queryWrapper);
queryWrapper.lambda().eq(Order::getMajorUserId, loginUser.getId());
//queryWrapper.lambda().eq(Order::getMajorUserId, loginUser.getId());
queryWrapper.lambda().and(orWrapper -> orWrapper.eq(Order::getMajorUserId, loginUser.getId()).or().eq(Order::getMajorUserTwoId, loginUser.getId()));
if (StrUtil.isBlank(order.getOrderStatus())) {
queryWrapper.lambda().in(Order::getOrderStatus, Arrays.asList(EmergencyConstants.ORDER_STATUS_5_NEW, EmergencyConstants.ORDER_STATUS_1_NEW));
}