<?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.ruoyi.platform.mapper.PlatformRoleMapper">

    <resultMap type="com.ruoyi.common.core.domain.platform.vo.PlatformRoleVO" id="PlatformRoleResult">
        <id     property="id"       column="id"        />
        <result property="roleName"     column="role_name"      />
        <result property="roleKey"      column="role_key"       />
        <result property="roleSort"     column="role_sort"      />
        <result property="dataScope"    column="data_scope"     />
        <result property="status"       column="status"         />
        <result property="delFlag"      column="del_flag"       />
        <result property="createBy"     column="create_by"      />
        <result property="createTime"   column="create_time"    />
        <result property="updateBy"     column="update_by"      />
        <result property="updateTime"   column="update_time"    />
        <result property="remark"       column="remark"         />
    </resultMap>

    <sql id="selectRoleContactVo">
        select distinct r.id, r.role_name, r.role_key, r.role_sort, r.data_scope,
                        r.status, r.del_flag, r.create_time, r.remark
        from platform_role r
                 left join platform_user_role ur on ur.role_id = r.id
                 left join platform_user u on u.id = ur.user_id
                 left join platform_dept d on u.dept_id = d.id
    </sql>

    <select id="selectRoleList" parameterType="com.ruoyi.common.core.domain.platform.dto.PlatformRoleDTO"
            resultMap="PlatformRoleResult">
        <include refid="selectRoleContactVo"/>
        where r.del_flag = '0'
        <if test="roleName != null and roleName != ''">
            AND r.role_name like concat('%', #{roleName}, '%')
        </if>
        <if test="status != null and status != ''">
            AND r.status = #{status}
        </if>
        <if test="roleKey != null and roleKey != ''">
            AND r.role_key like concat('%', #{roleKey}, '%')
        </if>
        <if test="dataScope != null and dataScope != ''">
            AND r.data_scope = #{dataScope}
        </if>
        <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
            and date_format(r.create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
        </if>
        <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
            and date_format(r.create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
        </if>
        <!-- 数据范围过滤 -->
        ${params.dataScope}
    </select>

    <select id="selectRolesByUserId" parameterType="String" resultMap="PlatformRoleResult">
        <include refid="selectRoleContactVo"/>
        WHERE r.del_flag = '0' and ur.user_id = #{userId}
    </select>

</mapper>