feat(emergency): 急救宣教资源推送到应急群聊
This commit is contained in:
+4
@@ -126,4 +126,8 @@ public class EmergencyProfessionUser implements Serializable {
|
||||
// 专业人员
|
||||
@TableField(exist = false)
|
||||
private Integer professionNum;
|
||||
|
||||
// 科室名称
|
||||
@TableField(exist = false)
|
||||
private String deptName;
|
||||
}
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@ public class OrderOperator implements Serializable {
|
||||
/**
|
||||
* 人员类型(人员类型0:操作人员 1:专业人员)
|
||||
*/
|
||||
@Schema(title = "人员类型(人员类型0:操作人员 1:专业人员)")
|
||||
@Schema(title = "人员类型(人员类型0:操作人员 1:专业人员 2:员工)")
|
||||
private Integer operatorType;
|
||||
|
||||
/**
|
||||
|
||||
+6
@@ -33,4 +33,10 @@ public class AddOtherMemberDTO {
|
||||
@Size(min = 1, max = 100, message = "邀请成员数量必须在1-100个之间")
|
||||
@Schema(title = "邀请成员id集合")
|
||||
private List<String> memberList;
|
||||
|
||||
/**
|
||||
* 邀请成员类型:0=专家/专业人员,1=员工,默认0向后兼容
|
||||
*/
|
||||
@Schema(title = "邀请成员类型(0:专家, 1:员工)")
|
||||
private Integer memberType;
|
||||
}
|
||||
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package com.renkang.emergency.entity.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.Size;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author PengJ
|
||||
* @version 1.0
|
||||
* @description: 移除群成员DTO
|
||||
* @date 2025/6/25
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public class RemoveGroupMemberDTO {
|
||||
|
||||
/**
|
||||
* 群组id
|
||||
*/
|
||||
@NotBlank(message = "群组id不能为空")
|
||||
@Schema(title = "群组id")
|
||||
private String groupId;
|
||||
|
||||
/**
|
||||
* 移除成员id集合
|
||||
*/
|
||||
@NotEmpty(message = "移除成员id集合不能为空")
|
||||
@Size(min = 1, max = 100, message = "移除成员数量必须在1-100个之间")
|
||||
@Schema(title = "移除成员id集合")
|
||||
private List<String> memberList;
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
package com.renkang.emergency.entity.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author PengJ
|
||||
* @version 1.0
|
||||
* @description: 员工搜索结果VO
|
||||
* @date 2025/6/25
|
||||
*/
|
||||
@Data
|
||||
public class EmployeeVO {
|
||||
|
||||
@Schema(title = "用户ID")
|
||||
private String userId;
|
||||
|
||||
@Schema(title = "姓名")
|
||||
private String realname;
|
||||
|
||||
@Schema(title = "头像")
|
||||
private String avatar;
|
||||
|
||||
@Schema(title = "部门编码")
|
||||
private String orgCode;
|
||||
|
||||
@Schema(title = "单位名称")
|
||||
private String orgName;
|
||||
|
||||
@Schema(title = "部门名称")
|
||||
private String deptName;
|
||||
|
||||
@Schema(title = "手机号")
|
||||
private String phone;
|
||||
|
||||
@Schema(title = "工号")
|
||||
private String workNo;
|
||||
}
|
||||
+6
@@ -42,4 +42,10 @@ public class GroupMemberVO {
|
||||
@Schema(title = "是否是群组成员, 0:不是群组成员, 1:是群组成员")
|
||||
private Integer isGroupMember;
|
||||
|
||||
/**
|
||||
* 成员类型:-1=发起人, 0=操作人员, 1=专业人员, 2=员工
|
||||
*/
|
||||
@Schema(title = "成员类型(-1:发起人, 0:操作人员, 1:专业人员, 2:员工)")
|
||||
private Integer memberType;
|
||||
|
||||
}
|
||||
|
||||
+7
@@ -9,6 +9,7 @@ import com.renkang.emergency.bean.response.Call;
|
||||
import com.renkang.emergency.bean.response.Stat;
|
||||
import com.renkang.emergency.bean.response.StatSimple;
|
||||
import com.renkang.emergency.entity.dto.AddOtherMemberDTO;
|
||||
import com.renkang.emergency.entity.dto.RemoveGroupMemberDTO;
|
||||
import com.renkang.emergency.entity.vo.CreateGroupMagVO;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import org.jeecg.common.api.vo.Result;
|
||||
@@ -123,4 +124,10 @@ public class EmergencyApiController {
|
||||
return Result.OK(emergencyApiService.addGroupUser(dto));
|
||||
}
|
||||
|
||||
@Operation(summary = "移除群成员-应急")
|
||||
@PostMapping(value = "/removeGroupUser")
|
||||
public Result<Boolean> removeGroupUser(@RequestBody @Validated RemoveGroupMemberDTO dto) {
|
||||
return Result.OK(emergencyApiService.removeGroupUser(dto));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+25
@@ -12,9 +12,11 @@ import com.renkang.emergency.bean.request.StationUpdateOrder;
|
||||
import com.renkang.emergency.bean.response.InitUserOrder;
|
||||
import com.renkang.emergency.bean.response.OrderThrough;
|
||||
import com.renkang.emergency.bean.response.SessionOrderUser;
|
||||
import com.renkang.emergency.entity.EmergencyProfessionUser;
|
||||
import com.renkang.emergency.entity.Order;
|
||||
import com.renkang.emergency.entity.OrderDetail;
|
||||
import com.renkang.emergency.entity.OrderSendRecord;
|
||||
import com.renkang.emergency.entity.vo.EmployeeVO;
|
||||
import com.renkang.emergency.entity.vo.GroupMemberVO;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import org.jeecg.common.api.vo.Result;
|
||||
@@ -296,5 +298,28 @@ public class EmergencyOrderApiController {
|
||||
return Result.OK(emergencyOrderApiService.getGroupMemberList(sessionId));
|
||||
}
|
||||
|
||||
@Operation(summary = "搜索专家/专业人员")
|
||||
@GetMapping("/searchExpert")
|
||||
public Result<IPage<EmergencyProfessionUser>> searchExpert(
|
||||
@RequestParam(required = false) String realname,
|
||||
@RequestParam(required = false) String centerId,
|
||||
@RequestParam(required = false) String excludeSessionId,
|
||||
@RequestParam(defaultValue = "1") Integer pageNo,
|
||||
@RequestParam(defaultValue = "10") Integer pageSize) {
|
||||
return Result.OK(emergencyOrderApiService.searchExpert(realname, centerId, excludeSessionId, pageNo, pageSize));
|
||||
}
|
||||
|
||||
@Operation(summary = "搜索员工")
|
||||
@GetMapping("/searchEmployee")
|
||||
public Result<IPage<EmployeeVO>> searchEmployee(
|
||||
@RequestParam(required = false) String realname,
|
||||
@RequestParam(required = false) String orgCode,
|
||||
@RequestParam(required = false) String workNo,
|
||||
@RequestParam(required = false) String phone,
|
||||
@RequestParam(required = false) String excludeSessionId,
|
||||
@RequestParam(defaultValue = "1") Integer pageNo,
|
||||
@RequestParam(defaultValue = "10") Integer pageSize) {
|
||||
return Result.OK(emergencyOrderApiService.searchEmployee(realname, orgCode, workNo, phone, excludeSessionId, pageNo, pageSize));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+3
@@ -7,6 +7,7 @@ import com.renkang.emergency.bean.response.Call;
|
||||
import com.renkang.emergency.bean.response.Stat;
|
||||
import com.renkang.emergency.bean.response.StatSimple;
|
||||
import com.renkang.emergency.entity.dto.AddOtherMemberDTO;
|
||||
import com.renkang.emergency.entity.dto.RemoveGroupMemberDTO;
|
||||
import com.renkang.emergency.entity.vo.CreateGroupMagVO;
|
||||
import org.jeecg.common.api.vo.Result;
|
||||
|
||||
@@ -37,4 +38,6 @@ public interface EmergencyApiService {
|
||||
List<String> fixOrderStatus();
|
||||
|
||||
boolean addGroupUser(AddOtherMemberDTO dto);
|
||||
|
||||
boolean removeGroupUser(RemoveGroupMemberDTO dto);
|
||||
}
|
||||
|
||||
+6
@@ -9,10 +9,12 @@ import com.renkang.emergency.bean.request.StationUpdateOrder;
|
||||
import com.renkang.emergency.bean.response.InitUserOrder;
|
||||
import com.renkang.emergency.bean.response.OrderThrough;
|
||||
import com.renkang.emergency.bean.response.SessionOrderUser;
|
||||
import com.renkang.emergency.entity.EmergencyProfessionUser;
|
||||
import com.renkang.emergency.entity.Order;
|
||||
import com.renkang.emergency.entity.OrderDetail;
|
||||
import com.renkang.emergency.entity.OrderSendRecord;
|
||||
import com.renkang.emergency.entity.TblHelpCentorVo;
|
||||
import com.renkang.emergency.entity.vo.EmployeeVO;
|
||||
import com.renkang.emergency.entity.vo.GroupMemberVO;
|
||||
|
||||
import java.util.Date;
|
||||
@@ -75,4 +77,8 @@ public interface EmergencyOrderApiService {
|
||||
|
||||
List<GroupMemberVO> getGroupMemberList(String sessionId);
|
||||
|
||||
IPage<EmergencyProfessionUser> searchExpert(String realname, String centerId, String excludeSessionId, Integer pageNo, Integer pageSize);
|
||||
|
||||
IPage<EmployeeVO> searchEmployee(String realname, String orgCode, String workNo, String phone, String excludeSessionId, Integer pageNo, Integer pageSize);
|
||||
|
||||
}
|
||||
|
||||
+48
-6
@@ -17,6 +17,7 @@ import com.renkang.emergency.bean.response.*;
|
||||
import com.renkang.emergency.constant.EmergencyConstants;
|
||||
import com.renkang.emergency.entity.*;
|
||||
import com.renkang.emergency.entity.dto.AddOtherMemberDTO;
|
||||
import com.renkang.emergency.entity.dto.RemoveGroupMemberDTO;
|
||||
import com.renkang.emergency.entity.vo.CreateGroupMagVO;
|
||||
import com.renkang.emergency.manager.EmergencyCloudManager;
|
||||
import com.renkang.emergency.mapper.*;
|
||||
@@ -27,9 +28,11 @@ import com.renkang.emergency.util.DateUtils;
|
||||
import com.renkang.emergency.websocket.WebSocket;
|
||||
import com.renkang.im.api.IMHelloApi;
|
||||
import com.renkang.im.dto.AddGroupMemberDTO;
|
||||
import com.renkang.im.dto.DeleteGroupMemberDTO;
|
||||
import com.renkang.im.entity.ConSessionRequestDO;
|
||||
import com.renkang.im.entity.ImGroupMsgTextReqDO;
|
||||
import com.renkang.im.vo.AddGroupMemberVO;
|
||||
import com.renkang.im.vo.ImBaseResult;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
@@ -1079,25 +1082,34 @@ public class EmergencyApiServiceImpl implements EmergencyApiService {
|
||||
ExceptionAssertsUtil.fail("应急单不存在");
|
||||
}
|
||||
String orderId = order.getId();
|
||||
// memberType: 0=专家/专业人员(默认), 1=员工
|
||||
Integer memberType = dto.getMemberType();
|
||||
Integer operatorType = (memberType != null && memberType == 1) ? 2 : 1;
|
||||
Date now = new Date();
|
||||
List<String> newMemberList = new ArrayList<>();
|
||||
dto.getMemberList().forEach(userId -> {
|
||||
OrderOperator orderOperator = orderOperatorMapper.selectOne(new LambdaQueryWrapper<OrderOperator>()
|
||||
OrderOperator existing = orderOperatorMapper.selectOne(new LambdaQueryWrapper<OrderOperator>()
|
||||
.eq(OrderOperator::getOrderId, orderId)
|
||||
.eq(OrderOperator::getUserId, userId)
|
||||
);
|
||||
if (orderOperator != null) {
|
||||
if (existing != null) {
|
||||
return;
|
||||
}
|
||||
orderOperator = new OrderOperator();
|
||||
OrderOperator orderOperator = new OrderOperator();
|
||||
orderOperator.setOrderId(orderId);
|
||||
orderOperator.setOperatorType(1);
|
||||
orderOperator.setOperatorType(operatorType);
|
||||
orderOperator.setUserId(userId);
|
||||
orderOperator.setJoinType(1);
|
||||
orderOperator.setJoinDate(new Date());
|
||||
orderOperator.setJoinDate(now);
|
||||
orderOperatorMapper.insert(orderOperator);
|
||||
newMemberList.add(userId);
|
||||
});
|
||||
if (newMemberList.isEmpty()) {
|
||||
ExceptionAssertsUtil.fail("所有成员已在群组中");
|
||||
}
|
||||
AddGroupMemberDTO addGroupMemberDTO = new AddGroupMemberDTO();
|
||||
addGroupMemberDTO.setGroupId(dto.getGroupId());
|
||||
addGroupMemberDTO.setMemberList(dto.getMemberList().stream().map(userId -> {
|
||||
addGroupMemberDTO.setMemberList(newMemberList.stream().map(userId -> {
|
||||
AddGroupMemberDTO.MemberListDTO memberListDTO = new AddGroupMemberDTO.MemberListDTO();
|
||||
memberListDTO.setMemberAccount(userId);
|
||||
return memberListDTO;
|
||||
@@ -1110,4 +1122,34 @@ public class EmergencyApiServiceImpl implements EmergencyApiService {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public boolean removeGroupUser(RemoveGroupMemberDTO dto) {
|
||||
String groupId = dto.getGroupId();
|
||||
Order order = orderMapper.selectOne(new LambdaQueryWrapper<Order>()
|
||||
.eq(Order::getSessionId, groupId)
|
||||
);
|
||||
if (order == null) {
|
||||
ExceptionAssertsUtil.fail("应急单不存在");
|
||||
}
|
||||
String orderId = order.getId();
|
||||
// 只允许移除协助人员(joinType=1),不能移除初始处理人员(joinType=0)
|
||||
for (String userId : dto.getMemberList()) {
|
||||
orderOperatorMapper.delete(new LambdaQueryWrapper<OrderOperator>()
|
||||
.eq(OrderOperator::getOrderId, orderId)
|
||||
.eq(OrderOperator::getUserId, userId)
|
||||
.eq(OrderOperator::getJoinType, 1)
|
||||
);
|
||||
}
|
||||
// 调用IM删除群成员
|
||||
DeleteGroupMemberDTO deleteDTO = new DeleteGroupMemberDTO();
|
||||
deleteDTO.setGroupId(groupId);
|
||||
deleteDTO.setMemberToDelAccount(dto.getMemberList());
|
||||
Result<ImBaseResult> result = iMHelloApi.deleteGroupMember(deleteDTO);
|
||||
if (!result.isSuccess()) {
|
||||
ExceptionAssertsUtil.fail("IM删除群成员失败");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
+134
-13
@@ -19,8 +19,10 @@ import com.renkang.emergency.bean.request.StationUpdateOrder;
|
||||
import com.renkang.emergency.bean.response.*;
|
||||
import com.renkang.emergency.constant.EmergencyConstants;
|
||||
import com.renkang.emergency.entity.*;
|
||||
import com.renkang.emergency.entity.vo.EmployeeVO;
|
||||
import com.renkang.emergency.entity.vo.GroupMemberVO;
|
||||
import com.renkang.emergency.manager.EmergencyCacheManager;
|
||||
import com.renkang.emergency.manager.EmergencyCloudManager;
|
||||
import com.renkang.emergency.mapper.*;
|
||||
import com.renkang.emergency.service.IOrderDetailService;
|
||||
import com.renkang.emergency.service.IOrderService;
|
||||
@@ -28,10 +30,14 @@ import com.renkang.im.api.IMHelloApi;
|
||||
import com.renkang.im.entity.ImGroupMsgTextReqDO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.jeecg.common.api.vo.Result;
|
||||
import org.jeecg.common.constant.CommonConstant;
|
||||
import org.jeecg.common.exception.ExceptionAssertsUtil;
|
||||
import org.jeecg.common.system.api.ISysBaseAPI;
|
||||
import org.jeecg.common.system.vo.LoginUser;
|
||||
import org.jeecg.common.system.vo.LoginUserNew;
|
||||
import org.jeecg.global.GlobalUtils;
|
||||
import org.jeecg.modules.system.entity.SysUser;
|
||||
import org.jeecg.modules.manager.ISysCache;
|
||||
import org.jeecg.modules.system.entity.SysDepart;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -69,6 +75,10 @@ public class EmergencyOrderApiServiceImpl implements EmergencyOrderApiService {
|
||||
private OrderOperatorMapper orderOperatorMapper;
|
||||
@Autowired
|
||||
private EmergencyProfessionUserMapper emergencyProfessionUserMapper;
|
||||
@Autowired
|
||||
private ISysBaseAPI sysBaseAPI;
|
||||
@Autowired
|
||||
private EmergencyCloudManager emergencyCloudManager;
|
||||
|
||||
@Override
|
||||
public IPage<InitUserOrder> initUserOrderPage(Page<Order> page) {
|
||||
@@ -608,12 +618,12 @@ public class EmergencyOrderApiServiceImpl implements EmergencyOrderApiService {
|
||||
ExceptionAssertsUtil.fail("应急单不存在");
|
||||
}
|
||||
String orderId = order.getId();
|
||||
// 添加发起人信息
|
||||
// 添加发起人信息,memberType=-1
|
||||
handleGroupMember(groupMemberVos, orderId,
|
||||
order.getInitiatorUserId(),
|
||||
order.getInitiatorUserName(),
|
||||
order.getInitiatorUserAvatar(),
|
||||
1);
|
||||
1, -1);
|
||||
|
||||
// 已加入应急单人员
|
||||
List<OrderOperator> orderOperators = orderOperatorMapper.selectList(
|
||||
@@ -625,22 +635,49 @@ public class EmergencyOrderApiServiceImpl implements EmergencyOrderApiService {
|
||||
.map(OrderOperator::getUserId)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 查询已加入人员的专业信息
|
||||
// 查询已加入人员的专业信息(从EmergencyProfessionUser)
|
||||
Map<String, EmergencyProfessionUser> profUserMap = new HashMap<>();
|
||||
if (!userIds.isEmpty()) {
|
||||
List<EmergencyProfessionUser> emergencyProfessionUsers = emergencyProfessionUserMapper.selectList(
|
||||
new LambdaQueryWrapper<EmergencyProfessionUser>()
|
||||
.in(EmergencyProfessionUser::getUserId, userIds)
|
||||
);
|
||||
emergencyProfessionUsers.forEach(emergencyProfessionUser ->
|
||||
handleGroupMember(groupMemberVos, orderId,
|
||||
emergencyProfessionUser.getUserId(),
|
||||
emergencyProfessionUser.getRealname(),
|
||||
emergencyProfessionUser.getAvatar(),
|
||||
1)
|
||||
);
|
||||
for (EmergencyProfessionUser u : emergencyProfessionUsers) {
|
||||
profUserMap.put(u.getUserId(), u);
|
||||
}
|
||||
}
|
||||
|
||||
// 其他专业人员(排除已在应急单中的用户)
|
||||
// 查询员工成员(operatorType=2)的系统用户信息
|
||||
List<String> employeeUserIds = orderOperators.stream()
|
||||
.filter(op -> op.getOperatorType() != null && op.getOperatorType() == 2)
|
||||
.map(OrderOperator::getUserId)
|
||||
.filter(uid -> !profUserMap.containsKey(uid))
|
||||
.collect(Collectors.toList());
|
||||
Map<String, LoginUserNew> sysUserMap = new HashMap<>();
|
||||
if (!employeeUserIds.isEmpty()) {
|
||||
sysUserMap = emergencyCloudManager.listUser(employeeUserIds);
|
||||
}
|
||||
|
||||
// 遍历OrderOperator,填充已加入的群成员
|
||||
for (OrderOperator op : orderOperators) {
|
||||
String userName = "";
|
||||
String avatar = "";
|
||||
EmergencyProfessionUser profUser = profUserMap.get(op.getUserId());
|
||||
if (profUser != null) {
|
||||
userName = profUser.getRealname();
|
||||
avatar = profUser.getAvatar();
|
||||
} else {
|
||||
LoginUserNew sysUser = sysUserMap.get(op.getUserId());
|
||||
if (sysUser != null) {
|
||||
userName = sysUser.getRealname();
|
||||
avatar = sysUser.getAvatar();
|
||||
}
|
||||
}
|
||||
handleGroupMember(groupMemberVos, orderId,
|
||||
op.getUserId(), userName, avatar, 1, op.getOperatorType());
|
||||
}
|
||||
|
||||
// 其他专业人员(排除已在应急单中的用户),memberType=1
|
||||
LambdaQueryWrapper<EmergencyProfessionUser> otherMajorQuery = new LambdaQueryWrapper<>();
|
||||
otherMajorQuery.eq(EmergencyProfessionUser::getType, "6");
|
||||
if (!userIds.isEmpty()) {
|
||||
@@ -653,21 +690,105 @@ public class EmergencyOrderApiServiceImpl implements EmergencyOrderApiService {
|
||||
otherMajorMember.getUserId(),
|
||||
otherMajorMember.getRealname(),
|
||||
otherMajorMember.getAvatar(),
|
||||
0)
|
||||
0, 1)
|
||||
);
|
||||
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) {
|
||||
public void handleGroupMember(List<GroupMemberVO> groupMemberVos, String orderId, String userId, String userName, String avatar, Integer isGroupMember, Integer memberType) {
|
||||
GroupMemberVO groupMemberVO = new GroupMemberVO();
|
||||
groupMemberVO.setOrderId(orderId);
|
||||
groupMemberVO.setUserId(userId);
|
||||
groupMemberVO.setUserName(userName);
|
||||
groupMemberVO.setAvatar(avatar);
|
||||
groupMemberVO.setIsGroupMember(isGroupMember);
|
||||
groupMemberVO.setMemberType(memberType);
|
||||
groupMemberVos.add(groupMemberVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPage<EmergencyProfessionUser> searchExpert(String realname, String centerId, String excludeSessionId, Integer pageNo, Integer pageSize) {
|
||||
LambdaQueryWrapper<EmergencyProfessionUser> query = new LambdaQueryWrapper<>();
|
||||
query.eq(EmergencyProfessionUser::getType, "6");
|
||||
if (StrUtil.isNotBlank(realname)) {
|
||||
query.like(EmergencyProfessionUser::getRealname, realname);
|
||||
}
|
||||
if (StrUtil.isNotBlank(centerId)) {
|
||||
query.eq(EmergencyProfessionUser::getCenterId, centerId);
|
||||
}
|
||||
// 排除已在群中的人员
|
||||
if (StrUtil.isNotBlank(excludeSessionId)) {
|
||||
Order order = orderMapper.selectOne(new LambdaQueryWrapper<Order>()
|
||||
.eq(Order::getSessionId, excludeSessionId));
|
||||
if (order != null) {
|
||||
List<OrderOperator> ops = orderOperatorMapper.selectList(
|
||||
new LambdaQueryWrapper<OrderOperator>()
|
||||
.eq(OrderOperator::getOrderId, order.getId()));
|
||||
List<String> existUserIds = ops.stream().map(OrderOperator::getUserId).collect(Collectors.toList());
|
||||
if (!existUserIds.isEmpty()) {
|
||||
query.notIn(EmergencyProfessionUser::getUserId, existUserIds);
|
||||
}
|
||||
}
|
||||
}
|
||||
Page<EmergencyProfessionUser> page = new Page<>(pageNo != null ? pageNo : 1, pageSize != null ? pageSize : 10);
|
||||
IPage<EmergencyProfessionUser> result = emergencyProfessionUserMapper.selectPage(page, query);
|
||||
// 批量查询系统用户信息,填充科室(部门)名称
|
||||
List<String> userIds = result.getRecords().stream()
|
||||
.map(EmergencyProfessionUser::getUserId).collect(Collectors.toList());
|
||||
if (!userIds.isEmpty()) {
|
||||
Map<String, LoginUserNew> userMap = emergencyCloudManager.listUser(userIds);
|
||||
result.getRecords().forEach(prof -> {
|
||||
LoginUserNew sysUser = userMap.get(prof.getUserId());
|
||||
if (sysUser != null && StrUtil.isNotBlank(sysUser.getOrgCode())) {
|
||||
prof.setDeptName(emergencyCacheManager.getUserDepart(sysUser.getOrgCode()).getDepartName());
|
||||
}
|
||||
});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPage<EmployeeVO> searchEmployee(String realname, String orgCode, String workNo, String phone, String excludeSessionId, Integer pageNo, Integer pageSize) {
|
||||
// 收集需要在结果中排除的用户ID
|
||||
final Set<String> excludeUserIds = new HashSet<>();
|
||||
if (StrUtil.isNotBlank(excludeSessionId)) {
|
||||
Order order = orderMapper.selectOne(new LambdaQueryWrapper<Order>()
|
||||
.eq(Order::getSessionId, excludeSessionId));
|
||||
if (order != null) {
|
||||
List<OrderOperator> ops = orderOperatorMapper.selectList(
|
||||
new LambdaQueryWrapper<OrderOperator>()
|
||||
.eq(OrderOperator::getOrderId, order.getId()));
|
||||
excludeUserIds.addAll(ops.stream().map(OrderOperator::getUserId).collect(Collectors.toList()));
|
||||
}
|
||||
}
|
||||
// 构建查询条件
|
||||
SysUser filter = new SysUser();
|
||||
filter.setRealname(realname);
|
||||
filter.setOrgCode(orgCode);
|
||||
filter.setWorkNo(workNo);
|
||||
filter.setPhone(phone);
|
||||
Page<SysUser> srcPage = sysBaseAPI.pageUser(filter, pageNo != null ? pageNo : 1, pageSize != null ? pageSize : 10, null);
|
||||
Page<EmployeeVO> targetPage = new Page<>(srcPage.getCurrent(), srcPage.getSize(), srcPage.getTotal());
|
||||
targetPage.setRecords(srcPage.getRecords().stream()
|
||||
.filter(u -> !excludeUserIds.contains(u.getId()))
|
||||
.map(u -> {
|
||||
EmployeeVO vo = new EmployeeVO();
|
||||
vo.setUserId(u.getId());
|
||||
vo.setRealname(u.getRealname());
|
||||
vo.setAvatar(u.getAvatar());
|
||||
vo.setOrgCode(u.getOrgCode());
|
||||
vo.setPhone(u.getPhone());
|
||||
vo.setWorkNo(u.getWorkNo());
|
||||
// 填充单位名称和部门名称
|
||||
if (StrUtil.isNotBlank(u.getOrgCode())) {
|
||||
vo.setOrgName(emergencyCacheManager.getUserSecondDepart(u.getOrgCode()).getDepartName());
|
||||
vo.setDeptName(emergencyCacheManager.getUserDepart(u.getOrgCode()).getDepartName());
|
||||
}
|
||||
return vo;
|
||||
}).collect(Collectors.toList()));
|
||||
return targetPage;
|
||||
}
|
||||
|
||||
private List<SessionOrderUser> convertOrder(List<Order> orders) {
|
||||
if (CollectionUtils.isEmpty(orders)) {
|
||||
return Collections.emptyList();
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.renkang.im.api;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.renkang.im.api.fallback.IMHelloFallback;
|
||||
import com.renkang.im.dto.AddGroupMemberDTO;
|
||||
import com.renkang.im.dto.DeleteGroupMemberDTO;
|
||||
import com.renkang.im.entity.*;
|
||||
import com.renkang.im.vo.AddGroupMemberVO;
|
||||
import com.renkang.im.vo.ImBaseResult;
|
||||
@@ -80,4 +81,12 @@ public interface IMHelloApi {
|
||||
@GetMapping("/wnapp/destroyGroup")
|
||||
Result<ImBaseResult> destroyGroup(@RequestParam("groupId") String groupId);
|
||||
|
||||
/**
|
||||
* @description: 删除群成员
|
||||
* @author PengJ
|
||||
* @date 2025/6/25
|
||||
*/
|
||||
@PostMapping(value = "/wnapp/deleteGroupMember")
|
||||
Result<ImBaseResult> deleteGroupMember(@RequestBody @Validated DeleteGroupMemberDTO dto);
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.renkang.im.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author PengJ
|
||||
* @version 1.0
|
||||
* @description: 删除群成员dto
|
||||
* @date 2025/6/25
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public class DeleteGroupMemberDTO {
|
||||
|
||||
/**
|
||||
* 要操作的群组(必填)
|
||||
*/
|
||||
@NotNull(message = "群组ID不能为空")
|
||||
@JsonProperty("GroupId")
|
||||
private String groupId;
|
||||
|
||||
/**
|
||||
* 是否静默删人。
|
||||
* 0:非静默删人。
|
||||
* 1:静默删人。
|
||||
* 不填该字段默认为0。
|
||||
*/
|
||||
@JsonProperty("Silence")
|
||||
private Integer silence;
|
||||
|
||||
/**
|
||||
* 要删除的群成员ID列表
|
||||
*/
|
||||
@JsonProperty("MemberToDel_Account")
|
||||
private List<String> memberToDelAccount;
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import com.renkang.consultation.api.ConSessionHelloApi;
|
||||
import com.renkang.consultation.entity.ConSessionDO;
|
||||
import com.renkang.im.dto.AddGroupMemberDTO;
|
||||
import com.renkang.im.dto.DeleteGroupMemberDTO;
|
||||
import com.renkang.im.entity.*;
|
||||
import com.renkang.im.service.IImMsgRecordAllService;
|
||||
import com.renkang.im.util.IdWorker;
|
||||
@@ -398,6 +399,12 @@ public class TXController {
|
||||
return Result.OK(tencentCloudImUtil.addGroupMember(dto));
|
||||
}
|
||||
|
||||
@Operation(summary = "删除群成员", description = "删除群成员")
|
||||
@PostMapping("/deleteGroupMember")
|
||||
public Result<ImBaseResult> deleteGroupMember(@RequestBody @Validated DeleteGroupMemberDTO dto) {
|
||||
return Result.OK(tencentCloudImUtil.deleteGroupMember(dto));
|
||||
}
|
||||
|
||||
@Operation(summary = "解散群组", description = "解散群组")
|
||||
@GetMapping("/destroyGroup")
|
||||
public Result<ImBaseResult> destroyGroup(@RequestParam("groupId") String groupId) {
|
||||
|
||||
@@ -11,6 +11,7 @@ import com.renkang.im.ImSendEnum;
|
||||
import com.renkang.im.common.TencentCloudImApiConstant;
|
||||
import com.renkang.im.common.TencentCloudImConstant;
|
||||
import com.renkang.im.dto.AddGroupMemberDTO;
|
||||
import com.renkang.im.dto.DeleteGroupMemberDTO;
|
||||
import com.renkang.im.entity.*;
|
||||
import com.renkang.im.vo.AddGroupMemberVO;
|
||||
import com.renkang.im.vo.ImBaseResult;
|
||||
@@ -505,6 +506,30 @@ public class TencentCloudImUtil {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 删除群成员
|
||||
*
|
||||
* @param dto 删除群成员请求
|
||||
* @return ImBaseResult
|
||||
*/
|
||||
public ImBaseResult deleteGroupMember(DeleteGroupMemberDTO dto) {
|
||||
try {
|
||||
Integer random = RandomUtils.nextInt(0, 999999999);
|
||||
String httpsUrl = getHttpsUrl(TencentCloudImApiConstant.GroupManage.DELETE_GROUP_MEMBER, random);
|
||||
String jsonString = objectMapper.writeValueAsString(dto);
|
||||
JSONObject jsonObject = JSONObject.parseObject(jsonString);
|
||||
log.info("腾讯云im【删除群成员】,请求参数:{}", jsonObject);
|
||||
String result = HttpUtil.doPost(httpsUrl, jsonObject);
|
||||
log.info("腾讯云im【删除群成员】,返回结果:{}", result);
|
||||
return JSONObject.toJavaObject(JSONObject.parseObject(result), ImBaseResult.class);
|
||||
} catch (Exception e) {
|
||||
log.error("【删除群成员】异常:{}", e.getMessage());
|
||||
ImBaseResult result = new ImBaseResult();
|
||||
result.setActionStatus("FAIL");
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 拉取群聊历史消息
|
||||
*
|
||||
|
||||
+11
-3
@@ -1127,8 +1127,13 @@ public class SysBaseApiImpl implements ISysBaseAPI {
|
||||
if (map != null) {
|
||||
for (Map.Entry<String, String> entry : map.entrySet()) {
|
||||
String str = "${" + entry.getKey() + "}";
|
||||
title = title.replace(str, entry.getValue());
|
||||
content = content.replace(str, entry.getValue());
|
||||
String value = entry.getValue() != null ? entry.getValue() : "";
|
||||
if (title != null) {
|
||||
title = title.replace(str, value);
|
||||
}
|
||||
if (content != null) {
|
||||
content = content.replace(str, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
SysMessage sysMessage = new SysMessage();
|
||||
@@ -1161,7 +1166,10 @@ public class SysBaseApiImpl implements ISysBaseAPI {
|
||||
if (map != null) {
|
||||
for (Map.Entry<String, String> entry : map.entrySet()) {
|
||||
String str = "${" + entry.getKey() + "}";
|
||||
content = content.replace(str, entry.getValue());
|
||||
String value = entry.getValue() != null ? entry.getValue() : "";
|
||||
if (content != null) {
|
||||
content = content.replace(str, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
return content;
|
||||
|
||||
Reference in New Issue
Block a user