<?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.payer.dao.PayerMapper">

<!-- 납부자 대장 정보 매퍼
 ========== 변경 이력 ==========
 2023-08-18	mjkhan 최초 작성
 ============================ -->

<resultMap id="payerRow" type="cokr.xit.fims.payer.Payer"> <!-- 납부자 대장 -->
    <result property="rtpyrId"        column="RTPYR_ID" />         <!-- 납부자 ID -->
    <result property="sggCd"          column="SGG_CD" />           <!-- 시군구 코드 -->
    <result property="rtpyrInptSeCd"  column="RTPYR_INPT_SE_CD" /> <!-- 납부자 입력 구분 코드 -->
    <result property="rtpyrSeCd"      column="RTPYR_SE_CD" />      <!-- 납부자 구분 코드 -->
    <result property="rtpyrNo"        column="RTPYR_NO" />         <!-- 납부자 번호 -->
    <result property="rtpyrNm"        column="RTPYR_NM" />         <!-- 납부자 명 -->
    <result property="rtpyrEml"       column="RTPYR_EML" />        <!-- 납부자 이메일 -->
    <result property="rtpyrBrdt"      column="RTPYR_BRDT" />       <!-- 납부자 생년월일 -->
    <result property="rtpyrSttsCd"    column="RTPYR_STTS_CD" />    <!-- 납부자 상태 코드 -->
    <result property="addrSeCd"       column="ADDR_SE_CD" />       <!-- 주소 구분 코드 -->
    <result property="zip"            column="ZIP" />              <!-- 우편번호 -->
    <result property="roadNmCd"       column="ROAD_NM_CD" />       <!-- 도로 명 코드 -->
    <result property="udgdSeCd"       column="UDGD_SE_CD" />       <!-- 지하 구분 코드 -->
    <result property="bmno"           column="BMNO" />             <!-- 건물본번 -->
    <result property="bsno"           column="BSNO" />             <!-- 건물부번 -->
    <result property="bldgMngNo"      column="BLDG_MNG_NO" />      <!-- 건물 관리 번호 -->
    <result property="stdgCd"         column="STDG_CD" />          <!-- 법정동 코드 -->
    <result property="dongCd"         column="DONG_CD" />          <!-- 행정동 코드 -->
    <result property="mtnSeCd"        column="MTN_SE_CD" />        <!-- 산 구분 코드 -->
    <result property="mno"            column="MNO" />              <!-- 본번 -->
    <result property="sno"            column="SNO" />              <!-- 부번 -->
    <result property="spclDong"       column="SPCL_DONG" />        <!-- 특수 동 -->
    <result property="spclHo"         column="SPCL_HO" />          <!-- 특수 호 -->
    <result property="spclAddr"       column="SPCL_ADDR" />        <!-- 특수 주소 -->
    <result property="addr"           column="ADDR" />             <!-- 주소 -->
    <result property="dtlAddr"        column="DTL_ADDR" />         <!-- 상세 주소 -->
    <result property="wholAddr"       column="WHOL_ADDR" />        <!-- 전체 주소 -->
    <result property="createdAt"      column="REG_DT" />           <!-- 등록 일시 -->
    <result property="createdBy"      column="RGTR" />             <!-- 등록자 -->
    <result property="lastModified"   column="MDFCN_DT" />         <!-- 수정 일시 -->
    <result property="modifiedBy"     column="MDFR" />             <!-- 수정자 -->
    <result property="vhrno"          column="VHRNO" />            <!-- 차량번호 -->
    <result property="rtpyrTelno"     column="RTPYR_TELNO" />      <!-- 납부자 전화번호 -->
    <result property="rtpyrMblTelno"  column="RTPYR_MBL_TELNO" />  <!-- 납부자 휴대 전화번호 -->
</resultMap>

<sql id="select">SELECT RTPYR_ID         <!-- 납부자 ID -->
     , SGG_CD           <!-- 시군구 코드 -->
     , RTPYR_INPT_SE_CD <!-- 납부자 입력 구분 코드 -->
     , RTPYR_SE_CD      <!-- 납부자 구분 코드 -->
     , RTPYR_NO         <!-- 납부자 번호 -->
     , RTPYR_NM         <!-- 납부자 명 -->
     , RTPYR_EML        <!-- 납부자 이메일 -->
     , RTPYR_BRDT       <!-- 납부자 생년월일 -->
     , RTPYR_STTS_CD    <!-- 납부자 상태 코드 -->
     , ADDR_SE_CD       <!-- 주소 구분 코드 -->
     , ZIP              <!-- 우편번호 -->
     , ROAD_NM_CD       <!-- 도로 명 코드 -->
     , UDGD_SE_CD       <!-- 지하 구분 코드 -->
     , BMNO             <!-- 건물본번 -->
     , BSNO             <!-- 건물부번 -->
     , BLDG_MNG_NO      <!-- 건물 관리 번호 -->
     , STDG_CD          <!-- 법정동 코드 -->
     , DONG_CD          <!-- 행정동 코드 -->
     , MTN_SE_CD        <!-- 산 구분 코드 -->
     , MNO              <!-- 본번 -->
     , SNO              <!-- 부번 -->
     , SPCL_DONG        <!-- 특수 동 -->
     , SPCL_HO          <!-- 특수 호 -->
     , SPCL_ADDR        <!-- 특수 주소 -->
     , ADDR             <!-- 주소 -->
     , DTL_ADDR         <!-- 상세 주소 -->
     , WHOL_ADDR        <!-- 전체 주소 -->
     , REG_DT           <!-- 등록 일시 -->
     , RGTR             <!-- 등록자 -->
     , MDFCN_DT         <!-- 수정 일시 -->
     , MDFR             <!-- 수정자 -->
     , VHRNO            <!-- 차량번호 -->
     , RTPYR_TELNO      <!-- 납부자 전화번호 -->
     , RTPYR_MBL_TELNO  <!-- 납부자 휴대 전화번호 -->
  FROM TB_PAYER</sql>

<select id="selectPayerList" parameterType="map" resultType="dataobject">/* 납부자 대장 목록 조회(payerMapper.selectPayerList) */
<include refid="utility.paging-prefix" />
<include refid="select" />
<where>AND RTPYR_ID IN (<foreach collection="rtpyrIds" item="rtpyrId" separator=",">#{rtpyrId}</foreach>)</where>
<include refid="utility.orderBy" />
<include refid="utility.paging-suffix" /></select>

<select id="selectPayers" parameterType="map" resultMap="payerRow">/* 납부자 대장 객체 가져오기(payerMapper.selectPayers) */
<include refid="select" />
<where>
<if test="rtpyrIds != null">AND RTPYR_ID IN (<foreach collection="rtpyrIds" item="rtpyrId" separator=",">#{rtpyrId}</foreach>)</if>
<if test="rtpyrIds == null">  AND VHRNO = #{vhrno}
   AND RTPYR_NO = #{rtpyrNo}</if></where>
<include refid="utility.orderBy" /></select>

<insert id="insertPayer" parameterType="cokr.xit.fims.payer.Payer">/* 납부자 대장 등록(payerMapper.insertPayer) */
<selectKey keyProperty="rtpyrId,sggCd" keyColumn="NEW_ID,SGG_CD" resultType="map" order="BEFORE">
SELECT CONCAT(THIS_YEAR, LPAD(IFNULL(SUBSTR(MAX(RTPYR_ID), 5) + 1, 1), 16, '0')) NEW_ID
     , IFNULL(#{sggCd}, '41480') SGG_CD
  FROM TB_PAYER A
     , (SELECT DATE_FORMAT(CURRENT_DATE, '%Y') THIS_YEAR) B
 WHERE RTPYR_ID LIKE CONCAT(THIS_YEAR, '%')</selectKey>
INSERT INTO TB_PAYER (
       RTPYR_ID         <!-- 납부자 ID -->
     , SGG_CD           <!-- 시군구 코드 -->
     , VHRNO            <!-- 차량번호 -->
     , RTPYR_INPT_SE_CD <!-- 납부자 입력 구분 코드 -->
     , RTPYR_SE_CD      <!-- 납부자 구분 코드 -->
     , RTPYR_NO         <!-- 납부자 번호 -->
     , RTPYR_NM         <!-- 납부자 명 -->
     , RTPYR_TELNO      <!-- 납부자 전화번호 -->
     , RTPYR_MBL_TELNO  <!-- 납부자 휴대 전화번호 -->
     , RTPYR_EML        <!-- 납부자 이메일 -->
     , RTPYR_BRDT       <!-- 납부자 생년월일 -->
     , RTPYR_STTS_CD    <!-- 납부자 상태 코드 -->
     , ADDR_SE_CD       <!-- 주소 구분 코드 -->
     , ZIP              <!-- 우편번호 -->
     , ROAD_NM_CD       <!-- 도로 명 코드 -->
     , UDGD_SE_CD       <!-- 지하 구분 코드 -->
     , BMNO             <!-- 건물본번 -->
     , BSNO             <!-- 건물부번 -->
     , BLDG_MNG_NO      <!-- 건물 관리 번호 -->
     , STDG_CD          <!-- 법정동 코드 -->
     , DONG_CD          <!-- 행정동 코드 -->
     , MTN_SE_CD        <!-- 산 구분 코드 -->
     , MNO              <!-- 본번 -->
     , SNO              <!-- 부번 -->
     , SPCL_DONG        <!-- 특수 동 -->
     , SPCL_HO          <!-- 특수 호 -->
     , SPCL_ADDR        <!-- 특수 주소 -->
     , ADDR             <!-- 주소 -->
     , DTL_ADDR         <!-- 상세 주소 -->
     , WHOL_ADDR        <!-- 전체 주소 -->
     , REG_DT           <!-- 등록 일시 -->
     , RGTR             <!-- 등록자 -->
     , MDFCN_DT         <!-- 수정 일시 -->
     , MDFR             <!-- 수정자 -->
)
SELECT #{rtpyrId}                <!-- 납부자 ID -->
     , #{sggCd}                  <!-- 시군구 코드 -->
     , #{vhrno}                  <!-- 차량번호 -->
     , #{rtpyrInptSeCd}          <!-- 납부자 입력 구분 코드 -->
     , #{rtpyrSeCd}              <!-- 납부자 구분 코드 -->
     , #{rtpyrNo}                <!-- 납부자 번호 -->
     , #{rtpyrNm}                <!-- 납부자 명 -->
     , #{rtpyrTelno}             <!-- 납부자 전화번호 -->
     , #{rtpyrMblTelno}          <!-- 납부자 휴대 전화번호 -->
     , #{rtpyrEml}               <!-- 납부자 이메일 -->
     , #{rtpyrBrdt}              <!-- 납부자 생년월일 -->
     , #{rtpyrSttsCd}            <!-- 납부자 상태 코드 -->
     , #{addrSeCd}               <!-- 주소 구분 코드 -->
     , #{zip}                    <!-- 우편번호 -->
     , #{roadNmCd}               <!-- 도로 명 코드 -->
     , #{udgdSeCd}               <!-- 지하 구분 코드 -->
     , #{bmno}                   <!-- 건물본번 -->
     , #{bsno}                   <!-- 건물부번 -->
     , #{bldgMngNo}              <!-- 건물 관리 번호 -->
     , #{stdgCd}                 <!-- 법정동 코드 -->
     , #{dongCd}                 <!-- 행정동 코드 -->
     , #{mtnSeCd}                <!-- 산 구분 코드 -->
     , #{mno}                    <!-- 본번 -->
     , #{sno}                    <!-- 부번 -->
     , #{spclDong}               <!-- 특수 동 -->
     , #{spclHo}                 <!-- 특수 호 -->
     , #{spclAddr}               <!-- 특수 주소 -->
     , #{addr}                   <!-- 주소 -->
     , #{dtlAddr}                <!-- 상세 주소 -->
     , #{wholAddr}               <!-- 전체 주소 -->
     , #{createdAt}              <!-- 등록 일시 -->
     , #{createdBy}              <!-- 등록자 -->
     , #{lastModified}           <!-- 수정 일시 -->
     , #{modifiedBy}             <!-- 수정자 -->
  FROM DUAL
 WHERE NOT EXISTS (
       SELECT *
         FROM TB_PAYER B
        WHERE VHRNO = #{vhrno}
          AND RTPYR_NO = #{rtpyrNo}
          AND SGG_CD = #{sggCd}
 )</insert>

<insert id="insertHistory" parameterType="map">/* 납부자 대장 등록(payerMapper.insertHistory) */
<selectKey keyProperty="historySeq" keyColumn="NEW_ID" resultType="int" order="BEFORE">
SELECT IFNULL(MAX(HSTRY_SN) + 1, 1) NEW_ID
  FROM TB_PAYER_HSTRY
WHERE RTPYR_ID = #{payer.rtpyrId}</selectKey>
INSERT INTO TB_PAYER_HSTRY (
       RTPYR_ID         <!-- 납부자 ID -->
     , HSTRY_SN         <!-- 이력 일련번호 -->
     , SGG_CD           <!-- 시군구 코드 -->
     , VHRNO            <!-- 차량번호 -->
     , RTPYR_INPT_SE_CD <!-- 납부자 입력 구분 코드 -->
     , RTPYR_SE_CD      <!-- 납부자 구분 코드 -->
     , RTPYR_NO         <!-- 납부자 번호 -->
     , RTPYR_NM         <!-- 납부자 명 -->
     , RTPYR_TELNO      <!-- 납부자 전화번호 -->
     , RTPYR_MBL_TELNO  <!-- 납부자 휴대 전화번호 -->
     , RTPYR_EML        <!-- 납부자 이메일 -->
     , RTPYR_BRDT       <!-- 납부자 생년월일 -->
     , RTPYR_STTS_CD    <!-- 납부자 상태 코드 -->
     , ADDR_SE_CD       <!-- 주소 구분 코드 -->
     , ZIP              <!-- 우편번호 -->
     , ROAD_NM_CD       <!-- 도로 명 코드 -->
     , UDGD_SE_CD       <!-- 지하 구분 코드 -->
     , BMNO             <!-- 건물본번 -->
     , BSNO             <!-- 건물부번 -->
     , BLDG_MNG_NO      <!-- 건물 관리 번호 -->
     , STDG_CD          <!-- 법정동 코드 -->
     , DONG_CD          <!-- 행정동 코드 -->
     , MTN_SE_CD        <!-- 산 구분 코드 -->
     , MNO              <!-- 본번 -->
     , SNO              <!-- 부번 -->
     , SPCL_DONG        <!-- 특수 동 -->
     , SPCL_HO          <!-- 특수 호 -->
     , SPCL_ADDR        <!-- 특수 주소 -->
     , ADDR             <!-- 주소 -->
     , DTL_ADDR         <!-- 상세 주소 -->
     , WHOL_ADDR        <!-- 전체 주소 -->
     , REG_DT           <!-- 등록 일시 -->
     , RGTR             <!-- 등록자 -->
) VALUES (
       #{payer.rtpyrId}                <!-- 납부자 ID -->
     , #{historySeq}                   <!-- 이력 일련번호 -->
     , '41480' <!-- #{payer.sggCd}                  시군구 코드 -->
     , #{payer.vhrno}                  <!-- 차량번호 -->
     , #{payer.rtpyrInptSeCd}          <!-- 납부자 입력 구분 코드 -->
     , #{payer.rtpyrSeCd}              <!-- 납부자 구분 코드 -->
     , #{payer.rtpyrNo}                <!-- 납부자 번호 -->
     , #{payer.rtpyrNm}                <!-- 납부자 명 -->
     , #{payer.rtpyrTelno}             <!-- 납부자 전화번호 -->
     , #{payer.rtpyrMblTelno}          <!-- 납부자 휴대 전화번호 -->
     , #{payer.rtpyrEml}               <!-- 납부자 이메일 -->
     , #{payer.rtpyrBrdt}              <!-- 납부자 생년월일 -->
     , #{payer.rtpyrSttsCd}            <!-- 납부자 상태 코드 -->
     , #{payer.addrSeCd}               <!-- 주소 구분 코드 -->
     , #{payer.zip}                    <!-- 우편번호 -->
     , #{payer.roadNmCd}               <!-- 도로 명 코드 -->
     , #{payer.udgdSeCd}               <!-- 지하 구분 코드 -->
     , #{payer.bmno}                   <!-- 건물본번 -->
     , #{payer.bsno}                   <!-- 건물부번 -->
     , #{payer.bldgMngNo}              <!-- 건물 관리 번호 -->
     , #{payer.stdgCd}                 <!-- 법정동 코드 -->
     , #{payer.dongCd}                 <!-- 행정동 코드 -->
     , #{payer.mtnSeCd}                <!-- 산 구분 코드 -->
     , #{payer.mno}                    <!-- 본번 -->
     , #{payer.sno}                    <!-- 부번 -->
     , #{payer.spclDong}               <!-- 특수 동 -->
     , #{payer.spclHo}                 <!-- 특수 호 -->
     , #{payer.spclAddr}               <!-- 특수 주소 -->
     , #{payer.addr}                   <!-- 주소 -->
     , #{payer.dtlAddr}                <!-- 상세 주소 -->
     , #{payer.wholAddr}               <!-- 전체 주소 -->
     , <include refid="utility.now" /> <!-- 등록 일시 -->
     , #{currentUser.id}               <!-- 등록자 -->
)</insert>

<update id="updatePayer" parameterType="cokr.xit.fims.payer.Payer">/* 납부자 대장 수정(payerMapper.updatePayer) */
UPDATE TB_PAYER SET
       SGG_CD = #{sggCd}                    <!-- 시군구 코드 -->
     , RTPYR_INPT_SE_CD = #{rtpyrInptSeCd}  <!-- 납부자 입력 구분 코드 -->
     , RTPYR_SE_CD = #{rtpyrSeCd}           <!-- 납부자 구분 코드 -->
     , RTPYR_NO = #{rtpyrNo}                <!-- 납부자 번호 -->
     , RTPYR_NM = #{rtpyrNm}                <!-- 납부자 명 -->
     , RTPYR_EML = #{rtpyrEml}              <!-- 납부자 이메일 -->
     , RTPYR_BRDT = #{rtpyrBrdt}            <!-- 납부자 생년월일 -->
     , RTPYR_STTS_CD = #{rtpyrSttsCd}       <!-- 납부자 상태 코드 -->
     , ADDR_SE_CD = #{addrSeCd}             <!-- 주소 구분 코드 -->
     , ZIP = #{zip}                         <!-- 우편번호 -->
     , ROAD_NM_CD = #{roadNmCd}             <!-- 도로 명 코드 -->
     , UDGD_SE_CD = #{udgdSeCd}             <!-- 지하 구분 코드 -->
     , BMNO = #{bmno}                       <!-- 건물본번 -->
     , BSNO = #{bsno}                       <!-- 건물부번 -->
     , BLDG_MNG_NO = #{bldgMngNo}           <!-- 건물 관리 번호 -->
     , STDG_CD = #{stdgCd}                  <!-- 법정동 코드 -->
     , DONG_CD = #{dongCd}                  <!-- 행정동 코드 -->
     , MTN_SE_CD = #{mtnSeCd}               <!-- 산 구분 코드 -->
     , MNO = #{mno}                         <!-- 본번 -->
     , SNO = #{sno}                         <!-- 부번 -->
     , SPCL_DONG = #{spclDong}              <!-- 특수 동 -->
     , SPCL_HO = #{spclHo}                  <!-- 특수 호 -->
     , SPCL_ADDR = #{spclAddr}              <!-- 특수 주소 -->
     , ADDR = #{addr}                       <!-- 주소 -->
     , DTL_ADDR = #{dtlAddr}                <!-- 상세 주소 -->
     , WHOL_ADDR = #{wholAddr}              <!-- 전체 주소 -->
     , VHRNO = #{vhrno}                     <!-- 차량번호 -->
     , RTPYR_TELNO = #{rtpyrTelno}          <!-- 납부자 전화번호 -->
     , RTPYR_MBL_TELNO = #{rtpyrMblTelno}   <!-- 납부자 휴대 전화번호 -->
     , MDFCN_DT = #{lastModified}           <!-- 수정 일시 -->
     , MDFR = #{modifiedBy}                 <!-- 수정자 -->
 WHERE RTPYR_ID = #{rtpyrId}</update>

<select id="selectAddrInfo" parameterType="map" resultType="dataobject">/* 우편번호, 건물관리번호 조회(payerMapper.selectAddrInfo) */
SELECT ZIP, BLDG_MNG_NO
  FROM TB_ROAD_ADDR
 WHERE ROAD_NM_CD = #{roadNmCd}
   AND UDGD_SE_CD = #{udgdSeCd}
   AND BMNO = #{bmno}
   AND BSNO = #{bsno}
</select>

<update id="deletePayer" parameterType="map">/* 납부자 대장 삭제(payerMapper.deletePayer) */
UPDATE TB_PAYER
   SET USE_YN = 'N'
     , MDFCN_DT =<include refid="utility.now" />
     , MDFR = #{currentUser.id}
 WHERE RTPYR_ID IN (<foreach collection="rtpyrIds" item="rtpyrId" separator=",">#{rtpyrId}</foreach>)</update>

</mapper>