UserMapper.xml 10.4 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"/>
        <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,
               su.level               as level,
               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 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.level !=null">
            AND su.level= #{queryMap.level}
        </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}
            </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>