refactor(system): 重构系统模块的数据访问层和服务层
- 修改用户服务中的用户转换逻辑,区分是否包含密码的场景 - 优化部门层级查询性能,减少数据库查询次数
This commit is contained in:
+2
-2
@@ -1,8 +1,8 @@
|
|||||||
package cn.odboy.system.dal.model.response;
|
package cn.odboy.system.dal.model.response;
|
||||||
|
|
||||||
|
import cn.odboy.base.KitBaseUserTimeTb;
|
||||||
import cn.odboy.system.dal.dataobject.SystemJobTb;
|
import cn.odboy.system.dal.dataobject.SystemJobTb;
|
||||||
import cn.odboy.system.dal.dataobject.SystemRoleTb;
|
import cn.odboy.system.dal.dataobject.SystemRoleTb;
|
||||||
import cn.odboy.system.dal.dataobject.SystemUserTb;
|
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -12,7 +12,7 @@ import lombok.Setter;
|
|||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
public class SystemUserVo extends SystemUserTb {
|
public class SystemUserVo extends KitBaseUserTimeTb {
|
||||||
|
|
||||||
@ApiModelProperty(value = "ID", hidden = true)
|
@ApiModelProperty(value = "ID", hidden = true)
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|||||||
+5
@@ -15,9 +15,13 @@
|
|||||||
*/
|
*/
|
||||||
package cn.odboy.system.dal.mysql;
|
package cn.odboy.system.dal.mysql;
|
||||||
|
|
||||||
|
import cn.odboy.system.dal.dataobject.SystemDeptTb;
|
||||||
import cn.odboy.system.dal.dataobject.SystemRoleDeptTb;
|
import cn.odboy.system.dal.dataobject.SystemRoleDeptTb;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 角色部门关联 Mapper
|
* 角色部门关联 Mapper
|
||||||
@@ -27,4 +31,5 @@ import org.apache.ibatis.annotations.Mapper;
|
|||||||
@Mapper
|
@Mapper
|
||||||
public interface SystemRoleDeptMapper extends BaseMapper<SystemRoleDeptTb> {
|
public interface SystemRoleDeptMapper extends BaseMapper<SystemRoleDeptTb> {
|
||||||
|
|
||||||
|
Set<SystemDeptTb> listUserDeptByRoleId(@Param("roleId") Long roleId);
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -15,9 +15,13 @@
|
|||||||
*/
|
*/
|
||||||
package cn.odboy.system.dal.mysql;
|
package cn.odboy.system.dal.mysql;
|
||||||
|
|
||||||
|
import cn.odboy.system.dal.dataobject.SystemJobTb;
|
||||||
import cn.odboy.system.dal.dataobject.SystemUserJobTb;
|
import cn.odboy.system.dal.dataobject.SystemUserJobTb;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import java.util.Set;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户职位关联 Mapper
|
* 用户职位关联 Mapper
|
||||||
@@ -27,4 +31,5 @@ import org.apache.ibatis.annotations.Mapper;
|
|||||||
@Mapper
|
@Mapper
|
||||||
public interface SystemUserJobMapper extends BaseMapper<SystemUserJobTb> {
|
public interface SystemUserJobMapper extends BaseMapper<SystemUserJobTb> {
|
||||||
|
|
||||||
|
Set<SystemJobTb> listUserJobByUserId(@Param("userId") Long userId);
|
||||||
}
|
}
|
||||||
|
|||||||
+4
@@ -15,11 +15,15 @@
|
|||||||
*/
|
*/
|
||||||
package cn.odboy.system.dal.mysql;
|
package cn.odboy.system.dal.mysql;
|
||||||
|
|
||||||
|
import cn.odboy.system.dal.dataobject.SystemRoleTb;
|
||||||
import cn.odboy.system.dal.dataobject.SystemUserRoleTb;
|
import cn.odboy.system.dal.dataobject.SystemUserRoleTb;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import java.util.Set;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface SystemUserRoleMapper extends BaseMapper<SystemUserRoleTb> {
|
public interface SystemUserRoleMapper extends BaseMapper<SystemUserRoleTb> {
|
||||||
|
|
||||||
|
Set<SystemRoleTb> listUserRoleByUserId(@Param("userId") Long userId);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -62,7 +62,7 @@ public class SystemUserOnlineInfoDAO {
|
|||||||
userOnlineVo.setKey(KitDesEncryptUtil.desEncrypt(token));
|
userOnlineVo.setKey(KitDesEncryptUtil.desEncrypt(token));
|
||||||
userOnlineVo.setLoginTime(new Date());
|
userOnlineVo.setLoginTime(new Date());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(e.getMessage(), e);
|
log.error("保存在线用户信息失败", e);
|
||||||
}
|
}
|
||||||
String loginKey = tokenProvider.loginKey(token);
|
String loginKey = tokenProvider.loginKey(token);
|
||||||
redisHelper.set(loginKey, userOnlineVo, properties.getJwt().getTokenValidityInSeconds(), TimeUnit.MILLISECONDS);
|
redisHelper.set(loginKey, userOnlineVo, properties.getJwt().getTokenValidityInSeconds(), TimeUnit.MILLISECONDS);
|
||||||
|
|||||||
+1
-1
@@ -49,7 +49,7 @@ public class UserDetailsHandler implements UserDetailsService {
|
|||||||
public SystemUserJwtVo loadUserByUsername(String username) {
|
public SystemUserJwtVo loadUserByUsername(String username) {
|
||||||
SystemUserJwtVo userJwtVo = systemUserInfoDAO.getUserLoginInfoByUserName(username);
|
SystemUserJwtVo userJwtVo = systemUserInfoDAO.getUserLoginInfoByUserName(username);
|
||||||
if (userJwtVo == null) {
|
if (userJwtVo == null) {
|
||||||
SystemUserVo user = systemUserService.getUserVoByUsername(username);
|
SystemUserVo user = systemUserService.getUserVoWithPasswordByUsername(username);
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
throw new BadRequestException("用户不存在");
|
throw new BadRequestException("用户不存在");
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+12
@@ -22,6 +22,9 @@ import org.springframework.security.core.context.SecurityContextHolder;
|
|||||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户认证
|
||||||
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class SystemAuthService {
|
public class SystemAuthService {
|
||||||
|
|
||||||
@@ -38,6 +41,9 @@ public class SystemAuthService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private SystemCaptchaService systemCaptchaService;
|
private SystemCaptchaService systemCaptchaService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登录
|
||||||
|
*/
|
||||||
public SystemAuthVo doLogin(SystemUserLoginArgs loginArgs, HttpServletRequest request) throws Exception {
|
public SystemAuthVo doLogin(SystemUserLoginArgs loginArgs, HttpServletRequest request) throws Exception {
|
||||||
KitValidUtil.notNull(loginArgs);
|
KitValidUtil.notNull(loginArgs);
|
||||||
|
|
||||||
@@ -74,6 +80,9 @@ public class SystemAuthService {
|
|||||||
return authInfo;
|
return authInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前登录人信息
|
||||||
|
*/
|
||||||
public SystemUserJwtVo getCurrentUserInfo() {
|
public SystemUserJwtVo getCurrentUserInfo() {
|
||||||
SystemUserJwtVo jwtUser = (SystemUserJwtVo) KitSecurityHelper.getCurrentUser();
|
SystemUserJwtVo jwtUser = (SystemUserJwtVo) KitSecurityHelper.getCurrentUser();
|
||||||
if (jwtUser.getUser() != null) {
|
if (jwtUser.getUser() != null) {
|
||||||
@@ -82,6 +91,9 @@ public class SystemAuthService {
|
|||||||
return jwtUser;
|
return jwtUser;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 退出登录
|
||||||
|
*/
|
||||||
public void doLogout(HttpServletRequest request) {
|
public void doLogout(HttpServletRequest request) {
|
||||||
String token = tokenProvider.getToken(request);
|
String token = tokenProvider.getToken(request);
|
||||||
systemUserOnlineInfoDAO.logoutByToken(token);
|
systemUserOnlineInfoDAO.logoutByToken(token);
|
||||||
|
|||||||
+9
@@ -25,6 +25,9 @@ public class SystemCaptchaService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private AppProperties properties;
|
private AppProperties properties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取登录验证码
|
||||||
|
*/
|
||||||
public SystemCaptchaVo getLoginCaptcha() {
|
public SystemCaptchaVo getLoginCaptcha() {
|
||||||
// 获取运算的结果
|
// 获取运算的结果
|
||||||
Captcha captcha = properties.getLogin().getCaptchaSetting().getCaptcha();
|
Captcha captcha = properties.getLogin().getCaptchaSetting().getCaptcha();
|
||||||
@@ -44,6 +47,12 @@ public class SystemCaptchaService {
|
|||||||
return captchaVo;
|
return captchaVo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 验证验证码
|
||||||
|
*
|
||||||
|
* @param uuid 验证码uuid
|
||||||
|
* @param inputCode 用户输入的验证码
|
||||||
|
*/
|
||||||
public void validate(String uuid, String inputCode) {
|
public void validate(String uuid, String inputCode) {
|
||||||
// 查询验证码
|
// 查询验证码
|
||||||
String code = redisHelper.get(uuid, String.class);
|
String code = redisHelper.get(uuid, String.class);
|
||||||
|
|||||||
+20
-14
@@ -18,18 +18,19 @@ package cn.odboy.system.service;
|
|||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.odboy.system.constant.SystemDataScopeEnum;
|
import cn.odboy.system.constant.SystemDataScopeEnum;
|
||||||
import cn.odboy.system.dal.dataobject.SystemDeptTb;
|
import cn.odboy.system.dal.dataobject.SystemDeptTb;
|
||||||
import cn.odboy.system.dal.model.response.SystemDeptVo;
|
import cn.odboy.system.dal.dataobject.SystemRoleTb;
|
||||||
import cn.odboy.system.dal.model.response.SystemRoleVo;
|
|
||||||
import cn.odboy.system.dal.model.response.SystemUserVo;
|
import cn.odboy.system.dal.model.response.SystemUserVo;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数据权限 Service
|
* 数据权限
|
||||||
*
|
*
|
||||||
* @author odboy
|
* @author odboy
|
||||||
*/
|
*/
|
||||||
@@ -52,16 +53,19 @@ public class SystemDataService {
|
|||||||
public List<Long> queryDeptIdByArgs(SystemUserVo user) {
|
public List<Long> queryDeptIdByArgs(SystemUserVo user) {
|
||||||
List<Long> deptIds = new ArrayList<>();
|
List<Long> deptIds = new ArrayList<>();
|
||||||
// 查询用户角色
|
// 查询用户角色
|
||||||
List<SystemRoleVo> roleList = systemUserRoleService.queryRoleByUsersId(user.getId());
|
Set<SystemRoleTb> roleList = systemUserRoleService.listUserRoleByUserId(user.getId());
|
||||||
// 获取对应的部门ID
|
// 获取对应的部门ID
|
||||||
for (SystemRoleVo role : roleList) {
|
for (SystemRoleTb role : roleList) {
|
||||||
SystemDataScopeEnum dataScopeEnum = SystemDataScopeEnum.find(role.getDataScope());
|
SystemDataScopeEnum dataScopeEnum = SystemDataScopeEnum.find(role.getDataScope());
|
||||||
switch (Objects.requireNonNull(dataScopeEnum)) {
|
switch (Objects.requireNonNull(dataScopeEnum)) {
|
||||||
case THIS_LEVEL:
|
case THIS_LEVEL:
|
||||||
deptIds.add(user.getDept().getId());
|
Long currentDeptId = user.getDept().getId();
|
||||||
|
deptIds.add(currentDeptId);
|
||||||
break;
|
break;
|
||||||
case CUSTOMIZE:
|
case CUSTOMIZE:
|
||||||
deptIds.addAll(this.queryCustomDataPermissionByArgs(deptIds, role));
|
// 优化 283ms -> 51 ms
|
||||||
|
List<Long> customDeptIds = this.queryCustomDataPermissionV2ByArgs(deptIds, role.getId());
|
||||||
|
deptIds.addAll(customDeptIds);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
@@ -73,17 +77,19 @@ public class SystemDataService {
|
|||||||
/**
|
/**
|
||||||
* 获取自定义的数据权限
|
* 获取自定义的数据权限
|
||||||
*
|
*
|
||||||
* @param deptIds 部门ID
|
* @param deptIds 部门ID(外部数据)
|
||||||
* @param role 角色
|
* @param roleId 角色ID
|
||||||
* @return 数据权限ID
|
* @return 数据权限ID(所有部门ID数据)
|
||||||
*/
|
*/
|
||||||
private List<Long> queryCustomDataPermissionByArgs(List<Long> deptIds, SystemRoleVo role) {
|
private List<Long> queryCustomDataPermissionV2ByArgs(List<Long> deptIds, Long roleId) {
|
||||||
List<SystemDeptTb> deptList = systemRoleDeptService.listDeptByRoleId(role.getId());
|
Set<SystemDeptTb> deptList = systemRoleDeptService.listUserDeptByRoleId(roleId);
|
||||||
|
Map<Long, List<SystemDeptTb>> deptPidMap = systemDeptService.listPidNonNull().stream()
|
||||||
|
.collect(Collectors.groupingBy(SystemDeptTb::getPid));
|
||||||
for (SystemDeptTb dept : deptList) {
|
for (SystemDeptTb dept : deptList) {
|
||||||
deptIds.add(dept.getId());
|
deptIds.add(dept.getId());
|
||||||
List<SystemDeptVo> deptChildren = systemDeptService.listDeptByPid(dept.getId());
|
List<SystemDeptTb> deptChildren = deptPidMap.getOrDefault(dept.getId(), null);
|
||||||
if (CollUtil.isNotEmpty(deptChildren)) {
|
if (CollUtil.isNotEmpty(deptChildren)) {
|
||||||
deptIds.addAll(systemDeptService.queryChildDeptIdByDeptIds(deptChildren));
|
deptIds.addAll(systemDeptService.queryChildDeptIdByDeptIds(deptChildren, deptPidMap));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return deptIds;
|
return deptIds;
|
||||||
|
|||||||
+20
-9
@@ -226,20 +226,24 @@ public class SystemDeptService {
|
|||||||
private void queryRelationDeptByArgs(List<SystemDeptVo> deptTbList, Set<SystemDeptVo> depts) {
|
private void queryRelationDeptByArgs(List<SystemDeptVo> deptTbList, Set<SystemDeptVo> depts) {
|
||||||
for (SystemDeptVo dept : deptTbList) {
|
for (SystemDeptVo dept : deptTbList) {
|
||||||
depts.add(dept);
|
depts.add(dept);
|
||||||
List<SystemDeptVo> deptList = this.listDeptByPid(dept.getId());
|
List<SystemDeptVo> deptList = this.listDeptVoByPid(dept.getId());
|
||||||
if (CollUtil.isNotEmpty(deptList)) {
|
if (CollUtil.isNotEmpty(deptList)) {
|
||||||
queryRelationDeptByArgs(deptList, depts);
|
queryRelationDeptByArgs(deptList, depts);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Long> queryChildDeptIdByDeptIds(List<SystemDeptVo> deptList) {
|
private List<SystemDeptVo> listDeptVoByPid(Long pid) {
|
||||||
|
return KitBeanUtil.copyToList(this.listDeptByPid(pid), SystemDeptVo.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Long> queryChildDeptIdByDeptIds(List<SystemDeptTb> deptList, Map<Long, List<SystemDeptTb>> deptPidMap) {
|
||||||
List<Long> list = new ArrayList<>();
|
List<Long> list = new ArrayList<>();
|
||||||
for (SystemDeptVo systemDeptTb : deptList) {
|
for (SystemDeptTb systemDeptTb : deptList) {
|
||||||
if (systemDeptTb != null && systemDeptTb.getEnabled()) {
|
if (systemDeptTb != null && systemDeptTb.getEnabled()) {
|
||||||
List<SystemDeptVo> deptList1 = this.listDeptByPid(systemDeptTb.getId());
|
List<SystemDeptTb> deptList1 = deptPidMap.getOrDefault(systemDeptTb.getId(), null);
|
||||||
if (CollUtil.isNotEmpty(deptList1)) {
|
if (CollUtil.isNotEmpty(deptList1)) {
|
||||||
list.addAll(queryChildDeptIdByDeptIds(deptList1));
|
list.addAll(this.queryChildDeptIdByDeptIds(deptList1, deptPidMap));
|
||||||
}
|
}
|
||||||
list.add(systemDeptTb.getId());
|
list.add(systemDeptTb.getId());
|
||||||
}
|
}
|
||||||
@@ -259,7 +263,7 @@ public class SystemDeptService {
|
|||||||
deptList.addAll(this.listRootDept());
|
deptList.addAll(this.listRootDept());
|
||||||
return deptList;
|
return deptList;
|
||||||
}
|
}
|
||||||
deptList.addAll(this.listDeptByPid(dept.getPid()));
|
deptList.addAll(this.listDeptVoByPid(dept.getPid()));
|
||||||
return querySuperiorDeptByPid(this.getDeptVoById(dept.getPid()), deptList);
|
return querySuperiorDeptByPid(this.getDeptVoById(dept.getPid()), deptList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -359,7 +363,7 @@ public class SystemDeptService {
|
|||||||
// 根部门
|
// 根部门
|
||||||
depts.add(this.getDeptVoById(id));
|
depts.add(this.getDeptVoById(id));
|
||||||
// 子部门
|
// 子部门
|
||||||
List<SystemDeptVo> deptList = this.listDeptByPid(id);
|
List<SystemDeptVo> deptList = this.listDeptVoByPid(id);
|
||||||
if (CollectionUtil.isNotEmpty(deptList)) {
|
if (CollectionUtil.isNotEmpty(deptList)) {
|
||||||
queryRelationDeptByArgs(deptList, depts);
|
queryRelationDeptByArgs(deptList, depts);
|
||||||
}
|
}
|
||||||
@@ -465,10 +469,10 @@ public class SystemDeptService {
|
|||||||
return vo;
|
return vo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SystemDeptVo> listDeptByPid(long pid) {
|
public List<SystemDeptTb> listDeptByPid(long pid) {
|
||||||
LambdaQueryWrapper<SystemDeptTb> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<SystemDeptTb> wrapper = new LambdaQueryWrapper<>();
|
||||||
wrapper.eq(SystemDeptTb::getPid, pid);
|
wrapper.eq(SystemDeptTb::getPid, pid);
|
||||||
return KitBeanUtil.copyToList(systemDeptMapper.selectList(wrapper), SystemDeptVo.class);
|
return systemDeptMapper.selectList(wrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void exportDeptXlsx(HttpServletResponse response, SystemQueryDeptArgs args) throws Exception {
|
public void exportDeptXlsx(HttpServletResponse response, SystemQueryDeptArgs args) throws Exception {
|
||||||
@@ -483,4 +487,11 @@ public class SystemDeptService {
|
|||||||
}
|
}
|
||||||
KitExcelExporter.exportSimple(response, "部门数据", SystemDeptExportRowVo.class, rowVos);
|
KitExcelExporter.exportSimple(response, "部门数据", SystemDeptExportRowVo.class, rowVos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<SystemDeptTb> listPidNonNull() {
|
||||||
|
LambdaQueryWrapper<SystemDeptTb> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
wrapper.eq(SystemDeptTb::getEnabled, 1);
|
||||||
|
wrapper.isNotNull(SystemDeptTb::getPid);
|
||||||
|
return systemDeptMapper.selectList(wrapper);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -221,7 +221,7 @@ public class SystemMenuService {
|
|||||||
* @return /
|
* @return /
|
||||||
*/
|
*/
|
||||||
public List<SystemMenuVo> listMenuByUserId(Long currentUserId) {
|
public List<SystemMenuVo> listMenuByUserId(Long currentUserId) {
|
||||||
List<SystemRoleVo> roles = systemUserRoleService.queryRoleByUsersId(currentUserId);
|
List<SystemRoleVo> roles = systemUserRoleService.queryRoleVoByUsersId(currentUserId);
|
||||||
Set<Long> roleIds = roles.stream().map(SystemRoleVo::getId).collect(Collectors.toSet());
|
Set<Long> roleIds = roles.stream().map(SystemRoleVo::getId).collect(Collectors.toSet());
|
||||||
return new ArrayList<>(systemRoleMenuService.queryMenuByRoleIds(roleIds));
|
return new ArrayList<>(systemRoleMenuService.queryMenuByRoleIds(roleIds));
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-18
@@ -24,7 +24,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@@ -60,23 +59,6 @@ public class SystemRoleDeptService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据角色id查询
|
|
||||||
*
|
|
||||||
* @param roleId /
|
|
||||||
* @return /
|
|
||||||
*/
|
|
||||||
public List<SystemDeptTb> listDeptByRoleId(Long roleId) {
|
|
||||||
LambdaQueryWrapper<SystemRoleDeptTb> wrapper = new LambdaQueryWrapper<>();
|
|
||||||
wrapper.eq(SystemRoleDeptTb::getRoleId, roleId);
|
|
||||||
List<SystemRoleDeptTb> systemRoleDeptTbs = systemRoleDeptMapper.selectList(wrapper);
|
|
||||||
if (systemRoleDeptTbs.isEmpty()) {
|
|
||||||
return new ArrayList<>();
|
|
||||||
}
|
|
||||||
List<Long> deptIds = systemRoleDeptTbs.stream().map(SystemRoleDeptTb::getDeptId).collect(Collectors.toList());
|
|
||||||
return systemDeptMapper.selectByIds(deptIds);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据部门ID统计角色数量
|
* 根据部门ID统计角色数量
|
||||||
*
|
*
|
||||||
@@ -92,4 +74,14 @@ public class SystemRoleDeptService {
|
|||||||
wrapper.in(SystemRoleDeptTb::getDeptId, deptIds);
|
wrapper.in(SystemRoleDeptTb::getDeptId, deptIds);
|
||||||
return systemRoleDeptMapper.selectCount(wrapper);
|
return systemRoleDeptMapper.selectCount(wrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据角色id查询部门信息
|
||||||
|
*
|
||||||
|
* @param roleId 角色id
|
||||||
|
* @return /
|
||||||
|
*/
|
||||||
|
public Set<SystemDeptTb> listUserDeptByRoleId(Long roleId) {
|
||||||
|
return systemRoleDeptMapper.listUserDeptByRoleId(roleId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-5
@@ -22,13 +22,13 @@ import cn.hutool.core.util.StrUtil;
|
|||||||
import cn.odboy.base.KitPageResult;
|
import cn.odboy.base.KitPageResult;
|
||||||
import cn.odboy.framework.exception.BadRequestException;
|
import cn.odboy.framework.exception.BadRequestException;
|
||||||
import cn.odboy.system.dal.dataobject.SystemRoleTb;
|
import cn.odboy.system.dal.dataobject.SystemRoleTb;
|
||||||
import cn.odboy.system.dal.dataobject.SystemUserTb;
|
|
||||||
import cn.odboy.system.dal.model.export.SystemRoleExportRowVo;
|
import cn.odboy.system.dal.model.export.SystemRoleExportRowVo;
|
||||||
import cn.odboy.system.dal.model.request.SystemCreateRoleArgs;
|
import cn.odboy.system.dal.model.request.SystemCreateRoleArgs;
|
||||||
import cn.odboy.system.dal.model.request.SystemQueryRoleArgs;
|
import cn.odboy.system.dal.model.request.SystemQueryRoleArgs;
|
||||||
import cn.odboy.system.dal.model.response.SystemMenuVo;
|
import cn.odboy.system.dal.model.response.SystemMenuVo;
|
||||||
import cn.odboy.system.dal.model.response.SystemRoleCodeVo;
|
import cn.odboy.system.dal.model.response.SystemRoleCodeVo;
|
||||||
import cn.odboy.system.dal.model.response.SystemRoleVo;
|
import cn.odboy.system.dal.model.response.SystemRoleVo;
|
||||||
|
import cn.odboy.system.dal.model.response.SystemUserVo;
|
||||||
import cn.odboy.system.dal.mysql.SystemRoleMapper;
|
import cn.odboy.system.dal.mysql.SystemRoleMapper;
|
||||||
import cn.odboy.system.framework.permission.core.KitSecurityHelper;
|
import cn.odboy.system.framework.permission.core.KitSecurityHelper;
|
||||||
import cn.odboy.util.KitBeanUtil;
|
import cn.odboy.util.KitBeanUtil;
|
||||||
@@ -75,7 +75,7 @@ public class SystemRoleService {
|
|||||||
systemRoleMapper.insert(roleTb);
|
systemRoleMapper.insert(roleTb);
|
||||||
// 判断是否有部门数据, 若有, 则需创建关联
|
// 判断是否有部门数据, 若有, 则需创建关联
|
||||||
if (CollectionUtil.isNotEmpty(args.getDepts())) {
|
if (CollectionUtil.isNotEmpty(args.getDepts())) {
|
||||||
systemRoleDeptService.batchInsertRoleDept(args.getDepts(), args.getId());
|
systemRoleDeptService.batchInsertRoleDept(args.getDepts(), roleTb.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -218,14 +218,14 @@ public class SystemRoleService {
|
|||||||
* @param user 用户信息
|
* @param user 用户信息
|
||||||
* @return 权限信息
|
* @return 权限信息
|
||||||
*/
|
*/
|
||||||
public List<SystemRoleCodeVo> buildUserRolePermissions(SystemUserTb user) {
|
public List<SystemRoleCodeVo> buildUserRolePermissions(SystemUserVo user) {
|
||||||
Set<String> permissions = new HashSet<>();
|
Set<String> permissions = new HashSet<>();
|
||||||
// 如果是管理员直接返回
|
// 如果是管理员直接返回
|
||||||
if (user.getIsAdmin()) {
|
if (user.getIsAdmin()) {
|
||||||
permissions.add("admin");
|
permissions.add("admin");
|
||||||
return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList());
|
return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
List<SystemRoleVo> roles = systemUserRoleService.queryRoleByUsersId(user.getId());
|
List<SystemRoleVo> roles = systemUserRoleService.queryRoleVoByUsersId(user.getId());
|
||||||
permissions = roles.stream().flatMap(role -> role.getMenus().stream()).map(SystemMenuVo::getPermission)
|
permissions = roles.stream().flatMap(role -> role.getMenus().stream()).map(SystemMenuVo::getPermission)
|
||||||
.filter(StrUtil::isNotBlank).collect(Collectors.toSet());
|
.filter(StrUtil::isNotBlank).collect(Collectors.toSet());
|
||||||
return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList());
|
return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList());
|
||||||
@@ -273,7 +273,7 @@ public class SystemRoleService {
|
|||||||
* @return /
|
* @return /
|
||||||
*/
|
*/
|
||||||
private int checkRoleLevels(Integer level) {
|
private int checkRoleLevels(Integer level) {
|
||||||
List<Integer> levels = systemUserRoleService.queryRoleByUsersId(KitSecurityHelper.getCurrentUserId()).stream()
|
List<Integer> levels = systemUserRoleService.queryRoleVoByUsersId(KitSecurityHelper.getCurrentUserId()).stream()
|
||||||
.map(SystemRoleVo::getLevel).collect(Collectors.toList());
|
.map(SystemRoleVo::getLevel).collect(Collectors.toList());
|
||||||
int min = Collections.min(levels);
|
int min = Collections.min(levels);
|
||||||
if (level != null) {
|
if (level != null) {
|
||||||
|
|||||||
+2
-4
@@ -71,9 +71,7 @@ public class SystemUserJobService {
|
|||||||
return systemUserJobMapper.selectCount(wrapper);
|
return systemUserJobMapper.selectCount(wrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SystemUserJobTb> listUserJobByUserId(Long userId) {
|
public Set<SystemJobTb> listUserJobByUserId(Long userId) {
|
||||||
LambdaQueryWrapper<SystemUserJobTb> wrapper = new LambdaQueryWrapper<>();
|
return systemUserJobMapper.listUserJobByUserId(userId);
|
||||||
wrapper.eq(SystemUserJobTb::getUserId, userId);
|
|
||||||
return systemUserJobMapper.selectList(wrapper);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+25
-26
@@ -30,9 +30,9 @@ import cn.odboy.util.KitBeanUtil;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -88,11 +88,9 @@ public class SystemUserRoleService {
|
|||||||
// 查询关联的菜单信息
|
// 查询关联的菜单信息
|
||||||
Set<SystemMenuVo> menus = systemRoleMenuService.queryMenuByRoleIds(Collections.singleton(role.getId()));
|
Set<SystemMenuVo> menus = systemRoleMenuService.queryMenuByRoleIds(Collections.singleton(role.getId()));
|
||||||
roleVo.setMenus(menus);
|
roleVo.setMenus(menus);
|
||||||
|
|
||||||
// 查询关联的部门信息
|
// 查询关联的部门信息
|
||||||
List<SystemDeptTb> depts = systemRoleDeptService.listDeptByRoleId(role.getId());
|
Set<SystemDeptTb> depts = systemRoleDeptService.listUserDeptByRoleId(role.getId());
|
||||||
roleVo.setDepts(new LinkedHashSet<>(depts));
|
roleVo.setDepts(depts);
|
||||||
|
|
||||||
return roleVo;
|
return roleVo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,16 +100,8 @@ public class SystemUserRoleService {
|
|||||||
* @param userId 用户ID
|
* @param userId 用户ID
|
||||||
* @return /
|
* @return /
|
||||||
*/
|
*/
|
||||||
public List<SystemRoleVo> queryRoleByUsersId(Long userId) {
|
public List<SystemRoleVo> queryRoleVoByUsersId(Long userId) {
|
||||||
// 查询用户角色关联
|
Set<SystemRoleTb> roles = this.listUserRoleByUserId(userId);
|
||||||
LambdaQueryWrapper<SystemUserRoleTb> userRoleWrapper = new LambdaQueryWrapper<>();
|
|
||||||
userRoleWrapper.eq(SystemUserRoleTb::getUserId, userId);
|
|
||||||
List<SystemUserRoleTb> userRoles = systemUserRoleMapper.selectList(userRoleWrapper);
|
|
||||||
if (CollUtil.isEmpty(userRoles)) {
|
|
||||||
return new ArrayList<>();
|
|
||||||
}
|
|
||||||
Set<Long> roleIds = userRoles.stream().map(SystemUserRoleTb::getRoleId).collect(Collectors.toSet());
|
|
||||||
List<SystemRoleTb> roles = systemRoleMapper.selectByIds(roleIds);
|
|
||||||
return roles.stream().map(this::convertToRoleVo).collect(Collectors.toList());
|
return roles.stream().map(this::convertToRoleVo).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,13 +113,24 @@ public class SystemUserRoleService {
|
|||||||
*/
|
*/
|
||||||
public Integer getDeptLevelByRoles(Set<SystemRoleTb> roles) {
|
public Integer getDeptLevelByRoles(Set<SystemRoleTb> roles) {
|
||||||
if (CollUtil.isEmpty(roles)) {
|
if (CollUtil.isEmpty(roles)) {
|
||||||
|
// 最小权限
|
||||||
return Integer.MAX_VALUE;
|
return Integer.MAX_VALUE;
|
||||||
}
|
}
|
||||||
Set<SystemRoleTb> roleSet = new HashSet<>();
|
List<Long> roleIds = roles.stream().map(SystemRoleTb::getId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
|
||||||
for (SystemRoleTb role : roles) {
|
if (CollUtil.isEmpty(roleIds)) {
|
||||||
roleSet.add(systemRoleMapper.selectById(role.getId()));
|
// 最小权限
|
||||||
|
return Integer.MAX_VALUE;
|
||||||
}
|
}
|
||||||
return Collections.min(roleSet.stream().map(SystemRoleTb::getLevel).collect(Collectors.toList()));
|
List<Integer> roleLevels = systemRoleMapper.selectList(new LambdaQueryWrapper<SystemRoleTb>()
|
||||||
|
.select(SystemRoleTb::getLevel)
|
||||||
|
.isNotNull(SystemRoleTb::getLevel)
|
||||||
|
.in(SystemRoleTb::getId, roleIds)
|
||||||
|
).stream().map(SystemRoleTb::getLevel).distinct().collect(Collectors.toList());
|
||||||
|
if (CollUtil.isEmpty(roleLevels)) {
|
||||||
|
// 最小权限
|
||||||
|
return Integer.MAX_VALUE;
|
||||||
|
}
|
||||||
|
return Collections.min(roleLevels);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -139,7 +140,7 @@ public class SystemUserRoleService {
|
|||||||
*/
|
*/
|
||||||
public void checkLevel(SystemUserVo args) {
|
public void checkLevel(SystemUserVo args) {
|
||||||
Integer currentLevel = Collections.min(
|
Integer currentLevel = Collections.min(
|
||||||
this.queryRoleByUsersId(KitSecurityHelper.getCurrentUserId()).stream()
|
this.queryRoleVoByUsersId(KitSecurityHelper.getCurrentUserId()).stream()
|
||||||
.map(SystemRoleVo::getLevel).collect(Collectors.toList()));
|
.map(SystemRoleVo::getLevel).collect(Collectors.toList()));
|
||||||
Integer optLevel = this.getDeptLevelByRoles(args.getRoles());
|
Integer optLevel = this.getDeptLevelByRoles(args.getRoles());
|
||||||
if (currentLevel > optLevel) {
|
if (currentLevel > optLevel) {
|
||||||
@@ -147,12 +148,6 @@ public class SystemUserRoleService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SystemUserRoleTb> listUserRoleByUserId(Long userId) {
|
|
||||||
LambdaQueryWrapper<SystemUserRoleTb> wrapper = new LambdaQueryWrapper<>();
|
|
||||||
wrapper.eq(SystemUserRoleTb::getUserId, userId);
|
|
||||||
return systemUserRoleMapper.selectList(wrapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
public long countUserByRoleIds(Set<Long> ids) {
|
public long countUserByRoleIds(Set<Long> ids) {
|
||||||
if (CollUtil.isEmpty(ids)) {
|
if (CollUtil.isEmpty(ids)) {
|
||||||
return 0L;
|
return 0L;
|
||||||
@@ -161,4 +156,8 @@ public class SystemUserRoleService {
|
|||||||
wrapper.in(SystemUserRoleTb::getRoleId, ids);
|
wrapper.in(SystemUserRoleTb::getRoleId, ids);
|
||||||
return systemUserRoleMapper.selectCount(wrapper);
|
return systemUserRoleMapper.selectCount(wrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Set<SystemRoleTb> listUserRoleByUserId(Long userId) {
|
||||||
|
return systemUserRoleMapper.listUserRoleByUserId(userId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+35
-37
@@ -26,15 +26,13 @@ import cn.odboy.framework.properties.AppProperties;
|
|||||||
import cn.odboy.framework.server.core.KitFileLocalUploadHelper;
|
import cn.odboy.framework.server.core.KitFileLocalUploadHelper;
|
||||||
import cn.odboy.system.constant.SystemCaptchaBizEnum;
|
import cn.odboy.system.constant.SystemCaptchaBizEnum;
|
||||||
import cn.odboy.system.constant.SystemZhConst;
|
import cn.odboy.system.constant.SystemZhConst;
|
||||||
|
import cn.odboy.system.dal.dataobject.SystemDeptTb;
|
||||||
import cn.odboy.system.dal.dataobject.SystemJobTb;
|
import cn.odboy.system.dal.dataobject.SystemJobTb;
|
||||||
import cn.odboy.system.dal.dataobject.SystemRoleTb;
|
import cn.odboy.system.dal.dataobject.SystemRoleTb;
|
||||||
import cn.odboy.system.dal.dataobject.SystemUserJobTb;
|
|
||||||
import cn.odboy.system.dal.dataobject.SystemUserRoleTb;
|
|
||||||
import cn.odboy.system.dal.dataobject.SystemUserTb;
|
import cn.odboy.system.dal.dataobject.SystemUserTb;
|
||||||
import cn.odboy.system.dal.model.export.SystemUserExportRowVo;
|
import cn.odboy.system.dal.model.export.SystemUserExportRowVo;
|
||||||
import cn.odboy.system.dal.model.request.SystemQueryUserArgs;
|
import cn.odboy.system.dal.model.request.SystemQueryUserArgs;
|
||||||
import cn.odboy.system.dal.model.request.SystemUpdateUserPasswordArgs;
|
import cn.odboy.system.dal.model.request.SystemUpdateUserPasswordArgs;
|
||||||
import cn.odboy.system.dal.model.response.SystemDeptVo;
|
|
||||||
import cn.odboy.system.dal.model.response.SystemRoleVo;
|
import cn.odboy.system.dal.model.response.SystemRoleVo;
|
||||||
import cn.odboy.system.dal.model.response.SystemUserVo;
|
import cn.odboy.system.dal.model.response.SystemUserVo;
|
||||||
import cn.odboy.system.dal.mysql.SystemUserMapper;
|
import cn.odboy.system.dal.mysql.SystemUserMapper;
|
||||||
@@ -54,7 +52,6 @@ import java.io.File;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -108,24 +105,25 @@ public class SystemUserService {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void saveUser(SystemUserVo args) {
|
public void saveUser(SystemUserVo args) {
|
||||||
systemUserRoleService.checkLevel(args);
|
systemUserRoleService.checkLevel(args);
|
||||||
|
SystemUserTb record = KitBeanUtil.copyToClass(args, SystemUserTb.class);
|
||||||
// 默认密码 123456
|
// 默认密码 123456
|
||||||
args.setPassword(passwordEncoder.encode("123456"));
|
record.setPassword(passwordEncoder.encode("123456"));
|
||||||
args.setDeptId(args.getDept().getId());
|
record.setDeptId(args.getDept().getId());
|
||||||
if (this.getUserByUsername(args.getUsername()) != null) {
|
if (this.getUserByUsername(record.getUsername()) != null) {
|
||||||
throw new BadRequestException("用户名已存在");
|
throw new BadRequestException("用户名已存在");
|
||||||
}
|
}
|
||||||
if (this.getUserByEmail(args.getEmail()) != null) {
|
if (this.getUserByEmail(record.getEmail()) != null) {
|
||||||
throw new BadRequestException("邮箱已存在");
|
throw new BadRequestException("邮箱已存在");
|
||||||
}
|
}
|
||||||
if (this.getUserByPhone(args.getPhone()) != null) {
|
if (this.getUserByPhone(record.getPhone()) != null) {
|
||||||
throw new BadRequestException("手机号已存在");
|
throw new BadRequestException("手机号已存在");
|
||||||
}
|
}
|
||||||
// 保存用户
|
// 保存用户
|
||||||
systemUserMapper.insert(args);
|
systemUserMapper.insert(record);
|
||||||
// 保存用户岗位
|
// 保存用户岗位
|
||||||
systemUserJobService.batchInsertUserJob(args.getJobs(), args.getId());
|
systemUserJobService.batchInsertUserJob(args.getJobs(), record.getId());
|
||||||
// 保存用户角色
|
// 保存用户角色
|
||||||
systemUserRoleService.batchInsertUserRole(args.getRoles(), args.getId());
|
systemUserRoleService.batchInsertUserRole(args.getRoles(), record.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -160,7 +158,7 @@ public class SystemUserService {
|
|||||||
user.setPhone(args.getPhone());
|
user.setPhone(args.getPhone());
|
||||||
user.setNickName(args.getNickName());
|
user.setNickName(args.getNickName());
|
||||||
user.setGender(args.getGender());
|
user.setGender(args.getGender());
|
||||||
systemUserMapper.insertOrUpdate(user);
|
systemUserMapper.updateById(user);
|
||||||
// 清除用户登录缓存
|
// 清除用户登录缓存
|
||||||
systemUserInfoDAO.deleteUserLoginInfoByUserName(user.getUsername());
|
systemUserInfoDAO.deleteUserLoginInfoByUserName(user.getUsername());
|
||||||
// 更新用户岗位
|
// 更新用户岗位
|
||||||
@@ -204,10 +202,10 @@ public class SystemUserService {
|
|||||||
// 校验权限
|
// 校验权限
|
||||||
for (Long id : ids) {
|
for (Long id : ids) {
|
||||||
Integer currentLevel = Collections.min(
|
Integer currentLevel = Collections.min(
|
||||||
systemUserRoleService.queryRoleByUsersId(currentUserId).stream()
|
systemUserRoleService.queryRoleVoByUsersId(currentUserId).stream()
|
||||||
.map(SystemRoleVo::getLevel).collect(Collectors.toList()));
|
.map(SystemRoleVo::getLevel).collect(Collectors.toList()));
|
||||||
Integer optLevel = Collections.min(
|
Integer optLevel = Collections.min(
|
||||||
systemUserRoleService.queryRoleByUsersId(id).stream().map(SystemRoleVo::getLevel)
|
systemUserRoleService.queryRoleVoByUsersId(id).stream().map(SystemRoleVo::getLevel)
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
if (currentLevel > optLevel) {
|
if (currentLevel > optLevel) {
|
||||||
throw new BadRequestException(
|
throw new BadRequestException(
|
||||||
@@ -335,16 +333,16 @@ public class SystemUserService {
|
|||||||
*/
|
*/
|
||||||
public KitPageResult<SystemUserVo> searchUserByArgs(SystemQueryUserArgs args, Page<SystemUserTb> page) {
|
public KitPageResult<SystemUserVo> searchUserByArgs(SystemQueryUserArgs args, Page<SystemUserTb> page) {
|
||||||
// 查询用户基本信息
|
// 查询用户基本信息
|
||||||
LambdaQueryWrapper<SystemUserTb> wrapper = buildUserQueryWrapper(args);
|
LambdaQueryWrapper<SystemUserTb> wrapper = this.buildUserQueryWrapper(args);
|
||||||
IPage<SystemUserTb> userPage = systemUserMapper.selectPage(page, wrapper);
|
IPage<SystemUserTb> userPage = systemUserMapper.selectPage(page, wrapper);
|
||||||
List<SystemUserTb> users = userPage.getRecords();
|
List<SystemUserTb> users = userPage.getRecords();
|
||||||
// 转换为SystemUserVo并关联查询
|
// 转换为SystemUserVo并关联查询
|
||||||
List<SystemUserVo> userVos = users.stream().map(this::convertToUserVo).collect(Collectors.toList());
|
List<SystemUserVo> userVos = users.stream().map(m -> this.convertToUserVo(m, false)).collect(Collectors.toList());
|
||||||
return KitPageUtil.toPage(userVos, userPage.getTotal());
|
return KitPageUtil.toPage(userVos, userPage.getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
public long countUserByArgs(SystemQueryUserArgs args) {
|
public long countUserByArgs(SystemQueryUserArgs args) {
|
||||||
LambdaQueryWrapper<SystemUserTb> wrapper = buildUserQueryWrapper(args);
|
LambdaQueryWrapper<SystemUserTb> wrapper = this.buildUserQueryWrapper(args);
|
||||||
return systemUserMapper.selectCount(wrapper);
|
return systemUserMapper.selectCount(wrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -415,33 +413,27 @@ public class SystemUserService {
|
|||||||
/**
|
/**
|
||||||
* 转换为SystemUserVo并关联查询部门、角色、岗位信息
|
* 转换为SystemUserVo并关联查询部门、角色、岗位信息
|
||||||
*
|
*
|
||||||
* @param user 用户基本信息
|
* @param user 用户基本信息
|
||||||
|
* @param includePassword 是否包含用户密码
|
||||||
* @return 包含关联信息的SystemUserVo
|
* @return 包含关联信息的SystemUserVo
|
||||||
*/
|
*/
|
||||||
private SystemUserVo convertToUserVo(SystemUserTb user) {
|
private SystemUserVo convertToUserVo(SystemUserTb user, boolean includePassword) {
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
if (!includePassword) {
|
||||||
|
// 查询用户时,清空密码
|
||||||
|
user.setPassword(null);
|
||||||
|
}
|
||||||
SystemUserVo userVo = KitBeanUtil.copyToClass(user, SystemUserVo.class);
|
SystemUserVo userVo = KitBeanUtil.copyToClass(user, SystemUserVo.class);
|
||||||
// 查询关联的部门信息
|
// 查询关联的部门信息
|
||||||
if (user.getDeptId() != null) {
|
if (user.getDeptId() != null) {
|
||||||
SystemDeptVo dept = systemDeptService.getDeptVoById(user.getDeptId());
|
userVo.setDept(systemDeptService.getDeptVoById(user.getDeptId()));
|
||||||
userVo.setDept(dept);
|
|
||||||
}
|
}
|
||||||
// 查询关联的岗位信息
|
// 查询关联的岗位信息
|
||||||
List<SystemUserJobTb> userJobs = systemUserJobService.listUserJobByUserId(user.getId());
|
userVo.setJobs(systemUserJobService.listUserJobByUserId(user.getId()));
|
||||||
if (CollUtil.isNotEmpty(userJobs)) {
|
|
||||||
Set<Long> jobIds = userJobs.stream().map(SystemUserJobTb::getJobId).collect(Collectors.toSet());
|
|
||||||
List<SystemJobTb> jobs = systemJobService.listByIds(jobIds);
|
|
||||||
userVo.setJobs(new LinkedHashSet<>(jobs));
|
|
||||||
}
|
|
||||||
// 查询关联的角色信息
|
// 查询关联的角色信息
|
||||||
List<SystemUserRoleTb> userRoles = systemUserRoleService.listUserRoleByUserId(user.getId());
|
userVo.setRoles(systemUserRoleService.listUserRoleByUserId(user.getId()));
|
||||||
if (CollUtil.isNotEmpty(userRoles)) {
|
|
||||||
Set<Long> roleIds = userRoles.stream().map(SystemUserRoleTb::getRoleId).collect(Collectors.toSet());
|
|
||||||
List<SystemRoleTb> roles = systemRoleService.listByIds(roleIds);
|
|
||||||
userVo.setRoles(new LinkedHashSet<>(roles));
|
|
||||||
}
|
|
||||||
return userVo;
|
return userVo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -452,8 +444,12 @@ public class SystemUserService {
|
|||||||
return systemUserMapper.selectOne(wrapper);
|
return systemUserMapper.selectOne(wrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SystemUserVo getUserVoWithPasswordByUsername(String username) {
|
||||||
|
return this.convertToUserVo(this.getUserByUsername(username), true);
|
||||||
|
}
|
||||||
|
|
||||||
public SystemUserVo getUserVoByUsername(String username) {
|
public SystemUserVo getUserVoByUsername(String username) {
|
||||||
return this.convertToUserVo(this.getUserByUsername(username));
|
return this.convertToUserVo(this.getUserByUsername(username), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SystemUserTb getUserByEmail(String email) {
|
public SystemUserTb getUserByEmail(String email) {
|
||||||
@@ -474,9 +470,11 @@ public class SystemUserService {
|
|||||||
if (!ObjectUtils.isEmpty(args.getDeptId())) {
|
if (!ObjectUtils.isEmpty(args.getDeptId())) {
|
||||||
args.getDeptIds().add(args.getDeptId());
|
args.getDeptIds().add(args.getDeptId());
|
||||||
// 先查找是否存在子节点
|
// 先查找是否存在子节点
|
||||||
List<SystemDeptVo> data = systemDeptService.listDeptByPid(args.getDeptId());
|
List<SystemDeptTb> data = systemDeptService.listDeptByPid(args.getDeptId());
|
||||||
|
Map<Long, List<SystemDeptTb>> deptPidMap = systemDeptService.listPidNonNull().stream()
|
||||||
|
.collect(Collectors.groupingBy(SystemDeptTb::getPid));
|
||||||
// 然后把子节点的ID都加入到集合中
|
// 然后把子节点的ID都加入到集合中
|
||||||
args.getDeptIds().addAll(systemDeptService.queryChildDeptIdByDeptIds(data));
|
args.getDeptIds().addAll(systemDeptService.queryChildDeptIdByDeptIds(data, deptPidMap));
|
||||||
}
|
}
|
||||||
// 数据权限
|
// 数据权限
|
||||||
List<Long> dataScopes = systemDataService.queryDeptIdByArgs(this.getUserVoByUsername(currentUsername));
|
List<Long> dataScopes = systemDataService.queryDeptIdByArgs(this.getUserVoByUsername(currentUsername));
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||||
|
<mapper namespace="cn.odboy.system.dal.mysql.SystemRoleDeptMapper">
|
||||||
|
<select id="listUserDeptByRoleId" resultType="cn.odboy.system.dal.dataobject.SystemDeptTb">
|
||||||
|
SELECT DISTINCT t1.*, t1.dept_id as id
|
||||||
|
FROM system_dept t1
|
||||||
|
LEFT JOIN system_roles_depts t2 ON t1.dept_id = t2.dept_id
|
||||||
|
WHERE t2.role_id = #{roleId}
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||||
|
<mapper namespace="cn.odboy.system.dal.mysql.SystemUserJobMapper">
|
||||||
|
<select id="listUserJobByUserId" resultType="cn.odboy.system.dal.dataobject.SystemJobTb">
|
||||||
|
SELECT DISTINCT t1.*
|
||||||
|
FROM system_job t1
|
||||||
|
LEFT JOIN system_users_jobs t2 ON t1.id = t2.job_id
|
||||||
|
WHERE t1.enabled = 1
|
||||||
|
AND t2.user_id = #{userId}
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||||
|
<mapper namespace="cn.odboy.system.dal.mysql.SystemUserRoleMapper">
|
||||||
|
<select id="listUserRoleByUserId" resultType="cn.odboy.system.dal.dataobject.SystemRoleTb">
|
||||||
|
SELECT DISTINCT t1.*, t1.role_id as id
|
||||||
|
FROM system_role t1
|
||||||
|
LEFT JOIN system_users_roles t2 ON t1.role_id = t2.role_id
|
||||||
|
WHERE t2.user_id = #{userId}
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
Reference in New Issue
Block a user