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
7f6f9a9f
Commit
7f6f9a9f
authored
May 13, 2022
by
罗长华
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
抽象出Couriers和MessageBuilder类,重构会话发送消息方法
parent
819498c8
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
383 additions
and
486 deletions
+383
-486
core/src/main/java/com/wecloud/im/param/GroupChatSettingParam.java
+13
-2
core/src/main/java/com/wecloud/im/post/Couriers.java
+63
-0
core/src/main/java/com/wecloud/im/post/MessageBuilder.java
+80
-0
core/src/main/java/com/wecloud/im/service/ImConversationService.java
+10
-3
core/src/main/java/com/wecloud/im/service/impl/ImConversationServiceImpl.java
+211
-465
core/src/main/java/com/wecloud/im/service/impl/ImGroupServiceImpl.java
+6
-16
No files found.
core/src/main/java/com/wecloud/im/param/GroupChatSettingParam.java
View file @
7f6f9a9f
...
@@ -16,8 +16,11 @@ import com.wecloud.im.sdk.enums.GroupChatSettingTypeEnum;
...
@@ -16,8 +16,11 @@ import com.wecloud.im.sdk.enums.GroupChatSettingTypeEnum;
@Data
@Data
public
class
GroupChatSettingParam
{
public
class
GroupChatSettingParam
{
@ApiModelProperty
(
"设置类型FORBID_ADD_FRIEND 禁止群成员互加好友 FORBID_SEND_RED_PACKETS 禁止群成员发红包 FORBID_SEND_PIC 禁止群成员发图片 "
+
@ApiModelProperty
(
"操作人客户端Id server sdk调用传入"
)
"FORBID_SEND_LINK 禁止群成员发链接"
)
private
String
operatorClientId
;
@ApiModelProperty
(
"设置类型FORBID_ADD_FRIEND 禁止群成员互加好友 FORBID_SEND_PIC 禁止群成员发图片 FORBID_SEND_LINK 禁止群成员发链接"
+
"MUTED 群禁言 NAME修改群名 HEAD_PORTRAIT 修改群头像"
)
private
GroupChatSettingTypeEnum
type
;
private
GroupChatSettingTypeEnum
type
;
@NotNull
@NotNull
...
@@ -26,4 +29,12 @@ public class GroupChatSettingParam {
...
@@ -26,4 +29,12 @@ public class GroupChatSettingParam {
@ApiModelProperty
(
"开启 true是 false否"
)
@ApiModelProperty
(
"开启 true是 false否"
)
private
Boolean
on
;
private
Boolean
on
;
@ApiModelProperty
(
"群名称 修改群名称时传值"
)
private
String
name
;
@ApiModelProperty
(
"头像 修改群头像时传值"
)
private
String
headPortrait
;
}
}
core/src/main/java/com/wecloud/im/post/Couriers.java
0 → 100644
View file @
7f6f9a9f
package
com
.
wecloud
.
im
.
post
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
lombok.AllArgsConstructor
;
import
java.util.Date
;
import
org.springframework.stereotype.Service
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImMessage
;
import
com.wecloud.im.entity.ImMessageOnlineSend
;
import
com.wecloud.im.ws.enums.WsResponseCmdEnum
;
import
com.wecloud.im.ws.model.WsResponse
;
import
com.wecloud.im.ws.sender.ChannelSender
;
/**
* 投递员 负责投送消息
* @Author luozh
* @Date 2022年05月13日 14:19
* @Version 1.0
*/
@AllArgsConstructor
@Service
public
class
Couriers
{
private
final
ChannelSender
channelSender
;
/**
* 投递消息
* @Author luozh
* @Date 2022年05月13日 02:34:29
* @param message 消息实体
* @param sender 发件人
* @param receiver 收件人
* @param cmd ws命令类型
* @Return
*/
public
void
deliver
(
ImMessage
message
,
ImClient
sender
,
ImClient
receiver
,
WsResponseCmdEnum
cmd
)
{
// 封装响应的实体
ImMessageOnlineSend
imMessageOnlineSend
=
new
ImMessageOnlineSend
();
imMessageOnlineSend
.
setMsgId
(
message
.
getId
());
imMessageOnlineSend
.
setCreateTime
(
new
Date
());
imMessageOnlineSend
.
setType
(
message
.
getMsgType
());
imMessageOnlineSend
.
setSender
(
sender
.
getClientId
());
imMessageOnlineSend
.
setContent
(
message
.
getContent
());
imMessageOnlineSend
.
setConversationId
(
message
.
getFkConversationId
());
imMessageOnlineSend
.
setWithdraw
(
message
.
getWithdraw
());
imMessageOnlineSend
.
setEvent
(
message
.
getEvent
());
// 向接收方推送
WsResponse
<
ImMessageOnlineSend
>
responseModel
=
new
WsResponse
<>();
responseModel
.
setCmd
(
cmd
.
getCmdCode
());
ApiResult
<
Boolean
>
result
=
ApiResult
.
result
(
ApiCode
.
SUCCESS
);
responseModel
.
setCode
(
result
.
getCode
());
responseModel
.
setMsg
(
result
.
getMessage
());
responseModel
.
setData
(
imMessageOnlineSend
);
responseModel
.
setReqId
(
null
);
channelSender
.
sendMsg
(
responseModel
,
receiver
.
getId
());
}
}
core/src/main/java/com/wecloud/im/post/MessageBuilder.java
0 → 100644
View file @
7f6f9a9f
package
com
.
wecloud
.
im
.
post
;
import
java.util.Date
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImConversation
;
import
com.wecloud.im.entity.ImMessage
;
import
com.wecloud.im.ws.enums.MsgTypeEnum
;
import
com.wecloud.utils.SnowflakeUtil
;
/**
* 消息构造者
* @Author luozh
* @Date 2022年05月13日 14:20
* @Version 1.0
*/
public
class
MessageBuilder
{
/**
* 构建普通消息
* @Author luozh
* @Date 2022年05月13日 02:30:27
* @param type
* @param application
* @param sender
* @param receiver
* @Return
*/
public
static
ImMessage
buildNormalMessage
(
MsgTypeEnum
type
,
ImApplication
application
,
ImClient
sender
,
ImConversation
conversation
)
{
long
messageId
=
SnowflakeUtil
.
getId
();
ImMessage
imMessage
=
new
ImMessage
();
// 保存消息至消息表
imMessage
.
setId
(
messageId
);
imMessage
.
setMsgType
(
type
.
getUriCode
());
imMessage
.
setFkAppid
(
application
.
getId
());
imMessage
.
setSender
(
sender
.
getId
());
imMessage
.
setWithdraw
(
false
);
imMessage
.
setEvent
(
false
);
imMessage
.
setSystemFlag
(
false
);
imMessage
.
setSendStatus
(
2
);
imMessage
.
setFkConversationId
(
conversation
.
getId
());
imMessage
.
setCreateTime
(
new
Date
());
return
imMessage
;
}
/**
* 构建事件消息
* @Author luozh
* @Date 2022年05月13日 02:30:27
* @param type
* @param application
* @param sender
* @param receiver
* @Return
*/
public
static
ImMessage
buildEventMessage
(
MsgTypeEnum
type
,
ImApplication
application
,
ImClient
sender
,
ImConversation
conversation
,
String
content
)
{
long
messageId
=
SnowflakeUtil
.
getId
();
ImMessage
imMessage
=
new
ImMessage
();
// 保存消息至消息表
imMessage
.
setId
(
messageId
);
imMessage
.
setMsgType
(
type
.
getUriCode
());
imMessage
.
setFkAppid
(
application
.
getId
());
imMessage
.
setSender
(
sender
.
getId
());
imMessage
.
setContent
(
content
);
imMessage
.
setWithdraw
(
false
);
imMessage
.
setEvent
(
true
);
imMessage
.
setSystemFlag
(
false
);
imMessage
.
setSendStatus
(
2
);
imMessage
.
setFkConversationId
(
conversation
.
getId
());
imMessage
.
setCreateTime
(
new
Date
());
return
imMessage
;
}
}
core/src/main/java/com/wecloud/im/service/ImConversationService.java
View file @
7f6f9a9f
...
@@ -6,9 +6,9 @@ import io.geekidea.springbootplus.framework.core.pagination.Paging;
...
@@ -6,9 +6,9 @@ import io.geekidea.springbootplus.framework.core.pagination.Paging;
import
java.util.Collection
;
import
java.util.Collection
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
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
;
...
@@ -233,6 +233,13 @@ public interface ImConversationService extends BaseService<ImConversation> {
...
@@ -233,6 +233,13 @@ public interface ImConversationService extends BaseService<ImConversation> {
Boolean
groupChatSetting
(
GroupChatSettingParam
param
);
Boolean
groupChatSetting
(
GroupChatSettingParam
param
);
/**
/**
* 群聊设置
* @param param
* @return
*/
Boolean
groupChatSettingForSdk
(
GroupChatSettingParam
param
);
/**
* 群头像设置
* 群头像设置
* @param param
* @param param
* @return
* @return
...
@@ -288,8 +295,8 @@ public interface ImConversationService extends BaseService<ImConversation> {
...
@@ -288,8 +295,8 @@ public interface ImConversationService extends BaseService<ImConversation> {
* @param message
* @param message
* @Return
* @Return
*/
*/
void
sendMsgToMembers
(
Long
conversationId
,
List
<
ImConversationMembers
>
membersList
,
Long
appId
,
void
sendMsgToMembers
(
ImConversation
conversation
,
List
<
ImConversationMembers
>
membersList
,
ImClient
sender
,
String
sender
,
Map
content
,
ImMessage
message
);
ImMessage
message
);
}
}
core/src/main/java/com/wecloud/im/service/impl/ImConversationServiceImpl.java
View file @
7f6f9a9f
...
@@ -7,6 +7,7 @@ import io.geekidea.springbootplus.framework.common.exception.BusinessException;
...
@@ -7,6 +7,7 @@ import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import
io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl
;
import
io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl
;
import
io.geekidea.springbootplus.framework.core.pagination.PageInfo
;
import
io.geekidea.springbootplus.framework.core.pagination.PageInfo
;
import
io.geekidea.springbootplus.framework.core.pagination.Paging
;
import
io.geekidea.springbootplus.framework.core.pagination.Paging
;
import
io.geekidea.springbootplus.framework.shiro.util.SecurityUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
...
@@ -32,6 +33,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
...
@@ -32,6 +33,7 @@ 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
;
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.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.chanjx.utils.StringUtils
;
import
com.chanjx.utils.StringUtils
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Lists
;
...
@@ -42,7 +44,6 @@ import com.wecloud.im.entity.ImClient;
...
@@ -42,7 +44,6 @@ 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.entity.ImMessageOnlineSend
;
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
;
...
@@ -67,6 +68,8 @@ import com.wecloud.im.param.add.ImConversationCreate;
...
@@ -67,6 +68,8 @@ import com.wecloud.im.param.add.ImConversationCreate;
import
com.wecloud.im.param.add.ImConversationDisplayUpdate
;
import
com.wecloud.im.param.add.ImConversationDisplayUpdate
;
import
com.wecloud.im.param.add.ImConversationNameUpdate
;
import
com.wecloud.im.param.add.ImConversationNameUpdate
;
import
com.wecloud.im.param.add.ServerImConversationCreate
;
import
com.wecloud.im.param.add.ServerImConversationCreate
;
import
com.wecloud.im.post.Couriers
;
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.GroupChatSettingTypeEnum
;
import
com.wecloud.im.sdk.enums.GroupChatSettingTypeEnum
;
import
com.wecloud.im.sdk.enums.GroupRoleEnum
;
import
com.wecloud.im.sdk.enums.GroupRoleEnum
;
...
@@ -84,8 +87,6 @@ import com.wecloud.im.vo.ImConversationCreateVo;
...
@@ -84,8 +87,6 @@ import com.wecloud.im.vo.ImConversationCreateVo;
import
com.wecloud.im.vo.OfflineMsgDto
;
import
com.wecloud.im.vo.OfflineMsgDto
;
import
com.wecloud.im.ws.enums.MsgTypeEnum
;
import
com.wecloud.im.ws.enums.MsgTypeEnum
;
import
com.wecloud.im.ws.enums.WsResponseCmdEnum
;
import
com.wecloud.im.ws.enums.WsResponseCmdEnum
;
import
com.wecloud.im.ws.model.WsResponse
;
import
com.wecloud.im.ws.sender.ChannelSender
;
import
com.wecloud.im.ws.utils.RedisUtils
;
import
com.wecloud.im.ws.utils.RedisUtils
;
import
com.wecloud.utils.JsonUtils
;
import
com.wecloud.utils.JsonUtils
;
import
com.wecloud.utils.SnowflakeUtil
;
import
com.wecloud.utils.SnowflakeUtil
;
...
@@ -110,7 +111,7 @@ import static com.wecloud.im.ws.enums.MsgTypeEnum.CONVERSATION_FORBID_SEND_PIC_C
...
@@ -110,7 +111,7 @@ import static com.wecloud.im.ws.enums.MsgTypeEnum.CONVERSATION_FORBID_SEND_PIC_C
public
class
ImConversationServiceImpl
extends
BaseServiceImpl
<
ImConversationMapper
,
ImConversation
>
implements
ImConversationService
{
public
class
ImConversationServiceImpl
extends
BaseServiceImpl
<
ImConversationMapper
,
ImConversation
>
implements
ImConversationService
{
@Autowired
@Autowired
private
C
hannelSender
channelSender
;
private
C
ouriers
couriers
;
@Autowired
@Autowired
private
ImConversationMapper
imConversationMapper
;
private
ImConversationMapper
imConversationMapper
;
...
@@ -157,10 +158,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -157,10 +158,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
}
}
// 成员不存在,不能创建会话
// 成员不存在,不能创建会话
for
(
String
clientId
:
imConversationCreate
.
getClientIds
())
{
for
(
String
clientId
:
imConversationCreate
.
getClientIds
())
{
ImClient
imClient
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
ImClient
imClient
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
().
select
(
ImClient:
:
getId
).
eq
(
ImClient:
:
getFkAppid
,
createClient
.
getFkAppid
()).
eq
(
ImClient:
:
getClientId
,
clientId
));
.
select
(
ImClient:
:
getId
)
.
eq
(
ImClient:
:
getFkAppid
,
createClient
.
getFkAppid
())
.
eq
(
ImClient:
:
getClientId
,
clientId
));
if
(
imClient
==
null
)
{
if
(
imClient
==
null
)
{
log
.
info
(
"成员不存在,不能创建会话 clientId:{}"
,
clientId
);
log
.
info
(
"成员不存在,不能创建会话 clientId:{}"
,
clientId
);
throw
new
BusinessException
(
ApiCode
.
CLIENT_NOT_FOUNT
);
throw
new
BusinessException
(
ApiCode
.
CLIENT_NOT_FOUNT
);
...
@@ -175,9 +173,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -175,9 +173,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 判断是否已经存在单聊类型会话
// 判断是否已经存在单聊类型会话
// size() == 1 为单聊不允许重复创建 两个用户如果已经创建过会话,不能重复创建会话
// size() == 1 为单聊不允许重复创建 两个用户如果已经创建过会话,不能重复创建会话
if
(
imConversationCreate
.
getClientIds
().
size
()
==
1
)
{
if
(
imConversationCreate
.
getClientIds
().
size
()
==
1
)
{
ImClient
client2
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
ImClient
client2
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
().
eq
(
ImClient:
:
getFkAppid
,
createClient
.
getFkAppid
()).
eq
(
ImClient:
:
getClientId
,
imConversationCreate
.
getClientIds
().
get
(
0
)));
.
eq
(
ImClient:
:
getFkAppid
,
createClient
.
getFkAppid
())
.
eq
(
ImClient:
:
getClientId
,
imConversationCreate
.
getClientIds
().
get
(
0
)));
// 如果存在重复单聊类型会话,则不会为空
// 如果存在重复单聊类型会话,则不会为空
ImConversation
repetitionConversationInfo
=
imConversationMapper
.
getRepetitionConversationSingle
(
createClient
.
getId
(),
client2
.
getId
());
ImConversation
repetitionConversationInfo
=
imConversationMapper
.
getRepetitionConversationSingle
(
createClient
.
getId
(),
client2
.
getId
());
...
@@ -194,9 +190,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -194,9 +190,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
if
(
imApplication
.
getContrastExtendedFieldStatus
()
==
1
)
{
if
(
imApplication
.
getContrastExtendedFieldStatus
()
==
1
)
{
// 被邀请client
// 被邀请client
ImClient
inviteClient
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
ImClient
inviteClient
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
().
eq
(
ImClient:
:
getFkAppid
,
createClient
.
getFkAppid
()).
eq
(
ImClient:
:
getClientId
,
imConversationCreate
.
getClientIds
().
get
(
0
)));
.
eq
(
ImClient:
:
getFkAppid
,
createClient
.
getFkAppid
())
.
eq
(
ImClient:
:
getClientId
,
imConversationCreate
.
getClientIds
().
get
(
0
)));
log
.
info
(
"RequestAttributes:"
+
imConversationCreate
.
getAttributes
());
log
.
info
(
"RequestAttributes:"
+
imConversationCreate
.
getAttributes
());
...
@@ -252,15 +246,12 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -252,15 +246,12 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
imConversationMembers
.
setJoinTypeCode
(
JoinConversationTypeEnum
.
OWNER
.
getCode
());
imConversationMembers
.
setJoinTypeCode
(
JoinConversationTypeEnum
.
OWNER
.
getCode
());
String
joinTypeMsg
=
""
;
String
joinTypeMsg
=
""
;
if
(
ChatTypeEnum
.
SINGLE
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
if
(
ChatTypeEnum
.
SINGLE
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
joinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
createClient
.
getClientId
()
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
()))
{
}
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
()
joinTypeMsg
=
joinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
createClient
.
getClientId
()
+
"<@>创建了该群聊"
;
+
"<@>创建了该群聊"
;
;
;
}
else
if
(
ChatTypeEnum
.
CHAT_ROOM
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
}
else
if
(
ChatTypeEnum
.
CHAT_ROOM
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
joinTypeMsg
=
joinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
createClient
.
getClientId
()
joinTypeMsg
=
joinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
createClient
.
getClientId
()
+
"<@>创建了该聊天室"
;
+
"<@>创建了该聊天室"
;
;
;
}
}
imConversationMembers
.
setJoinTypeMsg
(
joinTypeMsg
);
imConversationMembers
.
setJoinTypeMsg
(
joinTypeMsg
);
...
@@ -268,9 +259,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -268,9 +259,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 将他人添加到会话
// 将他人添加到会话
for
(
String
id
:
imConversationCreate
.
getClientIds
())
{
for
(
String
id
:
imConversationCreate
.
getClientIds
())
{
ImClient
client2
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
ImClient
client2
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
().
eq
(
ImClient:
:
getFkAppid
,
createClient
.
getFkAppid
()).
eq
(
ImClient:
:
getClientId
,
id
));
.
eq
(
ImClient:
:
getFkAppid
,
createClient
.
getFkAppid
())
.
eq
(
ImClient:
:
getClientId
,
id
));
ImConversationMembers
imConversationMembers2
=
new
ImConversationMembers
();
ImConversationMembers
imConversationMembers2
=
new
ImConversationMembers
();
imConversationMembers2
.
setId
(
SnowflakeUtil
.
getId
());
imConversationMembers2
.
setId
(
SnowflakeUtil
.
getId
());
imConversationMembers2
.
setCreateTime
(
new
Date
());
imConversationMembers2
.
setCreateTime
(
new
Date
());
...
@@ -284,42 +273,27 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -284,42 +273,27 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
imConversationMembers
.
setJoinTypeCode
(
JoinConversationTypeEnum
.
BE_INVITED
.
getCode
());
imConversationMembers
.
setJoinTypeCode
(
JoinConversationTypeEnum
.
BE_INVITED
.
getCode
());
String
memberJoinTypeMsg
=
""
;
String
memberJoinTypeMsg
=
""
;
if
(
ChatTypeEnum
.
SINGLE
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
if
(
ChatTypeEnum
.
SINGLE
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
memberJoinTypeMsg
=
"由 <@>"
+
createClient
.
getClientId
()
memberJoinTypeMsg
=
"由 <@>"
+
createClient
.
getClientId
()
+
"<@>邀请加入该会话"
;
+
"<@>邀请加入该会话"
;
}
else
if
(
ChatTypeEnum
.
NORMAL_GROUP
.
getCode
().
equals
(
imConversationCreate
.
getChatType
())
||
ChatTypeEnum
.
THOUSAND_GROUP
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
}
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
()
memberJoinTypeMsg
=
joinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
createClient
.
getClientId
()
+
"<@>邀请进聊"
;
+
"<@>邀请进聊"
;
;
;
}
else
if
(
ChatTypeEnum
.
CHAT_ROOM
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
}
else
if
(
ChatTypeEnum
.
CHAT_ROOM
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
memberJoinTypeMsg
=
joinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
createClient
.
getClientId
()
memberJoinTypeMsg
=
joinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
createClient
.
getClientId
()
+
"<@>邀请进入聊天室"
;
+
"<@>邀请进入聊天室"
;
;
;
}
}
imConversationMembersService
.
save
(
imConversationMembers2
);
imConversationMembersService
.
save
(
imConversationMembers2
);
if
(
imConversationCreate
.
getClientIds
().
size
()
>
1
)
{
if
(
imConversationCreate
.
getClientIds
().
size
()
>
1
)
{
// 给被拉入群的成员下发事件消息 -- 单聊则不下发
// 给被拉入群的成员下发事件消息 -- 单聊则不下发
ImMessage
imMessage
=
new
ImMessage
();
Map
<
String
,
Object
>
content
=
Maps
.
newHashMap
();
Map
<
String
,
Object
>
content
=
Maps
.
newHashMap
();
content
.
put
(
"operator"
,
createClient
.
getClientId
());
//操作的client ID
content
.
put
(
"operator"
,
createClient
.
getClientId
());
//操作的client ID
content
.
put
(
"passivityOperator"
,
client2
.
getClientId
());
//被操作的client ID
content
.
put
(
"passivityOperator"
,
client2
.
getClientId
());
//被操作的client ID
imMessage
.
setContent
(
JsonUtils
.
encodeJson
(
content
));
// 保存消息至消息表
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
CLIENT_JOIN_NEW_CONVERSATION
,
imApplication
,
createClient
,
imConversation
,
JsonUtils
.
encodeJson
(
content
));
imMessage
.
setId
(
SnowflakeUtil
.
getId
());
imMessage
.
setMsgType
(
MsgTypeEnum
.
CLIENT_JOIN_NEW_CONVERSATION
.
getUriCode
());
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
imApplication
.
getId
());
imMessage
.
setSender
(
createClient
.
getId
());
imMessage
.
setWithdraw
(
false
);
imMessage
.
setEvent
(
true
);
imMessage
.
setSystemFlag
(
false
);
imMessage
.
setSendStatus
(
2
);
imMessage
.
setFkConversationId
(
imConversation
.
getId
());
imMessageService
.
save
(
imMessage
);
imMessageService
.
save
(
imMessage
);
// 发送消息
// 投递消息
sendEventMsgToMember
(
imConversation
.
getId
(),
imApplication
.
getId
(),
createClient
.
getClientId
(),
couriers
.
deliver
(
imMessage
,
createClient
,
client2
,
WsResponseCmdEnum
.
CONVERSATION_EVENT_MSG
);
client2
.
getId
(),
content
,
imMessage
);
}
}
}
}
ImConversationCreateVo
imConversationCreateVo
=
new
ImConversationCreateVo
();
ImConversationCreateVo
imConversationCreateVo
=
new
ImConversationCreateVo
();
...
@@ -351,8 +325,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -351,8 +325,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
if
(
imConversationCreate
.
getMembers
().
size
()
==
1
)
{
if
(
imConversationCreate
.
getMembers
().
size
()
==
1
)
{
ImClient
member
=
imConversationCreate
.
getMembers
().
get
(
0
);
ImClient
member
=
imConversationCreate
.
getMembers
().
get
(
0
);
// 如果存在重复单聊类型会话,则不会为空
// 如果存在重复单聊类型会话,则不会为空
ImConversation
repetitionConversationInfo
=
ImConversation
repetitionConversationInfo
=
imConversationMapper
.
getRepetitionConversationSingle
(
creator
.
getId
(),
member
.
getId
());
imConversationMapper
.
getRepetitionConversationSingle
(
creator
.
getId
(),
member
.
getId
());
if
(
repetitionConversationInfo
!=
null
)
{
if
(
repetitionConversationInfo
!=
null
)
{
log
.
info
(
"存在重复的单聊会话,返回已存在的单聊类型会话id: {}"
,
repetitionConversationInfo
.
getId
());
log
.
info
(
"存在重复的单聊会话,返回已存在的单聊类型会话id: {}"
,
repetitionConversationInfo
.
getId
());
// 返回已存在的会话
// 返回已存在的会话
...
@@ -368,8 +341,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -368,8 +341,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
log
.
info
(
"RequestAttributes:"
+
imConversationCreate
.
getAttributes
());
log
.
info
(
"RequestAttributes:"
+
imConversationCreate
.
getAttributes
());
Long
repetitionConversation
=
getRepetitionConversationAttributes
(
creator
.
getId
(),
member
.
getId
(),
Long
repetitionConversation
=
getRepetitionConversationAttributes
(
creator
.
getId
(),
member
.
getId
(),
imConversationCreate
.
getAttributes
());
imConversationCreate
.
getAttributes
());
// 存在重复会话
// 存在重复会话
if
(
repetitionConversation
!=
null
)
{
if
(
repetitionConversation
!=
null
)
{
...
@@ -418,8 +390,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -418,8 +390,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
conversationCreator
.
setJoinTypeCode
(
JoinConversationTypeEnum
.
OWNER
.
getCode
());
conversationCreator
.
setJoinTypeCode
(
JoinConversationTypeEnum
.
OWNER
.
getCode
());
String
joinTypeMsg
=
""
;
String
joinTypeMsg
=
""
;
if
(
ChatTypeEnum
.
SINGLE
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
if
(
ChatTypeEnum
.
SINGLE
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
joinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
creatorImClientId
joinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
creatorImClientId
+
"<@>创建了该会话"
;
+
"<@>创建了该会话"
;
}
}
imConversationMembersService
.
save
(
conversationCreator
);
imConversationMembersService
.
save
(
conversationCreator
);
...
@@ -439,8 +410,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -439,8 +410,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
imConversationMember
.
setJoinTypeCode
(
JoinConversationTypeEnum
.
BE_INVITED
.
getCode
());
imConversationMember
.
setJoinTypeCode
(
JoinConversationTypeEnum
.
BE_INVITED
.
getCode
());
String
memberJoinTypeMsg
=
""
;
String
memberJoinTypeMsg
=
""
;
if
(
ChatTypeEnum
.
SINGLE
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
if
(
ChatTypeEnum
.
SINGLE
.
getCode
().
equals
(
imConversationCreate
.
getChatType
()))
{
memberJoinTypeMsg
=
"由 <@>"
+
creatorImClientId
memberJoinTypeMsg
=
"由 <@>"
+
creatorImClientId
+
"<@>邀请加入该会话"
;
+
"<@>邀请加入该会话"
;
}
}
imConversationMembersService
.
save
(
imConversationMember
);
imConversationMembersService
.
save
(
imConversationMember
);
if
(
imConversationCreate
.
getMembers
().
size
()
>
1
)
{
if
(
imConversationCreate
.
getMembers
().
size
()
>
1
)
{
...
@@ -463,9 +433,8 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -463,9 +433,8 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
imMessage
.
setSendStatus
(
2
);
imMessage
.
setSendStatus
(
2
);
imMessage
.
setFkConversationId
(
imConversation
.
getId
());
imMessage
.
setFkConversationId
(
imConversation
.
getId
());
imMessageService
.
save
(
imMessage
);
imMessageService
.
save
(
imMessage
);
// 发送消息
// 投递消息
sendEventMsgToMember
(
imConversation
.
getId
(),
imApplication
.
getId
(),
creator
.
getClientId
(),
couriers
.
deliver
(
imMessage
,
creator
,
member
,
WsResponseCmdEnum
.
CONVERSATION_EVENT_MSG
);
member
.
getId
(),
content
,
imMessage
);
}
}
}
}
ImConversationCreateVo
imConversationCreateVo
=
new
ImConversationCreateVo
();
ImConversationCreateVo
imConversationCreateVo
=
new
ImConversationCreateVo
();
...
@@ -488,13 +457,9 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -488,13 +457,9 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
ImClient
imClientSender
=
imClientService
.
getCurrentClient
();
ImClient
imClientSender
=
imClientService
.
getCurrentClient
();
// 查询该会话所有成员
// 查询该会话所有成员
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
().
eq
(
ImConversationMembers:
:
getFkAppid
,
imApplication
.
getId
())
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkAppid
,
imApplication
.
getId
())
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
())
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
()).
ne
(
ImConversationMembers:
:
getFkClientId
,
imClientSender
.
getId
()));
.
ne
(
ImConversationMembers:
:
getFkClientId
,
imClientSender
.
getId
())
);
if
(
membersList
.
isEmpty
())
{
if
(
membersList
.
isEmpty
())
{
log
.
info
(
"membersList为空,toConversationId:"
+
imClientToConversation
.
getConversationId
());
log
.
info
(
"membersList为空,toConversationId:"
+
imClientToConversation
.
getConversationId
());
throw
new
BusinessException
(
"没有成员"
);
throw
new
BusinessException
(
"没有成员"
);
...
@@ -504,18 +469,12 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -504,18 +469,12 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 将他人添加到会话
// 将他人添加到会话
for
(
String
id
:
imClientToConversation
.
getClientIds
())
{
for
(
String
id
:
imClientToConversation
.
getClientIds
())
{
ImClient
clientToConversation
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
ImClient
clientToConversation
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
().
eq
(
ImClient:
:
getFkAppid
,
imApplication
.
getId
()).
eq
(
ImClient:
:
getClientId
,
id
));
.
eq
(
ImClient:
:
getFkAppid
,
imApplication
.
getId
())
.
eq
(
ImClient:
:
getClientId
,
id
));
if
(
clientToConversation
==
null
)
{
if
(
clientToConversation
==
null
)
{
throw
new
BusinessException
(
ApiCode
.
CLIENT_NOT_FOUNT
);
throw
new
BusinessException
(
ApiCode
.
CLIENT_NOT_FOUNT
);
}
}
// 判断用户是否已经在该会话
// 判断用户是否已经在该会话
ImConversationMembers
members
=
imConversationMembersService
.
getOne
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
ImConversationMembers
members
=
imConversationMembersService
.
getOne
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
().
eq
(
ImConversationMembers:
:
getFkAppid
,
imApplication
.
getId
()).
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
()).
eq
(
ImConversationMembers:
:
getFkClientId
,
clientToConversation
.
getId
()));
.
eq
(
ImConversationMembers:
:
getFkAppid
,
imApplication
.
getId
())
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
())
.
eq
(
ImConversationMembers:
:
getFkClientId
,
clientToConversation
.
getId
())
);
// 已经在该会话 则跳过
// 已经在该会话 则跳过
if
(
members
!=
null
)
{
if
(
members
!=
null
)
{
...
@@ -538,15 +497,12 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -538,15 +497,12 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
imConversationMembers2
.
setJoinTypeCode
(
JoinConversationTypeEnum
.
BE_INVITED
.
getCode
());
imConversationMembers2
.
setJoinTypeCode
(
JoinConversationTypeEnum
.
BE_INVITED
.
getCode
());
String
memberJoinTypeMsg
=
""
;
String
memberJoinTypeMsg
=
""
;
if
(
ChatTypeEnum
.
SINGLE
.
getCode
().
equals
(
imConversation
.
getChatType
()))
{
if
(
ChatTypeEnum
.
SINGLE
.
getCode
().
equals
(
imConversation
.
getChatType
()))
{
memberJoinTypeMsg
=
"由 <@>"
+
createClient
.
getClientId
()
memberJoinTypeMsg
=
"由 <@>"
+
createClient
.
getClientId
()
+
"<@>邀请加入该会话"
;
+
"<@>邀请加入该会话"
;
}
else
if
(
ChatTypeEnum
.
NORMAL_GROUP
.
getCode
().
equals
(
imConversation
.
getChatType
())
||
ChatTypeEnum
.
THOUSAND_GROUP
.
getCode
().
equals
(
imConversation
.
getChatType
()))
{
}
else
if
(
ChatTypeEnum
.
NORMAL_GROUP
.
getCode
().
equals
(
imConversation
.
getChatType
())
||
ChatTypeEnum
.
THOUSAND_GROUP
.
getCode
().
equals
(
imConversation
.
getChatType
()))
{
memberJoinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
createClient
.
getClientId
()
memberJoinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
createClient
.
getClientId
()
+
"<@>邀请进聊"
;
+
"<@>邀请进聊"
;
;
;
}
else
if
(
ChatTypeEnum
.
CHAT_ROOM
.
getCode
().
equals
(
imConversation
.
getChatType
()))
{
}
else
if
(
ChatTypeEnum
.
CHAT_ROOM
.
getCode
().
equals
(
imConversation
.
getChatType
()))
{
memberJoinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
createClient
.
getClientId
()
memberJoinTypeMsg
=
DateUtil
.
format
(
now
,
CHINESE_DATE_PATTERN
)
+
" <@>"
+
createClient
.
getClientId
()
+
"<@>邀请进入聊天室"
;
+
"<@>邀请进入聊天室"
;
;
;
}
}
...
@@ -555,37 +511,16 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -555,37 +511,16 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
needAddCount
++;
needAddCount
++;
// ws邀请事件通知给群内其他人 ----------
// ws邀请事件通知给群内其他人 ----------
// 生成消息id
// 生成消息id
long
messageId
=
SnowflakeUtil
.
getId
();
ImMessage
imMessage
=
new
ImMessage
();
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
content
.
put
(
"operator"
,
imClientSender
.
getClientId
());
//操作的client ID
content
.
put
(
"operator"
,
imClientSender
.
getClientId
());
//操作的client ID
content
.
put
(
"passivityOperator"
,
clientToConversation
.
getClientId
());
//被操作的client ID
content
.
put
(
"passivityOperator"
,
clientToConversation
.
getClientId
());
//被操作的client ID
imMessage
.
setContent
(
JsonUtils
.
encodeJson
(
content
));
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
INVITE_CLIENT_JOIN_CONVERSATION
,
imApplication
,
createClient
,
imConversation
,
JsonUtils
.
encodeJson
(
content
));
// 保存消息至消息表
imMessage
.
setId
(
messageId
);
imMessage
.
setMsgType
(
MsgTypeEnum
.
INVITE_CLIENT_JOIN_CONVERSATION
.
getUriCode
());
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
imApplication
.
getId
());
imMessage
.
setSender
(
imClientSender
.
getId
());
imMessage
.
setWithdraw
(
false
);
imMessage
.
setEvent
(
true
);
imMessage
.
setSystemFlag
(
false
);
imMessage
.
setSendStatus
(
2
);
imMessage
.
setFkConversationId
(
imClientToConversation
.
getConversationId
());
boolean
save
=
imMessageService
.
save
(
imMessage
);
boolean
save
=
imMessageService
.
save
(
imMessage
);
// 发送给在群内的成员
// 遍历发送给已在群内的成员
sendMsgToMembers
(
imConversation
,
membersList
,
createClient
,
imMessage
);
for
(
ImConversationMembers
conversationMember
:
membersList
)
{
// 发送给被邀请人
sendEventMsgToMember
(
imClientToConversation
.
getConversationId
(),
imApplication
.
getId
(),
createClient
.
getClientId
(),
couriers
.
deliver
(
imMessage
,
createClient
,
clientToConversation
,
WsResponseCmdEnum
.
CONVERSATION_EVENT_MSG
);
conversationMember
.
getFkClientId
(),
content
,
imMessage
);
}
sendEventMsgToMember
(
imClientToConversation
.
getConversationId
(),
imApplication
.
getId
(),
createClient
.
getClientId
(),
clientToConversation
.
getId
(),
content
,
imMessage
);
}
}
// 将群成员数量减
// 将群成员数量减
...
@@ -608,22 +543,15 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -608,22 +543,15 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 根据appId查询application
// 根据appId查询application
ImApplication
imApplication
=
contextService
.
getImApplicationIfNotNullOrThrow
(
createClient
.
getFkAppid
());
ImApplication
imApplication
=
contextService
.
getImApplicationIfNotNullOrThrow
(
createClient
.
getFkAppid
());
ImClient
imClientSender
=
imClientService
.
getCurrentClient
();
ImClient
imClientSender
=
imClientService
.
getCurrentClient
();
// 查询当前会话
ImConversation
imConversation
=
this
.
getById
(
imClientToConversation
.
getConversationId
());
// 判断是否为群主
// 判断是否为群主
ImConversationMembers
conversationMember
=
imConversationMembersService
.
getOne
(
ImConversationMembers
conversationMember
=
imConversationMembersService
.
getOne
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
().
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
()).
eq
(
ImConversationMembers:
:
getFkClientId
,
imClientSender
.
getId
()));
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
())
.
eq
(
ImConversationMembers:
:
getFkClientId
,
imClientSender
.
getId
())
);
if
(
conversationMember
==
null
||
!
GroupRoleEnum
.
OWNER
.
getCode
().
equals
(
conversationMember
.
getRole
()))
{
if
(
conversationMember
==
null
||
!
GroupRoleEnum
.
OWNER
.
getCode
().
equals
(
conversationMember
.
getRole
()))
{
return
false
;
return
false
;
}
}
// 查询该会话所有成员
// 查询该会话所有成员
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
().
eq
(
ImConversationMembers:
:
getFkAppid
,
imApplication
.
getId
()).
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
()).
ne
(
ImConversationMembers:
:
getFkClientId
,
imClientSender
.
getId
()));
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkAppid
,
imApplication
.
getId
())
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
())
.
ne
(
ImConversationMembers:
:
getFkClientId
,
imClientSender
.
getId
())
);
if
(
membersList
.
isEmpty
())
{
if
(
membersList
.
isEmpty
())
{
log
.
info
(
"membersList为空,toConversationId:"
+
imClientToConversation
.
getConversationId
());
log
.
info
(
"membersList为空,toConversationId:"
+
imClientToConversation
.
getConversationId
());
throw
new
BusinessException
(
"没有成员"
);
throw
new
BusinessException
(
"没有成员"
);
...
@@ -632,16 +560,10 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -632,16 +560,10 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
int
needAddCount
=
0
;
int
needAddCount
=
0
;
// 将client从会话移除
// 将client从会话移除
for
(
String
clientId
:
imClientToConversation
.
getClientIds
())
{
for
(
String
clientId
:
imClientToConversation
.
getClientIds
())
{
ImClient
clientToBeRemove
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
ImClient
clientToBeRemove
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
().
eq
(
ImClient:
:
getFkAppid
,
imApplication
.
getId
()).
eq
(
ImClient:
:
getClientId
,
clientId
));
.
eq
(
ImClient:
:
getFkAppid
,
imApplication
.
getId
())
.
eq
(
ImClient:
:
getClientId
,
clientId
));
// 判断用户是否已经在该会话
// 判断用户是否已经在该会话
ImConversationMembers
members
=
imConversationMembersService
.
getOne
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
ImConversationMembers
members
=
imConversationMembersService
.
getOne
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
().
eq
(
ImConversationMembers:
:
getFkAppid
,
imApplication
.
getId
()).
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
()).
eq
(
ImConversationMembers:
:
getFkClientId
,
clientToBeRemove
.
getId
()));
.
eq
(
ImConversationMembers:
:
getFkAppid
,
imApplication
.
getId
())
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
())
.
eq
(
ImConversationMembers:
:
getFkClientId
,
clientToBeRemove
.
getId
())
);
if
(
members
==
null
)
{
if
(
members
==
null
)
{
continue
;
continue
;
}
}
...
@@ -649,25 +571,11 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -649,25 +571,11 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// ws移除事件通知给群内其他人 ----------
// ws移除事件通知给群内其他人 ----------
needAddCount
--;
needAddCount
--;
// 生成消息id
long
messageId
=
SnowflakeUtil
.
getId
();
ImMessage
imMessage
=
new
ImMessage
();
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
content
.
put
(
"operator"
,
imClientSender
.
getClientId
());
//操作的client ID
content
.
put
(
"operator"
,
imClientSender
.
getClientId
());
//操作的client ID
content
.
put
(
"passivityOperator"
,
clientToBeRemove
.
getClientId
());
//被操作的client ID
content
.
put
(
"passivityOperator"
,
clientToBeRemove
.
getClientId
());
//被操作的client ID
imMessage
.
setContent
(
JsonUtils
.
encodeJson
(
content
));
// 保存消息至消息表
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
REMOVE_CLIENT_CONVERSATION
,
imApplication
,
createClient
,
imConversation
,
JsonUtils
.
encodeJson
(
content
));
imMessage
.
setId
(
messageId
);
imMessage
.
setMsgType
(
MsgTypeEnum
.
REMOVE_CLIENT_CONVERSATION
.
getUriCode
());
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
imApplication
.
getId
());
imMessage
.
setSender
(
imClientSender
.
getId
());
imMessage
.
setWithdraw
(
false
);
imMessage
.
setEvent
(
true
);
imMessage
.
setSystemFlag
(
false
);
imMessage
.
setSendStatus
(
2
);
imMessage
.
setFkConversationId
(
imClientToConversation
.
getConversationId
());
imMessageService
.
save
(
imMessage
);
imMessageService
.
save
(
imMessage
);
membersList
.
removeIf
(
e
->
e
.
getId
().
equals
(
members
.
getId
()));
membersList
.
removeIf
(
e
->
e
.
getId
().
equals
(
members
.
getId
()));
...
@@ -676,7 +584,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -676,7 +584,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
Long
appId
=
imApplication
.
getId
();
Long
appId
=
imApplication
.
getId
();
String
sender
=
imClientSender
.
getClientId
();
String
sender
=
imClientSender
.
getClientId
();
Integer
msgType
=
imMessage
.
getMsgType
();
Integer
msgType
=
imMessage
.
getMsgType
();
sendMsgToMembers
(
conversationId
,
membersList
,
appId
,
sender
,
cont
ent
,
imMessage
);
sendMsgToMembers
(
imConversation
,
membersList
,
createCli
ent
,
imMessage
);
}
}
// 将群成员数量减
// 将群成员数量减
...
@@ -687,6 +595,8 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -687,6 +595,8 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Override
@Override
public
void
disband
(
DisbandConversationParam
param
)
{
public
void
disband
(
DisbandConversationParam
param
)
{
ImConversation
imConversation
=
imConversationMapper
.
selectById
(
param
.
getConversationId
());
ImConversation
imConversation
=
imConversationMapper
.
selectById
(
param
.
getConversationId
());
// 根据appId查询application
ImApplication
imApplication
=
contextService
.
getImApplicationIfNotNullOrThrow
(
imConversation
.
getFkAppid
());
if
(
imConversation
==
null
)
{
if
(
imConversation
==
null
)
{
throw
new
BusinessException
(
"查无会话信息"
);
throw
new
BusinessException
(
"查无会话信息"
);
}
}
...
@@ -698,49 +608,25 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -698,49 +608,25 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
return
;
return
;
}
}
// 判断是否为群主
// 判断是否为群主
ImConversationMembers
conversationMember
=
imConversationMembersService
.
getOne
(
ImConversationMembers
conversationMember
=
imConversationMembersService
.
getOne
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
().
eq
(
ImConversationMembers:
:
getFkConversationId
,
param
.
getConversationId
()).
eq
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
()));
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
param
.
getConversationId
())
.
eq
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
())
);
if
(
conversationMember
==
null
||
!
GroupRoleEnum
.
OWNER
.
getCode
().
equals
(
conversationMember
.
getRole
()))
{
if
(
conversationMember
==
null
||
!
GroupRoleEnum
.
OWNER
.
getCode
().
equals
(
conversationMember
.
getRole
()))
{
throw
new
BusinessException
(
"非群主无权限解散群聊"
);
throw
new
BusinessException
(
"非群主无权限解散群聊"
);
}
}
// 查询该会话所有成员
// 查询该会话所有成员
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
().
eq
(
ImConversationMembers:
:
getFkAppid
,
currentClient
.
getFkAppid
()).
eq
(
ImConversationMembers:
:
getFkConversationId
,
param
.
getConversationId
()).
ne
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
()));
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkAppid
,
currentClient
.
getFkAppid
())
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
param
.
getConversationId
())
.
ne
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
())
);
if
(
membersList
.
isEmpty
())
{
if
(
membersList
.
isEmpty
())
{
throw
new
BusinessException
(
"群聊成员列表为空"
);
throw
new
BusinessException
(
"群聊成员列表为空"
);
}
}
// 删除所有成员
// 删除所有成员
imConversationMembersService
.
deleteByConversationId
(
param
.
getConversationId
());
imConversationMembersService
.
deleteByConversationId
(
param
.
getConversationId
());
// 保存事件消息
// 保存事件消息
ImMessage
imMessage
=
new
ImMessage
();
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
content
.
put
(
"operator"
,
currentClient
.
getClientId
());
content
.
put
(
"operator"
,
currentClient
.
getClientId
());
imMessage
.
setContent
(
JsonUtils
.
encodeJson
(
content
));
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
CONVERSATION_DISBAND
,
imApplication
,
currentClient
,
imConversation
,
JsonUtils
.
encodeJson
(
content
));
// 保存消息至消息表
imMessage
.
setId
(
SnowflakeUtil
.
getId
());
imMessage
.
setMsgType
(
MsgTypeEnum
.
CONVERSATION_DISBAND
.
getUriCode
());
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
currentClient
.
getFkAppid
());
imMessage
.
setSender
(
currentClient
.
getId
());
imMessage
.
setWithdraw
(
false
);
imMessage
.
setEvent
(
true
);
imMessage
.
setSystemFlag
(
false
);
imMessage
.
setSendStatus
(
2
);
imMessage
.
setFkConversationId
(
param
.
getConversationId
());
imMessageService
.
save
(
imMessage
);
imMessageService
.
save
(
imMessage
);
Long
conversationId
=
param
.
getConversationId
();
sendMsgToMembers
(
imConversation
,
membersList
,
currentClient
,
imMessage
);
Long
appId
=
currentClient
.
getFkAppid
();
String
sender
=
currentClient
.
getClientId
();
sendMsgToMembers
(
conversationId
,
membersList
,
appId
,
sender
,
content
,
imMessage
);
}
}
/**
/**
...
@@ -749,31 +635,30 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -749,31 +635,30 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
* @param currentClient
* @param currentClient
*/
*/
private
void
disbandChatRoom
(
Long
conversationId
,
ImClient
currentClient
)
{
private
void
disbandChatRoom
(
Long
conversationId
,
ImClient
currentClient
)
{
ImConversation
imConversation
=
imConversationMapper
.
selectById
(
conversationId
);
// 根据appId查询application
ImApplication
imApplication
=
contextService
.
getImApplicationIfNotNullOrThrow
(
imConversation
.
getFkAppid
());
Map
<
String
,
String
>
chatRoomMembers
=
chatRoomCacheManager
.
findOnlineClientsByChatRoomId
(
conversationId
);
Map
<
String
,
String
>
chatRoomMembers
=
chatRoomCacheManager
.
findOnlineClientsByChatRoomId
(
conversationId
);
if
(
chatRoomMembers
.
isEmpty
())
{
if
(
chatRoomMembers
.
isEmpty
())
{
throw
new
BusinessException
(
"聊天室成员列为空"
);
throw
new
BusinessException
(
"聊天室成员列为空"
);
}
}
// 保存事件消息
// 保存事件消息
ImMessage
imMessage
=
new
ImMessage
();
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
content
.
put
(
"operator"
,
currentClient
.
getClientId
());
content
.
put
(
"operator"
,
currentClient
.
getClientId
());
imMessage
.
setContent
(
JsonUtils
.
encodeJson
(
content
));
// 保存消息至消息表
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
CONVERSATION_DISBAND
,
imApplication
,
currentClient
,
imConversation
,
JsonUtils
.
encodeJson
(
content
));
imMessage
.
setId
(
SnowflakeUtil
.
getId
());
imMessage
.
setMsgType
(
MsgTypeEnum
.
CONVERSATION_DISBAND
.
getUriCode
());
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
currentClient
.
getFkAppid
());
imMessage
.
setSender
(
currentClient
.
getId
());
imMessage
.
setWithdraw
(
false
);
imMessage
.
setEvent
(
true
);
imMessage
.
setSystemFlag
(
false
);
imMessage
.
setSendStatus
(
2
);
imMessage
.
setFkConversationId
(
conversationId
);
// 遍历发送给已在群内的成员
// 遍历发送给已在群内的成员
for
(
String
key
:
chatRoomMembers
.
keySet
())
{
List
<
Long
>
fkClientIds
=
chatRoomMembers
.
keySet
().
stream
().
map
(
key
->
Long
.
valueOf
(
key
.
split
(
RedisUtils
.
SPLIT
)[
0
])).
collect
(
Collectors
.
toList
());
Long
fkClientId
=
Long
.
valueOf
(
key
.
split
(
RedisUtils
.
SPLIT
)[
0
]);
List
<
ImClient
>
clientReceivers
=
imClientService
.
list
(
Wrappers
.<
ImClient
>
lambdaQuery
().
eq
(
ImClient:
:
getFkAppid
,
imApplication
.
getId
()).
in
(
ImClient:
:
getId
,
fkClientIds
));
sendEventMsgToMember
(
conversationId
,
currentClient
.
getFkAppid
(),
currentClient
.
getClientId
(),
fkClientId
,
null
,
imMessage
);
for
(
ImClient
receiver
:
clientReceivers
)
{
// 投递消息
try
{
couriers
.
deliver
(
imMessage
,
currentClient
,
receiver
,
WsResponseCmdEnum
.
CONVERSATION_EVENT_MSG
);
}
catch
(
Exception
e
)
{
log
.
info
(
"下发群会话事件失败,事件类型 {} 接收人 {}"
,
imMessage
.
getMsgType
(),
JSON
.
toJSONString
(
receiver
));
}
}
}
}
}
...
@@ -782,19 +667,15 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -782,19 +667,15 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
public
Boolean
leaveConversation
(
ImClientLeaveConversation
imClientToConversation
)
{
public
Boolean
leaveConversation
(
ImClientLeaveConversation
imClientToConversation
)
{
// 获取当前client
// 获取当前client
ImClient
currentClient
=
contextService
.
getImClientIfNotNullOrThrow
();
ImClient
currentClient
=
contextService
.
getImClientIfNotNullOrThrow
();
ImConversation
imConversation
=
imConversationService
.
getById
(
imClientToConversation
.
getConversationId
());
ImConversation
imConversation
=
imConversationService
.
getById
(
imClientToConversation
.
getConversationId
());
// 根据appId查询application
ImApplication
imApplication
=
contextService
.
getImApplicationIfNotNullOrThrow
(
imConversation
.
getFkAppid
());
if
(
imConversation
==
null
)
{
if
(
imConversation
==
null
)
{
throw
new
BusinessException
(
"查无会话消息"
);
throw
new
BusinessException
(
"查无会话消息"
);
}
}
// 查询该会话所有成员
// 查询该会话所有成员
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
().
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
()).
orderByAsc
(
ImConversationMembers:
:
getCreateTime
).
ne
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
()));
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
())
.
orderByAsc
(
ImConversationMembers:
:
getCreateTime
)
.
ne
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
())
);
if
(
membersList
.
isEmpty
())
{
if
(
membersList
.
isEmpty
())
{
log
.
info
(
"membersList为空,toConversationId:"
+
imClientToConversation
.
getConversationId
());
log
.
info
(
"membersList为空,toConversationId:"
+
imClientToConversation
.
getConversationId
());
...
@@ -802,11 +683,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -802,11 +683,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
}
}
// 判断用户是否在该会话
// 判断用户是否在该会话
ImConversationMembers
members
=
imConversationMembersService
.
getOne
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
ImConversationMembers
members
=
imConversationMembersService
.
getOne
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
().
eq
(
ImConversationMembers:
:
getFkAppid
,
currentClient
.
getFkAppid
()).
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
()).
eq
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
()));
.
eq
(
ImConversationMembers:
:
getFkAppid
,
currentClient
.
getFkAppid
())
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
())
.
eq
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
())
);
// 将client从会话移除
// 将client从会话移除
boolean
b
=
imConversationMembersService
.
deleteImConversationMembers
(
members
.
getId
());
boolean
b
=
imConversationMembersService
.
deleteImConversationMembers
(
members
.
getId
());
...
@@ -821,32 +698,14 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -821,32 +698,14 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 生成消息id
// 生成消息id
long
messageId
=
SnowflakeUtil
.
getId
();
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
LEAVE_CONVERSATION
,
imApplication
,
currentClient
,
imConversation
,
""
);
ImMessage
imMessage
=
new
ImMessage
();
// 保存消息至消息表
// 保存消息至消息表
imMessage
.
setId
(
messageId
);
imMessage
.
setMsgType
(
MsgTypeEnum
.
LEAVE_CONVERSATION
.
getUriCode
());
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
currentClient
.
getFkAppid
());
imMessage
.
setSender
(
currentClient
.
getId
());
imMessage
.
setWithdraw
(
false
);
imMessage
.
setEvent
(
true
);
imMessage
.
setSystemFlag
(
false
);
imMessage
.
setSendStatus
(
2
);
imMessage
.
setFkConversationId
(
imClientToConversation
.
getConversationId
());
boolean
save
=
imMessageService
.
save
(
imMessage
);
boolean
save
=
imMessageService
.
save
(
imMessage
);
if
(!
save
)
{
if
(!
save
)
{
throw
new
BusinessException
(
"退出群聊错误"
);
throw
new
BusinessException
(
"退出群聊错误"
);
}
}
// 向群成员发送退出群聊事件
sendMsgToMembers
(
imConversation
,
membersList
,
currentClient
,
imMessage
);
Long
conversationId
=
imClientToConversation
.
getConversationId
();
Long
appId
=
currentClient
.
getFkAppid
();
String
sender
=
currentClient
.
getClientId
();
Integer
msgType
=
MsgTypeEnum
.
LEAVE_CONVERSATION
.
getUriCode
();
sendMsgToMembers
(
conversationId
,
membersList
,
appId
,
sender
,
null
,
imMessage
);
// 群主退出 转移给下一个人
// 群主退出 转移给下一个人
if
(
GroupRoleEnum
.
OWNER
.
getCode
().
equals
(
members
.
getRole
()))
{
if
(
GroupRoleEnum
.
OWNER
.
getCode
().
equals
(
members
.
getRole
()))
{
ImConversationMembers
conversationMember
=
membersList
.
get
(
0
);
ImConversationMembers
conversationMember
=
membersList
.
get
(
0
);
...
@@ -874,11 +733,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -874,11 +733,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
ImClient
imClientSender
=
imClientService
.
getCurrentClient
();
ImClient
imClientSender
=
imClientService
.
getCurrentClient
();
// 判断操作人是否为群主
// 判断操作人是否为群主
ImConversationMembers
currentMember
=
imConversationMembersService
.
getOne
(
ImConversationMembers
currentMember
=
imConversationMembersService
.
getOne
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
().
eq
(
ImConversationMembers:
:
getFkConversationId
,
param
.
getConversationId
()).
eq
(
ImConversationMembers:
:
getFkClientId
,
imClientSender
.
getId
()));
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
param
.
getConversationId
())
.
eq
(
ImConversationMembers:
:
getFkClientId
,
imClientSender
.
getId
())
);
if
(
currentMember
==
null
||
!
GroupRoleEnum
.
OWNER
.
getCode
().
equals
(
currentMember
.
getRole
()))
{
if
(
currentMember
==
null
||
!
GroupRoleEnum
.
OWNER
.
getCode
().
equals
(
currentMember
.
getRole
()))
{
throw
new
BusinessException
(
"非群主无权操作"
);
throw
new
BusinessException
(
"非群主无权操作"
);
}
}
...
@@ -887,11 +742,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -887,11 +742,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
imConversationMembersService
.
updateById
(
currentMember
);
imConversationMembersService
.
updateById
(
currentMember
);
// 将入参成员设置为群主
// 将入参成员设置为群主
ImClient
transferClient
=
imClientService
.
getCacheImClient
(
imApplication
.
getId
(),
param
.
getClientId
());
ImClient
transferClient
=
imClientService
.
getCacheImClient
(
imApplication
.
getId
(),
param
.
getClientId
());
ImConversationMembers
transferMember
=
imConversationMembersService
.
getOne
(
ImConversationMembers
transferMember
=
imConversationMembersService
.
getOne
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
().
eq
(
ImConversationMembers:
:
getFkConversationId
,
param
.
getConversationId
()).
eq
(
ImConversationMembers:
:
getFkClientId
,
transferClient
.
getId
()));
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
param
.
getConversationId
())
.
eq
(
ImConversationMembers:
:
getFkClientId
,
transferClient
.
getId
())
);
transferMember
.
setRole
(
GroupRoleEnum
.
OWNER
.
getCode
());
transferMember
.
setRole
(
GroupRoleEnum
.
OWNER
.
getCode
());
imConversationMembersService
.
updateById
(
transferMember
);
imConversationMembersService
.
updateById
(
transferMember
);
return
true
;
return
true
;
...
@@ -908,11 +759,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -908,11 +759,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 获取当前client
// 获取当前client
ImClient
currentClient
=
contextService
.
getImClientIfNotNullOrThrow
();
ImClient
currentClient
=
contextService
.
getImClientIfNotNullOrThrow
();
// 判断操作人是否为群主
// 判断操作人是否为群主
ImConversationMembers
currentMember
=
imConversationMembersService
.
getOne
(
ImConversationMembers
currentMember
=
imConversationMembersService
.
getOne
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
().
eq
(
ImConversationMembers:
:
getFkConversationId
,
param
.
getConversationId
()).
eq
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
()));
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
param
.
getConversationId
())
.
eq
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
())
);
if
(
currentMember
==
null
||
!
GroupRoleEnum
.
OWNER
.
getCode
().
equals
(
currentMember
.
getRole
()))
{
if
(
currentMember
==
null
||
!
GroupRoleEnum
.
OWNER
.
getCode
().
equals
(
currentMember
.
getRole
()))
{
throw
new
BusinessException
(
"非群主无权操作"
);
throw
new
BusinessException
(
"非群主无权操作"
);
}
}
...
@@ -920,9 +767,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -920,9 +767,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
if
(
CollectionUtils
.
isEmpty
(
simpleClients
))
{
if
(
CollectionUtils
.
isEmpty
(
simpleClients
))
{
throw
new
BusinessException
(
"未查询得到真实管理员信息"
);
throw
new
BusinessException
(
"未查询得到真实管理员信息"
);
}
}
List
<
Long
>
fkClientIds
=
simpleClients
.
stream
()
List
<
Long
>
fkClientIds
=
simpleClients
.
stream
().
filter
(
s
->
!
currentMember
.
getId
().
equals
(
s
.
getId
())).
map
(
ImClientSimpleDto:
:
getId
).
collect
(
Collectors
.
toList
());
.
filter
(
s
->
!
currentMember
.
getId
().
equals
(
s
.
getId
()))
.
map
(
ImClientSimpleDto:
:
getId
).
collect
(
Collectors
.
toList
());
imConversationMembersService
.
setAdminsForConversation
(
param
,
fkClientIds
);
imConversationMembersService
.
setAdminsForConversation
(
param
,
fkClientIds
);
return
true
;
return
true
;
}
}
...
@@ -937,8 +782,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -937,8 +782,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
public
Boolean
mutedGroup
(
MutedGroupParam
param
)
{
public
Boolean
mutedGroup
(
MutedGroupParam
param
)
{
// 获取当前client
// 获取当前client
ImClient
currentClient
=
contextService
.
getImClientIfNotNullOrThrow
();
ImClient
currentClient
=
contextService
.
getImClientIfNotNullOrThrow
();
if
(!
imConversationService
.
isBelongToRole
(
currentClient
.
getClientId
(),
param
.
getConversationId
(),
if
(!
imConversationService
.
isBelongToRole
(
currentClient
.
getClientId
(),
param
.
getConversationId
(),
Lists
.
newArrayList
(
GroupRoleEnum
.
OWNER
.
getCode
(),
GroupRoleEnum
.
ADMIN
.
getCode
())))
{
Lists
.
newArrayList
(
GroupRoleEnum
.
OWNER
.
getCode
(),
GroupRoleEnum
.
ADMIN
.
getCode
())))
{
// 当前操作人不属于群主或管理人员
// 当前操作人不属于群主或管理人员
throw
new
BusinessException
(
"操作人既不是群主也不是群管理员,无权限操作"
);
throw
new
BusinessException
(
"操作人既不是群主也不是群管理员,无权限操作"
);
}
}
...
@@ -949,9 +793,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -949,9 +793,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
imConversationMapper
.
updateById
(
muteGroupParam
);
imConversationMapper
.
updateById
(
muteGroupParam
);
deleteCacheImConversationById
(
param
.
getConversationId
());
deleteCacheImConversationById
(
param
.
getConversationId
());
// 下发事件通知 开启、取消 群禁言
// 下发事件通知 开启、取消 群禁言
Integer
msgType
=
MutedEnum
.
NO
.
getCode
().
equals
(
param
.
getMutedType
())
?
Integer
msgType
=
MutedEnum
.
NO
.
getCode
().
equals
(
param
.
getMutedType
())
?
MsgTypeEnum
.
CONVERSATION_MUTED_CANCEL
.
getUriCode
()
:
MsgTypeEnum
.
CONVERSATION_MUTED
.
getUriCode
();
MsgTypeEnum
.
CONVERSATION_MUTED_CANCEL
.
getUriCode
()
:
MsgTypeEnum
.
CONVERSATION_MUTED
.
getUriCode
();
return
true
;
return
true
;
}
}
...
@@ -959,8 +801,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -959,8 +801,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
public
Boolean
mutedGroupMember
(
MutedGroupMemberParam
param
)
{
public
Boolean
mutedGroupMember
(
MutedGroupMemberParam
param
)
{
// 获取当前client
// 获取当前client
ImClient
currentClient
=
contextService
.
getImClientIfNotNullOrThrow
();
ImClient
currentClient
=
contextService
.
getImClientIfNotNullOrThrow
();
if
(!
imConversationService
.
isBelongToRole
(
currentClient
.
getClientId
(),
param
.
getConversationId
(),
if
(!
imConversationService
.
isBelongToRole
(
currentClient
.
getClientId
(),
param
.
getConversationId
(),
Lists
.
newArrayList
(
GroupRoleEnum
.
OWNER
.
getCode
(),
GroupRoleEnum
.
ADMIN
.
getCode
())))
{
Lists
.
newArrayList
(
GroupRoleEnum
.
OWNER
.
getCode
(),
GroupRoleEnum
.
ADMIN
.
getCode
())))
{
// 当前操作人不属于群主或管理人员
// 当前操作人不属于群主或管理人员
throw
new
BusinessException
(
"操作人既不是群主也不是群管理员,无权限操作"
);
throw
new
BusinessException
(
"操作人既不是群主也不是群管理员,无权限操作"
);
}
}
...
@@ -1011,34 +852,24 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1011,34 +852,24 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
public
ApiResult
<
Boolean
>
saveOrUpdateName
(
ImConversationNameUpdate
param
)
{
public
ApiResult
<
Boolean
>
saveOrUpdateName
(
ImConversationNameUpdate
param
)
{
// 获取当前client
// 获取当前client
ImClient
currentClient
=
contextService
.
getImClientIfNotNullOrThrow
();
ImClient
currentClient
=
contextService
.
getImClientIfNotNullOrThrow
();
ImConversation
imConversation
ById
=
imConversationService
.
getById
(
param
.
getConversationId
());
ImConversation
imConversation
=
imConversationService
.
getById
(
param
.
getConversationId
());
if
(!
this
.
isBelongToRole
(
currentClient
.
getClientId
(),
param
.
getConversationId
(),
ImApplication
imApplication
=
contextService
.
getImApplicationIfNotNullOrThrow
(
imConversation
.
getFkAppid
());
Lists
.
newArrayList
(
GroupRoleEnum
.
OWNER
.
getCode
(),
GroupRoleEnum
.
ADMIN
.
getCode
())))
{
if
(!
this
.
isBelongToRole
(
currentClient
.
getClientId
(),
param
.
getConversationId
(),
Lists
.
newArrayList
(
GroupRoleEnum
.
OWNER
.
getCode
(),
GroupRoleEnum
.
ADMIN
.
getCode
())))
{
throw
new
BusinessException
(
"操作人既不是群主也不是群管理员,无权限操作"
);
throw
new
BusinessException
(
"操作人既不是群主也不是群管理员,无权限操作"
);
}
}
// 查询该会话所有成员
// 查询该会话所有成员
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
().
eq
(
ImConversationMembers:
:
getFkConversationId
,
param
.
getConversationId
()).
ne
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
()));
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
imConversation
.
setName
(
param
.
getName
());
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
param
.
getConversationId
())
boolean
b
=
imConversationService
.
updateById
(
imConversation
);
.
ne
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
())
);
imConversationById
.
setName
(
param
.
getName
());
boolean
b
=
imConversationService
.
updateById
(
imConversationById
);
// 删除redis中该会话的缓存
// 删除redis中该会话的缓存
deleteCacheImConversationById
(
param
.
getConversationId
());
deleteCacheImConversationById
(
param
.
getConversationId
());
if
(
b
)
{
if
(
b
)
{
// 内容
// 内容
HashMap
<
String
,
String
>
content
=
Maps
.
newHashMap
();
HashMap
<
String
,
String
>
content
=
Maps
.
newHashMap
();
content
.
put
(
"name"
,
imConversation
ById
.
getName
());
content
.
put
(
"name"
,
imConversation
.
getName
());
// 发送消息至成员
// 发送消息至成员
ImMessage
message
=
new
ImMessage
();
ImMessage
message
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
CONVERSATION_NAME_CHANGE
,
imApplication
,
currentClient
,
imConversation
,
""
);
message
.
setWithdraw
(
Boolean
.
FALSE
);
sendMsgToMembers
(
imConversation
,
membersList
,
currentClient
,
message
);
message
.
setEvent
(
Boolean
.
TRUE
);
message
.
setMsgType
(
MsgTypeEnum
.
CONVERSATION_NAME_CHANGE
.
getUriCode
());
sendMsgToMembers
(
param
.
getConversationId
(),
membersList
,
currentClient
.
getFkAppid
(),
currentClient
.
getClientId
(),
content
,
message
);
return
ApiResult
.
ok
();
return
ApiResult
.
ok
();
}
else
{
}
else
{
return
ApiResult
.
fail
();
return
ApiResult
.
fail
();
...
@@ -1050,27 +881,23 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1050,27 +881,23 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
public
void
saveOrUpdateAttr
(
ImConversationAttrUpdate
imConversationAttrUpdate
)
{
public
void
saveOrUpdateAttr
(
ImConversationAttrUpdate
imConversationAttrUpdate
)
{
// 获取当前client
// 获取当前client
ImClient
currentClient
=
contextService
.
getImClientIfNotNullOrThrow
();
ImClient
currentClient
=
contextService
.
getImClientIfNotNullOrThrow
();
ImConversation
imConversationById
=
imConversationService
.
getById
(
imConversationAttrUpdate
.
getConversationId
());
ImConversation
imConversation
=
imConversationService
.
getById
(
imConversationAttrUpdate
.
getConversationId
());
imConversationById
.
setAttributes
(
imConversationAttrUpdate
.
getAttributes
());
ImApplication
imApplication
=
contextService
.
getImApplicationIfNotNullOrThrow
(
imConversation
.
getFkAppid
());
boolean
b
=
imConversationService
.
updateById
(
imConversationById
);
imConversation
.
setAttributes
(
imConversationAttrUpdate
.
getAttributes
());
boolean
b
=
imConversationService
.
updateById
(
imConversation
);
// 删除redis中该会话的缓存
// 删除redis中该会话的缓存
deleteCacheImConversationById
(
imConversationAttrUpdate
.
getConversationId
());
deleteCacheImConversationById
(
imConversationAttrUpdate
.
getConversationId
());
if
(
b
)
{
if
(
b
)
{
if
(
ChatTypeEnum
.
CHAT_ROOM
.
getCode
().
equals
(
imConversation
ById
.
getChatType
()))
{
if
(
ChatTypeEnum
.
CHAT_ROOM
.
getCode
().
equals
(
imConversation
.
getChatType
()))
{
// 聊天室事件发送逻辑
// 聊天室事件发送逻辑
chatRoomAttrChanged
(
imConversation
ById
,
currentClient
);
chatRoomAttrChanged
(
imConversation
,
currentClient
);
return
;
return
;
}
}
// 查询该会话所有成员
// 查询该会话所有成员
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
().
eq
(
ImConversationMembers:
:
getFkAppid
,
currentClient
.
getFkAppid
()).
eq
(
ImConversationMembers:
:
getFkConversationId
,
imConversationAttrUpdate
.
getConversationId
()).
ne
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
()));
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkAppid
,
currentClient
.
getFkAppid
())
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
imConversationAttrUpdate
.
getConversationId
())
.
ne
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
())
);
// ws下发拓展字段变动事件
// ws下发拓展字段变动事件
HashMap
<
String
,
String
>
content
=
Maps
.
newHashMap
();
HashMap
<
String
,
String
>
content
=
Maps
.
newHashMap
();
content
.
put
(
"attributes"
,
imConversation
ById
.
getAttributes
());
content
.
put
(
"attributes"
,
imConversation
.
getAttributes
());
// 向群成员发送拓展字段变动事件
// 向群成员发送拓展字段变动事件
Long
conversationId
=
imConversationAttrUpdate
.
getConversationId
();
Long
conversationId
=
imConversationAttrUpdate
.
getConversationId
();
Long
appId
=
currentClient
.
getFkAppid
();
Long
appId
=
currentClient
.
getFkAppid
();
...
@@ -1079,7 +906,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1079,7 +906,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
message
.
setWithdraw
(
Boolean
.
FALSE
);
message
.
setWithdraw
(
Boolean
.
FALSE
);
message
.
setEvent
(
Boolean
.
TRUE
);
message
.
setEvent
(
Boolean
.
TRUE
);
message
.
setMsgType
(
MsgTypeEnum
.
CONVERSATION_EXPAND_FIELD_CHANGE
.
getUriCode
());
message
.
setMsgType
(
MsgTypeEnum
.
CONVERSATION_EXPAND_FIELD_CHANGE
.
getUriCode
());
sendMsgToMembers
(
conversationId
,
membersList
,
appId
,
sender
,
cont
ent
,
message
);
sendMsgToMembers
(
imConversation
,
membersList
,
currentCli
ent
,
message
);
}
else
{
}
else
{
throw
new
BusinessException
(
"修改错误"
);
throw
new
BusinessException
(
"修改错误"
);
}
}
...
@@ -1093,29 +920,27 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1093,29 +920,27 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
*/
*/
private
void
chatRoomAttrChanged
(
ImConversation
imConversation
,
ImClient
currentClient
)
{
private
void
chatRoomAttrChanged
(
ImConversation
imConversation
,
ImClient
currentClient
)
{
Map
<
String
,
String
>
chatRoomMembers
=
chatRoomCacheManager
.
findOnlineClientsByChatRoomId
(
imConversation
.
getId
());
Map
<
String
,
String
>
chatRoomMembers
=
chatRoomCacheManager
.
findOnlineClientsByChatRoomId
(
imConversation
.
getId
());
ImApplication
imApplication
=
contextService
.
getImApplicationIfNotNullOrThrow
(
imConversation
.
getFkAppid
());
if
(
chatRoomMembers
.
isEmpty
())
{
if
(
chatRoomMembers
.
isEmpty
())
{
throw
new
BusinessException
(
"聊天室成员列为空"
);
throw
new
BusinessException
(
"聊天室成员列为空"
);
}
}
// 保存事件消息
// 保存事件消息
ImMessage
imMessage
=
new
ImMessage
();
HashMap
<
String
,
Object
>
contentMap
=
Maps
.
newHashMap
();
HashMap
<
String
,
Object
>
contentMap
=
Maps
.
newHashMap
();
contentMap
.
put
(
"attributes"
,
imConversation
.
getAttributes
());
contentMap
.
put
(
"attributes"
,
imConversation
.
getAttributes
());
imMessage
.
setContent
(
JsonUtils
.
encodeJson
(
contentMap
));
imMessage
.
setId
(
SnowflakeUtil
.
getId
());
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
CONVERSATION_EXPAND_FIELD_CHANGE
,
imApplication
,
currentClient
,
imConversation
,
JsonUtils
.
encodeJson
(
contentMap
));
imMessage
.
setMsgType
(
MsgTypeEnum
.
CONVERSATION_EXPAND_FIELD_CHANGE
.
getUriCode
());
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
currentClient
.
getFkAppid
());
imMessage
.
setSender
(
currentClient
.
getId
());
imMessage
.
setWithdraw
(
false
);
imMessage
.
setEvent
(
true
);
imMessage
.
setSystemFlag
(
false
);
imMessage
.
setSendStatus
(
2
);
imMessage
.
setFkConversationId
(
imConversation
.
getId
());
// 遍历发送给已在群内的成员
// 遍历发送给已在群内的成员
for
(
String
key
:
chatRoomMembers
.
keySet
())
{
List
<
Long
>
fkClientIds
=
chatRoomMembers
.
keySet
().
stream
().
map
(
key
->
Long
.
valueOf
(
key
.
split
(
RedisUtils
.
SPLIT
)[
0
])).
collect
(
Collectors
.
toList
());
Long
fkClientId
=
Long
.
valueOf
(
key
.
split
(
RedisUtils
.
SPLIT
)[
0
]);
List
<
ImClient
>
clientReceivers
=
imClientService
.
list
(
Wrappers
.<
ImClient
>
lambdaQuery
().
eq
(
ImClient:
:
getFkAppid
,
imApplication
.
getId
()).
in
(
ImClient:
:
getId
,
fkClientIds
));
sendEventMsgToMember
(
imConversation
.
getId
(),
currentClient
.
getFkAppid
(),
currentClient
.
getClientId
(),
fkClientId
,
contentMap
,
imMessage
);
for
(
ImClient
receiver
:
clientReceivers
)
{
// 投递消息
try
{
couriers
.
deliver
(
imMessage
,
currentClient
,
receiver
,
WsResponseCmdEnum
.
CONVERSATION_EVENT_MSG
);
}
catch
(
Exception
e
)
{
log
.
info
(
"下发群会话事件失败,事件类型 {} 接收人 {}"
,
imMessage
.
getMsgType
(),
JSON
.
toJSONString
(
receiver
));
}
}
}
}
}
...
@@ -1138,12 +963,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1138,12 +963,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
ImClient
curentClient
=
contextService
.
getImClientIfNotNullOrThrow
();
ImClient
curentClient
=
contextService
.
getImClientIfNotNullOrThrow
();
for
(
Long
id
:
imConversationDisplayUpdate
.
getConversationIds
())
{
for
(
Long
id
:
imConversationDisplayUpdate
.
getConversationIds
())
{
// 修改为删除隐藏状态
// 修改为删除隐藏状态
boolean
update
=
imConversationMembersService
.
update
(
new
UpdateWrapper
<
ImConversationMembers
>()
boolean
update
=
imConversationMembersService
.
update
(
new
UpdateWrapper
<
ImConversationMembers
>().
set
(
"display_status"
,
imConversationDisplayUpdate
.
getDisplayStatus
()).
eq
(
"fk_client_id"
,
curentClient
.
getId
()).
eq
(
"fk_conversation_id"
,
id
).
eq
(
"fk_appid"
,
curentClient
.
getFkAppid
()));
.
set
(
"display_status"
,
imConversationDisplayUpdate
.
getDisplayStatus
())
.
eq
(
"fk_client_id"
,
curentClient
.
getId
())
.
eq
(
"fk_conversation_id"
,
id
)
.
eq
(
"fk_appid"
,
curentClient
.
getFkAppid
())
);
}
}
return
true
;
return
true
;
}
}
...
@@ -1248,36 +1068,59 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1248,36 +1068,59 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
public
Boolean
groupChatSetting
(
GroupChatSettingParam
param
)
{
public
Boolean
groupChatSetting
(
GroupChatSettingParam
param
)
{
// 获取当前client
// 获取当前client
ImClient
currentClient
=
contextService
.
getImClientIfNotNullOrThrow
();
ImClient
currentClient
=
contextService
.
getImClientIfNotNullOrThrow
();
if
(!
imConversationService
.
isBelongToRole
(
currentClient
.
getClientId
(),
param
.
getGroupId
(),
ImApplication
imApplication
=
contextService
.
getImApplicationIfNotNullOrThrow
(
currentClient
.
getFkAppid
());
Lists
.
newArrayList
(
GroupRoleEnum
.
OWNER
.
getCode
(),
GroupRoleEnum
.
ADMIN
.
getCode
())))
{
if
(!
imConversationService
.
isBelongToRole
(
currentClient
.
getClientId
(),
param
.
getGroupId
(),
Lists
.
newArrayList
(
GroupRoleEnum
.
OWNER
.
getCode
(),
GroupRoleEnum
.
ADMIN
.
getCode
())))
{
// 当前操作人不属于群主或管理人员
// 当前操作人不属于群主或管理人员
throw
new
BusinessException
(
"操作人既不是群主也不是群管理员,无权限操作"
);
throw
new
BusinessException
(
"操作人既不是群主也不是群管理员,无权限操作"
);
}
}
ImConversation
group
=
getOne
(
Wrappers
.<
ImConversation
>
lambdaQuery
().
eq
(
ImConversation:
:
getFkAppid
,
currentClient
.
getFkAppid
()).
eq
(
ImConversation:
:
getId
,
param
.
getGroupId
()));
if
(
group
==
null
)
{
throw
new
BusinessException
(
"群不存在"
);
}
return
this
.
groupChatSetting
(
imApplication
,
currentClient
,
group
,
param
);
}
@Override
public
Boolean
groupChatSettingForSdk
(
GroupChatSettingParam
param
)
{
ImClient
operatorClient
=
imClientService
.
getCacheImClient
(
SecurityUtils
.
getCurrentAppId
(),
param
.
getOperatorClientId
());
ImApplication
imApplication
=
contextService
.
getImApplicationIfNotNullOrThrow
(
operatorClient
.
getFkAppid
());
ImConversation
group
=
getOne
(
Wrappers
.<
ImConversation
>
lambdaQuery
().
eq
(
ImConversation:
:
getFkAppid
,
SecurityUtils
.
getCurrentAppId
()).
eq
(
ImConversation:
:
getId
,
param
.
getGroupId
()));
if
(
group
==
null
)
{
throw
new
BusinessException
(
"群不存在"
);
}
return
this
.
groupChatSetting
(
imApplication
,
operatorClient
,
group
,
param
);
}
private
Boolean
groupChatSetting
(
ImApplication
application
,
ImClient
operatorClient
,
ImConversation
conversation
,
GroupChatSettingParam
param
)
{
// 根据类型处理
// 根据类型处理
GroupChatSettingTypeEnum
typeEnum
=
param
.
getType
();
GroupChatSettingTypeEnum
typeEnum
=
param
.
getType
();
ImConversation
muteGroupParam
=
new
ImConversation
();
muteGroupParam
.
setId
(
param
.
getGroupId
());
muteGroupParam
.
setUpdateTime
(
new
Date
());
switch
(
typeEnum
)
{
switch
(
typeEnum
)
{
case
FORBID_ADD_FRIEND:
case
FORBID_ADD_FRIEND:
muteGroupParam
.
setForbidAddFriend
(
param
.
getOn
());
conversation
.
setForbidAddFriend
(
param
.
getOn
());
break
;
break
;
case
FORBID_SEND_PIC:
case
FORBID_SEND_PIC:
muteGroupParam
.
setForbidSendPic
(
param
.
getOn
());
conversation
.
setForbidSendPic
(
param
.
getOn
());
break
;
break
;
case
FORBID_SEND_LINK:
case
FORBID_SEND_LINK:
muteGroupParam
.
setForbidSendLink
(
param
.
getOn
());
conversation
.
setForbidSendLink
(
param
.
getOn
());
break
;
break
;
default
:
default
:
throw
new
BusinessException
(
"设置类型错误"
);
throw
new
BusinessException
(
"设置类型错误"
);
}
}
// 更新会话
// 更新会话
imConversationMapper
.
updateById
(
muteGroupParam
);
imConversationMapper
.
updateById
(
conversation
);
deleteCacheImConversationById
(
param
.
getGroupId
());
deleteCacheImConversationById
(
param
.
getGroupId
());
// 发送群聊配置变化消息
// 发送群聊配置变化消息
Integer
msgType
=
getMsgType
(
typeEnum
,
param
.
getOn
());
MsgTypeEnum
msgType
=
getMsgType
(
typeEnum
,
param
.
getOn
());
sendConversationSettingChangeMsg
(
currentClient
,
param
.
getGroupId
()
,
msgType
);
sendConversationSettingChangeMsg
(
application
,
operatorClient
,
conversation
,
msgType
);
return
true
;
return
true
;
}
}
...
@@ -1286,8 +1129,8 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1286,8 +1129,8 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
public
Boolean
setHeadPortrait
(
SetHeadPortraitParam
param
)
{
public
Boolean
setHeadPortrait
(
SetHeadPortraitParam
param
)
{
// 获取当前client
// 获取当前client
ImClient
currentClient
=
contextService
.
getImClientIfNotNullOrThrow
();
ImClient
currentClient
=
contextService
.
getImClientIfNotNullOrThrow
();
if
(!
imConversationService
.
isBelongToRole
(
currentClient
.
getClientId
(),
param
.
getConversationId
(),
ImApplication
imApplication
=
contextService
.
getImApplicationIfNotNullOrThrow
(
currentClient
.
getFkAppid
());
Lists
.
newArrayList
(
GroupRoleEnum
.
OWNER
.
getCode
(),
GroupRoleEnum
.
ADMIN
.
getCode
())))
{
if
(!
imConversationService
.
isBelongToRole
(
currentClient
.
getClientId
(),
param
.
getConversationId
(),
Lists
.
newArrayList
(
GroupRoleEnum
.
OWNER
.
getCode
(),
GroupRoleEnum
.
ADMIN
.
getCode
())))
{
// 当前操作人不属于群主或管理人员
// 当前操作人不属于群主或管理人员
throw
new
BusinessException
(
"操作人既不是群主也不是群管理员,无权限操作"
);
throw
new
BusinessException
(
"操作人既不是群主也不是群管理员,无权限操作"
);
}
}
...
@@ -1298,17 +1141,9 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1298,17 +1141,9 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 删除redis中该会话的缓存
// 删除redis中该会话的缓存
deleteCacheImConversationById
(
param
.
getConversationId
());
deleteCacheImConversationById
(
param
.
getConversationId
());
// 查询该会话所有成员
// 查询该会话所有成员
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
().
eq
(
ImConversationMembers:
:
getFkAppid
,
currentClient
.
getFkAppid
()).
eq
(
ImConversationMembers:
:
getFkConversationId
,
param
.
getConversationId
()).
ne
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
()));
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
ImMessage
message
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
CONVERSATION_SET_GROUP_PORTRAIT
,
imApplication
,
currentClient
,
imConversation
,
""
);
.
eq
(
ImConversationMembers:
:
getFkAppid
,
currentClient
.
getFkAppid
())
sendMsgToMembers
(
imConversation
,
membersList
,
currentClient
,
message
);
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
param
.
getConversationId
())
.
ne
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
())
);
ImMessage
message
=
new
ImMessage
();
message
.
setWithdraw
(
Boolean
.
FALSE
);
message
.
setEvent
(
Boolean
.
TRUE
);
message
.
setMsgType
(
MsgTypeEnum
.
CONVERSATION_SET_GROUP_PORTRAIT
.
getUriCode
());
sendMsgToMembers
(
param
.
getConversationId
(),
membersList
,
currentClient
.
getFkAppid
(),
currentClient
.
getClientId
(),
null
,
message
);
}
else
{
}
else
{
throw
new
BusinessException
(
"修改错误"
);
throw
new
BusinessException
(
"修改错误"
);
}
}
...
@@ -1324,11 +1159,11 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1324,11 +1159,11 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
ImClient
imClientSender
=
contextService
.
getImClientIfNotNullOrThrow
();
ImClient
imClientSender
=
contextService
.
getImClientIfNotNullOrThrow
();
// 根据appId查询application
// 根据appId查询application
ImApplication
imApplication
=
contextService
.
getImApplicationIfNotNullOrThrow
(
imClientSender
.
getFkAppid
());
ImApplication
imApplication
=
contextService
.
getImApplicationIfNotNullOrThrow
(
imClientSender
.
getFkAppid
());
// 获取会话
ImConversation
imConversation
=
getById
(
param
.
getChatRoomId
());
// 添加到会话成员列表中
// 添加到会话成员列表中
ImClient
clientToConversation
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
ImClient
clientToConversation
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
().
eq
(
ImClient:
:
getFkAppid
,
imApplication
.
getId
()).
eq
(
ImClient:
:
getClientId
,
param
.
getClientId
()));
.
eq
(
ImClient:
:
getFkAppid
,
imApplication
.
getId
())
.
eq
(
ImClient:
:
getClientId
,
param
.
getClientId
()));
if
(
clientToConversation
==
null
)
{
if
(
clientToConversation
==
null
)
{
throw
new
BusinessException
(
ApiCode
.
CLIENT_NOT_FOUNT
);
throw
new
BusinessException
(
ApiCode
.
CLIENT_NOT_FOUNT
);
}
}
...
@@ -1344,11 +1179,14 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1344,11 +1179,14 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// ws邀请事件通知给群内其他人 ----------
// ws邀请事件通知给群内其他人 ----------
// 生成消息id
// 生成消息id
long
messageId
=
SnowflakeUtil
.
getId
();
long
messageId
=
SnowflakeUtil
.
getId
();
ImMessage
imMessage
=
new
ImMessage
();
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
content
.
put
(
"operator"
,
imClientSender
.
getClientId
());
//操作的client ID
content
.
put
(
"operator"
,
imClientSender
.
getClientId
());
//操作的client ID
content
.
put
(
"passivityOperator"
,
clientToConversation
.
getClientId
());
//被操作的client ID
content
.
put
(
"passivityOperator"
,
clientToConversation
.
getClientId
());
//被操作的client ID
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
INVITE_CLIENT_JOIN_CONVERSATION
,
imApplication
,
imClientSender
,
imConversation
,
""
);
imMessage
.
setContent
(
JsonUtils
.
encodeJson
(
content
));
imMessage
.
setContent
(
JsonUtils
.
encodeJson
(
content
));
imMessage
.
setId
(
messageId
);
imMessage
.
setId
(
messageId
);
imMessage
.
setMsgType
(
MsgTypeEnum
.
INVITE_CLIENT_JOIN_CONVERSATION
.
getUriCode
());
imMessage
.
setMsgType
(
MsgTypeEnum
.
INVITE_CLIENT_JOIN_CONVERSATION
.
getUriCode
());
...
@@ -1362,12 +1200,17 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1362,12 +1200,17 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
imMessage
.
setFkConversationId
(
param
.
getChatRoomId
());
imMessage
.
setFkConversationId
(
param
.
getChatRoomId
());
// 遍历发送给已在群内的成员
// 遍历发送给已在群内的成员
for
(
String
key
:
chatRoomMembers
.
keySet
())
{
List
<
Long
>
fkClientIds
=
chatRoomMembers
.
keySet
().
stream
().
map
(
key
->
Long
.
valueOf
(
key
.
split
(
RedisUtils
.
SPLIT
)[
0
])).
collect
(
Collectors
.
toList
());
Long
fkClientId
=
Long
.
valueOf
(
key
.
split
(
RedisUtils
.
SPLIT
)[
0
]);
List
<
ImClient
>
clientReceivers
=
imClientService
.
list
(
Wrappers
.<
ImClient
>
lambdaQuery
().
eq
(
ImClient:
:
getFkAppid
,
imApplication
.
getId
()).
in
(
ImClient:
:
getId
,
fkClientIds
));
sendEventMsgToMember
(
param
.
getChatRoomId
(),
imApplication
.
getId
(),
imClientSender
.
getClientId
(),
fkClientId
,
content
,
imMessage
);
for
(
ImClient
receiver
:
clientReceivers
)
{
// 投递消息
try
{
couriers
.
deliver
(
imMessage
,
imClientSender
,
receiver
,
WsResponseCmdEnum
.
CONVERSATION_EVENT_MSG
);
}
catch
(
Exception
e
)
{
log
.
info
(
"下发群会话事件失败,事件类型 {} 接收人 {}"
,
imMessage
.
getMsgType
(),
JSON
.
toJSONString
(
receiver
));
}
}
}
imConversationMapper
.
addMemberCount
(
imApplication
.
getId
(),
param
.
getChatRoomId
(),
1
);
return
true
;
return
true
;
}
}
...
@@ -1405,24 +1248,18 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1405,24 +1248,18 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// ws 退出事件通知给房间内其他人 ----------
// ws 退出事件通知给房间内其他人 ----------
// 生成消息id
// 生成消息id
long
messageId
=
SnowflakeUtil
.
getId
();
long
messageId
=
SnowflakeUtil
.
getId
();
ImMessage
imMessage
=
new
ImMessage
();
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
LEAVE_CONVERSATION
,
imApplication
,
currentClient
,
imConversation
,
""
);
// 保存消息至消息表
imMessage
.
setId
(
messageId
);
imMessage
.
setMsgType
(
MsgTypeEnum
.
LEAVE_CONVERSATION
.
getUriCode
());
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
currentClient
.
getFkAppid
());
imMessage
.
setSender
(
currentClient
.
getId
());
imMessage
.
setWithdraw
(
false
);
imMessage
.
setEvent
(
true
);
imMessage
.
setSystemFlag
(
false
);
imMessage
.
setSendStatus
(
2
);
imMessage
.
setFkConversationId
(
param
.
getChatRoomId
());
// 遍历发送给已在群内的成员
// 遍历发送给已在群内的成员
for
(
String
key
:
chatRoomMembers
.
keySet
())
{
List
<
Long
>
fkClientIds
=
chatRoomMembers
.
keySet
().
stream
().
map
(
key
->
Long
.
valueOf
(
key
.
split
(
RedisUtils
.
SPLIT
)[
0
])).
collect
(
Collectors
.
toList
());
Long
fkClientId
=
Long
.
valueOf
(
key
.
split
(
RedisUtils
.
SPLIT
)[
0
]);
List
<
ImClient
>
clientReceivers
=
imClientService
.
list
(
Wrappers
.<
ImClient
>
lambdaQuery
().
eq
(
ImClient:
:
getFkAppid
,
imApplication
.
getId
()).
in
(
ImClient:
:
getId
,
fkClientIds
));
sendEventMsgToMember
(
param
.
getChatRoomId
(),
imApplication
.
getId
(),
currentClient
.
getClientId
(),
fkClientId
,
null
,
imMessage
);
for
(
ImClient
receiver
:
clientReceivers
)
{
// 投递消息
try
{
couriers
.
deliver
(
imMessage
,
currentClient
,
receiver
,
WsResponseCmdEnum
.
CONVERSATION_EVENT_MSG
);
}
catch
(
Exception
e
)
{
log
.
info
(
"下发群会话事件失败,事件类型 {} 接收人 {}"
,
imMessage
.
getMsgType
(),
JSON
.
toJSONString
(
receiver
));
}
}
}
return
true
;
return
true
;
}
}
...
@@ -1448,12 +1285,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1448,12 +1285,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
}
}
List
<
Long
>
conversationIds
=
(
List
)
JSON
.
parse
(
param
.
getConversationIds
());
List
<
Long
>
conversationIds
=
(
List
)
JSON
.
parse
(
param
.
getConversationIds
());
List
<
ConversationVo
>
conversationVoList
=
Lists
.
newArrayList
();
List
<
ConversationVo
>
conversationVoList
=
Lists
.
newArrayList
();
List
<
ImConversation
>
conversations
=
imConversationMapper
.
selectList
(
List
<
ImConversation
>
conversations
=
imConversationMapper
.
selectList
(
new
QueryWrapper
<
ImConversation
>().
lambda
().
eq
(
ImConversation:
:
getChatType
,
param
.
getChatType
()).
in
(
ImConversation:
:
getId
,
conversationIds
).
orderByDesc
(
ImConversation:
:
getId
));
new
QueryWrapper
<
ImConversation
>().
lambda
()
.
eq
(
ImConversation:
:
getChatType
,
param
.
getChatType
())
.
in
(
ImConversation:
:
getId
,
conversationIds
)
.
orderByDesc
(
ImConversation:
:
getId
)
);
if
(
CollectionUtils
.
isEmpty
(
conversations
))
{
if
(
CollectionUtils
.
isEmpty
(
conversations
))
{
return
conversationVoList
;
return
conversationVoList
;
}
}
...
@@ -1502,28 +1334,28 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1502,28 +1334,28 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
return
imConversationCreateVo
;
return
imConversationCreateVo
;
}
}
private
Integer
getMsgType
(
GroupChatSettingTypeEnum
type
,
Boolean
on
)
{
private
MsgTypeEnum
getMsgType
(
GroupChatSettingTypeEnum
type
,
Boolean
on
)
{
Integer
msgType
=
null
;
MsgTypeEnum
msgType
=
null
;
switch
(
type
)
{
switch
(
type
)
{
case
FORBID_ADD_FRIEND:
case
FORBID_ADD_FRIEND:
if
(
on
)
{
if
(
on
)
{
msgType
=
CONVERSATION_FORBID_ADD_FRIEND
.
getUriCode
()
;
msgType
=
CONVERSATION_FORBID_ADD_FRIEND
;
}
else
{
}
else
{
msgType
=
CONVERSATION_FORBID_ADD_FRIEND_CANCEL
.
getUriCode
()
;
msgType
=
CONVERSATION_FORBID_ADD_FRIEND_CANCEL
;
}
}
break
;
break
;
case
FORBID_SEND_PIC:
case
FORBID_SEND_PIC:
if
(
on
)
{
if
(
on
)
{
msgType
=
CONVERSATION_FORBID_SEND_PIC
.
getUriCode
()
;
msgType
=
CONVERSATION_FORBID_SEND_PIC
;
}
else
{
}
else
{
msgType
=
CONVERSATION_FORBID_SEND_PIC_CANCEL
.
getUriCode
()
;
msgType
=
CONVERSATION_FORBID_SEND_PIC_CANCEL
;
}
}
break
;
break
;
case
FORBID_SEND_LINK:
case
FORBID_SEND_LINK:
if
(
on
)
{
if
(
on
)
{
msgType
=
CONVERSATION_FORBID_SEND_LINK
.
getUriCode
()
;
msgType
=
CONVERSATION_FORBID_SEND_LINK
;
}
else
{
}
else
{
msgType
=
CONVERSATION_FORBID_SEND_LINK_CANCEL
.
getUriCode
()
;
msgType
=
CONVERSATION_FORBID_SEND_LINK_CANCEL
;
}
}
break
;
break
;
default
:
default
:
...
@@ -1536,140 +1368,54 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1536,140 +1368,54 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
/**
/**
* 发送会话配置变更事件
* 发送会话配置变更事件
*
*
* @param application 应用
* @param currentClient 当前client信息
* @param currentClient 当前client信息
* @param conversation
Id 会话id
* @param conversation
会话
* @param msgType 消息类型
* @param msgType 消息类型
* @Author luozh
* @Author luozh
* @Date 2022年04月27日 01:52:54
* @Date 2022年04月27日 01:52:54
* @Return
* @Return
*/
*/
private
void
sendConversationSettingChangeMsg
(
Im
Client
currentClient
,
Long
conversationId
,
Integer
msgType
)
{
private
void
sendConversationSettingChangeMsg
(
Im
Application
application
,
ImClient
currentClient
,
ImConversation
conversation
,
MsgTypeEnum
msgType
)
{
// 查询该会话所有成员
// 查询该会话所有成员
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
().
eq
(
ImConversationMembers:
:
getFkAppid
,
currentClient
.
getFkAppid
()).
eq
(
ImConversationMembers:
:
getFkConversationId
,
conversation
.
getId
()).
ne
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
()));
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkAppid
,
currentClient
.
getFkAppid
())
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
conversationId
)
.
ne
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
())
);
if
(!
membersList
.
isEmpty
())
{
if
(!
membersList
.
isEmpty
())
{
// 保存事件消息
// 消息内容
ImMessage
imMessage
=
new
ImMessage
();
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
content
.
put
(
"operator"
,
currentClient
.
getClientId
());
content
.
put
(
"operator"
,
currentClient
.
getClientId
());
imMessage
.
setContent
(
JsonUtils
.
encodeJson
(
content
));
// 保存事件消息
// 保存消息至消息表
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
msgType
,
application
,
currentClient
,
conversation
,
JsonUtils
.
encodeJson
(
content
));
imMessage
.
setId
(
SnowflakeUtil
.
getId
());
imMessage
.
setMsgType
(
msgType
);
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
currentClient
.
getFkAppid
());
imMessage
.
setSender
(
currentClient
.
getId
());
imMessage
.
setWithdraw
(
false
);
imMessage
.
setEvent
(
true
);
imMessage
.
setSystemFlag
(
false
);
imMessage
.
setSendStatus
(
2
);
imMessage
.
setFkConversationId
(
conversationId
);
imMessageService
.
save
(
imMessage
);
imMessageService
.
save
(
imMessage
);
// 发送消息至群成员
// 发送消息至群成员
sendMsgToMembers
(
conversationId
,
membersList
,
currentClient
.
getFkAppid
(),
currentClient
.
getClientId
(),
sendMsgToMembers
(
conversation
,
membersList
,
currentClient
,
imMessage
);
content
,
imMessage
);
}
}
}
}
/**
/**
* 发送会话事件消息至群成员列表
* 发送会话事件消息至群成员列表
*
*
* @param conversation
Id 会话id
* @param conversation
会话
* @param membersList 成员列表
* @param membersList 成员列表
* @param appId appId
* @param sender 发送者
* @param sender 发送者
* @param
content 消息内容
* @param
message 消息
* @Author luozh
* @Author luozh
* @Date 2022年04月27日 02:11:19
* @Date 2022年04月27日 02:11:19
*/
*/
@Override
@Override
public
void
sendMsgToMembers
(
Long
conversationId
,
List
<
ImConversationMembers
>
membersList
,
Long
appId
,
public
void
sendMsgToMembers
(
ImConversation
conversation
,
List
<
ImConversationMembers
>
membersList
,
ImClient
sender
,
ImMessage
message
)
{
String
sender
,
Map
content
,
ImMessage
message
)
{
Long
appId
=
conversation
.
getId
();
for
(
ImConversationMembers
member
:
membersList
)
{
// 不关心事件是否发送成功
try
{
// 给所有成员下发事件消息
ImClient
imClientReceiver
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
.
eq
(
ImClient:
:
getFkAppid
,
appId
)
.
eq
(
ImClient:
:
getId
,
member
.
getFkClientId
()));
if
(
imClientReceiver
==
null
)
{
continue
;
}
sendConversationEventMsg
(
conversationId
,
sender
,
imClientReceiver
.
getId
(),
content
,
message
);
List
<
Long
>
receiverClientIds
=
membersList
.
stream
().
map
(
ImConversationMembers:
:
getFkClientId
).
collect
(
Collectors
.
toList
());
List
<
ImClient
>
clientReceivers
=
imClientService
.
list
(
Wrappers
.<
ImClient
>
lambdaQuery
().
eq
(
ImClient:
:
getFkAppid
,
appId
).
in
(
ImClient:
:
getId
,
receiverClientIds
));
for
(
ImClient
receiver
:
clientReceivers
)
{
// 投递消息
try
{
couriers
.
deliver
(
message
,
sender
,
receiver
,
WsResponseCmdEnum
.
CONVERSATION_EVENT_MSG
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
info
(
"下发群会话事件失败,事件类型 {} 接收人 {}"
,
message
.
getMsgType
(),
JSON
.
toJSONString
(
memb
er
));
log
.
info
(
"下发群会话事件失败,事件类型 {} 接收人 {}"
,
message
.
getMsgType
(),
JSON
.
toJSONString
(
receiv
er
));
}
}
}
}
}
}
/**
* 发送会话事件消息至指定成员
*
* @param conversationId 会话id
* @param appId appId
* @param sender 发送者
* @param receiverClientId 接收者client id
* @param message
* @Author luozh
* @Date 2022年04月27日 03:11:00
*/
private
void
sendEventMsgToMember
(
Long
conversationId
,
Long
appId
,
String
sender
,
Long
receiverClientId
,
Map
<
String
,
Object
>
content
,
ImMessage
message
)
{
// 查询接收方
ImClient
imClientReceiver
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
.
eq
(
ImClient:
:
getFkAppid
,
appId
)
.
eq
(
ImClient:
:
getId
,
receiverClientId
));
if
(
imClientReceiver
==
null
)
{
return
;
}
sendConversationEventMsg
(
conversationId
,
sender
,
receiverClientId
,
content
,
message
);
}
/**
* 发送会话事件消息
*
* @param conversationId 会话id
* @param sender 发送者
* @param receiverClientId 接收者client id
* @param content 消息内容
* @Author luozh
* @Date 2022年04月27日 03:11:34
*/
private
void
sendConversationEventMsg
(
Long
conversationId
,
String
sender
,
Long
receiverClientId
,
Map
<
String
,
Object
>
content
,
ImMessage
message
)
{
// 封装响应的实体
ImMessageOnlineSend
imMessageOnlineSend
=
new
ImMessageOnlineSend
();
imMessageOnlineSend
.
setMsgId
(
message
.
getId
());
imMessageOnlineSend
.
setCreateTime
(
new
Date
());
imMessageOnlineSend
.
setType
(
message
.
getMsgType
());
imMessageOnlineSend
.
setSender
(
sender
);
imMessageOnlineSend
.
setContent
(
content
);
imMessageOnlineSend
.
setConversationId
(
conversationId
);
imMessageOnlineSend
.
setWithdraw
(
message
.
getWithdraw
());
imMessageOnlineSend
.
setEvent
(
message
.
getEvent
());
// 向接收方推送
WsResponse
<
ImMessageOnlineSend
>
responseModel
=
new
WsResponse
<>();
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
);
channelSender
.
sendMsg
(
responseModel
,
receiverClientId
);
}
private
String
buildJoinConversationTypeMsg
(
JoinConversationTypeEnum
joinConversationType
,
String
inviterClientId
)
{
return
""
;
}
}
}
core/src/main/java/com/wecloud/im/service/impl/ImGroupServiceImpl.java
View file @
7f6f9a9f
...
@@ -22,6 +22,7 @@ import com.wecloud.im.entity.ImConversationMembers;
...
@@ -22,6 +22,7 @@ import com.wecloud.im.entity.ImConversationMembers;
import
com.wecloud.im.entity.ImMessage
;
import
com.wecloud.im.entity.ImMessage
;
import
com.wecloud.im.mapper.ImConversationMapper
;
import
com.wecloud.im.mapper.ImConversationMapper
;
import
com.wecloud.im.param.add.ServerImConversationCreate
;
import
com.wecloud.im.param.add.ServerImConversationCreate
;
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.GroupRoleEnum
;
import
com.wecloud.im.sdk.enums.GroupRoleEnum
;
import
com.wecloud.im.sdk.enums.MutedEnum
;
import
com.wecloud.im.sdk.enums.MutedEnum
;
...
@@ -141,26 +142,15 @@ public class ImGroupServiceImpl implements ImGroupService {
...
@@ -141,26 +142,15 @@ public class ImGroupServiceImpl implements ImGroupService {
conversationMembersService
.
deleteByConversationId
(
conversation
.
getId
());
conversationMembersService
.
deleteByConversationId
(
conversation
.
getId
());
// 保存事件消息
// 保存事件消息
ImMessage
imMessage
=
new
ImMessage
();
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
content
.
put
(
"operator"
,
operator
.
getClientId
());
content
.
put
(
"operator"
,
operator
.
getClientId
());
imMessage
.
setContent
(
JsonUtils
.
encodeJson
(
content
));
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
CONVERSATION_DISBAND
,
application
,
operator
,
conversation
,
JsonUtils
.
encodeJson
(
content
));
// 保存消息至消息表
// 保存消息至消息表
imMessage
.
setId
(
SnowflakeUtil
.
getId
());
imMessage
.
setMsgType
(
MsgTypeEnum
.
CONVERSATION_DISBAND
.
getUriCode
());
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
operator
.
getFkAppid
());
imMessage
.
setSender
(
operator
.
getId
());
imMessage
.
setWithdraw
(
false
);
imMessage
.
setEvent
(
true
);
imMessage
.
setSystemFlag
(
false
);
imMessage
.
setSendStatus
(
2
);
imMessage
.
setFkConversationId
(
conversation
.
getId
());
imMessageService
.
save
(
imMessage
);
imMessageService
.
save
(
imMessage
);
conversationService
.
sendMsgToMembers
(
conversation
,
membersList
,
operator
,
imMessage
);
conversationService
.
sendMsgToMembers
(
conversation
.
getId
(),
membersList
,
appId
,
operator
.
getClientId
(),
content
,
imMessage
);
return
true
;
return
true
;
}
}
...
...
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