|
|
|
@ -12,6 +12,7 @@ import org.apache.logging.log4j.util.Strings; |
|
|
|
import org.dromara.common.core.utils.StringUtils; |
|
|
|
import org.dromara.common.mybatis.core.page.PageQuery; |
|
|
|
import org.dromara.common.mybatis.core.page.TableDataInfo; |
|
|
|
import org.dromara.common.satoken.utils.LoginHelper; |
|
|
|
import org.dromara.im.constant.ImConstant; |
|
|
|
import org.dromara.im.constant.ImRedisKey; |
|
|
|
import org.dromara.im.domain.ImUser; |
|
|
|
@ -22,10 +23,13 @@ import org.dromara.im.domain.dto.ImUserUnbanDto; |
|
|
|
import org.dromara.im.domain.vo.ImUserVo; |
|
|
|
import org.dromara.im.mapper.ImUserMapper; |
|
|
|
import org.dromara.im.mq.ImRedisMQTemplate; |
|
|
|
import org.dromara.im.service.IImAgentService; |
|
|
|
import org.dromara.im.service.IImUserService; |
|
|
|
import org.dromara.im.util.LambdaQueryWrapperHelper; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
import java.util.*; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
/** |
|
|
|
* 用户Service业务层处理 |
|
|
|
@ -40,6 +44,7 @@ public class ImUserServiceImpl implements IImUserService { |
|
|
|
|
|
|
|
private final ImRedisMQTemplate redisMQTemplate; |
|
|
|
private final ImUserMapper baseMapper; |
|
|
|
private final IImAgentService imAgentService; |
|
|
|
|
|
|
|
/** |
|
|
|
* 查询用户 |
|
|
|
@ -49,7 +54,14 @@ public class ImUserServiceImpl implements IImUserService { |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public ImUserVo queryById(Long id){ |
|
|
|
return baseMapper.selectVoById(id); |
|
|
|
LambdaQueryWrapper<ImUser> lqw = Wrappers.lambdaQuery(); |
|
|
|
lqw.eq(ImUser::getId, id); |
|
|
|
|
|
|
|
if(!LoginHelper.isSuperAdmin()) { |
|
|
|
LambdaQueryWrapperHelper.appendToken(lqw, ImUser::getUniqueToken); |
|
|
|
} |
|
|
|
|
|
|
|
return baseMapper.selectVoOne(lqw); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
@ -84,6 +96,11 @@ public class ImUserServiceImpl implements IImUserService { |
|
|
|
public void ban(ImUserBanDto dto) { |
|
|
|
LambdaUpdateWrapper<ImUser> wrapper = Wrappers.lambdaUpdate(); |
|
|
|
wrapper.eq(ImUser::getId, dto.getId()); |
|
|
|
|
|
|
|
if(!LoginHelper.isSuperAdmin()) { |
|
|
|
wrapper.eq(ImUser::getUniqueToken, imAgentService.getTokenByUserId()); |
|
|
|
} |
|
|
|
|
|
|
|
wrapper.set(ImUser::getIsBanned, true); |
|
|
|
wrapper.set(ImUser::getReason, dto.getReason()); |
|
|
|
baseMapper.update(wrapper); |
|
|
|
@ -95,6 +112,11 @@ public class ImUserServiceImpl implements IImUserService { |
|
|
|
public void unban(ImUserUnbanDto dto) { |
|
|
|
LambdaUpdateWrapper<ImUser> wrapper = Wrappers.lambdaUpdate(); |
|
|
|
wrapper.eq(ImUser::getId, dto.getId()); |
|
|
|
|
|
|
|
if(!LoginHelper.isSuperAdmin()) { |
|
|
|
wrapper.eq(ImUser::getUniqueToken, imAgentService.getTokenByUserId()); |
|
|
|
} |
|
|
|
|
|
|
|
wrapper.set(ImUser::getIsBanned, false); |
|
|
|
wrapper.set(ImUser::getReason, Strings.EMPTY); |
|
|
|
baseMapper.update(wrapper); |
|
|
|
@ -106,6 +128,10 @@ public class ImUserServiceImpl implements IImUserService { |
|
|
|
wrapper.like(StringUtils.isNotBlank(bo.getUserName()), ImUser::getUserName, bo.getUserName()); |
|
|
|
wrapper.like(StringUtils.isNotBlank(bo.getNickName()), ImUser::getNickName, bo.getNickName()); |
|
|
|
|
|
|
|
if(!LoginHelper.isSuperAdmin()) { |
|
|
|
LambdaQueryWrapperHelper.appendToken(wrapper, ImUser::getUniqueToken); |
|
|
|
} |
|
|
|
|
|
|
|
// 处理标签 ID 查询,支持多个标签 ID 的 AND 匹配
|
|
|
|
if (StringUtils.isNotBlank(bo.getLabelIds())) { |
|
|
|
String[] labelArray = bo.getLabelIds().split(","); |
|
|
|
@ -136,6 +162,11 @@ public class ImUserServiceImpl implements IImUserService { |
|
|
|
if(StrUtil.isNotEmpty(name)){ |
|
|
|
queryWrapper.like(ImUser::getUserName, name); |
|
|
|
} |
|
|
|
|
|
|
|
if(!LoginHelper.isSuperAdmin()) { |
|
|
|
LambdaQueryWrapperHelper.appendToken(queryWrapper, ImUser::getUniqueToken); |
|
|
|
} |
|
|
|
|
|
|
|
queryWrapper.select(ImUser::getId, ImUser::getUserName); |
|
|
|
queryWrapper.orderByDesc(ImUser::getId); |
|
|
|
queryWrapper.last("limit 10"); |
|
|
|
@ -147,6 +178,11 @@ public class ImUserServiceImpl implements IImUserService { |
|
|
|
// 取出用户名或昵称匹配的前10条
|
|
|
|
LambdaQueryWrapper<ImUser> queryWrapper = Wrappers.lambdaQuery(); |
|
|
|
queryWrapper.in(ImUser::getId, ids); |
|
|
|
|
|
|
|
if(!LoginHelper.isSuperAdmin()) { |
|
|
|
LambdaQueryWrapperHelper.appendToken(queryWrapper, ImUser::getUniqueToken); |
|
|
|
} |
|
|
|
|
|
|
|
return baseMapper.selectVoList(queryWrapper); |
|
|
|
} |
|
|
|
|
|
|
|
@ -161,6 +197,13 @@ public class ImUserServiceImpl implements IImUserService { |
|
|
|
if (days == null || days <= 0) { |
|
|
|
days = 7; // 默认统计最近7天
|
|
|
|
} |
|
|
|
|
|
|
|
// 如果不是超级管理员,则使用带uniqueToken的方法
|
|
|
|
if(!LoginHelper.isSuperAdmin()) { |
|
|
|
String uniqueToken = imAgentService.getTokenByUserId(); |
|
|
|
return baseMapper.getDailyRegistrationCount(days, uniqueToken); |
|
|
|
} |
|
|
|
|
|
|
|
return baseMapper.getDailyRegistrationCount(days); |
|
|
|
} |
|
|
|
|
|
|
|
@ -171,7 +214,13 @@ public class ImUserServiceImpl implements IImUserService { |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public Long getTotalUserCount() { |
|
|
|
return baseMapper.selectCount(null); |
|
|
|
LambdaQueryWrapper<ImUser> wrapper = Wrappers.lambdaQuery(); |
|
|
|
|
|
|
|
if(!LoginHelper.isSuperAdmin()) { |
|
|
|
LambdaQueryWrapperHelper.appendToken(wrapper, ImUser::getUniqueToken); |
|
|
|
} |
|
|
|
|
|
|
|
return baseMapper.selectCount(wrapper); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -184,6 +233,11 @@ public class ImUserServiceImpl implements IImUserService { |
|
|
|
public Long getDailyActiveUserCount() { |
|
|
|
LambdaQueryWrapper<ImUser> wrapper = Wrappers.lambdaQuery(); |
|
|
|
wrapper.ge(ImUser::getLastLoginTime, DateUtils.addDays(new Date(), -1)); |
|
|
|
|
|
|
|
if(!LoginHelper.isSuperAdmin()) { |
|
|
|
LambdaQueryWrapperHelper.appendToken(wrapper, ImUser::getUniqueToken); |
|
|
|
} |
|
|
|
|
|
|
|
return baseMapper.selectCount(wrapper); |
|
|
|
} |
|
|
|
|
|
|
|
@ -196,6 +250,11 @@ public class ImUserServiceImpl implements IImUserService { |
|
|
|
public Long getWeeklyActiveUserCount() { |
|
|
|
LambdaQueryWrapper<ImUser> wrapper = Wrappers.lambdaQuery(); |
|
|
|
wrapper.ge(ImUser::getLastLoginTime, DateUtils.addDays(new Date(), -7)); |
|
|
|
|
|
|
|
if(!LoginHelper.isSuperAdmin()) { |
|
|
|
LambdaQueryWrapperHelper.appendToken(wrapper, ImUser::getUniqueToken); |
|
|
|
} |
|
|
|
|
|
|
|
return baseMapper.selectCount(wrapper); |
|
|
|
} |
|
|
|
|
|
|
|
@ -208,11 +267,22 @@ public class ImUserServiceImpl implements IImUserService { |
|
|
|
public Long getMonthlyActiveUserCount() { |
|
|
|
LambdaQueryWrapper<ImUser> wrapper = Wrappers.lambdaQuery(); |
|
|
|
wrapper.ge(ImUser::getLastLoginTime, DateUtils.addDays(new Date(), -30)); |
|
|
|
|
|
|
|
if(!LoginHelper.isSuperAdmin()) { |
|
|
|
LambdaQueryWrapperHelper.appendToken(wrapper, ImUser::getUniqueToken); |
|
|
|
} |
|
|
|
|
|
|
|
return baseMapper.selectCount(wrapper); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void save(ImUser user) { |
|
|
|
// 如果不是超级管理员,则设置 uniqueToken
|
|
|
|
if(!LoginHelper.isSuperAdmin()) { |
|
|
|
if (user != null) { |
|
|
|
user.setUniqueToken(imAgentService.getTokenByUserId()); |
|
|
|
} |
|
|
|
} |
|
|
|
baseMapper.insert(user); |
|
|
|
} |
|
|
|
|
|
|
|
@ -220,6 +290,11 @@ public class ImUserServiceImpl implements IImUserService { |
|
|
|
public ImUser findUserByUserName(String userName) { |
|
|
|
LambdaQueryWrapper<ImUser> wrapper = Wrappers.lambdaQuery(); |
|
|
|
wrapper.eq(ImUser::getUserName, userName); |
|
|
|
|
|
|
|
if(!LoginHelper.isSuperAdmin()) { |
|
|
|
LambdaQueryWrapperHelper.appendToken(wrapper, ImUser::getUniqueToken); |
|
|
|
} |
|
|
|
|
|
|
|
return baseMapper.selectOne(wrapper); |
|
|
|
} |
|
|
|
|
|
|
|
@ -233,12 +308,36 @@ public class ImUserServiceImpl implements IImUserService { |
|
|
|
|
|
|
|
@Override |
|
|
|
public void removeCustomer(List<Long> ids) { |
|
|
|
baseMapper.deleteByIds(ids); |
|
|
|
LambdaUpdateWrapper<ImUser> wrapper = Wrappers.lambdaUpdate(); |
|
|
|
wrapper.in(ImUser::getId, ids); |
|
|
|
|
|
|
|
if(!LoginHelper.isSuperAdmin()) { |
|
|
|
wrapper.eq(ImUser::getUniqueToken, imAgentService.getTokenByUserId()); |
|
|
|
} |
|
|
|
|
|
|
|
baseMapper.delete(wrapper); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void updateCustomerById(ImUser bo) { |
|
|
|
baseMapper.updateById(bo); |
|
|
|
if (bo == null) { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
LambdaUpdateWrapper<ImUser> updateWrapper = new LambdaUpdateWrapper<>(); |
|
|
|
updateWrapper.eq(ImUser::getId, bo.getId()); |
|
|
|
|
|
|
|
if(!LoginHelper.isSuperAdmin()) { |
|
|
|
updateWrapper.eq(ImUser::getUniqueToken, imAgentService.getTokenByUserId()); |
|
|
|
} |
|
|
|
|
|
|
|
updateWrapper.set(ImUser::getNickName, bo.getNickName()); |
|
|
|
updateWrapper.set(ImUser::getLabelIds, bo.getLabelIds()); |
|
|
|
updateWrapper.set(ImUser::getGroupIds, bo.getGroupIds()); |
|
|
|
updateWrapper.set(ImUser::getHeadImage, bo.getHeadImage()); |
|
|
|
updateWrapper.set(ImUser::getHeadImageThumb, bo.getHeadImageThumb()); |
|
|
|
|
|
|
|
baseMapper.update(null, updateWrapper); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@ -253,6 +352,16 @@ public class ImUserServiceImpl implements IImUserService { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//不是超级管理员,则校验 token 是否一致
|
|
|
|
if(!LoginHelper.isSuperAdmin()) { |
|
|
|
List<ImUser> vaildList = baseMapper.selectByIds(list.stream().map(BatchUpdateUserDto::getId).collect(Collectors.toList())); |
|
|
|
String uniqueToken = imAgentService.getTokenByUserId(); |
|
|
|
for(ImUser user : vaildList) { |
|
|
|
if(!uniqueToken.equals(user.getUniqueToken())) |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
List<ImUser> temp = new ArrayList<>(); |
|
|
|
for(BatchUpdateUserDto dto : list) { |
|
|
|
ImUser user = new ImUser(); |
|
|
|
|