<?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.AreaRegionMapper">
  <resultMap id="BaseResultMap" type="pwc.taxtech.atms.entitiy.AreaRegion">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    <id column="ID" jdbcType="VARCHAR" property="ID" />
    <result column="AreaID" jdbcType="VARCHAR" property="areaID" />
    <result column="RegionID" jdbcType="VARCHAR" property="regionID" />
  </resultMap>
  <sql id="Example_Where_Clause">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    <where>
      <foreach collection="oredCriteria" item="criteria" separator="or">
        <if test="criteria.valid">
          <trim prefix="(" prefixOverrides="and" suffix=")">
            <foreach collection="criteria.criteria" item="criterion">
              <choose>
                <when test="criterion.noValue">
                  and ${criterion.condition}
                </when>
                <when test="criterion.singleValue">
                  and ${criterion.condition} #{criterion.value}
                </when>
                <when test="criterion.betweenValue">
                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
                </when>
                <when test="criterion.listValue">
                  and ${criterion.condition}
                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
                    #{listItem}
                  </foreach>
                </when>
              </choose>
            </foreach>
          </trim>
        </if>
      </foreach>
    </where>
  </sql>
  <sql id="Update_By_Example_Where_Clause">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    <where>
      <foreach collection="example.oredCriteria" item="criteria" separator="or">
        <if test="criteria.valid">
          <trim prefix="(" prefixOverrides="and" suffix=")">
            <foreach collection="criteria.criteria" item="criterion">
              <choose>
                <when test="criterion.noValue">
                  and ${criterion.condition}
                </when>
                <when test="criterion.singleValue">
                  and ${criterion.condition} #{criterion.value}
                </when>
                <when test="criterion.betweenValue">
                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
                </when>
                <when test="criterion.listValue">
                  and ${criterion.condition}
                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
                    #{listItem}
                  </foreach>
                </when>
              </choose>
            </foreach>
          </trim>
        </if>
      </foreach>
    </where>
  </sql>
  <sql id="Base_Column_List">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    ID, AreaID, RegionID
  </sql>
  <select id="selectByExample" parameterType="pwc.taxtech.atms.entitiy.AreaRegionExample" resultMap="BaseResultMap">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    select
    <if test="distinct">
      distinct
    </if>
    <include refid="Base_Column_List" />
    from AreaRegion
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
    <if test="orderByClause != null">
      order by ${orderByClause}
    </if>
  </select>
  <select id="selectByPrimaryKey" parameterType="String" resultMap="BaseResultMap">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    select 
    <include refid="Base_Column_List" />
    from AreaRegion
    where ID = #{ID,jdbcType=VARCHAR}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="String">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    delete from AreaRegion
    where ID = #{ID,jdbcType=VARCHAR}
  </delete>
  <delete id="deleteByExample" parameterType="pwc.taxtech.atms.entitiy.AreaRegionExample">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    delete from AreaRegion
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
  </delete>
  <insert id="insert" parameterType="pwc.taxtech.atms.entitiy.AreaRegion">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    insert into AreaRegion (ID, AreaID, RegionID
      )
    values (#{ID,jdbcType=VARCHAR}, #{areaID,jdbcType=VARCHAR}, #{regionID,jdbcType=VARCHAR}
      )
  </insert>
  <insert id="insertSelective" parameterType="pwc.taxtech.atms.entitiy.AreaRegion">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    insert into AreaRegion
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="ID != null">
        ID,
      </if>
      <if test="areaID != null">
        AreaID,
      </if>
      <if test="regionID != null">
        RegionID,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="ID != null">
        #{ID,jdbcType=VARCHAR},
      </if>
      <if test="areaID != null">
        #{areaID,jdbcType=VARCHAR},
      </if>
      <if test="regionID != null">
        #{regionID,jdbcType=VARCHAR},
      </if>
    </trim>
  </insert>
  <select id="countByExample" parameterType="pwc.taxtech.atms.entitiy.AreaRegionExample" resultType="java.lang.Long">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    select count(*) from AreaRegion
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
  </select>
  <update id="updateByExampleSelective" parameterType="map">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    update AreaRegion
    <set>
      <if test="record.ID != null">
        ID = #{record.ID,jdbcType=VARCHAR},
      </if>
      <if test="record.areaID != null">
        AreaID = #{record.areaID,jdbcType=VARCHAR},
      </if>
      <if test="record.regionID != null">
        RegionID = #{record.regionID,jdbcType=VARCHAR},
      </if>
    </set>
    <if test="_parameter != null">
      <include refid="Update_By_Example_Where_Clause" />
    </if>
  </update>
  <update id="updateByExample" parameterType="map">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    update AreaRegion
    set ID = #{record.ID,jdbcType=VARCHAR},
      AreaID = #{record.areaID,jdbcType=VARCHAR},
      RegionID = #{record.regionID,jdbcType=VARCHAR}
    <if test="_parameter != null">
      <include refid="Update_By_Example_Where_Clause" />
    </if>
  </update>
  <update id="updateByPrimaryKeySelective" parameterType="pwc.taxtech.atms.entitiy.AreaRegion">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    update AreaRegion
    <set>
      <if test="areaID != null">
        AreaID = #{areaID,jdbcType=VARCHAR},
      </if>
      <if test="regionID != null">
        RegionID = #{regionID,jdbcType=VARCHAR},
      </if>
    </set>
    where ID = #{ID,jdbcType=VARCHAR}
  </update>
  <update id="updateByPrimaryKey" parameterType="pwc.taxtech.atms.entitiy.AreaRegion">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    update AreaRegion
    set AreaID = #{areaID,jdbcType=VARCHAR},
      RegionID = #{regionID,jdbcType=VARCHAR}
    where ID = #{ID,jdbcType=VARCHAR}
  </update>
  <select id="selectByExampleWithRowbounds" parameterType="pwc.taxtech.atms.entitiy.AreaRegionExample" resultMap="BaseResultMap">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    select
    <if test="distinct">
      distinct
    </if>
    <include refid="Base_Column_List" />
    from AreaRegion
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
    <if test="orderByClause != null">
      order by ${orderByClause}
    </if>
  </select>
  
  <!-- User defined -->
  <resultMap id="ResultMapWithAreaAndRegion" type="pwc.taxtech.atms.entitiy.AreaRegion">
    <id column="ID" jdbcType="VARCHAR" property="ID" />
    <result column="areaRegionAreaID" jdbcType="VARCHAR" property="areaID" />
    <result column="areaRegionRegionID" jdbcType="VARCHAR" property="regionID" />
    <association column="AreaID" javaType="pwc.taxtech.atms.entitiy.Area" property="area">
    	<id column="areaID" property="ID" />
    	<result column="areaParentID" property="parentID" />
    	<result column="areaName" property="name" />
    	<result column="areaIsActive" property="isActive" />
    </association>
    <association column="RegionID" javaType="pwc.taxtech.atms.entitiy.Region" property="region">
    	<id column="regionID" property="ID" />
	    <result column="regionParentID" property="parentID" />
	    <result column="regionName" property="name" />
	    <result column="regionShortName" property="shortName" />
	    <result column="regionMergerName" property="mergerName" />
	    <result column="regionLevelType" property="levelType" />
	    <result column="regionTelCode" property="telCode" />
	    <result column="regionZipCode" property="zipCode" />
	    <result column="regionPinYin" property="pinYin" />
	    <result column="regionLongitude" property="longitude" />
	    <result column="regionLatitude" property="latitude" />
	    <result column="regionIsActive" property="isActive" />
    </association>
  </resultMap>
  <select id="selectAreaRegionByAreaId" parameterType="string" resultMap="ResultMapWithAreaAndRegion">
        select 
        	AreaRegion.ID, AreaRegion.AreaID as areaRegionAreaID, AreaRegion.RegionID as areaRegionRegionID
        	, Area.ID as areaID, Area.ParentID as areaParentID, Area.Name as areaName, Area.IsActive as areaIsActive
        	, Region.ID as regionID, Region.ParentID as regionParentID, Region.Name as regionName, Region.ShortName as regionShortName, Region.MergerName as regionMergerName, Region.LevelType as regionLevelType, Region.TelCode as regionTelCode, Region.ZipCode as regionZipCode, Region.PinYin as regionPinYin, Region.Longitude as RegionLongitude, Region.Latitude as regionLatitude, Region.IsActive as regionIsActive
        from 
        	AreaRegion, Area, Region 
        where 
        	AreaRegion.areaID = Area.ID 
        	and AreaRegion.regionID = Region.ID 
        	and AreaRegion.areaID = #{areaId}
        order by regionID
  </select>


	<resultMap id="resultMapAreaRegionDto" type="pwc.taxtech.atms.dto.arearegion.AreaRegionDto">
		<id column="ID" jdbcType="VARCHAR" property="ID" />
		<result column="AreaID" property="areaID" />
		<result column="RegionName" property="regionName" />
		<result column="RegionID" property="regionID" />
	</resultMap>
	<select id="selectByRegionLevelType" parameterType="map" resultMap="resultMapAreaRegionDto">
select areaRegionReal.AreaID as AreaID, 
       p.Name                as RegionName, 
       p.ID                  as RegionID 
from   Region as p 
       left join AreaRegion as areaRegionReal 
              on p.ID = areaRegionReal.RegionID 
where  p.LevelType = #{regionLevelType} 
	</select>
  
</mapper>