<?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 as ID,
        dimension_value_id as DimensionValueID,
        organization_id as OrganizationID
        FROM
        dimension_value_org
        )
        Q
        JOIN
        (
        SELECT
        id AS DIMENSION_VALUE_ID,
        name AS DIMENSION_VALUE_NAME,
        is_active AS IS_ACTIVE,
        #{organizationStructureId} AS DIMENSION_ID,
        create_time AS CREATE_TIME,
        update_time AS UPDATE_TIME
        FROM
        organization_structure
        WHERE
        is_active=1

        UNION

        SELECT
        id AS DIMENSION_VALUE_ID,
        name AS DIMENSION_VALUE_NAME,
        is_active AS IS_ACTIVE,
        #{businessUnitId} AS DIMENSION_ID,
        create_time AS CREATE_TIME,
        update_time AS UPDATE_TIME
        FROM
        business_unit
        WHERE
        is_active=1

        UNION

        SELECT
        id AS DIMENSION_VALUE_ID,
        name AS DIMENSION_VALUE_NAME,
        is_active AS 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 AS IS_ACTIVE,
        dimension_id AS DIMENSION_ID,
        create_time AS CREATE_TIME,
        update_time AS 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>