<?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.excl.dao.LevyExclMapper">

<!-- 부과제외 대장 정보 매퍼
 ========== 변경 이력 ==========
 2023-06-23	JoJH 최초 작성
 ============================ -->

	<resultMap id="levyExclRow" type="cokr.xit.fims.excl.LevyExcl"> <!-- 부과제외 대장 -->
		<result property="levyExclId"       column="LEVY_EXCL_ID" />        <!-- 부과 제외 ID -->
		<result property="crdnId"           column="CRDN_ID" />             <!-- 단속 ID -->
		<result property="rdamtId"          column="RDAMT_ID" />            <!-- 감액 ID -->
		<result property="levyExclYmd"      column="LEVY_EXCL_YMD" />       <!-- 부과제외 일자 -->
		<result property="levyExclSeCd"     column="LEVY_EXCL_SE_CD" />     <!-- 부과제외 구분 코드 -->
		<result property="levyExclSeNm"     column="LEVY_EXCL_SE_NM" />     <!-- 부과제외 구분 명 -->
		<result property="levyExclRsnCd"    column="LEVY_EXCL_RSN_CD" />    <!-- 부과제외 사유 코드 -->
		<result property="levyExclRsnNm"    column="LEVY_EXCL_RSN_NM" />    <!-- 부과제외 사유 명 -->
		<result property="etcCn"            column="ETC_CN" />              <!-- 기타 내용 -->
		<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>

	<select id="selectLevyExclList" parameterType="map" resultType="dataobject">/* 부과제외 대장 목록 조회(levyExclMapper.selectLevyExclList) */
        <include refid="utility.paging-prefix" />
        SELECT LE.LEVY_EXCL_ID      <!-- 부과제외 ID -->
             , LE.CRDN_ID           <!-- 단속 ID -->
             , LE.RDAMT_ID          <!-- 감액 ID -->
             , LE.LEVY_EXCL_YMD     <!-- 부과제외 일자 -->
             , LE.LEVY_EXCL_SE_CD   <!-- 부과 제외 구분 코드 -->
             , (GET_CODE_NM('FIM021', LE.LEVY_EXCL_SE_CD))  AS LEVY_EXCL_SE_NM  <!-- 부과 제외 구분 명 -->
             , LE.LEVY_EXCL_RSN_CD  <!-- 부과 제외 사유 코드 -->
             , (GET_CODE_NM('FIM022', LE.LEVY_EXCL_RSN_CD)) AS LEVY_EXCL_RSN_NM <!-- 부과 제외 사유 명 -->
             , LE.ETC_CN            <!-- 기타 내용 -->
             , LE.DEL_YN            <!-- 삭제 여부 -->
             , LE.REG_DT            <!-- 등록 일시 -->
             , LE.RGTR              <!-- 등록자 -->
             , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = LE.RGTR)    AS RGTR_NM  <!-- 등록자 명 -->
             , LE.MDFCN_DT          <!-- 수정 일시 -->
             , LE.MDFR              <!-- 수정자 -->
             , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = LE.MDFR)    AS MDFR_NM  <!-- 수정자 명 -->
             , C.SGG_CD             <!-- 시군구 코드 -->
             , C.TASK_SE_CD         <!-- 업무 구분 코드 -->
             , (GET_CODE_NM('FIM054', C.TASK_SE_CD))    AS TASK_SE_NM   <!-- 업무 구분 명 -->
             , C.CVLCPT_LINK_ID     <!-- 민원 연계 ID -->
             , C.RTPYR_ID           <!-- 납부자 ID -->
             , C.ADDR_SN            <!-- 주소 일련번호 -->
             , 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.VLTN_ID            <!-- 위반 ID -->
             , C.FFNLG_CRDN_AMT     <!-- 과태료 단속 금액 -->
             , C.CRDN_STTS_CD       <!-- 단속 상태 코드 -->
             , (GET_CODE_NM('FIM010', C.CRDN_STTS_CD))      AS CRDN_STTS_NM     <!-- 단속 상태 명 -->
             , (GET_CODE_NM('FIM002', CA.CRDN_SE_CD))       AS CRDN_SE_NM       <!-- 단속 구분 명 -->
             , (GET_CODE_NM('FIM007', CA.CRDN_SPAREA_CD))   AS CRDN_SPAREA_NM   <!-- 단속 특별구역 명 -->
             , (GET_CODE_NM('LVS005', CA.USE_FUEL_CD))      AS USE_FUEL_NM      <!-- 사용 연료 명 -->
             , (GET_CODE_NM('FIM034', CA.PRK_PSBLTY_RSLT_CD))   AS PRK_PSBLTY_RSLT_NM <!-- 주차 가능 결과 명 -->
             , V.VLTN_CD            <!-- 위반 코드 -->
             , V.VLTN_ARTCL         <!-- 위반 항목 -->
             , P.RTPYR_SE_CD        <!-- 납부자 구분 코드 -->
             , (GET_CODE_NM('FIM011', P.RTPYR_SE_CD))   AS RTPYR_SE_NM  <!-- 납부자 구분 명 -->
             , P.RTPYR_NO           <!-- 납부자 번호 -->
             , P.RTPYR_NM           <!-- 납부자 명 -->
             , PA.ZIP               <!-- 우편번호 -->
             , PA.ADDR              <!-- 주소 -->
             , PA.DTL_ADDR          <!-- 상세 주소 -->
             , CC.CVLCPT_RCPT_YMD   <!-- 민원 접수 일자 -->
             , CC.CVLCPT_APLY_NO    <!-- 민원 신청 번호 -->
             , CC.CVLCPT_RCPT_NO    <!-- 민원 접수 번호 -->
             , CC.CVLCPT_PRCS_CD    <!-- 민원 처리 코드 -->
             , (GET_CODE_NM('FIM017', CC.CVLCPT_PRCS_CD))   AS CVLCPT_PRCS_NM   <!-- 민원 처리 명 -->
          FROM TB_LEVY_EXCL         LE
         INNER JOIN TB_CRDN         C   ON (LE.CRDN_ID = C.CRDN_ID)
         INNER JOIN TB_CRDN_ADI     CA  ON (C.CRDN_ID  = CA.CRDN_ID)
    LEFT OUTER JOIN TB_VLTN         V   ON (C.VLTN_ID  = V.VLTN_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)
    LEFT OUTER JOIN TB_CRDN_CVLCPT  CC  ON (C.CVLCPT_LINK_YN = 'Y' AND C.CVLCPT_LINK_ID = CC.CVLCPT_LINK_ID AND CC.DEL_YN = 'N')
        <where>
            <if test="schLevyExclYmdFrom != null">
           AND LE.LEVY_EXCL_YMD <![CDATA[>=]]> #{schLevyExclYmdFrom}    <!-- 부과제외 일자 시작 -->
            </if>
            <if test="schLevyExclYmdTo != null">
           AND LE.LEVY_EXCL_YMD <![CDATA[<=]]> #{schLevyExclYmdTo}      <!-- 부과제외 일자 종료 -->
            </if>
            <if test="schLevyExclSeCd != null">
           AND LE.LEVY_EXCL_SE_CD   = #{schLevyExclSeCd}    <!-- 부과 제외 구분 코드 -->
            </if>
            <if test="schLevyExclRsnCd != null">
           AND LE.LEVY_EXCL_RSN_CD  = #{schLevyExclRsnCd}   <!-- 부과 제외 사유 코드 -->
            </if>
            <if test="delYn != null">
           AND LE.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="rtpyrNo != null">
           AND P.RTPYR_NO   = #{rtpyrNo}    <!-- 납부자 번호 -->
            </if>
            <if test="schRtpyrNm != null">
           AND P.RTPYR_NM   = #{schRtpyrNm} <!-- 납부자 명 -->
            </if>
            <if test="sggCd != null">
           AND C.SGG_CD     = #{sggCd}      <!-- 시군구 코드 -->
            </if>
            <if test="taskSeCd != null">
           AND C.TASK_SE_CD = #{taskSeCd}   <!-- 업무 구분 코드 -->
            </if>
           AND C.DEL_YN     = 'N'           <!-- 단속 삭제 여부 -->
            <choose>
                <when test="schRegDateOpt == 'regDt'">
                    <if test="schRegDateFrom != null">
           AND LE.REG_DT <![CDATA[>=]]> CONCAT(#{schRegDateFrom},'000000')  <!-- 등록 일자 시작 -->
                    </if>
                    <if test="schRegDateTo != null">
           AND LE.REG_DT <![CDATA[<=]]> CONCAT(#{schRegDateTo},'235959')    <!-- 등록 일자 종료 -->
                    </if>
                </when>
                <when test="schRegDateOpt == 'mdfcnDt'">
                    <if test="schRegDateFrom != null">
           AND LE.MDFCN_DT <![CDATA[>=]]> CONCAT(#{schRegDateFrom},'000000') <!-- 수정 일자 시작 -->
                    </if>
                    <if test="schRegDateTo != null">
           AND LE.MDFCN_DT <![CDATA[<=]]> CONCAT(#{schRegDateTo},'235959')  <!-- 수정 일자 종료 -->
                    </if>
                </when>
                <otherwise>
                </otherwise>
            </choose>
            <choose>
                <when test="schRgtrOpt == 'rgtr'">
                    <if test="schRgtrCd != null">
           AND LE.RGTR      =  #{schRgtrCd}     <!-- 등록자 코드 -->
                    </if>
                </when>
                <when test="schRgtrOpt == 'mdfr'">
                    <if test="schRgtrCd != null">
           AND LE.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 == 'levyExclYmd'"> LE.LEVY_EXCL_YMD </when>
                            <when test="by == 'levyExclSeCd'"> LE.LEVY_EXCL_SE_CD </when>
                            <when test="by == 'levyExclRsnCd'"> LE.LEVY_EXCL_RSN_CD </when>
                            <when test="by == 'etcCn'"> LE.ETC_CN </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 == 'ffnlgCrdnAmt'"> C.FFNLG_CRDN_AMT </when>
                            <when test="by == 'ffnlgAmt'"> C.FFNLG_AMT </when>
                            <when test="by == 'advntceAmt'"> C.ADVNTCE_AMT </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>
                            <when test="by == 'vltnArtcl'"> V.VLTN_ARTCL </when>
                            <when test="by == 'cvlcptRcptYmd'"> CC.CVLCPT_RCPT_YMD </when>
                            <when test="by == 'cvlcptAplyNo'"> CC.CVLCPT_APLY_NO </when>
                            <when test="by == 'cvlcptRcptNo'"> CC.CVLCPT_RCPT_NO </when>
                            <when test="by == 'cvlcptPrcsCd'"> CC.CVLCPT_PRCS_CD </when>
                            <when test="by == 'cvlcptPrcsCmptnDt'"> CC.CVLCPT_PRCS_CMPTN_DT </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 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_STDG_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   <!-- 단속 상태 변경 일시 -->
             , CA.PRK_PSBLTY_RSLT_CD <!-- 주차 가능 결과 코드 -->
             , CC.CVLCPT_LINK_ID    <!-- 민원 연계 ID -->
             , CC.CVLCPT_PRCS_CD    <!-- 민원 처리 코드 -->
             , L.LEVY_ID            <!-- 부과 ID -->
             , LE.LEVY_EXCL_ID      <!-- 부과제외 ID -->
             , LE.RDAMT_ID          <!-- 감액 ID -->
             , LE.LEVY_EXCL_YMD     <!-- 부과제외 일자 -->
             , LE.LEVY_EXCL_SE_CD   <!-- 부과제외 구분 코드 -->
             , (GET_CODE_NM('FIM021', LE.LEVY_EXCL_SE_CD))  AS LEVY_EXCL_SE_NM  <!-- 부과 제외 구분 명 -->
             , LE.LEVY_EXCL_RSN_CD  <!-- 부과제외 사유 코드 -->
             , (GET_CODE_NM('FIM022', LE.LEVY_EXCL_RSN_CD)) AS LEVY_EXCL_RSN_NM <!-- 부과 제외 사유 명 -->
             , LE.ETC_CN            <!-- 기타 내용 -->
             , LE.REG_DT            <!-- 등록 일시 -->
             , LE.RGTR              <!-- 등록자 -->
             , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = LE.RGTR) AS RGTR_NM <!-- 등록자 명 -->
             , LE.MDFCN_DT          <!-- 수정 일시 -->
             , LE.MDFR              <!-- 수정자 -->
             , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = LE.MDFR) AS MDFR_NM <!-- 수정자 명 -->
             , (GET_CODE_NM('FIM021', #{levyExclSeCd})) AS CRT_LEVY_EXCL_SE_NM  <!-- 부과 제외 구분 명 -->
          FROM TB_CRDN              C
         INNER JOIN TB_CRDN_ADI     CA ON (C.CRDN_ID = CA.CRDN_ID)
    LEFT OUTER JOIN TB_CRDN_CVLCPT  CC ON (C.CVLCPT_LINK_YN = 'Y' AND C.CVLCPT_LINK_ID = CC.CVLCPT_LINK_ID AND CC.DEL_YN = 'N')
    LEFT OUTER JOIN TB_LEVY         L  ON (C.CRDN_ID = L.CRDN_ID  AND L.DEL_YN  = 'N')
    LEFT OUTER JOIN TB_LEVY_EXCL    LE ON (C.CRDN_ID = LE.CRDN_ID AND LE.DEL_YN = 'N')
	</sql>

	<select id="selectLevyExcls" parameterType="map" resultType="dataobject">/* 부과제외 대장 객체 가져오기(levyExclMapper.selectLevyExcls) */
        <include refid="select" />
        <where>
            <if test="levyExclIds != null">
           AND LE.LEVY_EXCL_ID  IN (            <!-- 부과 제외 Ids -->
                <foreach collection="levyExclIds" item="levyExclId" separator=","> #{levyExclId} </foreach>
               )
            </if>
            <if test="levyExclId != null">
           AND LE.LEVY_EXCL_ID  = #{levyExclId} <!-- 부과 제외 ID -->
            </if>
            <if test="crdnId != null">
           AND C.CRDN_ID        = #{crdnId} <!-- 단속 ID -->
           AND C.DEL_YN         = 'N'       <!-- 단속 삭제 여부 -->
            </if>
        </where>
        <include refid="utility.orderBy" />
	</select>

	<insert id="insertLevyExcl" parameterType="cokr.xit.fims.excl.LevyExcl">/* 부과제외 대장 등록(levyExclMapper.insertLevyExcl) */
        <selectKey resultType="string" keyProperty="levyExclId" keyColumn="NEW_ID" order="BEFORE">
            <include refid="numbering.keyBySggAndYear">
                <property name="TABLE_NAME" value="TB_LEVY_EXCL" />
                <property name="TABLE_KEY" value="LEVY_EXCL_ID" />
                <property name="sggCd" value="#{sggCd}" />
                <property name="pad" value="20" />
            </include>
        </selectKey>
        INSERT
          INTO TB_LEVY_EXCL (
               LEVY_EXCL_ID     <!-- 부과 제외 ID -->
             , CRDN_ID          <!-- 단속 ID -->
             , RDAMT_ID         <!-- 감액 ID -->
             , LEVY_EXCL_YMD    <!-- 부과 제외 일자 -->
             , LEVY_EXCL_SE_CD  <!-- 부과 제외 구분 코드 -->
             , LEVY_EXCL_RSN_CD <!-- 부과 제외 사유 코드 -->
             , ETC_CN           <!-- 기타 내용 -->
             , DEL_YN           <!-- 삭제 여부 -->
             , REG_DT           <!-- 등록 일시 -->
             , RGTR             <!-- 등록자 -->
             , MDFCN_DT         <!-- 수정 일시 -->
             , MDFR             <!-- 수정자 -->
        )
        VALUES (
               #{levyExclId}    <!-- 부과 제외 ID -->
             , #{crdnId}        <!-- 단속 ID -->
             , #{rdamtId}       <!-- 감액 ID -->
             , #{levyExclYmd}   <!-- 부과 제외 일자 -->
             , #{levyExclSeCd}  <!-- 부과 제외 구분 코드 -->
             , #{levyExclRsnCd} <!-- 부과 제외 사유 코드 -->
             , #{etcCn}         <!-- 기타 내용 -->
             , 'N'              <!-- 삭제 여부 -->
             , <include refid="utility.now" />  <!-- 등록 일시 -->
             , #{createdBy}     <!-- 등록자 -->
             , <include refid="utility.now" />  <!-- 수정 일시 -->
             , #{modifiedBy}    <!-- 수정자 -->
        )
	</insert>

	<update id="updateLevyExcl" parameterType="cokr.xit.fims.excl.LevyExcl">/* 부과제외 대장 수정(levyExclMapper.updateLevyExcl) */
        UPDATE TB_LEVY_EXCL
           SET LEVY_EXCL_YMD    = #{levyExclYmd}    <!-- 부과 제외 일자 -->
             , LEVY_EXCL_RSN_CD = #{levyExclRsnCd}  <!-- 부과 제외 사유 코드 -->
             , ETC_CN           = #{etcCn}          <!-- 기타 내용 -->
             , MDFCN_DT         = <include refid="utility.now" />   <!-- 수정 일시 -->
             , MDFR             = #{modifiedBy}     <!-- 수정자 -->
         WHERE LEVY_EXCL_ID     = #{levyExclId}     <!-- 부과 제외 ID -->
           AND DEL_YN           = 'N'
	</update>

	<update id="deleteLevyExcl" parameterType="cokr.xit.fims.excl.LevyExcl">/* 부과제외 대장 삭제(levyExclMapper.deleteLevyExcl) */
        UPDATE TB_LEVY_EXCL
           SET DEL_YN           = 'Y'
             , DEL_DT           = <include refid="utility.now" />   <!-- 삭제 일시 -->
             , DLTR             = #{modifiedBy}    <!-- 삭제자 -->
             , DEL_RSN          = #{delRsn}        <!-- 삭제 사유 -->
         WHERE LEVY_EXCL_ID     = #{levyExclId}    <!-- 부과 제외 ID -->
           AND DEL_YN           = 'N'
	</update>

	<update id="updatePrkPsbltyRsltCd" parameterType="cokr.xit.fims.crdn.Crdn">/* 단속 대장 주차가능결과코드를 수정(levyExclMapper.updatePrkPsbltyRsltCd) */
        UPDATE TB_CRDN_ADI
           SET PRK_PSBLTY_RSLT_CD   = #{prkPsbltyRsltCd} <!-- 주차 가능 결과 코드 -->
             , MDFCN_DT             = <include refid="utility.now" />   <!-- 수정 일시 -->
             , MDFR                 = #{modifiedBy} <!-- 수정자 -->
         WHERE CRDN_ID              = #{crdnId}     <!-- 단속 ID -->
           AND DEL_YN               = 'N'
	</update>

</mapper>
