<?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.DimensionValueOrgMapper">

    <resultMap id="UnionDimensionValueOrg" type="pwc.taxtech.atms.dto.dimension.UnionDimensionValueOrg">
        <id column="ID" jdbcType="VARCHAR" property="id"/>
        <result column="DIMENSION_VALUE_ID" jdbcType="VARCHAR" property="dimensionValueId"/>
        <result column="ORGANIZATION_ID" jdbcType="VARCHAR" property="organizationId"/>
        <result column="DIMENSION_ID" jdbcType="VARCHAR" property="dimensionId"/>
        <result column="DIMENSION_VALUE_NAME" jdbcType="VARCHAR" property="dimensionValueName"/>
    </resultMap>

    <select id="selectUnionDimensionValueOrgByDimension" parameterType="pwc.taxtech.atms.dto.DimensionParamDto" resultMap="UnionDimensionValueOrg">
        SELECT
        *
        FROM
        (
        SELECT
        #{organizationStructureID} AS ID,
        STRUCTURE_ID AS DIMENSION_VALUE_ID,
        ID AS ORGANIZATION_ID
        FROM
        ORGANIZATION
        UNION
        SELECT
        #{businessUnitID} AS ID,
        BUSINESS_UNIT_ID AS DIMENSION_VALUE_ID,
        ID AS ORGANIZATION_ID
        FROM
        ORGANIZATION

        UNION

        SELECT
        #{areaID} AS ID,
        AREA_ID AS DIMENSION_VALUE_ID,
        ID AS ORGANIZATION_ID
        FROM
        ORGANIZATION

        UNION

        SELECT
        ID,
        DIMENSION_VALUE_ID,
        ORGANIZATION_ID
        FROM
        DIMENSION_VALUE_ORG
        )
        Q
        JOIN
        (
        SELECT
        ID AS DIMENSION_VALUE_ID,
        NAME AS DIMENSION_VALUE_NAME,
        IS_ACTIVE,
        #{organizationStructureID} AS DIMENSION_ID,
        CREATE_TIME,
        UPDATE_TIME
        FROM
        ORGANIZATION_STRUCTURE
        WHERE
        IS_ACTIVE=1

        UNION

        SELECT
        ID AS DIMENSION_VALUE_ID,
        NAME AS DIMENSION_VALUE_NAME,
        IS_ACTIVE,
        #{businessUnitID} AS DIMENSION_ID,
        CREATE_TIME,
        UPDATE_TIME
        FROM
        BUSINESS_UNIT
        WHERE
        IS_ACTIVE=1

        UNION

        SELECT
        ID AS DIMENSION_VALUE_ID,
        NAME AS DIMENSION_VALUE_NAME,
        IS_ACTIVE,
        #{areaID} AS DIMENSION_ID,
        SYSDATE
        AS CREATE_TIME,
        SYSDATE
        AS UPDATE_TIME
        FROM
        AREA
        WHERE
        IS_ACTIVE=1

        UNION

        SELECT
        ID AS DIMENSION_VALUE_ID,
        NAME AS DIMENSION_VALUE_NAME,
        IS_ACTIVE,
        DIMENSION_ID,
        CREATE_TIME,
        UPDATE_TIME
        FROM
        DIMENSION_VALUE
        WHERE
        IS_ACTIVE=1
        )
        P
        ON
        P.DIMENSION_VALUE_ID = Q.DIMENSION_VALUE_ID
        JOIN
        DIMENSION R
        ON
        R.IS_ACTIVE = 1
        AND P.DIMENSION_ID = R.ID
    </select>

</mapper>