登录成功

This commit is contained in:
2025-10-06 16:20:05 +08:00
parent a3e8687b31
commit a58f316703
54 changed files with 17818 additions and 622 deletions

View File

@@ -0,0 +1,43 @@
package org.xyzh.system.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.xyzh.api.system.user.UserService;
import org.xyzh.common.annotation.HttpLogin;
import org.xyzh.common.core.domain.LoginDomain;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.dto.user.TbSysUserInfo;
import org.springframework.web.bind.annotation.GetMapping;
/**
* @description UserController.java文件描述 用户控制器
* @filename UserController.java
* @author yslg
* @copyright xyzh
* @ since 2025-10-06
*/
@RestController
@RequestMapping("/user")
public class UserController {
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
@Autowired
private UserService userService;
@GetMapping("/userinfo")
public ResultDomain<TbSysUserInfo> getUserInfo(@HttpLogin LoginDomain loginDomain){
ResultDomain<TbSysUserInfo> result = new ResultDomain<>();
logger.info("loginDomain: {}", loginDomain);
String userID = loginDomain.getUser().getID();
ResultDomain<TbSysUserInfo> userInfo = userService.getUserInfoById(userID);
result.setData(userInfo.getData());
return result;
}
}

View File

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.xyzh.common.dto.role.TbSysRole;
import org.xyzh.common.vo.DeptRoleVO;
import java.util.List;
@@ -20,11 +21,11 @@ public interface RoleMapper extends BaseMapper<TbSysRole> {
/**
* @description 根据用户ID查询角色列表
* @param userId 用户ID
* @return List<TbSysRole> 角色列表
* @return List<DeptRoleVO> 部门角色列表
* @author yslg
* @since 2025-09-28
*/
List<TbSysRole> selectRolesByUserId(@Param("userId") String userId);
List<DeptRoleVO> selectDeptRolesByUserId(@Param("userId") String userId);
/**
* @description 根据角色编码查询角色

View File

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.xyzh.common.dto.user.TbSysUser;
import org.xyzh.common.dto.user.TbSysUserInfo;
import java.util.List;
@@ -26,6 +27,15 @@ public interface UserMapper extends BaseMapper<TbSysUser> {
*/
TbSysUser selectByUsername(@Param("username") String username);
/**
* @description 根据用户ID查询用户信息
* @param userId 用户ID
* @return TbSysUserInfo 用户信息
* @author yslg
* @since 2025-10-06
*/
TbSysUserInfo selectUserInfoById(@Param("userId") String userId);
/**
* @description 根据邮箱查询用户
* @param email 邮箱

View File

@@ -7,8 +7,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.dto.dept.TbSysDeptRole;
import org.xyzh.common.dto.role.TbSysRole;
import org.xyzh.common.utils.IDUtils;
import org.xyzh.common.vo.DeptRoleVO;
import org.xyzh.system.mapper.RoleMapper;
import org.xyzh.system.role.service.SysRoleService;
@@ -89,24 +91,24 @@ public class SysRoleServiceImpl implements SysRoleService {
}
@Override
public ResultDomain<TbSysRole> getRolesByUserId(String userId) {
ResultDomain<TbSysRole> resultDomain = new ResultDomain<>();
public ResultDomain<DeptRoleVO> getDeptRolesByUserId(String userId) {
ResultDomain<DeptRoleVO> resultDomain = new ResultDomain<>();
try {
logger.info("开始根据用户ID查询角色列表{}", userId);
logger.info("开始根据用户ID查询部门角色列表:{}", userId);
if (!StringUtils.hasText(userId)) {
resultDomain.fail("用户ID不能为空");
return resultDomain;
}
List<TbSysRole> roles = roleMapper.selectRolesByUserId(userId);
List<DeptRoleVO> roles = roleMapper.selectDeptRolesByUserId(userId);
logger.info("根据用户ID查询角色列表完成共找到{}个角色", roles.size());
logger.info("根据用户ID查询部门角色列表完成,共找到{}个部门角色", roles.size());
resultDomain.success("查询成功", roles);
return resultDomain;
} catch (Exception e) {
logger.error("根据用户ID查询角色列表失败{}", userId, e);
logger.error("根据用户ID查询部门角色列表失败:{}", userId, e);
resultDomain.fail("查询角色失败:" + e.getMessage());
return resultDomain;
}

View File

@@ -8,6 +8,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.dto.user.TbSysUser;
import org.xyzh.common.dto.user.TbSysUserInfo;
import org.xyzh.common.utils.IDUtils;
import org.xyzh.system.mapper.UserMapper;
import org.xyzh.system.user.service.SysUserService;
@@ -512,4 +513,34 @@ public class SysUserServiceImpl implements SysUserService {
return resultDomain;
}
}
@Override
public ResultDomain<TbSysUserInfo> getUserInfoById(String userId) {
ResultDomain<TbSysUserInfo> resultDomain = new ResultDomain<>();
try {
logger.info("开始根据ID查询用户信息{}", userId);
if (!StringUtils.hasText(userId)) {
resultDomain.fail("用户ID不能为空");
return resultDomain;
}
TbSysUserInfo userInfo = userMapper.selectUserInfoById(userId);
if (userInfo == null) {
logger.warn("未找到用户信息:{}", userId);
resultDomain.fail("未找到指定用户信息");
return resultDomain;
}
logger.info("根据ID查询用户信息完成{}", userId);
resultDomain.success("查询成功", userInfo);
return resultDomain;
} catch (Exception e) {
logger.error("根据ID查询用户信息失败{}", userId, e);
resultDomain.fail("查询用户信息失败:" + e.getMessage());
return resultDomain;
}
}
}

View File

@@ -83,9 +83,9 @@ mybatis-plus:
# 日志配置
logging:
config: classpath:log4j2-spring.xml
level:
org.xyzh.system: DEBUG
org.xyzh.system.mapper: DEBUG
charset:
console: UTF-8
file: UTF-8
# 管理端点配置
management:

View File

@@ -1,175 +1,139 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
@description log4j2-spring.xml文件描述 System模块Log4j2配置文件
@filename log4j2-spring.xml
@author yslg
@copyright xyzh
@since 2025-09-28
校园新闻管理系统 - System模块日志配置
-->
<Configuration status="WARN" monitorInterval="30">
<!-- 全局属性 -->
<configuration status="WARN" monitorInterval="30">
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--变量配置-->
<Properties>
<!-- 应用名称 -->
<Property name="APP_NAME">school-news-system</Property>
<!-- 日志文件路径 -->
<Property name="LOG_HOME">./logs/${APP_NAME}</Property>
<!-- 日志格式 -->
<Property name="LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%X{traceId}] %logger{36} - %msg%n</Property>
<!-- 控制台日志格式(带颜色) -->
<Property name="CONSOLE_PATTERN">%d{HH:mm:ss.SSS} %highlight{%-5level} [%t] %style{[%X{traceId}]}{cyan} %style{%logger{36}}{magenta} - %msg%n</Property>
<!-- 格式化输出:%date表示日期%thread表示线程名%-5level级别从左显示5个字符宽度 %msg日志消息%n是换行符-->
<!-- %logger{36} 表示 Logger 名字最长36个字符 -->
<property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
<!-- 定义日志存储的路径 -->
<property name="FILE_PATH" value="./logs" />
<!-- System模块日志文件名 -->
<property name="FILE_NAME" value="school-news-system" />
<!-- 设置系统属性 -->
<property name="file.encoding" value="UTF-8" />
<property name="console.encoding" value="UTF-8" />
</Properties>
<!-- 输出器配置 -->
<Appenders>
<!-- 控制台输出 -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${CONSOLE_PATTERN}"/>
<!-- 只输出INFO及以上级别 -->
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
</Console>
<!-- 调试日志文件 -->
<RollingFile name="DebugFile" fileName="${LOG_HOME}/debug.log"
filePattern="${LOG_HOME}/debug.%d{yyyy-MM-dd}.%i.log.gz">
<PatternLayout pattern="${LOG_PATTERN}"/>
<appenders>
<console name="Console" target="SYSTEM_OUT">
<!--输出日志的格式-->
<PatternLayout pattern="${LOG_PATTERN}" charset="UTF-8"/>
<!--控制台输出debug及以上级别的信息-->
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
</console>
<!--文件会打印出所有信息这个log每次运行程序会自动清空由append属性决定适合临时测试用-->
<File name="Filelog" fileName="${FILE_PATH}/${FILE_NAME}-test.log" append="false">
<PatternLayout pattern="${LOG_PATTERN}" charset="UTF-8"/>
</File>
<!-- 这个会打印出所有的info及以下级别的信息每次大小超过size则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/${FILE_NAME}-info.log" filePattern="${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz">
<!--控制台只输出level及以上级别的信息onMatch其他的直接拒绝onMismatch-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${LOG_PATTERN}" charset="UTF-8"/>
<Policies>
<!-- 每天轮转 -->
<!--interval属性用来指定多久滚动一次默认是1 hour-->
<TimeBasedTriggeringPolicy interval="1"/>
<!-- 文件大小超过100MB轮转 -->
<SizeBasedTriggeringPolicy size="100MB"/>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
<!-- 保留30天的日志文件 -->
<DefaultRolloverStrategy max="30"/>
<!-- 只输出DEBUG级别 -->
<LevelRangeFilter minLevel="DEBUG" maxLevel="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- DefaultRolloverStrategy属性如不设置则默认为最多同一文件夹下7个文件开始覆盖-->
<DefaultRolloverStrategy max="15"/>
</RollingFile>
<!-- 信息日志文件 -->
<RollingFile name="InfoFile" fileName="${LOG_HOME}/info.log"
filePattern="${LOG_HOME}/info.%d{yyyy-MM-dd}.%i.log.gz">
<PatternLayout pattern="${LOG_PATTERN}"/>
<!-- 这个会打印出所有的warn及以下级别的信息每次大小超过size则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/${FILE_NAME}-warn.log" filePattern="${FILE_PATH}/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz">
<!--控制台只输出level及以上级别的信息onMatch其他的直接拒绝onMismatch-->
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${LOG_PATTERN}" charset="UTF-8"/>
<Policies>
<!--interval属性用来指定多久滚动一次默认是1 hour-->
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="100MB"/>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
<DefaultRolloverStrategy max="30"/>
<!-- 只输出INFO级别 -->
<LevelRangeFilter minLevel="INFO" maxLevel="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- DefaultRolloverStrategy属性如不设置则默认为最多同一文件夹下7个文件开始覆盖-->
<DefaultRolloverStrategy max="15"/>
</RollingFile>
<!-- 警告日志文件 -->
<RollingFile name="WarnFile" fileName="${LOG_HOME}/warn.log"
filePattern="${LOG_HOME}/warn.%d{yyyy-MM-dd}.%i.log.gz">
<PatternLayout pattern="${LOG_PATTERN}"/>
<!-- 这个会打印出所有的error及以下级别的信息每次大小超过size则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFileError" fileName="${FILE_PATH}/${FILE_NAME}-error.log" filePattern="${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.gz">
<!--控制台只输出level及以上级别的信息onMatch其他的直接拒绝onMismatch-->
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${LOG_PATTERN}" charset="UTF-8"/>
<Policies>
<!--interval属性用来指定多久滚动一次默认是1 hour-->
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="100MB"/>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
<DefaultRolloverStrategy max="30"/>
<!-- 只输出WARN级别 -->
<LevelRangeFilter minLevel="WARN" maxLevel="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- DefaultRolloverStrategy属性如不设置则默认为最多同一文件夹下7个文件开始覆盖-->
<DefaultRolloverStrategy max="15"/>
</RollingFile>
<!-- 错误日志文件 -->
<RollingFile name="ErrorFile" fileName="${LOG_HOME}/error.log"
filePattern="${LOG_HOME}/error.%d{yyyy-MM-dd}.%i.log.gz">
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="100MB"/>
</Policies>
<DefaultRolloverStrategy max="30"/>
<!-- 只输出ERROR及以上级别 -->
<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
</RollingFile>
<!-- SQL日志文件 -->
<RollingFile name="SqlFile" fileName="${LOG_HOME}/sql.log"
filePattern="${LOG_HOME}/sql.%d{yyyy-MM-dd}.%i.log.gz">
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="50MB"/>
</Policies>
<DefaultRolloverStrategy max="7"/>
</RollingFile>
<!-- 异步输出器 -->
<AsyncAppender name="AsyncConsole">
</appenders>
<!--Logger节点用来单独指定日志的形式比如要为指定包下的class指定不同的日志级别等。-->
<!--然后定义loggers只有定义了logger并引入的appenderappender才会生效-->
<loggers>
<!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
<logger name="org.mybatis" level="info" additivity="false">
<AppenderRef ref="Console"/>
</logger>
<!--监控系统信息-->
<!--若是additivity设为false则 子Logger 只会在自己的appender里输出不会在 父Logger 的appender里输出。-->
<Logger name="org.springframework" level="info" additivity="false">
<AppenderRef ref="Console"/>
<BufferSize>1024</BufferSize>
</AsyncAppender>
<AsyncAppender name="AsyncDebugFile">
<AppenderRef ref="DebugFile"/>
<BufferSize>1024</BufferSize>
</AsyncAppender>
<AsyncAppender name="AsyncInfoFile">
<AppenderRef ref="InfoFile"/>
<BufferSize>1024</BufferSize>
</AsyncAppender>
<AsyncAppender name="AsyncWarnFile">
<AppenderRef ref="WarnFile"/>
<BufferSize>1024</BufferSize>
</AsyncAppender>
<AsyncAppender name="AsyncErrorFile">
<AppenderRef ref="ErrorFile"/>
<BufferSize>1024</BufferSize>
</AsyncAppender>
<AsyncAppender name="AsyncSqlFile">
<AppenderRef ref="SqlFile"/>
<BufferSize>512</BufferSize>
</AsyncAppender>
</Appenders>
<!-- 记录器配置 -->
<Loggers>
<!-- SQL日志 -->
<Logger name="org.xyzh.system.mapper" level="DEBUG" additivity="false">
<AppenderRef ref="AsyncSqlFile"/>
<AppenderRef ref="AsyncConsole"/>
</Logger>
<!-- MyBatis日志 -->
<Logger name="com.baomidou.mybatisplus" level="DEBUG" additivity="false">
<AppenderRef ref="AsyncSqlFile"/>
<!-- 项目包日志配置 - Auth模块 -->
<Logger name="org.xyzh.auth" level="debug" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="Filelog"/>
<AppenderRef ref="RollingFileInfo"/>
<AppenderRef ref="RollingFileWarn"/>
<AppenderRef ref="RollingFileError"/>
</Logger>
<!-- Druid日志 -->
<Logger name="com.alibaba.druid" level="INFO" additivity="false">
<AppenderRef ref="AsyncInfoFile"/>
<!-- 项目包日志配置 - System模块 -->
<Logger name="org.xyzh.system" level="debug" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="Filelog"/>
<AppenderRef ref="RollingFileInfo"/>
<AppenderRef ref="RollingFileWarn"/>
<AppenderRef ref="RollingFileError"/>
</Logger>
<!-- Spring框架日志 -->
<Logger name="org.springframework" level="INFO" additivity="false">
<AppenderRef ref="AsyncInfoFile"/>
<!-- 项目包日志配置 - News模块 -->
<Logger name="org.xyzh.news" level="debug" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="Filelog"/>
<AppenderRef ref="RollingFileInfo"/>
<AppenderRef ref="RollingFileWarn"/>
<AppenderRef ref="RollingFileError"/>
</Logger>
<!-- 系统模块日志 -->
<Logger name="org.xyzh.system" level="DEBUG" additivity="false">
<AppenderRef ref="AsyncDebugFile"/>
<AppenderRef ref="AsyncInfoFile"/>
<AppenderRef ref="AsyncWarnFile"/>
<AppenderRef ref="AsyncErrorFile"/>
<AppenderRef ref="AsyncConsole"/>
<!-- 项目包日志配置 - Common模块 -->
<Logger name="org.xyzh.common" level="debug" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="Filelog"/>
<AppenderRef ref="RollingFileInfo"/>
<AppenderRef ref="RollingFileWarn"/>
<AppenderRef ref="RollingFileError"/>
</Logger>
<!-- 根记录器 -->
<Root level="INFO">
<AppenderRef ref="AsyncInfoFile"/>
<AppenderRef ref="AsyncWarnFile"/>
<AppenderRef ref="AsyncErrorFile"/>
<AppenderRef ref="AsyncConsole"/>
</Root>
</Loggers>
</Configuration>
<root level="info">
<appender-ref ref="Console"/>
<appender-ref ref="Filelog"/>
<appender-ref ref="RollingFileInfo"/>
<appender-ref ref="RollingFileWarn"/>
<appender-ref ref="RollingFileError"/>
</root>
</loggers>
</configuration>

View File

@@ -6,12 +6,12 @@
<resultMap id="BaseResultMap" type="org.xyzh.common.dto.menu.TbSysMenu">
<id column="id" property="id" jdbcType="VARCHAR"/>
<result column="menu_id" property="menuID" jdbcType="VARCHAR"/>
<result column="name" property="menuName" jdbcType="VARCHAR"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="parent_id" property="parentID" jdbcType="VARCHAR"/>
<result column="url" property="path" jdbcType="VARCHAR"/>
<result column="url" property="url" jdbcType="VARCHAR"/>
<result column="icon" property="icon" jdbcType="VARCHAR"/>
<result column="order_num" property="sort" jdbcType="INTEGER"/>
<result column="type" property="menuType" jdbcType="INTEGER"/>
<result column="order_num" property="orderNum" jdbcType="INTEGER"/>
<result column="type" property="type" jdbcType="INTEGER"/>
<result column="creator" property="creator" jdbcType="VARCHAR"/>
<result column="updater" property="updater" jdbcType="VARCHAR"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
@@ -22,25 +22,19 @@
<!-- 基础字段 -->
<sql id="Base_Column_List">
id, menu_id, name, parent_id, url, icon, order_num, type,
creator, updater, create_time, update_time, delete_time, deleted
m.id, m.menu_id, m.name, m.parent_id, m.url, m.icon, m.order_num, m.type,
m.creator, m.updater, m.create_time, m.update_time, m.delete_time, m.deleted
</sql>
<!-- 通用条件 -->
<sql id="Where_Clause">
<where>
deleted = 0
<if test="menuName != null and menuName != ''">
AND menu_name LIKE CONCAT('%', #{menuName}, '%')
<if test="name != null and name != ''">
AND name LIKE CONCAT('%', #{name}, '%')
</if>
<if test="menuType != null">
AND menu_type = #{menuType}
</if>
<if test="status != null">
AND status = #{status}
</if>
<if test="visible != null">
AND visible = #{visible}
<if test="type != null">
AND type = #{type}
</if>
</where>
</sql>
@@ -48,81 +42,74 @@
<!-- 根据用户ID查询菜单列表 -->
<select id="selectMenusByUserId" resultMap="BaseResultMap">
SELECT DISTINCT
m.id, m.menu_id, m.parent_id, m.menu_name, m.menu_type,
m.path, m.component, m.permission, m.icon, m.sort,
m.visible, m.status, m.external_link, m.cache, m.frame,
m.query, m.remark, m.creator, m.updater,
m.create_time, m.update_time, m.delete_time, m.deleted
FROM tb_sys_menu m
INNER JOIN tb_sys_role_menu rm ON m.menu_id = rm.menu_id
INNER JOIN tb_sys_user_role ur ON rm.role_id = ur.role_id
<include refid="Base_Column_List"/>
FROM tb_sys_user_dept_role ur
INNER JOIN tb_sys_role_permission rp ON rp.role_id = ur.role_id
INNER JOIN tb_sys_menu_permission mp ON mp.permission_id = rp.permission_id
INNER JOIN tb_sys_menu m ON m.menu_id = mp.menu_id
WHERE m.deleted = 0
AND rm.deleted = 0
AND rp.deleted = 0
AND mp.deleted = 0
AND ur.deleted = 0
AND ur.user_id = #{userId}
AND m.status = 1
AND m.visible = 1
ORDER BY m.sort ASC, m.create_time ASC
ORDER BY m.create_time ASC
</select>
<!-- 根据角色ID查询菜单列表 -->
<select id="selectMenusByRoleId" resultMap="BaseResultMap">
SELECT
m.id, m.menu_id, m.parent_id, m.menu_name, m.menu_type,
m.path, m.component, m.permission, m.icon, m.sort,
m.visible, m.status, m.external_link, m.cache, m.frame,
m.query, m.remark, m.creator, m.updater,
m.create_time, m.update_time, m.delete_time, m.deleted
FROM tb_sys_menu m
INNER JOIN tb_sys_role_menu rm ON m.menu_id = rm.menu_id
<include refid="Base_Column_List"/>
FROM tb_sys_role_permission rp
INNER JOIN tb_sys_menu_permission mp ON mp.permission_id = rp.permission_id
INNER JOIN tb_sys_menu m ON m.menu_id = mp.menu_id
WHERE m.deleted = 0
AND rm.deleted = 0
AND rm.role_id = #{roleId}
ORDER BY m.sort ASC, m.create_time ASC
AND mp.deleted = 0
AND rp.deleted = 0
AND rp.role_id = #{roleId}
ORDER BY m.create_time ASC
</select>
<!-- 根据父菜单ID查询子菜单列表 -->
<select id="selectByParentId" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM tb_sys_menu
WHERE deleted = 0
FROM tb_sys_menu m
WHERE m.deleted = 0
AND parent_id = #{parentId}
ORDER BY sort ASC, create_time ASC
ORDER BY create_time ASC
</select>
<!-- 查询菜单树结构 -->
<select id="selectMenuTree" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM tb_sys_menu
WHERE deleted = 0
FROM tb_sys_menu m
WHERE m.deleted = 0
ORDER BY
CASE WHEN parent_id IS NULL OR parent_id = '' THEN 0 ELSE 1 END,
parent_id,
sort ASC,
create_time ASC
</select>
<!-- 检查菜单名称是否存在 -->
<select id="countByMenuName" resultType="int">
SELECT COUNT(1)
FROM tb_sys_menu
FROM tb_sys_menu m
WHERE deleted = 0
AND menu_name = #{menuName}
AND m.name = #{name}
<if test="excludeId != null and excludeId != ''">
AND id != #{excludeId}
AND m.id != #{excludeId}
</if>
</select>
<!-- 批量删除菜单(逻辑删除) -->
<update id="batchDeleteByIds">
UPDATE tb_sys_menu
UPDATE tb_sys_menu m
SET deleted = 1,
delete_time = NOW(),
updater = #{updater}
WHERE deleted = 0
AND id IN
WHERE m.deleted = 0
AND m.id IN
<foreach collection="menuIds" item="menuId" open="(" separator="," close=")">
#{menuId}
</foreach>
@@ -135,20 +122,10 @@
<if test="id != null">id,</if>
<if test="menuID != null">menu_id,</if>
<if test="parentID != null">parent_id,</if>
<if test="menuName != null">menu_name,</if>
<if test="menuType != null">menu_type,</if>
<if test="path != null">path,</if>
<if test="component != null">component,</if>
<if test="permission != null">permission,</if>
<if test="name != null">name,</if>
<if test="type != null">type,</if>
<if test="url != null">url,</if>
<if test="icon != null">icon,</if>
<if test="sort != null">sort,</if>
<if test="visible != null">visible,</if>
<if test="status != null">status,</if>
<if test="externalLink != null">external_link,</if>
<if test="cache != null">cache,</if>
<if test="frame != null">frame,</if>
<if test="query != null">query,</if>
<if test="remark != null">remark,</if>
<if test="creator != null">creator,</if>
<if test="createTime != null">create_time,</if>
deleted
@@ -157,20 +134,10 @@
<if test="id != null">#{id},</if>
<if test="menuID != null">#{menuID},</if>
<if test="parentID != null">#{parentID},</if>
<if test="menuName != null">#{menuName},</if>
<if test="menuType != null">#{menuType},</if>
<if test="path != null">#{path},</if>
<if test="component != null">#{component},</if>
<if test="permission != null">#{permission},</if>
<if test="name != null">#{name},</if>
<if test="type != null">#{type},</if>
<if test="url != null">#{url},</if>
<if test="icon != null">#{icon},</if>
<if test="sort != null">#{sort},</if>
<if test="visible != null">#{visible},</if>
<if test="status != null">#{status},</if>
<if test="externalLink != null">#{externalLink},</if>
<if test="cache != null">#{cache},</if>
<if test="frame != null">#{frame},</if>
<if test="query != null">#{query},</if>
<if test="remark != null">#{remark},</if>
<if test="creator != null">#{creator},</if>
<if test="createTime != null">#{createTime},</if>
0
@@ -183,20 +150,10 @@
<set>
<if test="menuID != null">menu_id = #{menuID},</if>
<if test="parentID != null">parent_id = #{parentID},</if>
<if test="menuName != null">menu_name = #{menuName},</if>
<if test="menuType != null">menu_type = #{menuType},</if>
<if test="path != null">path = #{path},</if>
<if test="component != null">component = #{component},</if>
<if test="permission != null">permission = #{permission},</if>
<if test="name != null">name = #{name},</if>
<if test="type != null">type = #{type},</if>
<if test="url != null">url = #{url},</if>
<if test="icon != null">icon = #{icon},</if>
<if test="sort != null">sort = #{sort},</if>
<if test="visible != null">visible = #{visible},</if>
<if test="status != null">status = #{status},</if>
<if test="externalLink != null">external_link = #{externalLink},</if>
<if test="cache != null">cache = #{cache},</if>
<if test="frame != null">frame = #{frame},</if>
<if test="query != null">query = #{query},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="updater != null">updater = #{updater},</if>
update_time = NOW()
</set>

View File

@@ -6,8 +6,8 @@
<resultMap id="BaseResultMap" type="org.xyzh.common.dto.permission.TbSysPermission">
<id column="id" property="id" jdbcType="VARCHAR"/>
<result column="permission_id" property="permissionID" jdbcType="VARCHAR"/>
<result column="name" property="permissionName" jdbcType="VARCHAR"/>
<result column="code" property="permissionCode" jdbcType="VARCHAR"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="code" property="code" jdbcType="VARCHAR"/>
<result column="description" property="description" jdbcType="VARCHAR"/>
<result column="creator" property="creator" jdbcType="VARCHAR"/>
<result column="updater" property="updater" jdbcType="VARCHAR"/>
@@ -27,11 +27,11 @@
<sql id="Where_Clause">
<where>
deleted = 0
<if test="permissionName != null and permissionName != ''">
AND permission_name LIKE CONCAT('%', #{permissionName}, '%')
<if test="name != null and name != ''">
AND name LIKE CONCAT('%', #{name}, '%')
</if>
<if test="permissionCode != null and permissionCode != ''">
AND permission_code = #{permissionCode}
<if test="code != null and code != ''">
AND code = #{code}
</if>
<if test="permissionType != null">
AND permission_type = #{permissionType}
@@ -45,63 +45,60 @@
<!-- 根据用户ID查询权限列表 -->
<select id="selectPermissionsByUserId" resultMap="BaseResultMap">
SELECT DISTINCT
p.id, p.permission_id, p.permission_name, p.permission_code,
p.permission_type, p.resource_url, p.http_method, p.description,
p.status, p.sort, p.creator, p.updater,
p.id, p.permission_id, p.name, p.code, p.description,
p.creator, p.updater,
p.create_time, p.update_time, p.delete_time, p.deleted
FROM tb_sys_permission p
INNER JOIN tb_sys_role_permission rp ON p.permission_id = rp.permission_id
INNER JOIN tb_sys_user_role ur ON rp.role_id = ur.role_id
FROM tb_sys_user_dept_role ur
INNER JOIN tb_sys_role_permission rp ON rp.role_id = ur.role_id
INNER JOIN tb_sys_permission p ON p.permission_id = rp.permission_id
WHERE p.deleted = 0
AND rp.deleted = 0
AND ur.deleted = 0
AND ur.user_id = #{userID}
AND p.status = 1
ORDER BY p.sort ASC, p.create_time ASC
AND ur.user_id = #{userId}
ORDER BY p.create_time ASC
</select>
<!-- 根据角色ID查询权限列表 -->
<select id="selectPermissionsByRoleId" resultMap="BaseResultMap">
SELECT
p.id, p.permission_id, p.permission_name, p.permission_code,
p.permission_type, p.resource_url, p.http_method, p.description,
p.status, p.sort, p.creator, p.updater,
p.id, p.permission_id, p.name, p.code, p.description,
p.creator, p.updater,
p.create_time, p.update_time, p.delete_time, p.deleted
FROM tb_sys_permission p
INNER JOIN tb_sys_role_permission rp ON p.permission_id = rp.permission_id
FROM tb_sys_role_permission rp
INNER JOIN tb_sys_permission p ON p.permission_id = rp.permission_id
WHERE p.deleted = 0
AND rp.deleted = 0
AND rp.role_id = #{roleId}
ORDER BY p.sort ASC, p.create_time ASC
ORDER BY p.create_time ASC
</select>
<!-- 根据权限编码查询权限 -->
<select id="selectByPermissionCode" resultMap="BaseResultMap">
<select id="selectBycode" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM tb_sys_permission
WHERE deleted = 0
AND permission_code = #{permissionCode}
AND code = #{code}
LIMIT 1
</select>
<!-- 检查权限名称是否存在 -->
<select id="countByPermissionName" resultType="int">
<select id="countByname" resultType="int">
SELECT COUNT(1)
FROM tb_sys_permission
WHERE deleted = 0
AND permission_name = #{permissionName}
AND name = #{name}
<if test="excludeId != null and excludeId != ''">
AND id != #{excludeId}
</if>
</select>
<!-- 检查权限编码是否存在 -->
<select id="countByPermissionCode" resultType="int">
<select id="countBycode" resultType="int">
SELECT COUNT(1)
FROM tb_sys_permission
WHERE deleted = 0
AND permission_code = #{permissionCode}
AND code = #{code}
<if test="excludeId != null and excludeId != ''">
AND id != #{excludeId}
</if>
@@ -126,14 +123,13 @@
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">id,</if>
<if test="permissionID != null">permission_id,</if>
<if test="permissionName != null">permission_name,</if>
<if test="permissionCode != null">permission_code,</if>
<if test="name != null">name,</if>
<if test="code != null">code,</if>
<if test="permissionType != null">permission_type,</if>
<if test="resourceUrl != null">resource_url,</if>
<if test="httpMethod != null">http_method,</if>
<if test="description != null">description,</if>
<if test="status != null">status,</if>
<if test="sort != null">sort,</if>
<if test="creator != null">creator,</if>
<if test="createTime != null">create_time,</if>
deleted
@@ -141,14 +137,13 @@
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id},</if>
<if test="permissionID != null">#{permissionID},</if>
<if test="permissionName != null">#{permissionName},</if>
<if test="permissionCode != null">#{permissionCode},</if>
<if test="name != null">#{name},</if>
<if test="code != null">#{code},</if>
<if test="permissionType != null">#{permissionType},</if>
<if test="resourceUrl != null">#{resourceUrl},</if>
<if test="httpMethod != null">#{httpMethod},</if>
<if test="description != null">#{description},</if>
<if test="status != null">#{status},</if>
<if test="sort != null">#{sort},</if>
<if test="creator != null">#{creator},</if>
<if test="createTime != null">#{createTime},</if>
0
@@ -160,14 +155,13 @@
UPDATE tb_sys_permission
<set>
<if test="permissionID != null">permission_id = #{permissionID},</if>
<if test="permissionName != null">permission_name = #{permissionName},</if>
<if test="permissionCode != null">permission_code = #{permissionCode},</if>
<if test="name != null">name = #{name},</if>
<if test="code != null">code = #{code},</if>
<if test="permissionType != null">permission_type = #{permissionType},</if>
<if test="resourceUrl != null">resource_url = #{resourceUrl},</if>
<if test="httpMethod != null">http_method = #{httpMethod},</if>
<if test="description != null">description = #{description},</if>
<if test="status != null">status = #{status},</if>
<if test="sort != null">sort = #{sort},</if>
<if test="updater != null">updater = #{updater},</if>
update_time = NOW()
</set>

View File

@@ -3,10 +3,11 @@
<mapper namespace="org.xyzh.system.mapper.RoleMapper">
<!-- 基础结果映射 -->
<resultMap id="BaseResultMap" type="org.xyzh.common.dto.role.TbSysRole">
<resultMap id="tbSysRoleResultMap" type="org.xyzh.common.dto.role.TbSysRole">
<id column="id" property="id" jdbcType="VARCHAR"/>
<result column="dept_id" property="deptID" jdbcType="VARCHAR"/>
<result column="role_id" property="roleID" jdbcType="VARCHAR"/>
<result column="name" property="roleName" jdbcType="VARCHAR"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="description" property="description" jdbcType="VARCHAR"/>
<result column="creator" property="creator" jdbcType="VARCHAR"/>
<result column="updater" property="updater" jdbcType="VARCHAR"/>
@@ -16,11 +17,42 @@
<result column="deleted" property="deleted" jdbcType="BOOLEAN"/>
</resultMap>
<resultMap id="deptRoleVOResultMap" type="org.xyzh.common.vo.DeptRoleVO">
<result column="dept_id" property="dept.deptID" jdbcType="VARCHAR"/>
<result column="dept_name" property="dept.name" jdbcType="VARCHAR"/>
<result column="dept_description" property="dept.description" jdbcType="VARCHAR"/>
<result column="dept_creator" property="dept.creator" jdbcType="VARCHAR"/>
<result column="dept_updater" property="dept.updater" jdbcType="VARCHAR"/>
<result column="dept_create_time" property="dept.createTime" jdbcType="TIMESTAMP"/>
<result column="dept_update_time" property="dept.updateTime" jdbcType="TIMESTAMP"/>
<result column="dept_delete_time" property="dept.deleteTime" jdbcType="TIMESTAMP"/>
<result column="dept_deleted" property="dept.deleted" jdbcType="BOOLEAN"/>
<result column="role_id" property="role.roleID" jdbcType="VARCHAR"/>
<result column="role_name" property="role.name" jdbcType="VARCHAR"/>
<result column="role_description" property="role.description" jdbcType="VARCHAR"/>
<result column="role_creator" property="role.creator" jdbcType="VARCHAR"/>
<result column="role_updater" property="role.updater" jdbcType="VARCHAR"/>
<result column="role_create_time" property="role.createTime" jdbcType="TIMESTAMP"/>
<result column="role_update_time" property="role.updateTime" jdbcType="TIMESTAMP"/>
<result column="role_delete_time" property="role.deleteTime" jdbcType="TIMESTAMP"/>
<result column="role_deleted" property="role.deleted" jdbcType="BOOLEAN"/>
</resultMap>
<!-- 基础字段 -->
<sql id="Base_Column_List">
id, role_id, name, description, creator, updater,
<sql id="TbSysRole_Column_List">
id, dept_id, role_id, name, description, creator, updater,
create_time, update_time, delete_time, deleted
</sql>
<sql id="TbSysDeptRole_Column_List">
dr.id, dr.dept_id, dr.role_id,
r.name as role_name, d.name as dept_name,
r.description as role_description, d.description as dept_description,
r.creator as role_creator, d.creator as dept_creator,
r.updater as role_updater, d.updater as dept_updater,
r.create_time as role_create_time, d.create_time as dept_create_time,
r.update_time as role_update_time, d.update_time as dept_update_time,
r.delete_time as role_delete_time, d.delete_time as dept_delete_time,
r.deleted as role_deleted, d.deleted as dept_deleted
</sql>
<!-- 通用条件 -->
<sql id="Where_Clause">
@@ -39,23 +71,21 @@
</sql>
<!-- 根据用户ID查询角色列表 -->
<select id="selectRolesByUserId" resultMap="BaseResultMap">
<select id="selectDeptRolesByUserId" resultMap="deptRoleVOResultMap">
SELECT
r.id, r.role_id, r.role_name, r.role_code, r.description,
r.status, r.sort, r.creator, r.updater,
r.create_time, r.update_time, r.delete_time, r.deleted
FROM tb_sys_role r
INNER JOIN tb_sys_user_role ur ON r.role_id = ur.role_id
WHERE r.deleted = 0
AND ur.deleted = 0
AND ur.user_id = #{userID}
ORDER BY r.sort ASC, r.create_time ASC
<include refid="TbSysDeptRole_Column_List"/>
FROM tb_sys_user_dept_role dr
INNER JOIN tb_sys_role r ON r.role_id = dr.role_id
INNER JOIN tb_sys_dept d ON d.dept_id = dr.dept_id
WHERE dr.deleted = 0
AND dr.user_id = #{userId}
ORDER BY dr.create_time ASC
</select>
<!-- 根据角色编码查询角色 -->
<select id="selectByRoleCode" resultMap="BaseResultMap">
<select id="selectByRoleCode" resultMap="tbSysRoleResultMap">
SELECT
<include refid="Base_Column_List"/>
<include refid="TbSysRole_Column_List"/>
FROM tb_sys_role
WHERE deleted = 0
AND role_code = #{roleCode}
@@ -107,7 +137,6 @@
<if test="roleCode != null">role_code,</if>
<if test="description != null">description,</if>
<if test="status != null">status,</if>
<if test="sort != null">sort,</if>
<if test="creator != null">creator,</if>
<if test="createTime != null">create_time,</if>
deleted
@@ -119,7 +148,6 @@
<if test="roleCode != null">#{roleCode},</if>
<if test="description != null">#{description},</if>
<if test="status != null">#{status},</if>
<if test="sort != null">#{sort},</if>
<if test="creator != null">#{creator},</if>
<if test="createTime != null">#{createTime},</if>
0
@@ -135,7 +163,6 @@
<if test="roleCode != null">role_code = #{roleCode},</if>
<if test="description != null">description = #{description},</if>
<if test="status != null">status = #{status},</if>
<if test="sort != null">sort = #{sort},</if>
<if test="updater != null">updater = #{updater},</if>
update_time = NOW()
</set>

View File

@@ -17,12 +17,38 @@
<result column="status" property="status" jdbcType="INTEGER"/>
</resultMap>
<resultMap id="UserInfoResultMap" type="org.xyzh.common.dto.user.TbSysUserInfo">
<id column="id" property="id" jdbcType="VARCHAR"/>
<result column="user_id" property="userID" jdbcType="VARCHAR"/>
<result column="avatar" property="avatar" jdbcType="VARCHAR"/>
<result column="gender" property="gender" jdbcType="INTEGER"/>
<result column="family_name" property="familyName" jdbcType="VARCHAR"/>
<result column="given_name" property="givenName" jdbcType="VARCHAR"/>
<result column="full_name" property="fullName" jdbcType="VARCHAR"/>
<result column="id_card" property="idCard" jdbcType="VARCHAR"/>
<result column="address" property="address" jdbcType="VARCHAR"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
<result column="delete_time" property="deleteTime" jdbcType="TIMESTAMP"/>
<result column="deleted" property="deleted" jdbcType="INTEGER"/>
</resultMap>
<!-- 基础字段 -->
<sql id="Base_Column_List">
id, username, password, email, phone, wechat_id,
create_time, update_time, delete_time, deleted, status
</sql>
<sql id="FullUser_Column_List">
id, user_id, avatar, gender, family_name, given_name, full_name, id_card, address,
create_time, update_time, delete_time, deleted, status
</sql>
<!-- 用户信息字段 -->
<sql id="UserInfo_Column_List">
id, user_id, avatar, gender, family_name, given_name, full_name, id_card, address,
create_time, update_time, delete_time, deleted
</sql>
<!-- 通用条件 -->
<sql id="Where_Clause">
<where>
@@ -52,6 +78,16 @@
LIMIT 1
</select>
<!-- 根据用户ID查询用户信息 -->
<select id="selectUserInfoById" resultMap="UserInfoResultMap">
SELECT
<include refid="UserInfo_Column_List"/>
FROM tb_sys_user_info
WHERE deleted = 0
AND user_id = #{userId}
LIMIT 1
</select>
<!-- 根据邮箱查询用户 -->
<select id="selectByEmail" resultMap="BaseResultMap">
SELECT