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
8103d6cb
Commit
8103d6cb
authored
Feb 17, 2022
by
Future
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
群禁言,设置管理员等接口
parent
c579f9c6
Show whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
229 additions
and
146 deletions
+229
-146
core/src/main/java/com/wecloud/im/controller/ImConversationController.java
+14
-1
core/src/main/java/com/wecloud/im/controller/ImConversationMembersController.java
+0
-56
core/src/main/java/com/wecloud/im/controller/ImInboxController.java
+9
-57
core/src/main/java/com/wecloud/im/entity/ImConversation.java
+7
-0
core/src/main/java/com/wecloud/im/entity/ImConversationMembers.java
+12
-1
core/src/main/java/com/wecloud/im/enums/MutedEnum.java
+40
-0
core/src/main/java/com/wecloud/im/mapper/ImConversationMembersMapper.java
+10
-4
core/src/main/java/com/wecloud/im/param/ImConversationMembersListParam.java
+4
-0
core/src/main/java/com/wecloud/im/param/MutedGroupParam.java
+35
-0
core/src/main/java/com/wecloud/im/param/SetAdminsParam.java
+5
-0
core/src/main/java/com/wecloud/im/service/ImConversationMembersService.java
+4
-4
core/src/main/java/com/wecloud/im/service/ImConversationService.java
+9
-1
core/src/main/java/com/wecloud/im/service/impl/ImConversationMembersServiceImpl.java
+6
-7
core/src/main/java/com/wecloud/im/service/impl/ImConversationServiceImpl.java
+46
-8
core/src/main/java/com/wecloud/im/vo/ImConversationMemberListVo.java
+7
-0
core/src/main/resources/mapper/ImClientMapper.xml
+1
-1
core/src/main/resources/mapper/ImConversationMembersMapper.xml
+11
-4
core/src/main/resources/mapper/ImMessageMapper.xml
+2
-1
docs/db/feature-cluster增量.sql
+7
-1
No files found.
core/src/main/java/com/wecloud/im/controller/ImConversationController.java
View file @
8103d6cb
package
com
.
wecloud
.
im
.
controller
;
import
com.wecloud.im.param.ImConversationQueryParam
;
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
;
...
...
@@ -20,6 +21,7 @@ import io.swagger.annotations.ApiOperation;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
...
...
@@ -116,7 +118,7 @@ public class ImConversationController extends BaseController {
*/
@PostMapping
(
"/setAdmins"
)
@ApiOperation
(
value
=
"设置群管理员"
,
notes
=
"权限:目前只有群主有权限操作"
)
public
ApiResult
<
Boolean
>
setAdmins
(
@RequestBody
SetAdminsParam
param
)
{
public
ApiResult
<
Boolean
>
setAdmins
(
@RequestBody
@Validated
SetAdminsParam
param
)
{
if
(
CollectionUtils
.
isEmpty
(
param
.
getClientIds
()))
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
...
...
@@ -124,6 +126,17 @@ public class ImConversationController extends BaseController {
return
ApiResult
.
ok
(
result
);
}
/**
* 群禁言
*/
@PostMapping
(
"/mutedGroup"
)
@ApiOperation
(
value
=
"群禁言"
,
notes
=
"权限:群主和管理员有权限操作"
)
public
ApiResult
<
Boolean
>
mutedGroup
(
@RequestBody
@Validated
MutedGroupParam
param
)
{
Boolean
result
=
imConversationService
.
mutedGroup
(
param
);
return
ApiResult
.
ok
(
result
);
}
/**
* 查询用户加入的所有会话 与每个会话的未读条数 成员
...
...
core/src/main/java/com/wecloud/im/controller/ImConversationMembersController.java
View file @
8103d6cb
...
...
@@ -58,7 +58,6 @@ public class ImConversationMembersController extends BaseController {
* 会话中成员表列表
*/
@PostMapping
(
"/getList"
)
// @OperationLog(name = "会话中成员表列表", type = OperationLogType.PAGE)
@ApiOperation
(
value
=
"获取会话中成员表列表"
)
public
ApiResult
<
List
<
ImConversationMemberListVo
>>
getImConversationMembersList
(
@Validated
@RequestBody
ImConversationMembersListParam
imConversationMembersListParam
)
throws
Exception
{
// Paging<ImConversationMembersQueryVo> paging = imConversationMembersService.getImConversationMembersPageList(imConversationMembersPageParam);
...
...
@@ -66,60 +65,5 @@ public class ImConversationMembersController extends BaseController {
return
ApiResult
.
ok
(
imConversationMembersService
.
getImConversationMembersList
(
imConversationMembersListParam
));
}
// /**
// * 添加会话成员表
// */
// @PostMapping("/add")
// @OperationLog(name = "添加会话成员表", type = OperationLogType.ADD)
// @ApiOperation(value = "添加会话成员表")
// public ApiResult<Boolean> addImConversationMembers(@Validated(Add.class) @RequestBody ImConversationMembers imConversationMembers) throws Exception {
// boolean flag = imConversationMembersService.saveImConversationMembers(imConversationMembers);
// return ApiResult.result(flag);
// }
//
// /**
// * 修改会话成员表
// */
// @PostMapping("/update")
// @OperationLog(name = "修改会话成员表", type = OperationLogType.UPDATE)
// @ApiOperation(value = "修改会话成员表")
// public ApiResult<Boolean> updateImConversationMembers(@Validated(Update.class) @RequestBody ImConversationMembers imConversationMembers) throws Exception {
// boolean flag = imConversationMembersService.updateImConversationMembers(imConversationMembers);
// return ApiResult.result(flag);
// }
//
// /**
// * 删除会话成员表
// */
// @PostMapping("/delete/{id}")
// @OperationLog(name = "删除会话成员表", type = OperationLogType.DELETE)
// @ApiOperation(value = "删除会话成员表")
// public ApiResult<Boolean> deleteImConversationMembers(@PathVariable("id") Long id) throws Exception {
// boolean flag = imConversationMembersService.deleteImConversationMembers(id);
// return ApiResult.result(flag);
// }
//
// /**
// * 获取会话成员表详情
// */
// @GetMapping("/info/{id}")
// @OperationLog(name = "会话成员表详情", type = OperationLogType.INFO)
// @ApiOperation(value = "会话成员表详情")
// public ApiResult<ImConversationMembersQueryVo> getImConversationMembers(@PathVariable("id") Long id) throws Exception {
// ImConversationMembersQueryVo imConversationMembersQueryVo = imConversationMembersService.getImConversationMembersById(id);
// return ApiResult.ok(imConversationMembersQueryVo);
// }
//
// /**
// * 会话成员表分页列表
// */
// @PostMapping("/getPageList")
// @OperationLog(name = "会话成员表分页列表", type = OperationLogType.PAGE)
// @ApiOperation(value = "会话成员表分页列表")
// public ApiResult<Paging<ImConversationMembersQueryVo>> getImConversationMembersPageList(@Validated @RequestBody ImConversationMembersPageParam imConversationMembersPageParam) throws Exception {
// Paging<ImConversationMembersQueryVo> paging = imConversationMembersService.getImConversationMembersPageList(imConversationMembersPageParam);
// return ApiResult.ok(paging);
// }
}
core/src/main/java/com/wecloud/im/controller/ImInboxController.java
View file @
8103d6cb
package
com
.
wecloud
.
im
.
controller
;
import
com.wecloud.im.param.MsgReadStatusUpdateParam
;
import
com.wecloud.im.param.ImMsgReceivedStatusUpdate
;
import
com.wecloud.im.param.MsgReadStatusUpdateParam
;
import
com.wecloud.im.service.ImInboxService
;
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.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.PostMapping
;
...
...
@@ -45,6 +47,9 @@ public class ImInboxController extends BaseController {
@PostMapping
(
"/msgReadUpdate"
)
@ApiOperation
(
value
=
"消息修改为已读状态"
)
public
ApiResult
<
Boolean
>
updateInMsgReadUpdate
(
@RequestBody
MsgReadStatusUpdateParam
msgReadStatusUpdateParam
)
throws
Exception
{
if
(
CollectionUtils
.
isEmpty
(
msgReadStatusUpdateParam
.
getMsgIds
()))
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
);
}
return
imInboxService
.
updateImMsgRead
(
msgReadStatusUpdateParam
);
}
...
...
@@ -54,64 +59,11 @@ public class ImInboxController extends BaseController {
@PostMapping
(
"/updateMsgReadStatusByConversation"
)
@ApiOperation
(
value
=
"整个会话消息修改为已读状态"
)
public
ApiResult
<
Boolean
>
updateMsgReadStatusByConversation
(
@RequestBody
MsgReadStatusUpdateParam
msgReadStatusUpdateParam
)
throws
Exception
{
if
(
msgReadStatusUpdateParam
.
getConversationId
()
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
);
}
return
ApiResult
.
ok
(
imInboxService
.
updateMsgReadStatusByConversation
(
msgReadStatusUpdateParam
));
}
//
// /**
// * 添加消息收件箱表
// */
// @PostMapping("/add")
// @OperationLog(name = "添加消息收件箱表", type = OperationLogType.ADD)
// @ApiOperation(value = "添加消息收件箱表")
// public ApiResult<Boolean> addImInbox(@Validated(Add.class) @RequestBody ImInbox imInbox) throws Exception {
// boolean flag = imInboxService.saveImInbox(imInbox);
// return ApiResult.result(flag);
// }
//
// /**
// * 修改消息收件箱表
// */
// @PostMapping("/update")
// @OperationLog(name = "修改消息收件箱表", type = OperationLogType.UPDATE)
// @ApiOperation(value = "修改消息收件箱表")
// public ApiResult<Boolean> updateImInbox(@Validated(Update.class) @RequestBody ImInbox imInbox) throws Exception {
// boolean flag = imInboxService.updateImInbox(imInbox);
// return ApiResult.result(flag);
// }
//
// /**
// * 删除消息收件箱表
// */
// @PostMapping("/delete/{id}")
// @OperationLog(name = "删除消息收件箱表", type = OperationLogType.DELETE)
// @ApiOperation(value = "删除消息收件箱表")
// public ApiResult<Boolean> deleteImInbox(@PathVariable("id") Long id) throws Exception {
// boolean flag = imInboxService.deleteImInbox(id);
// return ApiResult.result(flag);
// }
//
// /**
// * 获取消息收件箱表详情
// */
// @GetMapping("/info/{id}")
// @OperationLog(name = "消息收件箱表详情", type = OperationLogType.INFO)
// @ApiOperation(value = "消息收件箱表详情")
// public ApiResult<ImInboxQueryVo> getImInbox(@PathVariable("id") Long id) throws Exception {
// ImInboxQueryVo imInboxQueryVo = imInboxService.getImInboxById(id);
// return ApiResult.ok(imInboxQueryVo);
// }
//
// /**
// * 消息收件箱表分页列表
// */
// @PostMapping("/getPageList")
// @OperationLog(name = "消息收件箱表分页列表", type = OperationLogType.PAGE)
// @ApiOperation(value = "消息收件箱表分页列表")
// public ApiResult<Paging<ImInboxQueryVo>> getImInboxPageList(@Validated @RequestBody ImInboxPageParam imInboxPageParam) throws Exception {
// Paging<ImInboxQueryVo> paging = imInboxService.getImInboxPageList(imInboxPageParam);
// return ApiResult.ok(paging);
// }
}
core/src/main/java/com/wecloud/im/entity/ImConversation.java
View file @
8103d6cb
...
...
@@ -62,4 +62,11 @@ public class ImConversation extends BaseEntity {
@ApiModelProperty
(
"可选 对话类型标志,是否是系统对话,后面会说明。"
)
private
Boolean
systemFlag
;
/**
* 禁言开关
* @see com.wecloud.im.enums.MutedEnum
*/
@ApiModelProperty
(
"禁言开关 1-未禁言 2-禁言"
)
private
Integer
muted
;
}
core/src/main/java/com/wecloud/im/entity/ImConversationMembers.java
View file @
8103d6cb
...
...
@@ -58,7 +58,18 @@ public class ImConversationMembers extends BaseEntity {
@ApiModelProperty
(
"会话中client的备注名"
)
private
String
clientRemarkName
;
@ApiModelProperty
(
"角色"
)
/**
* 群内角色
* @see com.wecloud.im.enums.GroupRoleEnum
*/
@ApiModelProperty
(
"群内角色"
)
private
Integer
role
;
/**
* 禁言开关
* @see com.wecloud.im.enums.MutedEnum
*/
@ApiModelProperty
(
"禁言开关 1-未禁言 2-禁言"
)
private
Integer
muted
;
}
core/src/main/java/com/wecloud/im/enums/MutedEnum.java
0 → 100644
View file @
8103d6cb
package
com
.
wecloud
.
im
.
enums
;
import
io.geekidea.springbootplus.framework.common.enums.BaseEnum
;
/**
* @Author wenzhida
* @Date 2022/2/17 11:52
* @Description 禁言选型枚举枚举
*/
public
enum
MutedEnum
implements
BaseEnum
{
/**
* 1-未禁言
*/
NO
(
1
,
"未禁言"
),
/**
* 2 - 禁言
*/
YES
(
2
,
"禁言"
);
MutedEnum
(
int
code
,
String
desc
)
{
this
.
code
=
code
;
this
.
desc
=
desc
;
}
private
final
Integer
code
;
private
final
String
desc
;
@Override
public
Integer
getCode
()
{
return
this
.
code
;
}
@Override
public
String
getDesc
()
{
return
this
.
desc
;
}
}
core/src/main/java/com/wecloud/im/mapper/ImConversationMembersMapper.java
View file @
8103d6cb
...
...
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.wecloud.im.entity.ImConversationMembers
;
import
com.wecloud.im.param.ApiImConversationMembersQueryVo
;
import
com.wecloud.im.param.ImConversationMembersListParam
;
import
com.wecloud.im.param.ImConversationMembersPageParam
;
import
com.wecloud.im.param.ImConversationMembersQueryVo
;
import
com.wecloud.im.param.SetAdminsParam
;
...
...
@@ -35,7 +36,12 @@ public interface ImConversationMembersMapper extends BaseMapper<ImConversationMe
List
<
ApiImConversationMembersQueryVo
>
getRestApiImConversationMembersList
(
@Param
(
"conversationId"
)
Long
conversationId
);
List
<
ImConversationMemberListVo
>
getImConversationMembersList
(
@Param
(
"conversationId"
)
Long
conversationId
);
/**
* 获取群成员列表
* @param param 入参
* @return
*/
List
<
ImConversationMemberListVo
>
getImConversationMembersList
(
@Param
(
"param"
)
ImConversationMembersListParam
param
);
/**
...
...
@@ -51,8 +57,8 @@ public interface ImConversationMembersMapper extends BaseMapper<ImConversationMe
/**
* 批量设置群成员
* @param
param
* @
return
* @param
conversationId
* @
param fkClientIds
*/
void
setAdminsForConversation
(
@Param
(
"
param"
)
SetAdminsParam
param
);
void
setAdminsForConversation
(
@Param
(
"
conversationId"
)
Long
conversationId
,
@Param
(
"fkClientIds"
)
List
<
Long
>
fkClientIds
,
@Param
(
"role"
)
Integer
role
);
}
core/src/main/java/com/wecloud/im/param/ImConversationMembersListParam.java
View file @
8103d6cb
...
...
@@ -6,6 +6,7 @@ import lombok.Data;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
import
java.util.List
;
/**
* <pre>
...
...
@@ -23,4 +24,7 @@ public class ImConversationMembersListParam implements Serializable {
@ApiModelProperty
(
value
=
"会话表id"
,
required
=
true
)
private
Long
conversationId
;
@ApiModelProperty
(
value
=
"角色列表 可多选,不传则查全部"
,
required
=
true
)
private
List
<
Integer
>
roles
;
}
core/src/main/java/com/wecloud/im/param/MutedGroupParam.java
0 → 100644
View file @
8103d6cb
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
javax.validation.constraints.NotNull
;
import
java.util.List
;
/**
* @Author wenzhida
* @Date 2022/2/17 15:58
* @Description 群禁言入参
*/
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@ApiModel
(
value
=
"群禁言入参"
)
public
class
MutedGroupParam
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
-
6974569111928946842L
;
@NotNull
@ApiModelProperty
(
"会话id"
)
private
Long
conversationId
;
@ApiModelProperty
(
"禁言指定群成员列表 - 群禁言无需入参"
)
private
List
<
String
>
clientIds
;
@NotNull
@ApiModelProperty
(
"禁言类型 1-禁言 2-取消禁言"
)
private
Integer
mutedType
;
}
core/src/main/java/com/wecloud/im/param/SetAdminsParam.java
View file @
8103d6cb
...
...
@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
javax.validation.constraints.NotNull
;
import
java.util.List
;
/**
...
...
@@ -26,4 +27,8 @@ public class SetAdminsParam extends BaseEntity {
@ApiModelProperty
(
"要设置为群管理员的clientId列表"
)
private
List
<
String
>
clientIds
;
@NotNull
(
message
=
"操作类型"
)
@ApiModelProperty
(
"操作类型 1-设置管理员 2-删除管理员"
)
private
Integer
operateType
;
}
core/src/main/java/com/wecloud/im/service/ImConversationMembersService.java
View file @
8103d6cb
...
...
@@ -42,11 +42,11 @@ public interface ImConversationMembersService extends BaseService<ImConversation
/**
* 会话成员表分页列表
*
* @param
imConversationMembersListP
aram
* @param
p
aram
* @return
* @throws Exception
*/
List
<
ImConversationMemberListVo
>
getImConversationMembersList
(
ImConversationMembersListParam
imConversationMembersListParam
)
throws
Exception
;
List
<
ImConversationMemberListVo
>
getImConversationMembersList
(
ImConversationMembersListParam
param
)
;
ApiResult
<
Boolean
>
saveOrUpdateAttr
(
ImConversationMemAttrUpdate
imConversationMemAttrUpdate
);
...
...
@@ -106,8 +106,8 @@ public interface ImConversationMembersService extends BaseService<ImConversation
/**
* 批量设置群成员
* @param param
* @
return
* @
param fkClientIds
*/
void
setAdminsForConversation
(
SetAdminsParam
param
);
void
setAdminsForConversation
(
SetAdminsParam
param
,
List
<
Long
>
fkClientIds
);
}
core/src/main/java/com/wecloud/im/service/ImConversationService.java
View file @
8103d6cb
...
...
@@ -5,6 +5,7 @@ import com.wecloud.im.entity.ImConversation;
import
com.wecloud.im.param.ImConversationPageParam
;
import
com.wecloud.im.param.ImConversationQueryParam
;
import
com.wecloud.im.param.ImConversationQueryVo
;
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
;
...
...
@@ -79,13 +80,20 @@ public interface ImConversationService extends BaseService<ImConversation> {
Boolean
transferOwner
(
@RequestBody
TransferOwnerParam
param
);
/**
*
群主转让
*
设置管理员
* @param param
* @return
*/
Boolean
setAdmins
(
@RequestBody
SetAdminsParam
param
);
/**
* 群禁言
* @param param
* @return
*/
Boolean
mutedGroup
(
@RequestBody
MutedGroupParam
param
);
/**
* 添加或修改会话名称
*/
ApiResult
<
Boolean
>
saveOrUpdateName
(
ImConversationNameUpdate
imConversationNameUpdate
)
throws
Exception
;
...
...
core/src/main/java/com/wecloud/im/service/impl/ImConversationMembersServiceImpl.java
View file @
8103d6cb
...
...
@@ -129,10 +129,8 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
}
@Override
public
List
<
ImConversationMemberListVo
>
getImConversationMembersList
(
ImConversationMembersListParam
imConversationMembersListParam
)
throws
Exception
{
return
imConversationMembersMapper
.
getImConversationMembersList
(
imConversationMembersListParam
.
getConversationId
());
public
List
<
ImConversationMemberListVo
>
getImConversationMembersList
(
ImConversationMembersListParam
param
)
{
return
imConversationMembersMapper
.
getImConversationMembersList
(
param
);
}
@Override
...
...
@@ -223,11 +221,12 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
/**
* 批量设置群成员
* @param param
* @
return
* @
param fkClientIds
*/
@Override
public
void
setAdminsForConversation
(
SetAdminsParam
param
)
{
imConversationMembersMapper
.
setAdminsForConversation
(
param
);
public
void
setAdminsForConversation
(
SetAdminsParam
param
,
List
<
Long
>
fkClientIds
)
{
Integer
role
=
param
.
getOperateType
()
==
1
?
2
:
1
;
imConversationMembersMapper
.
setAdminsForConversation
(
param
.
getConversationId
(),
fkClientIds
,
role
);
}
}
core/src/main/java/com/wecloud/im/service/impl/ImConversationServiceImpl.java
View file @
8103d6cb
...
...
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.core.metadata.OrderItem
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.google.common.collect.Lists
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImConversation
;
...
...
@@ -14,9 +15,12 @@ import com.wecloud.im.entity.ImMessageOnlineSend;
import
com.wecloud.im.enums.ChatTypeEnum
;
import
com.wecloud.im.enums.GroupRoleEnum
;
import
com.wecloud.im.mapper.ImConversationMapper
;
import
com.wecloud.im.param.ImClientSimpleDto
;
import
com.wecloud.im.param.ImConversationMembersListParam
;
import
com.wecloud.im.param.ImConversationPageParam
;
import
com.wecloud.im.param.ImConversationQueryParam
;
import
com.wecloud.im.param.ImConversationQueryVo
;
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
;
...
...
@@ -32,6 +36,7 @@ import com.wecloud.im.service.ImConversationService;
import
com.wecloud.im.service.ImMessageService
;
import
com.wecloud.im.vo.ConversationVo
;
import
com.wecloud.im.vo.ImConversationCreateVo
;
import
com.wecloud.im.vo.ImConversationMemberListVo
;
import
com.wecloud.im.vo.OfflineMsgDto
;
import
com.wecloud.im.ws.enums.MsgTypeEnum
;
import
com.wecloud.im.ws.enums.WsResponseCmdEnum
;
...
...
@@ -62,6 +67,7 @@ import java.util.Date;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* 会话表 服务实现类
...
...
@@ -634,30 +640,62 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
}
/**
*
群主转让
*
设置管理员
* @param param
* @return
*/
@Override
public
Boolean
setAdmins
(
SetAdminsParam
param
)
{
// shiro线程中获取当前token
JwtToken
curentJwtToken
=
JwtUtil
.
getCurentJwtToken
();
// 根据appKey查询application
ImApplication
imApplication
=
imApplicationService
.
getCacheAppByAppKey
(
curentJwtToken
.
getAppKey
());
ImClient
imClientSender
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCurentClient
();
// 判断操作人是否为群主
ImConversationMembers
currentMember
=
imConversationMembersService
.
getOne
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
param
.
getConversationId
())
.
eq
(
ImConversationMembers:
:
getFkClientId
,
imClientSender
.
getId
())
.
eq
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
())
);
if
(
currentMember
==
null
||
!
GroupRoleEnum
.
OWNER
.
getCode
().
equals
(
currentMember
.
getRole
()))
{
throw
new
BusinessException
(
"非群主无权操作"
);
}
imConversationMembersService
.
setAdminsForConversation
(
param
);
List
<
ImClientSimpleDto
>
simpleClients
=
imClientService
.
getSimpleClients
(
currentClient
.
getFkAppid
(),
param
.
getClientIds
());
if
(
CollectionUtils
.
isEmpty
(
simpleClients
))
{
throw
new
BusinessException
(
"未查询得到真实管理员信息"
);
}
List
<
Long
>
fkClientIds
=
simpleClients
.
stream
()
.
filter
(
s
->
!
currentMember
.
getId
().
equals
(
s
.
getId
()))
.
map
(
s
->
s
.
getId
()).
collect
(
Collectors
.
toList
());
imConversationMembersService
.
setAdminsForConversation
(
param
,
fkClientIds
);
return
true
;
}
/**
* 群禁言
* @param param
* @return
*/
@Override
public
Boolean
mutedGroup
(
MutedGroupParam
param
)
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
// 获取 群主和群成员列表
ImConversationMembersListParam
getAdminsParam
=
new
ImConversationMembersListParam
();
getAdminsParam
.
setConversationId
(
param
.
getConversationId
());
getAdminsParam
.
setRoles
(
Lists
.
newArrayList
(
GroupRoleEnum
.
OWNER
.
getCode
(),
GroupRoleEnum
.
ADMIN
.
getCode
()));
List
<
ImConversationMemberListVo
>
adminMembers
=
imConversationMembersService
.
getImConversationMembersList
(
getAdminsParam
);
if
(
CollectionUtils
.
isEmpty
(
adminMembers
))
{
throw
new
BusinessException
(
"该群未查找到管理员信息"
);
}
// 判断操作人是否为群主或管理员
List
<
ImConversationMemberListVo
>
admins
=
adminMembers
.
stream
().
filter
(
a
->
currentClient
.
getClientId
().
equals
(
a
.
getClientId
())).
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isEmpty
(
admins
))
{
throw
new
BusinessException
(
"操作人既不是群主也不是群管理员,无权限操作"
);
}
ImConversation
muteGroupParam
=
new
ImConversation
();
muteGroupParam
.
setId
(
param
.
getConversationId
());
muteGroupParam
.
setMuted
(
param
.
getMutedType
());
imConversationMapper
.
updateById
(
muteGroupParam
);
return
true
;
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ApiResult
<
Boolean
>
saveOrUpdateName
(
ImConversationNameUpdate
imConversationNameUpdate
)
throws
Exception
{
...
...
core/src/main/java/com/wecloud/im/vo/ImConversationMemberListVo.java
View file @
8103d6cb
...
...
@@ -24,4 +24,11 @@ public class ImConversationMemberListVo implements Serializable {
private
String
clientAttributes
;
@ApiModelProperty
(
"会话成员列表的自定义扩展属性"
)
private
String
memberAttributes
;
/**
* 群内角色
* @see com.wecloud.im.enums.GroupRoleEnum
*/
@ApiModelProperty
(
"群内角色"
)
private
Integer
role
;
}
core/src/main/resources/mapper/ImClientMapper.xml
View file @
8103d6cb
...
...
@@ -49,7 +49,7 @@
</select>
<select
id=
"getSimpleClients"
resultType=
"com.wecloud.im.param.ImClientSimpleDto"
>
select id, fk_appid, client_id from im_client where fk_appi = #{appId} and client_id in
select id, fk_appid, client_id from im_client where fk_appi
d
= #{appId} and client_id in
<foreach
collection=
"clientIds"
item=
"clientId"
index=
"index"
open=
"("
close=
")"
separator=
","
>
#{clientId}
</foreach>
...
...
core/src/main/resources/mapper/ImConversationMembersMapper.xml
View file @
8103d6cb
...
...
@@ -36,10 +36,17 @@
im_client.head_portrait as headPortrait,
im_client.nickname,
im_conversation_members.attributes AS memberAttributes,
im_conversation_members.role AS role,
im_client.attributes AS clientAttributes
FROM im_conversation_members AS im_conversation_members
INNER JOIN im_client AS im_client ON im_client.id = im_conversation_members.fk_client_id
WHERE im_conversation_members.fk_conversation_id = #{conversationId}
WHERE im_conversation_members.fk_conversation_id = #{param.conversationId}
<if
test=
"param.roles != null and param.roles.size() > 0"
>
and im_conversation_members.role in
<foreach
collection=
"param.roles"
item=
"role"
index=
"index"
open=
"("
close=
")"
separator=
","
>
#{role}
</foreach>
</if>
</select>
...
...
@@ -50,10 +57,10 @@
</select>
<update
id=
"setAdminsForConversation"
>
update im_conversation_members set role =
2
, update_time=NOW()
update im_conversation_members set role =
#{role}
, update_time=NOW()
where fk_conversation_id = #{conversationId} and fk_client_id in
<foreach
collection=
"
clientIds"
item=
"c
lientId"
index=
"index"
open=
"("
close=
")"
separator=
","
>
#{
c
lientId}
<foreach
collection=
"
fkClientIds"
item=
"fkC
lientId"
index=
"index"
open=
"("
close=
")"
separator=
","
>
#{
fkC
lientId}
</foreach>
</update>
...
...
core/src/main/resources/mapper/ImMessageMapper.xml
View file @
8103d6cb
...
...
@@ -49,6 +49,7 @@
AND im_inbox.receiver = #{clientId}
AND im_inbox.receiver_msg_status = 0
AND im_message.is_delete = 1
AND im_message.withdraw = 0
</select>
<select
id=
"getHistoryMsgConversationId"
resultType=
"com.wecloud.im.vo.OfflineMsgDto"
>
SELECT im_message.id AS msgId,
...
...
@@ -70,7 +71,7 @@
AND receiver_msg_status = 0) AS not_receiver_count
FROM `im_message`
INNER JOIN `im_client` ON `im_client`.id = `im_message`.sender
WHERE fk_conversation_id = #{param.conversationId} and im_message.is_delete = 1
WHERE fk_conversation_id = #{param.conversationId} and im_message.is_delete = 1
and im_message.withdraw = 0
<if
test=
"param.msgIdStart != null"
>
AND im_message.id > #{param.msgIdStart}
</if>
...
...
docs/db/feature-cluster增量.sql
View file @
8103d6cb
-- 在f
eature-cluster 2021年12月22日之后,需要执行的的sql增量脚本
-- 在f
eature-cluster 2021年12月22日之后,需要执行的的sql增量脚本
...
...
@@ -64,6 +64,12 @@ CREATE TABLE `im_friend_recommend`
ALTER
TABLE
`im_message`
ADD
COLUMN
`msg_type`
int
(
2
)
NULL
DEFAULT
NULL
COMMENT
'消息类型'
AFTER
`send_status`
;
-- by wenzhida 消息删除、群管理、群禁言管理
ALTER
TABLE
im_message
ADD
COLUMN
is_delete
tinyint
NOT
NULL
DEFAULT
'1'
COMMENT
'是否删除 1-未删除 2-删除'
;
ALTER
TABLE
im_conversation_members
ADD
COLUMN
role
tinyint
NOT
NULL
DEFAULT
'1'
COMMENT
'角色 1-普通群成员 2-管理员 3-群主'
;
ALTER
TABLE
im_conversation
ADD
COLUMN
muted
tinyint
NOT
NULL
DEFAULT
'1'
COMMENT
'禁言开关 1-未禁言 2-禁言'
;
ALTER
TABLE
im_conversation_members
ADD
COLUMN
muted
tinyint
NOT
NULL
DEFAULT
'1'
COMMENT
'禁言开关 1-未禁言 2-禁言'
;
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