我们有一个这样的需求:

群主能移除除了自己以外的所有群成员,

管理员能移除除群主和其他管理员的所有成员。

这里我们可以这样实现:

1
2
3
// 将共有的查询方法抽取成一个wrapper
LambdaQueryWrapper<GroupLink> wrapper = Wrappers.<GroupLink>lambdaQuery().eq(GroupLink::getGroupId, groupDTO.getId())
.in(GroupLink::getUserId, groupDTO.getGroupUserIds());

这是枚举:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Getter
@AllArgsConstructor
public enum GroupRoleTypeEnum {

/**
* Cheating the compiler and the god.
*/
NORMAL("普通用户"),
ADMIN("管理员"),
CREATOR("创建者");

private final String desc;

}
1
2
3
4
5
6
7
8
9
10
11
12
13
// 这里判断是群主
if (GroupRoleTypeEnum.CREATOR.equals(groupPersonal.getRole())) {
// wrapper拼接为群主的条件
wrapper.ne(GroupLink::getUserId, UserUtils.getUserId());
} else if (GroupRoleTypeEnum.ADMIN.equals(groupPersonal.getRole())) {
// 这里通过封装的GroupUtils获取其他管理员信息
List<Long> collectIds = GroupUtils.getAdminLink(groupDTO.getId()).stream().map(GroupLink::getUserId).collect(Collectors.toList());
if (CollUtil.isEmpty(collectIds)) {
return Result.ok();
}
// 这里拼接管理员的条件
wrapper.notIn(GroupLink::getUserId, collectIds);
}