refactor: 通知公告重构完成

This commit is contained in:
ray
2024-09-29 23:01:36 +08:00
77 changed files with 904 additions and 903 deletions

View File

@@ -0,0 +1,7 @@
<?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="com.youlai.boot.system.mapper.ConfigMapper">
</mapper>

View File

@@ -0,0 +1,7 @@
<?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="com.youlai.boot.system.mapper.DeptMapper">
</mapper>

View File

@@ -0,0 +1,24 @@
<?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="com.youlai.boot.system.mapper.DictItemMapper">
<!-- 根据字典编码获取字典列表 -->
<select id="listDictItemsByDictId" resultType="com.youlai.boot.system.model.vo.DictPageVO$DictItem">
SELECT
id,
`name`,
value,
sort,
status
FROM
sys_dict_item
<where>
dict_id = #{dictId}
</where>
ORDER BY
sort ASC
</select>
</mapper>

View File

@@ -0,0 +1,35 @@
<?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="com.youlai.boot.system.mapper.DictMapper">
<!-- 字典映射 -->
<resultMap id="DictMap" type="com.youlai.boot.system.model.vo.DictPageVO">
<collection property="dictItems"
column="{dictId=id}"
select="com.youlai.boot.system.mapper.DictItemMapper.listDictItemsByDictId">
</collection>
</resultMap>
<!-- 字典分页列表 -->
<select id="getDictPage" resultMap="DictMap">
SELECT
t1.id,
t1.name,
t1.code,
t1.status
FROM
sys_dict t1
<where>
t1.is_deleted = 0
<if test='queryParams.keywords!=null and queryParams.keywords.trim() neq ""'>
AND (
t1.name LIKE CONCAT('%',#{queryParams.keywords},'%')
OR t1.code LIKE CONCAT('%',#{queryParams.keywords},'%')
)
</if>
</where>
ORDER BY
t1.create_time DESC
</select>
</mapper>

View File

@@ -0,0 +1,116 @@
<?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="com.youlai.boot.system.mapper.LogMapper">
<!-- 日志分页列表 -->
<select id="getLogPage" resultType="com.youlai.boot.system.model.vo.LogPageVO">
SELECT
t1.id,
t1.module,
t1.content,
t1.request_uri,
t1.ip,
CONCAT(t1.province," ", t1.city) AS region,
t1.execution_time,
CONCAT(t1.browser," ", t1.browser_version) AS browser,
t1.os,
t1.create_time,
t2.nickname AS operator
FROM
sys_log t1
LEFT JOIN sys_user t2 ON t1.create_by = t2.id
<where>
t1.is_deleted = 0
<if test="queryParams.keywords != null and queryParams.keywords != ''">
AND (
t1.content LIKE concat('%',#{queryParams.keywords},'%')
OR
t1.ip LIKE concat('%',#{queryParams.keywords},'%')
OR
t2.nickname LIKE concat('%',#{queryParams.keywords},'%')
)
</if>
<if test="queryParams.createTime != null and queryParams.createTime.size > 0">
<if test="queryParams.createTime[0] != null and queryParams.createTime[0] != ''">
<bind name="startDate" value="queryParams.createTime[0].length() == 10 ? queryParams.createTime[0] + ' 00:00:00' : queryParams.createTime[0]"/>
AND t1.create_time &gt;= #{startDate}
</if>
<if test="queryParams.createTime[1] != null and queryParams.createTime[1] != ''">
<bind name="endDate" value="queryParams.createTime[1].length() == 10 ? queryParams.createTime[1] + ' 23:59:59' : queryParams.createTime[1]"/>
AND t1.create_time &lt;= #{endDate}
</if>
</if>
</where>
ORDER BY
t1.create_time DESC
</select>
<!-- 获取访问量日统计列表 -->
<select id="getPvCounts" resultType="com.youlai.boot.system.model.bo.VisitCount">
SELECT
COUNT(1) AS count,
DATE_FORMAT(create_time,'%Y-%m-%d') AS date
FROM
sys_log
WHERE
is_deleted = 0
GROUP BY
DATE_FORMAT(create_time, '%Y-%m-%d')
</select>
<!-- 获取IP日统计列表-->
<select id="getIpCounts" resultType="com.youlai.boot.system.model.bo.VisitCount">
SELECT
COUNT(DISTINCT ip) AS count,
DATE_FORMAT(create_time, '%Y-%m-%d') AS date
FROM
sys_log
WHERE
is_deleted = 0
GROUP BY
DATE_FORMAT(create_time, '%Y-%m-%d')
</select>
<!-- 获取访问量(PV)统计数据 -->
<select id="getPvStats" resultType="com.youlai.boot.system.model.vo.VisitStatsVO">
SELECT
COUNT(CASE WHEN DATE(create_time) = CURDATE() THEN 1 END) AS todayCount,
COUNT(*) AS totalCount,
ROUND(
CASE
WHEN COUNT(CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) &lt;= TIME(NOW()) THEN 1 END) = 0 THEN 0
ELSE
(COUNT(CASE WHEN DATE(create_time) = CURDATE() THEN 1 END) -
COUNT(CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) &lt;= TIME(NOW()) THEN 1 END)) /
COUNT(CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) &lt;= TIME(NOW()) THEN 1 END)
END,
2) AS growthRate
FROM
sys_log
WHERE
is_deleted = 0
</select>
<!-- 获取IP统计数据 -->
<select id="getIpStats" resultType="com.youlai.boot.system.model.vo.VisitStatsVO">
SELECT
COUNT(DISTINCT CASE WHEN DATE(create_time) = CURDATE() THEN ip END) AS todayCount,
COUNT(DISTINCT ip) AS totalCount,
ROUND(
CASE
WHEN COUNT(DISTINCT CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) &lt;= TIME(NOW()) THEN ip END) = 0 THEN 0
ELSE
(COUNT(DISTINCT CASE WHEN DATE(create_time) = CURDATE() THEN ip END) -
COUNT(DISTINCT CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) &lt;= TIME(NOW()) THEN ip END)) /
COUNT(DISTINCT CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) &lt;= TIME(NOW()) THEN ip END)
END,
2) AS growthRate
FROM
sys_log
WHERE
is_deleted = 0
</select>
</mapper>

View File

@@ -0,0 +1,62 @@
<?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="com.youlai.boot.system.mapper.MenuMapper">
<!-- 菜单路由映射 -->
<resultMap id="RouteMap" type="com.youlai.boot.system.model.bo.RouteBO">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="parentId" column="parent_id" jdbcType="BIGINT"/>
<result property="routeName" column="route_name" jdbcType="VARCHAR"/>
<result property="routePath" column="route_path" jdbcType="VARCHAR"/>
<result property="component" column="component" jdbcType="VARCHAR"/>
<result property="redirect" column="redirect" jdbcType="VARCHAR"/>
<result property="icon" column="icon" jdbcType="VARCHAR"/>
<result property="sort" column="sort" jdbcType="INTEGER"/>
<result property="visible" column="visible" jdbcType="BOOLEAN"/>
<result property="type" column="type" jdbcType="OTHER"/>
<result property="alwaysShow" column="always_show" jdbcType="INTEGER"/>
<result property="keepAlive" column="keep_alive" jdbcType="INTEGER"/>
<result property="params" column="params" jdbcType="VARCHAR"/>
</resultMap>
<!-- 获取路由列表 -->
<select id="listRoutes" resultMap="RouteMap">
SELECT
DISTINCT t1.id,
t1.name,
t1.parent_id,
t1.route_name,
t1.route_path,
t1.component,
t1.icon,
t1.sort,
t1.visible,
t1.redirect,
t1.type,
t1.always_show,
t1.keep_alive,
t1.params
FROM
sys_menu t1
INNER JOIN sys_role_menu t2 ON t1.id = t2.menu_id
INNER JOIN sys_role t3 ON t2.role_id = t3.id AND t3.status = 1 AND t3.is_deleted = 0
WHERE
t1.type != '${@com.youlai.boot.system.enums.MenuTypeEnum@BUTTON.getValue()}'
<if test="roles != null and roles.size() > 0">
<!-- ROOT 可查看所有菜单 -->
<if test="!roles.contains('ROOT')">
AND t3.code IN
<foreach collection="roles" item="role" open="(" close=")" separator=",">
#{role}
</foreach>
</if>
</if>
ORDER BY
t1.sort
</select>
</mapper>

View File

@@ -0,0 +1,65 @@
<?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="com.youlai.boot.system.mapper.NoticeMapper">
<!-- 获取通知公告分页列表 -->
<select id="getNoticePage" resultType="com.youlai.boot.system.model.bo.NoticeBO">
SELECT
t1.id,
t1.title,
t1.type,
t2.nickname AS publisherName,
t1.level,
t1.target_type,
t1.publish_status,
t1.publish_time,
t1.revoke_time,
t3.name typeLabel,
t4.name levelLabel,
t1.create_time
FROM
sys_notice t1
LEFT JOIN sys_user t2 ON t2.id = t1.publisher_id
LEFT JOIN sys_dict_item t3 ON t1.type = t3.value AND t3.dict_code = 'notice_type'
LEFT JOIN sys_dict_item t4 ON t1.level = t4.value AND t4.dict_code = 'notice_level'
WHERE
t1.is_deleted = 0
<if test="queryParams.title != null and queryParams.title != ''">
AND t1.title LIKE CONCAT('%',#{queryParams.title},'%')
</if>
<if test="queryParams.publishStatus != null">
AND t1.publish_status = #{queryParams.publishStatus}
</if>
<if test="queryParams.publishTime != null">
<if test="queryParams.publishTime[0] != null and queryParams.publishTime[0] != ''">
<bind name="startDate" value="queryParams.publishTime[0].length() == 10 ? queryParams.publishTime[0] + ' 00:00:00' : queryParams.publishTime[0]"/>
AND t1.publish_time &gt;= #{startDate}
</if>
<if test="queryParams.publishTime[1] != null and queryParams.publishTime[1] != ''">
<bind name="endDate" value="queryParams.publishTime[1].length() == 10 ? queryParams.publishTime[1] + ' 23:59:59' : queryParams.publishTime[1]"/>
AND t1.publish_time &lt;= #{endDate}
</if>
</if>
ORDER BY
t1.create_time DESC
</select>
<!-- 获取通知公告详情 -->
<select id="getNoticeDetail" resultType="com.youlai.boot.system.model.bo.NoticeBO">
SELECT
t1.id,
t1.title,
t1.content,
t1.type,
t2.nickname AS publisherName,
t1.level,
t1.publish_status,
t1.publish_time
FROM
sys_notice t1
LEFT JOIN sys_user t2 ON t2.id = t1.publisher_id
WHERE
t1.id = #{id} AND t1.is_deleted = 0
</select>
</mapper>

View File

@@ -0,0 +1,27 @@
<?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="com.youlai.boot.system.mapper.RoleMapper">
<!-- 获取最大范围的数据权限 -->
<select id="getMaximumDataScope" resultType="java.lang.Integer">
SELECT
min(data_scope)
FROM
sys_role
<where>
<choose>
<when test="roles!=null and roles.size>0">
AND code IN
<foreach collection="roles" item="role" separator="," open="(" close=")">
#{role}
</foreach>
</when>
<otherwise>
id = -1
</otherwise>
</choose>
</where>
</select>
</mapper>

View File

@@ -0,0 +1,58 @@
<?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="com.youlai.boot.system.mapper.RoleMenuMapper">
<!-- 获取角色拥有的菜单ID集合 -->
<select id="listMenuIdsByRoleId" resultType="java.lang.Long">
SELECT
rm.menu_id
FROM
sys_role_menu rm
INNER JOIN sys_menu m ON rm.menu_id = m.id
WHERE
rm.role_id = #{roleId}
</select>
<!-- 权限和拥有权限的角色的映射 -->
<resultMap id="PremRolesMap" type="com.youlai.boot.system.model.bo.RolePermsBO">
<result property="roleCode" column="role_code"/>
<collection property="perms" ofType="string" javaType="java.util.Set">
<result column="perm"/>
</collection>
</resultMap>
<!-- 获取权限和拥有权限的角色列表 -->
<select id="getRolePermsList" resultMap="PremRolesMap">
SELECT
t3.perm,
t2.`code` role_code
FROM
`sys_role_menu` t1
INNER JOIN sys_role t2 ON t1.role_id = t2.id AND t2.is_deleted = 0 AND t2.`status` = 1
INNER JOIN sys_menu t3 ON t1.menu_id = t3.id
WHERE
type = '${@com.youlai.boot.system.enums.MenuTypeEnum@BUTTON.getValue()}'
<if test="roleCode!=null and roleCode.trim() neq ''">
AND t2.`code` = #{roleCode}
</if>
</select>
<!-- 获取角色拥有的权限列表 -->
<select id="listRolePerms" resultType="java.lang.String">
SELECT
DISTINCT t2.perm
FROM
sys_role_menu t1
INNER JOIN sys_menu t2 ON t2.id = t1.menu_id
INNER JOIN sys_role t3 ON t3.id = t1.role_id
WHERE
t2.type = '${@com.youlai.boot.system.enums.MenuTypeEnum@BUTTON.getValue()}'
AND t2.perm IS NOT NULL
AND t3.CODE IN
<foreach collection="roles" item="role" separator="," open="(" close=")">
#{role}
</foreach>
</select>
</mapper>

View File

@@ -0,0 +1,177 @@
<?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="com.youlai.boot.system.mapper.UserMapper">
<!-- 用户分页列表 -->
<select id="listPagedUsers" resultType="com.youlai.boot.system.model.bo.UserBO">
SELECT
u.id,
u.username,
u.nickname,
u.mobile,
u.gender,
u.avatar,
u.STATUS,
d.NAME AS dept_name,
GROUP_CONCAT( r.NAME ) AS roleNames,
u.create_time
FROM
sys_user u
LEFT JOIN sys_dept d ON u.dept_id = d.id
LEFT JOIN sys_user_role sur ON u.id = sur.user_id
LEFT JOIN sys_role r ON sur.role_id = r.id
<where>
u.is_deleted = 0 AND u.username != 'root'
<if test='queryParams.keywords!=null and queryParams.keywords.trim() neq ""'>
AND (
u.username LIKE CONCAT('%',#{queryParams.keywords},'%')
OR u.nickname LIKE CONCAT('%',#{queryParams.keywords},'%')
OR u.mobile LIKE CONCAT('%',#{queryParams.keywords},'%')
)
</if>
<if test='queryParams.status!=null'>
AND u.status = #{queryParams.status}
</if>
<if test='queryParams.deptId!=null'>
AND concat(',',concat(d.tree_path,',',d.id),',') like concat('%,',#{queryParams.deptId},',%')
</if>
<if test="queryParams.createTime != null and queryParams.createTime.size > 0">
<if test="queryParams.createTime[0] != null and queryParams.createTime[0] != ''">
<bind name="startDate" value="queryParams.createTime[0].length() == 10 ? queryParams.createTime[0] + ' 00:00:00' : queryParams.createTime[0]"/>
AND u.create_time &gt;= #{startDate}
</if>
<if test="queryParams.createTime[1] != null and queryParams.createTime[1] != ''">
<bind name="endDate" value="queryParams.createTime[1].length() == 10 ? queryParams.createTime[1] + ' 23:59:59' : queryParams.createTime[1]"/>
AND u.create_time &lt;= #{endDate}
</if>
</if>
</where>
GROUP BY
u.id
</select>
<!-- 用户表单信息映射 -->
<resultMap id="UserFormMap" type="com.youlai.boot.system.model.form.UserForm">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="username" column="username" jdbcType="VARCHAR"/>
<result property="nickname" column="nickname" jdbcType="VARCHAR"/>
<result property="mobile" column="mobile" jdbcType="VARCHAR"/>
<result property="gender" column="gender" jdbcType="TINYINT"/>
<result property="avatar" column="avatar" jdbcType="VARCHAR"/>
<result property="email" column="email" jdbcType="VARCHAR"/>
<result property="status" column="status" jdbcType="BOOLEAN"/>
<result property="deptId" column="dept_id" jdbcType="BIGINT"/>
<collection
property="roleIds"
column="id"
select="com.youlai.boot.system.mapper.UserRoleMapper.listRoleIdsByUserId" >
<result column="role_id" />
</collection>
</resultMap>
<!-- 根据用户ID获取用户详情 -->
<select id="getUserFormData" resultMap="UserFormMap">
SELECT
id,
username,
nickname,
mobile,
gender,
avatar,
email,
status,
dept_id
FROM
sys_user
WHERE
id = #{userId} AND is_deleted = 0
</select>
<!-- 用户认证信息映射 -->
<resultMap id="UserAuthMap" type="com.youlai.boot.system.model.dto.UserAuthInfo">
<id property="userId" column="userId" jdbcType="BIGINT"/>
<result property="username" column="username" jdbcType="VARCHAR"/>
<result property="password" column="password" jdbcType="VARCHAR"/>
<result property="status" column="status" jdbcType="BOOLEAN"/>
<result property="deptId" column="dept_id" jdbcType="BIGINT"></result>
<collection property="roles" ofType="string" javaType="java.util.Set">
<result column="code"></result>
</collection>
</resultMap>
<!-- 根据用户名获取认证信息 -->
<select id="getUserAuthInfo" resultMap="UserAuthMap">
SELECT
t1.id userId,
t1.username,
t1.nickname,
t1.PASSWORD,
t1.STATUS,
t1.dept_id ,
t3.CODE
FROM
sys_user t1
LEFT JOIN sys_user_role t2 ON t2.user_id = t1.id
LEFT JOIN sys_role t3 ON t3.id = t2.role_id
WHERE
t1.username = #{username} AND t1.is_deleted=0
</select>
<!-- 获取用户导出列表 -->
<select id="listExportUsers" resultType="com.youlai.boot.system.model.dto.UserExportDTO">
SELECT
u.username,
u.nickname,
u.mobile,
CASE u.gender
WHEN 1 THEN '男'
WHEN 2 THEN '女'
ELSE '保密'
END gender,
d.NAME AS dept_name,
u.create_time
FROM
sys_user u
LEFT JOIN sys_dept d ON u.dept_id = d.id
<where>
u.is_deleted = 0 AND u.username != 'root'
<if test='keywords!=null and keywords.trim() neq ""'>
AND (u.username LIKE CONCAT('%',#{keywords},'%')
OR u.nickname LIKE CONCAT('%',#{keywords},'%')
OR u.mobile LIKE CONCAT('%',#{keywords},'%'))
</if>
<if test='status!=null'>
AND u.status = #{status}
</if>
<if test='deptId!=null'>
AND concat(',',concat(d.tree_path,',',d.id),',') like concat('%,',#{deptId},',%')
</if>
</where>
GROUP BY u.id
</select>
<!-- 根据用户ID获取用户详情 -->
<select id="getUserProfile" resultType="com.youlai.boot.system.model.bo.UserBO">
SELECT
u.id,
u.username,
u.nickname,
u.mobile,
u.gender,
u.avatar,
u.STATUS,
d.NAME AS deptName,
GROUP_CONCAT(r.NAME) AS roleNames,
u.create_time
FROM
sys_user u
LEFT JOIN sys_dept d ON u.dept_id = d.id
LEFT JOIN sys_user_role sur ON u.id = sur.user_id
LEFT JOIN sys_role r ON sur.role_id = r.id
WHERE
u.id = #{userId} AND u.is_deleted = 0
</select>
</mapper>

View File

@@ -0,0 +1,43 @@
<?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="com.youlai.boot.system.mapper.UserNoticeMapper">
<!-- 获取用户未读通知列表 -->
<select id="listUnreadNotices" resultType="com.youlai.boot.system.model.vo.UserUnreadNoticeVO">
SELECT
t2.id,
t2.title
FROM
sys_user_notice t1
INNER JOIN sys_notice t2 ON t2.id = t1.notice_id AND t2.publish_status = 1 AND t2.is_deleted = 0
WHERE
t1.user_id = #{userId} AND t1.is_read = 0 AND t1.is_deleted = 0
ORDER BY
t2.publish_time DESC
</select>
<!-- 获取我的通知分页列表 -->
<select id="getMyNoticePage" resultType="com.youlai.boot.system.model.vo.UserNoticePageVO">
SELECT
t2.id,
t2.title,
t4.name typeLabel,
t3.nickname publisherName,
t5.name levelLabel,
t2.publish_time,
t1.is_read
FROM
sys_user_notice t1
INNER JOIN sys_notice ON t2.notice_id = t1.id AND t2.publish_status = 1
LEFT JOIN sys_user t3 ON t2.publisher_id = t3.id
LEFT JOIN sys_dict_item t4 ON t2.type = t4.value AND t4.dict_code = 'notice_type'
LEFT JOIN sys_dict_item t5 ON t2.level = t5.value AND t5.dict_code = 'notice_level'
WHERE
t1.user_id = #{queryParams.userId}
<if test="queryParams.title != null and queryParams.title != ''">
AND t2.title LIKE CONCAT('%',#{queryParams.title},'%')
</if>
ORDER BY
t2.release_time DESC
</select>
</mapper>

View File

@@ -0,0 +1,29 @@
<?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="com.youlai.boot.system.mapper.UserRoleMapper">
<!-- 根据用户ID获取角色ID集合 -->
<select id="listRoleIdsByUserId" resultType="java.lang.Long">
SELECT
role_id
FROM
sys_user_role
WHERE
user_id = #{userId}
</select>
<!-- 获取角色绑定的用户数 -->
<select id="countUsersForRole" resultType="java.lang.Integer">
SELECT
count(*)
FROM
sys_user_role t1
INNER JOIN sys_role t2 ON t1.role_id = t2.id AND t2.is_deleted = 0
INNER JOIN sys_user t3 ON t1.user_id = t3.id
AND t3.is_deleted = 0
WHERE
t1.role_id = #{roleId}
</select>
</mapper>