<?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,
        rp.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,
        rp.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>