forked from dyf/fys-Multi-tenant
438 lines
16 KiB
XML
438 lines
16 KiB
XML
<?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.fuyuanshen.fyscustomer.mapper.CustomerMapper">
|
||
<resultMap id="BaseResultMap" type="com.fuyuanshen.fyscustomer.domain.Customer">
|
||
<id column="user_user_id" property="userId"/>
|
||
<result column="user_dept_id" property="deptId"/>
|
||
<result column="user_user_name" property="userName"/>
|
||
<result column="user_nick_name" property="nickName"/>
|
||
<result column="user_email" property="email"/>
|
||
<result column="user_pid" property="pid"/>
|
||
<result column="user_create_by" property="createBy"/>
|
||
<result column="user_update_by" property="updateBy"/>
|
||
<result column="user_create_time" property="createTime"/>
|
||
<result column="user_update_time" property="updateTime"/>
|
||
<result column="tenant_id" property="tenantId"/>
|
||
|
||
</resultMap>
|
||
|
||
<!-- 公共查询字段 -->
|
||
<sql id="selectUserColumns">
|
||
u
|
||
.
|
||
user_user_id
|
||
AS user_user_id,
|
||
u.user_name,
|
||
u.nick_name AS nickName,
|
||
u.email,
|
||
u.phone,
|
||
u.gender,
|
||
u.avatar_name AS avatarName,
|
||
u.avatar_path AS avatarPath,
|
||
u.enabled,
|
||
IF(u.is_admin = 1, true, false) AS isAdmin,
|
||
u.pwd_reset_time AS pwdResetTime,
|
||
u.dept_id AS deptId,
|
||
u.tenant_id AS tenantId
|
||
</sql>
|
||
|
||
<sql id="Base_Column_List">
|
||
u1.user_id
|
||
as user_user_id, u1.dept_id as user_dept_id, u1.user_name as user_user_name,
|
||
u1.nick_name as user_nick_name, u1.email as user_email, u1.phone as user_phone,
|
||
u1.gender as user_gender, u1.avatar_name as user_avatar_name, u1.avatar_path as user_avatar_path,
|
||
u1.enabled as user_enabled, u1.pwd_reset_time as user_pwd_reset_time, u1.create_by as user_create_by,
|
||
u1.update_by as user_update_by, u1.create_time as user_create_time, u1.update_time as user_update_time,
|
||
u1.user_level, u1.pid as user_pid,u1.is_admin AS admin,
|
||
d.dept_id as dept_id, d.name as dept_name
|
||
</sql>
|
||
|
||
<sql id="Job_Column_List">
|
||
j . job_id
|
||
as job_id, j.name as job_name
|
||
</sql>
|
||
|
||
<sql id="Role_Column_List">
|
||
r . role_id
|
||
as role_id, r.name as role_name, r.level as role_level, r.data_scope as role_data_scope
|
||
</sql>
|
||
|
||
<sql id="Whrer_Sql">
|
||
<where>
|
||
<if test="criteria.id != null">
|
||
and u1.user_id = #{criteria.id}
|
||
</if>
|
||
<if test="criteria.enabled != null">
|
||
and u1.enabled = #{criteria.enabled}
|
||
</if>
|
||
<if test="criteria.deptIds != null and criteria.deptIds.size() != 0">
|
||
and u1.dept_id in
|
||
<foreach collection="criteria.deptIds" item="deptId" open="(" separator="," close=")">
|
||
#{deptId}
|
||
</foreach>
|
||
</if>
|
||
<if test="criteria.blurry != null and criteria.blurry != ''">
|
||
and (
|
||
u1.user_name like concat('%', #{criteria.blurry}, '%')
|
||
or u1.nick_name like concat('%', #{criteria.blurry}, '%')
|
||
or u1.email like concat('%', #{criteria.blurry}, '%')
|
||
)
|
||
</if>
|
||
<if test="criteria.createTime != null and criteria.createTime.size() != 0">
|
||
and u1.create_time between #{criteria.createTime[0]} and #{criteria.createTime[1]}
|
||
</if>
|
||
</where>
|
||
</sql>
|
||
|
||
<!-- user_user_id 是您在SELECT子句中创建的别名,但ORDER BY不能直接使用这个别名引用原始表 -->
|
||
<select id="findAll" resultMap="BaseResultMap">
|
||
select
|
||
u.*,
|
||
<include refid="Job_Column_List"/>,
|
||
<include refid="Role_Column_List"/>
|
||
from (
|
||
select
|
||
<include refid="Base_Column_List"/>
|
||
from sys_user u1
|
||
left join sys_dept d on u1.dept_id = d.dept_id
|
||
<include refid="Whrer_Sql"/>
|
||
order by u1.user_id desc
|
||
<if test="criteria.offset != null">
|
||
limit #{criteria.offset}, #{criteria.size}
|
||
</if>
|
||
) u
|
||
left join sys_users_jobs suj on u.user_user_id = suj.user_id
|
||
left join sys_job j on suj.job_id = j.job_id
|
||
left join sys_users_roles sur on u.user_user_id = sur.user_id
|
||
left join sys_role r on sur.role_id = r.role_id
|
||
order by u.user_user_id desc
|
||
</select>
|
||
|
||
|
||
<!-- 根据条件查询 用户 -->
|
||
<select id="selectByQuery" resultType="com.fuyuanshen.fyscustomer.domain.Customer">
|
||
SELECT u.*
|
||
FROM sys_user u
|
||
<where>
|
||
<if test="userQuery.pid != null">
|
||
AND u.pid = #{userQuery.pid}
|
||
</if>
|
||
</where>
|
||
ORDER BY u.user_id DESC
|
||
</select>
|
||
|
||
<!-- 根据条件查询一个用户 -->
|
||
<select id="selectByQueryOne" resultType="com.fuyuanshen.fyscustomer.domain.Customer">
|
||
select
|
||
u.*
|
||
from sys_user u
|
||
<where>
|
||
<if test="userQuery.pid != null">
|
||
AND u.pid = #{userQuery.pid}
|
||
</if>
|
||
<if test="userQuery.nickName != null">
|
||
AND u.nick_name = #{userQuery.nickName}
|
||
</if>
|
||
<if test="userQuery.user_name != null">
|
||
AND u.user_name = #{userQuery.user_name}
|
||
</if>
|
||
<if test="userQuery.password != null">
|
||
AND u.password = #{userQuery.password}
|
||
</if>
|
||
</where>
|
||
</select>
|
||
|
||
|
||
<!-- 根据租户ID查询用户 -->
|
||
<select id="findByTenantId" resultType="com.fuyuanshen.fyscustomer.domain.Customer">
|
||
select
|
||
u.*
|
||
from sys_user u
|
||
<where>
|
||
<if test="tenantId != null">
|
||
and u.tenant_id = #{tenantId}
|
||
</if>
|
||
</where>
|
||
</select>
|
||
|
||
<select id="countAll" resultType="java.lang.Long">
|
||
select count(*)
|
||
from sys_user u1
|
||
<include refid="Whrer_Sql"/>
|
||
</select>
|
||
|
||
<!-- 分页查询客户 -->
|
||
<select id="findCustomers" resultType="com.fuyuanshen.fyscustomer.domain.Customer">
|
||
select
|
||
u.user_id as id, u.nick_name , u.user_name, u.enabled, u.create_time
|
||
from sys_user u
|
||
<where>
|
||
<if test="criteria.ids != null and !criteria.ids.isEmpty()">
|
||
and u.pid IN
|
||
<foreach item="item" collection="criteria.ids" open="(" separator="," close=")">
|
||
#{item}
|
||
</foreach>
|
||
</if>
|
||
<if test="criteria.blurry != null and criteria.blurry.trim() != ''">
|
||
and u.nick_name like concat('%', TRIM(#{criteria.blurry}), '%')
|
||
</if>
|
||
<if test="criteria.enabled != null">
|
||
and u.enabled = #{criteria.enabled}
|
||
</if>
|
||
<if test="criteria.createTime != null and criteria.createTime.size() != 0">
|
||
and u.create_time between #{criteria.createTime[0]} and #{criteria.createTime[1]}
|
||
</if>
|
||
</where>
|
||
order by u.user_id desc
|
||
<if test="criteria.offset != null">
|
||
limit #{criteria.offset}, #{criteria.size}
|
||
</if>
|
||
</select>
|
||
|
||
<!-- 获取分页总数 -->
|
||
<select id="countCustomers" resultType="java.lang.Long">
|
||
select count(*)
|
||
from sys_user u
|
||
<where>
|
||
<if test="criteria.ids != null and !criteria.ids.isEmpty()">
|
||
and u.pid IN
|
||
<foreach item="item" collection="criteria.ids" open="(" separator="," close=")">
|
||
#{item}
|
||
</foreach>
|
||
</if>
|
||
<if test="criteria.blurry != null and criteria.blurry.trim() != ''">
|
||
and u.nick_name like concat('%', TRIM(#{criteria.blurry}), '%')
|
||
</if>
|
||
<if test="criteria.enabled != null">
|
||
and u.enabled = #{criteria.enabled}
|
||
</if>
|
||
<if test="criteria.createTime != null and criteria.createTime.size() != 0">
|
||
and u.create_time between #{criteria.createTime[0]} and #{criteria.createTime[1]}
|
||
</if>
|
||
</where>
|
||
</select>
|
||
|
||
<!-- 查询所有客户 -->
|
||
<select id="queryAllCustomers" resultType="com.fuyuanshen.fyscustomer.domain.Customer">
|
||
select u.user_id as id,
|
||
u.nick_name,
|
||
u.user_name,
|
||
u.enabled,
|
||
u.create_time
|
||
from sys_user u
|
||
<where>
|
||
<!-- 增加非空判断 -->
|
||
<if test="criteria.ids != null and !criteria.ids.isEmpty()">
|
||
u.pid IN
|
||
<foreach item="item" collection="criteria.ids" open="(" separator="," close=")">
|
||
#{item}
|
||
</foreach>
|
||
</if>
|
||
</where>
|
||
</select>
|
||
|
||
<select id="findByuser_name" resultMap="BaseResultMap">
|
||
select
|
||
u1.password user_password, u1.is_admin user_is_admin, u1.tenant_id,
|
||
<include refid="Base_Column_List"/>
|
||
from sys_user u1
|
||
left join sys_dept d on u1.dept_id = d.dept_id
|
||
where u1.user_name = #{user_name}
|
||
</select>
|
||
|
||
|
||
<select id="findByNickName" resultMap="BaseResultMap">
|
||
select
|
||
u1.password user_password, u1.is_admin user_is_admin, u1.tenant_id,
|
||
<include refid="Base_Column_List"/>
|
||
from sys_user u1
|
||
left join sys_dept d on u1.dept_id = d.dept_id
|
||
where u1.nick_name = #{nickName}
|
||
</select>
|
||
|
||
|
||
<select id="findByEmail" resultType="com.fuyuanshen.fyscustomer.domain.Customer">
|
||
select user_id as id, user_name
|
||
from sys_user
|
||
where email = #{email}
|
||
</select>
|
||
|
||
<select id="findByPhone" resultType="com.fuyuanshen.fyscustomer.domain.Customer">
|
||
select user_id as id, user_name
|
||
from sys_user
|
||
where phone = #{phone}
|
||
</select>
|
||
|
||
<select id="findByRoleId" resultType="com.fuyuanshen.fyscustomer.domain.Customer">
|
||
SELECT u.user_id as id, u.user_name
|
||
FROM sys_user u,
|
||
sys_users_roles r
|
||
WHERE u.user_id = r.user_id
|
||
AND r.role_id = #{roleId}
|
||
group by u.user_id
|
||
</select>
|
||
|
||
<select id="findByRoleDeptId" resultType="com.fuyuanshen.fyscustomer.domain.Customer">
|
||
SELECT u.*
|
||
FROM sys_user u,
|
||
sys_users_roles r,
|
||
sys_roles_depts d
|
||
WHERE u.user_id = r.user_id
|
||
AND r.role_id = d.role_id
|
||
AND d.dept_id = #{deptId}
|
||
group by u.user_id
|
||
</select>
|
||
|
||
<select id="findByMenuId" resultType="com.fuyuanshen.fyscustomer.domain.Customer">
|
||
SELECT u.user_id as id, u.user_name
|
||
FROM sys_user u,
|
||
sys_users_roles ur,
|
||
sys_roles_menus rm
|
||
WHERE u.user_id = ur.user_id
|
||
AND ur.role_id = rm.role_id
|
||
AND rm.menu_id = #{menuId}
|
||
group by u.user_id
|
||
</select>
|
||
|
||
<select id="countByJobs" resultType="int">
|
||
SELECT count(*) FROM sys_user u, sys_users_jobs j
|
||
WHERE u.user_id = j.user_id AND j.job_id IN
|
||
<foreach collection="jobIds" item="jobId" open="(" separator="," close=")">
|
||
#{jobId}
|
||
</foreach>
|
||
</select>
|
||
|
||
<select id="countByDepts" resultType="int">
|
||
SELECT count(*) FROM sys_user u
|
||
WHERE u.dept_id IN
|
||
<foreach collection="deptIds" item="deptId" open="(" separator="," close=")">
|
||
#{deptId}
|
||
</foreach>
|
||
</select>
|
||
|
||
<select id="countByRoles" resultType="int">
|
||
SELECT count(*) FROM sys_user u, sys_users_roles r
|
||
WHERE u.user_id = r.user_id AND r.role_id in
|
||
<foreach collection="roleIds" item="roleId" open="(" separator="," close=")">
|
||
#{roleId}
|
||
</foreach>
|
||
</select>
|
||
|
||
|
||
<update id="resetPwd">
|
||
update sys_user set password = #{pwd}
|
||
where user_id in
|
||
<foreach collection="userIds" item="id" open="(" separator="," close=")">
|
||
#{id}
|
||
</foreach>
|
||
</update>
|
||
|
||
<!-- 获取当前用户以及子用户 -->
|
||
<select id="getSubUsers" resultType="com.fuyuanshen.fyscustomer.domain.Customer">
|
||
SELECT u.user_id AS id,
|
||
u.nick_name,
|
||
u.user_name,
|
||
u.enabled,
|
||
u.create_time
|
||
FROM sys_user u
|
||
WHERE u.pid = #{currentUserId}
|
||
OR u.user_id = #{currentUserId}
|
||
</select>
|
||
|
||
<!-- 获取当前用户以及子用户(递归) -->
|
||
<select id="findUserTree1" resultType="com.fuyuanshen.fyscustomer.domain.Customer">
|
||
WITH RECURSIVE UserTree AS (
|
||
-- 初始查询:查找指定用户自己
|
||
SELECT user_id AS id, user_name, pid
|
||
FROM sys_user
|
||
WHERE user_id = #{currentUserId} -- 替换为你要查询的用户ID
|
||
|
||
UNION ALL
|
||
|
||
-- 递归部分:查找所有子节点
|
||
SELECT u.user_id AS id, u.user_name, u.pid
|
||
FROM sys_user u
|
||
INNER JOIN UserTree ut ON u.pid = ut.id)
|
||
SELECT *
|
||
FROM UserTree;
|
||
</select>
|
||
|
||
<!-- 获取当前用户以及子用户(递归)不包含本身 -->
|
||
<select id="findUserTree" resultType="com.fuyuanshen.fyscustomer.domain.Customer">
|
||
WITH RECURSIVE UserTree AS (
|
||
-- 初始查询:查找当前用户的直接子节点
|
||
SELECT user_id AS id, user_name, pid
|
||
FROM sys_user
|
||
WHERE pid = #{currentUserId} -- 当前用户的子节点
|
||
|
||
UNION ALL
|
||
|
||
-- 递归部分:查找所有后代节点
|
||
SELECT u.user_id AS id, u.user_name, u.pid
|
||
FROM sys_user u
|
||
INNER JOIN UserTree ut ON u.pid = ut.id)
|
||
SELECT *
|
||
FROM UserTree;
|
||
</select>
|
||
|
||
|
||
<select id="findCustomers1" resultType="com.fuyuanshen.fyscustomer.domain.Customer">
|
||
select
|
||
u.user_id as id, u.nick_name , u.user_name, u.enabled, u.create_time,
|
||
u.pid -- 确保包含 pid 字段
|
||
from sys_user u
|
||
<where>
|
||
<if test="criteria.ids != null and !criteria.ids.isEmpty()">
|
||
and u.pid IN
|
||
<foreach item="item" collection="criteria.ids" open="(" separator="," close=")">
|
||
#{item}
|
||
</foreach>
|
||
</if>
|
||
<if test="criteria.blurry != null and criteria.blurry.trim() != ''">
|
||
and u.nick_name like concat('%', TRIM(#{criteria.blurry}), '%')
|
||
</if>
|
||
<if test="criteria.enabled != null">
|
||
and u.enabled = #{criteria.enabled}
|
||
</if>
|
||
<if test="criteria.createTime != null and criteria.createTime.size() != 0">
|
||
and u.create_time between #{criteria.createTime[0]} and #{criteria.createTime[1]}
|
||
</if>
|
||
</where>
|
||
order by u.user_id desc
|
||
<if test="criteria.offset != null">
|
||
limit #{criteria.offset}, #{criteria.size}
|
||
</if>
|
||
</select>
|
||
|
||
<select id="findUsersWithAncestorsByIds" resultType="com.fuyuanshen.fyscustomer.domain.Customer">
|
||
WITH RECURSIVE user_tree AS (
|
||
SELECT * FROM sys_user WHERE user_id IN
|
||
<foreach item="item" collection="ids" open="(" separator="," close=")">
|
||
#{item}
|
||
</foreach>
|
||
UNION ALL
|
||
SELECT u.* FROM sys_user u
|
||
INNER JOIN user_tree ut ON u.user_id = ut.pid
|
||
)
|
||
SELECT DISTINCT * FROM user_tree;
|
||
</select>
|
||
|
||
<!-- 获取当前用户的祖先用户 -->
|
||
<select id="findAncestorsById" resultType="com.fuyuanshen.fyscustomer.domain.Customer">
|
||
WITH RECURSIVE user_ancestors AS (SELECT user_id, pid, tenant_id
|
||
FROM sys_user
|
||
WHERE user_id = #{currentUserId}
|
||
|
||
UNION ALL
|
||
|
||
SELECT u.user_id, u.pid, u.tenant_id
|
||
FROM sys_user u
|
||
INNER JOIN user_ancestors a ON u.user_id = a.pid)
|
||
SELECT *
|
||
FROM user_ancestors
|
||
WHERE user_id != #{currentUserId}
|
||
AND user_id IS NOT NULL;
|
||
</select>
|
||
|
||
|
||
</mapper> |