<?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.BusinessUnitMapper">
  <resultMap id="BaseResultMap" type="pwc.taxtech.atms.entitiy.BusinessUnit">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    <id column="ID" jdbcType="VARCHAR" property="ID" />
    <result column="Name" jdbcType="VARCHAR" property="name" />
    <result column="IsActive" jdbcType="TINYINT" property="isActive" />
    <result column="CreateTime" jdbcType="TIMESTAMP" property="createTime" />
    <result column="UpdateTime" jdbcType="TIMESTAMP" property="updateTime" />
  </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, Name, IsActive, CreateTime, UpdateTime
  </sql>
  <select id="selectByExample" parameterType="pwc.taxtech.atms.entitiy.BusinessUnitExample" 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 BusinessUnit
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
    <if test="orderByClause != null">
      order by ${orderByClause}
    </if>
  </select>
  <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    select 
    <include refid="Base_Column_List" />
    from BusinessUnit
    where ID = #{ID,jdbcType=VARCHAR}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    delete from BusinessUnit
    where ID = #{ID,jdbcType=VARCHAR}
  </delete>
  <delete id="deleteByExample" parameterType="pwc.taxtech.atms.entitiy.BusinessUnitExample">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    delete from BusinessUnit
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
  </delete>
  <insert id="insert" parameterType="pwc.taxtech.atms.entitiy.BusinessUnit">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    insert into BusinessUnit (ID, Name, IsActive, 
      CreateTime, UpdateTime)
    values (#{ID,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{isActive,jdbcType=TINYINT}, 
      #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP})
  </insert>
  <insert id="insertSelective" parameterType="pwc.taxtech.atms.entitiy.BusinessUnit">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    insert into BusinessUnit
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="ID != null">
        ID,
      </if>
      <if test="name != null">
        Name,
      </if>
      <if test="isActive != null">
        IsActive,
      </if>
      <if test="createTime != null">
        CreateTime,
      </if>
      <if test="updateTime != null">
        UpdateTime,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="ID != null">
        #{ID,jdbcType=VARCHAR},
      </if>
      <if test="name != null">
        #{name,jdbcType=VARCHAR},
      </if>
      <if test="isActive != null">
        #{isActive,jdbcType=TINYINT},
      </if>
      <if test="createTime != null">
        #{createTime,jdbcType=TIMESTAMP},
      </if>
      <if test="updateTime != null">
        #{updateTime,jdbcType=TIMESTAMP},
      </if>
    </trim>
  </insert>
  <select id="countByExample" parameterType="pwc.taxtech.atms.entitiy.BusinessUnitExample" resultType="java.lang.Long">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    select count(*) from BusinessUnit
    <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 BusinessUnit
    <set>
      <if test="record.ID != null">
        ID = #{record.ID,jdbcType=VARCHAR},
      </if>
      <if test="record.name != null">
        Name = #{record.name,jdbcType=VARCHAR},
      </if>
      <if test="record.isActive != null">
        IsActive = #{record.isActive,jdbcType=TINYINT},
      </if>
      <if test="record.createTime != null">
        CreateTime = #{record.createTime,jdbcType=TIMESTAMP},
      </if>
      <if test="record.updateTime != null">
        UpdateTime = #{record.updateTime,jdbcType=TIMESTAMP},
      </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 BusinessUnit
    set ID = #{record.ID,jdbcType=VARCHAR},
      Name = #{record.name,jdbcType=VARCHAR},
      IsActive = #{record.isActive,jdbcType=TINYINT},
      CreateTime = #{record.createTime,jdbcType=TIMESTAMP},
      UpdateTime = #{record.updateTime,jdbcType=TIMESTAMP}
    <if test="_parameter != null">
      <include refid="Update_By_Example_Where_Clause" />
    </if>
  </update>
  <update id="updateByPrimaryKeySelective" parameterType="pwc.taxtech.atms.entitiy.BusinessUnit">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    update BusinessUnit
    <set>
      <if test="name != null">
        Name = #{name,jdbcType=VARCHAR},
      </if>
      <if test="isActive != null">
        IsActive = #{isActive,jdbcType=TINYINT},
      </if>
      <if test="createTime != null">
        CreateTime = #{createTime,jdbcType=TIMESTAMP},
      </if>
      <if test="updateTime != null">
        UpdateTime = #{updateTime,jdbcType=TIMESTAMP},
      </if>
    </set>
    where ID = #{ID,jdbcType=VARCHAR}
  </update>
  <update id="updateByPrimaryKey" parameterType="pwc.taxtech.atms.entitiy.BusinessUnit">
    <!--
      WARNING - @mbg.generated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    update BusinessUnit
    set Name = #{name,jdbcType=VARCHAR},
      IsActive = #{isActive,jdbcType=TINYINT},
      CreateTime = #{createTime,jdbcType=TIMESTAMP},
      UpdateTime = #{updateTime,jdbcType=TIMESTAMP}
    where ID = #{ID,jdbcType=VARCHAR}
  </update>
  <select id="selectByExampleWithRowbounds" parameterType="pwc.taxtech.atms.entitiy.BusinessUnitExample" 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 BusinessUnit
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
    <if test="orderByClause != null">
      order by ${orderByClause}
    </if>
  </select>
  
  <resultMap id="OrganizationDto" type="pwc.taxtech.atms.dto.organization.OrganizationDto">
    <id column="ID" jdbcType="VARCHAR" property="ID" />
 	<result column="OrganizationName" jdbcType="VARCHAR" property="name" />
    <result column="IndustryName" jdbcType="VARCHAR" property="industryName" />
    <result column="BusinessUnitName" jdbcType="VARCHAR" property="businessUnitName" />
    <result column="BusinessUnitID" jdbcType="VARCHAR" property="businessUnitID" />
    <result column="OrgStructureName" jdbcType="VARCHAR" property="structureName" />
    <result column="IndustryID" jdbcType="VARCHAR" property="industryID" />
    <result column="RegionID" jdbcType="VARCHAR" property="regionID" />
    <result column="RegionName" jdbcType="VARCHAR" property="regionName" />
    <result column="OrgStructureID" jdbcType="VARCHAR" property="structureID" />
    <result column="AreaID" jdbcType="VARCHAR" property="areaID" />
    <result column="AreaName" jdbcType="VARCHAR" property="areaName" />
    <result column="ClientCode" jdbcType="VARCHAR" property="clientCode" />
    <result column="Code" jdbcType="VARCHAR" property="code" />
    <result column="ParentID" jdbcType="VARCHAR" property="parentID" />
    <result column="PLevel" jdbcType="INTEGER" property="pLevel" /> 
    <result column="TaxPayerNumber" jdbcType="VARCHAR" property="taxPayerNumber" />
    <result column="IsActive" jdbcType="SMALLINT" property="isActive" />
  </resultMap>
  <select id="getBusinessUnitListJoinResult" resultMap="OrganizationDto">
	select Distinct org.ID as ID, 
	org.Name as OrganizationName,
	ind.Name as IndustryName,
	bu.Name as BusinessUnitName,
	bu.ID as BusinessUnitID,
	os.Name as OrgStructureName,
	ind.ID as IndustryID,
	org.RegionID as RegionID,
	reg.Name as RegionName,
	os.ID as OrgStructureID,
	area.ID as AreaID,
	area.Name as AreaName,
	org.ClientCode as ClientCode,
	org.Code as Code,
	org.ParentID as ParentID,
	org.PLevel as PLevel, 
	org.TaxPayerNumber as TaxPayerNumber
	from BusinessUnit as bu
	left join Organization as org on bu.ID = org.BusinessUnitID and org.IsActive = 1
	left join Industry as ind on org.IndustryID = ind.ID
	left join Area as area on org.AreaID = area.ID 
	left join OrganizationStructure as os on org.StructureID = os.ID
	left join Region as reg on org.RegionID = reg.ID
	where bu.IsActive = 1
  </select>
</mapper>