user perm list

This commit is contained in:
James LIm 2025-07-08 14:42:20 +08:00
parent 64100cf1ff
commit 3b84f3d958
14 changed files with 221 additions and 35 deletions

View File

@ -49,7 +49,7 @@ spring:
driverClassName: com.mysql.cj.jdbc.Driver driverClassName: com.mysql.cj.jdbc.Driver
# jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
# rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true url: jdbc:mysql://localhost:3306/ry_yue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
username: root username: root
password: root password: root
# # 从库数据源 # # 从库数据源
@ -98,13 +98,11 @@ spring:
spring.data: spring.data:
redis: redis:
# 地址 # 地址
host: localhost host: 127.0.0.1
# 端口默认为6379 # 端口默认为6379
port: 6379 port: 6379
# 数据库索引 # 数据库索引
database: 0 database: 0
# redis 密码必须配置
password: ruoyi123
# 连接超时时间 # 连接超时时间
timeout: 10s timeout: 10s
# 是否开启ssl # 是否开启ssl

View File

@ -1,7 +1,7 @@
# 开发环境配置 # 开发环境配置
server: server:
# 服务器的HTTP端口默认为8080 # 服务器的HTTP端口默认为8080
port: 8080 port: 8999
servlet: servlet:
# 应用的访问路径 # 应用的访问路径
context-path: / context-path: /

View File

@ -0,0 +1,30 @@
package org.dromara.system.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import lombok.RequiredArgsConstructor;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.bo.SysUsrPermBo;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.domain.vo.SysUsrPermVo;
import org.dromara.system.service.ISysUsrPermService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/usrPerm")
public class SysUsrPermController extends BaseController {
private final ISysUsrPermService usrPerm;
@SaCheckPermission("system:user:list")
@GetMapping("/list")
public TableDataInfo<SysUsrPermVo> list(SysUsrPermBo user, PageQuery pageQuery) {
return usrPerm.selectUsrPermList(user,pageQuery);
}
}

View File

@ -0,0 +1,10 @@
package org.dromara.system.domain;
import lombok.Data;
@Data
public class SysUsrPerm {
private String userName;
private String userPerm;
}

View File

@ -0,0 +1,14 @@
package org.dromara.system.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.SysUsrPerm;
@Data
@AutoMapper(target = SysUsrPerm.class, reverseConvertGenerate = false)
public class SysUsrPermBo {
private String userName;
private String userPerm;
}

View File

@ -0,0 +1,10 @@
package org.dromara.system.domain.vo;
import lombok.Data;
@Data
public class SysUsrPermVo {
private String userName;
private String userPerm;
}

View File

@ -2,6 +2,7 @@ package org.dromara.system.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -32,9 +33,8 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
@DataColumn(key = "deptName", value = "dept_id"), @DataColumn(key = "deptName", value = "dept_id"),
@DataColumn(key = "userName", value = "user_id") @DataColumn(key = "userName", value = "user_id")
}) })
default Page<SysUserVo> selectPageUserList(Page<SysUser> page, Wrapper<SysUser> queryWrapper) { Page<SysUserVo> selectPageUserList(@Param("page") Page<SysUserVo> page, @Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
return this.selectVoPage(page, queryWrapper);
}
/** /**
* 查询用户列表并进行数据权限控制 * 查询用户列表并进行数据权限控制

View File

@ -0,0 +1,19 @@
package org.dromara.system.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
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.core.mapper.BaseMapperPlus;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.SysUsrPerm;
import org.dromara.system.domain.vo.SysUserExportVo;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.domain.vo.SysUsrPermVo;
import java.util.List;
public interface SysUsrPermMapper extends BaseMapperPlus<SysUsrPerm, SysUserVo> {
Page<SysUsrPermVo> selectUsrPermList(@Param("page") Page<SysUsrPerm> page,@Param(Constants.WRAPPER) Wrapper<SysUsrPerm> queryWrapper);
}

View File

@ -3,8 +3,10 @@ package org.dromara.system.service;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.bo.SysUsrPermBo;
import org.dromara.system.domain.vo.SysUserExportVo; import org.dromara.system.domain.vo.SysUserExportVo;
import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.domain.vo.SysUsrPermVo;
import java.util.List; import java.util.List;

View File

@ -0,0 +1,14 @@
package org.dromara.system.service;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.domain.bo.SysUsrPermBo;
import org.dromara.system.domain.vo.SysUsrPermVo;
import java.util.List;
public interface ISysUsrPermService {
TableDataInfo<SysUsrPermVo> selectUsrPermList(SysUsrPermBo user, PageQuery pageQuery);
}

View File

@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jodd.util.StringUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.constant.CacheNames;
@ -57,8 +58,12 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override @Override
public TableDataInfo<SysUserVo> selectPageUserList(SysUserBo user, PageQuery pageQuery) { public TableDataInfo<SysUserVo> selectPageUserList(SysUserBo user, PageQuery pageQuery) {
Page<SysUserVo> page = baseMapper.selectPageUserList(pageQuery.build(), this.buildQueryWrapper(user)); Wrapper<SysUser> wrapper = this.buildQueryWrapper(user, pageQuery);
return TableDataInfo.build(page);
Page<SysUserVo> page = pageQuery.build();
Page<SysUserVo> resultPage = baseMapper.selectPageUserList(page, wrapper);
return TableDataInfo.build(resultPage);
} }
/** /**
@ -87,30 +92,47 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
return baseMapper.selectUserExportList(wrapper); return baseMapper.selectUserExportList(wrapper);
} }
private Wrapper<SysUser> buildQueryWrapper(SysUserBo user) { private Wrapper<SysUser> buildQueryWrapper(SysUserBo user, PageQuery pageQuery) {
Map<String, Object> params = user.getParams(); Map<String, Object> params = user.getParams();
LambdaQueryWrapper<SysUser> wrapper = Wrappers.lambdaQuery(); QueryWrapper<SysUser> wrapper = Wrappers.query();
wrapper.eq(SysUser::getDelFlag, SystemConstants.NORMAL)
.eq(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId()) wrapper.eq("u.del_flag", SystemConstants.NORMAL)
.in(StringUtils.isNotBlank(user.getUserIds()), SysUser::getUserId, StringUtils.splitTo(user.getUserIds(), Convert::toLong)) .eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId())
.like(StringUtils.isNotBlank(user.getUserName()), SysUser::getUserName, user.getUserName()) .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
.like(StringUtils.isNotBlank(user.getNickName()), SysUser::getNickName, user.getNickName()) .like(StringUtils.isNotBlank(user.getNickName()), "u.nick_name", user.getNickName())
.eq(StringUtils.isNotBlank(user.getStatus()), SysUser::getStatus, user.getStatus()) .eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
.like(StringUtils.isNotBlank(user.getPhonenumber()), SysUser::getPhonenumber, user.getPhonenumber()) .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
.between(params.get("beginTime") != null && params.get("endTime") != null, .between(params.get("beginTime") != null && params.get("endTime") != null,
SysUser::getCreateTime, params.get("beginTime"), params.get("endTime")) "u.create_time", params.get("beginTime"), params.get("endTime"))
.and(ObjectUtil.isNotNull(user.getDeptId()), w -> { .and(ObjectUtil.isNotNull(user.getDeptId()), w -> {
List<SysDept> deptList = deptMapper.selectListByParentId(user.getDeptId()); List<SysDept> deptList = deptMapper.selectListByParentId(user.getDeptId());
List<Long> ids = StreamUtils.toList(deptList, SysDept::getDeptId); List<Long> ids = StreamUtils.toList(deptList, SysDept::getDeptId);
ids.add(user.getDeptId()); ids.add(user.getDeptId());
w.in(SysUser::getDeptId, ids); w.in("u.dept_id", ids);
}).orderByAsc(SysUser::getUserId); });
if (StringUtils.isNotBlank(user.getExcludeUserIds())) { if (StringUtils.isNotBlank(user.getExcludeUserIds())) {
wrapper.notIn(SysUser::getUserId, StringUtils.splitList(user.getExcludeUserIds())); wrapper.notIn("u.user_id", StringUtils.splitList(user.getExcludeUserIds()));
}
if(StringUtils.isNotBlank(pageQuery.getOrderByColumn()))
{
String sortingDirection = StringUtils.equals("asc",pageQuery.getIsAsc()) ? "ASC": "DESC";
String sortingFieldName = getFieldWithTableName(pageQuery.getOrderByColumn());
wrapper.last("ORDER BY " + sortingFieldName + " " + sortingDirection);
} }
return wrapper; return wrapper;
} }
private String getFieldWithTableName(String fieldName) {
String fieldTargetTableName = "u.";
if(StringUtil.equals(fieldName,"dept_name"))
{
fieldTargetTableName = "d.";
}
return fieldTargetTableName + fieldName;
}
/** /**
* 根据条件分页查询已分配用户角色列表 * 根据条件分页查询已分配用户角色列表
* *

View File

@ -0,0 +1,40 @@
package org.dromara.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.SysUsrPerm;
import org.dromara.system.domain.bo.SysUsrPermBo;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.domain.vo.SysUsrPermVo;
import org.dromara.system.mapper.SysUserMapper;
import org.dromara.system.mapper.SysUsrPermMapper;
import org.dromara.system.service.ISysUsrPermService;
import org.springframework.stereotype.Service;
import java.util.List;
@Slf4j
@RequiredArgsConstructor
@Service
public class SysUsrPermServiceImpl implements ISysUsrPermService {
private final SysUsrPermMapper baseMapper;
@Override
public TableDataInfo<SysUsrPermVo> selectUsrPermList(SysUsrPermBo user, PageQuery pageQuery){
QueryWrapper<SysUsrPerm> wrapper = Wrappers.query();
wrapper.like(StringUtils.isNotBlank(user.getUserName()), "user_name", user.getUserName())
.like(StringUtils.isNotBlank(user.getUserPerm()), "user_perm", user.getUserPerm() );
Page<SysUsrPermVo> page = baseMapper.selectUsrPermList(pageQuery.build(), wrapper);
return TableDataInfo.build(page);
}
}

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper <!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.system.mapper.SysUserMapper"> <mapper namespace="org.dromara.system.mapper.SysUserMapper">
<resultMap type="org.dromara.system.domain.vo.SysUserVo" id="SysUserResult"> <resultMap type="org.dromara.system.domain.vo.SysUserVo" id="SysUserResult">
@ -11,31 +11,40 @@
<id property="userId" column="user_id"/> <id property="userId" column="user_id"/>
</resultMap> </resultMap>
<select id="selectPageUserList" resultMap="SysUserResult">
SELECT u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex,
u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
d.dept_name
FROM sys_user u
LEFT JOIN sys_dept d ON u.dept_id = d.dept_id
${ew.getCustomSqlSegment}
</select>
<select id="selectUserExportList" resultMap="SysUserExportResult"> <select id="selectUserExportList" resultMap="SysUserExportResult">
select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex,
u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
d.dept_name, d.leader, u1.user_name as leaderName d.dept_name, d.leader, u1.user_name as leaderName
from sys_user u from sys_user u
left join sys_dept d on u.dept_id = d.dept_id left join sys_dept d on u.dept_id = d.dept_id
left join sys_user u1 on u1.user_id = d.leader left join sys_user u1 on u1.user_id = d.leader
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
</select> </select>
<select id="selectAllocatedList" resultMap="SysUserResult"> <select id="selectAllocatedList" resultMap="SysUserResult">
select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
from sys_user u from sys_user u
left join sys_dept d on u.dept_id = d.dept_id left join sys_dept d on u.dept_id = d.dept_id
left join sys_user_role sur on u.user_id = sur.user_id left join sys_user_role sur on u.user_id = sur.user_id
left join sys_role r on r.role_id = sur.role_id left join sys_role r on r.role_id = sur.role_id
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
</select> </select>
<select id="selectUnallocatedList" resultMap="SysUserResult"> <select id="selectUnallocatedList" resultMap="SysUserResult">
select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
from sys_user u from sys_user u
left join sys_dept d on u.dept_id = d.dept_id left join sys_dept d on u.dept_id = d.dept_id
left join sys_user_role sur on u.user_id = sur.user_id left join sys_user_role sur on u.user_id = sur.user_id
left join sys_role r on r.role_id = sur.role_id left join sys_role r on r.role_id = sur.role_id
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
</select> </select>

View File

@ -0,0 +1,18 @@
<?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="org.dromara.system.mapper.SysUsrPermMapper">
<resultMap type="org.dromara.system.domain.vo.SysUsrPermVo" id="SysUsrPrmResult">
<id property="username" column="username"/>
</resultMap>
<select id="selectUsrPermList" resultMap="SysUsrPrmResult">
SELECT user_name ,tenant_id ,user_perm
FROM v_user_per_menus
${ew.getCustomSqlSegment}
</select>
</mapper>