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
c579f9c6
Commit
c579f9c6
authored
Feb 16, 2022
by
Future
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
群管理相关接口添加
parent
b4ad4ff1
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
312 additions
and
105 deletions
+312
-105
core/src/main/java/com/wecloud/im/controller/ImConversationController.java
+29
-56
core/src/main/java/com/wecloud/im/controller/ImMessageController.java
+2
-2
core/src/main/java/com/wecloud/im/entity/ImConversationMembers.java
+4
-0
core/src/main/java/com/wecloud/im/enums/GroupRoleEnum.java
+45
-0
core/src/main/java/com/wecloud/im/mapper/ImConversationMembersMapper.java
+8
-0
core/src/main/java/com/wecloud/im/param/GetReadersParam.java
+4
-0
core/src/main/java/com/wecloud/im/param/MsgDeleteParam.java
+0
-5
core/src/main/java/com/wecloud/im/param/SetAdminsParam.java
+29
-0
core/src/main/java/com/wecloud/im/param/TransferOwnerParam.java
+30
-0
core/src/main/java/com/wecloud/im/service/ImConversationMembersService.java
+9
-0
core/src/main/java/com/wecloud/im/service/ImConversationService.java
+17
-0
core/src/main/java/com/wecloud/im/service/ImMessageService.java
+1
-1
core/src/main/java/com/wecloud/im/service/impl/ImConversationMembersServiceImpl.java
+11
-0
core/src/main/java/com/wecloud/im/service/impl/ImConversationServiceImpl.java
+92
-30
core/src/main/java/com/wecloud/im/service/impl/ImMessageServiceImpl.java
+19
-10
core/src/main/resources/mapper/ImConversationMembersMapper.xml
+8
-0
docs/db/feature-cluster增量.sql
+4
-1
No files found.
core/src/main/java/com/wecloud/im/controller/ImConversationController.java
View file @
c579f9c6
package
com
.
wecloud
.
im
.
controller
;
import
com.wecloud.im.param.ImConversationQueryParam
;
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
;
...
...
@@ -8,13 +10,15 @@ 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.ImConversationCreateVo
;
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.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.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
...
...
@@ -98,6 +102,30 @@ public class ImConversationController extends BaseController {
}
/**
* 群主转让
*/
@PostMapping
(
"/transferOwner"
)
@ApiOperation
(
value
=
"群主转让"
,
notes
=
"权限:目前只有群主有权限操作"
)
public
ApiResult
<
Boolean
>
transferOwner
(
@RequestBody
TransferOwnerParam
param
)
{
Boolean
result
=
imConversationService
.
transferOwner
(
param
);
return
ApiResult
.
ok
(
result
);
}
/**
* 设置群管理员
*/
@PostMapping
(
"/setAdmins"
)
@ApiOperation
(
value
=
"设置群管理员"
,
notes
=
"权限:目前只有群主有权限操作"
)
public
ApiResult
<
Boolean
>
setAdmins
(
@RequestBody
SetAdminsParam
param
)
{
if
(
CollectionUtils
.
isEmpty
(
param
.
getClientIds
()))
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
Boolean
result
=
imConversationService
.
setAdmins
(
param
);
return
ApiResult
.
ok
(
result
);
}
/**
* 查询用户加入的所有会话 与每个会话的未读条数 成员
*/
@PostMapping
(
"/getList"
)
...
...
@@ -128,60 +156,5 @@ public class ImConversationController extends BaseController {
return
ApiResult
.
result
(
true
);
}
// /**
// * 添加会话表
// */
// @PostMapping("/add")
// @OperationLog(name = "添加会话表", type = OperationLogType.ADD)
// @ApiOperation(value = "添加会话表")
// public ApiResult<Boolean> addImConversation(@Validated(Add.class) @RequestBody ImConversation imConversation) throws Exception {
// boolean flag = imConversationService.saveImConversation(imConversation);
// return ApiResult.result(flag);
// }
// /**
// * 修改会话表
// */
// @PostMapping("/update")
// @OperationLog(name = "修改会话表", type = OperationLogType.UPDATE)
// @ApiOperation(value = "修改会话表")
// public ApiResult<Boolean> updateImConversation(@Validated(Update.class) @RequestBody ImConversation imConversation) throws Exception {
// boolean flag = imConversationService.updateImConversation(imConversation);
// return ApiResult.result(flag);
// }
//
// /**
// * 删除会话表
// */
// @PostMapping("/delete/{id}")
// @OperationLog(name = "删除会话表", type = OperationLogType.DELETE)
// @ApiOperation(value = "删除会话表")
// public ApiResult<Boolean> deleteImConversation(@PathVariable("id") Long id) throws Exception {
// boolean flag = imConversationService.deleteImConversation(id);
// return ApiResult.result(flag);
// }
//
// /**
// * 获取会话表详情
// */
// @GetMapping("/info/{id}")
// @OperationLog(name = "会话表详情", type = OperationLogType.INFO)
// @ApiOperation(value = "会话表详情")
// public ApiResult<ImConversationQueryVo> getImConversation(@PathVariable("id") Long id) throws Exception {
// ImConversationQueryVo imConversationQueryVo = imConversationService.getImConversationById(id);
// return ApiResult.ok(imConversationQueryVo);
// }
//
// /**
// * 会话表分页列表
// */
// @PostMapping("/getPageList")
// @OperationLog(name = "会话表分页列表", type = OperationLogType.PAGE)
// @ApiOperation(value = "会话表分页列表")
// public ApiResult<Paging<ImConversationQueryVo>> getImConversationPageList(@Validated @RequestBody ImConversationPageParam imConversationPageParam) throws Exception {
// Paging<ImConversationQueryVo> paging = imConversationService.getImConversationPageList(imConversationPageParam);
// return ApiResult.ok(paging);
// }
}
core/src/main/java/com/wecloud/im/controller/ImMessageController.java
View file @
c579f9c6
...
...
@@ -48,8 +48,8 @@ public class ImMessageController extends BaseController {
*/
@PostMapping
(
"/withdraw"
)
@ApiOperation
(
value
=
"消息撤回"
,
notes
=
"只能撤回客户端自己发送的消息"
)
public
ApiResult
<
Boolean
>
updateMsgWithdrawById
(
@RequestBody
ImMsgRecall
imMsgRecall
)
throws
Exception
{
return
imMessageService
.
updateMsgWithdrawById
(
imMsgRecall
);
public
ApiResult
<
Boolean
>
withdrawMsg
(
@RequestBody
ImMsgRecall
imMsgRecall
)
throws
Exception
{
return
imMessageService
.
withdrawMsg
(
imMsgRecall
);
}
/**
...
...
core/src/main/java/com/wecloud/im/entity/ImConversationMembers.java
View file @
c579f9c6
...
...
@@ -57,4 +57,8 @@ public class ImConversationMembers extends BaseEntity {
@ApiModelProperty
(
"会话中client的备注名"
)
private
String
clientRemarkName
;
@ApiModelProperty
(
"角色"
)
private
Integer
role
;
}
core/src/main/java/com/wecloud/im/enums/GroupRoleEnum.java
0 → 100644
View file @
c579f9c6
package
com
.
wecloud
.
im
.
enums
;
import
io.geekidea.springbootplus.framework.common.enums.BaseEnum
;
/**
* @Author wenzhida
* @Date 2022/2/16 15:27
* @Description 人员在群内角色枚举
*/
public
enum
GroupRoleEnum
implements
BaseEnum
{
/**
* 1-普通群成员
*/
NORMAL
(
1
,
"普通群成员"
),
/**
* 2 - 管理员
*/
ADMIN
(
2
,
"管理员"
),
/**
* 3 - 群主
*/
OWNER
(
3
,
"群主"
);
GroupRoleEnum
(
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 @
c579f9c6
...
...
@@ -7,6 +7,7 @@ import com.wecloud.im.entity.ImConversationMembers;
import
com.wecloud.im.param.ApiImConversationMembersQueryVo
;
import
com.wecloud.im.param.ImConversationMembersPageParam
;
import
com.wecloud.im.param.ImConversationMembersQueryVo
;
import
com.wecloud.im.param.SetAdminsParam
;
import
com.wecloud.im.vo.ImConversationMemberListVo
;
import
org.apache.ibatis.annotations.Param
;
import
org.springframework.stereotype.Repository
;
...
...
@@ -47,4 +48,11 @@ public interface ImConversationMembersMapper extends BaseMapper<ImConversationMe
IPage
<
ImConversationMembersQueryVo
>
getImConversationMembersPageList
(
@Param
(
"page"
)
Page
page
,
@Param
(
"param"
)
ImConversationMembersPageParam
imConversationMembersPageParam
);
List
<
Long
>
findThousandGroupsByClientId
(
@Param
(
"clientId"
)
Long
clientId
);
/**
* 批量设置群成员
* @param param
* @return
*/
void
setAdminsForConversation
(
@Param
(
"param"
)
SetAdminsParam
param
);
}
core/src/main/java/com/wecloud/im/param/GetReadersParam.java
View file @
c579f9c6
...
...
@@ -6,6 +6,8 @@ import io.swagger.annotations.ApiModelProperty;
import
lombok.Getter
;
import
lombok.Setter
;
import
javax.validation.constraints.NotNull
;
/**
* @Author wenzhida
* @Date 2022/2/15 20:45
...
...
@@ -18,9 +20,11 @@ public class GetReadersParam extends BaseEntity {
private
static
final
long
serialVersionUID
=
-
2415497107453497807L
;
@NotNull
(
message
=
"会话id不能为空"
)
@ApiModelProperty
(
"会话id"
)
private
Long
conversationId
;
@NotNull
(
message
=
"消息id不能为空"
)
@ApiModelProperty
(
"消息id"
)
private
Long
msgId
;
...
...
core/src/main/java/com/wecloud/im/param/MsgDeleteParam.java
View file @
c579f9c6
package
com
.
wecloud
.
im
.
param
;
import
com.wecloud.im.ws.model.request.PushVO
;
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
;
...
...
@@ -25,7 +23,4 @@ public class MsgDeleteParam extends BaseEntity {
@ApiModelProperty
(
"消息id列表"
)
private
List
<
Long
>
msgIds
;
@ApiModelProperty
(
"自定义推送字段"
)
private
PushVO
push
;
}
core/src/main/java/com/wecloud/im/param/SetAdminsParam.java
0 → 100644
View file @
c579f9c6
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
java.util.List
;
/**
* @Author wenzhida
* @Date 2022/2/16 17:32
* @Description 设置群管理员入参
*/
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@ApiModel
(
value
=
"设置群管理员入参"
)
public
class
SetAdminsParam
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
-
5998535761252546365L
;
@ApiModelProperty
(
"会话表id"
)
private
Long
conversationId
;
@ApiModelProperty
(
"要设置为群管理员的clientId列表"
)
private
List
<
String
>
clientIds
;
}
core/src/main/java/com/wecloud/im/param/TransferOwnerParam.java
0 → 100644
View file @
c579f9c6
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/2/16 17:32
* @Description 群主转让入参
*/
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@ApiModel
(
value
=
"群主转让入参"
)
public
class
TransferOwnerParam
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
-
1002684137058458479L
;
@ApiModelProperty
(
"会话表id"
)
private
Long
conversationId
;
@ApiModelProperty
(
"即将成为群主的clientId"
)
private
String
clientId
;
}
core/src/main/java/com/wecloud/im/service/ImConversationMembersService.java
View file @
c579f9c6
...
...
@@ -8,6 +8,7 @@ import com.wecloud.im.param.ImConvMemeClientRemarkNameParam;
import
com.wecloud.im.param.ImConversationMembersListParam
;
import
com.wecloud.im.param.ImConversationMembersPageParam
;
import
com.wecloud.im.param.ImConversationMembersQueryVo
;
import
com.wecloud.im.param.SetAdminsParam
;
import
com.wecloud.im.param.add.ImConversationMemAttrUpdate
;
import
com.wecloud.im.vo.ImConversationMemberListVo
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
...
...
@@ -101,4 +102,12 @@ public interface ImConversationMembersService extends BaseService<ImConversation
* @return
*/
List
<
Long
>
findThousandGroupsByClientId
(
Long
clientId
);
/**
* 批量设置群成员
* @param param
* @return
*/
void
setAdminsForConversation
(
SetAdminsParam
param
);
}
core/src/main/java/com/wecloud/im/service/ImConversationService.java
View file @
c579f9c6
...
...
@@ -5,6 +5,8 @@ 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.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
;
...
...
@@ -16,6 +18,7 @@ import com.wecloud.im.vo.ConversationVo;
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
org.springframework.web.bind.annotation.RequestBody
;
import
java.util.List
;
...
...
@@ -69,6 +72,20 @@ public interface ImConversationService extends BaseService<ImConversation> {
ApiResult
<
Boolean
>
leaveConversation
(
ImClientLeaveConversation
imClientToConversation
)
throws
Exception
;
/**
* 群主转让
* @param param
* @return
*/
Boolean
transferOwner
(
@RequestBody
TransferOwnerParam
param
);
/**
* 群主转让
* @param param
* @return
*/
Boolean
setAdmins
(
@RequestBody
SetAdminsParam
param
);
/**
* 添加或修改会话名称
*/
ApiResult
<
Boolean
>
saveOrUpdateName
(
ImConversationNameUpdate
imConversationNameUpdate
)
throws
Exception
;
...
...
core/src/main/java/com/wecloud/im/service/ImMessageService.java
View file @
c579f9c6
...
...
@@ -52,7 +52,7 @@ public interface ImMessageService extends BaseService<ImMessage> {
*
* @return
*/
ApiResult
<
Boolean
>
updateMsgWithdrawById
(
ImMsgRecall
imMsgRecall
);
ApiResult
<
Boolean
>
withdrawMsg
(
ImMsgRecall
imMsgRecall
);
/**
* 删除消息
...
...
core/src/main/java/com/wecloud/im/service/impl/ImConversationMembersServiceImpl.java
View file @
c579f9c6
...
...
@@ -15,6 +15,7 @@ import com.wecloud.im.param.ImConvMemeClientRemarkNameParam;
import
com.wecloud.im.param.ImConversationMembersListParam
;
import
com.wecloud.im.param.ImConversationMembersPageParam
;
import
com.wecloud.im.param.ImConversationMembersQueryVo
;
import
com.wecloud.im.param.SetAdminsParam
;
import
com.wecloud.im.param.add.ImConversationMemAttrUpdate
;
import
com.wecloud.im.service.ImApplicationService
;
import
com.wecloud.im.service.ImClientService
;
...
...
@@ -219,4 +220,14 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
return
imConversationMembersMapper
.
findThousandGroupsByClientId
(
clientId
);
}
/**
* 批量设置群成员
* @param param
* @return
*/
@Override
public
void
setAdminsForConversation
(
SetAdminsParam
param
)
{
imConversationMembersMapper
.
setAdminsForConversation
(
param
);
}
}
core/src/main/java/com/wecloud/im/service/impl/ImConversationServiceImpl.java
View file @
c579f9c6
...
...
@@ -12,10 +12,13 @@ import com.wecloud.im.entity.ImConversationMembers;
import
com.wecloud.im.entity.ImMessage
;
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.ImConversationPageParam
;
import
com.wecloud.im.param.ImConversationQueryParam
;
import
com.wecloud.im.param.ImConversationQueryVo
;
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
;
...
...
@@ -27,8 +30,8 @@ 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.ImConversationCreateVo
;
import
com.wecloud.im.vo.ConversationVo
;
import
com.wecloud.im.vo.ImConversationCreateVo
;
import
com.wecloud.im.vo.OfflineMsgDto
;
import
com.wecloud.im.ws.enums.MsgTypeEnum
;
import
com.wecloud.im.ws.enums.WsResponseCmdEnum
;
...
...
@@ -39,6 +42,7 @@ import com.wecloud.utils.SnowflakeUtil;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.enums.BaseEnum
;
import
io.geekidea.springbootplus.framework.common.exception.BusinessException
;
import
io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl
;
import
io.geekidea.springbootplus.framework.core.pagination.PageInfo
;
import
io.geekidea.springbootplus.framework.core.pagination.Paging
;
...
...
@@ -100,27 +104,23 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ApiResult
<
ImConversationCreateVo
>
createImConversation
(
ImConversationCreate
imConversationCreate
)
{
ImClient
createClient
=
imClientService
.
getCurentClient
();
if
(
imConversationCreate
.
getClientIds
().
size
()
==
0
)
{
log
.
info
(
"没有成员"
);
return
ApiResult
.
result
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
if
(
CollectionUtils
.
isEmpty
(
imConversationCreate
.
getClientIds
()))
{
log
.
info
(
"未找到群成员信息"
);
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
if
(
BaseEnum
.
valueOf
(
ChatTypeEnum
.
class
,
imConversationCreate
.
getChatType
())
==
null
)
{
log
.
info
(
"会话类型不存在"
);
return
ApiResult
.
result
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
// 成员不存在,不能创建会话
for
(
String
i
d
:
imConversationCreate
.
getClientIds
())
{
for
(
String
clientI
d
:
imConversationCreate
.
getClientIds
())
{
ImClient
imClient
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
.
select
(
ImClient:
:
getId
)
.
eq
(
ImClient:
:
getFkAppid
,
createClient
.
getFkAppid
())
.
eq
(
ImClient:
:
getClientId
,
i
d
));
.
eq
(
ImClient:
:
getClientId
,
clientI
d
));
if
(
imClient
==
null
)
{
log
.
info
(
"成员不存在,不能创建会话 client
2 == null"
);
log
.
info
(
"成员不存在,不能创建会话 client
Id:{}"
,
clientId
);
return
ApiResult
.
result
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
}
}
...
...
@@ -150,7 +150,6 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
}
}
}
else
{
//创建重复一对一会话时对比扩展字段 1是
if
(
imApplication
.
getContrastExtendedFieldStatus
()
==
1
)
{
...
...
@@ -207,6 +206,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
imConversationMembers
.
setFkAppid
(
createClient
.
getFkAppid
());
imConversationMembers
.
setFkConversationId
(
imConversationId
);
imConversationMembers
.
setFkClientId
(
creator
);
imConversationMembers
.
setRole
(
GroupRoleEnum
.
OWNER
.
getCode
());
imConversationMembersService
.
save
(
imConversationMembers
);
// 将他人添加到会话
...
...
@@ -221,6 +221,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
imConversationMembers2
.
setFkAppid
(
createClient
.
getFkAppid
());
imConversationMembers2
.
setFkConversationId
(
imConversationId
);
imConversationMembers2
.
setFkClientId
(
client2
.
getId
());
imConversationMembers2
.
setRole
(
GroupRoleEnum
.
NORMAL
.
getCode
());
imConversationMembersService
.
save
(
imConversationMembers2
);
}
...
...
@@ -283,6 +284,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
imConversationMembers2
.
setFkAppid
(
imApplication
.
getId
());
imConversationMembers2
.
setFkConversationId
(
imClientToConversation
.
getConversationId
());
imConversationMembers2
.
setFkClientId
(
clientToConversation
.
getId
());
imConversationMembers2
.
setRole
(
GroupRoleEnum
.
NORMAL
.
getCode
());
imConversationMembersService
.
save
(
imConversationMembers2
);
needAddCount
++;
...
...
@@ -375,16 +377,18 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
ImClient
imClientSender
=
imClientService
.
getCurentClient
();
// 判断是否为群主
ImConversation
imConversationById
=
imConversationService
.
getById
(
imClientToConversation
.
getConversationId
());
if
(
imConversationById
==
null
||
!
imConversationById
.
getCreator
().
equals
(
imClientSender
.
getId
()))
{
ImConversationMembers
conversationMember
=
imConversationMembersService
.
getOne
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
())
.
eq
(
ImConversationMembers:
:
getFkClientId
,
imClientSender
.
getId
())
);
if
(
conversationMember
==
null
||
!
GroupRoleEnum
.
OWNER
.
getCode
().
equals
(
conversationMember
.
getRole
()))
{
return
ApiResult
.
result
(
false
);
}
// 查询该会话所有成员
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkAppid
,
imApplication
.
getId
())
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
())
.
notIn
(
ImConversationMembers:
:
getId
,
imClientSender
.
getId
())
);
...
...
@@ -396,11 +400,10 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
int
needAddCount
=
0
;
// 将client从会话移除
for
(
String
id
:
imClientToConversation
.
getClientIds
())
{
for
(
String
clientId
:
imClientToConversation
.
getClientIds
())
{
ImClient
client2
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
.
eq
(
ImClient:
:
getFkAppid
,
imApplication
.
getId
())
.
eq
(
ImClient:
:
getClientId
,
i
d
));
.
eq
(
ImClient:
:
getClientId
,
clientI
d
));
// 判断用户是否已经在该会话
ImConversationMembers
members
=
imConversationMembersService
.
getOne
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
...
...
@@ -493,7 +496,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
ImConversation
imConversationById
=
imConversationService
.
getById
(
imClientToConversation
.
getConversationId
());
if
(
imConversationById
==
null
)
{
throw
new
Exception
(
"imConversationById == null
"
);
throw
new
BusinessException
(
"查无应用消息
"
);
}
// 查询该会话所有成员
...
...
@@ -506,7 +509,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
if
(
membersList
.
isEmpty
())
{
log
.
info
(
"membersList为空,toConversationId:"
+
imClientToConversation
.
getConversationId
());
throw
new
Exception
(
"deleteImConversationMembers
"
);
throw
new
BusinessException
(
"会话中查无群人员
"
);
}
// 判断用户是否在该会话
...
...
@@ -580,20 +583,79 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
channelSender
.
sendMsg
(
responseModel
,
imClientReceiver
.
getId
());
}
// 群主退出 是否需要转移给下一个人
if
(
imConversationById
.
getCreator
().
equals
(
imClientSender
.
getId
())
&&
imClientToConversation
.
getTransfer
())
{
// 群主退出 转移给下一个人
if
(
GroupRoleEnum
.
OWNER
.
getCode
().
equals
(
members
.
getRole
()))
{
ImConversationMembers
conversationMember
=
membersList
.
get
(
0
);
imConversationById
.
setCreator
(
conversationMember
.
getFkClientId
());
conversationMember
.
setRole
(
GroupRoleEnum
.
OWNER
.
getCode
());
// 群主转移给下一个人
imConversationMembersService
.
updateById
(
conversationMember
);
}
return
ApiResult
.
ok
();
}
// 创建者权限转移给下一个人
imConversationService
.
updateById
(
imConversationById
);
}
/**
* 群主转让
*
* @param param
* @return
*/
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
Boolean
transferOwner
(
TransferOwnerParam
param
)
{
// shiro线程中获取当前token
JwtToken
curentJwtToken
=
JwtUtil
.
getCurentJwtToken
();
// 根据appKey查询application
ImApplication
imApplication
=
imApplicationService
.
getCacheAppByAppKey
(
curentJwtToken
.
getAppKey
());
ImClient
imClientSender
=
imClientService
.
getCurentClient
();
// 判断操作人是否为群主
ImConversationMembers
currentMember
=
imConversationMembersService
.
getOne
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
param
.
getConversationId
())
.
eq
(
ImConversationMembers:
:
getFkClientId
,
imClientSender
.
getId
())
);
if
(
currentMember
==
null
||
!
GroupRoleEnum
.
OWNER
.
getCode
().
equals
(
currentMember
.
getRole
()))
{
throw
new
BusinessException
(
"非群主无权操作"
);
}
// 将自己设置为普通群成员
currentMember
.
setRole
(
GroupRoleEnum
.
NORMAL
.
getCode
());
imConversationMembersService
.
updateById
(
currentMember
);
// 将入参成员设置为群主
ImClient
transferClient
=
imClientService
.
getCacheImClient
(
imApplication
.
getId
(),
param
.
getClientId
());
ImConversationMembers
transferMember
=
imConversationMembersService
.
getOne
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
param
.
getConversationId
())
.
eq
(
ImConversationMembers:
:
getFkClientId
,
transferClient
.
getId
())
);
transferMember
.
setRole
(
GroupRoleEnum
.
OWNER
.
getCode
());
imConversationMembersService
.
updateById
(
transferMember
);
return
true
;
}
return
ApiResult
.
ok
();
/**
* 群主转让
* @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
();
// 判断操作人是否为群主
ImConversationMembers
currentMember
=
imConversationMembersService
.
getOne
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
param
.
getConversationId
())
.
eq
(
ImConversationMembers:
:
getFkClientId
,
imClientSender
.
getId
())
);
if
(
currentMember
==
null
||
!
GroupRoleEnum
.
OWNER
.
getCode
().
equals
(
currentMember
.
getRole
()))
{
throw
new
BusinessException
(
"非群主无权操作"
);
}
imConversationMembersService
.
setAdminsForConversation
(
param
);
return
true
;
}
@Override
...
...
core/src/main/java/com/wecloud/im/service/impl/ImMessageServiceImpl.java
View file @
c579f9c6
...
...
@@ -5,6 +5,7 @@ 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.google.common.collect.Maps
;
import
com.wecloud.im.entity.ImApiMessageOnlineSend
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImClient
;
...
...
@@ -56,7 +57,9 @@ import org.springframework.transaction.annotation.Transactional;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* 消息存储表 服务实现类
...
...
@@ -197,7 +200,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ApiResult
<
Boolean
>
updateMsgWithdrawById
(
ImMsgRecall
imMsgRecall
)
{
public
ApiResult
<
Boolean
>
withdrawMsg
(
ImMsgRecall
imMsgRecall
)
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
// 查询imApplication
ImApplication
imApplication
=
imApplicationService
.
getCacheById
(
currentClient
.
getFkAppid
());
...
...
@@ -214,13 +217,16 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
if
(
messageById
.
getWithdraw
())
{
return
ApiResult
.
ok
();
}
// 修改消息体
messageById
.
setWithdraw
(
Boolean
.
TRUE
);
messageById
.
setWithdrawTime
(
new
Date
());
// 清空消息
messageById
.
setContent
(
"{}"
);
boolean
saveOk
=
this
.
updateById
(
messageById
);
ImClient
msgOwner
=
imClientService
.
getCacheImClient
(
messageById
.
getSender
());
if
(
msgOwner
==
null
)
{
return
ApiResult
.
fail
(
"未查找到消息发送者"
);
}
if
(
saveOk
)
{
// 查询该会话所有成员
...
...
@@ -262,7 +268,9 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
imMessageOnlineSend
.
setType
(
MsgTypeEnum
.
MSG_WITHDRAW
.
getUriCode
());
imMessageOnlineSend
.
setMsgId
(
messageById
.
getId
());
imMessageOnlineSend
.
setSender
(
currentClient
.
getClientId
());
imMessageOnlineSend
.
setContent
(
null
);
Map
<
String
,
Object
>
contentMap
=
Maps
.
newHashMap
();
contentMap
.
put
(
"msgOwner"
,
msgOwner
.
getClientId
());
imMessageOnlineSend
.
setContent
(
contentMap
);
imMessageOnlineSend
.
setConversationId
(
conversationMembers
.
getFkConversationId
());
imMessageOnlineSend
.
setWithdraw
(
Boolean
.
TRUE
);
imMessageOnlineSend
.
setEvent
(
Boolean
.
TRUE
);
...
...
@@ -317,6 +325,11 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
message
.
setIsDelete
(
2
);
message
.
setUpdateDate
(
new
Date
());
boolean
saveOk
=
this
.
updateById
(
message
);
ImClient
msgOwner
=
imClientService
.
getCacheImClient
(
message
.
getSender
());
if
(
msgOwner
==
null
)
{
return
ApiResult
.
fail
(
"未查找到消息发送者"
);
}
if
(
saveOk
)
{
// 查询该会话所有成员
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
...
...
@@ -356,7 +369,9 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
imMessageOnlineSend
.
setType
(
MsgTypeEnum
.
MSG_DELETE
.
getUriCode
());
imMessageOnlineSend
.
setMsgId
(
message
.
getId
());
imMessageOnlineSend
.
setSender
(
currentClient
.
getClientId
());
imMessageOnlineSend
.
setContent
(
null
);
Map
<
String
,
Object
>
contentMap
=
Maps
.
newHashMap
();
contentMap
.
put
(
"msgOwner"
,
msgOwner
.
getClientId
());
imMessageOnlineSend
.
setContent
(
contentMap
);
imMessageOnlineSend
.
setConversationId
(
conversationMembers
.
getFkConversationId
());
imMessageOnlineSend
.
setEvent
(
Boolean
.
TRUE
);
...
...
@@ -369,12 +384,6 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
responseModel
.
setData
(
imMessageOnlineSend
);
responseModel
.
setReqId
(
null
);
channelSender
.
sendMsg
(
responseModel
,
imClientReceiver
.
getId
());
// 获取自定义推送字段
PushVO
pushVO
=
param
.
getPush
();
// 异步推送系统通知消息
asyncPush
.
push
(
pushVO
,
imClientReceiver
,
imApplication
);
}
return
ApiResult
.
ok
();
}
else
{
...
...
core/src/main/resources/mapper/ImConversationMembersMapper.xml
View file @
c579f9c6
...
...
@@ -49,4 +49,12 @@
where b.fk_client_id = #{clientId} and a.chat_type = 3
</select>
<update
id=
"setAdminsForConversation"
>
update im_conversation_members set role = 2, update_time=NOW()
where fk_conversation_id = #{conversationId} and fk_client_id in
<foreach
collection=
"clientIds"
item=
"clientId"
index=
"index"
open=
"("
close=
")"
separator=
","
>
#{clientId}
</foreach>
</update>
</mapper>
docs/db/feature-cluster增量.sql
View file @
c579f9c6
-- 在f
eature-cluster 2021年12月22日之后,需要执行的的sql增量脚本
-- 在f
eature-cluster 2021年12月22日之后,需要执行的的sql增量脚本
...
...
@@ -65,3 +65,5 @@ ALTER TABLE `im_message`
ADD
COLUMN
`msg_type`
int
(
2
)
NULL
DEFAULT
NULL
COMMENT
'消息类型'
AFTER
`send_status`
;
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-群主'
;
\ No newline at end of file
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