Commit c52a49c7 by 罗长华

如果双方还不是好友,此时创建的会话,会话类型为临时会话,且对方会话不可见

当临时会话创建者发送一条消息后,对方会话可见
当为朋友时,会话升级为单聊类型,双方可见
parent fb6ec7bc
......@@ -41,6 +41,7 @@ import com.wecloud.im.param.ChatContentVo;
import com.wecloud.im.param.ImClientSimpleDto;
import com.wecloud.im.param.ImConversationQueryVo;
import com.wecloud.im.param.MsgVo;
import com.wecloud.im.sdk.enums.ChatTypeEnum;
import com.wecloud.im.sdk.enums.FriendStateEnum;
import com.wecloud.im.sdk.enums.GroupRoleEnum;
import com.wecloud.im.sdk.enums.MutedEnum;
......@@ -177,9 +178,17 @@ public class NormalChatAction {
continue;
}
// 入库 保存收件箱
saveImInbox(imApplication, data.getToConversation(), imMessageOnlineSend.getMsgId(),
saveImInbox(imApplication, conversation, imMessageOnlineSend.getMsgId(),
conversationMembers, SnowflakeUtil.getId());
// 入库成功后 判断是否是临时会话 如果是,检查接受方的会话display状态是否是1(显示),如果不是,需要修改为是
if (ChatTypeEnum.TEMP.getCode().equals(conversation.getChatType())) {
if (conversationMembers.getDisplayStatus().equals(0L)) {
conversationMembers.setDisplayStatus(1L);
imConversationMembersService.updateById(conversationMembers);
}
}
// 在线用户直接发消息
sendMsgForOnline(imClientReceiver.getId(), imMessageOnlineSend);
......@@ -268,12 +277,13 @@ public class NormalChatAction {
* 入库 保存收件箱
*
* @param imApplication
* @param toConversationId
* @param conversation
* @param messageId
* @param conversationMembers
* @param imInboxId
*/
private void saveImInbox(ImApplication imApplication, Long toConversationId, long messageId, ImConversationMembers conversationMembers, long imInboxId) {
private void saveImInbox(ImApplication imApplication, ImConversationQueryVo conversation, long messageId,
ImConversationMembers conversationMembers, long imInboxId) {
ImInbox imInbox = new ImInbox();
imInbox.setId(imInboxId);
imInbox.setCreateTime(new Date());
......@@ -282,7 +292,7 @@ public class NormalChatAction {
imInbox.setFkMsgId(messageId);
imInbox.setReadMsgStatus(0);
imInbox.setReceiverMsgStatus(0);
imInbox.setFkConversationId(toConversationId);
imInbox.setFkConversationId(conversation.getId());
imInboxService.save(imInbox);
}
......
......@@ -21,11 +21,14 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImConversation;
import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.friend.entity.ImFriend;
import com.wecloud.im.friend.entity.ImFriendRecommend;
import com.wecloud.im.friend.mapper.ImFriendMapper;
......@@ -36,9 +39,12 @@ import com.wecloud.im.friend.param.ImFriendBaseDto;
import com.wecloud.im.friend.param.ImFriendPageParam;
import com.wecloud.im.friend.param.ImFriendRecommendDto;
import com.wecloud.im.friend.param.UnfriendParam;
import com.wecloud.im.mapper.ImConversationMapper;
import com.wecloud.im.param.ImClientSimpleDto;
import com.wecloud.im.sdk.enums.ChatTypeEnum;
import com.wecloud.im.sdk.enums.FriendStateEnum;
import com.wecloud.im.service.ImClientService;
import com.wecloud.im.service.ImConversationMembersService;
import com.wecloud.utils.SnowflakeUtil;
/**
......@@ -61,6 +67,11 @@ public class ImFriendService extends BaseServiceImpl<ImFriendMapper, ImFriend> {
@Autowired
private FriendEventSender friendEventSender;
@Autowired
private ImConversationMapper imConversationMapper;
private ImConversationMembersService imConversationMembersService;
/**
* 查看朋友详情
* @param currentClientId
......@@ -161,7 +172,14 @@ public class ImFriendService extends BaseServiceImpl<ImFriendMapper, ImFriend> {
friend.setState(FriendStateEnum.UNSURE.getCode());
this.updateByKey(friend);
}
// 检查是否存在会话,如果存在 将会话类型修改为1 单聊 双方都显示
ImConversation existConversation = imConversationMapper.getRepetitionConversationSingle(currentClient.getId(), friendClient.getId());
if (existConversation != null && ChatTypeEnum.TEMP.getCode().equals(existConversation.getChatType())) {
existConversation.setChatType(ChatTypeEnum.SINGLE.getCode());
imConversationMapper.updateById(existConversation);
imConversationMembersService.update(new UpdateWrapper<ImConversationMembers>().set("display_status",
1).eq("fk_conversation_id", existConversation.getId()).eq("fk_appid", existConversation.getFkAppid()));
}
//既然申请好友了,就删除好友推荐
this.batchDeleteRecommend(currentClient, Collections.singletonList(friendClient.getClientId()));
this.batchDeleteRecommend(friendClient, Collections.singletonList(currentClient.getClientId()));
......
......@@ -9,10 +9,26 @@ import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
*/
public enum ChatTypeEnum implements BaseEnum {
/**
* 单聊
*/
SINGLE(1, "单聊"),
/**
* 普通群
*/
NORMAL_GROUP(2, "普通群"),
/**
* 万人群
*/
THOUSAND_GROUP(3, "万人群"),
CHAT_ROOM(4, "聊天室");
/**
* 聊天室
*/
CHAT_ROOM(4, "聊天室"),
/**
* 临时会话
*/
TEMP(5, "临时会话");
private final Integer code;
private final String desc;
......
......@@ -24,8 +24,9 @@
</select>
<select id="getMyImConversationListAndMsgCount" resultType="com.wecloud.im.vo.ConversationVo">
SELECT imConversation.id as id,
select * from (SELECT imConversation.id as id,
imConversation.create_time,
imConversation.update_time,
imConversation.`name`,
imConversation.chat_type,
imConversation.member_count,
......@@ -59,13 +60,15 @@
FROM im_conversation_members AS imConversationMembers
INNER JOIN im_conversation AS imConversation
ON imConversation.id = imConversationMembers.fk_conversation_id
INNER JOIN im_client AS im_client ON im_client.id = imConversation.creator
INNER JOIN im_client ON im_client.id = imConversation.creator
WHERE imConversationMembers.fk_client_id = #{currentClientId}
AND imConversationMembers.display_status = 1
<if test="conversationId != null">
AND imConversation.id = #{conversationId}
</if>
GROUP BY imConversation.id
GROUP BY imConversation.id) t
order by t.update_time desc
</select>
<select id="getMyImConversationList" resultType="com.wecloud.im.entity.ImConversation">
......
......@@ -67,7 +67,7 @@ public class Conversation implements Serializable {
private String members;
/**
* "会话属性,1:单聊,2:普通群,3:万人群,4:聊天室"
* "会话属性,1:单聊,2:普通群,3:万人群,4:聊天室 5: 临时会话"
*/
private Integer chatType;
......
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