UserMapper.xml 7.45 KB
<?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.thingsboard.server.dao.yunteng.mapper.UserMapper">
    <resultMap type="org.thingsboard.server.common.data.yunteng.dto.UserDetailsDTO" id="userDetailsMap">
        <result property="id" column="id"/>
        <result property="username" column="username"/>
        <result property="password" column="password"/>
        <result property="enabled" column="enabled"/>
        <result property="accountExpireTime" column="account_expire_time"/>
        <association property="tenant" javaType="org.thingsboard.server.common.data.yunteng.dto.TenantDTO">
            <result column="tenant_name" property="name"/>
            <result column="tenant_id" property="tenantId"/>
            <result column="tenant_enabled" property="enabled"/>
            <result column="tenant_expire_time" property="tenantExpireTime"/>
        </association>
        <collection property="roles" javaType="java.util.Set" ofType="org.thingsboard.server.common.data.yunteng.dto.UserDetailRoleDTO">
            <result column="role_type" property="roleType" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
        </collection>
    </resultMap>
    <resultMap type="org.thingsboard.server.common.data.yunteng.dto.UserDTO" id="userDTOMap">
        <result property="id" column="id"/>
        <result property="username" column="username"/>
        <result property="password" column="password"/>
        <result property="realName" column="real_name"/>
        <result property="enabled" column="enabled"/>
        <result property="phoneNumber" column="phone_number"/>
        <result property="email" column="email"/>
        <result property="avatar" column="avatar"/>
        <result property="deptId" column="dept_id"/>
        <result property="tenantName" column="tenant_name"/>
        <result property="tenantId" column="tenant_id"/>
        <result property="createTime" column="create_time"/>
        <result property="updateTime" column="update_time"/>
        <result property="accountExpireTime" column="account_expire_time"/>
        <result property="level" column="level"/>
    </resultMap>

    <sql id="columns">
        su.id AS id,
        su.username AS username,
        su.password AS password,
        su.phone_number AS phone_number,
        su.email AS email,
        su.avatar AS avatar,
        su.enabled AS enabled,
        su.account_expire_time AS account_expire_time,
        su.tenant_id AS tenant_id,
        su.create_time AS create_time,
        su.update_time AS update_time,
        su.real_name AS real_name,
        su.dept_id AS dept_id,
        su.level AS level
    </sql>

    <select id="findUserDetailsByUserName" resultMap="userDetailsMap">
        SELECT su.id                  as id,
               su.username            as username,
               su.password            as password,
               su.enabled             as enabled,
               su.account_expire_time as account_expire_time,
               st.name                as tenant_name,
               st.tenant_id         as tenant_id,
               st.enabled             as tenant_enabled,
               st.tenant_expire_time  as tenant_expire_time,
               rr.role_type           as role_type
        FROM sys_user su
                 LEFT JOIN sys_tenant st ON su.tenant_id = st.tenant_id
                 LEFT JOIN (
            SELECT sur.user_id,
                   sr.role_type
            FROM sys_user_role sur
                     LEFT JOIN sys_role sr ON sur.role_id = sr.id
            WHERE sur.user_id = (SELECT id FROM sys_user WHERE username = #{username})
        ) rr ON su.id = rr.user_id
        WHERE su.username = #{username};
    </select>

    <select id="getUserPage" resultMap="userDTOMap">
        SELECT
        <include refid="columns"/>,
        st.name AS tenant_name
        FROM sys_user su
        LEFT JOIN sys_tenant st ON su.tenant_id = st.tenant_id
        <where>
            <if test="queryMap.realName!=null and queryMap.realName!=''">
                AND su.real_name LIKE CONCAT('%',#{queryMap.realName}::TEXT,'%')
            </if>
            <if test="queryMap.username!=null and queryMap.username!=''">
                AND su.username LIKE CONCAT('%',#{queryMap.username}::TEXT,'%')
            </if>
            <if test="queryMap.tenantId !=null and queryMap.tenantId!=''">
                AND su.tenant_id=#{queryMap.tenantId}
            </if>
        </where>
    </select>

    <select id="getAdminUserPage" resultMap="userDTOMap">
        SELECT
        <include refid="columns"/>,
        st.name                AS tenant_name
        FROM sys_user su
                 LEFT JOIN sys_tenant st ON su.tenant_id = st.tenant_id
        WHERE su.ID IN (SELECT user_id
                        FROM sys_user_role
                        WHERE role_id IN (SELECT ID
                                          FROM sys_role
                                          WHERE role_type = #{roleType}
                                            <if test="roleType == 'ROLE_PLATFORM_ADMIN'">
                                                OR role_type = 'ROLE_SYS_ADMIN'
                                            </if>
                                            AND tenant_id = #{tenantId}))
    </select>
    <select id="selectAllTenantUser" resultMap="userDTOMap">
        SELECT
        <include refid="columns"/>,
        st.name                AS tenant_name
        FROM sys_user su
        LEFT JOIN sys_tenant st ON su.tenant_id = st.tenant_id
        WHERE su.level = 2;
    </select>
    <select id="getAllIdsByTenantId" resultType="java.lang.String">
        SELECT id FROM sys_user WHERE tenant_id IN
        <foreach collection="tenantIds" item="tenantId" open="(" separator="," close=")">
            #{tenantId}
        </foreach>
    </select>

    <update id="setPassword2NullAndInsertActiveToken">
        UPDATE sys_user
        SET password=null,
            activate_token=#{activeToken}
        WHERE id = #{userId}
    </update>

    <select id="findUserDetailsByPhoneNumber" resultMap="userDetailsMap">
        SELECT su.id                  as id,
               su.username            as username,
               su.password            as password,
               su.enabled             as enabled,
               su.account_expire_time as account_expire_time,
               st.name                as tenant_name,
               st.tenant_id         as tenant_id,
               st.enabled             as tenant_enabled,
               st.tenant_expire_time  as tenant_expire_time,
               rr.role_type           as role_type
        FROM sys_user su
                 LEFT JOIN sys_tenant st ON su.tenant_id = st.tenant_id
                 LEFT JOIN (
            SELECT sur.user_id,
                   sr.role_type
            FROM sys_user_role sur
                     LEFT JOIN sys_role sr ON sur.role_id = sr.id
            WHERE sur.user_id = (SELECT id FROM sys_user WHERE phone_number = #{phoneNumber})
        ) rr ON su.id = rr.user_id
        WHERE su.phone_number = #{phoneNumber};
    </select>
    <select id="findUserInfo" resultMap="userDTOMap">
        SELECT
        <include refid="columns"/>
        FROM sys_user su
        <where>
            <if test="username !=null and username!=''">AND su.username=#{username}</if>
            <if test="tenantId !=null and tenantId!=''">AND su.tenant_id=#{tenantId}</if>
        </where>
    </select>
</mapper>