feat(emergency): 急救宣教资源推送到应急群聊

This commit is contained in:
2026-06-25 15:53:22 +08:00
parent 3f63abe1e3
commit 8761a965aa
17 changed files with 407 additions and 23 deletions
@@ -126,4 +126,8 @@ public class EmergencyProfessionUser implements Serializable {
// 专业人员
@TableField(exist = false)
private Integer professionNum;
// 科室名称
@TableField(exist = false)
private String deptName;
}
@@ -37,7 +37,7 @@ public class OrderOperator implements Serializable {
/**
* 人员类型(人员类型0:操作人员 1:专业人员)
*/
@Schema(title = "人员类型(人员类型0:操作人员 1:专业人员)")
@Schema(title = "人员类型(人员类型0:操作人员 1:专业人员 2:员工)")
private Integer operatorType;
/**
@@ -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;
}
@@ -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;
}
@@ -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;
}
@@ -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;
}
@@ -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));
}
}
@@ -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));
}
}
@@ -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);
}
@@ -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);
}
@@ -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;
}
}
@@ -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;
}
}
/**
* 拉取群聊历史消息
*
@@ -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;