<?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="pwc.taxtech.atms.dao.RolePermissionMapper">

    <select id="selectByRoleId" parameterType="java.lang.String" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM
        role_permission
        WHERE
        role_id = #{roleId,jdbcType=VARCHAR}
    </select>

    <resultMap extends="BaseResultMap" id="ResultMapWithAssociation" type="pwc.taxtech.atms.entity.RolePermission">
        <association column="ROLE_ID" javaType="pwc.taxtech.atms.entity.Role" property="role">
            <id column="ROLE_ID" property="id"/>
            <result column="ROLE_NAME" property="name"/>
            <result column="ROLE_DESCRIPTION" property="description"/>
            <result column="ROLE_CATEGORY_ID" property="roleCategoryId"/>
            <result column="ROLE_SERVICE_TYPE" property="serviceTypeId"/>
            <result column="ROLE_CREATE_TIME" property="createTime"/>
            <result column="ROLE_UPDATE_TIME" property="updateTime"/>
        </association>
        <association column="PERMISSION_ID" javaType="pwc.taxtech.atms.entity.Permission" property="permission">
            <id column="PERMISSION_ID" property="id"/>
            <result column="PERMISSION_NAME" property="name"/>
            <result column="PERMISSION_CODE" property="code"/>
            <result column="PERMISSION_PARENT_ID" property="parentId"/>
            <result column="PERMISSION_IS_ACTIVE" property="isActive"/>
            <result column="PERMISSION_P_LEVEL" property="pLevel"/>
            <result column="PERMISSION_RELY_ON_CODES" property="relyOnCodes"/>
            <result column="PERMISSION_MENU_ID" property="menuId"/>
            <result column="PERMISSION_SERVICE_TYPE_ID" property="serviceTypeId"/>
            <result column="PERMISSION_CREATE_TIME" property="createTime"/>
            <result column="PERMISSION_UPDATE_TIME" property="updateTime"/>
        </association>
    </resultMap>

    <select id="selectByRoleAndServiceTypeWithAssociation" resultMap="ResultMapWithAssociation">
        SELECT
        rp.id AS ID,
        rp.role_id AS ROLE_ID,
        rp.permission_id AS PERMISSION_ID,
        r.id AS ROLE_ID,
        r.name AS ROLE_NAME,
        r.description AS ROLE_DESCRIPTION,
        r.role_category_id AS ROLE_CATEGORY_ID,
        r.service_type_id AS ROLE_SERVICE_TYPE,
        r.create_time AS ROLE_CREATE_TIME,
        r.update_time AS ROLE_UPDATE_TIME,
        p.id AS PERMISSION_ID,
        p.name AS PERMISSION_NAME,
        p.code AS PERMISSION_CODE,
        p.parent_id AS PERMISSION_PARENT_ID,
        p.is_active AS PERMISSION_IS_ACTIVE,
        p.p_level AS PERMISSION_P_LEVEL,
        p.rely_on_codes AS PERMISSION_RELY_ON_CODES,
        p.menu_id AS PERMISSION_MENU_ID,
        p.service_type_id AS PERMISSION_SERVICE_TYPE_ID,
        p.create_time AS PERMISSION_CREATE_TIME,
        p.update_time AS PERMISSION_UPDATE_TIME
        FROM
        role_permission rp
        JOIN
        role r
        on
        r.id = rp.role_id
        JOIN
        permission p
        on
        p.id = rp.permission_id
        where
        rp.role_id= #{roleId,jdbcType=VARCHAR}
        AND r.service_type_id= #{serviceTypeId,jdbcType=VARCHAR}
    </select>

    <select id="selectByRoleListAndServiceTypeWithAssociation" resultMap="ResultMapWithAssociation">
        SELECT
        rp.id AS ID,
        rp.role_id as ROLE_ID,
        rp.permission_id as PERMISSION_ID,
        r.id AS ROLE_ID,
        r.name AS ROLE_NAME,
        r.description AS ROLE_DESCRIPTION,
        r.role_category_id AS ROLE_CATEGORY_ID,
        r.service_type_id AS ROLE_SERVICE_TYPE,
        r.create_time AS ROLE_CREATE_TIME,
        r.update_time AS ROLE_UPDATE_TIME,
        p.id AS PERMISSION_ID,
        p.name AS PERMISSION_NAME,
        p.code AS PERMISSION_CODE,
        p.parent_id AS PERMISSION_PARENT_ID,
        p.is_active AS PERMISSION_IS_ACTIVE,
        p.p_level AS PERMISSION_P_LEVEL,
        p.rely_on_codes AS PERMISSION_RELY_ON_CODES,
        p.menu_id AS PERMISSION_MENU_ID,
        p.service_type_id AS PERMISSION_SERVICE_TYPE_ID,
        p.create_time AS PERMISSION_CREATE_TIME,
        p.update_time AS PERMISSION_UPDATE_TIME
        FROM
        role_permission rp
        JOIN
        role r
        on
        r.id = rp.role_id
        JOIN
        permission p
        on
        p.id = rp.permission_id
        where
        r.service_type_id= #{serviceTypeId,jdbcType=VARCHAR}
        AND rp.role_id in
        <foreach close=")" collection="roleList" index="index" item="roleID" open="(" separator=",">
            #{roleID}
        </foreach>
    </select>

</mapper>