Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wecloud_im_server
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
hewei
wecloud_im_server
Commits
c52a49c7
Commit
c52a49c7
authored
May 20, 2022
by
罗长华
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
如果双方还不是好友,此时创建的会话,会话类型为临时会话,且对方会话不可见
当临时会话创建者发送一条消息后,对方会话可见 当为朋友时,会话升级为单聊类型,双方可见
parent
fb6ec7bc
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
317 additions
and
278 deletions
+317
-278
core/src/main/java/com/wecloud/im/action/NormalChatAction.java
+14
-4
core/src/main/java/com/wecloud/im/friend/service/ImFriendService.java
+19
-1
core/src/main/java/com/wecloud/im/sdk/enums/ChatTypeEnum.java
+17
-1
core/src/main/java/com/wecloud/im/service/impl/ImConversationServiceImpl.java
+260
-268
core/src/main/resources/mapper/ImConversationMapper.xml
+6
-3
im-sdk/src/main/java/com/wecloud/im/sdk/model/Conversation.java
+1
-1
No files found.
core/src/main/java/com/wecloud/im/action/NormalChatAction.java
View file @
c52a49c7
...
@@ -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
);
}
}
...
...
core/src/main/java/com/wecloud/im/friend/service/ImFriendService.java
View file @
c52a49c7
...
@@ -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
()));
...
...
core/src/main/java/com/wecloud/im/sdk/enums/ChatTypeEnum.java
View file @
c52a49c7
...
@@ -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
;
...
...
core/src/main/java/com/wecloud/im/service/impl/ImConversationServiceImpl.java
View file @
c52a49c7
...
@@ -30,6 +30,7 @@ import org.springframework.transaction.annotation.Transactional;
...
@@ -30,6 +30,7 @@ import org.springframework.transaction.annotation.Transactional;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.date.DateUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
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.conditions.update.UpdateWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
...
@@ -45,6 +46,8 @@ import com.wecloud.im.entity.ImClient;
...
@@ -45,6 +46,8 @@ import com.wecloud.im.entity.ImClient;
import
com.wecloud.im.entity.ImConversation
;
import
com.wecloud.im.entity.ImConversation
;
import
com.wecloud.im.entity.ImConversationMembers
;
import
com.wecloud.im.entity.ImConversationMembers
;
import
com.wecloud.im.entity.ImMessage
;
import
com.wecloud.im.entity.ImMessage
;
import
com.wecloud.im.friend.entity.ImFriend
;
import
com.wecloud.im.friend.service.ImFriendService
;
import
com.wecloud.im.mapper.ImConversationMapper
;
import
com.wecloud.im.mapper.ImConversationMapper
;
import
com.wecloud.im.param.ChatRoomMemberPageParam
;
import
com.wecloud.im.param.ChatRoomMemberPageParam
;
import
com.wecloud.im.param.DisbandConversationParam
;
import
com.wecloud.im.param.DisbandConversationParam
;
...
@@ -72,6 +75,7 @@ import com.wecloud.im.param.add.ServerImConversationCreate;
...
@@ -72,6 +75,7 @@ import com.wecloud.im.param.add.ServerImConversationCreate;
import
com.wecloud.im.post.Couriers
;
import
com.wecloud.im.post.Couriers
;
import
com.wecloud.im.post.MessageBuilder
;
import
com.wecloud.im.post.MessageBuilder
;
import
com.wecloud.im.sdk.enums.ChatTypeEnum
;
import
com.wecloud.im.sdk.enums.ChatTypeEnum
;
import
com.wecloud.im.sdk.enums.FriendStateEnum
;
import
com.wecloud.im.sdk.enums.GroupChatSettingTypeEnum
;
import
com.wecloud.im.sdk.enums.GroupChatSettingTypeEnum
;
import
com.wecloud.im.sdk.enums.GroupRoleEnum
;
import
com.wecloud.im.sdk.enums.GroupRoleEnum
;
import
com.wecloud.im.sdk.enums.JoinConversationTypeEnum
;
import
com.wecloud.im.sdk.enums.JoinConversationTypeEnum
;
...
@@ -137,6 +141,9 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -137,6 +141,9 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
private
ContextService
contextService
;
private
ContextService
contextService
;
@Autowired
@Autowired
private
ImFriendService
friendService
;
@Autowired
private
ChatRoomCacheManager
chatRoomCacheManager
;
private
ChatRoomCacheManager
chatRoomCacheManager
;
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
...
@@ -148,163 +155,39 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -148,163 +155,39 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Override
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ImConversationCreateVo
createImConversation
(
ImConversationCreate
imConversationCreate
)
{
public
ImConversationCreateVo
createImConversation
(
ImConversationCreate
imConversationCreate
)
{
ImClient
createClient
=
contextService
.
getImClientIfNotNullOrThrow
();
// 根据appKey查询application
ImApplication
imApplication
=
contextService
.
getImApplicationIfNotNullOrThrow
(
createClient
.
getFkAppid
());
if
(
BaseEnum
.
valueOf
(
ChatTypeEnum
.
class
,
imConversationCreate
.
getChatType
())
==
null
)
{
if
(
BaseEnum
.
valueOf
(
ChatTypeEnum
.
class
,
imConversationCreate
.
getChatType
())
==
null
)
{
log
.
info
(
"会话类型不存在"
);
log
.
info
(
"会话类型不存在"
);
throw
new
BusinessException
(
ApiCode
.
PARAMETER_EXCEPTION
);
throw
new
BusinessException
(
ApiCode
.
PARAMETER_EXCEPTION
);
}
}
ImClient
createClient
=
contextService
.
getImClientIfNotNullOrThrow
();
if
(
ChatTypeEnum
.
CHAT_ROOM
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
// 聊天室
return
this
.
createChatRoom
(
imConversationCreate
,
createClient
);
}
if
(
CollectionUtils
.
isEmpty
(
imConversationCreate
.
getClientIds
()))
{
if
(
CollectionUtils
.
isEmpty
(
imConversationCreate
.
getClientIds
()))
{
log
.
info
(
"未找到群成员信息"
);
log
.
info
(
"未找到群成员信息"
);
throw
new
BusinessException
(
ApiCode
.
PARAMETER_EXCEPTION
);
throw
new
BusinessException
(
ApiCode
.
PARAMETER_EXCEPTION
);
}
}
// 成员不存在,不能创建会话
Integer
chatType
=
imConversationCreate
.
getChatType
();
for
(
String
clientId
:
imConversationCreate
.
getClientIds
())
{
String
name
=
imConversationCreate
.
getName
();
ImClient
imClient
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
().
select
(
ImClient:
:
getId
).
eq
(
ImClient:
:
getFkAppid
,
createClient
.
getFkAppid
()).
eq
(
ImClient:
:
getClientId
,
clientId
));
String
attributes
=
imConversationCreate
.
getAttributes
();
if
(
imClient
==
null
)
{
List
<
String
>
memberClientIds
=
imConversationCreate
.
getClientIds
();
log
.
info
(
"成员不存在,不能创建会话 clientId:{}"
,
clientId
);
if
(
ChatTypeEnum
.
CHAT_ROOM
.
getCode
().
equals
(
chatType
))
{
throw
new
BusinessException
(
ApiCode
.
CLIENT_NOT_FOUNT
);
// 聊天室
}
return
this
.
createChatRoom
(
imConversationCreate
,
createClient
);
}
}
else
if
(
ChatTypeEnum
.
SINGLE
.
getCode
().
equals
(
chatType
))
{
ImConversation
conversation
=
this
.
createPrivateChat
(
createClient
,
memberClientIds
.
get
(
0
),
name
,
// 根据appKey查询application
attributes
);
ImApplication
imApplication
=
contextService
.
getImApplicationIfNotNullOrThrow
(
createClient
.
getFkAppid
());
// 该应用 是否允许创建重复单聊类型会话 0不允许 1允许
if
(
imApplication
.
getRepeatSessionStatus
()
!=
null
&&
imApplication
.
getRepeatSessionStatus
()
==
0
)
{
// 判断是否已经存在单聊类型会话
// size() == 1 为单聊不允许重复创建 两个用户如果已经创建过会话,不能重复创建会话
if
(
imConversationCreate
.
getClientIds
().
size
()
==
1
)
{
ImClient
client2
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
().
eq
(
ImClient:
:
getFkAppid
,
createClient
.
getFkAppid
()).
eq
(
ImClient:
:
getClientId
,
imConversationCreate
.
getClientIds
().
get
(
0
)));
// 如果存在重复单聊类型会话,则不会为空
ImConversation
repetitionConversationInfo
=
imConversationMapper
.
getRepetitionConversationSingle
(
createClient
.
getId
(),
client2
.
getId
());
if
(
repetitionConversationInfo
!=
null
)
{
log
.
info
(
"存在重复的单聊会话,返回已存在的单聊类型会话id: {}"
,
repetitionConversationInfo
.
getId
());
// 返回已存在的单聊类型会话id
ImConversationCreateVo
imConversationCreateVo
=
new
ImConversationCreateVo
();
ImConversationCreateVo
imConversationCreateVo
=
new
ImConversationCreateVo
();
imConversationCreateVo
.
setId
(
repetitionConversationInfo
.
getId
());
imConversationCreateVo
.
setId
(
conversation
.
getId
());
return
imConversationCreateVo
;
return
imConversationCreateVo
;
}
}
else
if
(
ChatTypeEnum
.
NORMAL_GROUP
.
getCode
().
equals
(
chatType
))
{
}
ImConversation
conversation
=
this
.
createGroupChat
(
imApplication
,
createClient
,
memberClientIds
,
name
,
attributes
);
}
else
{
//创建重复一对一会话时对比扩展字段 1是
if
(
imApplication
.
getContrastExtendedFieldStatus
()
==
1
)
{
// 被邀请client
ImClient
inviteClient
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
().
eq
(
ImClient:
:
getFkAppid
,
createClient
.
getFkAppid
()).
eq
(
ImClient:
:
getClientId
,
imConversationCreate
.
getClientIds
().
get
(
0
)));
log
.
info
(
"RequestAttributes:"
+
imConversationCreate
.
getAttributes
());
Long
repetitionConversation
=
getRepetitionConversationAttributes
(
createClient
.
getId
(),
inviteClient
.
getId
(),
imConversationCreate
.
getAttributes
());
// 存在重复会话
if
(
repetitionConversation
!=
null
)
{
log
.
info
(
"出现Attributes重复"
);
ImConversationCreateVo
imConversationCreateVo
=
new
ImConversationCreateVo
();
ImConversationCreateVo
imConversationCreateVo
=
new
ImConversationCreateVo
();
imConversationCreateVo
.
setId
(
repetitionConversation
);
imConversationCreateVo
.
setId
(
conversation
.
getId
());
// 为重复
return
imConversationCreateVo
;
return
imConversationCreateVo
;
}
}
}
return
null
;
}
// 会话id
Long
imConversationId
=
SnowflakeUtil
.
getId
();
// 创建者
Long
creator
=
createClient
.
getId
();
// 创建会话
ImConversation
imConversation
=
new
ImConversation
();
imConversation
.
setId
(
imConversationId
);
imConversation
.
setCreateTime
(
new
Date
());
imConversation
.
setLastMessage
(
null
);
imConversation
.
setFkAppid
(
createClient
.
getFkAppid
());
imConversation
.
setCreator
(
creator
);
imConversation
.
setMemberCount
(
imConversationCreate
.
getClientIds
().
size
()
+
1
);
imConversation
.
setChatType
(
imConversationCreate
.
getChatType
());
imConversation
.
setName
(
imConversationCreate
.
getName
());
imConversation
.
setSystemFlag
(
false
);
// 拓展数据
String
attributesStr
=
JsonUtils
.
encodeJson
(
imConversationCreate
.
getAttributes
());
imConversation
.
setAttributes
(
attributesStr
);
imConversationService
.
save
(
imConversation
);
Date
now
=
new
Date
();
// 将创建者自己添加到会话
Long
imConversationMembersId
=
SnowflakeUtil
.
getId
();
ImConversationMembers
imConversationMembers
=
new
ImConversationMembers
();
imConversationMembers
.
setId
(
imConversationMembersId
);
imConversationMembers
.
setCreateTime
(
now
);
imConversationMembers
.
setUpdateTime
(
now
);
imConversationMembers
.
setFkAppid
(
createClient
.
getFkAppid
());
imConversationMembers
.
setFkConversationId
(
imConversationId
);
imConversationMembers
.
setFkClientId
(
creator
);
imConversationMembers
.
setClientId
(
createClient
.
getClientId
());
imConversationMembers
.
setRole
(
GroupRoleEnum
.
OWNER
.
getCode
());
// 会话拥有者加入会话方式固定
imConversationMembers
.
setJoinTypeCode
(
JoinConversationTypeEnum
.
OWNER
.
getCode
());
String
joinTypeMsg
=
""
;
if
(
ChatTypeEnum
.
SINGLE
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
joinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
createClient
.
getClientId
()
+
"<@>创建了该会话"
;
}
else
if
(
ChatTypeEnum
.
NORMAL_GROUP
.
getCode
().
equals
(
imConversationCreate
.
getChatType
())
||
ChatTypeEnum
.
THOUSAND_GROUP
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
joinTypeMsg
=
joinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
createClient
.
getClientId
()
+
"<@>创建了该群聊"
;
;
}
else
if
(
ChatTypeEnum
.
CHAT_ROOM
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
joinTypeMsg
=
joinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
createClient
.
getClientId
()
+
"<@>创建了该聊天室"
;
;
}
imConversationMembers
.
setJoinTypeMsg
(
joinTypeMsg
);
imConversationMembersService
.
save
(
imConversationMembers
);
// 将他人添加到会话
for
(
String
id
:
imConversationCreate
.
getClientIds
())
{
ImClient
client2
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
().
eq
(
ImClient:
:
getFkAppid
,
createClient
.
getFkAppid
()).
eq
(
ImClient:
:
getClientId
,
id
));
ImConversationMembers
imConversationMembers2
=
new
ImConversationMembers
();
imConversationMembers2
.
setId
(
SnowflakeUtil
.
getId
());
imConversationMembers2
.
setCreateTime
(
new
Date
());
imConversationMembers2
.
setUpdateTime
(
new
Date
());
imConversationMembers2
.
setFkAppid
(
createClient
.
getFkAppid
());
imConversationMembers2
.
setFkConversationId
(
imConversationId
);
imConversationMembers2
.
setFkClientId
(
client2
.
getId
());
imConversationMembers2
.
setClientId
(
client2
.
getClientId
());
imConversationMembers2
.
setRole
(
GroupRoleEnum
.
NORMAL
.
getCode
());
// 加入会话方式固定为 邀请
imConversationMembers
.
setJoinTypeCode
(
JoinConversationTypeEnum
.
BE_INVITED
.
getCode
());
String
memberJoinTypeMsg
=
""
;
if
(
ChatTypeEnum
.
SINGLE
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
memberJoinTypeMsg
=
"由 <@>"
+
createClient
.
getClientId
()
+
"<@>邀请加入该会话"
;
}
else
if
(
ChatTypeEnum
.
NORMAL_GROUP
.
getCode
().
equals
(
imConversationCreate
.
getChatType
())
||
ChatTypeEnum
.
THOUSAND_GROUP
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
memberJoinTypeMsg
=
joinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
createClient
.
getClientId
()
+
"<@>邀请进聊"
;
;
}
else
if
(
ChatTypeEnum
.
CHAT_ROOM
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
memberJoinTypeMsg
=
joinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
createClient
.
getClientId
()
+
"<@>邀请进入聊天室"
;
;
}
imConversationMembersService
.
save
(
imConversationMembers2
);
if
(
imConversationCreate
.
getClientIds
().
size
()
>
1
)
{
// 给被拉入群的成员下发事件消息 -- 单聊则不下发
Map
<
String
,
Object
>
content
=
Maps
.
newHashMap
();
content
.
put
(
"operator"
,
createClient
.
getClientId
());
//操作的client ID
content
.
put
(
"passivityOperator"
,
client2
.
getClientId
());
//被操作的client ID
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
CLIENT_JOIN_NEW_CONVERSATION
,
imApplication
,
createClient
,
imConversation
,
JsonUtils
.
encodeJson
(
content
));
imMessageService
.
save
(
imMessage
);
// 投递消息
couriers
.
deliver
(
imMessage
,
content
,
createClient
,
client2
,
WsResponseCmdEnum
.
CONVERSATION_EVENT_MSG
);
}
}
ImConversationCreateVo
imConversationCreateVo
=
new
ImConversationCreateVo
();
imConversationCreateVo
.
setId
(
imConversationId
);
return
imConversationCreateVo
;
}
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
...
@@ -314,138 +197,26 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -314,138 +197,26 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 聊天室
// 聊天室
throw
new
BusinessException
(
"不允许创建聊天室"
);
throw
new
BusinessException
(
"不允许创建聊天室"
);
}
}
ImApplication
imApplication
=
imConversationCreate
.
getApplication
();
ImClient
creator
=
imConversationCreate
.
getCreator
();
Long
appId
=
creator
.
getFkAppid
();
if
(
CollectionUtils
.
isEmpty
(
imConversationCreate
.
getMembers
()))
{
if
(
CollectionUtils
.
isEmpty
(
imConversationCreate
.
getMembers
()))
{
log
.
info
(
"未找到群成员信息"
);
log
.
info
(
"未找到群成员信息"
);
throw
new
BusinessException
(
ApiCode
.
PARAMETER_EXCEPTION
);
throw
new
BusinessException
(
ApiCode
.
PARAMETER_EXCEPTION
);
}
}
// 该应用 是否允许创建重复单聊类型会话 0不允许 1允许
ImApplication
imApplication
=
imConversationCreate
.
getApplication
();
if
(
imApplication
.
getRepeatSessionStatus
()
!=
null
&&
imApplication
.
getRepeatSessionStatus
()
==
0
)
{
ImClient
creator
=
imConversationCreate
.
getCreator
();
// 判断是否已经存在单聊类型会话
Long
appId
=
creator
.
getFkAppid
();
// size() == 1 为单聊不允许重复创建 两个用户如果已经创建过会话,不能重复创建会话
if
(
imConversationCreate
.
getMembers
().
size
()
==
1
)
{
ImClient
member
=
imConversationCreate
.
getMembers
().
get
(
0
);
// 如果存在重复单聊类型会话,则不会为空
ImConversation
repetitionConversationInfo
=
imConversationMapper
.
getRepetitionConversationSingle
(
creator
.
getId
(),
member
.
getId
());
if
(
repetitionConversationInfo
!=
null
)
{
log
.
info
(
"存在重复的单聊会话,返回已存在的单聊类型会话id: {}"
,
repetitionConversationInfo
.
getId
());
// 返回已存在的会话
return
repetitionConversationInfo
;
}
}
}
else
{
//创建重复一对一会话时对比扩展字段 1是
if
(
imApplication
.
getContrastExtendedFieldStatus
()
==
1
)
{
// 被邀请client
ImClient
member
=
imConversationCreate
.
getMembers
().
get
(
0
);
log
.
info
(
"RequestAttributes:"
+
imConversationCreate
.
getAttributes
());
Long
repetitionConversation
=
getRepetitionConversationAttributes
(
creator
.
getId
(),
member
.
getId
(),
imConversationCreate
.
getAttributes
());
// 存在重复会话
if
(
repetitionConversation
!=
null
)
{
log
.
info
(
"出现Attributes重复"
);
// 为重复
return
getById
(
repetitionConversation
);
}
}
}
// 会话id
Long
imConversationId
=
SnowflakeUtil
.
getId
();
// 创建者
Long
creatorImClientId
=
creator
.
getId
();
// 创建会话
ImConversation
imConversation
=
new
ImConversation
();
imConversation
.
setId
(
imConversationId
);
imConversation
.
setCreateTime
(
new
Date
());
imConversation
.
setLastMessage
(
null
);
imConversation
.
setFkAppid
(
appId
);
imConversation
.
setCreator
(
creatorImClientId
);
imConversation
.
setMemberCount
(
imConversationCreate
.
getMembers
().
size
()
+
1
);
imConversation
.
setChatType
(
imConversationCreate
.
getChatType
().
getCode
());
imConversation
.
setName
(
imConversationCreate
.
getName
());
imConversation
.
setSystemFlag
(
false
);
// 拓展数据
String
attributesStr
=
JsonUtils
.
encodeJson
(
imConversationCreate
.
getAttributes
());
imConversation
.
setAttributes
(
attributesStr
);
imConversationService
.
save
(
imConversation
);
// 将创建者自己添加到会话
Date
now
=
new
Date
();
Long
imConversationMembersId
=
SnowflakeUtil
.
getId
();
ImConversationMembers
conversationCreator
=
new
ImConversationMembers
();
conversationCreator
.
setId
(
imConversationMembersId
);
conversationCreator
.
setCreateTime
(
now
);
conversationCreator
.
setUpdateTime
(
now
);
conversationCreator
.
setFkAppid
(
appId
);
conversationCreator
.
setFkConversationId
(
imConversationId
);
conversationCreator
.
setFkClientId
(
creatorImClientId
);
conversationCreator
.
setClientId
(
creator
.
getClientId
());
conversationCreator
.
setRole
(
GroupRoleEnum
.
OWNER
.
getCode
());
conversationCreator
.
setJoinTypeCode
(
JoinConversationTypeEnum
.
OWNER
.
getCode
());
String
joinTypeMsg
=
""
;
if
(
ChatTypeEnum
.
SINGLE
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
joinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
creatorImClientId
+
"<@>创建了该会话"
;
}
imConversationMembersService
.
save
(
conversationCreator
);
// 将他人添加到会话
for
(
ImClient
member
:
imConversationCreate
.
getMembers
())
{
ImConversationMembers
imConversationMember
=
new
ImConversationMembers
();
imConversationMember
.
setId
(
SnowflakeUtil
.
getId
());
imConversationMember
.
setCreateTime
(
new
Date
());
imConversationMember
.
setUpdateTime
(
new
Date
());
imConversationMember
.
setFkAppid
(
appId
);
imConversationMember
.
setFkConversationId
(
imConversationId
);
imConversationMember
.
setFkClientId
(
member
.
getId
());
imConversationMember
.
setClientId
(
member
.
getClientId
());
imConversationMember
.
setRole
(
GroupRoleEnum
.
NORMAL
.
getCode
());
// 加入会话方式固定为 邀请
imConversationMember
.
setJoinTypeCode
(
JoinConversationTypeEnum
.
BE_INVITED
.
getCode
());
String
memberJoinTypeMsg
=
""
;
if
(
ChatTypeEnum
.
SINGLE
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
memberJoinTypeMsg
=
"由 <@>"
+
creatorImClientId
+
"<@>邀请加入该会话"
;
}
imConversationMembersService
.
save
(
imConversationMember
);
if
(
imConversationCreate
.
getMembers
().
size
()
>
1
)
{
// 给被拉入群的成员下发事件消息 -- 单聊则不下发
ImMessage
imMessage
=
new
ImMessage
();
Map
<
String
,
Object
>
content
=
Maps
.
newHashMap
();
content
.
put
(
"operator"
,
creator
.
getClientId
());
//操作的client ID
content
.
put
(
"passivityOperator"
,
member
.
getClientId
());
//被操作的client ID
imMessage
.
setContent
(
JsonUtils
.
encodeJson
(
content
));
// 保存消息至消息表
ChatTypeEnum
chatType
=
imConversationCreate
.
getChatType
();
imMessage
.
setId
(
SnowflakeUtil
.
getId
());
String
name
=
imConversationCreate
.
getName
();
imMessage
.
setMsgType
(
MsgTypeEnum
.
CLIENT_JOIN_NEW_CONVERSATION
.
getUriCode
());
String
attributes
=
imConversationCreate
.
getAttributes
();
imMessage
.
setCreateTime
(
new
Date
());
List
<
String
>
memberClientIds
=
imConversationCreate
.
getMembers
().
stream
().
map
(
ImClient:
:
getClientId
).
collect
(
Collectors
.
toList
());
imMessage
.
setFkAppid
(
imApplication
.
getId
());
if
(
ChatTypeEnum
.
SINGLE
.
equals
(
chatType
))
{
imMessage
.
setSender
(
creator
.
getId
());
return
this
.
createPrivateChat
(
creator
,
memberClientIds
.
get
(
0
),
name
,
attributes
);
imMessage
.
setWithdraw
(
false
);
}
else
if
(
ChatTypeEnum
.
NORMAL_GROUP
.
equals
(
chatType
))
{
imMessage
.
setEvent
(
true
);
return
this
.
createGroupChat
(
imApplication
,
creator
,
memberClientIds
,
name
,
attributes
);
imMessage
.
setSystemFlag
(
false
);
imMessage
.
setSendStatus
(
2
);
imMessage
.
setFkConversationId
(
imConversation
.
getId
());
imMessageService
.
save
(
imMessage
);
// 投递消息
couriers
.
deliver
(
imMessage
,
content
,
creator
,
member
,
WsResponseCmdEnum
.
CONVERSATION_EVENT_MSG
);
}
}
}
return
null
;
ImConversationCreateVo
imConversationCreateVo
=
new
ImConversationCreateVo
();
imConversationCreateVo
.
setId
(
imConversationId
);
return
imConversation
;
}
}
@Override
@Override
...
@@ -1469,4 +1240,225 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1469,4 +1240,225 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
}
}
}
}
/**
* 创建私聊会话
* @Author luozh
* @Date 2022年05月20日 01:36:33
* @param
* @Return
*/
private
ImConversation
createPrivateChat
(
ImClient
creator
,
String
memberUserId
,
String
name
,
String
attributes
)
{
Long
appId
=
creator
.
getFkAppid
();
ImClient
memberClient
=
imClientService
.
getOne
(
Wrappers
.<
ImClient
>
lambdaQuery
().
eq
(
ImClient:
:
getClientId
,
memberUserId
).
eq
(
ImClient:
:
getFkAppid
,
appId
));
if
(
memberClient
==
null
)
{
log
.
info
(
"成员不存在,不能创建会话 clientId:{}"
,
memberUserId
);
throw
new
BusinessException
(
ApiCode
.
CLIENT_NOT_FOUNT
);
}
// 查看好友关系
ImFriend
my
=
friendService
.
getByKey
(
creator
.
getClientId
(),
memberUserId
);
Boolean
isStranger
=
false
;
if
(
my
==
null
||
!(
FriendStateEnum
.
CONFORM
.
getCode
().
equals
(
my
.
getState
())))
{
isStranger
=
true
;
}
// 如果存在重复单聊类型会话,则不会为空
ImConversation
existConversation
=
imConversationMapper
.
getRepetitionConversationSingle
(
creator
.
getId
(),
memberClient
.
getId
());
if
(
existConversation
!=
null
)
{
// 双方可见
List
<
ImConversationMembers
>
memberList
=
imConversationMembersService
.
list
(
Wrappers
.<
ImConversationMembers
>
lambdaQuery
().
eq
(
ImConversationMembers:
:
getFkConversationId
,
existConversation
.
getId
()));
for
(
ImConversationMembers
members
:
memberList
)
{
members
.
setDisplayStatus
(
1L
);
}
imConversationMembersService
.
updateBatchById
(
memberList
);
log
.
info
(
"存在重复的单聊会话,返回已存在的单聊类型会话id: {}"
,
existConversation
.
getId
());
// 返回已存在的单聊类型会话id
return
existConversation
;
}
// 创建会话
ImConversation
conversation
=
buildConversation
(
creator
,
ChatTypeEnum
.
SINGLE
,
name
,
2
,
attributes
);
// 创建成员
List
<
ImConversationMembers
>
conversationMemberList
=
buildPrivateChatMembers
(
conversation
,
creator
,
memberClient
);
if
(
isStranger
)
{
// 如果是陌生人,刚创建会话的时候,只有创建者可见会话 会话类型设置为临时会话
conversation
.
setChatType
(
ChatTypeEnum
.
TEMP
.
getCode
());
ImConversationMembers
strangerConversationMember
=
conversationMemberList
.
get
(
1
);
strangerConversationMember
.
setDisplayStatus
(
0L
);
}
this
.
save
(
conversation
);
this
.
imConversationMembersService
.
saveBatch
(
conversationMemberList
);
return
conversation
;
}
/**
* 创建群聊会话
* @return
*/
private
ImConversation
createGroupChat
(
ImApplication
application
,
ImClient
creator
,
List
<
String
>
memberUserIds
,
String
name
,
String
attributes
)
{
// 判断client是否都存在
List
<
ImClient
>
memberClients
=
imClientService
.
list
(
Wrappers
.<
ImClient
>
lambdaQuery
()
.
select
(
ImClient:
:
getClientId
)
.
eq
(
ImClient:
:
getFkAppid
,
creator
.
getFkAppid
())
.
in
(
ImClient:
:
getClientId
,
memberUserIds
));
if
(
memberClients
.
size
()
!=
memberUserIds
.
size
())
{
memberUserIds
.
removeAll
(
memberClients
.
stream
().
map
(
ImClient:
:
getClientId
).
collect
(
Collectors
.
toList
()));
log
.
info
(
"成员不存在,不能创建会话 clientIds:{}"
,
JSONObject
.
toJSONString
(
memberUserIds
));
throw
new
BusinessException
(
ApiCode
.
CLIENT_NOT_FOUNT
);
}
// 创建会话
ImConversation
conversation
=
buildConversation
(
creator
,
ChatTypeEnum
.
NORMAL_GROUP
,
name
,
memberClients
.
size
()
+
1
,
attributes
);
// 创建成员
List
<
ImConversationMembers
>
conversationMemberList
=
buildGroupChatMembers
(
conversation
,
creator
,
memberClients
);
this
.
save
(
conversation
);
this
.
imConversationMembersService
.
saveBatch
(
conversationMemberList
);
// 给被拉入群的成员下发事件消息
for
(
ImClient
member
:
memberClients
)
{
Map
<
String
,
Object
>
content
=
Maps
.
newHashMap
();
content
.
put
(
"operator"
,
creator
.
getClientId
());
//操作的client ID
content
.
put
(
"passivityOperator"
,
member
.
getClientId
());
//被操作的client ID
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
CLIENT_JOIN_NEW_CONVERSATION
,
application
,
creator
,
conversation
,
JsonUtils
.
encodeJson
(
content
));
imMessageService
.
save
(
imMessage
);
// 投递消息
couriers
.
deliver
(
imMessage
,
content
,
creator
,
member
,
WsResponseCmdEnum
.
CONVERSATION_EVENT_MSG
);
}
return
conversation
;
}
private
ImConversation
buildConversation
(
ImClient
creator
,
ChatTypeEnum
chatType
,
String
name
,
Integer
memberCount
,
String
attributes
)
{
// 创建会话
Long
imConversationId
=
SnowflakeUtil
.
getId
();
ImConversation
imConversation
=
new
ImConversation
();
imConversation
.
setId
(
imConversationId
);
imConversation
.
setCreateTime
(
new
Date
());
imConversation
.
setLastMessage
(
null
);
imConversation
.
setFkAppid
(
creator
.
getFkAppid
());
imConversation
.
setCreator
(
creator
.
getId
());
imConversation
.
setMemberCount
(
memberCount
);
imConversation
.
setChatType
(
chatType
.
getCode
());
imConversation
.
setName
(
name
);
imConversation
.
setSystemFlag
(
false
);
// 拓展数据
String
attributesStr
=
JsonUtils
.
encodeJson
(
attributes
);
imConversation
.
setAttributes
(
attributesStr
);
return
imConversation
;
}
/**
* 构建群聊天成员
* @Author luozh
* @Date 2022年05月20日 02:39:32
* @param conversation
* @param creator
* @param memberClient
* @Return
*/
private
List
<
ImConversationMembers
>
buildGroupChatMembers
(
ImConversation
conversation
,
ImClient
creator
,
List
<
ImClient
>
memberClient
)
{
List
<
ImConversationMembers
>
conversationMembers
=
new
ArrayList
<>();
ImConversationMembers
creatorMember
=
buildConversationMember
(
conversation
,
creator
,
GroupRoleEnum
.
OWNER
);
conversationMembers
.
add
(
creatorMember
);
for
(
ImClient
client
:
memberClient
)
{
ImConversationMembers
otherMember
=
buildConversationMember
(
conversation
,
client
,
GroupRoleEnum
.
NORMAL
);
conversationMembers
.
add
(
otherMember
);
}
return
conversationMembers
;
}
/**
* 构建私聊成员
* @Author luozh
* @Date 2022年05月20日 02:39:43
* @param conversation
* @param creator
* @param memberClient
* @Return
*/
private
List
<
ImConversationMembers
>
buildPrivateChatMembers
(
ImConversation
conversation
,
ImClient
creator
,
ImClient
memberClient
)
{
List
<
ImConversationMembers
>
conversationMembers
=
new
ArrayList
<>();
ImConversationMembers
creatorMember
=
buildConversationMember
(
conversation
,
creator
,
GroupRoleEnum
.
OWNER
);
ImConversationMembers
anotherMember
=
buildConversationMember
(
conversation
,
memberClient
,
GroupRoleEnum
.
NORMAL
);
conversationMembers
.
add
(
creatorMember
);
conversationMembers
.
add
(
anotherMember
);
return
conversationMembers
;
}
/**
* 构建会话成员
* @Author luozh
* @Date 2022年05月20日 02:39:52
* @param conversation
* @param member
* @param role
* @Return
*/
private
ImConversationMembers
buildConversationMember
(
ImConversation
conversation
,
ImClient
member
,
GroupRoleEnum
role
)
{
Long
appId
=
conversation
.
getFkAppid
();
Long
conversationId
=
conversation
.
getId
();
Integer
chatType
=
conversation
.
getChatType
();
String
memberUserId
=
member
.
getClientId
();
Date
now
=
new
Date
();
Long
imConversationMembersId
=
SnowflakeUtil
.
getId
();
ImConversationMembers
imConversationMembers
=
new
ImConversationMembers
();
imConversationMembers
.
setId
(
imConversationMembersId
);
imConversationMembers
.
setCreateTime
(
now
);
imConversationMembers
.
setUpdateTime
(
now
);
imConversationMembers
.
setFkAppid
(
appId
);
imConversationMembers
.
setFkConversationId
(
conversationId
);
imConversationMembers
.
setFkClientId
(
member
.
getId
());
imConversationMembers
.
setClientId
(
member
.
getClientId
());
imConversationMembers
.
setDisplayStatus
(
1L
);
if
(
role
.
equals
(
GroupRoleEnum
.
OWNER
))
{
imConversationMembers
.
setRole
(
GroupRoleEnum
.
OWNER
.
getCode
());
// 会话拥有者加入会话方式固定
imConversationMembers
.
setJoinTypeCode
(
JoinConversationTypeEnum
.
OWNER
.
getCode
());
String
joinTypeMsg
=
""
;
if
(
ChatTypeEnum
.
SINGLE
.
getCode
().
equals
(
chatType
))
{
joinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
memberUserId
+
"<@>创建了该会话"
;
}
else
if
(
ChatTypeEnum
.
NORMAL_GROUP
.
getCode
().
equals
(
chatType
)
||
ChatTypeEnum
.
THOUSAND_GROUP
.
getCode
().
equals
(
chatType
))
{
joinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
memberUserId
+
"<@>创建了该群聊"
;
}
else
if
(
ChatTypeEnum
.
CHAT_ROOM
.
getCode
().
equals
(
chatType
))
{
joinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
memberUserId
+
"<@>创建了该聊天室"
;
}
imConversationMembers
.
setJoinTypeMsg
(
joinTypeMsg
);
}
else
{
imConversationMembers
.
setRole
(
GroupRoleEnum
.
NORMAL
.
getCode
());
// 加入会话方式固定为 邀请
imConversationMembers
.
setJoinTypeCode
(
JoinConversationTypeEnum
.
BE_INVITED
.
getCode
());
String
memberJoinTypeMsg
=
""
;
if
(
ChatTypeEnum
.
SINGLE
.
getCode
().
equals
(
chatType
))
{
memberJoinTypeMsg
=
"由 <@>"
+
memberUserId
+
"<@>邀请加入该会话"
;
}
else
if
(
ChatTypeEnum
.
NORMAL_GROUP
.
getCode
().
equals
(
chatType
)
||
ChatTypeEnum
.
THOUSAND_GROUP
.
getCode
().
equals
(
chatType
))
{
memberJoinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
memberUserId
+
"<@>邀请进聊"
;
}
else
if
(
ChatTypeEnum
.
CHAT_ROOM
.
getCode
().
equals
(
chatType
))
{
memberJoinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
memberUserId
+
"<@>邀请进入聊天室"
;
}
imConversationMembers
.
setJoinTypeMsg
(
memberJoinTypeMsg
);
}
return
imConversationMembers
;
}
}
}
core/src/main/resources/mapper/ImConversationMapper.xml
View file @
c52a49c7
...
@@ -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"
>
...
...
im-sdk/src/main/java/com/wecloud/im/sdk/model/Conversation.java
View file @
c52a49c7
...
@@ -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
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment