<?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="cokr.xit.fims.cmmn.dao.CrdnPayerAddrHstryMapper">

<!-- 단속 납부자 이력 정보 매퍼
 ========== 변경 이력 ==========
 2023-08-16	leebj 최초 작성
 ============================ -->

    <resultMap id="crdnPayerAddrHstryRow" type="cokr.xit.fims.cmmn.CrdnPayerAddrHstry"> <!-- 단속 납부자 주소 이력 -->
        <result property="addrHstryId"  column="ADDR_HSTRY_ID" />   <!-- 주소 이력 ID -->
        <result property="crdnId"       column="CRDN_ID" />         <!-- 단속 ID -->
        <result property="rtpyrId"      column="RTPYR_ID" />        <!-- 납부자 ID -->
        <result property="addrSn"       column="ADDR_SN" />         <!-- 주소 일련번호 -->
        <result property="createdAt"    column="REG_DT" />          <!-- 등록 일시 -->
        <result property="createdBy"    column="RGTR" />            <!-- 등록자 -->
    </resultMap>

    <sql id="select">
        SELECT CPAH.ADDR_HSTRY_ID   <!-- 변경 이력 ID -->
             , CPAH.CRDN_ID         <!-- 단속 ID -->
             , CPAH.RTPYR_ID        <!-- 납부자 ID -->
             , CPAH.ADDR_SN         <!-- 주소 일련번호 -->
             , CPAH.REG_DT          <!-- 등록 일시 -->
             , CPAH.RGTR            <!-- 등록자 -->
             , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = CPAH.RGTR)  AS RGTR_NM  <!-- 등록자 명 -->
             , P.RTPYR_NO           <!-- 납부자 번호 -->
             , P.RTPYR_NM           <!-- 납부자 명 -->
             , PA.ZIP               <!-- 우편번호 -->
             , PA.WHOL_ADDR         <!-- 전체 주소 -->
             , PA.ROAD_NM_CD        <!-- 도로 명 코드 -->
             , PA.STDG_CD           <!-- 법정동 코드 -->
          FROM TB_CRDN_PAYER_ADDR_HSTRY CPAH
         INNER JOIN TB_PAYER            P    ON (CPAH.RTPYR_ID = P.RTPYR_ID)
         INNER JOIN TB_PAYER_ADDR       PA   ON (CPAH.RTPYR_ID = PA.RTPYR_ID AND CPAH.ADDR_SN = PA.ADDR_SN)
    </sql>

    <select id="selectCrdnPayerHstryList" parameterType="map" resultType="dataobject">/* 단속 납부자 이력 목록 조회(crdnPayerAddrHstryMapper.selectCrdnPayerHstryList) */
        <include refid="utility.paging-prefix" />
        <include refid="select" />
        <where>
        </where>
        <include refid="utility.orderBy" />
        <include refid="utility.paging-suffix" />
    </select>

    <select id="selectCrdnPayerHstrys" parameterType="map" resultType="dataobject">/* 단속 납부자 이력 객체 가져오기(crdnPayerAddrHstryMapper.selectCrdnPayerHstrys) */
        <include refid="select" />
        <where>
            <if test="crdnId != null">
           AND CPAH.CRDN_ID      = #{crdnId}     <!-- 단속 ID -->
            </if>
            <if test="rtpyrId != null">
           AND CPAH.RTPYR_ID     = #{rtpyrId}    <!-- 납부자 ID -->
                <if test="addrSn != null">
           AND CPAH.ADDR_SN      = #{addrSn}     <!-- 주소 일련번호 -->
                </if>
            </if>
        </where>
        <include refid="utility.orderBy" />
    </select>

    <insert id="insertCrdnPayerAddrHstry" parameterType="cokr.xit.fims.cmmn.CrdnPayerAddrHstry">/* 단속 납부자 주소 이력 등록(crdnPayerAddrHstryMapper.insertCrdnPayerAddrHstry) */
        <selectKey resultType="string" keyProperty="addrHstryId" keyColumn="NEW_ID" order="BEFORE">
            <include refid="numbering.keyByYear">
                <property name="TABLE_NAME" value="TB_CRDN_PAYER_ADDR_HSTRY" />
                <property name="TABLE_KEY" value="ADDR_HSTRY_ID" />
                <property name="pad" value="20" />
            </include>
        </selectKey>
        INSERT INTO TB_CRDN_PAYER_ADDR_HSTRY (
               ADDR_HSTRY_ID    <!-- 주소 변경 이력 ID -->
             , CRDN_ID          <!-- 단속 ID -->
             , RTPYR_ID         <!-- 납부자 ID -->
             , ADDR_SN          <!-- 주소 일련번호 -->
             , REG_DT           <!-- 등록 일시 -->
             , RGTR             <!-- 등록자 -->
        ) SELECT
               #{addrHstryId}   <!-- 주소 변경 이력 ID -->
             , #{crdnId}        <!-- 단속 ID -->
             , #{rtpyrId}       <!-- 납부자 ID -->
             , #{addrSn}        <!-- 주소 일련번호 -->
             , <include refid="utility.now" />  <!-- 등록 일시 -->
             , #{createdBy}     <!-- 등록자 -->
          FROM DUAL
         WHERE NOT EXISTS (
         	SELECT *
         	  FROM TB_CRDN_PAYER_ADDR_HSTRY
         	 WHERE CRDN_ID = #{crdnId}
         	   AND RTPYR_ID = #{rtpyrId}
         	   AND ADDR_SN = #{addrSn}
         )
    </insert>

    <update id="updateCrdnPayerAddr" parameterType="cokr.xit.fims.cmmn.CrdnPayerAddrHstry">/* 단속 납부자 수정(crdnPayerAddrHstryMapper.updateCrdnPayerAddr) */
        UPDATE TB_CRDN
           SET RTPYR_ID = #{rtpyrId}    <!-- 납부자 ID -->
             , ADDR_SN  = #{addrSn}     <!-- 주소 일련번호 -->
             , MDFCN_DT = <include refid="utility.now" />   <!-- 수정 일시 -->
             , MDFR     = #{modifiedBy} <!-- 수정자 -->
         WHERE CRDN_ID  = #{crdnId}     <!-- 단속 ID -->
    </update>

</mapper>