update 优化 框架整体提高查询性能

This commit is contained in:
疯狂的狮子Li
2023-12-26 00:46:34 +08:00
parent 363af040d6
commit 9c84530593
30 changed files with 122 additions and 201 deletions

View File

@ -97,7 +97,7 @@ public class SysClientController extends BaseController {
@Log(title = "客户端管理", businessType = BusinessType.UPDATE)
@PutMapping("/changeStatus")
public R<Void> changeStatus(@RequestBody SysClientBo bo) {
return toAjax(sysClientService.updateUserStatus(bo.getId(), bo.getStatus()));
return toAjax(sysClientService.updateUserStatus(bo.getClientId(), bo.getStatus()));
}
/**

View File

@ -19,6 +19,7 @@ import org.dromara.system.domain.vo.ProfileVo;
import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.service.ISysOssService;
import org.dromara.system.service.ISysRoleService;
import org.dromara.system.service.ISysUserService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType;
@ -40,6 +41,7 @@ import java.util.Arrays;
public class SysProfileController extends BaseController {
private final ISysUserService userService;
private final ISysRoleService roleService;
private final ISysOssService ossService;
/**
@ -48,10 +50,11 @@ public class SysProfileController extends BaseController {
@GetMapping
public R<ProfileVo> profile() {
SysUserVo user = userService.selectUserById(LoginHelper.getUserId());
user.setRoles(roleService.selectRolesByUserId(user.getUserId()));
ProfileVo profileVo = new ProfileVo();
profileVo.setUser(user);
profileVo.setRoleGroup(userService.selectUserRoleGroup(user.getUserName()));
profileVo.setPostGroup(userService.selectUserPostGroup(user.getUserName()));
profileVo.setRoleGroup(userService.selectUserRoleGroup(user.getUserId()));
profileVo.setPostGroup(userService.selectUserPostGroup(user.getUserId()));
return R.ok(profileVo);
}

View File

@ -116,6 +116,7 @@ public class SysUserController extends BaseController {
if (ObjectUtil.isNull(user)) {
return R.fail("没有权限访问用户数据!");
}
user.setRoles(roleService.selectRolesByUserId(user.getUserId()));
userInfoVo.setUser(user);
userInfoVo.setPermissions(loginUser.getMenuPermission());
userInfoVo.setRoles(loginUser.getRolePermission());
@ -142,7 +143,7 @@ public class SysUserController extends BaseController {
if (ObjectUtil.isNotNull(userId)) {
SysUserVo sysUser = userService.selectUserById(userId);
userInfoVo.setUser(sysUser);
userInfoVo.setRoleIds(StreamUtils.toList(sysUser.getRoles(), SysRoleVo::getRoleId));
userInfoVo.setRoleIds(roleService.selectRoleListByUserId(userId));
userInfoVo.setPostIds(postService.selectPostListByUserId(userId));
}
return R.ok(userInfoVo);
@ -241,8 +242,9 @@ public class SysUserController extends BaseController {
@SaCheckPermission("system:user:query")
@GetMapping("/authRole/{userId}")
public R<SysUserInfoVo> authRole(@PathVariable Long userId) {
userService.checkUserDataScope(userId);
SysUserVo user = userService.selectUserById(userId);
List<SysRoleVo> roles = roleService.selectRolesByUserId(userId);
List<SysRoleVo> roles = roleService.selectRolesAuthByUserId(userId);
SysUserInfoVo userInfoVo = new SysUserInfoVo();
userInfoVo.setUser(user);
userInfoVo.setRoles(LoginHelper.isSuperAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isSuperAdmin()));

View File

@ -32,7 +32,7 @@ public interface SysDeptMapper extends BaseMapperPlus<SysDept, SysDeptVo> {
@DataPermission({
@DataColumn(key = "deptName", value = "dept_id")
})
SysDeptVo selectDeptById(Long deptId);
long countDeptById(Long deptId);
/**
* 根据角色ID查询部门树信息

View File

@ -13,20 +13,12 @@ import java.util.List;
*/
public interface SysPostMapper extends BaseMapperPlus<SysPost, SysPostVo> {
/**
* 根据用户ID获取岗位选择框列表
*
* @param userId 用户ID
* @return 选中岗位ID列表
*/
List<Long> selectPostListByUserId(Long userId);
/**
* 查询用户所属岗位组
*
* @param userName 用户
* @param userId 用户ID
* @return 结果
*/
List<SysPostVo> selectPostsByUserName(String userName);
List<SysPostVo> selectPostsByUserId(Long userId);
}

View File

@ -3,12 +3,12 @@ package org.dromara.system.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.domain.SysRole;
import org.dromara.system.domain.vo.SysRoleVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -51,21 +51,12 @@ public interface SysRoleMapper extends BaseMapperPlus<SysRole, SysRoleVo> {
*/
List<SysRoleVo> selectRolePermissionByUserId(Long userId);
/**
* 根据用户ID获取角色选择框列表
*
* @param userId 用户ID
* @return 选中角色ID列表
*/
List<Long> selectRoleListByUserId(Long userId);
/**
* 根据用户ID查询角色
*
* @param userName 用户
* @param userId 用户ID
* @return 角色列表
*/
List<SysRoleVo> selectRolesByUserName(String userName);
List<SysRoleVo> selectRolesByUserId(Long userId);
}

View File

@ -61,41 +61,11 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
})
Page<SysUserVo> selectUnallocatedList(@Param("page") Page<SysUser> page, @Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
/**
* 通过用户名查询用户
*
* @param userName 用户名
* @return 用户对象信息
*/
SysUserVo selectUserByUserName(String userName);
/**
* 通过手机号查询用户
*
* @param phonenumber 手机号
* @return 用户对象信息
*/
SysUserVo selectUserByPhonenumber(String phonenumber);
/**
* 通过邮箱查询用户
*
* @param email 邮箱
* @return 用户对象信息
*/
SysUserVo selectUserByEmail(String email);
/**
* 通过用户ID查询用户
*
* @param userId 用户ID
* @return 用户对象信息
*/
@DataPermission({
@DataColumn(key = "deptName", value = "d.dept_id"),
@DataColumn(key = "userName", value = "u.user_id")
@DataColumn(key = "deptName", value = "dept_id"),
@DataColumn(key = "userName", value = "user_id")
})
SysUserVo selectUserById(Long userId);
long countUserById(Long userId);
@Override
@DataPermission({

View File

@ -25,7 +25,7 @@ public interface ISysClientService {
/**
* 查询客户端信息基于客户端id
*/
SysClient queryByClientId(String clientId);
SysClientVo queryByClientId(String clientId);
/**
* 查询客户端管理列表
@ -50,7 +50,7 @@ public interface ISysClientService {
/**
* 修改状态
*/
int updateUserStatus(Long id, String status);
int updateUserStatus(String clientId, String status);
/**
* 校验并批量删除客户端管理信息

View File

@ -35,6 +35,14 @@ public interface ISysRoleService {
*/
List<SysRoleVo> selectRolesByUserId(Long userId);
/**
* 根据用户ID查询角色列表(包含被授权状态)
*
* @param userId 用户ID
* @return 角色列表
*/
List<SysRoleVo> selectRolesAuthByUserId(Long userId);
/**
* 根据用户ID查询角色权限
*
@ -180,4 +188,5 @@ public interface ISysRoleService {
int insertAuthUsers(Long roleId, Long[] userIds);
void cleanOnlineUserByRole(Long roleId);
}

View File

@ -68,18 +68,18 @@ public interface ISysUserService {
/**
* 根据用户ID查询用户所属角色组
*
* @param userName 用户
* @param userId 用户ID
* @return 结果
*/
String selectUserRoleGroup(String userName);
String selectUserRoleGroup(Long userId);
/**
* 根据用户ID查询用户所属岗位组
*
* @param userName 用户
* @param userId 用户ID
* @return 结果
*/
String selectUserPostGroup(String userName);
String selectUserPostGroup(Long userId);
/**
* 校验用户名称是否唯一

View File

@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
@ -16,6 +17,8 @@ import org.dromara.system.domain.bo.SysClientBo;
import org.dromara.system.domain.vo.SysClientVo;
import org.dromara.system.mapper.SysClientMapper;
import org.dromara.system.service.ISysClientService;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import java.util.Collection;
@ -48,9 +51,10 @@ public class SysClientServiceImpl implements ISysClientService {
/**
* 查询客户端管理
*/
@Cacheable(cacheNames = CacheNames.SYS_CLIENT, key = "#clientId")
@Override
public SysClient queryByClientId(String clientId) {
return baseMapper.selectOne(new LambdaQueryWrapper<SysClient>().eq(SysClient::getClientId, clientId));
public SysClientVo queryByClientId(String clientId) {
return baseMapper.selectVoOne(new LambdaQueryWrapper<SysClient>().eq(SysClient::getClientId, clientId));
}
/**
@ -105,6 +109,7 @@ public class SysClientServiceImpl implements ISysClientService {
/**
* 修改客户端管理
*/
@CacheEvict(cacheNames = CacheNames.SYS_CLIENT, key = "#bo.clientId")
@Override
public Boolean updateByBo(SysClientBo bo) {
SysClient update = MapstructUtils.convert(bo, SysClient.class);
@ -116,12 +121,13 @@ public class SysClientServiceImpl implements ISysClientService {
/**
* 修改状态
*/
@CacheEvict(cacheNames = CacheNames.SYS_CLIENT, key = "#clientId")
@Override
public int updateUserStatus(Long id, String status) {
public int updateUserStatus(String clientId, String status) {
return baseMapper.update(null,
new LambdaUpdateWrapper<SysClient>()
.set(SysClient::getStatus, status)
.eq(SysClient::getId, id));
.eq(SysClient::getClientId, clientId));
}
/**
@ -134,6 +140,7 @@ public class SysClientServiceImpl implements ISysClientService {
/**
* 批量删除客户端管理
*/
@CacheEvict(cacheNames = CacheNames.SYS_CLIENT, allEntries = true)
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {

View File

@ -221,8 +221,7 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
if (LoginHelper.isSuperAdmin()) {
return;
}
SysDeptVo dept = baseMapper.selectDeptById(deptId);
if (ObjectUtil.isNull(dept)) {
if (baseMapper.countDeptById(deptId) == 0) {
throw new ServiceException("没有权限访问部门数据!");
}
}

View File

@ -17,6 +17,7 @@ import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.domain.SysClient;
import org.dromara.system.domain.SysLogininfor;
import org.dromara.system.domain.bo.SysLogininforBo;
import org.dromara.system.domain.vo.SysClientVo;
import org.dromara.system.domain.vo.SysLogininforVo;
import org.dromara.system.mapper.SysClientMapper;
import org.dromara.system.mapper.SysLogininforMapper;
@ -61,7 +62,7 @@ public class SysLogininforServiceImpl implements ISysLogininforService {
final String ip = ServletUtils.getClientIP(request);
// 客户端信息
String clientid = request.getHeader(LoginHelper.CLIENT_KEY);
SysClient client = null;
SysClientVo client = null;
if (StringUtils.isNotBlank(clientid)) {
client = clientService.queryByClientId(clientid);
}

View File

@ -9,6 +9,7 @@ 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.system.domain.SysNotice;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.bo.SysNoticeBo;
import org.dromara.system.domain.vo.SysNoticeVo;
import org.dromara.system.domain.vo.SysUserVo;
@ -68,7 +69,7 @@ public class SysNoticeServiceImpl implements ISysNoticeService {
lqw.like(StringUtils.isNotBlank(bo.getNoticeTitle()), SysNotice::getNoticeTitle, bo.getNoticeTitle());
lqw.eq(StringUtils.isNotBlank(bo.getNoticeType()), SysNotice::getNoticeType, bo.getNoticeType());
if (StringUtils.isNotBlank(bo.getCreateByName())) {
SysUserVo sysUser = userMapper.selectUserByUserName(bo.getCreateByName());
SysUserVo sysUser = userMapper.selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, bo.getCreateByName()));
lqw.eq(SysNotice::getCreateBy, ObjectUtil.isNotNull(sysUser) ? sysUser.getUserId() : null);
}
lqw.orderByAsc(SysNotice::getNoticeId);

View File

@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -92,7 +93,8 @@ public class SysPostServiceImpl implements ISysPostService {
*/
@Override
public List<Long> selectPostListByUserId(Long userId) {
return baseMapper.selectPostListByUserId(userId);
List<SysPostVo> list = baseMapper.selectPostsByUserId(userId);
return StreamUtils.toList(list, SysPostVo::getPostId);
}
/**

View File

@ -92,6 +92,17 @@ public class SysRoleServiceImpl implements ISysRoleService {
*/
@Override
public List<SysRoleVo> selectRolesByUserId(Long userId) {
return baseMapper.selectRolesByUserId(userId);
}
/**
* 根据用户ID查询角色列表(包含被授权状态)
*
* @param userId 用户ID
* @return 角色列表
*/
@Override
public List<SysRoleVo> selectRolesAuthByUserId(Long userId) {
List<SysRoleVo> userRoles = baseMapper.selectRolePermissionByUserId(userId);
List<SysRoleVo> roles = selectRoleAll();
for (SysRoleVo role : roles) {
@ -141,7 +152,8 @@ public class SysRoleServiceImpl implements ISysRoleService {
*/
@Override
public List<Long> selectRoleListByUserId(Long userId) {
return baseMapper.selectRoleListByUserId(userId);
List<SysRoleVo> list = baseMapper.selectRolesByUserId(userId);
return StreamUtils.toList(list, SysRoleVo::getRoleId);
}
/**

View File

@ -141,7 +141,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
*/
@Override
public SysUserVo selectUserByUserName(String userName) {
return baseMapper.selectUserByUserName(userName);
return baseMapper.selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, userName));
}
/**
@ -152,7 +152,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
*/
@Override
public SysUserVo selectUserByPhonenumber(String phonenumber) {
return baseMapper.selectUserByPhonenumber(phonenumber);
return baseMapper.selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getPhonenumber, phonenumber));
}
/**
@ -163,18 +163,18 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
*/
@Override
public SysUserVo selectUserById(Long userId) {
return baseMapper.selectUserById(userId);
return baseMapper.selectVoById(userId);
}
/**
* 查询用户所属角色组
*
* @param userName 用户
* @param userId 用户ID
* @return 结果
*/
@Override
public String selectUserRoleGroup(String userName) {
List<SysRoleVo> list = roleMapper.selectRolesByUserName(userName);
public String selectUserRoleGroup(Long userId) {
List<SysRoleVo> list = roleMapper.selectRolesByUserId(userId);
if (CollUtil.isEmpty(list)) {
return StringUtils.EMPTY;
}
@ -184,12 +184,12 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
/**
* 查询用户所属岗位组
*
* @param userName 用户
* @param userId 用户ID
* @return 结果
*/
@Override
public String selectUserPostGroup(String userName) {
List<SysPostVo> list = postMapper.selectPostsByUserName(userName);
public String selectUserPostGroup(Long userId) {
List<SysPostVo> list = postMapper.selectPostsByUserId(userId);
if (CollUtil.isEmpty(list)) {
return StringUtils.EMPTY;
}
@ -261,7 +261,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
if (LoginHelper.isSuperAdmin()) {
return;
}
if (ObjectUtil.isNull(baseMapper.selectUserById(userId))) {
if (baseMapper.countUserById(userId) == 0) {
throw new ServiceException("没有权限访问用户数据!");
}
}