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
910da5db
Commit
910da5db
authored
May 09, 2022
by
Future
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'xiaohudou_20220427' into feature-cluster
parents
25532764
4aefa1a1
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
84 changed files
with
3209 additions
and
188 deletions
+3209
-188
config/src/main/resources/config/application-dev.yml
+1
-1
config/src/main/resources/config/application-xhdtest.yml
+9
-0
core/src/main/java/com/wecloud/im/action/ConversationAction.java
+41
-0
core/src/main/java/com/wecloud/im/action/ConversationMembersAction.java
+17
-2
core/src/main/java/com/wecloud/im/action/NormalChatAction.java
+46
-1
core/src/main/java/com/wecloud/im/chatroom/action/ChatRoomAction.java
+15
-13
core/src/main/java/com/wecloud/im/controller/ImClientBlacklistController.java
+12
-0
core/src/main/java/com/wecloud/im/controller/ImConversationController.java
+40
-20
core/src/main/java/com/wecloud/im/controller/ImConversationMembersController.java
+43
-24
core/src/main/java/com/wecloud/im/controller/ImMessageController.java
+30
-1
core/src/main/java/com/wecloud/im/entity/ImMessage.java
+5
-3
core/src/main/java/com/wecloud/im/entity/ImMessageOnlineSend.java
+3
-3
core/src/main/java/com/wecloud/im/friend/controller/ImFriendController.java
+28
-2
core/src/main/java/com/wecloud/im/friend/param/ImFriendApplyParam.java
+3
-2
core/src/main/java/com/wecloud/im/mapper/ImConversationMapper.java
+19
-6
core/src/main/java/com/wecloud/im/param/ChatSettingParam.java
+6
-3
core/src/main/java/com/wecloud/im/param/ChatSettingTypeEnum.java
+48
-0
core/src/main/java/com/wecloud/im/param/GroupChatMessageParam.java
+53
-0
core/src/main/java/com/wecloud/im/param/GroupChatSettingParam.java
+29
-0
core/src/main/java/com/wecloud/im/param/GroupChatStatusMessageParam.java
+56
-0
core/src/main/java/com/wecloud/im/param/ImClientBlacklistPageParam.java
+3
-0
core/src/main/java/com/wecloud/im/param/ImConversationQueryVo.java
+12
-0
core/src/main/java/com/wecloud/im/param/ListConversationParam.java
+33
-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/param/add/ImConversationCreate.java
+2
-2
core/src/main/java/com/wecloud/im/param/add/ServerImConversationCreate.java
+64
-0
core/src/main/java/com/wecloud/im/sdk/enums/GroupChatSettingTypeEnum.java
+55
-0
core/src/main/java/com/wecloud/im/service/ImClientBlacklistService.java
+8
-1
core/src/main/java/com/wecloud/im/service/ImConversationMembersService.java
+9
-5
core/src/main/java/com/wecloud/im/service/ImConversationService.java
+42
-6
core/src/main/java/com/wecloud/im/service/ImMessageService.java
+38
-0
core/src/main/java/com/wecloud/im/service/impl/ImClientBlacklistServiceImpl.java
+19
-5
core/src/main/java/com/wecloud/im/service/impl/ImConversationMembersServiceImpl.java
+54
-19
core/src/main/java/com/wecloud/im/service/impl/ImConversationServiceImpl.java
+0
-0
core/src/main/java/com/wecloud/im/service/impl/ImMessageServiceImpl.java
+0
-0
core/src/main/java/com/wecloud/im/thousandchat/action/ThousandChatAction.java
+16
-17
core/src/main/java/com/wecloud/im/thousandchat/service/ThousandChatService.java
+17
-15
core/src/main/java/com/wecloud/im/vo/ConversationVo.java
+12
-0
core/src/main/java/com/wecloud/im/ws/cache/UserStateCacheManager.java
+11
-7
core/src/main/java/com/wecloud/im/ws/enums/MsgTypeEnum.java
+35
-0
core/src/main/java/com/wecloud/im/ws/sender/ChannelSender.java
+18
-15
core/src/main/resources/mapper/ImConversationMapper.xml
+66
-6
framework/src/main/java/io/geekidea/springbootplus/framework/common/api/ApiCode.java
+5
-0
im-sdk/src/main/java/com/wecloud/im/sdk/ResourcePathConstants.java
+44
-4
im-sdk/src/main/java/com/wecloud/im/sdk/WecloudIm.java
+93
-0
im-sdk/src/main/java/com/wecloud/im/sdk/WecloudImClient.java
+94
-0
im-sdk/src/main/java/com/wecloud/im/sdk/enums/MessageTypeEnum.java
+49
-0
im-sdk/src/main/java/com/wecloud/im/sdk/internal/WecloudImClientOperation.java
+111
-0
im-sdk/src/main/java/com/wecloud/im/sdk/internal/WecloudImConversationOperation.java
+35
-5
im-sdk/src/main/java/com/wecloud/im/sdk/internal/WecloudImMessageOperation.java
+137
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/Blacklist.java
+21
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/ChatRoomMember.java
+33
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/Conversation.java
+118
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/FriendRequestRequest.java
+38
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/GroupChatMessage.java
+68
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/GroupChatStatusMessage.java
+43
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/GroupMembersFriendRequestRequest.java
+43
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/ListChatRoomMemberRequest.java
+24
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/ListConversationRequest.java
+32
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/PageBlacklistRequest.java
+23
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/PageResult.java
+23
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/PrivateChatMessage.java
+62
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/PrivateChatStatusMessage.java
+43
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/PublishGroupChatMessageRequest.java
+70
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/PublishGroupChatStatusMessageRequest.java
+45
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/PublishPrivateChatMessageRequest.java
+64
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/PublishPrivateChatStatusMessageRequest.java
+45
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/PushExtParam.java
+59
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/BaseMessage.java
+42
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/FileMessage.java
+22
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/MessageFile.java
+46
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/MessageImageFile.java
+56
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/MessageVideoFile.java
+59
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/MessageVoiceFile.java
+44
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/PicMessage.java
+22
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/PositionMessage.java
+37
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/TextMessage.java
+24
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/VideoMessage.java
+22
-0
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/VoiceMessage.java
+22
-0
im-sdk/src/main/java/com/wecloud/im/sdk/sample/PublishGroupChatMessageSample.java
+78
-0
im-sdk/src/main/java/com/wecloud/im/sdk/sample/PublishPrivateChatMessageSample.java
+61
-0
im-sdk/src/main/java/com/wecloud/im/sdk/sample/PublishPrivateChatMessageStatusSample.java
+57
-0
No files found.
config/src/main/resources/config/application-dev.yml
View file @
910da5db
...
...
@@ -20,7 +20,7 @@ spring:
# password: 123456
# 测试外网
url
:
jdbc:mysql://12
1.37.22.224:3306/wecloud_im_feature_cluster
?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
url
:
jdbc:mysql://12
4.71.83.11:3306/wecloud_im
?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
username
:
root
password
:
temple123456
...
...
config/src/main/resources/config/application-xhdtest.yml
View file @
910da5db
...
...
@@ -63,3 +63,12 @@ rocketmq:
namesrvAddr
:
124.71.83.11:9876
# 生产者的组名
producerId
:
im-server
sms
:
huawei
:
url
:
https://rtcsms.cn-north-1.myhuaweicloud.com:10743/sms/batchSendSms/v1
sender
:
8820122113125
appKey
:
FKFPgk3X6VRYAMJ9r9CIJWG2709W
appSecret
:
gvS2S8nD01vKCA1v45qi379gu1T5
verifyCode
:
666666
core/src/main/java/com/wecloud/im/action/ConversationAction.java
View file @
910da5db
...
...
@@ -2,10 +2,13 @@ package com.wecloud.im.action;
import
com.alibaba.fastjson.JSON
;
import
com.wecloud.dispatch.annotation.ActionMapping
;
import
com.wecloud.im.param.ChatRoomMemberPageParam
;
import
com.wecloud.im.param.DisbandConversationParam
;
import
com.wecloud.im.param.ExitChatRoomParam
;
import
com.wecloud.im.param.GroupChatSettingParam
;
import
com.wecloud.im.param.ImConversationQueryParam
;
import
com.wecloud.im.param.IntoChatRoomParam
;
import
com.wecloud.im.param.ListConversationParam
;
import
com.wecloud.im.param.MutedGroupMemberParam
;
import
com.wecloud.im.param.MutedGroupParam
;
import
com.wecloud.im.param.SetAdminsParam
;
...
...
@@ -17,10 +20,12 @@ import com.wecloud.im.param.add.ImConversationCreate;
import
com.wecloud.im.param.add.ImConversationDisplayUpdate
;
import
com.wecloud.im.param.add.ImConversationNameUpdate
;
import
com.wecloud.im.service.ImConversationService
;
import
com.wecloud.im.vo.ChatRoomMemberVo
;
import
com.wecloud.im.vo.ConversationVo
;
import
com.wecloud.im.vo.ImConversationCreateVo
;
import
com.wecloud.im.ws.model.WsResponse
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -28,6 +33,7 @@ import org.apache.commons.collections4.CollectionUtils;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
java.util.HashMap
;
...
...
@@ -231,6 +237,19 @@ public class ConversationAction {
}
/**
* 群聊设置
*/
@ActionMapping
(
"/groupChatSetting"
)
@ApiOperation
(
value
=
"群聊设置"
,
notes
=
"权限:群主和管理员有权限操作"
)
public
WsResponse
<
Map
<
String
,
Boolean
>>
groupChatSetting
(
@Validated
GroupChatSettingParam
data
)
{
log
.
info
(
"群聊设置入参 {}"
,
JSON
.
toJSONString
(
data
));
Boolean
r
=
imConversationService
.
groupChatSetting
(
data
);
Map
<
String
,
Boolean
>
result
=
new
HashMap
<>();
result
.
put
(
"result"
,
r
);
return
WsResponse
.
ok
(
result
);
}
/**
* 用户进入聊天室
*/
@ActionMapping
(
"/intoChatRoom"
)
...
...
@@ -258,4 +277,26 @@ public class ConversationAction {
}
/**
* 全量获取聊天室成员
*/
@PostMapping
(
"/listChatRoomMember"
)
@ApiOperation
(
value
=
"全量获取聊天室成员"
,
notes
=
"全量获取聊天室成员"
)
public
WsResponse
<
List
<
ChatRoomMemberVo
>>
listChatRoomMember
(
ChatRoomMemberPageParam
data
)
{
log
.
info
(
"全量获取聊天室成员入参 {}"
,
JSON
.
toJSONString
(
data
));
List
<
ChatRoomMemberVo
>
r
=
imConversationService
.
listChatRoomMember
(
data
);
return
WsResponse
.
ok
(
r
);
}
/**
* 查找会话信息
* @return
*/
@ActionMapping
(
"/listConversation"
)
@ApiOperation
(
value
=
"批量查找会话信息"
,
notes
=
"会话"
)
public
WsResponse
<
List
<
ConversationVo
>>
listConversation
(
ListConversationParam
data
)
{
List
<
ConversationVo
>
conversationList
=
imConversationService
.
listConversation
(
data
);
return
WsResponse
.
ok
(
conversationList
);
}
}
core/src/main/java/com/wecloud/im/action/ConversationMembersAction.java
View file @
910da5db
...
...
@@ -11,8 +11,10 @@ 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.wecloud.dispatch.annotation.ActionMapping
;
import
com.wecloud.im.param.ChatSettingParam
;
import
com.wecloud.im.param.ImConvMemeClientRemarkNameParam
;
import
com.wecloud.im.param.ListConversationMembersParam
;
import
com.wecloud.im.param.add.ImConversationMemAttrUpdate
;
...
...
@@ -67,10 +69,23 @@ public class ConversationMembersAction {
@ActionMapping
(
"/getList"
)
@ApiOperation
(
value
=
"获取会话中成员表列表"
)
public
WsResponse
<
Map
<
String
,
List
<
ConversationMemberVo
>>>
getImConversationMembersList
(
@Validated
ListConversationMembersParam
data
)
throws
Exception
{
List
<
ConversationMemberVo
>
conversationMemberVoList
=
imConversationMembersService
.
getImConversationMembersList
(
data
);
List
<
ConversationMemberVo
>
conversationMemberVoList
=
imConversationMembersService
.
getImConversationMembersList
(
data
);
Map
<
String
,
List
<
ConversationMemberVo
>>
result
=
new
HashMap
<>();
result
.
put
(
"result"
,
conversationMemberVoList
);
return
WsResponse
.
ok
(
result
);
}
/**
* 聊天设置
* @Author luozh
* @Date 2022年04月26日 11:48:59
* @param
* @Return
*/
@ApiOperation
(
value
=
"聊天设置"
)
@ActionMapping
(
"/chatSetting"
)
public
WsResponse
<
Map
<
String
,
Boolean
>>
chatSetting
(
@RequestBody
ChatSettingParam
param
)
{
imConversationMembersService
.
chatSetting
(
param
);
return
WsResponse
.
ok
();
}
}
core/src/main/java/com/wecloud/im/action/NormalChatAction.java
View file @
910da5db
...
...
@@ -12,6 +12,8 @@ import java.util.Date;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
import
java.util.stream.Collectors
;
import
org.apache.commons.collections4.CollectionUtils
;
...
...
@@ -140,6 +142,11 @@ public class NormalChatAction {
if
(
muted
(
conversation
,
reqId
,
imClientSender
,
membersList
,
request
.
getSenderChannel
()))
{
return
;
}
// 消息内容校验
if
(
checkMsg
(
conversation
,
reqId
,
data
.
getText
(),
request
.
getSenderChannel
()))
{
return
;
}
ImMessageOnlineSend
imMessageOnlineSend
=
assembleImMessageOnlineSend
(
data
,
imClientSender
,
imApplication
.
getId
());
// 再给所有人发 todo 需要改成批量
...
...
@@ -378,9 +385,47 @@ public class NormalChatAction {
responseModel
.
setCode
(
apiResult
.
getCode
());
responseModel
.
setMsg
(
apiResult
.
getMessage
());
responseModel
.
setReqId
(
reqId
);
channelSender
.
sendMsgLocal
((
NioSocketChannel
)
channel
,
responseModel
);
channelSender
.
sendMsgLocal
((
NioSocketChannel
)
channel
,
responseModel
);
}
return
result
;
}
/**
* 是否禁止发送链接
* @Author luozh
* @Date 2022年04月27日 04:39:04
* @Return
*/
private
boolean
checkMsg
(
ImConversationQueryVo
conversation
,
String
reqId
,
String
msgContent
,
Channel
channel
)
{
boolean
result
=
false
;
// 判断是否开启禁止发送链接
if
(
conversation
.
getForbidSendLink
())
{
String
regex
=
"((ht|f)tp(s?)\\:\\/\\/)?[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*."
+
"(html|htm|shtml|jsp|asp|php|com|cn|net|com.cn|org|vip)+(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-\\.\\?\\,"
+
"\\'\\/\\\\&%\\+\\$#_=]*)?"
;
Pattern
pat
=
Pattern
.
compile
(
regex
);
Matcher
mat
=
pat
.
matcher
(
msgContent
.
trim
());
result
=
mat
.
find
();
}
if
(
result
)
{
log
.
info
(
"群: {}, 已被禁止发送链接"
,
conversation
.
getName
());
// 响应发送方
WsResponse
<
HashMap
<
String
,
Long
>>
responseModel
=
new
WsResponse
<>();
ApiResult
<
Boolean
>
apiResult
=
ApiResult
.
result
(
ApiCode
.
IS_BE_FORBID_SEND_LINK
);
responseModel
.
setCmd
(
WsResponseCmdEnum
.
RES
.
getCmdCode
());
responseModel
.
setCode
(
apiResult
.
getCode
());
responseModel
.
setMsg
(
apiResult
.
getMessage
());
responseModel
.
setReqId
(
reqId
);
channelSender
.
sendMsgLocal
((
NioSocketChannel
)
channel
,
responseModel
);
}
return
result
;
}
}
core/src/main/java/com/wecloud/im/chatroom/action/ChatRoomAction.java
View file @
910da5db
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.common.BaseRequest
;
import
com.wecloud.dispatch.extend.ActionRequest
;
...
...
@@ -18,19 +33,6 @@ import com.wecloud.im.ws.model.WsResponse;
import
com.wecloud.im.ws.sender.ChannelSender
;
import
com.wecloud.utils.JsonUtils
;
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
...
...
core/src/main/java/com/wecloud/im/controller/ImClientBlacklistController.java
View file @
910da5db
...
...
@@ -70,5 +70,17 @@ public class ImClientBlacklistController extends BaseController {
return
ApiResult
.
ok
(
blacklist
);
}
/**
* 黑名单分页列表sdk用
*/
@PostMapping
(
"/sdk/pageBlacklist"
)
@OperationLog
(
name
=
"黑名单分页列表"
,
type
=
OperationLogType
.
PAGE
)
@ApiOperation
(
value
=
"黑名单分页列表"
)
public
ApiResult
<
Paging
<
ImClientBlacklistQueryVo
>>
getImClientBlacklistPageListSdk
(
@RequestBody
ImClientBlacklistPageParam
imClientBlacklistPageParam
)
throws
Exception
{
Paging
<
ImClientBlacklistQueryVo
>
blacklist
=
imClientBlacklistService
.
getImClientBlacklistPageListSdk
(
imClientBlacklistPageParam
);
return
ApiResult
.
ok
(
blacklist
);
}
}
core/src/main/java/com/wecloud/im/controller/ImConversationController.java
View file @
910da5db
package
com
.
wecloud
.
im
.
controller
;
import
com.alibaba.fastjson.JSON
;
import
com.wecloud.im.param.ChatRoomMemberPageParam
;
import
com.wecloud.im.param.DisbandConversationParam
;
import
com.wecloud.im.param.ExitChatRoomParam
;
import
com.wecloud.im.param.GroupChatSettingParam
;
import
com.wecloud.im.param.ImConversationQueryParam
;
import
com.wecloud.im.param.IntoChatRoomParam
;
import
com.wecloud.im.param.ListConversationParam
;
import
com.wecloud.im.param.MutedGroupMemberParam
;
import
com.wecloud.im.param.MutedGroupParam
;
import
com.wecloud.im.param.SetAdminsParam
;
import
com.wecloud.im.param.TransferOwnerParam
;
import
com.wecloud.im.param.add.ImClientLeaveConversation
;
import
com.wecloud.im.param.add.ImClientToConversation
;
import
com.wecloud.im.param.add.ImConversationAttrUpdate
;
import
com.wecloud.im.param.add.ImConversationCreate
;
import
com.wecloud.im.param.add.ImConversationDisplayUpdate
;
import
com.wecloud.im.param.add.ImConversationNameUpdate
;
import
com.wecloud.im.service.ImConversationService
;
import
com.wecloud.im.vo.ChatRoomMemberVo
;
import
com.wecloud.im.vo.ConversationVo
;
import
com.wecloud.im.vo.ImConversationCreateVo
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.controller.BaseController
;
import
io.geekidea.springbootplus.framework.core.pagination.Paging
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.List
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
...
...
@@ -22,22 +36,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.alibaba.fastjson.JSON
;
import
com.wecloud.im.param.DisbandConversationParam
;
import
com.wecloud.im.param.ImConversationQueryParam
;
import
com.wecloud.im.param.MutedGroupMemberParam
;
import
com.wecloud.im.param.MutedGroupParam
;
import
com.wecloud.im.param.SetAdminsParam
;
import
com.wecloud.im.param.TransferOwnerParam
;
import
com.wecloud.im.param.add.ImClientLeaveConversation
;
import
com.wecloud.im.param.add.ImClientToConversation
;
import
com.wecloud.im.param.add.ImConversationAttrUpdate
;
import
com.wecloud.im.param.add.ImConversationCreate
;
import
com.wecloud.im.param.add.ImConversationDisplayUpdate
;
import
com.wecloud.im.param.add.ImConversationNameUpdate
;
import
com.wecloud.im.service.ImConversationService
;
import
com.wecloud.im.vo.ConversationVo
;
import
com.wecloud.im.vo.ImConversationCreateVo
;
import
java.util.List
;
/**
* 会话表 控制器
...
...
@@ -211,6 +210,17 @@ public class ImConversationController extends BaseController {
return
ApiResult
.
result
(
true
);
}
/**
* 群聊设置
*/
@PostMapping
(
"/groupChatSetting"
)
@ApiOperation
(
value
=
"群聊设置"
,
notes
=
"权限:群主和管理员有权限操作"
)
public
ApiResult
<
Boolean
>
groupChatSetting
(
@RequestBody
@Validated
GroupChatSettingParam
param
)
{
log
.
info
(
"群聊设置入参 {}"
,
JSON
.
toJSONString
(
param
));
Boolean
result
=
imConversationService
.
groupChatSetting
(
param
);
return
ApiResult
.
ok
(
result
);
}
/**
* 用户进入聊天室
...
...
@@ -243,6 +253,16 @@ public class ImConversationController extends BaseController {
return
ApiResult
.
ok
(
imConversationService
.
listChatRoomMember
(
param
));
}
/**
* 查找会话信息
* @return
*/
@PostMapping
(
"/listConversation"
)
@ApiOperation
(
value
=
"批量查找会话信息"
,
notes
=
"会话"
)
public
ApiResult
<
List
<
ConversationVo
>>
listConversation
(
@RequestBody
ListConversationParam
param
)
{
List
<
ConversationVo
>
conversationList
=
imConversationService
.
listConversation
(
param
);
return
ApiResult
.
ok
(
conversationList
);
}
}
core/src/main/java/com/wecloud/im/controller/ImConversationMembersController.java
View file @
910da5db
package
com
.
wecloud
.
im
.
controller
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.controller.BaseController
;
import
io.geekidea.springbootplus.framework.
shiro.util.SecurityUtils
;
import
io.geekidea.springbootplus.framework.
common.exception.BusinessException
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.List
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.PostMapping
;
...
...
@@ -16,10 +18,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.wecloud.im.friend.param.ImFriendApplyParam
;
import
com.wecloud.im.param.ChatSettingParam
;
import
com.wecloud.im.param.ImConvMemeClientRemarkNameParam
;
import
com.wecloud.im.param.ListConversationMembersParam
;
import
com.wecloud.im.param.SetConversationDoNotDisturbParam
;
import
com.wecloud.im.param.SetConversationTopParam
;
import
com.wecloud.im.param.add.ImConversationMemAttrUpdate
;
import
com.wecloud.im.service.ImConversationMembersService
;
import
com.wecloud.im.vo.ConversationMemberVo
;
...
...
@@ -77,39 +79,56 @@ public class ImConversationMembersController extends BaseController {
}
/**
*
会话置顶
*
聊天设置
* @Author luozh
* @Date 2022年04月26日 11:48:59
* @param
* @Return
*/
@ApiOperation
(
value
=
"会话置顶"
)
@PostMapping
(
"/sdk/setTop"
)
public
ApiResult
<
Boolean
>
setTop
(
@RequestBody
SetConversationTopParam
param
)
{
Long
appId
=
SecurityUtils
.
getCurrentAppId
();
String
clientId
=
param
.
getClientId
();
Long
conversationId
=
param
.
getConversationId
();
Boolean
top
=
param
.
getTop
();
imConversationMembersService
.
setTop
(
appId
,
clientId
,
conversationId
,
top
);
return
ApiResult
.
ok
();
@ApiOperation
(
value
=
"聊天设置"
)
@PostMapping
(
"/chatSetting"
)
public
ApiResult
<
Boolean
>
chatSetting
(
@RequestBody
ChatSettingParam
param
)
{
return
ApiResult
.
ok
(
imConversationMembersService
.
chatSetting
(
param
));
}
/**
*
设置免打扰
*
群成员添加好友
* @Author luozh
* @Date 2022年04月2
6日 11:49:55
* @Date 2022年04月2
8日 11:40:44
* @param
* @Return
*/
@ApiOperation
(
value
=
"会话免打扰"
)
@PostMapping
(
"/sdk/setDoNotDisturb"
)
public
ApiResult
<
Boolean
>
setDoNotDisturb
(
@RequestBody
SetConversationDoNotDisturbParam
param
)
{
Long
appId
=
SecurityUtils
.
getCurrentAppId
();
String
clientId
=
param
.
getClientId
();
Long
conversationId
=
param
.
getConversationId
();
Boolean
doNotDisturb
=
param
.
getDoNotDisturb
();
imConversationMembersService
.
setDoNotDisturb
(
appId
,
clientId
,
conversationId
,
doNotDisturb
);
return
ApiResult
.
ok
();
@ApiOperation
(
value
=
"群成员添加好友"
)
@PostMapping
(
"/addUser"
)
public
ApiResult
<
Boolean
>
addUser
(
@RequestBody
ImFriendApplyParam
param
)
{
if
(
param
.
getConversationId
()
==
null
)
{
throw
new
BusinessException
(
ApiCode
.
PARAMETER_EXCEPTION
.
getCode
(),
"参数: conversationId 不能为空"
);
}
if
(
StringUtils
.
isBlank
(
param
.
getFriendName
()))
{
throw
new
BusinessException
(
ApiCode
.
PARAMETER_EXCEPTION
.
getCode
(),
"参数: friendName 不能为空"
);
}
if
(
StringUtils
.
isBlank
(
param
.
getClientId
()))
{
throw
new
BusinessException
(
ApiCode
.
PARAMETER_EXCEPTION
.
getCode
(),
"参数: clientId 不能为空"
);
}
if
(
StringUtils
.
isBlank
(
param
.
getFriendClientId
()))
{
throw
new
BusinessException
(
ApiCode
.
PARAMETER_EXCEPTION
.
getCode
(),
"参数: friendClientId 不能为空"
);
}
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 @
910da5db
...
...
@@ -21,8 +21,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RestController
;
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.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.ImMsgUpdate
;
import
com.wecloud.im.service.ImMessageService
;
...
...
@@ -60,7 +64,7 @@ public class ImMessageController extends BaseController {
@PostMapping
(
"/delete"
)
@ApiOperation
(
value
=
"删除消息"
,
notes
=
"单条消息与批量消息删除共用"
)
public
ApiResult
<
Boolean
>
deleteMsg
(
@RequestBody
MsgDeleteParam
param
)
{
if
(
param
==
null
)
{
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
if
(
CollectionUtils
.
isEmpty
(
param
.
getMsgIds
()))
{
...
...
@@ -109,5 +113,30 @@ public class ImMessageController extends BaseController {
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 @
910da5db
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.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
...
...
@@ -9,9 +7,13 @@ import lombok.Data;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotNull
;
import
java.util.Date
;
import
javax.validation.constraints.NotNull
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
/**
* 消息存储表
*
...
...
core/src/main/java/com/wecloud/im/entity/ImMessageOnlineSend.java
View file @
910da5db
...
...
@@ -7,9 +7,9 @@ import lombok.Data;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotNull
;
import
java.util.Date
;
import
java.util.Map
;
import
javax.validation.constraints.NotNull
;
/**
* 消息在线推送
...
...
@@ -45,7 +45,7 @@ public class ImMessageOnlineSend extends BaseEntity {
private
String
sender
;
@ApiModelProperty
(
"内容"
)
private
Map
content
;
private
Object
content
;
@ApiModelProperty
(
"0未撤回; 1已撤回"
)
private
Boolean
withdraw
;
...
...
core/src/main/java/com/wecloud/im/friend/controller/ImFriendController.java
View file @
910da5db
...
...
@@ -94,10 +94,36 @@ public class ImFriendController extends BaseController {
return
ApiResult
.
fail
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
}
ImClient
friendClient
=
imClientService
.
getCacheImClient
(
currentClient
.
getFkAppid
(),
param
.
getFriendClientId
());
if
(
friendClient
==
null
)
{
if
(
friendClient
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
}
if
(
currentClient
.
getId
().
equals
(
friendClient
.
getId
()))
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
imFriendService
.
applyFriend
(
currentClient
,
friendClient
,
param
.
getFriendName
(),
param
.
getRequestRemark
());
log
.
info
(
"申请添加好友逻辑完成"
);
return
ApiResult
.
ok
();
}
/**
* 申请添加好友
*/
@PostMapping
(
"/sdk/apply"
)
@ApiOperation
(
value
=
"申请添加好友 sdk用"
)
public
ApiResult
<
Boolean
>
applyFriendSdk
(
@RequestBody
ImFriendApplyParam
param
)
{
log
.
info
(
"申请添加好友入参 {}"
,
JSON
.
toJSONString
(
param
));
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
ImClient
currentClient
=
imClientService
.
getCacheImClient
(
SecurityUtils
.
getCurrentAppId
(),
param
.
getClientId
());
if
(
currentClient
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
}
ImClient
friendClient
=
imClientService
.
getCacheImClient
(
SecurityUtils
.
getCurrentAppId
(),
param
.
getFriendClientId
());
if
(
friendClient
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
}
if
(
currentClient
.
getId
().
equals
(
friendClient
.
getId
()))
{
if
(
currentClient
.
getId
().
equals
(
friendClient
.
getId
()))
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
imFriendService
.
applyFriend
(
currentClient
,
friendClient
,
param
.
getFriendName
(),
param
.
getRequestRemark
());
...
...
core/src/main/java/com/wecloud/im/friend/param/ImFriendApplyParam.java
View file @
910da5db
...
...
@@ -3,8 +3,6 @@ package com.wecloud.im.friend.param;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Description 申请好友入参
* @Author lixiaozhong
...
...
@@ -14,6 +12,9 @@ import java.io.Serializable;
public
class
ImFriendApplyParam
extends
ImFriendBaseParam
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
"会话id,群成员添加好友时传参"
)
private
Long
conversationId
;
@ApiModelProperty
(
"备注好友名称"
)
private
String
friendName
;
...
...
core/src/main/java/com/wecloud/im/mapper/ImConversationMapper.java
View file @
910da5db
package
com
.
wecloud
.
im
.
mapper
;
import
java.io.Serializable
;
import
java.util.Collection
;
import
java.util.List
;
import
org.apache.ibatis.annotations.Param
;
import
org.springframework.stereotype.Repository
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
...
...
@@ -7,11 +14,6 @@ import com.wecloud.im.entity.ImConversation;
import
com.wecloud.im.param.ImConversationPageParam
;
import
com.wecloud.im.param.ImConversationQueryVo
;
import
com.wecloud.im.vo.ConversationVo
;
import
org.apache.ibatis.annotations.Param
;
import
org.springframework.stereotype.Repository
;
import
java.io.Serializable
;
import
java.util.List
;
/**
* 会话表 Mapper 接口
...
...
@@ -46,7 +48,7 @@ public interface ImConversationMapper extends BaseMapper<ImConversation> {
* @param currentClientId
* @return
*/
List
<
ConversationVo
>
getMyImConversationListAndMsgCount
(
@Param
(
"currentClientId"
)
Long
currentClientId
,
@Param
(
"clientId"
)
String
clientId
,
@Param
(
"conversationId"
)
Long
conversationId
);
List
<
ConversationVo
>
getMyImConversationListAndMsgCount
(
@Param
(
"currentClientId"
)
Long
currentClientId
,
@Param
(
"clientId"
)
String
clientId
,
@Param
(
"conversationId"
)
Long
conversationId
);
/**
* 查询用户加入的所有会话
...
...
@@ -91,4 +93,15 @@ public interface ImConversationMapper extends BaseMapper<ImConversation> {
* @return 成功则返回true
*/
boolean
upgradeToThousandChat
(
@Param
(
"appId"
)
Long
appId
,
@Param
(
"conversationId"
)
Long
conversationId
);
/**
* 获取发件人和收件人会话列表
* @Author luozh
* @Date 2022年05月06日 07:15:05
* @param senderClientId 发件人im client id
* @param receiverClientIds 收件人 im client ids
* @Return
*/
List
<
ImConversation
>
getConversationBySenderAndReceivers
(
@Param
(
"senderImClientId"
)
Long
senderImClientId
,
@Param
(
"receiverImClientIds"
)
Collection
<
Long
>
receiverImClientIds
);
}
core/src/main/java/com/wecloud/im/param/
SetConversationTop
Param.java
→
core/src/main/java/com/wecloud/im/param/
ChatSetting
Param.java
View file @
910da5db
...
...
@@ -4,14 +4,14 @@ import io.swagger.annotations.ApiModelProperty;
import
lombok.Data
;
/**
*
设置会话置顶
入参
*
聊天设置
入参
* @Author luozh
* @Date 2022年04月26日 11:52
* @Version 1.0
*/
@Data
public
class
SetConversationTop
Param
{
public
class
ChatSetting
Param
{
@ApiModelProperty
(
"客户端id"
)
String
clientId
;
...
...
@@ -19,7 +19,10 @@ public class SetConversationTopParam {
@ApiModelProperty
(
"会话id"
)
Long
conversationId
;
@ApiModelProperty
(
"设置类型"
)
ChatSettingTypeEnum
type
;
@ApiModelProperty
(
"是否免打扰"
)
private
Boolean
top
;
private
Boolean
on
;
}
core/src/main/java/com/wecloud/im/param/ChatSettingTypeEnum.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
param
;
import
io.geekidea.springbootplus.framework.common.enums.BaseEnum
;
import
com.baomidou.mybatisplus.annotation.EnumValue
;
import
com.fasterxml.jackson.annotation.JsonValue
;
/**
*
* @Author luozh
* @Date 2022年04月27日 17:26
* @Version 1.0
*/
public
enum
ChatSettingTypeEnum
implements
BaseEnum
{
/**
* 1-置顶
*/
TOP
(
1
,
"置顶"
),
/**
* 2-消息免打扰
*/
DO_NOT_DISTURB
(
2
,
"消息免打扰"
),
;
ChatSettingTypeEnum
(
int
code
,
String
desc
)
{
this
.
code
=
code
;
this
.
desc
=
desc
;
}
@JsonValue
@EnumValue
private
final
Integer
code
;
private
final
String
desc
;
@Override
public
Integer
getCode
()
{
return
null
;
}
@Override
public
String
getDesc
()
{
return
null
;
}
}
core/src/main/java/com/wecloud/im/param/GroupChatMessageParam.java
0 → 100644
View file @
910da5db
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
mentioned
;
@ApiModelProperty
(
"是否为静默消息"
)
private
Boolean
silent
;
@ApiModelProperty
(
"推送配置"
)
private
PushExtParam
pushExt
;
}
core/src/main/java/com/wecloud/im/param/GroupChatSettingParam.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotNull
;
import
com.wecloud.im.sdk.enums.GroupChatSettingTypeEnum
;
/**
* 群聊设置入参
* @Author luozh
* @Date 2022年04月27日 11:20
* @Version 1.0
*/
@Data
public
class
GroupChatSettingParam
{
@ApiModelProperty
(
"设置类型FORBID_ADD_FRIEND 禁止群成员互加好友 FORBID_SEND_RED_PACKETS 禁止群成员发红包 FORBID_SEND_PIC 禁止群成员发图片 "
+
"FORBID_SEND_LINK 禁止群成员发链接"
)
private
GroupChatSettingTypeEnum
type
;
@NotNull
@ApiModelProperty
(
"会话id"
)
private
Long
conversationId
;
@ApiModelProperty
(
"开启 true是 false否"
)
private
Boolean
on
;
}
core/src/main/java/com/wecloud/im/param/GroupChatStatusMessageParam.java
0 → 100644
View file @
910da5db
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/ImClientBlacklistPageParam.java
View file @
910da5db
...
...
@@ -19,5 +19,8 @@ import lombok.experimental.Accessors;
@EqualsAndHashCode
(
callSuper
=
true
)
@ApiModel
(
value
=
"黑名单分页参数"
)
public
class
ImClientBlacklistPageParam
extends
BasePageOrderParam
{
private
String
clientId
;
private
static
final
long
serialVersionUID
=
1L
;
}
core/src/main/java/com/wecloud/im/param/ImConversationQueryVo.java
View file @
910da5db
...
...
@@ -61,4 +61,16 @@ public class ImConversationQueryVo implements Serializable {
*/
@ApiModelProperty
(
"禁言开关 1-未禁言 2-禁言"
)
private
Integer
muted
;
@ApiModelProperty
(
"禁止互加好友"
)
private
Boolean
forbidAddFriend
;
@ApiModelProperty
(
"禁止发红包"
)
private
Boolean
forbidSendRedPackets
;
@ApiModelProperty
(
"禁止发图片"
)
private
Boolean
forbidSendPic
;
@ApiModelProperty
(
"禁止发链接"
)
private
Boolean
forbidSendLink
;
}
core/src/main/java/com/wecloud/im/param/ListConversationParam.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
param
;
import
io.geekidea.springbootplus.framework.common.entity.BaseEntity
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
import
java.util.List
;
/**
* @Author wenzhida
* @Date 2022/5/1 9:35
* @Description 查找聊天室入参
*/
@Data
@Accessors
(
chain
=
true
)
@EqualsAndHashCode
(
callSuper
=
true
)
@ApiModel
(
value
=
"查找聊天室入参"
)
public
class
ListConversationParam
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
-
3602523207000275557L
;
@ApiModelProperty
(
"会话属性,1:单聊,2:普通群,3:万人群,4:聊天室"
)
private
Integer
chatType
;
@ApiModelProperty
(
"会话id列表"
)
private
String
conversationIds
;
}
core/src/main/java/com/wecloud/im/param/PrivateChatMessageParam.java
0 → 100644
View file @
910da5db
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 @
910da5db
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 @
910da5db
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/param/add/ImConversationCreate.java
View file @
910da5db
...
...
@@ -7,10 +7,10 @@ import lombok.Data;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotNull
;
import
java.util.HashMap
;
import
java.util.List
;
import
javax.validation.constraints.NotNull
;
/**
* 会话表
*
...
...
core/src/main/java/com/wecloud/im/param/add/ServerImConversationCreate.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
param
.
add
;
import
io.swagger.annotations.ApiModel
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
import
java.util.List
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.sdk.enums.ChatTypeEnum
;
import
com.wecloud.imserver.client.model.enums.DeviceTypeEnum
;
/**
*
* @Author luozh
* @Date 2022年05月07日 10:13
* @Version 1.0
*/
@Data
@Accessors
(
chain
=
true
)
@ApiModel
(
value
=
"ImConversationCreate"
)
public
class
ServerImConversationCreate
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
/**
* 可选 对话的名字,可为群组命名。")
*/
private
String
name
;
/**
* tring格式,可选 自定义属性,供开发者扩展使用。")
*/
private
String
attributes
;
/**
* 应用, 前端")
*/
private
ImApplication
application
;
/**
* 创建者 前端请求不传")
*/
private
ImClient
creator
;
/**
* 可选 成员列表
*/
private
List
<
ImClient
>
members
;
/**
* @see com.wecloud.im.sdk.enums.ChatTypeEnum
*/
/**
* 会话属性,1:单聊,2:普通群,3:万人群, 4:聊天室")
*/
private
ChatTypeEnum
chatType
;
/**
* 客户端平台: 1 web, 2 安卓, 3 ios, 4 pc-win, 5 pc-macOs, 需与生成sign时的值一致")
*/
private
DeviceTypeEnum
platform
;
}
core/src/main/java/com/wecloud/im/sdk/enums/GroupChatSettingTypeEnum.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
enums
;
import
io.geekidea.springbootplus.framework.common.enums.BaseEnum
;
import
com.baomidou.mybatisplus.annotation.EnumValue
;
import
com.fasterxml.jackson.annotation.JsonValue
;
/**
* 群聊设置类型枚举
* @Author luozh
* @Date 2022年04月27日 11:23
* @Version 1.0
*/
public
enum
GroupChatSettingTypeEnum
implements
BaseEnum
{
/**
* 1-禁止群成员互加好友
*/
FORBID_ADD_FRIEND
(
1
,
"禁止群成员互加好友"
),
/**
* 2-禁止群成员发红包
*/
FORBID_SEND_RED_PACKETS
(
2
,
"禁止群成员发红包"
),
/**
* 3-禁止群成员发图片
*/
FORBID_SEND_PIC
(
3
,
"禁止群成员发图片"
),
/**
* 4-禁止群成员发链接
*/
FORBID_SEND_LINK
(
4
,
"禁止群成员发链接"
);
GroupChatSettingTypeEnum
(
int
code
,
String
desc
)
{
this
.
code
=
code
;
this
.
desc
=
desc
;
}
@JsonValue
@EnumValue
private
final
Integer
code
;
private
final
String
desc
;
@Override
public
Integer
getCode
()
{
return
null
;
}
@Override
public
String
getDesc
()
{
return
null
;
}
}
core/src/main/java/com/wecloud/im/service/ImClientBlacklistService.java
View file @
910da5db
...
...
@@ -3,7 +3,6 @@ package com.wecloud.im.service;
import
io.geekidea.springbootplus.framework.common.service.BaseService
;
import
io.geekidea.springbootplus.framework.core.pagination.Paging
;
import
com.wecloud.dispatch.extend.ActionRequest
;
import
com.wecloud.im.entity.ImClientBlacklist
;
import
com.wecloud.im.param.ImClientBlacklistPageParam
;
import
com.wecloud.im.param.ImClientBlacklistQueryVo
;
...
...
@@ -53,4 +52,12 @@ public interface ImClientBlacklistService extends BaseService<ImClientBlacklist>
*/
Paging
<
ImClientBlacklistQueryVo
>
getImClientBlacklistPageList
(
ImClientBlacklistPageParam
imClientBlacklistPageParam
);
/**
* 获取分页对象
*
* @return
* @throws Exception
*/
Paging
<
ImClientBlacklistQueryVo
>
getImClientBlacklistPageListSdk
(
ImClientBlacklistPageParam
imClientBlacklistPageParam
);
}
core/src/main/java/com/wecloud/im/service/ImConversationMembersService.java
View file @
910da5db
...
...
@@ -6,10 +6,14 @@ import io.geekidea.springbootplus.framework.core.pagination.Paging;
import
java.util.List
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImConversationMembers
;
import
com.wecloud.im.friend.param.ImFriendApplyParam
;
import
com.wecloud.im.param.ApiImConversationMembersPageParam
;
import
com.wecloud.im.param.ApiImConversationMembersQueryVo
;
import
com.wecloud.im.param.ChatSettingParam
;
import
com.wecloud.im.param.ImConvMemeClientRemarkNameParam
;
import
com.wecloud.im.param.ImConversationMembersPageParam
;
import
com.wecloud.im.param.ImConversationMembersQueryVo
;
...
...
@@ -129,14 +133,14 @@ public interface ImConversationMembersService extends BaseService<ImConversation
* @param
* @Return
*/
Boolean
setTop
(
Long
appId
,
String
clientId
,
Long
conversationId
,
Boolean
top
);
Boolean
chatSetting
(
ChatSettingParam
param
);
/**
*
设置免打扰
*
群成员添加好友
* @Author luozh
* @Date 2022年04月2
5日 06:24:43
* @param
* @Date 2022年04月2
8日 11:48:42
* @param
param
* @Return
*/
Boolean
setDoNotDisturb
(
Long
appId
,
String
clientId
,
Long
conversationId
,
Boolean
doNotDisturb
);
Boolean
addUser
(
@RequestBody
ImFriendApplyParam
param
);
}
core/src/main/java/com/wecloud/im/service/ImConversationService.java
View file @
910da5db
package
com
.
wecloud
.
im
.
service
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.service.BaseService
;
import
io.geekidea.springbootplus.framework.core.pagination.Paging
;
import
java.util.Collection
;
import
java.util.List
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.wecloud.im.entity.ImConversation
;
import
com.wecloud.im.param.ChatRoomMemberPageParam
;
import
com.wecloud.im.param.DisbandConversationParam
;
import
com.wecloud.im.param.ExitChatRoomParam
;
import
com.wecloud.im.param.GroupChatSettingParam
;
import
com.wecloud.im.param.ImConversationPageParam
;
import
com.wecloud.im.param.ImConversationQueryParam
;
import
com.wecloud.im.param.ImConversationQueryVo
;
import
com.wecloud.im.param.IntoChatRoomParam
;
import
com.wecloud.im.param.ListConversationParam
;
import
com.wecloud.im.param.MutedGroupMemberParam
;
import
com.wecloud.im.param.MutedGroupParam
;
import
com.wecloud.im.param.SetAdminsParam
;
...
...
@@ -19,14 +28,10 @@ import com.wecloud.im.param.add.ImConversationAttrUpdate;
import
com.wecloud.im.param.add.ImConversationCreate
;
import
com.wecloud.im.param.add.ImConversationDisplayUpdate
;
import
com.wecloud.im.param.add.ImConversationNameUpdate
;
import
com.wecloud.im.param.add.ServerImConversationCreate
;
import
com.wecloud.im.vo.ChatRoomMemberVo
;
import
com.wecloud.im.vo.ConversationVo
;
import
com.wecloud.im.vo.ImConversationCreateVo
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.service.BaseService
;
import
io.geekidea.springbootplus.framework.core.pagination.Paging
;
import
java.util.List
;
/**
* 会话表 服务类
...
...
@@ -54,6 +59,14 @@ public interface ImConversationService extends BaseService<ImConversation> {
*/
ImConversationCreateVo
createImConversation
(
ImConversationCreate
imConversationCreate
);
/**
* 创建会话 sdk用
*
* @param imConversationCreate
* @return
*/
ImConversation
serverCreateImConversation
(
ServerImConversationCreate
imConversationCreate
);
/**
* 将用户添加进会话
...
...
@@ -209,6 +222,13 @@ public interface ImConversationService extends BaseService<ImConversation> {
Long
getRepetitionConversationAttributes
(
Long
clientId1
,
Long
clientId2
,
String
attributes
);
/**
* 群禁言
* @param param
* @return
*/
Boolean
groupChatSetting
(
GroupChatSettingParam
param
);
/**
* 用户主动进入聊天室
* @param param
* @return
...
...
@@ -223,11 +243,27 @@ public interface ImConversationService extends BaseService<ImConversation> {
Boolean
exitChatRoom
(
ExitChatRoomParam
param
);
/**
*
分页
获取聊天室成员入参
* 获取聊天室成员入参
* @param param
* @return
*/
List
<
ChatRoomMemberVo
>
listChatRoomMember
(
ChatRoomMemberPageParam
param
);
/**
* 获取会话信息
* @param param
* @return
*/
List
<
ConversationVo
>
listConversation
(
ListConversationParam
param
);
/**
* @param senderClientId
* @param receiverClientIds
* @Author luozh
* @Date 2022年05月06日 07:18:34
* @Return
*/
List
<
ImConversation
>
getConversationBySenderAndReceivers
(
Long
senderImClientId
,
Collection
<
Long
>
receiverImClientIds
);
}
core/src/main/java/com/wecloud/im/service/ImMessageService.java
View file @
910da5db
...
...
@@ -13,9 +13,13 @@ import com.wecloud.im.entity.ImClient;
import
com.wecloud.im.entity.ImMessage
;
import
com.wecloud.im.param.ChatContentVo
;
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.ImHistoryMessagePageParam
;
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.ImMsgSendToOnlineClient
;
import
com.wecloud.im.param.add.ImMsgUpdate
;
...
...
@@ -132,4 +136,38 @@ public interface ImMessageService extends BaseService<ImMessage> {
*/
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/ImClientBlacklistServiceImpl.java
View file @
910da5db
...
...
@@ -4,12 +4,11 @@ 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
io.geekidea.springbootplus.framework.shiro.util.SecurityUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.Date
;
import
java.util.List
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
...
...
@@ -101,11 +100,26 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
@Override
public
Paging
<
ImClientBlacklistQueryVo
>
getImClientBlacklistPageList
(
ImClientBlacklistPageParam
imClientBlacklistPageParam
)
{
Page
<
ImClientBlacklistQueryVo
>
page
=
new
PageInfo
<>(
imClientBlacklistPageParam
);
ImClient
currentClient
=
contextService
.
getImClientIfNotNullOrThrow
();
IPage
<
ImClientBlacklistQueryVo
>
imClientBlacklistPageList
=
imClientBlacklistMapper
.
getImClientBlacklistPageList
(
page
,
currentClient
.
getClientId
());
return
getImClientBlacklistPageList
(
currentClient
,
imClientBlacklistPageParam
);
}
@Override
public
Paging
<
ImClientBlacklistQueryVo
>
getImClientBlacklistPageListSdk
(
ImClientBlacklistPageParam
imClientBlacklistPageParam
)
{
Long
appId
=
SecurityUtils
.
getCurrentAppId
();
ImClient
client
=
imClientService
.
getCacheImClient
(
appId
,
imClientBlacklistPageParam
.
getClientId
());
if
(
client
==
null
)
{
throw
new
BusinessException
(
"客户端不存在"
);
}
return
getImClientBlacklistPageList
(
client
,
imClientBlacklistPageParam
);
}
private
Paging
<
ImClientBlacklistQueryVo
>
getImClientBlacklistPageList
(
ImClient
client
,
ImClientBlacklistPageParam
imClientBlacklistPageParam
)
{
Page
<
ImClientBlacklistQueryVo
>
page
=
new
PageInfo
<>(
imClientBlacklistPageParam
);
IPage
<
ImClientBlacklistQueryVo
>
imClientBlacklistPageList
=
imClientBlacklistMapper
.
getImClientBlacklistPageList
(
page
,
client
.
getClientId
());
Paging
<
ImClientBlacklistQueryVo
>
imClientBlacklistQueryVoPaging
=
new
Paging
<>(
imClientBlacklistPageList
);
return
imClientBlacklistQueryVoPaging
;
}
}
core/src/main/java/com/wecloud/im/service/impl/ImConversationMembersServiceImpl.java
View file @
910da5db
...
...
@@ -6,8 +6,10 @@ 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
io.geekidea.springbootplus.framework.shiro.util.SecurityUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -25,12 +27,17 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import
com.google.common.collect.Maps
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImConversation
;
import
com.wecloud.im.entity.ImConversationMembers
;
import
com.wecloud.im.entity.ImMessageOnlineSend
;
import
com.wecloud.im.friend.param.ImFriendApplyParam
;
import
com.wecloud.im.friend.service.ImFriendService
;
import
com.wecloud.im.mapper.ImConversationMapper
;
import
com.wecloud.im.mapper.ImConversationMembersMapper
;
import
com.wecloud.im.param.ApiImConversationMembersPageParam
;
import
com.wecloud.im.param.ApiImConversationMembersQueryVo
;
import
com.wecloud.im.param.ChatSettingParam
;
import
com.wecloud.im.param.ChatSettingTypeEnum
;
import
com.wecloud.im.param.ImConvMemeClientRemarkNameParam
;
import
com.wecloud.im.param.ImConversationMembersPageParam
;
import
com.wecloud.im.param.ImConversationMembersQueryVo
;
...
...
@@ -38,11 +45,9 @@ import com.wecloud.im.param.ListConversationMembersParam;
import
com.wecloud.im.param.SetAdminsParam
;
import
com.wecloud.im.param.add.ImConversationMemAttrUpdate
;
import
com.wecloud.im.service.ContextService
;
import
com.wecloud.im.service.ImApplicationService
;
import
com.wecloud.im.service.ImClientService
;
import
com.wecloud.im.service.ImConversationMembersService
;
import
com.wecloud.im.service.ImConversationService
;
import
com.wecloud.im.service.ImMessageService
;
import
com.wecloud.im.vo.ConversationMemberVo
;
import
com.wecloud.im.ws.enums.MsgTypeEnum
;
import
com.wecloud.im.ws.enums.WsResponseCmdEnum
;
...
...
@@ -76,17 +81,14 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
private
ImClientService
imClientService
;
@Autowired
private
ImApplicationService
imApplicationService
;
@Autowired
private
ImMessageService
imMessageService
;
@Autowired
private
ImConversationMembersMapper
imConversationMembersMapper
;
@Autowired
private
ContextService
contextService
;
@Autowired
private
ImFriendService
imFriendService
;
@Override
public
ApiResult
<
List
<
ApiImConversationMembersQueryVo
>>
getRestApiImConversationMembersList
(
ApiImConversationMembersPageParam
apiImConversationMembersPageParam
,
ImApplication
imApplication
)
{
...
...
@@ -259,7 +261,13 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
}
@Override
public
Boolean
setTop
(
Long
appId
,
String
clientId
,
Long
conversationId
,
Boolean
top
)
{
public
Boolean
chatSetting
(
ChatSettingParam
param
)
{
Long
appId
=
SecurityUtils
.
getCurrentAppId
();
String
clientId
=
param
.
getClientId
();
Long
conversationId
=
param
.
getConversationId
();
ChatSettingTypeEnum
type
=
param
.
getType
();
Boolean
on
=
param
.
getOn
();
// 找到对应的会话
ImConversationMembers
conversation
=
baseMapper
.
selectOne
(
Wrappers
.<
ImConversationMembers
>
lambdaQuery
()
...
...
@@ -269,22 +277,49 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
if
(
conversation
==
null
)
{
throw
new
BusinessException
(
"会话不存在"
);
}
return
update
(
Wrappers
.<
ImConversationMembers
>
lambdaUpdate
().
eq
(
ImConversationMembers:
:
getId
,
conversation
.
getId
()).
set
(
ImConversationMembers:
:
getTop
,
top
));
boolean
result
=
false
;
if
(
ChatSettingTypeEnum
.
TOP
.
equals
(
type
))
{
result
=
update
(
Wrappers
.<
ImConversationMembers
>
lambdaUpdate
().
eq
(
ImConversationMembers:
:
getId
,
conversation
.
getId
()).
set
(
ImConversationMembers:
:
getTop
,
on
));
}
else
if
(
ChatSettingTypeEnum
.
DO_NOT_DISTURB
.
equals
(
type
))
{
result
=
update
(
Wrappers
.<
ImConversationMembers
>
lambdaUpdate
().
eq
(
ImConversationMembers:
:
getId
,
conversation
.
getId
()).
set
(
ImConversationMembers:
:
getDoNotDisturb
,
on
));
}
return
result
;
}
@Override
public
Boolean
setDoNotDisturb
(
Long
appId
,
String
clientId
,
Long
conversationId
,
Boolean
doNotDisturb
)
{
// 找到对应的会话
ImConversationMembers
conversation
=
baseMapper
.
selectOne
(
Wrappers
.<
ImConversationMembers
>
lambdaQuery
()
.
eq
(
ImConversationMembers:
:
getClientId
,
clientId
)
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
conversationId
)
.
eq
(
ImConversationMembers:
:
getFkAppid
,
appId
));
public
Boolean
addUser
(
ImFriendApplyParam
param
)
{
Long
appId
=
SecurityUtils
.
getCurrentAppId
();
Long
conversationId
=
param
.
getConversationId
();
// 判断会话是否存在
ImConversation
conversation
=
imConversationService
.
getById
(
conversationId
);
if
(
conversation
==
null
)
{
throw
new
BusinessException
(
"会话不存在"
);
}
return
update
(
Wrappers
.<
ImConversationMembers
>
lambdaUpdate
().
eq
(
ImConversationMembers:
:
getId
,
conversation
.
getId
()).
set
(
ImConversationMembers:
:
getDoNotDisturb
,
doNotDisturb
));
// 判断会话是否开启禁止群成员互加好友
boolean
forbidAddFriend
=
conversation
.
getForbidAddFriend
();
if
(
forbidAddFriend
)
{
throw
new
BusinessException
(
"群主/管理员开启了禁止群成员互加好友"
);
}
// 判断是否同一个会话成员
List
<
String
>
memberClientIds
=
new
ArrayList
<>();
memberClientIds
.
add
(
param
.
getClientId
());
memberClientIds
.
add
(
param
.
getFriendClientId
());
List
<
ImConversationMembers
>
members
=
list
(
Wrappers
.<
ImConversationMembers
>
lambdaQuery
()
.
eq
(
ImConversationMembers:
:
getFkAppid
,
appId
)
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
conversationId
)
.
in
(
ImConversationMembers:
:
getClientId
,
memberClientIds
));
if
(
members
.
size
()
!=
2
)
{
throw
new
BusinessException
(
"好友不属于同一个群"
);
}
// 校验通过,调用imFriendService apply方法
ImClient
initiator
=
imClientService
.
getCacheImClient
(
appId
,
param
.
getClientId
());
ImClient
recipient
=
imClientService
.
getCacheImClient
(
appId
,
param
.
getFriendClientId
());
return
imFriendService
.
applyFriend
(
initiator
,
recipient
,
param
.
getFriendName
(),
param
.
getRequestRemark
());
}
}
core/src/main/java/com/wecloud/im/service/impl/ImConversationServiceImpl.java
View file @
910da5db
This diff is collapsed.
Click to expand it.
core/src/main/java/com/wecloud/im/service/impl/ImMessageServiceImpl.java
View file @
910da5db
This diff is collapsed.
Click to expand it.
core/src/main/java/com/wecloud/im/thousandchat/action/ThousandChatAction.java
View file @
910da5db
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.wecloud.dispatch.annotation.ActionMapping
;
import
com.wecloud.dispatch.common.BaseRequest
;
...
...
@@ -29,23 +45,6 @@ import com.wecloud.pushserver.client.model.constant.MqConstant;
import
com.wecloud.pushserver.client.model.dto.PushDTO
;
import
com.wecloud.utils.JsonUtils
;
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请求
...
...
core/src/main/java/com/wecloud/im/thousandchat/service/ThousandChatService.java
View file @
910da5db
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.ImConversation
;
import
com.wecloud.im.entity.ImMessage
;
...
...
@@ -18,22 +35,7 @@ import com.wecloud.im.ws.enums.MsgTypeEnum;
import
com.wecloud.im.ws.enums.WsResponseCmdEnum
;
import
com.wecloud.im.ws.model.WsResponse
;
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
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
;
/**
* 消息收件箱表 服务实现类
...
...
core/src/main/java/com/wecloud/im/vo/ConversationVo.java
View file @
910da5db
...
...
@@ -76,4 +76,16 @@ public class ConversationVo implements Serializable {
@ApiModelProperty
(
"禁言开关 1-未禁言 2-禁言"
)
private
Integer
beAtCount
;
@ApiModelProperty
(
"禁止互加好友"
)
private
Boolean
forbidAddFriend
;
@ApiModelProperty
(
"禁止发红包"
)
private
Boolean
forbidSendRedPackets
;
@ApiModelProperty
(
"禁止发图片"
)
private
Boolean
forbidSendPic
;
@ApiModelProperty
(
"禁止发链接"
)
private
Boolean
forbidSendLink
;
}
core/src/main/java/com/wecloud/im/ws/cache/UserStateCacheManager.java
View file @
910da5db
package
com
.
wecloud
.
im
.
ws
.
cache
;
import
com.wecloud.utils.GetIpUtils
;
import
com.wecloud.im.ws.model.redis.ClientChannelInfo
;
import
com.wecloud.im.ws.utils.RedisUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.concurrent.TimeUnit
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
com.wecloud.im.ws.model.redis.ClientChannelInfo
;
import
com.wecloud.im.ws.utils.RedisUtils
;
import
com.wecloud.utils.GetIpUtils
;
/**
* @author hewei123@163.com
* @Description 用户与redis绑定
...
...
@@ -48,8 +50,10 @@ public class UserStateCacheManager extends UserStateListener {
@Override
public
void
offlineEvent
(
Long
clientId
,
Integer
platform
,
String
longChannelId
)
{
log
.
info
(
"ws用户离线删除redis key,uid: {}, clientId: {}"
,
longChannelId
,
clientId
);
redisUtils
.
removeForSet
(
getUserStateCacheKey
(
clientId
),
platform
+
RedisUtils
.
SPLIT
+
GetIpUtils
.
getlanIp
());
String
key
=
getUserStateCacheKey
(
clientId
);
String
value
=
platform
+
RedisUtils
.
SPLIT
+
GetIpUtils
.
getlanIp
();
log
.
info
(
"ws用户离线删除redis key: {}, value: {}, uid: {}, clientId: {}"
,
key
,
value
,
longChannelId
,
clientId
);
redisUtils
.
removeForSet
(
key
,
value
);
}
/**
...
...
core/src/main/java/com/wecloud/im/ws/enums/MsgTypeEnum.java
View file @
910da5db
...
...
@@ -7,6 +7,18 @@ package com.wecloud.im.ws.enums;
*/
public
enum
MsgTypeEnum
{
// 位置
MEDIA_TYPE_NONE
(
0
),
// 文本消息
MEDIA_TYPE_TEXT
(-
1
),
// 图像消息
MEDIA_TYPE_IMAGE
(-
2
),
// 音频消息
MEDIA_TYPE_AUDIO
(-
3
),
// 视频消息
MEDIA_TYPE_VIDEO
(-
4
),
// 文件消息
MEDIA_TYPE_FILE
(-
5
),
// xx邀请xx加入会话 -1007
INVITE_CLIENT_JOIN_CONVERSATION
(-
1007
),
...
...
@@ -54,6 +66,29 @@ public enum MsgTypeEnum {
// 群成员备注修改 -1021
CONVERSATION_MEMBER_NAME_MODIFY
(-
1021
),
// 禁止群成员互加好友
CONVERSATION_FORBID_ADD_FRIEND
(-
1022
),
// 取消禁止群成员互加好友
CONVERSATION_FORBID_ADD_FRIEND_CANCEL
(-
1023
),
// 禁止群成员发红包
CONVERSATION_FORBID_SEND_RED_PACKETS
(-
1024
),
// 取消禁止群成员发红包
CONVERSATION_FORBID_SEND_RED_PACKETS_CANCEL
(-
1025
),
// 禁止群成员发图片
CONVERSATION_FORBID_SEND_PIC_CANCEL
(-
1026
),
// 取消禁止群成员发图片
CONVERSATION_FORBID_SEND_PIC
(-
1027
),
// 禁止群成员发链接
CONVERSATION_FORBID_SEND_LINK
(-
1028
),
// 取消禁止群成员发链接
CONVERSATION_FORBID_SEND_LINK_CANCEL
(-
1029
),
;
private
final
int
uriCode
;
...
...
core/src/main/java/com/wecloud/im/ws/sender/ChannelSender.java
View file @
910da5db
package
com
.
wecloud
.
im
.
ws
.
sender
;
import
com.alibaba.fastjson.JSON
;
import
com.wecloud.im.executor.SendMsgThreadPool
;
import
com.wecloud.im.router.RouterSendService
;
import
com.wecloud.im.ws.cache.UserStateCacheManager
;
import
com.wecloud.im.ws.manager.ChannelManager
;
import
com.wecloud.im.ws.model.ClientInfo
;
import
com.wecloud.im.ws.model.WsResponse
;
import
com.wecloud.im.ws.model.redis.ClientChannelInfo
;
import
com.wecloud.im.ws.model.request.ReceiveVO
;
import
com.wecloud.utils.GetIpUtils
;
import
com.wecloud.utils.JsonUtils
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.netty.channel.socket.nio.NioSocketChannel
;
import
io.netty.handler.codec.http.websocketx.TextWebSocketFrame
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
import
org.apache.dubbo.config.annotation.DubboReference
;
import
org.apache.dubbo.rpc.RpcContext
;
import
org.apache.dubbo.rpc.cluster.router.address.Address
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
import
com.alibaba.fastjson.JSON
;
import
com.wecloud.im.executor.SendMsgThreadPool
;
import
com.wecloud.im.router.RouterSendService
;
import
com.wecloud.im.ws.cache.UserStateCacheManager
;
import
com.wecloud.im.ws.manager.ChannelManager
;
import
com.wecloud.im.ws.model.ClientInfo
;
import
com.wecloud.im.ws.model.WsResponse
;
import
com.wecloud.im.ws.model.redis.ClientChannelInfo
;
import
com.wecloud.im.ws.model.request.ReceiveVO
;
import
com.wecloud.utils.GetIpUtils
;
import
com.wecloud.utils.JsonUtils
;
/**
* @Description 下发数据
...
...
@@ -144,6 +146,7 @@ public class ChannelSender {
// 调用本地下发
log
.
info
(
"在线用户入参 {}, 具体ip结果 {}"
,
toClientId
,
JSON
.
toJSONString
(
channelInfoEntry
));
for
(
ClientChannelInfo
clientChannelInfo
:
channelInfoEntry
.
getValue
())
{
log
.
info
(
"客户端 {}, 推送消息内容 {}"
,
toClientId
,
msgJson
);
this
.
sendMsgLocal
(
toClientId
,
clientChannelInfo
.
getPlatform
(),
msgJson
);
}
continue
;
...
...
core/src/main/resources/mapper/ImConversationMapper.xml
View file @
910da5db
...
...
@@ -5,7 +5,9 @@
<!-- 通用查询结果列 -->
<sql
id=
"Base_Column_List"
>
id
, create_time, update_time, last_message, member_count, chat_type, fk_appid, creator, name, attributes, system_flag,muted
, create_time, update_time, last_message, member_count, chat_type, fk_appid, creator, name, attributes,
system_flag,muted, is_forbid_add_friend as forbid_add_friend, is_forbid_send_red_packets as forbid_send_red_packets,
is_forbid_send_pic as forbid_send_pic, is_forbid_send_link as forbid_send_link
</sql>
<select
id=
"getImConversationById"
resultType=
"com.wecloud.im.param.ImConversationQueryVo"
>
...
...
@@ -30,6 +32,10 @@
imConversation.attributes as attribute,
imConversation.system_flag,
imConversation.muted as muted,
imConversation.is_forbid_add_friend as forbid_add_friend,
imConversation.is_forbid_send_red_packets as forbid_send_red_packets,
imConversation.is_forbid_send_pic as forbid_send_pic,
imConversation.is_forbid_send_link as forbid_send_link,
im_client.client_id AS creator,
(SELECT COUNT(im_inbox.id)
FROM im_inbox
...
...
@@ -70,12 +76,16 @@
<select
id=
"getRepetitionConversationSingle"
resultType=
"com.wecloud.im.entity.ImConversation"
>
-- 查询重复的单聊会话第一条
select con.* from im_conversation con
select con.*
from im_conversation con
inner join im_conversation_members mem1
on con.id = mem1.fk_conversation_id and mem1.fk_client_id = #{clientId1}
inner join im_conversation_members mem2
on con.id = mem2.fk_conversation_id and mem2.fk_client_id = #{clientId2}
where con.chat_type = 1 and con.member_count = 2 order by con.id asc LIMIT 1
where con.chat_type = 1
and con.member_count = 2
order by con.id asc
LIMIT 1
</select>
<select
id=
"getRepetitionConversationAttributes"
resultType=
"java.lang.Long"
>
...
...
@@ -91,15 +101,65 @@
im_conversation_members2.fk_conversation_id
WHERE im_conversation_members.fk_client_id = #{clientId1}
)
AND attributes = CAST(#{attributes} AS json) LIMIT 1
AND attributes = CAST(#{attributes} AS json)
LIMIT 1
</select>
<update
id=
"addMemberCount"
>
update im_conversation set member_count = member_count + #{addCount} where fk_appid = #{appId} and id = #{conversationId}
update im_conversation
set member_count = member_count + #{addCount}
where fk_appid = #{appId}
and id = #{conversationId}
</update>
<update
id=
"updateMemberCount"
>
update im_conversation set chat_type = 3 where fk_appid = #{appId} and id = #{conversationId}
update im_conversation
set chat_type = 3
where fk_appid = #{appId}
and id = #{conversationId}
</update>
<select
id=
"getConversationBySenderAndReceivers"
resultType=
"com.wecloud.im.entity.ImConversation"
>
SELECT
c.id,
c.create_time,
c.update_time,
c.last_message,
c.member_count,
c.chat_type,
c.fk_appid,
c.creator,
c.name,
c.attributes,
c.system_flag,
c.muted,
c.is_forbid_add_friend as forbid_add_friend,
c.is_forbid_send_red_packets as forbid_send_red_packets,
c.is_forbid_send_pic as forbid_send_pic,
c.is_forbid_send_link as forbid_send_link
FROM
im_conversation c
LEFT JOIN im_conversation_members cm ON c.id = cm.fk_conversation_id
WHERE
c.chat_type = 1
AND (
(
c.creator = #{senderImClientId} AND cm.fk_client_id IN
<foreach
collection=
"receiverImClientIds"
item=
"id"
index=
"index"
open=
"("
close=
")"
separator=
","
>
#{id}
</foreach>
)
OR (
c.creator IN
<foreach
collection=
"receiverImClientIds"
item=
"id"
index=
"index"
open=
"("
close=
")"
separator=
","
>
#{id}
</foreach>
AND cm.fk_client_id = #{senderImClientId}
)
)
</select>
</mapper>
framework/src/main/java/io/geekidea/springbootplus/framework/common/api/ApiCode.java
View file @
910da5db
...
...
@@ -142,6 +142,11 @@ public enum ApiCode {
*/
IS_BE_DISBAND
(
6016
,
"api.response.code.IS_BE_DISBAND"
),
/**
* 群已禁止发链接
*/
IS_BE_FORBID_SEND_LINK
(
6017
,
"api.response.code.IS_BE_FORBID_SEND_LINK"
),
;
private
final
int
code
;
...
...
im-sdk/src/main/java/com/wecloud/im/sdk/ResourcePathConstants.java
View file @
910da5db
...
...
@@ -37,14 +37,54 @@ public class ResourcePathConstants {
public
static
final
String
GET_FRIENDS
=
"/api/friend/sdk/getFriends"
;
/**
*
设置会话置顶
*
群设置
*/
public
static
final
String
SET_CONVERSATION_TOP
=
"/api/imConversationMembers/sdk/setTop
"
;
public
static
final
String
CHAT_SETTING
=
"/api/imConversationMembers/chatSetting
"
;
/**
*
设置会话免打扰
*
好友请求
*/
public
static
final
String
SET_CONVERSATION_DO_NOT_DISTURB
=
"/api/imConversationMembers/sdk/setDoNotDisturb"
;
public
static
final
String
FRIEND_REQUEST
=
"/api/friend/sdk/apply"
;
/**
* 好友请求
*/
public
static
final
String
PAGE_BLACKLIST_REQUEST
=
"/api/ClientBlacklist/sdk/pageBlacklist"
;
/**
* 群成员互加好友
*/
public
static
final
String
GROUP_MEMBERS_FRIEND_REQUEST
=
"/api/imConversationMembers/addUser"
;
/**
* 获取聊天室成员
*/
public
static
final
String
LIST_CHAT_ROOM_MEMBER_REQUEST
=
"/api/conversation/listChatRoomMember"
;
/**
* 批量获取会话信息
*/
public
static
final
String
LIST_CONVERSATION_REQUEST
=
"/api/conversation/listConversation"
;
/**
* 发布群消息
*/
public
static
final
String
PUBLISH_GROUP_CHAT_MESSAGE_REQUEST
=
"/api/imMessage/group/publish"
;
/**
* 发布群状态消息
*/
public
static
final
String
PUBLISH_GROUP_CHAT_STATUS_MESSAGE_REQUEST
=
"/api/imMessage/group/status/publish"
;
/**
* 发布群消息
*/
public
static
final
String
PUBLISH_PRIVATE_CHAT_MESSAGE_REQUEST
=
"/api/imMessage/private/publish"
;
/**
* 发布群状态消息
*/
public
static
final
String
PUBLISH_PRIVATE_CHAT_STATUS_MESSAGE_REQUEST
=
"/api/imMessage/private/status/publish"
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/WecloudIm.java
View file @
910da5db
...
...
@@ -2,8 +2,16 @@ package com.wecloud.im.sdk;
import
java.util.List
;
import
com.wecloud.im.sdk.model.Blacklist
;
import
com.wecloud.im.sdk.model.ChatRoomMember
;
import
com.wecloud.im.sdk.model.Conversation
;
import
com.wecloud.im.sdk.model.Friend
;
import
com.wecloud.im.sdk.model.GroupChatMessage
;
import
com.wecloud.im.sdk.model.GroupChatStatusMessage
;
import
com.wecloud.im.sdk.model.ImClient
;
import
com.wecloud.im.sdk.model.PageResult
;
import
com.wecloud.im.sdk.model.PrivateChatMessage
;
import
com.wecloud.im.sdk.model.PrivateChatStatusMessage
;
import
com.wecloud.im.sdk.model.Token
;
import
com.wecloud.im.sdk.model.UnsureFriend
;
...
...
@@ -69,6 +77,16 @@ public interface WecloudIm {
List
<
Friend
>
getFriends
(
String
userId
);
/**
* 获取黑名单列表
* @Author luozh
* @Date 2022年05月07日 05:23:40
* @param userId
* @Return
* @return
*/
PageResult
<
Blacklist
>
pageBlacklist
(
Integer
pageIndex
,
Integer
pageSize
,
String
userId
);
/**
* 设置会话置顶
* @Author luozh
* @Date 2022年04月26日 03:33:44
...
...
@@ -89,4 +107,79 @@ public interface WecloudIm {
* @Return
*/
Boolean
setConversationDoNotDisturb
(
String
userId
,
Long
conversationId
,
Boolean
doNotDisturb
);
/**
* 好友申请
* @Author luozh
* @Date 2022年04月28日 02:05:11
* @param userId 用户id
* @param friendId 好友id
* @param friendName 备注好友名称
* @param requestRemark 请求备注
* @Return
*/
Boolean
friendRequest
(
String
userId
,
String
friendId
,
String
friendName
,
String
requestRemark
);
/**
* 群成员好友申请
* @Author luozh
* @Date 2022年04月28日 02:06:01
* @param
* @Return
*/
Boolean
groupMembersFriendRequest
(
Long
conversationId
,
String
userId
,
String
friendId
,
String
friendName
,
String
requestRemark
);
/**
* 全量获取聊天室成员
* @param chatRoomId 聊天室id
* @return
*/
List
<
ChatRoomMember
>
listChatRoomMember
(
Long
chatRoomId
);
/**
* 批量获取会话信息
* @param chatType 会话属性,1:单聊,2:普通群,3:万人群,4:聊天室
* @param conversationIds
* @return
*/
List
<
Conversation
>
listConversation
(
Integer
chatType
,
List
<
Long
>
conversationIds
);
/**
* 发布群聊消息
* @Author luozh
* @Date 2022年05月05日 09:38:34
* @param groupChatMessage 发布群聊消息参数
* @Return
*/
Boolean
publishGroupChatMessage
(
GroupChatMessage
groupChatMessage
);
/**
* 发布群聊状态消息
* @Author luozh
* @Date 2022年05月05日 09:38:34
* @param groupChatStatusMessage 发布群聊消息参数
* @Return
*/
Boolean
publishGroupChatStatusMessage
(
GroupChatStatusMessage
groupChatStatusMessage
);
/**
* 发布单聊消息
* @Author luozh
* @Date 2022年05月05日 09:38:34
* @param privateChatMessage 发布单聊消息参数
* @Return
*/
Boolean
publishPrivateMessage
(
PrivateChatMessage
privateChatMessage
);
/**
* 发布群聊状态消息
* @Author luozh
* @Date 2022年05月05日 09:38:34
* @param privateChatStatusMessage 发布群聊消息参数
* @Return
*/
Boolean
publishPrivateStatusMessage
(
PrivateChatStatusMessage
privateChatStatusMessage
);
}
im-sdk/src/main/java/com/wecloud/im/sdk/WecloudImClient.java
View file @
910da5db
...
...
@@ -3,14 +3,35 @@ package com.wecloud.im.sdk;
import
java.net.URL
;
import
java.util.List
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.lang.Assert
;
import
com.wecloud.im.sdk.internal.WecloudImClientOperation
;
import
com.wecloud.im.sdk.internal.WecloudImConversationOperation
;
import
com.wecloud.im.sdk.internal.WecloudImMessageOperation
;
import
com.wecloud.im.sdk.model.Blacklist
;
import
com.wecloud.im.sdk.model.ChatRoomMember
;
import
com.wecloud.im.sdk.model.ClientLoginRequest
;
import
com.wecloud.im.sdk.model.Conversation
;
import
com.wecloud.im.sdk.model.Friend
;
import
com.wecloud.im.sdk.model.FriendRequestRequest
;
import
com.wecloud.im.sdk.model.GetFriendsRequest
;
import
com.wecloud.im.sdk.model.GetUnsureFriendsRequest
;
import
com.wecloud.im.sdk.model.GroupChatMessage
;
import
com.wecloud.im.sdk.model.GroupChatStatusMessage
;
import
com.wecloud.im.sdk.model.GroupMembersFriendRequestRequest
;
import
com.wecloud.im.sdk.model.ImClient
;
import
com.wecloud.im.sdk.model.ListChatRoomMemberRequest
;
import
com.wecloud.im.sdk.model.ListConversationRequest
;
import
com.wecloud.im.sdk.model.ModifyUserRequest
;
import
com.wecloud.im.sdk.model.PageBlacklistRequest
;
import
com.wecloud.im.sdk.model.PageResult
;
import
com.wecloud.im.sdk.model.PrivateChatMessage
;
import
com.wecloud.im.sdk.model.PrivateChatStatusMessage
;
import
com.wecloud.im.sdk.model.PublishGroupChatMessageRequest
;
import
com.wecloud.im.sdk.model.PublishGroupChatStatusMessageRequest
;
import
com.wecloud.im.sdk.model.PublishPrivateChatMessageRequest
;
import
com.wecloud.im.sdk.model.PublishPrivateChatStatusMessageRequest
;
import
com.wecloud.im.sdk.model.RegisterClientRequest
;
import
com.wecloud.im.sdk.model.SetConversationDoNotDisturbRequest
;
import
com.wecloud.im.sdk.model.SetConversationTopRequest
;
...
...
@@ -45,6 +66,8 @@ public class WecloudImClient implements WecloudIm {
private
WecloudImConversationOperation
imConversationOperation
;
private
WecloudImMessageOperation
wecloudImMessageOperation
;
public
WecloudImClient
(
URL
apiDomain
,
String
appKey
,
String
appSecret
)
{
this
.
apiDomain
=
apiDomain
;
this
.
appKey
=
appKey
;
...
...
@@ -92,6 +115,44 @@ public class WecloudImClient implements WecloudIm {
}
@Override
public
PageResult
<
Blacklist
>
pageBlacklist
(
Integer
pageIndex
,
Integer
pageSize
,
String
userId
)
{
PageBlacklistRequest
pageBlacklistRequest
=
PageBlacklistRequest
.
builder
().
pageSize
(
pageSize
).
pageIndex
(
pageIndex
).
userId
(
userId
).
build
();
return
imClientOperation
.
pageBlacklist
(
pageBlacklistRequest
);
}
@Override
public
Boolean
friendRequest
(
String
userId
,
String
friendId
,
String
friendName
,
String
requestRemark
)
{
FriendRequestRequest
friendRequestRequest
=
FriendRequestRequest
.
builder
().
userId
(
userId
).
friendId
(
friendId
).
friendName
(
friendName
).
requestRemark
(
requestRemark
).
build
();
return
imClientOperation
.
friendRequest
(
friendRequestRequest
);
}
@Override
public
Boolean
groupMembersFriendRequest
(
Long
conversationId
,
String
userId
,
String
friendId
,
String
friendName
,
String
requestRemark
)
{
GroupMembersFriendRequestRequest
groupMembersFriendRequestRequest
=
GroupMembersFriendRequestRequest
.
builder
().
conversationId
(
conversationId
)
.
userId
(
userId
).
friendId
(
friendId
)
.
friendName
(
friendName
)
.
requestRemark
(
requestRemark
)
.
build
();
return
imConversationOperation
.
groupMembersFriendRequest
(
groupMembersFriendRequestRequest
);
}
@Override
public
List
<
ChatRoomMember
>
listChatRoomMember
(
Long
chatRoomId
)
{
ListChatRoomMemberRequest
request
=
ListChatRoomMemberRequest
.
builder
().
chatRoomId
(
chatRoomId
).
build
();
return
imClientOperation
.
listChatRoomMember
(
request
);
}
@Override
public
List
<
Conversation
>
listConversation
(
Integer
chatType
,
List
<
Long
>
conversationIds
)
{
ListConversationRequest
request
=
ListConversationRequest
.
builder
().
chatType
(
chatType
)
.
conversationIds
(
conversationIds
).
build
();
return
imClientOperation
.
listConversation
(
request
);
}
@Override
public
Boolean
setConversationTop
(
String
userId
,
Long
conversationId
,
Boolean
top
)
{
SetConversationTopRequest
setConversationTopRequest
=
SetConversationTopRequest
.
builder
().
userId
(
userId
).
conversationId
(
conversationId
).
top
(
top
).
build
();
...
...
@@ -105,9 +166,42 @@ public class WecloudImClient implements WecloudIm {
return
imConversationOperation
.
setConversationDoNotDisturb
(
setConversationDoNotDisturbRequest
);
}
@Override
public
Boolean
publishGroupChatMessage
(
GroupChatMessage
groupChatMessage
)
{
Assert
.
notNull
(
groupChatMessage
);
PublishGroupChatMessageRequest
request
=
BeanUtil
.
toBean
(
groupChatMessage
,
PublishGroupChatMessageRequest
.
class
);
return
wecloudImMessageOperation
.
publishGroupChatMessage
(
request
);
}
@Override
public
Boolean
publishGroupChatStatusMessage
(
GroupChatStatusMessage
groupChatstatusMessage
)
{
Assert
.
notNull
(
groupChatstatusMessage
);
PublishGroupChatStatusMessageRequest
request
=
BeanUtil
.
toBean
(
groupChatstatusMessage
,
PublishGroupChatStatusMessageRequest
.
class
);
return
wecloudImMessageOperation
.
publishGroupChatStatusMessage
(
request
);
}
@Override
public
Boolean
publishPrivateMessage
(
PrivateChatMessage
privateChatMessage
)
{
Assert
.
notNull
(
privateChatMessage
);
PublishPrivateChatMessageRequest
request
=
BeanUtil
.
toBean
(
privateChatMessage
,
PublishPrivateChatMessageRequest
.
class
);
return
wecloudImMessageOperation
.
publishPrivateMessage
(
request
);
}
@Override
public
Boolean
publishPrivateStatusMessage
(
PrivateChatStatusMessage
privateChatStatusMessage
)
{
Assert
.
notNull
(
privateChatStatusMessage
);
PublishPrivateChatStatusMessageRequest
request
=
BeanUtil
.
toBean
(
privateChatStatusMessage
,
PublishPrivateChatStatusMessageRequest
.
class
);
return
wecloudImMessageOperation
.
publishPrivateStatusMessage
(
request
);
}
private
void
initOperations
()
{
this
.
imClientOperation
=
new
WecloudImClientOperation
(
apiDomain
,
appKey
,
appSecret
);
this
.
imConversationOperation
=
new
WecloudImConversationOperation
(
apiDomain
,
appKey
,
appSecret
);
this
.
wecloudImMessageOperation
=
new
WecloudImMessageOperation
(
apiDomain
,
appKey
,
appSecret
);
}
...
...
im-sdk/src/main/java/com/wecloud/im/sdk/enums/MessageTypeEnum.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
enums
;
import
lombok.Getter
;
/**
*
* @Author luozh
* @Date 2022年05月07日 13:44
* @Version 1.0
*/
public
enum
MessageTypeEnum
{
// 位置
POSITION
(
0
),
// 文本消息
TEXT
(-
1
),
// 图像消息
IMAGE
(-
2
),
// 音频消息
AUDIO
(-
3
),
// 视频消息
VIDEO
(-
4
),
// 文件消息
FILE
(-
5
),
;
@Getter
private
final
int
code
;
MessageTypeEnum
(
int
code
)
{
this
.
code
=
code
;
}
/**
* 根据code获取
*
* @param code
* @return
*/
public
static
MessageTypeEnum
getByCode
(
int
code
)
{
for
(
MessageTypeEnum
messageTypeEnum
:
values
())
{
if
(
messageTypeEnum
.
getCode
()
==
code
)
{
return
messageTypeEnum
;
}
}
return
null
;
}
}
im-sdk/src/main/java/com/wecloud/im/sdk/internal/WecloudImClientOperation.java
View file @
910da5db
...
...
@@ -10,20 +10,32 @@ import com.alibaba.fastjson.JSON;
import
com.alibaba.fastjson.TypeReference
;
import
com.wecloud.im.sdk.common.HttpMethod
;
import
com.wecloud.im.sdk.common.RequestMessage
;
import
com.wecloud.im.sdk.model.Blacklist
;
import
com.wecloud.im.sdk.model.ChatRoomMember
;
import
com.wecloud.im.sdk.model.ClientLoginRequest
;
import
com.wecloud.im.sdk.model.Conversation
;
import
com.wecloud.im.sdk.model.Friend
;
import
com.wecloud.im.sdk.model.FriendRequestRequest
;
import
com.wecloud.im.sdk.model.GetFriendsRequest
;
import
com.wecloud.im.sdk.model.GetUnsureFriendsRequest
;
import
com.wecloud.im.sdk.model.ImClient
;
import
com.wecloud.im.sdk.model.ListChatRoomMemberRequest
;
import
com.wecloud.im.sdk.model.ListConversationRequest
;
import
com.wecloud.im.sdk.model.ModifyUserRequest
;
import
com.wecloud.im.sdk.model.PageBlacklistRequest
;
import
com.wecloud.im.sdk.model.PageResult
;
import
com.wecloud.im.sdk.model.RegisterClientRequest
;
import
com.wecloud.im.sdk.model.Token
;
import
com.wecloud.im.sdk.model.UnsureFriend
;
import
static
com
.
wecloud
.
im
.
sdk
.
ResourcePathConstants
.
FRIEND_REQUEST
;
import
static
com
.
wecloud
.
im
.
sdk
.
ResourcePathConstants
.
GET_FRIENDS
;
import
static
com
.
wecloud
.
im
.
sdk
.
ResourcePathConstants
.
GET_TOKEN_URL
;
import
static
com
.
wecloud
.
im
.
sdk
.
ResourcePathConstants
.
GET_UNSURE_FRIENDS
;
import
static
com
.
wecloud
.
im
.
sdk
.
ResourcePathConstants
.
LIST_CHAT_ROOM_MEMBER_REQUEST
;
import
static
com
.
wecloud
.
im
.
sdk
.
ResourcePathConstants
.
LIST_CONVERSATION_REQUEST
;
import
static
com
.
wecloud
.
im
.
sdk
.
ResourcePathConstants
.
MODIFY_USER_URL
;
import
static
com
.
wecloud
.
im
.
sdk
.
ResourcePathConstants
.
PAGE_BLACKLIST_REQUEST
;
import
static
com
.
wecloud
.
im
.
sdk
.
ResourcePathConstants
.
REGISTER_CLIENT_URL
;
import
static
com
.
wecloud
.
im
.
sdk
.
utils
.
CodingUtils
.
assertParameterNotBlank
;
import
static
com
.
wecloud
.
im
.
sdk
.
utils
.
CodingUtils
.
assertParameterNotNull
;
...
...
@@ -151,6 +163,13 @@ public class WecloudImClientOperation extends WecloudImOperation {
return
unsureFriends
;
}
/**
* 获取好友列表(全量)
* @Author luozh
* @Date 2022年04月28日 03:01:21
* @param getFriendsRequest
* @Return
*/
public
List
<
Friend
>
getFriends
(
GetFriendsRequest
getFriendsRequest
)
{
String
userId
=
getFriendsRequest
.
getUserId
();
// 参数校验
...
...
@@ -169,4 +188,96 @@ public class WecloudImClientOperation extends WecloudImOperation {
List
<
Friend
>
unsureFriends
=
JSON
.
parseObject
(
JSON
.
toJSONString
(
result
),
typeReference
);
return
unsureFriends
;
}
/**
* 好友请求
* @Author luozh
* @Date 2022年04月28日 03:01:47
* @param friendRequestRequest
*/
public
Boolean
friendRequest
(
FriendRequestRequest
friendRequestRequest
)
{
String
userId
=
friendRequestRequest
.
getUserId
();
String
friendId
=
friendRequestRequest
.
getFriendId
();
// 参数校验
assertParameterNotNull
(
userId
,
"userId"
);
assertParameterNotNull
(
friendId
,
"friendId"
);
// 校验通过 构建参数
Map
<
String
,
String
>
param
=
new
HashMap
<>();
param
.
put
(
"clientId"
,
userId
+
""
);
param
.
put
(
"friendClientId"
,
friendId
+
""
);
param
.
put
(
"friendName"
,
Optional
.
ofNullable
(
friendRequestRequest
.
getFriendName
()).
orElse
(
""
));
param
.
put
(
"requestRemark"
,
Optional
.
ofNullable
(
friendRequestRequest
.
getRequestRemark
()).
orElse
(
""
));
// 发送请求
RequestMessage
request
=
new
WecloudRequestMessageBuilder
().
setEndpoint
(
FRIEND_REQUEST
)
.
setMethod
(
HttpMethod
.
POST
).
setParameters
(
param
)
.
setOriginalRequest
(
friendRequestRequest
).
build
();
Object
result
=
doOperation
(
request
);
Boolean
flag
=
JSON
.
parseObject
(
JSON
.
toJSONString
(
result
),
Boolean
.
class
);
return
flag
;
}
public
List
<
ChatRoomMember
>
listChatRoomMember
(
ListChatRoomMemberRequest
listChatRoomMemberRequest
)
{
// 参数校验
assertParameterNotNull
(
listChatRoomMemberRequest
.
getChatRoomId
(),
"chatRoomId"
);
// 校验通过 构建参数
Map
<
String
,
String
>
param
=
new
HashMap
<>();
param
.
put
(
"chatRoomId"
,
listChatRoomMemberRequest
.
getChatRoomId
()
+
""
);
// 发送请求
RequestMessage
request
=
new
WecloudRequestMessageBuilder
().
setEndpoint
(
LIST_CHAT_ROOM_MEMBER_REQUEST
)
.
setMethod
(
HttpMethod
.
POST
).
setParameters
(
param
)
.
setOriginalRequest
(
listChatRoomMemberRequest
).
build
();
Object
result
=
doOperation
(
request
);
TypeReference
<
List
<
ChatRoomMember
>>
typeReference
=
new
TypeReference
<
List
<
ChatRoomMember
>>()
{
};
List
<
ChatRoomMember
>
chatRoomMembers
=
JSON
.
parseObject
(
JSON
.
toJSONString
(
result
),
typeReference
);
return
chatRoomMembers
;
}
public
List
<
Conversation
>
listConversation
(
ListConversationRequest
listConversationRequest
)
{
// 参数校验
assertParameterNotNull
(
listConversationRequest
.
getConversationIds
(),
"conversationIds"
);
// 校验通过 构建参数
Map
<
String
,
String
>
param
=
new
HashMap
<>();
param
.
put
(
"chatType"
,
listConversationRequest
.
getChatType
()
+
""
);
param
.
put
(
"conversationIds"
,
JSON
.
toJSONString
(
listConversationRequest
.
getConversationIds
()));
// 发送请求
RequestMessage
request
=
new
WecloudRequestMessageBuilder
().
setEndpoint
(
LIST_CONVERSATION_REQUEST
)
.
setMethod
(
HttpMethod
.
POST
).
setParameters
(
param
)
.
setOriginalRequest
(
listConversationRequest
).
build
();
Object
result
=
doOperation
(
request
);
TypeReference
<
List
<
Conversation
>>
typeReference
=
new
TypeReference
<
List
<
Conversation
>>()
{
};
List
<
Conversation
>
conversations
=
JSON
.
parseObject
(
JSON
.
toJSONString
(
result
),
typeReference
);
return
conversations
;
}
public
PageResult
<
Blacklist
>
pageBlacklist
(
PageBlacklistRequest
pageBlacklistRequest
)
{
// 参数校验
assertParameterNotNull
(
pageBlacklistRequest
.
getUserId
(),
"userId"
);
// 校验通过 构建参数
if
(
pageBlacklistRequest
.
getPageIndex
()
==
null
)
{
pageBlacklistRequest
.
setPageIndex
(
1
);
}
if
(
pageBlacklistRequest
.
getPageSize
()
==
null
)
{
pageBlacklistRequest
.
setPageSize
(
10
);
}
Map
<
String
,
String
>
param
=
new
HashMap
<>();
param
.
put
(
"clientId"
,
pageBlacklistRequest
.
getUserId
());
param
.
put
(
"pageIndex"
,
pageBlacklistRequest
.
getPageIndex
()
+
""
);
param
.
put
(
"pageSize"
,
pageBlacklistRequest
.
getPageSize
()
+
""
);
// 发送请求
RequestMessage
request
=
new
WecloudRequestMessageBuilder
().
setEndpoint
(
PAGE_BLACKLIST_REQUEST
)
.
setMethod
(
HttpMethod
.
POST
).
setParameters
(
param
)
.
setOriginalRequest
(
pageBlacklistRequest
).
build
();
Object
result
=
doOperation
(
request
);
TypeReference
<
PageResult
<
Blacklist
>>
typeReference
=
new
TypeReference
<
PageResult
<
Blacklist
>>()
{
};
PageResult
<
Blacklist
>
blacklistPage
=
JSON
.
parseObject
(
JSON
.
toJSONString
(
result
),
typeReference
);
return
blacklistPage
;
}
}
im-sdk/src/main/java/com/wecloud/im/sdk/internal/WecloudImConversationOperation.java
View file @
910da5db
...
...
@@ -3,13 +3,17 @@ package com.wecloud.im.sdk.internal;
import
java.net.URL
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Optional
;
import
com.alibaba.fastjson.JSON
;
import
com.wecloud.im.sdk.common.HttpMethod
;
import
com.wecloud.im.sdk.common.RequestMessage
;
import
com.wecloud.im.sdk.model.GroupMembersFriendRequestRequest
;
import
com.wecloud.im.sdk.model.SetConversationDoNotDisturbRequest
;
import
com.wecloud.im.sdk.model.SetConversationTopRequest
;
import
static
com
.
wecloud
.
im
.
sdk
.
ResourcePathConstants
.
REGISTER_CLIENT_URL
;
import
static
com
.
wecloud
.
im
.
sdk
.
ResourcePathConstants
.
CHAT_SETTING
;
import
static
com
.
wecloud
.
im
.
sdk
.
ResourcePathConstants
.
GROUP_MEMBERS_FRIEND_REQUEST
;
import
static
com
.
wecloud
.
im
.
sdk
.
utils
.
CodingUtils
.
assertParameterNotNull
;
/**
...
...
@@ -43,9 +47,10 @@ public class WecloudImConversationOperation extends WecloudImOperation {
Map
<
String
,
String
>
param
=
new
HashMap
<>();
param
.
put
(
"clientId"
,
userId
);
param
.
put
(
"conversationId"
,
conversationId
.
toString
());
param
.
put
(
"top"
,
top
.
toString
());
param
.
put
(
"type"
,
"TOP"
);
param
.
put
(
"on"
,
top
.
toString
());
// 发送请求
RequestMessage
request
=
new
WecloudRequestMessageBuilder
().
setEndpoint
(
REGISTER_CLIENT_URL
)
RequestMessage
request
=
new
WecloudRequestMessageBuilder
().
setEndpoint
(
CHAT_SETTING
)
.
setMethod
(
HttpMethod
.
POST
).
setParameters
(
param
)
.
setOriginalRequest
(
setConversationTopRequest
).
build
();
...
...
@@ -72,13 +77,38 @@ public class WecloudImConversationOperation extends WecloudImOperation {
Map
<
String
,
String
>
param
=
new
HashMap
<>();
param
.
put
(
"clientId"
,
userId
);
param
.
put
(
"conversationId"
,
conversationId
.
toString
());
param
.
put
(
"doNotDisturb"
,
doNotDisturb
.
toString
());
param
.
put
(
"type"
,
"DO_NOT_DISTURB"
);
param
.
put
(
"on"
,
doNotDisturb
.
toString
());
// 发送请求
RequestMessage
request
=
new
WecloudRequestMessageBuilder
().
setEndpoint
(
REGISTER_CLIENT_URL
)
RequestMessage
request
=
new
WecloudRequestMessageBuilder
().
setEndpoint
(
CHAT_SETTING
)
.
setMethod
(
HttpMethod
.
POST
).
setParameters
(
param
)
.
setOriginalRequest
(
setConversationDoNotDisturbRequest
).
build
();
doOperation
(
request
);
return
true
;
}
public
Boolean
groupMembersFriendRequest
(
GroupMembersFriendRequestRequest
groupMembersFriendRequestRequest
)
{
Long
conversationId
=
groupMembersFriendRequestRequest
.
getConversationId
();
String
userId
=
groupMembersFriendRequestRequest
.
getUserId
();
String
friendId
=
groupMembersFriendRequestRequest
.
getFriendId
();
// 参数校验
assertParameterNotNull
(
conversationId
,
"conversationId"
);
assertParameterNotNull
(
userId
,
"userId"
);
assertParameterNotNull
(
friendId
,
"friendId"
);
// 校验通过 构建参数
Map
<
String
,
String
>
param
=
new
HashMap
<>();
param
.
put
(
"conversationId"
,
conversationId
+
""
);
param
.
put
(
"clientId"
,
userId
+
""
);
param
.
put
(
"friendClientId"
,
friendId
+
""
);
param
.
put
(
"friendName"
,
Optional
.
ofNullable
(
groupMembersFriendRequestRequest
.
getFriendName
()).
orElse
(
""
));
param
.
put
(
"requestRemark"
,
Optional
.
ofNullable
(
groupMembersFriendRequestRequest
.
getRequestRemark
()).
orElse
(
""
));
// 发送请求
RequestMessage
request
=
new
WecloudRequestMessageBuilder
().
setEndpoint
(
GROUP_MEMBERS_FRIEND_REQUEST
)
.
setMethod
(
HttpMethod
.
POST
).
setParameters
(
param
)
.
setOriginalRequest
(
groupMembersFriendRequestRequest
).
build
();
Object
result
=
doOperation
(
request
);
Boolean
flag
=
JSON
.
parseObject
(
JSON
.
toJSONString
(
result
),
Boolean
.
class
);
return
flag
;
}
}
im-sdk/src/main/java/com/wecloud/im/sdk/internal/WecloudImMessageOperation.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
internal
;
import
java.net.URL
;
import
java.util.Map
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.TypeReference
;
import
com.wecloud.im.sdk.common.HttpMethod
;
import
com.wecloud.im.sdk.common.RequestMessage
;
import
com.wecloud.im.sdk.model.PublishGroupChatMessageRequest
;
import
com.wecloud.im.sdk.model.PublishGroupChatStatusMessageRequest
;
import
com.wecloud.im.sdk.model.PublishPrivateChatMessageRequest
;
import
com.wecloud.im.sdk.model.PublishPrivateChatStatusMessageRequest
;
import
static
com
.
wecloud
.
im
.
sdk
.
ResourcePathConstants
.
PUBLISH_GROUP_CHAT_MESSAGE_REQUEST
;
import
static
com
.
wecloud
.
im
.
sdk
.
ResourcePathConstants
.
PUBLISH_GROUP_CHAT_STATUS_MESSAGE_REQUEST
;
import
static
com
.
wecloud
.
im
.
sdk
.
ResourcePathConstants
.
PUBLISH_PRIVATE_CHAT_MESSAGE_REQUEST
;
import
static
com
.
wecloud
.
im
.
sdk
.
ResourcePathConstants
.
PUBLISH_PRIVATE_CHAT_STATUS_MESSAGE_REQUEST
;
import
static
com
.
wecloud
.
im
.
sdk
.
utils
.
CodingUtils
.
assertParameterNotNull
;
/**
*
* @Author luozh
* @Date 2022年05月05日 10:11
* @Version 1.0
*/
public
class
WecloudImMessageOperation
extends
WecloudImOperation
{
public
WecloudImMessageOperation
(
URL
apiDomain
,
String
appKey
,
String
appSecret
)
{
super
(
apiDomain
,
appKey
,
appSecret
);
}
/**
* 发布群消息
* @Author luozh
* @Date 2022年05月05日 10:49:47
* @param publishGroupChatMessageRequest
* @Return
*/
public
Boolean
publishGroupChatMessage
(
PublishGroupChatMessageRequest
publishGroupChatMessageRequest
)
{
String
fromUserId
=
publishGroupChatMessageRequest
.
getFromUserId
();
String
toGroupIds
=
publishGroupChatMessageRequest
.
getToGroupIds
();
String
messageType
=
publishGroupChatMessageRequest
.
getMessageType
();
String
content
=
publishGroupChatMessageRequest
.
getContent
();
// 必填参数校验
assertParameterNotNull
(
fromUserId
,
"fromUserId"
);
assertParameterNotNull
(
toGroupIds
,
"toGroupIds"
);
assertParameterNotNull
(
messageType
,
"messageType"
);
assertParameterNotNull
(
content
,
"content"
);
// 校验通过 构建参数
TypeReference
<
Map
<
String
,
String
>>
typeReference
=
new
TypeReference
<
Map
<
String
,
String
>>()
{
};
Map
<
String
,
String
>
param
=
JSONObject
.
parseObject
(
JSON
.
toJSONString
(
publishGroupChatMessageRequest
),
typeReference
);
// 发送请求
RequestMessage
request
=
new
WecloudRequestMessageBuilder
().
setEndpoint
(
PUBLISH_GROUP_CHAT_MESSAGE_REQUEST
)
.
setMethod
(
HttpMethod
.
POST
).
setParameters
(
param
)
.
setOriginalRequest
(
publishGroupChatMessageRequest
).
build
();
doOperation
(
request
);
return
true
;
}
/**
* 状态消息发送
* @Author luozh
* @Date 2022年05月05日 11:07:05
* @param publishGroupChatStatusMessageRequest
* @Return
*/
public
Boolean
publishGroupChatStatusMessage
(
PublishGroupChatStatusMessageRequest
publishGroupChatStatusMessageRequest
)
{
String
fromUserId
=
publishGroupChatStatusMessageRequest
.
getFromUserId
();
String
toGroupIds
=
publishGroupChatStatusMessageRequest
.
getToGroupIds
();
String
messageType
=
publishGroupChatStatusMessageRequest
.
getMessageType
();
String
content
=
publishGroupChatStatusMessageRequest
.
getContent
();
// 必填参数校验
assertParameterNotNull
(
fromUserId
,
"fromUserId"
);
assertParameterNotNull
(
toGroupIds
,
"toGroupIds"
);
assertParameterNotNull
(
messageType
,
"messageType"
);
assertParameterNotNull
(
content
,
"content"
);
// 校验通过 构建参数
TypeReference
<
Map
<
String
,
String
>>
typeReference
=
new
TypeReference
<
Map
<
String
,
String
>>()
{
};
Map
<
String
,
String
>
param
=
JSONObject
.
parseObject
(
JSON
.
toJSONString
(
publishGroupChatStatusMessageRequest
),
typeReference
);
// 发送请求
RequestMessage
request
=
new
WecloudRequestMessageBuilder
().
setEndpoint
(
PUBLISH_GROUP_CHAT_STATUS_MESSAGE_REQUEST
)
.
setMethod
(
HttpMethod
.
POST
).
setParameters
(
param
)
.
setOriginalRequest
(
publishGroupChatStatusMessageRequest
).
build
();
doOperation
(
request
);
return
true
;
}
public
Boolean
publishPrivateMessage
(
PublishPrivateChatMessageRequest
publishPrivateChatMessageRequest
)
{
String
fromUserId
=
publishPrivateChatMessageRequest
.
getFromUserId
();
String
toUserIds
=
publishPrivateChatMessageRequest
.
getToUserIds
();
String
messageType
=
publishPrivateChatMessageRequest
.
getMessageType
();
String
content
=
publishPrivateChatMessageRequest
.
getContent
();
// 必填参数校验
assertParameterNotNull
(
fromUserId
,
"fromUserId"
);
assertParameterNotNull
(
toUserIds
,
"toUserIds"
);
assertParameterNotNull
(
messageType
,
"messageType"
);
assertParameterNotNull
(
content
,
"content"
);
// 校验通过 构建参数
TypeReference
<
Map
<
String
,
String
>>
typeReference
=
new
TypeReference
<
Map
<
String
,
String
>>()
{
};
Map
<
String
,
String
>
param
=
JSONObject
.
parseObject
(
JSON
.
toJSONString
(
publishPrivateChatMessageRequest
),
typeReference
);
// 发送请求
RequestMessage
request
=
new
WecloudRequestMessageBuilder
().
setEndpoint
(
PUBLISH_PRIVATE_CHAT_MESSAGE_REQUEST
)
.
setMethod
(
HttpMethod
.
POST
).
setParameters
(
param
)
.
setOriginalRequest
(
publishPrivateChatMessageRequest
).
build
();
doOperation
(
request
);
return
true
;
}
public
Boolean
publishPrivateStatusMessage
(
PublishPrivateChatStatusMessageRequest
publishPrivateChatStatusMessageRequest
)
{
String
fromUserId
=
publishPrivateChatStatusMessageRequest
.
getFromUserId
();
String
toUserIds
=
publishPrivateChatStatusMessageRequest
.
getToUserIds
();
String
messageType
=
publishPrivateChatStatusMessageRequest
.
getMessageType
();
String
content
=
publishPrivateChatStatusMessageRequest
.
getContent
();
// 必填参数校验
assertParameterNotNull
(
fromUserId
,
"fromUserId"
);
assertParameterNotNull
(
toUserIds
,
"toUserIds"
);
assertParameterNotNull
(
messageType
,
"messageType"
);
assertParameterNotNull
(
content
,
"content"
);
// 校验通过 构建参数
TypeReference
<
Map
<
String
,
String
>>
typeReference
=
new
TypeReference
<
Map
<
String
,
String
>>()
{
};
Map
<
String
,
String
>
param
=
JSONObject
.
parseObject
(
JSON
.
toJSONString
(
publishPrivateChatStatusMessageRequest
),
typeReference
);
// 发送请求
RequestMessage
request
=
new
WecloudRequestMessageBuilder
().
setEndpoint
(
PUBLISH_PRIVATE_CHAT_STATUS_MESSAGE_REQUEST
)
.
setMethod
(
HttpMethod
.
POST
).
setParameters
(
param
)
.
setOriginalRequest
(
publishPrivateChatStatusMessageRequest
).
build
();
doOperation
(
request
);
return
true
;
}
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/Blacklist.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
*
* @Author luozh
* @Date 2022年05月07日 17:22
* @Version 1.0
*/
@Data
public
class
Blacklist
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
/**
* 被拉黑者id
*/
private
String
clientIdBePrevent
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/ChatRoomMember.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
/**
* @Author wenzhida
* @Date 2022/4/27 16:47
* @Description 聊天室成员VO
*/
@Data
@Accessors
(
chain
=
true
)
@AllArgsConstructor
@NoArgsConstructor
public
class
ChatRoomMember
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
7063567868963011339L
;
/**
* 聊天室房间id
*/
private
Long
chatRoomId
;
/**
* 客户端id
*/
private
String
clientId
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/Conversation.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
import
java.util.Date
;
import
java.util.HashMap
;
/**
* <pre>
* 会话表 查询结果对象
* </pre>
*
* @author wei
* @date 2021-05-07
*/
@Data
@Accessors
(
chain
=
true
)
public
class
Conversation
implements
Serializable
{
private
static
final
long
serialVersionUID
=
8120459168840854991L
;
/**
* "会话id"
*/
private
Long
id
;
/**
* "创建时间"
*/
private
Date
createTime
;
/**
* "创建者客户端id"
*/
private
String
creator
;
/**
* "可选 对话的名字,可为群组命名。"
*/
private
String
name
;
/**
* value = "可选 自定义属性,供开发者扩展使用。", hidden = true
*/
private
String
attribute
;
/**
* "可选 自定义属性,供开发者扩展使用。"
*/
private
HashMap
attributes
;
/**
* "可选 对话类型标志,是否是系统对话,后面会说明。"
*/
private
Boolean
systemFlag
;
/**
* "未读消息条数"
*/
private
Long
msgNotReadCount
;
/**
* "成员"
*/
private
String
members
;
/**
* "会话属性,1:单聊,2:普通群,3:万人群"
*/
private
Integer
chatType
;
/**
* "群成员数"
*/
private
Integer
memberCount
;
/**
* "是否被@ true-是 false-否"
*/
private
Boolean
isBeAt
;
/**
* 禁言开关
* @see com.wecloud.im.sdk.enums.MutedEnum
*/
/**
* "禁言开关 1-未禁言 2-禁言"
*/
private
Integer
muted
;
/**
* "禁言开关 1-未禁言 2-禁言"
*/
private
Integer
beAtCount
;
/**
* "禁止互加好友"
*/
private
Boolean
forbidAddFriend
;
/**
* "禁止发红包"
*/
private
Boolean
forbidSendRedPackets
;
/**
* "禁止发图片"
*/
private
Boolean
forbidSendPic
;
/**
* "禁止发链接"
*/
private
Boolean
forbidSendLink
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/FriendRequestRequest.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
*
* @Author luozh
* @Date 2022年04月28日 14:09
* @Version 1.0
*/
@Builder
@EqualsAndHashCode
(
callSuper
=
true
)
@Data
public
class
FriendRequestRequest
extends
WebServiceRequest
{
/**
* 用户id
*/
private
String
userId
;
/**
* 好友id
*/
private
String
friendId
;
/**
* 好友备注
*/
private
String
friendName
;
/**
* 请求备注
*/
private
String
requestRemark
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/GroupChatMessage.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
;
import
lombok.Data
;
/**
*
* @Author luozh
* @Date 2022年05月05日 10:08
* @Version 1.0
*/
@Data
public
class
GroupChatMessage
{
/**
* 发送人客户端id
*/
private
String
fromUserId
;
/**
* 接收群id
*/
private
String
toGroupIds
;
/**
* 指定一个或多个用户
*/
private
String
toUserIds
;
/**
* 消息类型
*/
private
String
messageType
;
/**
* 消息
*/
private
String
content
;
/**
* 指定离线推送通知中的推送内容
*/
private
String
pushContent
;
/**
* 是否包含发送用户
*/
private
Boolean
includeSender
;
/**
* 是否存储此条消息
*/
private
Boolean
persisted
;
/**
* 是否为@消息
*/
private
Boolean
mentioned
;
/**
* 是否为静默消息
*/
private
Boolean
silent
;
/**
* 推送拓展配置
*/
private
PushExtParam
pushExt
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/GroupChatStatusMessage.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
;
import
lombok.Data
;
/**
*
* @Author luozh
* @Date 2022年05月05日 10:08
* @Version 1.0
*/
@Data
public
class
GroupChatStatusMessage
{
/**
* 发送人客户端id
*/
private
String
fromUserId
;
/**
* 接收群id
*/
private
String
toGroupIds
;
/**
* 消息类型
*/
private
String
messageType
;
/**
* 消息
*/
private
String
content
;
/**
* 是否过滤黑名单
*/
private
Boolean
includeBlacklist
;
/**
* 发送用户是否接收
*/
private
Boolean
includeSender
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/GroupMembersFriendRequestRequest.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
*
* @Author luozh
* @Date 2022年04月28日 14:11
* @Version 1.0
*/
@Builder
@EqualsAndHashCode
(
callSuper
=
true
)
@Data
public
class
GroupMembersFriendRequestRequest
extends
WebServiceRequest
{
/**
* 会话id
*/
private
Long
conversationId
;
/**
* 用户id
*/
private
String
userId
;
/**
* 好友id
*/
private
String
friendId
;
/**
* 好友备注
*/
private
String
friendName
;
/**
* 请求备注
*/
private
String
requestRemark
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/ListChatRoomMemberRequest.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
* @Author wenzhida
* @Date 2022/5/1 9:35
* @Description 查找聊天室成员入参
*/
@EqualsAndHashCode
(
callSuper
=
true
)
@Builder
@Data
public
class
ListChatRoomMemberRequest
extends
WebServiceRequest
{
private
static
final
long
serialVersionUID
=
-
3602523207000275557L
;
/**
* 聊天室房间id
*/
private
Long
chatRoomId
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/ListConversationRequest.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
java.util.List
;
/**
* @Author wenzhida
* @Date 2022/5/1 9:35
* @Description 查找聊天室入参
*/
@EqualsAndHashCode
(
callSuper
=
true
)
@Builder
@Data
public
class
ListConversationRequest
extends
WebServiceRequest
{
private
static
final
long
serialVersionUID
=
-
3602523207000275557L
;
/**
* 会话属性,1:单聊,2:普通群,3:万人群
*/
private
Integer
chatType
;
/**
* 会话id列表
*/
private
List
<
Long
>
conversationIds
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/PageBlacklistRequest.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
*
* @Author luozh
* @Date 2022年05月07日 17:25
* @Version 1.0
*/
@EqualsAndHashCode
(
callSuper
=
true
)
@Builder
@Data
public
class
PageBlacklistRequest
extends
WebServiceRequest
{
private
Integer
pageIndex
;
private
Integer
pageSize
;
private
String
userId
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/PageResult.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
;
import
lombok.Data
;
import
java.util.List
;
/**
*
* @Author luozh
* @Date 2022年05月09日 10:07
* @Version 1.0
*/
@Data
public
class
PageResult
<
T
>
{
private
Integer
total
;
private
Integer
pageIndex
;
private
Integer
pageSize
;
private
List
<
T
>
records
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/PrivateChatMessage.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
;
import
lombok.Data
;
/**
* 单聊消息
* @Author luozh
* @Date 2022年05月05日 11:49
* @Version 1.0
*/
@Data
public
class
PrivateChatMessage
{
/**
* 发送人客户端id
*/
private
String
fromUserId
;
/**
* 指定一个或多个用户
*/
private
String
toUserIds
;
/**
* 消息类型
*/
private
String
messageType
;
/**
* 消息
*/
private
String
content
;
/**
* 指定离线推送通知中的推送内容
*/
private
String
pushContent
;
/**
* 是否包含发送用户
*/
private
Boolean
includeSender
;
/**
* 是否过滤黑名单
*/
private
Boolean
includeBlacklist
;
/**
* 是否存储此条消息
*/
private
Boolean
persisted
;
/**
* 是否为静默消息
*/
private
Boolean
silent
;
/**
* 推送拓展配置
*/
private
PushExtParam
pushExt
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/PrivateChatStatusMessage.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
;
import
lombok.Data
;
/**
*
* @Author luozh
* @Date 2022年05月05日 10:08
* @Version 1.0
*/
@Data
public
class
PrivateChatStatusMessage
{
/**
* 发送人客户端id
*/
private
String
fromUserId
;
/**
* 接收群id
*/
private
String
toUserIds
;
/**
* 消息类型
*/
private
String
messageType
;
/**
* 消息
*/
private
String
content
;
/**
* 是否过滤黑名单
*/
private
Boolean
includeBlacklist
;
/**
* 发送用户是否接收
*/
private
Boolean
includeSender
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/PublishGroupChatMessageRequest.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
* 发布群聊消息请求
* @Author luozh
* @Date 2022年05月05日 09:39
* @Version 1.0
*/
@EqualsAndHashCode
(
callSuper
=
true
)
@Data
public
class
PublishGroupChatMessageRequest
extends
WebServiceRequest
{
/**
* 发送人客户端id
*/
private
String
fromUserId
;
/**
* 接收群id
*/
private
String
toGroupIds
;
/**
* 指定一个或多个用户
*/
private
String
toUserIds
;
/**
* 消息类型
*/
private
String
messageType
;
/**
* 消息
*/
private
String
content
;
/**
* 指定离线推送通知中的推送内容
*/
private
String
pushContent
;
/**
* 是否包含发送用户
*/
private
Boolean
includeSender
;
/**
* 是否存储此条消息
*/
private
Boolean
persisted
;
/**
* 是否为@消息
*/
private
Boolean
mentioned
;
/**
* 是否为静默消息
*/
private
Boolean
silent
;
/**
* 推送拓展配置
*/
private
PushExtParam
pushExt
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/PublishGroupChatStatusMessageRequest.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
* 发布群聊消息请求
* @Author luozh
* @Date 2022年05月05日 09:39
* @Version 1.0
*/
@EqualsAndHashCode
(
callSuper
=
true
)
@Data
public
class
PublishGroupChatStatusMessageRequest
extends
WebServiceRequest
{
/**
* 发送人客户端id
*/
private
String
fromUserId
;
/**
* 接收群id
*/
private
String
toGroupIds
;
/**
* 消息类型
*/
private
String
messageType
;
/**
* 消息
*/
private
String
content
;
/**
* 是否过滤黑名单
*/
private
Boolean
includeBlacklist
;
/**
* 发送用户是否接收
*/
private
Boolean
includeSender
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/PublishPrivateChatMessageRequest.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
* 单聊消息
* @Author luozh
* @Date 2022年05月05日 11:49
* @Version 1.0
*/
@EqualsAndHashCode
(
callSuper
=
true
)
@Data
public
class
PublishPrivateChatMessageRequest
extends
WebServiceRequest
{
/**
* 发送人客户端id
*/
private
String
fromUserId
;
/**
* 指定一个或多个用户
*/
private
String
toUserIds
;
/**
* 消息类型
*/
private
String
messageType
;
/**
* 消息
*/
private
String
content
;
/**
* 指定离线推送通知中的推送内容
*/
private
String
pushContent
;
/**
* 是否包含发送用户
*/
private
Boolean
includeSender
;
/**
* 是否过滤黑名单
*/
private
Boolean
includeBlacklist
;
/**
* 是否存储此条消息
*/
private
Boolean
persisted
;
/**
* 是否为静默消息
*/
private
Boolean
silent
;
/**
* 推送拓展配置
*/
private
PushExtParam
pushExt
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/PublishPrivateChatStatusMessageRequest.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
*
* @Author luozh
* @Date 2022年05月05日 10:08
* @Version 1.0
*/
@EqualsAndHashCode
(
callSuper
=
true
)
@Data
public
class
PublishPrivateChatStatusMessageRequest
extends
WebServiceRequest
{
/**
* 发送人客户端id
*/
private
String
fromUserId
;
/**
* 接收群id
*/
private
String
toUserIds
;
/**
* 消息类型
*/
private
String
messageType
;
/**
* 消息
*/
private
String
content
;
/**
* 是否过滤黑名单
*/
private
Boolean
includeBlacklist
;
/**
* 发送用户是否接收
*/
private
Boolean
includeSender
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/PushExtParam.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
;
import
lombok.Data
;
/**
*
* @Author luozh
* @Date 2022年05月05日 09:55
* @Version 1.0
*/
@Data
public
class
PushExtParam
{
/**
* 通知栏显示主题
*/
private
String
title
;
/**
* 按厂商设置不同推送属性。支持的推送通道值为 `MI`(小米)、`HW`(华为)、`OPPO`、`VIVO`
*/
private
String
pushChannel
;
/**
* 通知渠道的 ID
*/
private
String
channelId
;
/**
* 华为通知栏消息优先级,取值 NORMAL、LOW,默认为 NORMAL 重要消息
*/
private
String
hwPriority
;
/**
* 华为推送自定义的通知栏消息右侧大图标 URL,如果不设置,则不展示通知栏右侧图标
*/
private
String
hwImage
;
/**
* 小米推送自定义的通知栏消息右侧图标 URL
*/
private
String
miLargeIconUri
;
/**
* vivo 推送通道类型。0 为运营消息、1 为系统消息
*/
private
String
vivoChannelType
;
/**
* iOS 平台通知栏分组 ID
*/
private
String
iosGroupId
;
/**
* iOS 平台
*/
private
String
iosApnsCollapseId
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/BaseMessage.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
.
message
;
import
lombok.Getter
;
import
lombok.Setter
;
import
com.wecloud.im.sdk.enums.MessageTypeEnum
;
/**
*
* @Author luozh
* @Date 2022年05月07日 13:51
* @Version 1.0
*/
@Getter
public
class
BaseMessage
{
/**
* 类型
*/
private
Integer
type
;
/**
* 用来给开发者存储拓展的自定义属性字段
*/
@Setter
private
Object
attrs
;
public
BaseMessage
(
MessageTypeEnum
type
)
{
this
.
setType
(
type
);
}
/**
* 设置类型
* @Author luozh
* @Date 2022年05月07日 01:55:06
* @param type
* @Return
*/
protected
void
setType
(
MessageTypeEnum
type
)
{
this
.
type
=
type
.
getCode
();
}
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/FileMessage.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
.
message
;
import
lombok.Getter
;
import
lombok.Setter
;
import
com.wecloud.im.sdk.enums.MessageTypeEnum
;
/**
* 图片类型消息
* @Author luozh
* @Date 2022年05月07日 13:59
* @Version 1.0
*/
@Getter
@Setter
public
class
FileMessage
extends
BaseMessage
{
public
FileMessage
()
{
super
(
MessageTypeEnum
.
FILE
);
}
private
MessageFile
file
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/MessageFile.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
.
message
;
import
lombok.Data
;
import
lombok.Getter
;
import
lombok.Setter
;
/**
* 消息图片文件
* @Author luozh
* @Date 2022年05月07日 14:00
* @Version 1.0
*/
@Data
public
class
MessageFile
{
/**
* 文件地址
*/
private
String
url
;
/**
* 元数据
*/
private
MetaData
metaData
;
@Setter
@Getter
public
static
class
MetaData
{
/**
* 文件
*/
private
String
name
;
/**
* 文件的格式
*/
private
String
format
;
/**
* 大小 单位b
*/
private
Integer
size
;
}
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/MessageImageFile.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
.
message
;
import
lombok.Data
;
import
lombok.Getter
;
import
lombok.Setter
;
/**
* 消息图片文件
* @Author luozh
* @Date 2022年05月07日 14:00
* @Version 1.0
*/
@Data
public
class
MessageImageFile
{
/**
* 图片地址
*/
private
String
url
;
/**
* 元数据
*/
private
MetaData
metaData
;
@Setter
@Getter
public
static
class
MetaData
{
/**
* 图像的名称
*/
private
String
name
;
/**
* 图像的格式
*/
private
String
format
;
/**
* 高度(单位 像素)
*/
private
Integer
height
;
/**
* 宽度(单位 像素)
*/
private
Integer
width
;
/**
* 大小 单位b
*/
private
Integer
size
;
}
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/MessageVideoFile.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
.
message
;
import
lombok.Data
;
import
lombok.Getter
;
import
lombok.Setter
;
/**
* 音频消息
* @Author luozh
* @Date 2022年05月07日 14:05
* @Version 1.0
*/
@Data
public
class
MessageVideoFile
{
/**
* 地址
*/
private
String
url
;
/**
* 元数据
*/
private
MetaData
metaData
;
@Setter
@Getter
public
static
class
MetaData
{
/**
* 文件的名称
*/
private
String
name
;
/**
* 视频的格式
*/
private
String
format
;
/**
* 时长 单位秒 精确小数点后1位
*/
private
Double
duration
;
/**
* 高度(单位 像素)
*/
private
Integer
height
;
/**
* 宽度(单位 像素)
*/
private
Integer
width
;
/**
* 大小 单位b
*/
private
Integer
size
;
}
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/MessageVoiceFile.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
.
message
;
import
lombok.Data
;
import
lombok.Getter
;
import
lombok.Setter
;
/**
* 音频消息
* @Author luozh
* @Date 2022年05月07日 14:05
* @Version 1.0
*/
@Data
public
class
MessageVoiceFile
{
/**
* 地址
*/
private
String
url
;
/**
* 元数据
*/
private
MessageImageFile
.
MetaData
metaData
;
@Setter
@Getter
public
static
class
MetaData
{
/**
* 文件的名称
*/
private
String
name
;
/**
* 时长 单位秒 精确小数点后1位
*/
private
Double
duration
;
/**
* 大小 单位b
*/
private
Integer
size
;
}
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/PicMessage.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
.
message
;
import
lombok.Getter
;
import
lombok.Setter
;
import
com.wecloud.im.sdk.enums.MessageTypeEnum
;
/**
* 图片类型消息
* @Author luozh
* @Date 2022年05月07日 13:59
* @Version 1.0
*/
@Getter
@Setter
public
class
PicMessage
extends
BaseMessage
{
public
PicMessage
()
{
super
(
MessageTypeEnum
.
IMAGE
);
}
private
MessageImageFile
file
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/PositionMessage.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
.
message
;
import
lombok.Getter
;
import
lombok.Setter
;
import
com.wecloud.im.sdk.enums.MessageTypeEnum
;
/**
* 图片类型消息
* @Author luozh
* @Date 2022年05月07日 13:59
* @Version 1.0
*/
@Getter
@Setter
public
class
PositionMessage
extends
BaseMessage
{
public
PositionMessage
()
{
super
(
MessageTypeEnum
.
POSITION
);
}
private
MetaData
metaData
;
@Setter
@Getter
public
static
class
MetaData
{
/**
* 经度
*/
private
Double
longitude
;
/**
* 纬度
*/
private
Double
latitude
;
}
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/TextMessage.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
.
message
;
import
lombok.Getter
;
import
lombok.Setter
;
import
com.wecloud.im.sdk.enums.MessageTypeEnum
;
/**
*
* @Author luozh
* @Date 2022年05月07日 13:56
* @Version 1.0
*/
@Getter
@Setter
public
class
TextMessage
extends
BaseMessage
{
public
TextMessage
()
{
super
(
MessageTypeEnum
.
TEXT
);
}
private
String
text
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/VideoMessage.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
.
message
;
import
lombok.Getter
;
import
lombok.Setter
;
import
com.wecloud.im.sdk.enums.MessageTypeEnum
;
/**
* 图片类型消息
* @Author luozh
* @Date 2022年05月07日 13:59
* @Version 1.0
*/
@Getter
@Setter
public
class
VideoMessage
extends
BaseMessage
{
public
VideoMessage
()
{
super
(
MessageTypeEnum
.
VIDEO
);
}
private
MessageVideoFile
file
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/model/message/VoiceMessage.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
model
.
message
;
import
lombok.Getter
;
import
lombok.Setter
;
import
com.wecloud.im.sdk.enums.MessageTypeEnum
;
/**
* 图片类型消息
* @Author luozh
* @Date 2022年05月07日 13:59
* @Version 1.0
*/
@Getter
@Setter
public
class
VoiceMessage
extends
BaseMessage
{
public
VoiceMessage
()
{
super
(
MessageTypeEnum
.
AUDIO
);
}
private
MessageVoiceFile
file
;
}
im-sdk/src/main/java/com/wecloud/im/sdk/sample/PublishGroupChatMessageSample.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
sample
;
import
java.util.Date
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.json.JSONUtil
;
import
com.wecloud.im.sdk.WecloudIm
;
import
com.wecloud.im.sdk.WecloudImClientBuilder
;
import
com.wecloud.im.sdk.model.GroupChatMessage
;
import
com.wecloud.im.sdk.model.message.MessageImageFile
;
import
com.wecloud.im.sdk.model.message.PicMessage
;
import
com.wecloud.im.sdk.model.message.TextMessage
;
/**
* 发布群消息
* @Author luozh
* @Date 2022年05月06日 01:37:29
* @Version 1.0
*/
public
class
PublishGroupChatMessageSample
{
public
static
void
main
(
String
[]
args
)
{
WecloudIm
im
=
new
WecloudImClientBuilder
().
build
(
"http://139.159.136.86:8082"
,
"QizKVHcILRWp6Td2"
,
"287d04828099fb7de871e9dda845fa8b6b2302faf2ab3737"
);
String
senderId
=
"1519984635566845952"
;
String
toGroupIds
=
"1519985463165931520"
;
String
messageType
=
"-1"
;
boolean
silent
=
true
;
GroupChatMessage
groupChatMessage
=
new
GroupChatMessage
();
groupChatMessage
.
setFromUserId
(
senderId
);
groupChatMessage
.
setToGroupIds
(
toGroupIds
);
groupChatMessage
.
setPushContent
(
""
);
groupChatMessage
.
setIncludeSender
(
false
);
groupChatMessage
.
setPersisted
(
true
);
groupChatMessage
.
setMentioned
(
false
);
groupChatMessage
.
setSilent
(
silent
);
groupChatMessage
.
setMessageType
(
"-1"
);
groupChatMessage
.
setContent
(
JSONUtil
.
toJsonStr
(
buildTextMessage
()));
Boolean
textMessageResult
=
im
.
publishGroupChatMessage
(
groupChatMessage
);
groupChatMessage
.
setMessageType
(
"-2"
);
groupChatMessage
.
setContent
(
JSONUtil
.
toJsonStr
(
buildPicMessage
()));
Boolean
picMessageResult
=
im
.
publishGroupChatMessage
(
groupChatMessage
);
}
private
static
TextMessage
buildTextMessage
()
{
TextMessage
textMessage
=
new
TextMessage
();
textMessage
.
setText
(
"这是text消息测试: "
+
DateUtil
.
formatDateTime
(
new
Date
()));
return
textMessage
;
}
private
static
PicMessage
buildPicMessage
()
{
PicMessage
picMessage
=
new
PicMessage
();
MessageImageFile
imageFile
=
new
MessageImageFile
();
imageFile
.
setUrl
(
"http://ac-p2bpmgci.clouddn.com/246b8acc-2e12-4a9d-a255-8d17a3059d25"
);
MessageImageFile
.
MetaData
metaData
=
new
MessageImageFile
.
MetaData
();
metaData
.
setName
(
"IMG_20141223.jpeg"
);
metaData
.
setFormat
(
"png"
);
metaData
.
setHeight
(
768
);
metaData
.
setWidth
(
1024
);
metaData
.
setSize
(
18
);
imageFile
.
setMetaData
(
metaData
);
picMessage
.
setFile
(
imageFile
);
return
picMessage
;
}
}
im-sdk/src/main/java/com/wecloud/im/sdk/sample/PublishPrivateChatMessageSample.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
sample
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.json.JSONUtil
;
import
com.wecloud.im.sdk.WecloudIm
;
import
com.wecloud.im.sdk.WecloudImClientBuilder
;
import
com.wecloud.im.sdk.model.PrivateChatMessage
;
/**
* 发布单聊消息
* @Author luozh
* @Date 2022年05月06日 01:37:29
* @Version 1.0
*/
public
class
PublishPrivateChatMessageSample
{
public
static
void
main
(
String
[]
args
)
{
WecloudIm
im
=
new
WecloudImClientBuilder
().
build
(
"http://139.159.136.86:8082"
,
"QizKVHcILRWp6Td2"
,
"287d04828099fb7de871e9dda845fa8b6b2302faf2ab3737"
);
// WecloudIm im = new WecloudImClientBuilder().build("http://127.0.0.1:8082",
// "QizKVHcILRWp6Td2",
// "287d04828099fb7de871e9dda845fa8b6b2302faf2ab3737");
String
senderId
=
"1519984635566845952"
;
String
toGroupIds
=
"1513691265777217536"
;
String
messageType
=
"-1"
;
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
content
.
put
(
"toConversation"
,
"1519985463165931520"
);
content
.
put
(
"type"
,
-
1
);
content
.
put
(
"text"
,
"这是测试消息: "
+
DateUtil
.
formatDateTime
(
new
Date
()));
content
.
put
(
"attrs"
,
new
HashMap
<
String
,
String
>()
{
{
put
(
"test1"
,
""
);
}
});
boolean
silent
=
true
;
PrivateChatMessage
privateChatMessage
=
new
PrivateChatMessage
();
privateChatMessage
.
setFromUserId
(
senderId
);
privateChatMessage
.
setToUserIds
(
toGroupIds
);
privateChatMessage
.
setMessageType
(
messageType
);
privateChatMessage
.
setContent
(
JSONUtil
.
toJsonStr
(
content
));
privateChatMessage
.
setPushContent
(
""
);
privateChatMessage
.
setIncludeSender
(
false
);
privateChatMessage
.
setPersisted
(
true
);
privateChatMessage
.
setSilent
(
silent
);
// groupChatMessage.setPushExt(new PushExtParam());
Boolean
result
=
im
.
publishPrivateMessage
(
privateChatMessage
);
}
}
im-sdk/src/main/java/com/wecloud/im/sdk/sample/PublishPrivateChatMessageStatusSample.java
0 → 100644
View file @
910da5db
package
com
.
wecloud
.
im
.
sdk
.
sample
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.json.JSONUtil
;
import
com.wecloud.im.sdk.WecloudIm
;
import
com.wecloud.im.sdk.WecloudImClientBuilder
;
import
com.wecloud.im.sdk.model.PrivateChatStatusMessage
;
/**
* 发布单聊消息
* @Author luozh
* @Date 2022年05月06日 01:37:29
* @Version 1.0
*/
public
class
PublishPrivateChatMessageStatusSample
{
public
static
void
main
(
String
[]
args
)
{
// WecloudIm im = new WecloudImClientBuilder().build("http://139.159.136.86:8082",
// "QizKVHcILRWp6Td2",
// "287d04828099fb7de871e9dda845fa8b6b2302faf2ab3737");
WecloudIm
im
=
new
WecloudImClientBuilder
().
build
(
"http://127.0.0.1:8082"
,
"QizKVHcILRWp6Td2"
,
"287d04828099fb7de871e9dda845fa8b6b2302faf2ab3737"
);
String
senderId
=
"1519984635566845952"
;
String
toGroupIds
=
"1513691265777217536"
;
String
messageType
=
"-1"
;
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
content
.
put
(
"toConversation"
,
"1519985463165931520"
);
content
.
put
(
"type"
,
-
1
);
content
.
put
(
"text"
,
"这是测试消息: "
+
DateUtil
.
formatDateTime
(
new
Date
()));
content
.
put
(
"attrs"
,
new
HashMap
<
String
,
String
>()
{
{
put
(
"test1"
,
""
);
}
});
PrivateChatStatusMessage
privateChatMessage
=
new
PrivateChatStatusMessage
();
privateChatMessage
.
setFromUserId
(
senderId
);
privateChatMessage
.
setToUserIds
(
toGroupIds
);
privateChatMessage
.
setMessageType
(
messageType
);
privateChatMessage
.
setContent
(
JSONUtil
.
toJsonStr
(
content
));
privateChatMessage
.
setIncludeBlacklist
(
false
);
privateChatMessage
.
setIncludeSender
(
false
);
Boolean
result
=
im
.
publishPrivateStatusMessage
(
privateChatMessage
);
}
}
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