Commit 06010e08 by 14759289890

完善privateMessagePublish功能

parent a01e30ee
package com.wecloud.im.service.impl;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.PageInfo;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import io.geekidea.springbootplus.framework.shiro.util.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
......@@ -33,42 +9,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.wecloud.dispatch.common.BaseRequest;
import com.wecloud.im.entity.ImApiMessageOnlineSend;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImConversation;
import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.entity.ImInbox;
import com.wecloud.im.entity.ImMessage;
import com.wecloud.im.entity.ImMessageOnlineSend;
import com.wecloud.im.entity.*;
import com.wecloud.im.mapper.ImMessageMapper;
import com.wecloud.im.mq.MqSender;
import com.wecloud.im.param.ChatContentVo;
import com.wecloud.im.param.GetReadersParam;
import com.wecloud.im.param.GroupChatMessageParam;
import com.wecloud.im.param.GroupChatStatusMessageParam;
import com.wecloud.im.param.ImClientSimpleDto;
import com.wecloud.im.param.ImHistoryMessagePageParam;
import com.wecloud.im.param.MsgDeleteParam;
import com.wecloud.im.param.PrivateChatMessageParam;
import com.wecloud.im.param.PrivateChatStatusMessageParam;
import com.wecloud.im.param.PushExtParam;
import com.wecloud.im.param.*;
import com.wecloud.im.param.add.ImConversationCreate;
import com.wecloud.im.param.add.ImMsgRecall;
import com.wecloud.im.param.add.ImMsgSendToOnlineClient;
import com.wecloud.im.param.add.ImMsgUpdate;
import com.wecloud.im.sdk.enums.ChatTypeEnum;
import com.wecloud.im.service.ContextService;
import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientService;
import com.wecloud.im.service.ImConversationMembersService;
import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.service.ImInboxService;
import com.wecloud.im.service.ImMessageService;
import com.wecloud.im.service.*;
import com.wecloud.im.thousandchat.service.ThousandChatService;
import com.wecloud.im.vo.ImMessageOfflineListVo;
import com.wecloud.im.vo.OfflineMsgDto;
import com.wecloud.im.vo.ReaderList;
import com.wecloud.im.vo.ReaderVo;
import com.wecloud.im.vo.*;
import com.wecloud.im.ws.enums.MsgTypeEnum;
import com.wecloud.im.ws.enums.WsResponseCmdEnum;
import com.wecloud.im.ws.model.WsResponse;
......@@ -80,6 +32,23 @@ import com.wecloud.pushserver.client.model.constant.MqConstant;
import com.wecloud.pushserver.client.model.dto.PushDTO;
import com.wecloud.utils.JsonUtils;
import com.wecloud.utils.SnowflakeUtil;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.PageInfo;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import io.geekidea.springbootplus.framework.shiro.util.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
......@@ -667,24 +636,27 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
public Boolean privateMessagePublish(PrivateChatMessageParam param) {
Long appId = SecurityUtils.getCurrentAppId();
ImApplication application = imApplicationService.getCacheById(appId);
// 获取发件人信息
String senderClientId = param.getFromUserId();
ImClient sender = imClientService.getCacheImClient(appId, senderClientId);
if (sender == null) {
throw new BusinessException("id为 " + senderClientId + " 的发件人不存在");
}
// 获取收件人信息
String toUserIdsStr = param.getToUserIds();
List<String> toUserIdList = Arrays.asList(toUserIdsStr.split(","));
List<ImClient> clientList = imClientService.list(Wrappers.<ImClient>lambdaQuery().eq(ImClient::getFkAppid,
appId).in(ImClient::getClientId, toUserIdList));
Map<Long, ImClient> clientMapById = clientList.stream().collect(Collectors.toMap(ImClient::getId, Function.identity()));
if (clientList.isEmpty()) {
throw new BusinessException("收件人列表为空");
}
// 查找conversation列表
// 查找conversation列表
Long senderImClientId = sender.getId();
List<Long> receiverImClientIds = clientList.stream().map(ImClient::getId).collect(Collectors.toList());
Set<Long> receiverImClientIds = clientList.stream().map(ImClient::getId).collect(Collectors.toSet());
List<ImConversation> conversationList =
imConversationService.getConversationBySenderAndReceivers(senderImClientId, receiverImClientIds);
Map<Long, ImConversation> conversationMapGroupById =
......@@ -697,13 +669,33 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
Map<Long, List<ImConversationMembers>> conMembersMapGroupByConId =
conversationMembersList.stream().collect(Collectors.groupingBy(ImConversationMembers::getFkConversationId));
Map<Long, ImConversationMembers> receiverConversationMembersMap =
conversationMembersList.stream().filter(member -> {
return !member.getFkClientId().equals(senderImClientId);
}).collect(Collectors.toMap(ImConversationMembers::getFkClientId, Function.identity()));
conversationMembersList.stream()
.filter(member -> !member.getFkClientId().equals(senderImClientId))
.collect(Collectors.toMap(ImConversationMembers::getFkClientId, Function.identity()));
// 根据收件人imClientId对会话/会话成员进行分组
Map<Long, ImConversation> conMapGroupByReceiverImClientId = new HashMap<>();
Map<Long, List<ImConversationMembers>> conMemberMap = new HashMap<>();
Set<Long> existConversationReceiverClientIds = receiverConversationMembersMap.keySet();
Set<Long> notExistConversationReceiverClientIds = new HashSet<>(receiverImClientIds);
notExistConversationReceiverClientIds.removeAll(existConversationReceiverClientIds);
// 不存在会话的先创建会话
notExistConversationReceiverClientIds.forEach(receiverImClientId -> {
ImClient receiver = clientMapById.get(receiverImClientId);
List<String> clientIds = new ArrayList<>();
clientIds.add(sender.getClientId());
clientIds.add(receiver.getClientId());
ImConversationCreate conversationCreate = new ImConversationCreate();
conversationCreate.setName(null);
conversationCreate.setAttributes(null);
conversationCreate.setClientIds(clientIds);
conversationCreate.setChatType(1);
ImConversationCreateVo createVo = imConversationService.createImConversation(conversationCreate);
ImConversation conversation = new ImConversation();
conversation.setId(createVo.getId());
});
// // 校验群聊信息
......
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