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
703ea8a6
Commit
703ea8a6
authored
May 06, 2022
by
罗长华
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完善sdk群聊消息发送接口
数据库msgType类型使用String
parent
161b1a72
Show whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
847 additions
and
270 deletions
+847
-270
core/src/main/java/com/wecloud/im/action/NormalChatAction.java
+1
-1
core/src/main/java/com/wecloud/im/chatroom/action/ChatRoomAction.java
+16
-14
core/src/main/java/com/wecloud/im/controller/ImConversationMembersController.java
+14
-0
core/src/main/java/com/wecloud/im/controller/ImMessageController.java
+30
-1
core/src/main/java/com/wecloud/im/entity/ImMessage.java
+6
-4
core/src/main/java/com/wecloud/im/entity/ImMessageOnlineSend.java
+4
-4
core/src/main/java/com/wecloud/im/param/GroupChatMessageParam.java
+56
-0
core/src/main/java/com/wecloud/im/param/GroupChatStatusMessageParam.java
+56
-0
core/src/main/java/com/wecloud/im/param/PrivateChatMessageParam.java
+79
-0
core/src/main/java/com/wecloud/im/param/PrivateChatStatusMessageParam.java
+56
-0
core/src/main/java/com/wecloud/im/param/PushExtParam.java
+42
-0
core/src/main/java/com/wecloud/im/service/ImMessageService.java
+38
-0
core/src/main/java/com/wecloud/im/service/impl/ImConversationMembersServiceImpl.java
+1
-1
core/src/main/java/com/wecloud/im/service/impl/ImConversationServiceImpl.java
+205
-203
core/src/main/java/com/wecloud/im/service/impl/ImInboxServiceImpl.java
+2
-2
core/src/main/java/com/wecloud/im/service/impl/ImMessageServiceImpl.java
+206
-6
core/src/main/java/com/wecloud/im/thousandchat/action/ThousandChatAction.java
+17
-18
core/src/main/java/com/wecloud/im/thousandchat/service/ThousandChatService.java
+18
-16
No files found.
core/src/main/java/com/wecloud/im/action/NormalChatAction.java
View file @
703ea8a6
...
@@ -226,7 +226,7 @@ public class NormalChatAction {
...
@@ -226,7 +226,7 @@ public class NormalChatAction {
imMessageOnlineSend
.
setWithdraw
(
imMessage
.
getWithdraw
());
imMessageOnlineSend
.
setWithdraw
(
imMessage
.
getWithdraw
());
imMessageOnlineSend
.
setEvent
(
imMessage
.
getEvent
());
imMessageOnlineSend
.
setEvent
(
imMessage
.
getEvent
());
imMessageOnlineSend
.
setSystemFlag
(
imMessage
.
getSystemFlag
());
imMessageOnlineSend
.
setSystemFlag
(
imMessage
.
getSystemFlag
());
imMessageOnlineSend
.
setType
(
data
.
getType
());
imMessageOnlineSend
.
setType
(
data
.
getType
()
+
""
);
imMessageOnlineSend
.
setAt
(
imMessage
.
getAt
());
imMessageOnlineSend
.
setAt
(
imMessage
.
getAt
());
return
imMessageOnlineSend
;
return
imMessageOnlineSend
;
}
}
...
...
core/src/main/java/com/wecloud/im/chatroom/action/ChatRoomAction.java
View file @
703ea8a6
package
com
.
wecloud
.
im
.
chatroom
.
action
;
package
com
.
wecloud
.
im
.
chatroom
.
action
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.netty.channel.Channel
;
import
io.netty.channel.socket.nio.NioSocketChannel
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
com.wecloud.dispatch.annotation.ActionMapping
;
import
com.wecloud.dispatch.annotation.ActionMapping
;
import
com.wecloud.dispatch.common.BaseRequest
;
import
com.wecloud.dispatch.common.BaseRequest
;
import
com.wecloud.dispatch.extend.ActionRequest
;
import
com.wecloud.dispatch.extend.ActionRequest
;
...
@@ -18,19 +33,6 @@ import com.wecloud.im.ws.model.WsResponse;
...
@@ -18,19 +33,6 @@ import com.wecloud.im.ws.model.WsResponse;
import
com.wecloud.im.ws.sender.ChannelSender
;
import
com.wecloud.im.ws.sender.ChannelSender
;
import
com.wecloud.utils.JsonUtils
;
import
com.wecloud.utils.JsonUtils
;
import
com.wecloud.utils.SnowflakeUtil
;
import
com.wecloud.utils.SnowflakeUtil
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.netty.channel.Channel
;
import
io.netty.channel.socket.nio.NioSocketChannel
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
/**
/**
* @Author wenzhida
* @Author wenzhida
...
@@ -134,7 +136,7 @@ public class ChatRoomAction {
...
@@ -134,7 +136,7 @@ public class ChatRoomAction {
imMessageOnlineSend
.
setWithdraw
(
false
);
imMessageOnlineSend
.
setWithdraw
(
false
);
imMessageOnlineSend
.
setEvent
(
false
);
imMessageOnlineSend
.
setEvent
(
false
);
imMessageOnlineSend
.
setSystemFlag
(
false
);
imMessageOnlineSend
.
setSystemFlag
(
false
);
imMessageOnlineSend
.
setType
(
data
.
getType
());
imMessageOnlineSend
.
setType
(
data
.
getType
()
+
""
);
imMessageOnlineSend
.
setAt
(
data
.
getAt
());
imMessageOnlineSend
.
setAt
(
data
.
getAt
());
return
imMessageOnlineSend
;
return
imMessageOnlineSend
;
}
}
...
...
core/src/main/java/com/wecloud/im/controller/ImConversationMembersController.java
View file @
703ea8a6
...
@@ -117,5 +117,19 @@ public class ImConversationMembersController extends BaseController {
...
@@ -117,5 +117,19 @@ public class ImConversationMembersController extends BaseController {
return
ApiResult
.
ok
(
imConversationMembersService
.
addUser
(
param
));
return
ApiResult
.
ok
(
imConversationMembersService
.
addUser
(
param
));
}
}
/**
*
* @Author luozh
* @Date 2022年04月29日 03:59:54
* @param
* @Return
*/
@ApiOperation
(
value
=
"消息发布"
)
@PostMapping
(
"/publish"
)
public
ApiResult
<
Boolean
>
publish
()
{
return
null
;
}
}
}
core/src/main/java/com/wecloud/im/controller/ImMessageController.java
View file @
703ea8a6
...
@@ -21,8 +21,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
...
@@ -21,8 +21,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.wecloud.im.param.GetReadersParam
;
import
com.wecloud.im.param.GetReadersParam
;
import
com.wecloud.im.param.GroupChatMessageParam
;
import
com.wecloud.im.param.GroupChatStatusMessageParam
;
import
com.wecloud.im.param.ImHistoryMessagePageParam
;
import
com.wecloud.im.param.ImHistoryMessagePageParam
;
import
com.wecloud.im.param.MsgDeleteParam
;
import
com.wecloud.im.param.MsgDeleteParam
;
import
com.wecloud.im.param.PrivateChatMessageParam
;
import
com.wecloud.im.param.PrivateChatStatusMessageParam
;
import
com.wecloud.im.param.add.ImMsgRecall
;
import
com.wecloud.im.param.add.ImMsgRecall
;
import
com.wecloud.im.param.add.ImMsgUpdate
;
import
com.wecloud.im.param.add.ImMsgUpdate
;
import
com.wecloud.im.service.ImMessageService
;
import
com.wecloud.im.service.ImMessageService
;
...
@@ -60,7 +64,7 @@ public class ImMessageController extends BaseController {
...
@@ -60,7 +64,7 @@ public class ImMessageController extends BaseController {
@PostMapping
(
"/delete"
)
@PostMapping
(
"/delete"
)
@ApiOperation
(
value
=
"删除消息"
,
notes
=
"单条消息与批量消息删除共用"
)
@ApiOperation
(
value
=
"删除消息"
,
notes
=
"单条消息与批量消息删除共用"
)
public
ApiResult
<
Boolean
>
deleteMsg
(
@RequestBody
MsgDeleteParam
param
)
{
public
ApiResult
<
Boolean
>
deleteMsg
(
@RequestBody
MsgDeleteParam
param
)
{
if
(
param
==
null
)
{
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
}
if
(
CollectionUtils
.
isEmpty
(
param
.
getMsgIds
()))
{
if
(
CollectionUtils
.
isEmpty
(
param
.
getMsgIds
()))
{
...
@@ -109,5 +113,30 @@ public class ImMessageController extends BaseController {
...
@@ -109,5 +113,30 @@ public class ImMessageController extends BaseController {
return
ApiResult
.
ok
(
readerList
);
return
ApiResult
.
ok
(
readerList
);
}
}
@ApiOperation
(
"发布群聊消息"
)
@PostMapping
(
"/group/publish"
)
public
ApiResult
<
Boolean
>
groupMessagePublish
(
@RequestBody
@Validated
GroupChatMessageParam
param
)
{
// 参数校验
return
ApiResult
.
ok
(
imMessageService
.
groupMessagePublish
(
param
));
}
@ApiOperation
(
"发布群聊状态消息"
)
@PostMapping
(
"/group/status/publish"
)
public
ApiResult
<
Boolean
>
groupStatusMessagePublish
(
@RequestBody
@Validated
GroupChatStatusMessageParam
param
)
{
return
ApiResult
.
ok
(
imMessageService
.
groupStatusMessagePublish
(
param
));
}
@ApiOperation
(
"发布单聊消息"
)
@PostMapping
(
"/private/publish"
)
public
ApiResult
<
Boolean
>
privateMessagePublish
(
@RequestBody
@Validated
PrivateChatMessageParam
param
)
{
return
ApiResult
.
ok
(
imMessageService
.
privateMessagePublish
(
param
));
}
@ApiOperation
(
"发布单聊状态消息"
)
@PostMapping
(
"/private/status/publish"
)
public
ApiResult
<
Boolean
>
privateStatusMessagePublish
(
@RequestBody
@Validated
PrivateChatStatusMessageParam
param
)
{
return
ApiResult
.
ok
(
imMessageService
.
privateStatusMessagePublish
(
param
));
}
}
}
core/src/main/java/com/wecloud/im/entity/ImMessage.java
View file @
703ea8a6
package
com
.
wecloud
.
im
.
entity
;
package
com
.
wecloud
.
im
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
io.geekidea.springbootplus.framework.common.entity.BaseEntity
;
import
io.geekidea.springbootplus.framework.common.entity.BaseEntity
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
...
@@ -9,9 +7,13 @@ import lombok.Data;
...
@@ -9,9 +7,13 @@ import lombok.Data;
import
lombok.EqualsAndHashCode
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotNull
;
import
java.util.Date
;
import
java.util.Date
;
import
javax.validation.constraints.NotNull
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
/**
/**
* 消息存储表
* 消息存储表
*
*
...
@@ -74,7 +76,7 @@ public class ImMessage extends BaseEntity {
...
@@ -74,7 +76,7 @@ public class ImMessage extends BaseEntity {
private
Long
fkConversationId
;
private
Long
fkConversationId
;
@ApiModelProperty
(
"消息类型"
)
@ApiModelProperty
(
"消息类型"
)
private
Integer
msgType
;
private
String
msgType
;
@ApiModelProperty
(
"是否删除 1-未删除 2-已删除"
)
@ApiModelProperty
(
"是否删除 1-未删除 2-已删除"
)
private
Integer
isDelete
;
private
Integer
isDelete
;
...
...
core/src/main/java/com/wecloud/im/entity/ImMessageOnlineSend.java
View file @
703ea8a6
...
@@ -7,9 +7,9 @@ import lombok.Data;
...
@@ -7,9 +7,9 @@ import lombok.Data;
import
lombok.EqualsAndHashCode
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotNull
;
import
java.util.Date
;
import
java.util.Date
;
import
java.util.Map
;
import
javax.validation.constraints.NotNull
;
/**
/**
* 消息在线推送
* 消息在线推送
...
@@ -29,7 +29,7 @@ public class ImMessageOnlineSend extends BaseEntity {
...
@@ -29,7 +29,7 @@ public class ImMessageOnlineSend extends BaseEntity {
* @see com.wecloud.im.ws.enums.MsgTypeEnum
* @see com.wecloud.im.ws.enums.MsgTypeEnum
*/
*/
@ApiModelProperty
(
"消息类型"
)
@ApiModelProperty
(
"消息类型"
)
private
Integer
type
;
private
String
type
;
@NotNull
(
message
=
"消息id不能为空"
)
@NotNull
(
message
=
"消息id不能为空"
)
@ApiModelProperty
(
"消息id"
)
@ApiModelProperty
(
"消息id"
)
...
@@ -45,7 +45,7 @@ public class ImMessageOnlineSend extends BaseEntity {
...
@@ -45,7 +45,7 @@ public class ImMessageOnlineSend extends BaseEntity {
private
String
sender
;
private
String
sender
;
@ApiModelProperty
(
"内容"
)
@ApiModelProperty
(
"内容"
)
private
Map
content
;
private
Object
content
;
@ApiModelProperty
(
"0未撤回; 1已撤回"
)
@ApiModelProperty
(
"0未撤回; 1已撤回"
)
private
Boolean
withdraw
;
private
Boolean
withdraw
;
...
...
core/src/main/java/com/wecloud/im/param/GroupChatMessageParam.java
0 → 100644
View file @
703ea8a6
package
com
.
wecloud
.
im
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotEmpty
;
/**
* 发送群聊消息入参
* @Author luozh
* @Date 2022年04月29日 16:00
* @Version 1.0
*/
@Data
public
class
GroupChatMessageParam
{
@NotEmpty
(
message
=
"发送人id不能为空"
)
@ApiModelProperty
(
"发送人id"
)
private
String
fromUserId
;
@NotEmpty
(
message
=
"接收群id不能为空"
)
@ApiModelProperty
(
"接收群id"
)
private
String
toGroupIds
;
@ApiModelProperty
(
"指定一个或多个用户"
)
private
String
toUserIds
;
@NotEmpty
(
message
=
"消息类型不能为空"
)
@ApiModelProperty
(
"消息类型"
)
private
String
messageType
;
@NotEmpty
(
message
=
"消息不能为空"
)
@ApiModelProperty
(
"消息"
)
private
String
content
;
@ApiModelProperty
(
"指定离线推送通知中的推送内容"
)
private
String
pushContent
;
@ApiModelProperty
(
"是否包含发送用户"
)
private
Boolean
includeSender
;
@ApiModelProperty
(
"是否存储此条消息"
)
private
Boolean
persisted
;
@ApiModelProperty
(
"是否为@消息"
)
private
Boolean
mentioned
;
@ApiModelProperty
(
"是否为静默消息"
)
private
Boolean
silent
;
@ApiModelProperty
(
"推送配置"
)
private
PushExtParam
pushExt
;
}
core/src/main/java/com/wecloud/im/param/GroupChatStatusMessageParam.java
0 → 100644
View file @
703ea8a6
package
com
.
wecloud
.
im
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotEmpty
;
/**
*
* @Author luozh
* @Date 2022年05月05日 10:08
* @Version 1.0
*/
@Data
public
class
GroupChatStatusMessageParam
{
/**
* 发送人客户端id
*/
@NotEmpty
(
message
=
"发送人id不能为空"
)
@ApiModelProperty
(
"发送人id"
)
private
String
fromUserId
;
/**
* 接收群id
*/
@NotEmpty
(
message
=
"接收群id不能为空"
)
@ApiModelProperty
(
"接收群id"
)
private
String
toGroupIds
;
/**
* 消息类型
*/
@NotEmpty
(
message
=
"消息类型不能为空"
)
@ApiModelProperty
(
"消息类型"
)
private
String
messageType
;
/**
* 消息
*/
@NotEmpty
(
message
=
"消息不能为空"
)
@ApiModelProperty
(
"消息"
)
private
String
content
;
/**
* 是否过滤黑名单
*/
@ApiModelProperty
(
"是否过滤黑名单"
)
private
Boolean
includeBlacklist
;
/**
* 发送用户是否接收
*/
@ApiModelProperty
(
"发送用户是否接收"
)
private
Boolean
includeSender
;
}
core/src/main/java/com/wecloud/im/param/PrivateChatMessageParam.java
0 → 100644
View file @
703ea8a6
package
com
.
wecloud
.
im
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotEmpty
;
/**
* 单聊消息
* @Author luozh
* @Date 2022年05月05日 11:49
* @Version 1.0
*/
@Data
public
class
PrivateChatMessageParam
{
/**
* 发送人id
*/
@NotEmpty
(
message
=
"发送人id不能为空"
)
@ApiModelProperty
(
"发送人id"
)
private
String
fromUserId
;
/**
* 指定一个或多个用户
*/
@NotEmpty
(
message
=
"接收用户id不能为空"
)
@ApiModelProperty
(
"接收用户id"
)
private
String
toUserIds
;
/**
* 消息类型
*/
@NotEmpty
(
message
=
"消息类型不能为空"
)
@ApiModelProperty
(
"消息类型"
)
private
String
messageType
;
/**
* 消息
*/
@NotEmpty
(
message
=
"消息不能为空"
)
@ApiModelProperty
(
"消息"
)
private
String
content
;
/**
* 指定离线推送通知中的推送内容
*/
@ApiModelProperty
(
"指定离线推送通知中的推送内容"
)
private
String
pushContent
;
/**
* 是否包含发送用户
*/
@ApiModelProperty
(
"是否包含发送用户"
)
private
Boolean
includeSender
;
/**
* 是否过滤黑名单
*/
@ApiModelProperty
(
"是否过滤黑名单"
)
private
Boolean
includeBlacklist
;
/**
* 是否存储此条消息
*/
@ApiModelProperty
(
"是否存储此条消息"
)
private
Boolean
persisted
;
/**
* 是否为静默消息
*/
@ApiModelProperty
(
"是否为静默消息"
)
private
Boolean
silent
;
/**
* 推送拓展配置
*/
@ApiModelProperty
(
"推送拓展配置"
)
private
PushExtParam
pushExt
;
}
core/src/main/java/com/wecloud/im/param/PrivateChatStatusMessageParam.java
0 → 100644
View file @
703ea8a6
package
com
.
wecloud
.
im
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotEmpty
;
/**
*
* @Author luozh
* @Date 2022年05月05日 10:08
* @Version 1.0
*/
@Data
public
class
PrivateChatStatusMessageParam
{
/**
* 发送人客户端id
*/
@NotEmpty
(
message
=
"发送人id不能为空"
)
@ApiModelProperty
(
"发送人id"
)
private
String
fromUserId
;
/**
* 接收群id
*/
@NotEmpty
(
message
=
"接收用户id不能为空"
)
@ApiModelProperty
(
"接收用户id"
)
private
String
toUserIds
;
/**
* 消息类型
*/
@NotEmpty
(
message
=
"消息类型不能为空"
)
@ApiModelProperty
(
"消息类型"
)
private
String
messageType
;
/**
* 消息
*/
@NotEmpty
(
message
=
"消息不能为空"
)
@ApiModelProperty
(
"消息"
)
private
String
content
;
/**
* 是否过滤黑名单
*/
@ApiModelProperty
(
"是否过滤黑名单"
)
private
Boolean
includeBlacklist
;
/**
* 发送用户是否接收
*/
@ApiModelProperty
(
"发送用户是否接收"
)
private
Boolean
includeSender
;
}
core/src/main/java/com/wecloud/im/param/PushExtParam.java
0 → 100644
View file @
703ea8a6
package
com
.
wecloud
.
im
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* 推送拓展参数
* @Author luozh
* @Date 2022年04月29日 17:07
* @Version 1.0
*/
@Data
public
class
PushExtParam
{
@ApiModelProperty
(
"通知栏显示主题"
)
private
String
title
;
@ApiModelProperty
(
"按厂商设置不同推送属性。支持的推送通道值为 `MI`(小米)、`HW`(华为)、`OPPO`、`VIVO`"
)
private
String
pushChannel
;
@ApiModelProperty
(
"通知渠道的 ID"
)
private
String
channelId
;
@ApiModelProperty
(
"华为通知栏消息优先级,取值 NORMAL、LOW,默认为 NORMAL 重要消息"
)
private
String
hwPriority
;
@ApiModelProperty
(
"华为推送自定义的通知栏消息右侧大图标 URL,如果不设置,则不展示通知栏右侧图标"
)
private
String
hwImage
;
@ApiModelProperty
(
"小米推送自定义的通知栏消息右侧图标 URL"
)
private
String
miLargeIconUri
;
@ApiModelProperty
(
"vivo 推送通道类型。0 为运营消息、1 为系统消息"
)
private
String
vivoChannelType
;
@ApiModelProperty
(
"iOS 平台通知栏分组 ID"
)
private
String
iosGroupId
;
@ApiModelProperty
(
"iOS 平台"
)
private
String
iosApnsCollapseId
;
}
core/src/main/java/com/wecloud/im/service/ImMessageService.java
View file @
703ea8a6
...
@@ -13,9 +13,13 @@ import com.wecloud.im.entity.ImClient;
...
@@ -13,9 +13,13 @@ import com.wecloud.im.entity.ImClient;
import
com.wecloud.im.entity.ImMessage
;
import
com.wecloud.im.entity.ImMessage
;
import
com.wecloud.im.param.ChatContentVo
;
import
com.wecloud.im.param.ChatContentVo
;
import
com.wecloud.im.param.GetReadersParam
;
import
com.wecloud.im.param.GetReadersParam
;
import
com.wecloud.im.param.GroupChatMessageParam
;
import
com.wecloud.im.param.GroupChatStatusMessageParam
;
import
com.wecloud.im.param.ImClientSimpleDto
;
import
com.wecloud.im.param.ImClientSimpleDto
;
import
com.wecloud.im.param.ImHistoryMessagePageParam
;
import
com.wecloud.im.param.ImHistoryMessagePageParam
;
import
com.wecloud.im.param.MsgDeleteParam
;
import
com.wecloud.im.param.MsgDeleteParam
;
import
com.wecloud.im.param.PrivateChatMessageParam
;
import
com.wecloud.im.param.PrivateChatStatusMessageParam
;
import
com.wecloud.im.param.add.ImMsgRecall
;
import
com.wecloud.im.param.add.ImMsgRecall
;
import
com.wecloud.im.param.add.ImMsgSendToOnlineClient
;
import
com.wecloud.im.param.add.ImMsgSendToOnlineClient
;
import
com.wecloud.im.param.add.ImMsgUpdate
;
import
com.wecloud.im.param.add.ImMsgUpdate
;
...
@@ -132,4 +136,38 @@ public interface ImMessageService extends BaseService<ImMessage> {
...
@@ -132,4 +136,38 @@ public interface ImMessageService extends BaseService<ImMessage> {
*/
*/
ReaderList
getReaders
(
GetReadersParam
param
);
ReaderList
getReaders
(
GetReadersParam
param
);
/**
* 发送群聊消息
* @param param
* @return
*/
Boolean
groupMessagePublish
(
GroupChatMessageParam
param
);
/**
* 发送群聊状态消息
* @Author luozh
* @Date 2022年05月05日 02:32:58
* @param param
* @Return
*/
Boolean
groupStatusMessagePublish
(
GroupChatStatusMessageParam
param
);
/**
* 发送单聊消息
* @Author luozh
* @Date 2022年05月05日 02:33:26
* @param param
* @Return
*/
Boolean
privateMessagePublish
(
PrivateChatMessageParam
param
);
/**
* 发送单聊状态消息
* @Author luozh
* @Date 2022年05月05日 02:33:56
* @param param
* @Return
*/
Boolean
privateStatusMessagePublish
(
PrivateChatStatusMessageParam
param
);
}
}
core/src/main/java/com/wecloud/im/service/impl/ImConversationMembersServiceImpl.java
View file @
703ea8a6
...
@@ -136,7 +136,7 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
...
@@ -136,7 +136,7 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
// 封装响应的实体
// 封装响应的实体
ImMessageOnlineSend
imMessageOnlineSend
=
new
ImMessageOnlineSend
();
ImMessageOnlineSend
imMessageOnlineSend
=
new
ImMessageOnlineSend
();
imMessageOnlineSend
.
setCreateTime
(
new
Date
());
imMessageOnlineSend
.
setCreateTime
(
new
Date
());
imMessageOnlineSend
.
setType
(
MsgTypeEnum
.
CONVERSATION_MEMBER_NAME_MODIFY
.
getUriCode
());
imMessageOnlineSend
.
setType
(
MsgTypeEnum
.
CONVERSATION_MEMBER_NAME_MODIFY
.
getUriCode
()
+
""
);
imMessageOnlineSend
.
setSender
(
currentClient
.
getClientId
());
imMessageOnlineSend
.
setSender
(
currentClient
.
getClientId
());
Map
<
String
,
Object
>
content
=
Maps
.
newHashMap
();
Map
<
String
,
Object
>
content
=
Maps
.
newHashMap
();
content
.
put
(
"operator"
,
currentClient
.
getClientId
());
content
.
put
(
"operator"
,
currentClient
.
getClientId
());
...
...
core/src/main/java/com/wecloud/im/service/impl/ImConversationServiceImpl.java
View file @
703ea8a6
package
com
.
wecloud
.
im
.
service
.
impl
;
package
com
.
wecloud
.
im
.
service
.
impl
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.enums.BaseEnum
;
import
io.geekidea.springbootplus.framework.common.exception.BusinessException
;
import
io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl
;
import
io.geekidea.springbootplus.framework.core.pagination.PageInfo
;
import
io.geekidea.springbootplus.framework.core.pagination.Paging
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.cache.annotation.CacheConfig
;
import
org.springframework.cache.annotation.CacheEvict
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
...
@@ -58,28 +82,6 @@ import com.wecloud.im.ws.sender.ChannelSender;
...
@@ -58,28 +82,6 @@ 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
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.enums.BaseEnum
;
import
io.geekidea.springbootplus.framework.common.exception.BusinessException
;
import
io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl
;
import
io.geekidea.springbootplus.framework.core.pagination.PageInfo
;
import
io.geekidea.springbootplus.framework.core.pagination.Paging
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.cache.annotation.CacheConfig
;
import
org.springframework.cache.annotation.CacheEvict
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
import
static
com
.
wecloud
.
im
.
ws
.
enums
.
MsgTypeEnum
.
CONVERSATION_FORBID_ADD_FRIEND
;
import
static
com
.
wecloud
.
im
.
ws
.
enums
.
MsgTypeEnum
.
CONVERSATION_FORBID_ADD_FRIEND
;
import
static
com
.
wecloud
.
im
.
ws
.
enums
.
MsgTypeEnum
.
CONVERSATION_FORBID_ADD_FRIEND_CANCEL
;
import
static
com
.
wecloud
.
im
.
ws
.
enums
.
MsgTypeEnum
.
CONVERSATION_FORBID_ADD_FRIEND_CANCEL
;
...
@@ -266,7 +268,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -266,7 +268,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 保存消息至消息表
// 保存消息至消息表
imMessage
.
setId
(
SnowflakeUtil
.
getId
());
imMessage
.
setId
(
SnowflakeUtil
.
getId
());
imMessage
.
setMsgType
(
MsgTypeEnum
.
CLIENT_JOIN_NEW_CONVERSATION
.
getUriCode
());
imMessage
.
setMsgType
(
MsgTypeEnum
.
CLIENT_JOIN_NEW_CONVERSATION
.
getUriCode
()
+
""
);
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
imApplication
.
getId
());
imMessage
.
setFkAppid
(
imApplication
.
getId
());
imMessage
.
setSender
(
createClient
.
getId
());
imMessage
.
setSender
(
createClient
.
getId
());
...
@@ -362,7 +364,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -362,7 +364,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 保存消息至消息表
// 保存消息至消息表
imMessage
.
setId
(
messageId
);
imMessage
.
setId
(
messageId
);
imMessage
.
setMsgType
(
MsgTypeEnum
.
INVITE_CLIENT_JOIN_CONVERSATION
.
getUriCode
());
imMessage
.
setMsgType
(
MsgTypeEnum
.
INVITE_CLIENT_JOIN_CONVERSATION
.
getUriCode
()
+
""
);
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
imApplication
.
getId
());
imMessage
.
setFkAppid
(
imApplication
.
getId
());
imMessage
.
setSender
(
imClientSender
.
getId
());
imMessage
.
setSender
(
imClientSender
.
getId
());
...
@@ -453,7 +455,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -453,7 +455,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
imMessage
.
setContent
(
JsonUtils
.
encodeJson
(
content
));
imMessage
.
setContent
(
JsonUtils
.
encodeJson
(
content
));
// 保存消息至消息表
// 保存消息至消息表
imMessage
.
setId
(
messageId
);
imMessage
.
setId
(
messageId
);
imMessage
.
setMsgType
(
MsgTypeEnum
.
REMOVE_CLIENT_CONVERSATION
.
getUriCode
());
imMessage
.
setMsgType
(
MsgTypeEnum
.
REMOVE_CLIENT_CONVERSATION
.
getUriCode
()
+
""
);
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
imApplication
.
getId
());
imMessage
.
setFkAppid
(
imApplication
.
getId
());
imMessage
.
setSender
(
imClientSender
.
getId
());
imMessage
.
setSender
(
imClientSender
.
getId
());
...
@@ -469,7 +471,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -469,7 +471,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
Long
conversationId
=
imClientToConversation
.
getConversationId
();
Long
conversationId
=
imClientToConversation
.
getConversationId
();
Long
appId
=
imApplication
.
getId
();
Long
appId
=
imApplication
.
getId
();
String
sender
=
imClientSender
.
getClientId
();
String
sender
=
imClientSender
.
getClientId
();
Integer
msgType
=
imMessage
.
getMsgType
();
String
msgType
=
imMessage
.
getMsgType
();
sendMsgToMembers
(
conversationId
,
membersList
,
appId
,
sender
,
content
,
imMessage
);
sendMsgToMembers
(
conversationId
,
membersList
,
appId
,
sender
,
content
,
imMessage
);
}
}
...
@@ -510,7 +512,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -510,7 +512,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
imMessage
.
setContent
(
JsonUtils
.
encodeJson
(
content
));
imMessage
.
setContent
(
JsonUtils
.
encodeJson
(
content
));
// 保存消息至消息表
// 保存消息至消息表
imMessage
.
setId
(
SnowflakeUtil
.
getId
());
imMessage
.
setId
(
SnowflakeUtil
.
getId
());
imMessage
.
setMsgType
(
MsgTypeEnum
.
CONVERSATION_DISBAND
.
getUriCode
());
imMessage
.
setMsgType
(
MsgTypeEnum
.
CONVERSATION_DISBAND
.
getUriCode
()
+
""
);
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
currentClient
.
getFkAppid
());
imMessage
.
setFkAppid
(
currentClient
.
getFkAppid
());
imMessage
.
setSender
(
currentClient
.
getId
());
imMessage
.
setSender
(
currentClient
.
getId
());
...
@@ -577,7 +579,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -577,7 +579,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 保存消息至消息表
// 保存消息至消息表
imMessage
.
setId
(
messageId
);
imMessage
.
setId
(
messageId
);
imMessage
.
setMsgType
(
MsgTypeEnum
.
LEAVE_CONVERSATION
.
getUriCode
());
imMessage
.
setMsgType
(
MsgTypeEnum
.
LEAVE_CONVERSATION
.
getUriCode
()
+
""
);
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
currentClient
.
getFkAppid
());
imMessage
.
setFkAppid
(
currentClient
.
getFkAppid
());
imMessage
.
setSender
(
currentClient
.
getId
());
imMessage
.
setSender
(
currentClient
.
getId
());
...
@@ -785,7 +787,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -785,7 +787,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
ImMessage
message
=
new
ImMessage
();
ImMessage
message
=
new
ImMessage
();
message
.
setWithdraw
(
Boolean
.
FALSE
);
message
.
setWithdraw
(
Boolean
.
FALSE
);
message
.
setEvent
(
Boolean
.
TRUE
);
message
.
setEvent
(
Boolean
.
TRUE
);
message
.
setMsgType
(
MsgTypeEnum
.
CONVERSATION_NAME_CHANGE
.
getUriCode
());
message
.
setMsgType
(
MsgTypeEnum
.
CONVERSATION_NAME_CHANGE
.
getUriCode
()
+
""
);
sendMsgToMembers
(
param
.
getConversationId
(),
membersList
,
currentClient
.
getFkAppid
(),
sendMsgToMembers
(
param
.
getConversationId
(),
membersList
,
currentClient
.
getFkAppid
(),
currentClient
.
getClientId
(),
content
,
message
);
currentClient
.
getClientId
(),
content
,
message
);
...
@@ -835,7 +837,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -835,7 +837,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
ImMessage
message
=
new
ImMessage
();
ImMessage
message
=
new
ImMessage
();
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
,
content
,
message
);
sendMsgToMembers
(
conversationId
,
membersList
,
appId
,
sender
,
content
,
message
);
}
else
{
}
else
{
throw
new
BusinessException
(
"修改错误"
);
throw
new
BusinessException
(
"修改错误"
);
...
@@ -1000,177 +1002,6 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1000,177 +1002,6 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
return
true
;
return
true
;
}
}
private
Integer
getMsgType
(
GroupChatSettingTypeEnum
type
,
Boolean
on
)
{
Integer
msgType
=
null
;
switch
(
type
)
{
case
FORBID_ADD_FRIEND:
if
(
on
)
{
msgType
=
CONVERSATION_FORBID_ADD_FRIEND
.
getUriCode
();
}
else
{
msgType
=
CONVERSATION_FORBID_ADD_FRIEND_CANCEL
.
getUriCode
();
}
break
;
case
FORBID_SEND_RED_PACKETS:
if
(
on
)
{
msgType
=
CONVERSATION_FORBID_SEND_RED_PACKETS
.
getUriCode
();
}
else
{
msgType
=
CONVERSATION_FORBID_SEND_RED_PACKETS_CANCEL
.
getUriCode
();
}
break
;
case
FORBID_SEND_PIC:
if
(
on
)
{
msgType
=
CONVERSATION_FORBID_SEND_PIC
.
getUriCode
();
}
else
{
msgType
=
CONVERSATION_FORBID_SEND_PIC_CANCEL
.
getUriCode
();
}
break
;
case
FORBID_SEND_LINK:
if
(
on
)
{
msgType
=
CONVERSATION_FORBID_SEND_LINK
.
getUriCode
();
}
else
{
msgType
=
CONVERSATION_FORBID_SEND_LINK_CANCEL
.
getUriCode
();
}
break
;
default
:
throw
new
BusinessException
(
"设置类型错误"
);
}
return
msgType
;
}
/**
* 发送会话配置变更事件
*
* @param currentClient 当前client信息
* @param conversationId 会话id
* @param msgType 消息类型
* @Author luozh
* @Date 2022年04月27日 01:52:54
* @Return
*/
private
void
sendConversationSettingChangeMsg
(
ImClient
currentClient
,
Long
conversationId
,
Integer
msgType
)
{
// 查询该会话所有成员
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkAppid
,
currentClient
.
getFkAppid
())
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
conversationId
)
.
ne
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
())
);
if
(!
membersList
.
isEmpty
())
{
// 保存事件消息
ImMessage
imMessage
=
new
ImMessage
();
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
content
.
put
(
"operator"
,
currentClient
.
getClientId
());
imMessage
.
setContent
(
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
);
// 发送消息至群成员
sendMsgToMembers
(
conversationId
,
membersList
,
currentClient
.
getFkAppid
(),
currentClient
.
getClientId
(),
content
,
imMessage
);
}
}
/**
* 发送会话事件消息至群成员列表
*
* @param conversationId 会话id
* @param membersList 成员列表
* @param appId appId
* @param sender 发送者
* @param content 消息内容
* @Author luozh
* @Date 2022年04月27日 02:11:19
*/
private
void
sendMsgToMembers
(
Long
conversationId
,
List
<
ImConversationMembers
>
membersList
,
Long
appId
,
String
sender
,
Map
content
,
ImMessage
message
)
{
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
);
}
catch
(
Exception
e
)
{
log
.
info
(
"下发群会话事件失败,事件类型 {} 接收人 {}"
,
message
.
getMsgType
(),
JSON
.
toJSONString
(
member
));
}
}
}
/**
* 发送会话事件消息至指定成员
*
* @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
);
}
@Override
@Override
public
Boolean
intoChatRoom
(
IntoChatRoomParam
param
)
{
public
Boolean
intoChatRoom
(
IntoChatRoomParam
param
)
{
// 获取当前client
// 获取当前client
...
@@ -1206,7 +1037,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1206,7 +1037,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 保存消息至消息表
// 保存消息至消息表
imMessage
.
setId
(
messageId
);
imMessage
.
setId
(
messageId
);
imMessage
.
setMsgType
(
MsgTypeEnum
.
INVITE_CLIENT_JOIN_CONVERSATION
.
getUriCode
());
imMessage
.
setMsgType
(
MsgTypeEnum
.
INVITE_CLIENT_JOIN_CONVERSATION
.
getUriCode
()
+
""
);
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
imApplication
.
getId
());
imMessage
.
setFkAppid
(
imApplication
.
getId
());
imMessage
.
setSender
(
imClientSender
.
getId
());
imMessage
.
setSender
(
imClientSender
.
getId
());
...
@@ -1263,7 +1094,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1263,7 +1094,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
ImMessage
imMessage
=
new
ImMessage
();
ImMessage
imMessage
=
new
ImMessage
();
// 保存消息至消息表
// 保存消息至消息表
imMessage
.
setId
(
messageId
);
imMessage
.
setId
(
messageId
);
imMessage
.
setMsgType
(
MsgTypeEnum
.
LEAVE_CONVERSATION
.
getUriCode
());
imMessage
.
setMsgType
(
MsgTypeEnum
.
LEAVE_CONVERSATION
.
getUriCode
()
+
""
);
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
currentClient
.
getFkAppid
());
imMessage
.
setFkAppid
(
currentClient
.
getFkAppid
());
imMessage
.
setSender
(
currentClient
.
getId
());
imMessage
.
setSender
(
currentClient
.
getId
());
...
@@ -1348,4 +1179,175 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1348,4 +1179,175 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
return
imConversationCreateVo
;
return
imConversationCreateVo
;
}
}
private
Integer
getMsgType
(
GroupChatSettingTypeEnum
type
,
Boolean
on
)
{
Integer
msgType
=
null
;
switch
(
type
)
{
case
FORBID_ADD_FRIEND:
if
(
on
)
{
msgType
=
CONVERSATION_FORBID_ADD_FRIEND
.
getUriCode
();
}
else
{
msgType
=
CONVERSATION_FORBID_ADD_FRIEND_CANCEL
.
getUriCode
();
}
break
;
case
FORBID_SEND_RED_PACKETS:
if
(
on
)
{
msgType
=
CONVERSATION_FORBID_SEND_RED_PACKETS
.
getUriCode
();
}
else
{
msgType
=
CONVERSATION_FORBID_SEND_RED_PACKETS_CANCEL
.
getUriCode
();
}
break
;
case
FORBID_SEND_PIC:
if
(
on
)
{
msgType
=
CONVERSATION_FORBID_SEND_PIC
.
getUriCode
();
}
else
{
msgType
=
CONVERSATION_FORBID_SEND_PIC_CANCEL
.
getUriCode
();
}
break
;
case
FORBID_SEND_LINK:
if
(
on
)
{
msgType
=
CONVERSATION_FORBID_SEND_LINK
.
getUriCode
();
}
else
{
msgType
=
CONVERSATION_FORBID_SEND_LINK_CANCEL
.
getUriCode
();
}
break
;
default
:
throw
new
BusinessException
(
"设置类型错误"
);
}
return
msgType
;
}
/**
* 发送会话配置变更事件
*
* @param currentClient 当前client信息
* @param conversationId 会话id
* @param msgType 消息类型
* @Author luozh
* @Date 2022年04月27日 01:52:54
* @Return
*/
private
void
sendConversationSettingChangeMsg
(
ImClient
currentClient
,
Long
conversationId
,
Integer
msgType
)
{
// 查询该会话所有成员
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkAppid
,
currentClient
.
getFkAppid
())
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
conversationId
)
.
ne
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
())
);
if
(!
membersList
.
isEmpty
())
{
// 保存事件消息
ImMessage
imMessage
=
new
ImMessage
();
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
content
.
put
(
"operator"
,
currentClient
.
getClientId
());
imMessage
.
setContent
(
JsonUtils
.
encodeJson
(
content
));
// 保存消息至消息表
imMessage
.
setId
(
SnowflakeUtil
.
getId
());
imMessage
.
setMsgType
(
msgType
.
toString
());
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
);
// 发送消息至群成员
sendMsgToMembers
(
conversationId
,
membersList
,
currentClient
.
getFkAppid
(),
currentClient
.
getClientId
(),
content
,
imMessage
);
}
}
/**
* 发送会话事件消息至群成员列表
*
* @param conversationId 会话id
* @param membersList 成员列表
* @param appId appId
* @param sender 发送者
* @param content 消息内容
* @Author luozh
* @Date 2022年04月27日 02:11:19
*/
private
void
sendMsgToMembers
(
Long
conversationId
,
List
<
ImConversationMembers
>
membersList
,
Long
appId
,
String
sender
,
Map
content
,
ImMessage
message
)
{
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
);
}
catch
(
Exception
e
)
{
log
.
info
(
"下发群会话事件失败,事件类型 {} 接收人 {}"
,
message
.
getMsgType
(),
JSON
.
toJSONString
(
member
));
}
}
}
/**
* 发送会话事件消息至指定成员
*
* @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
);
}
}
}
core/src/main/java/com/wecloud/im/service/impl/ImInboxServiceImpl.java
View file @
703ea8a6
...
@@ -206,7 +206,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox>
...
@@ -206,7 +206,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox>
// 消息实体
// 消息实体
ImMessage
imMessage
=
new
ImMessage
();
ImMessage
imMessage
=
new
ImMessage
();
imMessage
.
setId
(
msgId
);
imMessage
.
setId
(
msgId
);
imMessage
.
setMsgType
(
msgTypeEnum
.
getUriCode
());
imMessage
.
setMsgType
(
msgTypeEnum
.
getUriCode
()
+
""
);
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
currentClient
.
getFkAppid
());
imMessage
.
setFkAppid
(
currentClient
.
getFkAppid
());
imMessage
.
setSender
(
currentClient
.
getId
());
imMessage
.
setSender
(
currentClient
.
getId
());
...
@@ -219,7 +219,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox>
...
@@ -219,7 +219,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox>
// 封装响应的实体
// 封装响应的实体
ImMessageOnlineSend
imMessageOnlineSend
=
new
ImMessageOnlineSend
();
ImMessageOnlineSend
imMessageOnlineSend
=
new
ImMessageOnlineSend
();
BeanUtils
.
copyProperties
(
imMessage
,
imMessageOnlineSend
);
BeanUtils
.
copyProperties
(
imMessage
,
imMessageOnlineSend
);
imMessageOnlineSend
.
setType
(
msgTypeEnum
.
getUriCode
());
imMessageOnlineSend
.
setType
(
msgTypeEnum
.
getUriCode
()
+
""
);
imMessageOnlineSend
.
setMsgId
(
imMessage
.
getId
());
imMessageOnlineSend
.
setMsgId
(
imMessage
.
getId
());
imMessageOnlineSend
.
setCreateTime
(
new
Date
());
imMessageOnlineSend
.
setCreateTime
(
new
Date
());
imMessageOnlineSend
.
setSender
(
currentClient
.
getClientId
());
imMessageOnlineSend
.
setSender
(
currentClient
.
getClientId
());
...
...
core/src/main/java/com/wecloud/im/service/impl/ImMessageServiceImpl.java
View file @
703ea8a6
...
@@ -6,10 +6,13 @@ import io.geekidea.springbootplus.framework.common.exception.BusinessException;
...
@@ -6,10 +6,13 @@ 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
;
import
java.util.Arrays
;
import
java.util.Date
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
...
@@ -19,26 +22,34 @@ import org.springframework.beans.factory.annotation.Autowired;
...
@@ -19,26 +22,34 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.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.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Maps
;
import
com.google.common.collect.Maps
;
import
com.wecloud.dispatch.common.BaseRequest
;
import
com.wecloud.im.entity.ImApiMessageOnlineSend
;
import
com.wecloud.im.entity.ImApiMessageOnlineSend
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImClient
;
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.ImInbox
;
import
com.wecloud.im.entity.ImMessage
;
import
com.wecloud.im.entity.ImMessage
;
import
com.wecloud.im.entity.ImMessageOnlineSend
;
import
com.wecloud.im.entity.ImMessageOnlineSend
;
import
com.wecloud.im.mapper.ImMessageMapper
;
import
com.wecloud.im.mapper.ImMessageMapper
;
import
com.wecloud.im.mq.MqSender
;
import
com.wecloud.im.mq.MqSender
;
import
com.wecloud.im.param.ChatContentVo
;
import
com.wecloud.im.param.ChatContentVo
;
import
com.wecloud.im.param.GetReadersParam
;
import
com.wecloud.im.param.GetReadersParam
;
import
com.wecloud.im.param.GroupChatMessageParam
;
import
com.wecloud.im.param.GroupChatStatusMessageParam
;
import
com.wecloud.im.param.ImClientSimpleDto
;
import
com.wecloud.im.param.ImClientSimpleDto
;
import
com.wecloud.im.param.ImHistoryMessagePageParam
;
import
com.wecloud.im.param.ImHistoryMessagePageParam
;
import
com.wecloud.im.param.MsgDeleteParam
;
import
com.wecloud.im.param.MsgDeleteParam
;
import
com.wecloud.im.param.PrivateChatMessageParam
;
import
com.wecloud.im.param.PrivateChatStatusMessageParam
;
import
com.wecloud.im.param.PushExtParam
;
import
com.wecloud.im.param.add.ImMsgRecall
;
import
com.wecloud.im.param.add.ImMsgRecall
;
import
com.wecloud.im.param.add.ImMsgSendToOnlineClient
;
import
com.wecloud.im.param.add.ImMsgSendToOnlineClient
;
import
com.wecloud.im.param.add.ImMsgUpdate
;
import
com.wecloud.im.param.add.ImMsgUpdate
;
...
@@ -48,6 +59,7 @@ import com.wecloud.im.service.ImApplicationService;
...
@@ -48,6 +59,7 @@ import com.wecloud.im.service.ImApplicationService;
import
com.wecloud.im.service.ImClientService
;
import
com.wecloud.im.service.ImClientService
;
import
com.wecloud.im.service.ImConversationMembersService
;
import
com.wecloud.im.service.ImConversationMembersService
;
import
com.wecloud.im.service.ImConversationService
;
import
com.wecloud.im.service.ImConversationService
;
import
com.wecloud.im.service.ImInboxService
;
import
com.wecloud.im.service.ImMessageService
;
import
com.wecloud.im.service.ImMessageService
;
import
com.wecloud.im.thousandchat.service.ThousandChatService
;
import
com.wecloud.im.thousandchat.service.ThousandChatService
;
import
com.wecloud.im.vo.ImMessageOfflineListVo
;
import
com.wecloud.im.vo.ImMessageOfflineListVo
;
...
@@ -57,12 +69,14 @@ import com.wecloud.im.vo.ReaderVo;
...
@@ -57,12 +69,14 @@ import com.wecloud.im.vo.ReaderVo;
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.model.WsResponse
;
import
com.wecloud.im.ws.model.request.PushVO
;
import
com.wecloud.im.ws.model.request.ReceiveDataVO
;
import
com.wecloud.im.ws.model.request.ReceiveDataVO
;
import
com.wecloud.im.ws.model.request.ReceiveVO
;
import
com.wecloud.im.ws.model.request.ReceiveVO
;
import
com.wecloud.im.ws.sender.ChannelSender
;
import
com.wecloud.im.ws.sender.ChannelSender
;
import
com.wecloud.pushserver.client.model.constant.MqConstant
;
import
com.wecloud.pushserver.client.model.constant.MqConstant
;
import
com.wecloud.pushserver.client.model.dto.PushDTO
;
import
com.wecloud.pushserver.client.model.dto.PushDTO
;
import
com.wecloud.utils.JsonUtils
;
import
com.wecloud.utils.JsonUtils
;
import
com.wecloud.utils.SnowflakeUtil
;
/**
/**
...
@@ -87,7 +101,6 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
...
@@ -87,7 +101,6 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
@Autowired
@Autowired
private
ImApplicationService
imApplicationService
;
private
ImApplicationService
imApplicationService
;
@Autowired
@Autowired
private
ImConversationMembersService
imConversationMembersService
;
private
ImConversationMembersService
imConversationMembersService
;
...
@@ -103,6 +116,9 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
...
@@ -103,6 +116,9 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
@Autowired
@Autowired
private
MqSender
mqSender
;
private
MqSender
mqSender
;
@Autowired
private
ImInboxService
imInboxService
;
@Override
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ApiResult
<
Boolean
>
restApiImMessageSend
(
ImMsgSendToOnlineClient
imMsgSendToOnlineClient
,
ImApplication
imApplication
)
{
public
ApiResult
<
Boolean
>
restApiImMessageSend
(
ImMsgSendToOnlineClient
imMsgSendToOnlineClient
,
ImApplication
imApplication
)
{
...
@@ -175,7 +191,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
...
@@ -175,7 +191,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
imMessage
.
setEvent
(
false
);
imMessage
.
setEvent
(
false
);
imMessage
.
setSystemFlag
(
false
);
imMessage
.
setSystemFlag
(
false
);
imMessage
.
setSendStatus
(
2
);
imMessage
.
setSendStatus
(
2
);
imMessage
.
setMsgType
(
sysParam
.
getType
());
imMessage
.
setMsgType
(
sysParam
.
getType
()
.
toString
()
);
imMessage
.
setFkConversationId
(
sysParam
.
getToConversation
());
imMessage
.
setFkConversationId
(
sysParam
.
getToConversation
());
this
.
save
(
imMessage
);
this
.
save
(
imMessage
);
return
imMessage
;
return
imMessage
;
...
@@ -199,7 +215,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
...
@@ -199,7 +215,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
imMessage
.
setEvent
(
false
);
imMessage
.
setEvent
(
false
);
imMessage
.
setSystemFlag
(
false
);
imMessage
.
setSystemFlag
(
false
);
imMessage
.
setSendStatus
(
2
);
imMessage
.
setSendStatus
(
2
);
imMessage
.
setMsgType
(
data
.
getType
());
imMessage
.
setMsgType
(
data
.
getType
()
.
toString
()
);
imMessage
.
setAt
(
data
.
getAt
());
imMessage
.
setAt
(
data
.
getAt
());
imMessage
.
setFkConversationId
(
data
.
getToConversation
());
imMessage
.
setFkConversationId
(
data
.
getToConversation
());
this
.
save
(
imMessage
);
this
.
save
(
imMessage
);
...
@@ -214,7 +230,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
...
@@ -214,7 +230,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
ImMessage
messageById
=
this
.
getById
(
imMsgRecall
.
getMsgId
());
ImMessage
messageById
=
this
.
getById
(
imMsgRecall
.
getMsgId
());
// 判断该消息是否是该客户端发送 todo 单向撤回、双向撤回开关可配置
// 判断该消息是否是该客户端发送 todo 单向撤回、双向撤回开关可配置
B
oolean
withdrawOther
=
true
;
b
oolean
withdrawOther
=
true
;
if
(!
withdrawOther
&&
!
messageById
.
getSender
().
equals
(
imClientSender
.
getId
()))
{
if
(!
withdrawOther
&&
!
messageById
.
getSender
().
equals
(
imClientSender
.
getId
()))
{
throw
new
BusinessException
(
"不可撤回别人发送的消息"
);
throw
new
BusinessException
(
"不可撤回别人发送的消息"
);
}
}
...
@@ -269,7 +285,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
...
@@ -269,7 +285,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
// 封装响应的实体
// 封装响应的实体
ImMessageOnlineSend
imMessageOnlineSend
=
new
ImMessageOnlineSend
();
ImMessageOnlineSend
imMessageOnlineSend
=
new
ImMessageOnlineSend
();
BeanUtils
.
copyProperties
(
messageById
,
imMessageOnlineSend
);
BeanUtils
.
copyProperties
(
messageById
,
imMessageOnlineSend
);
imMessageOnlineSend
.
setType
(
MsgTypeEnum
.
MSG_WITHDRAW
.
getUriCode
());
imMessageOnlineSend
.
setType
(
MsgTypeEnum
.
MSG_WITHDRAW
.
getUriCode
()
+
""
);
imMessageOnlineSend
.
setMsgId
(
messageById
.
getId
());
imMessageOnlineSend
.
setMsgId
(
messageById
.
getId
());
imMessageOnlineSend
.
setCreateTime
(
new
Date
());
imMessageOnlineSend
.
setCreateTime
(
new
Date
());
imMessageOnlineSend
.
setSender
(
imClientSender
.
getClientId
());
imMessageOnlineSend
.
setSender
(
imClientSender
.
getClientId
());
...
@@ -367,7 +383,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
...
@@ -367,7 +383,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
// 封装响应的实体
// 封装响应的实体
ImMessageOnlineSend
imMessageOnlineSend
=
new
ImMessageOnlineSend
();
ImMessageOnlineSend
imMessageOnlineSend
=
new
ImMessageOnlineSend
();
BeanUtils
.
copyProperties
(
message
,
imMessageOnlineSend
);
BeanUtils
.
copyProperties
(
message
,
imMessageOnlineSend
);
imMessageOnlineSend
.
setType
(
MsgTypeEnum
.
MSG_DELETE
.
getUriCode
());
imMessageOnlineSend
.
setType
(
MsgTypeEnum
.
MSG_DELETE
.
getUriCode
()
+
""
);
imMessageOnlineSend
.
setMsgId
(
message
.
getId
());
imMessageOnlineSend
.
setMsgId
(
message
.
getId
());
imMessageOnlineSend
.
setCreateTime
(
new
Date
());
imMessageOnlineSend
.
setCreateTime
(
new
Date
());
imMessageOnlineSend
.
setSender
(
imClientSender
.
getClientId
());
imMessageOnlineSend
.
setSender
(
imClientSender
.
getClientId
());
...
@@ -538,5 +554,189 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
...
@@ -538,5 +554,189 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
return
imMessageMapper
.
getLastMsgByConversationId
(
conversationId
);
return
imMessageMapper
.
getLastMsgByConversationId
(
conversationId
);
}
}
@Override
public
Boolean
groupMessagePublish
(
GroupChatMessageParam
param
)
{
Long
appId
=
SecurityUtils
.
getCurrentAppId
();
ImApplication
application
=
imApplicationService
.
getCacheById
(
appId
);
// 获取发件人信息
String
senderClientId
=
param
.
getFromUserId
();
ImClient
sender
=
imClientService
.
getCacheImClient
(
appId
,
senderClientId
);
if
(
sender
==
null
)
{
throw
new
BusinessException
(
"id为 "
+
senderClientId
+
" 的发件人不存在"
);
}
// 获取群聊信息
String
conversationIdsStr
=
param
.
getToGroupIds
();
List
<
String
>
conversationIdList
=
Arrays
.
asList
(
conversationIdsStr
.
split
(
","
));
List
<
ImConversation
>
conversationList
=
imConversationService
.
listByIds
(
conversationIdList
);
// 校验群聊信息
if
(
conversationList
.
size
()
<=
0
)
{
throw
new
BusinessException
(
"群聊ids为 "
+
conversationIdsStr
+
" 的群聊列表不存在"
);
}
conversationList
.
forEach
(
conversation
->
{
// 获取群成员
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
conversation
.
getId
()));
// 组装消息
ImMessage
message
=
assembleImMessage
(
appId
,
sender
,
conversation
.
getId
(),
param
.
getMessageType
(),
param
.
getContent
());
if
(
param
.
getPersisted
())
{
// 持久化
this
.
save
(
message
);
}
// 拼装发送消息体
ImMessageOnlineSend
imMessageOnlineSend
=
assembleImMessageOnlineSend
(
message
,
sender
,
appId
);
// 发送消息
for
(
ImConversationMembers
members
:
membersList
)
{
if
(
members
.
getClientId
().
equals
(
senderClientId
)
&&
!
param
.
getIncludeSender
())
{
// 是否是发送者 且includeSender不为true
continue
;
}
// 入库 保存收件箱
saveImInbox
(
application
,
conversation
.
getId
(),
imMessageOnlineSend
.
getMsgId
(),
members
,
SnowflakeUtil
.
getId
());
// 在线用户直接发消息
sendMsgForOnline
(
members
.
getFkClientId
(),
imMessageOnlineSend
);
// 异步推送系统通知消息
if
(!
param
.
getSilent
())
{
// 不是静默推送
PushVO
pushVO
=
new
PushVO
();
pushVO
.
setData
(
JsonUtils
.
beanCopyDeep
(
param
.
getPushContent
(),
HashMap
.
class
));
if
(
param
.
getPushExt
()
!=
null
)
{
PushExtParam
pushExt
=
param
.
getPushExt
();
pushVO
.
setTitle
(
pushExt
.
getTitle
());
}
ImClient
receiver
=
new
ImClient
();
receiver
.
setId
(
members
.
getFkClientId
());
receiver
.
setClientId
(
members
.
getClientId
());
PushDTO
pushDTO
=
mqSender
.
buildPushDto
(
pushVO
,
receiver
,
application
);
if
(
pushDTO
!=
null
)
{
mqSender
.
orderSend
(
MqConstant
.
Topic
.
IM_ORDER_MSG_TOPIC
,
MqConstant
.
Tag
.
IM_ORDER_MSG_TAG
,
pushDTO
);
}
}
}
});
return
true
;
}
@Override
public
Boolean
groupStatusMessagePublish
(
GroupChatStatusMessageParam
param
)
{
return
null
;
}
@Override
public
Boolean
privateMessagePublish
(
PrivateChatMessageParam
param
)
{
return
null
;
}
@Override
public
Boolean
privateStatusMessagePublish
(
PrivateChatStatusMessageParam
param
)
{
return
null
;
}
/**
* 拼装发送消息体
* @param message
* @param imClientSender
* @param appId
* @return
*/
private
ImMessageOnlineSend
assembleImMessageOnlineSend
(
ImMessage
message
,
ImClient
imClientSender
,
Long
appId
)
{
// 封装响应的实体
ImMessageOnlineSend
imMessageOnlineSend
=
new
ImMessageOnlineSend
();
imMessageOnlineSend
.
setMsgId
(
message
.
getId
());
imMessageOnlineSend
.
setSender
(
imClientSender
.
getClientId
());
Map
<
String
,
Object
>
content
=
JSONObject
.
parseObject
(
message
.
getContent
(),
Map
.
class
);
//action的属性无需要返回
content
.
remove
(
BaseRequest
.
ACTION
);
imMessageOnlineSend
.
setContent
(
content
);
imMessageOnlineSend
.
setConversationId
(
message
.
getFkConversationId
());
imMessageOnlineSend
.
setCreateTime
(
message
.
getCreateTime
());
imMessageOnlineSend
.
setWithdrawTime
(
message
.
getWithdrawTime
());
imMessageOnlineSend
.
setWithdraw
(
message
.
getWithdraw
());
imMessageOnlineSend
.
setEvent
(
message
.
getEvent
());
imMessageOnlineSend
.
setSystemFlag
(
message
.
getSystemFlag
());
imMessageOnlineSend
.
setType
(
message
.
getMsgType
()
+
""
);
imMessageOnlineSend
.
setAt
(
message
.
getAt
());
return
imMessageOnlineSend
;
}
/**
* 组装imMessage
* @Author luozh
* @Date 2022年05月05日 06:17:00
* @param appId 发送群聊消息入参
* @param sender 发送群聊消息入参
* @param toConversationId 发送群聊消息入参
* @param messageType 发送群聊消息入参
* @param content 发送群聊消息入参
* @Return ImMessage
*/
private
ImMessage
assembleImMessage
(
Long
appId
,
ImClient
sender
,
Long
toConversationId
,
String
messageType
,
String
content
)
{
long
messageId
=
SnowflakeUtil
.
getId
();
ImMessage
imMessage
=
new
ImMessage
();
imMessage
.
setContent
(
content
);
imMessage
.
setId
(
messageId
);
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
appId
);
imMessage
.
setSender
(
sender
.
getId
());
imMessage
.
setWithdraw
(
false
);
imMessage
.
setEvent
(
false
);
imMessage
.
setSystemFlag
(
false
);
imMessage
.
setSendStatus
(
2
);
imMessage
.
setMsgType
(
messageType
);
imMessage
.
setAt
(
""
);
imMessage
.
setFkConversationId
(
toConversationId
);
return
imMessage
;
}
/**
* 入库 保存收件箱
*
* @param imApplication
* @param toConversationId
* @param messageId
* @param conversationMembers
* @param imInboxId
*/
private
void
saveImInbox
(
ImApplication
imApplication
,
Long
toConversationId
,
long
messageId
,
ImConversationMembers
conversationMembers
,
long
imInboxId
)
{
ImInbox
imInbox
=
new
ImInbox
();
imInbox
.
setId
(
imInboxId
);
imInbox
.
setCreateTime
(
new
Date
());
imInbox
.
setFkAppid
(
imApplication
.
getId
());
imInbox
.
setReceiver
(
conversationMembers
.
getFkClientId
());
imInbox
.
setFkMsgId
(
messageId
);
imInbox
.
setReadMsgStatus
(
0
);
imInbox
.
setReceiverMsgStatus
(
0
);
imInbox
.
setFkConversationId
(
toConversationId
);
imInboxService
.
save
(
imInbox
);
}
/**
* 发送消息给在线客户
* @param receiverClientId
* @param imMessageOnlineSend
*/
private
void
sendMsgForOnline
(
Long
receiverClientId
,
ImMessageOnlineSend
imMessageOnlineSend
)
{
// 封装要推给接收方的消息
WsResponse
<
ImMessageOnlineSend
>
responseModel
=
new
WsResponse
<>();
responseModel
.
setCmd
(
WsResponseCmdEnum
.
ONLINE_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
);
}
}
}
core/src/main/java/com/wecloud/im/thousandchat/action/ThousandChatAction.java
View file @
703ea8a6
package
com
.
wecloud
.
im
.
thousandchat
.
action
;
package
com
.
wecloud
.
im
.
thousandchat
.
action
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.netty.channel.Channel
;
import
io.netty.channel.socket.nio.NioSocketChannel
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.List
;
import
java.util.Map
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.wecloud.dispatch.annotation.ActionMapping
;
import
com.wecloud.dispatch.annotation.ActionMapping
;
import
com.wecloud.dispatch.common.BaseRequest
;
import
com.wecloud.dispatch.common.BaseRequest
;
...
@@ -29,23 +45,6 @@ import com.wecloud.pushserver.client.model.constant.MqConstant;
...
@@ -29,23 +45,6 @@ import com.wecloud.pushserver.client.model.constant.MqConstant;
import
com.wecloud.pushserver.client.model.dto.PushDTO
;
import
com.wecloud.pushserver.client.model.dto.PushDTO
;
import
com.wecloud.utils.JsonUtils
;
import
com.wecloud.utils.JsonUtils
;
import
com.wecloud.utils.SnowflakeUtil
;
import
com.wecloud.utils.SnowflakeUtil
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.netty.channel.Channel
;
import
io.netty.channel.socket.nio.NioSocketChannel
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.List
;
import
java.util.Map
;
/**
/**
* @Description 处理Cmd请求
* @Description 处理Cmd请求
...
@@ -212,7 +211,7 @@ public class ThousandChatAction {
...
@@ -212,7 +211,7 @@ public class ThousandChatAction {
imMessageOnlineSend
.
setWithdraw
(
imMessage
.
getWithdraw
());
imMessageOnlineSend
.
setWithdraw
(
imMessage
.
getWithdraw
());
imMessageOnlineSend
.
setEvent
(
imMessage
.
getEvent
());
imMessageOnlineSend
.
setEvent
(
imMessage
.
getEvent
());
imMessageOnlineSend
.
setSystemFlag
(
imMessage
.
getSystemFlag
());
imMessageOnlineSend
.
setSystemFlag
(
imMessage
.
getSystemFlag
());
imMessageOnlineSend
.
setType
(
data
.
getType
());
imMessageOnlineSend
.
setType
(
data
.
getType
()
+
""
);
imMessageOnlineSend
.
setAt
(
imMessage
.
getAt
());
imMessageOnlineSend
.
setAt
(
imMessage
.
getAt
());
return
imMessageOnlineSend
;
return
imMessageOnlineSend
;
}
}
...
...
core/src/main/java/com/wecloud/im/thousandchat/service/ThousandChatService.java
View file @
703ea8a6
package
com
.
wecloud
.
im
.
thousandchat
.
service
;
package
com
.
wecloud
.
im
.
thousandchat
.
service
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.BooleanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImConversation
;
import
com.wecloud.im.entity.ImConversation
;
import
com.wecloud.im.entity.ImMessage
;
import
com.wecloud.im.entity.ImMessage
;
...
@@ -18,22 +35,7 @@ import com.wecloud.im.ws.enums.MsgTypeEnum;
...
@@ -18,22 +35,7 @@ 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.model.WsResponse
;
import
com.wecloud.im.ws.sender.ChannelSender
;
import
com.wecloud.im.ws.sender.ChannelSender
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl
;
import
com.wecloud.utils.SnowflakeUtil
;
import
com.wecloud.utils.SnowflakeUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.BooleanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
/**
* 消息收件箱表 服务实现类
* 消息收件箱表 服务实现类
...
@@ -191,7 +193,7 @@ public class ThousandChatService extends BaseServiceImpl<ImMsgReadLastestMapper,
...
@@ -191,7 +193,7 @@ public class ThousandChatService extends BaseServiceImpl<ImMsgReadLastestMapper,
// 封装响应的实体
// 封装响应的实体
ImMessageOnlineSend
imMessageOnlineSend
=
new
ImMessageOnlineSend
();
ImMessageOnlineSend
imMessageOnlineSend
=
new
ImMessageOnlineSend
();
imMessageOnlineSend
.
setMsgId
(
lastestMsg
.
getId
());
imMessageOnlineSend
.
setMsgId
(
lastestMsg
.
getId
());
imMessageOnlineSend
.
setType
(
msgTypeEnum
.
getUriCode
());
imMessageOnlineSend
.
setType
(
msgTypeEnum
.
getUriCode
()
+
""
);
imMessageOnlineSend
.
setSender
(
curentClient
.
getClientId
());
imMessageOnlineSend
.
setSender
(
curentClient
.
getClientId
());
imMessageOnlineSend
.
setContent
(
contentMap
);
imMessageOnlineSend
.
setContent
(
contentMap
);
imMessageOnlineSend
.
setConversationId
(
lastestMsg
.
getFkConversationId
());
imMessageOnlineSend
.
setConversationId
(
lastestMsg
.
getFkConversationId
());
...
...
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