<?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.rcvm.dao.RcvmtMapper">

<!-- 수납 대장 정보 매퍼
 ========== 변경 이력 ==========
 2023-08-31	JoJH 최초 작성
 ============================ -->

	<resultMap id="rcvmtRow" type="cokr.xit.fims.rcvm.Rcvmt">
		<result property="rcvmtId"			column="RCVMT_ID" />			<!-- 수납 ID -->
		<result property="sggCd"			column="SGG_CD" />				<!-- 시군구 코드 -->
		<result property="taskSeCd"			column="TASK_SE_CD" />			<!-- 업무 구분 코드 -->
		<result property="levyId"			column="LEVY_ID" />				<!-- 부과 ID -->
		<result property="rcvmtInptSeCd"	column="RCVMT_INPT_SE_CD" />	<!-- 수납 입력 구분 코드 -->
		<result property="deptCd"			column="DEPT_CD" />				<!-- 부서 코드 -->
		<result property="spclBizCd"		column="SPCL_BIZ_CD" />			<!-- 특별회계 사업 코드 -->
		<result property="fyr"				column="FYR" />					<!-- 회계 연도 -->
		<result property="acntgSeCd"		column="ACNTG_SE_CD" />			<!-- 회계 구분 코드 -->
		<result property="txitmCd"			column="TXITM_CD" />			<!-- 세목 코드 -->
		<result property="levyNo"			column="LEVY_NO" />				<!-- 부과 번호 -->
		<result property="ispySn"			column="ISPY_SN" />             <!-- 분납 일련번호 -->
		<result property="lastPcptax"		column="LAST_PCPTAX" />			<!-- 최종 본세 -->
		<result property="lastAdamt"		column="LAST_ADAMT" />			<!-- 최종 가산금 -->
		<result property="rcvmtSn"			column="RCVMT_SN" />			<!-- 수납 일련번호 -->
		<result property="rcvmtSeCd"		column="RCVMT_SE_CD" />			<!-- 수납 구분 코드 -->
		<result property="rcvmtYmd"			column="RCVMT_YMD" />			<!-- 수납 일자 -->
		<result property="acntgYmd"			column="ACNTG_YMD" />			<!-- 회계 일자 -->
		<result property="tsfYmd"			column="TSF_YMD" />				<!-- 이체 일자 -->
		<result property="rcvmtAmt"			column="RCVMT_AMT" />			<!-- 수납 금액 -->
		<result property="rcvmtPcptax"		column="RCVMT_PCPTAX" />		<!-- 수납 본세 -->
		<result property="rcvmtAdamt"		column="RCVMT_ADAMT" />			<!-- 수납 가산금 -->
		<result property="rcvmtInt"			column="RCVMT_INT" />			<!-- 수납 이자 -->
		<result property="rcvmtBankNm"		column="RCVMT_BANK_NM" />		<!-- 수납 은행 명 -->
		<result property="payMthdSeCd"		column="PAY_MTHD_SE_CD" />		<!-- 납부 방법 구분 코드 -->
        <result property="epayno"           column="EPAYNO" />              <!-- 전자납부번호 -->
		<result property="vrActno"			column="VR_ACTNO" />			<!-- 가상계좌번호 -->
		<result property="rcvmtRtrcnYn"		column="RCVMT_RTRCN_YN" />		<!-- 수납 취소 여부 -->
		<result property="rcvmtRtrcnDt"		column="RCVMT_RTRCN_DT" />		<!-- 수납 취소 일시 -->
		<result property="rcvmtRtrcnRsn"	column="RCVMT_RTRCN_RSN" />		<!-- 수납 취소 사유 -->
		<result property="rcvmtSttsCd"		column="RCVMT_STTS_CD" />		<!-- 수납 상태 코드 -->
		<result property="delYn"			column="DEL_YN" />				<!-- 삭제 여부 -->
		<result property="createdAt"		column="REG_DT" />				<!-- 등록 일시 -->
		<result property="createdBy"		column="RGTR" />				<!-- 등록자 -->
		<result property="lastModified"		column="MDFCN_DT" />			<!-- 수정 일시 -->
		<result property="modifiedBy"		column="MDFR" />				<!-- 수정자 -->
		<result property="removedAt"		column="DEL_DT" />				<!-- 삭제 일시 -->
		<result property="removedBy"		column="DLTR" />				<!-- 삭제자 -->
		<result property="delRsn"			column="DEL_RSN" />				<!-- 삭제 사유 -->
	</resultMap>

    <sql id="selectList">
        SELECT R.RCVMT_ID       <!-- 수납 ID -->
             , R.SGG_CD         <!-- 시군구 코드 -->
             , R.TASK_SE_CD     <!-- 업무 구분 코드 -->
             , (GET_CODE_NM('FIM054', R.TASK_SE_CD)) AS TASK_SE_NM  <!-- 업무 구분 명 -->
             , R.RCVMT_INPT_SE_CD <!-- 수납 입력 구분 코드 -->
             , (GET_CODE_NM('FIM044', R.RCVMT_INPT_SE_CD)) AS RCVMT_INPT_SE_NM  <!-- 수납 입력 구분 명 -->
             , R.DEPT_CD        <!-- 부서 코드 -->
             , R.SPCL_BIZ_CD    <!-- 특별회계 사업 코드 -->
             , R.FYR            <!-- 회계연도 -->
             , R.ACNTG_SE_CD    <!-- 회계 구분 코드 -->
             , (GET_CODE_NM('FIM074', R.ACNTG_SE_CD)) AS ACNTG_SE_NM    <!-- 회계 구분 명 -->
             , R.TXITM_CD       <!-- 세목 코드 -->
             , (GET_CODE_NM('FIM075', R.TXITM_CD)) AS TXITM_NM  <!-- 세목 코드 명 -->
             , R.LEVY_NO        <!-- 부과 번호 -->
             , R.ISPY_SN        <!-- 분납 일련번호 -->
             , R.LAST_PCPTAX    <!-- 최종 본세 -->
             , R.LAST_ADAMT     <!-- 최종 가산금 -->
             , R.RCVMT_SN       <!-- 수납 일련번호 -->
             , R.RCVMT_SE_CD    <!-- 수납 구분 코드 -->
             , (GET_CODE_NM('FIM041', R.RCVMT_SE_CD)) AS RCVMT_SE_NM    <!-- 수납 구분 명 -->
             , R.RCVMT_YMD      <!-- 수납 일자 -->
             , R.ACNTG_YMD      <!-- 회계 일자 -->
             , R.TSF_YMD        <!-- 이체 일자 -->
             , R.RCVMT_AMT      <!-- 수납 금액 -->
             , R.RCVMT_PCPTAX   <!-- 수납 본세 -->
             , R.RCVMT_ADAMT    <!-- 수납 가산금 -->
             , R.RCVMT_INT      <!-- 수납 이자 -->
             , R.RCVMT_BANK_NM  <!-- 수납 은행 명 -->
             , R.PAY_MTHD_SE_CD <!-- 납부 방법 구분 코드 -->
             , (GET_CODE_NM('FIM045', R.PAY_MTHD_SE_CD)) AS PAY_MTHD_SE_NM  <!-- 납부 방법 구분 명 -->
             , R.EPAYNO         <!-- 전자납부번호 -->
             , R.VR_ACTNO       <!-- 가상계좌번호 -->
             , R.RCVMT_RTRCN_YN <!-- 수납 취소 여부 -->
             , (GET_CODE_NM('CMN005', R.RCVMT_RTRCN_YN)) AS RCVMT_RTRCN_NM  <!-- 수납 취소 여부 명 -->
             , R.RCVMT_RTRCN_DT <!-- 수납 취소 일시 -->
             , R.RCVMT_RTRCN_RSN <!-- 수납 취소 사유 -->
             , R.RCVMT_STTS_CD  <!-- 수납 상태 코드 -->
             , (GET_CODE_NM('FIM020', R.RCVMT_STTS_CD)) AS RCVMT_STTS_NM    <!-- 수납 상태 명 -->
             , R.DEL_YN         <!-- 삭제 여부 -->
             , R.REG_DT         <!-- 등록 일시 -->
             , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = R.RGTR) AS RGTR_NM  <!-- 등록자 명 -->
             , R.MDFCN_DT       <!-- 수정 일시 -->
             , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = R.MDFR) AS MDFR_NM  <!-- 수정자 명 -->
             , L.LEVY_ID        <!-- 부과 ID -->
             , L.LEVY_YMD       <!-- 부과 일자 -->
             , L.FRST_DUDT_YMD  <!-- 최초 납기 일자 -->
             , L.DUDT_YMD       <!-- 납기 일자 -->
             , L.LAST_AMT       <!-- 최종 금액 -->
             , L.SZR_YMD        <!-- 압류 일자 -->
             , L.SZR_THING      <!-- 압류 물건 -->
             , L.RPM_SZR_VHRNO  <!-- 대체 압류 자동차등록번호 -->
             , L.SZR_RMV_YMD    <!-- 압류 해제 일자 -->
             , L.SZR_RMV_RSN    <!-- 압류 해제 사유 -->
             , C.CRDN_ID        <!-- 단속 ID -->
             , C.CRDN_YMD       <!-- 단속 일자 -->
             , (CONCAT(C.CRDN_YMD, C.CRDN_TM)) AS CRDN_YMD_TM   <!-- 단속 일시 -->
             , C.VHRNO          <!-- 차량번호 -->
             , C.CRDN_STDG_NM   <!-- 단속 법정동 명 -->
             , C.CRDN_ROAD_NM   <!-- 단속 도로 명 -->
             , C.CRDN_PLC       <!-- 단속 장소 -->
             , C.CRDN_STTS_CD   <!-- 단속 상태 코드 -->
             , (GET_CODE_NM('FIM010', C.CRDN_STTS_CD)) AS CRDN_STTS_NM  <!-- 단속 상태 명 -->
             , C.CRDN_STTS_CHG_DT <!-- 단속 상태 변경 일시 -->
             , P.RTPYR_ID       <!-- 납부자 ID -->
             , P.RTPYR_SE_CD    <!-- 납부자 구분 코드 -->
             , (GET_CODE_NM('FIM011', P.RTPYR_SE_CD)) AS RTPYR_SE_NM    <!-- 납부자 구분 명 -->
             , P.RTPYR_NO       <!-- 납부자 번호 -->
             , P.RTPYR_NM       <!-- 납부자 명 -->
             , PA.ADDR_SN       <!-- 주소 일련번호 -->
             , PA.ZIP           <!-- 우편번호 -->
             , PA.ADDR          <!-- 주소 -->
             , PA.DTL_ADDR      <!-- 상세 주소 -->
          FROM TB_RCVMT           R
    LEFT OUTER JOIN TB_LEVY       L  ON (R.LEVY_ID  = L.LEVY_ID)
    LEFT OUTER JOIN TB_CRDN       C  ON (L.CRDN_ID  = C.CRDN_ID)
    LEFT OUTER JOIN TB_PAYER      P  ON (C.RTPYR_ID = P.RTPYR_ID)
    LEFT OUTER JOIN TB_PAYER_ADDR PA ON (C.RTPYR_ID = PA.RTPYR_ID AND C.ADDR_SN = PA.ADDR_SN)
    </sql>

    <select id="selectRcvmtList" parameterType="map" resultType="dataobject">/* 수납 대장 목록 조회(rcvmtMapper.selectRcvmtList) */
        <include refid="utility.paging-prefix" />
        <include refid="selectList" />
        <where>
            <if test="schRcvmtYmdFrom != null">
           AND R.RCVMT_YMD <![CDATA[ >= ]]> #{schRcvmtYmdFrom}  <!-- 수납 일자 시작 -->
            </if>
            <if test="schRcvmtYmdTo != null">
           AND R.RCVMT_YMD <![CDATA[ <= ]]> #{schRcvmtYmdTo}    <!-- 수납 일자 종료 -->
            </if>
            <if test="schAcntgYmdFrom != null">
           AND R.ACNTG_YMD <![CDATA[ >= ]]> #{schAcntgYmdFrom}  <!-- 회계 일자 시작 -->
            </if>
            <if test="schAcntgYmdTo != null">
           AND R.ACNTG_YMD <![CDATA[ <= ]]> #{schAcntgYmdTo}    <!-- 회계 일자 종료 -->
            </if>
            <if test="schTsfYmdFrom != null">
           AND R.TSF_YMD <![CDATA[ >= ]]> #{schTsfYmdFrom}  <!-- 이체 일자 시작 -->
            </if>
            <if test="schTsfYmdTo != null">
           AND R.TSF_YMD <![CDATA[ <= ]]> #{schTsfYmdTo}    <!-- 이체 일자 종료 -->
            </if>
            <if test="schRcvmtSeCd != null">
           AND R.RCVMT_SE_CD = #{schRcvmtSeCd}  <!-- 수납 구분 코드 -->
            </if>
            <if test="schPayMthdSeCd != null">
           AND R.PAY_MTHD_SE_CD = #{schPayMthdSeCd} <!-- 납부 방법 구분 코드 -->
            </if>
            <if test="sggCd != null">
           AND R.SGG_CD     =  #{sggCd}     <!-- 시군구 코드 -->
            </if>
            <if test="taskSeCd != null">
           AND R.TASK_SE_CD =  #{taskSeCd}  <!-- 업무 구분 코드 -->
            </if>
            <if test="delYn != null">
           AND R.DEL_YN     =  #{delYn}     <!-- 삭제 여부 -->
            </if>
            <if test="schCrdnYmdFrom != null">
           AND C.CRDN_YMD <![CDATA[ >= ]]> #{schCrdnYmdFrom}    <!-- 단속 일자 시작 -->
            </if>
            <if test="schCrdnYmdTo != null">
           AND C.CRDN_YMD <![CDATA[ <= ]]> #{schCrdnYmdTo}      <!-- 단속 일자 종료 -->
            </if>
            <if test="schVhrno != null">
           AND C.VHRNO LIKE CONCAT('%', #{schVhrno}, '%')      <!-- 차량번호 -->
            </if>
            <if test="schRtpyrNo != null">
           AND P.RTPYR_NO   =  #{schRtpyrNo}    <!-- 납부자 번호 -->
            </if>
            <if test="schRtpyrNm != null">
           AND P.RTPYR_NM   =  #{schRtpyrNm}    <!-- 납부자 명 -->
            </if>
            <choose>
                <when test="schRegDateOpt == 'regDt'">
                    <if test="schRegDateFrom != null">
           AND R.REG_DT <![CDATA[>=]]> CONCAT(#{schRegDateFrom},'000000')   <!-- 등록 일자 시작 -->
                    </if>
                    <if test="schRegDateTo != null">
           AND R.REG_DT <![CDATA[<=]]> CONCAT(#{schRegDateTo},'235959')     <!-- 등록 일자 종료 -->
                    </if>
                </when>
                <when test="schRegDateOpt == 'mdfcnDt'">
                    <if test="schRegDateFrom != null">
           AND R.MDFCN_DT <![CDATA[>=]]> CONCAT(#{schRegDateFrom},'000000') <!-- 수정 일자 시작 -->
                    </if>
                    <if test="schRegDateTo != null">
           AND R.MDFCN_DT <![CDATA[<=]]> CONCAT(#{schRegDateTo},'235959')   <!-- 수정 일자 종료 -->
                    </if>
                </when>
                <otherwise>
                </otherwise>
            </choose>
            <choose>
                <when test="schRgtrOpt == 'rgtr'">
                    <if test="schRgtrCd != null">
           AND R.RGTR       =  #{schRgtrCd}     <!-- 등록자 코드 -->
                    </if>
                </when>
                <when test="schRgtrOpt == 'mdfr'">
                    <if test="schRgtrCd != null">
           AND R.MDFR       =  #{schRgtrCd}     <!-- 수정자 코드 -->
                    </if>
                </when>
                <otherwise>
                </otherwise>
            </choose>
            <if test="@org.egovframe.rte.fdl.string.EgovStringUtil@isNotEmpty(by) and @org.egovframe.rte.fdl.string.EgovStringUtil@isNotEmpty(term)">
                <choose>
                    <when test="mainOption == 'codeValue' or mainOption == 'match' or mainOption == 'ymd'">
                        <include refid="dynamicSearch.start" />
                        <choose>
                            <when test="by == 'rcvmtInptSeCd'"> R.RCVMT_INPT_SE_CD </when>
                            <when test="by == 'rcvmtRtrcnYn'"> R.RCVMT_RTRCN_YN </when>
                            <when test="by == 'fyr'"> R.FYR </when>
                            <when test="by == 'acntgSeCd'"> R.ACNTG_SE_CD </when>
                            <when test="by == 'txitmCd'"> R.TXITM_CD </when>
                            <when test="by == 'levyNo'"> R.LEVY_NO</when>
                            <when test="by == 'ispySn'"> R.ISPY_SN</when>
                            <when test="by == 'lastPcptax'"> R.LAST_PCPTAX </when>
                            <when test="by == 'lastAdamt'"> R.LAST_ADAMT </when>
                            <when test="by == 'rcvmtSn'"> R.RCVMT_SN </when>
                            <when test="by == 'pstmrkYmd'"> R.PSTMRK_YMD </when>
                            <when test="by == 'acntgYmd'"> R.ACNTG_YMD </when>
                            <when test="by == 'rcvmtYmd'"> R.RCVMT_YMD </when>
                            <when test="by == 'rcvmtAmt'"> R.RCVMT_AMT </when>
                            <when test="by == 'rcvmtPcptax'"> R.RCVMT_PCPTAX </when>
                            <when test="by == 'rcvmtAdamt'"> R.RCVMT_ADAMT </when>
                            <when test="by == 'rcvmtInt'"> R.RCVMT_INT </when>
                            <when test="by == 'rcvmtBankNm'"> R.RCVMT_BANK_NM </when>
                            <when test="by == 'payMthdSeCd'"> R.PAY_MTHD_SE_CD </when>
                            <when test="by == 'rcvmtSeCd'"> R.RCVMT_SE_CD </when>
                            <when test="by == 'rcvmtSttsCd'"> R.RCVMT_STTS_CD </when>
                            <when test="by == 'levyYmd'"> L.LEVY_YMD </when>
                            <when test="by == 'frstDudtYmd'"> L.FRST_DUDT_YMD </when>
                            <when test="by == 'dudtYmd'"> L.DUDT_YMD </when>
                            <when test="by == 'szrYmd'"> L.SZR_YMD </when>
                            <when test="by == 'szrThing'"> L.SZR_THING </when>
                            <when test="by == 'rpmSzrVhrno'"> L.RPM_SZR_VHRNO </when>
                            <when test="by == 'szrRmvYmd'"> L.SZR_RMV_YMD </when>
                            <when test="by == 'crdnYmd'"> C.CRDN_YMD </when>
                            <when test="by == 'vhrno'"> C.VHRNO </when>
                            <when test="by == 'crdnStdgNm'"> C.CRDN_STDG_NM </when>
                            <when test="by == 'crdnPlc'"> C.CRDN_PLC </when>
                            <when test="by == 'crdnSttsCd'"> C.CRDN_STTS_CD </when>
                            <when test="by == 'rtpyrSeCd'"> P.RTPYR_SE_CD </when>
                            <when test="by == 'rtpyrNo'"> P.RTPYR_NO </when>
                            <when test="by == 'rtpyrNm'"> P.RTPYR_NM </when>
                            <when test="by == 'zip'"> PA.ZIP </when>
                            <when test="by == 'addr'"> PA.ADDR </when>
                            <when test="by == 'dtlAddr'"> PA.DTL_ADDR </when>
                        </choose>
                        <include refid="dynamicSearch.center" />#{term}<include refid="dynamicSearch.end" />
                    </when>
                    <otherwise>
                    </otherwise>
                </choose>
            </if>
        </where>
        <include refid="utility.orderBy" />
        <include refid="utility.paging-suffix" />
    </select>

    <sql id="select">
        SELECT R.RCVMT_ID       <!-- 수납 ID -->
             , R.SGG_CD         <!-- 시군구 코드 -->
             , R.TASK_SE_CD     <!-- 업무 구분 코드 -->
             , (GET_CODE_NM('FIM054', R.TASK_SE_CD)) AS TASK_SE_NM  <!-- 업무 구분 명 -->
             , R.RCVMT_INPT_SE_CD <!-- 수납 입력 구분 코드 -->
             , (GET_CODE_NM('FIM044', R.RCVMT_INPT_SE_CD)) AS RCVMT_INPT_SE_NM  <!-- 수납 입력 구분 명 -->
             , R.DEPT_CD        <!-- 부서 코드 -->
             , R.SPCL_BIZ_CD    <!-- 특별회계 사업 코드 -->
             , R.FYR            <!-- 회계연도 -->
             , R.ACNTG_SE_CD    <!-- 회계 구분 코드 -->
             , (GET_CODE_NM('FIM074', R.ACNTG_SE_CD)) AS ACNTG_SE_NM    <!-- 회계 구분 명 -->
             , R.TXITM_CD       <!-- 세목 코드 -->
             , (GET_CODE_NM('FIM075', R.TXITM_CD)) AS TXITM_NM  <!-- 세목 코드 명 -->
             , R.LEVY_NO        <!-- 부과 번호 -->
             , R.ISPY_SN        <!-- 분납 일련번호 -->
             , R.LAST_PCPTAX    <!-- 최종 본세 -->
             , R.LAST_ADAMT     <!-- 최종 가산금 -->
             , R.RCVMT_SN       <!-- 수납 일련번호 -->
             , R.RCVMT_SE_CD    <!-- 수납 구분 코드 -->
             , (GET_CODE_NM('FIM041', R.RCVMT_SE_CD)) AS RCVMT_SE_NM    <!-- 수납 구분 명 -->
             , R.RCVMT_YMD      <!-- 수납 일자 -->
             , R.ACNTG_YMD      <!-- 회계 일자 -->
             , R.TSF_YMD        <!-- 이체 일자 -->
             , R.RCVMT_AMT      <!-- 수납 금액 -->
             , R.RCVMT_PCPTAX   <!-- 수납 본세 -->
             , R.RCVMT_ADAMT    <!-- 수납 가산금 -->
             , R.RCVMT_INT      <!-- 수납 이자 -->
             , R.RCVMT_BANK_NM  <!-- 수납 은행 명 -->
             , R.PAY_MTHD_SE_CD <!-- 납부 방법 구분 코드 -->
             , (GET_CODE_NM('FIM045', R.PAY_MTHD_SE_CD)) AS PAY_MTHD_SE_NM  <!-- 납부 방법 구분 명 -->
             , R.EPAYNO         <!-- 전자납부번호 -->
             , R.VR_ACTNO       <!-- 가상계좌번호 -->
             , R.RCVMT_RTRCN_YN <!-- 수납 취소 여부 -->
             , R.RCVMT_RTRCN_DT <!-- 수납 취소 일시 -->
             , R.RCVMT_RTRCN_RSN <!-- 수납 취소 사유 -->
             , (GET_CODE_NM('CMN005', R.RCVMT_RTRCN_YN)) AS RCVMT_RTRCN_NM  <!-- 수납 취소 여부 명 -->
             , R.RCVMT_STTS_CD  <!-- 수납 상태 코드 -->
             , (GET_CODE_NM('FIM020', R.RCVMT_STTS_CD)) AS RCVMT_STTS_NM    <!-- 수납 상태 명 -->
             , R.DEL_YN         <!-- 삭제 여부 -->
             , R.REG_DT         <!-- 등록 일시 -->
             , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = R.RGTR) AS RGTR_NM  <!-- 등록자 명 -->
             , R.MDFCN_DT       <!-- 수정 일시 -->
             , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = R.MDFR) AS MDFR_NM  <!-- 수정자 명 -->
             , L.LEVY_ID        <!-- 부과 ID -->
             , L.LEVY_PCPTAX    AS L_LEVY_PCPTAX    <!-- 부과 본세 -->
             , L.LEVY_ADAMT     AS L_LEVY_ADAMT     <!-- 부과 가산금 -->
             , L.RCVMT_PCPTAX   AS L_RCVMT_PCPTAX   <!-- 수납 본세 -->
             , L.RCVMT_ADAMT    AS L_RCVMT_ADAMT    <!-- 수납 가산금 -->
             , L.RDAMT_PCPTAX   AS L_RDAMT_PCPTAX   <!-- 감액 가산금 -->
             , L.RDAMT_ADAMT    AS L_RDAMT_ADAMT    <!-- 감액 가산금 -->
             , L.LAST_AMT       <!-- 최종 금액 -->
             , C.CRDN_ID        <!-- 단속 ID -->
             , C.CRDN_STTS_CD   <!-- 단속 상태 코드 -->
             , C.CRDN_STTS_CHG_DT   <!-- 단속 상태 변경 일시 -->
          FROM TB_RCVMT     R
    LEFT OUTER JOIN TB_LEVY L   ON (R.LEVY_ID = L.LEVY_ID)
    LEFT OUTER JOIN TB_CRDN C   ON (L.CRDN_ID = C.CRDN_ID)
    </sql>

    <select id="selectRcvmts" parameterType="map" resultType="dataobject">/* 수납 대장 객체 가져오기(rcvmtMapper.selectRcvmts) */
        <include refid="select" />
        <where>
            <if test="rcvmtIds != null">
           AND R.RCVMT_ID  IN (             <!-- 수납 Ids -->
                <foreach collection="rcvmtIds" item="rcvmtId" separator=","> #{rcvmtId} </foreach>
               )
            </if>
            <if test="rcvmtId != null">
           AND R.RCVMT_ID   =  #{rcvmtId}   <!-- 수납 ID -->
            </if>
            <if test="levyId != null">
           AND L.LEVY_ID    =  #{levyId}    <!-- 부과 ID -->
            </if>
            <if test="crdnId != null">
           AND C.CRDN_ID    =  #{crdnId}    <!-- 단속 ID -->
            </if>
            <if test="delYn != null">
           AND R.DEL_YN     =  #{delYn}     <!-- 삭제 여부 -->
            </if>
        </where>
        <include refid="utility.orderBy" />
    </select>

    <update id="updateRcvmtRtrcn" parameterType="cokr.xit.fims.rcvm.Rcvmt">/* 수납 대장 수납취소 정보 수정(rcvmtMapper.updateRcvmtRtrcn) */
        UPDATE TB_RCVMT
           SET RCVMT_RTRCN_YN   = #{rcvmtRtrcnYn}   <!-- 수납 취소 여부 -->
             , RCVMT_RTRCN_DT   = <include refid="utility.now" /> <!-- 수납 취소 일시 -->
             , RCVMT_RTRCN_RSN  = #{rcvmtRtrcnRsn}  <!-- 수납 취소 사유 -->
             , MDFCN_DT         = #{lastModified}   <!-- 수정 일시 -->
             , MDFR             = #{modifiedBy}     <!-- 수정자 -->
         WHERE RCVMT_ID         = #{rcvmtId}        <!-- 수납 ID -->
           AND DEL_YN           = 'N'               <!-- 삭제 여부 -->
    </update>

    <insert id="insertRcvmt" parameterType="cokr.xit.fims.rcvm.Rcvmt">/* 수납 대장 등록(rcvmtMapper.insertRcvmt) */
        <selectKey resultType="map" keyProperty="rcvmtId,rcvmtSn" keyColumn="NEW_ID,NEW_RCVMT_SN" order="BEFORE">
            SELECT CONCAT(#{sggCd}, DATE_FORMAT(CURRENT_DATE, '%Y'), LPAD(CAST(IFNULL(MAX(SUBSTRING(RCVMT_ID, 10)) + 1, 1) AS INT), 11, '0')) AS NEW_ID
                 , (SELECT LPAD(CAST(IFNULL(MAX(RCVMT_SN) + 1, 1) AS INT), 2, '0') FROM TB_RCVMT WHERE LEVY_ID = #{levyId}) AS NEW_RCVMT_SN
              FROM TB_RCVMT
             WHERE RCVMT_ID LIKE CONCAT(#{sggCd}, DATE_FORMAT(CURRENT_DATE, '%Y'), '%')
        </selectKey>
        INSERT
          INTO TB_RCVMT (
               RCVMT_ID         <!-- 수납 ID -->
             , SGG_CD           <!-- 시군구 코드 -->
             , TASK_SE_CD       <!-- 업무 구분 코드 -->
             , LEVY_ID          <!-- 부과 ID -->
             , RCVMT_INPT_SE_CD <!-- 수납 입력 구분 코드 -->
             , DEPT_CD          <!-- 부서 코드 -->
             , SPCL_BIZ_CD      <!-- 특별회계 사업 코드 -->
             , FYR              <!-- 회계연도 -->
             , ACNTG_SE_CD      <!-- 회계 구분 코드 -->
             , TXITM_CD         <!-- 세목 코드 -->
             , LEVY_NO          <!-- 부과 번호 -->
             , ISPY_SN          <!-- 분납 일련번호 -->
             , LAST_PCPTAX      <!-- 최종 본세 -->
             , LAST_ADAMT       <!-- 최종 가산금 -->
             , RCVMT_SN         <!-- 수납 일련번호 -->
             , RCVMT_SE_CD      <!-- 수납 구분 코드 -->
             , RCVMT_YMD        <!-- 수납 일자 -->
             , ACNTG_YMD        <!-- 회계 일자 -->
             , TSF_YMD          <!-- 이체 일자 -->
             , RCVMT_AMT        <!-- 수납 금액 -->
             , RCVMT_PCPTAX     <!-- 수납 본세 -->
             , RCVMT_ADAMT      <!-- 수납 가산금 -->
             , RCVMT_INT        <!-- 수납 이자 -->
             , RCVMT_BANK_NM    <!-- 수납 은행 명 -->
             , PAY_MTHD_SE_CD   <!-- 납부 방법 구분 코드 -->
             , EPAYNO           <!-- 전자납부번호 -->
             , VR_ACTNO         <!-- 가상계좌번호 -->
             , RCVMT_RTRCN_YN   <!-- 수납 취소 여부 -->
             , RCVMT_RTRCN_DT   <!-- 수납 취소 일시 -->
             , RCVMT_RTRCN_RSN  <!-- 수납 취소 사유 -->
             , RCVMT_STTS_CD    <!-- 수납 상태 코드 -->
             , DEL_YN           <!-- 삭제 여부 -->
             , REG_DT           <!-- 등록 일시 -->
             , RGTR             <!-- 등록자 -->
             , MDFCN_DT         <!-- 수정 일시 -->
             , MDFR             <!-- 수정자 -->
        )
        VALUES (
               #{rcvmtId}       <!-- 수납 ID -->
             , #{sggCd}         <!-- 시군구 코드 -->
             , #{taskSeCd}      <!-- 업무 구분 코드 -->
             , #{levyId}        <!-- 부과 ID -->
             , #{rcvmtInptSeCd} <!-- 수납 입력 구분 코드 -->
             , #{deptCd}        <!-- 부서 코드 -->
             , #{spclBizCd}     <!-- 특별회계 사업 코드 -->
             , #{fyr}           <!-- 회계 연도 -->
             , #{acntgSeCd}     <!-- 회계 구분 코드 -->
             , #{txitmCd}       <!-- 세목 코드 -->
             , #{levyNo}        <!-- 부과 번호 -->
             , #{ispySn}        <!-- 분납 일련번호 -->
             , #{lastPcptax}    <!-- 최종 본세 -->
             , #{lastAdamt}     <!-- 최종 가산금 -->
             , #{rcvmtSn}       <!-- 수납 일련번호 -->
             , #{rcvmtSeCd}     <!-- 수납 구분 코드 -->
             , #{rcvmtYmd}      <!-- 수납 일자 -->
             , #{acntgYmd}      <!-- 회계 일자 -->
             , #{tsfYmd}        <!-- 이체 일자 -->
             , #{rcvmtAmt}      <!-- 수납 금액 -->
             , #{rcvmtPcptax}   <!-- 수납 본세 -->
             , #{rcvmtAdamt}    <!-- 수납 가산금 -->
             , #{rcvmtInt}      <!-- 수납 이자 -->
             , #{rcvmtBankNm}   <!-- 수납 은행 명 -->
             , #{payMthdSeCd}   <!-- 납부 방법 구분 코드 -->
             , #{epayno}        <!-- 전자납부번호 -->
             , #{vrActno}       <!-- 가상계좌번호 -->
             , #{rcvmtRtrcnYn}  <!-- 수납 취소 여부 -->
             , #{rcvmtRtrcnDt}  <!-- 수납 취소 일시 -->
             , #{rcvmtRtrcnRsn} <!-- 수납 취소 사유 -->
             , #{rcvmtSttsCd}   <!-- 수납 상태 코드 -->
             , 'N'              <!-- 삭제 여부 -->
             , #{createdAt}     <!-- 등록 일시 -->
             , #{createdBy}     <!-- 등록자 -->
             , #{lastModified}  <!-- 수정 일시 -->
             , #{modifiedBy}    <!-- 수정자 -->
        )
    </insert>

    <update id="updateRcvmt" parameterType="cokr.xit.fims.rcvm.Rcvmt">/* 수납 대장 수정(rcvmtMapper.updateRcvmt) */
        UPDATE TB_RCVMT
           SET LAST_PCPTAX      = #{lastPcptax}     <!-- 최종 본세 -->
             , LAST_ADAMT       = #{lastAdamt}      <!-- 최종 가산금 -->
             , RCVMT_SN         = #{rcvmtSn}        <!-- 수납 일련번호 -->
             , RCVMT_SE_CD      = #{rcvmtSeCd}      <!-- 수납 구분 코드 -->
             , RCVMT_YMD        = #{rcvmtYmd}       <!-- 수납 일자 -->
             , ACNTG_YMD        = #{acntgYmd}       <!-- 회계 일자 -->
             , TSF_YMD          = #{tsfYmd}         <!-- 이체 일자 -->
             , RCVMT_AMT        = #{rcvmtAmt}       <!-- 수납 금액 -->
             , RCVMT_PCPTAX     = #{rcvmtPcptax}    <!-- 수납 본세 -->
             , RCVMT_ADAMT      = #{rcvmtAdamt}     <!-- 수납 가산금 -->
             , RCVMT_INT        = #{rcvmtInt}       <!-- 수납 이자 -->
             , RCVMT_BANK_NM    = #{rcvmtBankNm}    <!-- 수납 은행 명 -->
             , PAY_MTHD_SE_CD   = #{payMthdSeCd}    <!-- 납부 방법 구분 코드 -->
             , EPAYNO           = #{epayno}         <!-- 전자납부번호 -->
             , VR_ACTNO         = #{vrActno}        <!-- 가상계좌번호 -->
             , RCVMT_RTRCN_YN   = #{rcvmtRtrcnYn}   <!-- 수납 취소 여부 -->
             , RCVMT_RTRCN_DT   = #{rcvmtRtrcnDt}   <!-- 수납 취소 일시 -->
             , RCVMT_RTRCN_RSN  = #{rcvmtRtrcnRsn}  <!-- 수납 취소 사유 -->
             , RCVMT_STTS_CD    = #{rcvmtSttsCd}    <!-- 수납 상태 코드 -->
             , MDFCN_DT         = #{lastModified}   <!-- 수정 일시 -->
             , MDFR             = #{modifiedBy}     <!-- 수정자 -->
         WHERE RCVMT_ID         = #{rcvmtId}        <!-- 수납 ID -->
           AND DEL_YN           = 'N'               <!-- 삭제 여부 -->
    </update>

    <update id="deleteRcvmt" parameterType="cokr.xit.fims.rcvm.Rcvmt">/* 수납 대장 삭제(rcvmtMapper.deleteRcvmt) */
        UPDATE TB_RCVMT
           SET DEL_YN   = 'Y'   <!-- 삭제 여부 -->
             , DEL_DT   = #{lastModified}   <!-- 삭제 일시 -->
             , DLTR     = #{modifiedBy}     <!-- 삭제자 -->
             , DEL_RSN  = #{delRsn}         <!-- 삭제 사유 -->
         WHERE RCVMT_ID = #{rcvmtId}        <!-- 수납 ID -->
           AND DEL_YN   = 'N'
    </update>

    <select id="selectLevyInfo" parameterType="map" resultType="dataobject">/* 부과 대장 객체 가져오기(rcvmtMapper.selectLevyInfo) */
        SELECT L.LEVY_ID        <!-- 부과 ID -->
             , L.DEPT_CD        <!-- 부서 코드 -->
             , L.SPCL_BIZ_CD    <!-- 특별회계 사업 코드 -->
             , L.FYR            <!-- 회계연도 -->
             , L.ACNTG_SE_CD    <!-- 회계 구분 코드 -->
             , (GET_CODE_NM('FIM074', L.ACNTG_SE_CD)) AS ACNTG_SE_NM    <!-- 회계 구분 명 -->
             , L.TXITM_CD       <!-- 세목 코드 -->
             , (GET_CODE_NM('FIM075', L.TXITM_CD)) AS TXITM_NM  <!-- 세목 코드 명 -->
             , L.OPER_ITEM_CD   <!-- 운영 항목 코드 -->
             , (GET_CODE_NM('FIM075', L.OPER_ITEM_CD)) AS OPER_ITEM_NM  <!-- 운영 항목 코드 명 -->
             , L.LEVY_NO        <!-- 부과 번호 -->
             , L.ISPY_SN        <!-- 분납 일련번호 -->
             , L.FFNLG_AMT      <!-- 과태료 금액 -->
             , L.LEVY_PCPTAX    <!-- 부과 본세 -->
             , L.LEVY_ADAMT     <!-- 부과 가산금 -->
             , L.ISPY_INT       <!-- 분납 이자 -->
             , L.RCVMT_PCPTAX   <!-- 수납 본세 -->
             , L.RCVMT_ADAMT    <!-- 수납 가산금 -->
             , L.RDAMT_PCPTAX   <!-- 감액 본세 -->
             , L.RDAMT_ADAMT    <!-- 감액 가산금 -->
             , L.LAST_AMT       <!-- 최종 금액 -->
             , L.LEVY_PCPTAX - L.RCVMT_PCPTAX - L.RDAMT_PCPTAX  AS LAST_PCPTAX  <!-- 최종 본세 -->
             , L.LEVY_ADAMT  - L.RCVMT_ADAMT  - L.RDAMT_ADAMT   AS LAST_ADAMT   <!-- 가산금 -->
             , C.CRDN_ID        <!-- 단속 ID -->
             , C.SGG_CD         <!-- 시군구 코드 -->
             , C.TASK_SE_CD     <!-- 업무 구분 코드 -->
             , (CONCAT(C.CRDN_YMD, C.CRDN_TM)) AS CRDN_YMD_TM   <!-- 단속 일시 -->
             , C.VHRNO          <!-- 차량번호 -->
             , C.CRDN_PLC       <!-- 단속 장소 -->
             , C.CRDN_STTS_CD   <!-- 단속 상태 코드 -->
             , (GET_CODE_NM('FIM010', C.CRDN_STTS_CD)) AS CRDN_STTS_NM  <!-- 단속 상태 명 -->
             , C.CRDN_STTS_CHG_DT   <!-- 단속 상태 변경 일시 -->
          FROM TB_LEVY      L
         INNER JOIN TB_CRDN C ON (L.CRDN_ID = C.CRDN_ID)
        <choose>
            <when test="levyId != null">
         WHERE L.LEVY_ID    = #{levyId}     <!-- 부과 ID -->
            </when>
            <when test="crdnId != null">
         WHERE L.CRDN_ID    = #{crdnId}     <!-- 단속 ID -->
            </when>
            <otherwise>
         WHERE DEPT_CD      = #{deptCd}     <!-- 부서 코드 -->
           AND SPCL_BIZ_CD  = #{spclBizCd}  <!-- 특별회계 사업 코드 -->
           AND FYR          = #{fyr}        <!-- 회계연도 -->
           AND ACNTG_SE_CD  = #{acntgSeCd}  <!-- 회계 구분 코드 -->
           AND TXITM_CD     = #{txitmCd}    <!-- 세목 코드 -->
           AND LEVY_NO      = #{levyNo}     <!-- 부과 번호 -->
           AND ISPY_SN      = #{ispySn}     <!-- 분납 일련번호 -->
                <if test="operItemCd != null">
           AND OPER_ITEM_CD = #{operItemCd} <!-- 운영 항목 코드 -->
                </if>
            </otherwise>
        </choose>
           AND L.DEL_YN     = 'N'
        <include refid="utility.orderBy" />
    </select>

</mapper>
