Commit f24e05e5 by hweeeeeei

将client从会话移除

parent fca5bb0e
...@@ -58,7 +58,7 @@ public interface ImConversationService extends BaseService<ImConversation> { ...@@ -58,7 +58,7 @@ public interface ImConversationService extends BaseService<ImConversation> {
* @param imClientToConversation * @param imClientToConversation
* @return * @return
*/ */
ApiResult<Boolean> delClientToConversation(ImClientToConversation imClientToConversation); ApiResult<Boolean> delClientToConversation(ImClientToConversation imClientToConversation) throws Exception;
/** /**
......
...@@ -339,9 +339,114 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap ...@@ -339,9 +339,114 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
} }
@Override @Override
public ApiResult<Boolean> delClientToConversation(ImClientToConversation imClientToConversation) { public ApiResult<Boolean> delClientToConversation(ImClientToConversation imClientToConversation) throws Exception {
// shiro线程中获取当前token
JwtToken curentJwtToken = JwtUtil.getCurentJwtToken();
// 根据appKey查询application
ImApplication imApplication = imApplicationService.getOneByAppKey(curentJwtToken.getAppKey());
ImClient imClientSender = imClientService.getCurentClient();
// 判断是否为群主
ImConversation imConversationById = imConversationService.getById(imClientToConversation.getConversationId());
if (imConversationById == null || !imConversationById.getCreator().equals(imClientSender.getId())) {
return ApiResult.result(false);
}
// 查询该会话所有成员
List<ImConversationMembers> membersList = imConversationMembersService.list(
new QueryWrapper<ImConversationMembers>().lambda()
.eq(ImConversationMembers::getFkConversationId, imClientToConversation.getConversationId())
.notIn(ImConversationMembers::getId, imClientSender.getId())
);
if (membersList.isEmpty()) {
log.info("membersList为空,toConversationId:" + imClientToConversation.getConversationId());
return ApiResult.fail();
}
// 将client从会话移除
for (String id : imClientToConversation.getClientIds()) {
ImClient client2 = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.eq(ImClient::getFkAppid, imApplication.getId())
.eq(ImClient::getClientId, id));
// 判断用户是否已经在该会话
ImConversationMembers members = imConversationMembersService.getOne(new QueryWrapper<ImConversationMembers>().lambda()
.eq(ImConversationMembers::getFkAppid, imApplication.getId())
.eq(ImConversationMembers::getFkConversationId, imClientToConversation.getConversationId())
.eq(ImConversationMembers::getFkClientId, client2.getId())
);
// 已经在该会话 则跳过
imConversationMembersService.deleteImConversationMembers(members.getId());
// ws移除事件通知给群内其他人 ----------
// 生成消息id
long messageId = SnowflakeUtil.getId();
ImMessage imMessage = new ImMessage();
Map<String, Object> content = new HashMap<>();
content.put("operator", imClientSender.getClientId()); //操作的client ID
content.put("passivityOperator", client2.getClientId()); //被操作的client ID
content.put("type", -1008); //xx被xx移出会话 -1008
try {
String asString = JSON_MAPPER.writeValueAsString(content);
imMessage.setContent(asString);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
// 保存消息至消息表
imMessage.setId(messageId);
imMessage.setCreateTime(new Date());
imMessage.setFkAppid(imApplication.getId());
imMessage.setSender(imClientSender.getId());
imMessage.setWithdraw(false);
imMessage.setEvent(true);
imMessage.setSystem(false);
imMessage.setSendStatus(2);
imMessage.setFkConversationId(imClientToConversation.getConversationId());
boolean save = imMessageService.save(imMessage);
// 遍历发送
for (ImConversationMembers conversationMembers : membersList) {
// 查询接收方
ImClient imClientReceiver = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.eq(ImClient::getFkAppid, imApplication.getId())
.eq(ImClient::getId, conversationMembers.getFkClientId()));
if (imClientReceiver == null) {
continue;
}
// 封装响应的实体
ImMessageOnlineSend imMessageOnlineSend = new ImMessageOnlineSend();
imMessageOnlineSend.setMsgId(messageId);
imMessageOnlineSend.setSender(imClientSender.getClientId());
imMessageOnlineSend.setContent((HashMap) content);
imMessageOnlineSend.setConversationId(conversationMembers.getFkConversationId());
imMessageOnlineSend.setWithdraw(Boolean.FALSE);
imMessageOnlineSend.setEvent(Boolean.TRUE);
// 向接收方推送
WsResponseModel<ImMessageOnlineSend> responseModel = new WsResponseModel<>();
responseModel.setCmd(WsResponseCmdEnum.CONVERSATION_EVENT_MSG.getCmdCode());
ApiResult<Boolean> result = ApiResult.result(ApiCode.SUCCESS);
responseModel.setCode(result.getCode());
responseModel.setMsg(result.getMessage());
responseModel.setData(imMessageOnlineSend);
responseModel.setReqId(null);
writeDataService.write(responseModel, imApplication.getAppKey(), imClientReceiver.getClientId());
}
}
return ApiResult.ok(); return ApiResult.ok();
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment