Commit c52a49c7 by 罗长华

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

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