UserMapper.xml 10.8 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"/>
        <result property="updateTime" column="update_time"/>
        <result property="createTime" column="create_time"/>
        <result property="level" column="level"/>
        <result property="tbUser" column="tbUser"/>
        <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="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"/>
        <result property="tbUser" column="tb_user"/>
        <result property="customerId" column="customer_id"/>
        <result property="remark" column="remark"/>
        <result property="activateToken" column="activate_token"/>
    </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.level AS level,
        su.tb_user AS tb_user,
        su.remark AS remark,
        su.activate_token AS activate_token
    </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,
        su.level as level,
        su.tb_user as tbUser
        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}
            <if test="tenantId !=null and tenantId !=''">
                AND su.tenant_id = #{tenantId}
            </if>
        </where>
    </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>
            su.id != #{queryMap.currentUserId}
            <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>
            <if test="queryMap.isTenantAdmin != null">
                AND su.level =3
            </if>
            <if test="queryMap.userIds !=null">
                AND su.id IN
                <foreach collection="queryMap.userIds" item="userId" open="(" separator="," close=")">
                    #{userId}
                </foreach>
            </if>
        </where>
    </select>

    <select id="getTenantAdminPage" 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.tenant_id = #{tenantId}
        <if test="queryMap.username !=null and queryMap.username!=''">
            AND su.username LIKE CONCAT('%',#{queryMap.username}::TEXT,'%')

        </if>
        <if test="queryMap.realName !=null and queryMap.realName!=''">
            AND su.real_name LIKE CONCAT('%',#{queryMap.realName}::TEXT,'%')

        </if>
        <if test="queryMap.level !=null">
            AND su.level= #{queryMap.level}
        </if>
        <if test="queryMap.userIds !=null">
            AND su.id IN
            <foreach collection="queryMap.userIds" item="userId" open="(" separator="," close=")">
                #{userId}
            </foreach>
        </if>
    </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>

    <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,
               su.level               as level
        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 su.username=#{username}
    </select>
    <select id="findUserInfoByPhoneNumber" resultMap="userDTOMap">
        SELECT
        <include refid="columns"/>
        FROM sys_user su
        WHERE su.phone_number=#{phoneNumber}
    </select>

    <select id="findUserCustomerIdById" resultType="java.lang.String">
        SELECT tu.customer_id
        FROM sys_user su
                 LEFT JOIN tb_user tu ON su.tb_user = CAST(tu.id AS VARCHAR)
        WHERE su.id = #{userId}
    </select>

    <select id="getUserCountByRoleType" resultMap="userDTOMap">
        SELECT
        <include refid="columns"/>
        FROM sys_user su LEFT JOIN sys_user_role sur ON su.id = sur.user_id
        LEFT JOIN sys_role sr ON sur.role_id = sr."id" WHERE sr.role_type = #{roleType}
    </select>
    <select id="getMyCustomers" resultMap="userDTOMap">
        SELECT<include refid="columns"/>, tu.customer_id AS customer_id
        FROM sys_user su
        LEFT JOIN tb_user tu ON su.tb_user = tu.id::TEXT
        WHERE tu.tenant_id::TEXT = #{tenantId}
        AND tu.customer_id::TEXT != #{customerId}
        AND su.id IN
        <foreach collection="userIds" item="userId" open="(" separator="," close=")">
            #{userId}
        </foreach>
    </select>

    <select id="findUsersAsyncByTs" resultMap="userDTOMap">
        SELECT
        <include refid="columns"/>
        FROM
        sys_user su
        WHERE
        su.ID IN ( SELECT sur.user_id FROM sys_user_role sur LEFT JOIN sys_role sr ON sur.role_id = sr.ID WHERE
        sr.role_type = 'CUSTOMER_USER' )
        AND su.create_time &gt;= #{startTs} ::TIMESTAMP
        AND su.create_time &lt;#{endTs} ::TIMESTAMP
    </select>

    <select id="findCustomerIdByUserId" resultType="java.lang.String">
        SELECT tu.customer_id
        FROM sys_user su
                 LEFT JOIN tb_user tu ON su.tb_user = tu.id::TEXT
        WHERE su.id = #{id}
    </select>


    <select id="findCustomers" resultMap="userDetailsMap">
        SELECT u.enabled,u.account_expire_time,u.create_time
        ,t.enabled as tenant_enabled,t.tenant_expire_time as tenant_expire_time
        ,al.update_time FROM sys_user u
        LEFT JOIN sys_tenant t ON u.tenant_id = t.tenant_id
        LEFT JOIN sys_user_role r ON u.id = r.user_id
        LEFT JOIN sys_role ro ON ro.id = r.role_id
        LEFT JOIN (SELECT MAX(to_timestamp(created_time/1000)::TIMESTAMP)update_time, entity_id FROM audit_log GROUP BY
        entity_id)al ON al.entity_id = u.tb_user::uuid
        <where>
            ro.role_type = 'CUSTOMER_USER'
            <if test="queryMap.tenantId !=null">
                AND u.tenant_id= #{queryMap.tenantId}::TEXT
            </if>
            <if test="queryMap.startTime !=null">
                AND u.create_time >= #{queryMap.startTime}
            </if>
            <if test="queryMap.endTime !=null">
                AND u.create_time &lt; #{queryMap.endTime}
            </if>
        </where>
    </select>
</mapper>