<?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.CrdnReRegMapper">

<!-- 단속 재등록 정보 매퍼
 ========== 변경 이력 ==========
 2023-07-03	JoJH 최초 작성
 ============================ -->

	<resultMap id="crdnReRegRow" type="cokr.xit.fims.excl.CrdnReReg"> <!-- 단속 재등록 대장 -->
		<result property="reRegId"		column="RE_REG_ID" />       <!-- 재등록 ID -->
		<result property="bfrCrdnId"	column="BFR_CRDN_ID" />     <!-- 이전 단속 ID -->
		<result property="crdnId"		column="CRDN_ID" />         <!-- 단속 ID -->
		<result property="reRegYmd"		column="RE_REG_YMD" />      <!-- 재등록 일자 -->
		<result property="crdnRegSeCd"	column="CRDN_REG_SE_CD" />  <!-- 단속 등록 구분 코드 -->
		<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="removedAt"	column="DEL_DT" />          <!-- 삭제 일시 -->
		<result property="removedBy"	column="DLTR" />            <!-- 삭제자 -->
		<result property="delRsn"		column="DEL_RSN" />         <!-- 삭제 사유 -->
	</resultMap>

	<sql id="select">
        SELECT CRR.RE_REG_ID        <!-- 재등록 ID -->
             , CRR.BFR_CRDN_ID      <!-- 이전 단속 ID -->
             , CRR.CRDN_ID          <!-- 단속 ID -->
             , CRR.RE_REG_YMD       <!-- 재등록 일자 -->
             , CRR.CRDN_REG_SE_CD   <!-- 단속 등록 구분 코드 -->
             , (GET_CODE_NM('FIM026', CRR.CRDN_REG_SE_CD)) AS CRDN_REG_SE_NM    <!-- 단속 등록 구분 명 -->
             , CRR.ETC_CN           <!-- 기타 내용 -->
             , CRR.DEL_YN           <!-- 삭제 여부 -->
             , CRR.REG_DT           <!-- 등록 일시 -->
             , CRR.RGTR             <!-- 등록자 -->
             , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = CRR.RGTR) AS RGTR_NM    <!-- 등록자 명 -->
             , C.SGG_CD             <!-- 시군구 코드 -->
             , C.TASK_SE_CD         <!-- 업무 구분 코드 -->
             , (GET_CODE_NM('FIM054', C.TASK_SE_CD)) AS TASK_SE_NM  <!-- 업무 구분 명 -->
             , C.CRDN_INPT_SE_CD    <!-- 단속 입력 구분 코드 -->
             , (GET_CODE_NM('FIM003', C.CRDN_INPT_SE_CD)) AS CRDN_INPT_SE_NM    <!-- 단속 입력 구분 명 -->
             , 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.ATCH_FILE_CNT      <!-- 첨부 파일 수 -->
             , C.FFNLG_CRDN_AMT     <!-- 과태료 단속 금액 -->
             , C.FFNLG_AMT          <!-- 과태료 금액 -->
             , C.ADVNTCE_AMT        <!-- 사전통지 금액 -->
             , C.CRDN_STTS_CD       <!-- 단속 상태 코드 -->
             , (GET_CODE_NM('FIM010', C.CRDN_STTS_CD)) AS CRDN_STTS_NM  <!-- 단속 상태 명 -->
             , CA.CRDN_SE_CD        <!-- 단속 구분 코드 -->
             , (GET_CODE_NM('FIM002', CA.CRDN_SE_CD)) AS CRDN_SE_NM <!-- 단속 구분 명 -->
             , CA.CRDN_SPAREA_CD    <!-- 단속 특별구역 코드 -->
             , (GET_CODE_NM('FIM007', CA.CRDN_SPAREA_CD)) AS CRDN_SPAREA_NM <!-- 단속 특별구역 명 -->
             , CA.USE_FUEL_CD       <!-- 사용 연료 코드 -->
             , (GET_CODE_NM('LVS005', CA.USE_FUEL_CD)) AS USE_FUEL_NM   <!-- 사용 연료 명 -->
             , CA.FFNLG_CARMDL_CD   <!-- 과태료 차종 코드 -->
             , (GET_CODE_NM('FIM009', CA.FFNLG_CARMDL_CD)) AS FFNLG_CARMDL_NM   <!-- 주차 가능 결과 명 -->
             , CA.PRK_PSBLTY_RSLT_CD <!-- 주차 가능 결과 코드 -->
             , (GET_CODE_NM('FIM034', CA.PRK_PSBLTY_RSLT_CD)) AS PRK_PSBLTY_RSLT_NM <!-- 주차 가능 결과 명 -->
             , V.VLTN_ID            <!-- 위반 ID -->
             , V.VLTN_CD            <!-- 위반 코드 -->
             , V.VLTN_ARTCL         <!-- 위반 항목 -->
             , 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_CRDN_RE_REG     CRR
         INNER JOIN TB_CRDN       C   ON (CRR.CRDN_ID = C.CRDN_ID)
         INNER JOIN TB_CRDN_ADI   CA  ON (C.CRDN_ID   = CA.CRDN_ID)
         INNER 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)
	</sql>

	<select id="selectCrdnReRegList" parameterType="map" resultType="dataobject">/* 단속 재등록 목록 조회(crdnReRegMapper.selectCrdnReRegList) */
        <include refid="utility.paging-prefix" />
        <include refid="select" />
        <where>
           AND CRR.CRDN_REG_SE_CD   =  '03'     <!-- 단속 등록 구분 코드 - FIM026 -->
            <if test="schReRegYmdFrom != null">
           AND CRR.RE_REG_YMD <![CDATA[>=]]> #{schReRegYmdFrom} <!-- 재등록 일자 시작 -->
            </if>
            <if test="schReRegYmdTo != null">
           AND CRR.RE_REG_YMD <![CDATA[<=]]> #{schReRegYmdTo}   <!-- 재등록 일자 종료 -->
            </if>
            <if test="delYn != null">
           AND CRR.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>
            <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 CRR.REG_DT <![CDATA[>=]]> CONCAT(#{schRegDateFrom},'000000')     <!-- 등록 일자 시작 -->
                    </if>
                    <if test="schRegDateTo != null">
           AND CRR.REG_DT <![CDATA[<=]]> CONCAT(#{schRegDateTo},'235959')       <!-- 등록 일자 종료 -->
                    </if>
                </when>
                <when test="schRegDateOpt == 'mdfcnDt'">
                    <if test="schRegDateFrom != null">
           AND CRR.MDFCN_DT <![CDATA[>=]]> CONCAT(#{schRegDateFrom},'000000')   <!-- 수정 일자 시작 -->
                    </if>
                    <if test="schRegDateTo != null">
           AND CRR.MDFCN_DT <![CDATA[<=]]> CONCAT(#{schRegDateTo},'235959')     <!-- 수정 일자 종료 -->
                    </if>
                </when>
                <otherwise>
                </otherwise>
            </choose>
            <choose>
                <when test="schRgtrOpt == 'rgtr'">
                    <if test="schRgtrCd != null">
           AND CRR.RGTR =  #{schRgtrCd} <!-- 등록자 코드 -->
                    </if>
                </when>
                <when test="schRgtrOpt == 'mdfr'">
                    <if test="schRgtrCd != null">
           AND CRR.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 == 'reRegYmd'"> CRR.RE_REG_YMD </when>
                            <when test="by == 'crdnRegSeCd'"> CRR.CRDN_REG_SE_CD </when>
                            <when test="by == 'etcCn'"> CRR.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 == '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>
                        </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>

	<select id="selectCrdnReRegs" parameterType="map" resultType="dataobject">/* 단속 재등록 객체 가져오기(crdnReRegMapper.selectCrdnReRegs) */
        <include refid="select" />
        <where>
            <if test="reRegIds != null">
           AND CRR.RE_REG_ID IN (           <!-- 재등록 Ids -->
                <foreach collection="reRegIds" item="reRegId" separator=","> #{reRegId} </foreach>
               )
            </if>
            <if test="reRegId != null">
           AND CRR.RE_REG_ID =  #{reRegId}  <!-- 재등록 ID -->
            </if>
            <if test="delYn != null">
           AND CRR.DEL_YN    =  #{delYn}    <!-- 삭제 여부 -->
            </if>
            <if test="crdnId != null">
           AND C.CRDN_ID     =  #{crdnId}   <!-- 단속 ID -->
           AND C.DEL_YN      =  #{delYn}    <!-- 삭제 여부 -->
            </if>
        </where>
        <include refid="utility.orderBy" />
	</select>

	<insert id="insertCrdnReReg" parameterType="cokr.xit.fims.excl.CrdnReReg">/* 단속 재등록 등록(crdnReRegMapper.insertCrdnReReg) */
        <selectKey resultType="string" keyProperty="reRegId" keyColumn="NEW_ID" order="BEFORE">
            <include refid="numbering.keyBySggAndYear">
                <property name="TABLE_NAME" value="TB_CRDN_RE_REG" />
                <property name="TABLE_KEY" value="RE_REG_ID" />
                <property name="sggCd" value="#{sggCd}" />
                <property name="pad" value="20" />
            </include>
        </selectKey>
        INSERT
          INTO TB_CRDN_RE_REG (
               RE_REG_ID        <!-- 재등록 ID -->
             , BFR_CRDN_ID      <!-- 이전 단속 ID -->
             , CRDN_ID          <!-- 단속 ID -->
             , RE_REG_YMD       <!-- 재 등록 일자 -->
             , CRDN_REG_SE_CD   <!-- 단속 등록 구분 코드 -->
             , ETC_CN           <!-- 기타 내용 -->
             , DEL_YN           <!-- 삭제 여부 -->
             , REG_DT           <!-- 등록 일시 -->
             , RGTR             <!-- 등록자 -->
        )
        VALUES (
               #{reRegId}       <!-- 재등록 ID -->
             , #{bfrCrdnId}     <!-- 이전 단속 ID -->
             , #{crdnId}        <!-- 단속 ID -->
             , <include refid="utility.today" /> <!-- 재 등록 일자 -->
             , #{crdnRegSeCd}   <!-- 단속 등록 구분 코드 -->
             , #{etcCn}         <!-- 기타 내용 -->
             , 'N'              <!-- 삭제 여부 -->
             , <include refid="utility.now" />  <!-- 등록 일시 -->
             , #{createdBy}     <!-- 등록자 -->
        )
	</insert>

	<update id="deleteCrdnReReg" parameterType="cokr.xit.fims.excl.CrdnReReg">/* 단속 재등록 삭제(crdnReRegMapper.deleteCrdnReReg) */
        UPDATE TB_CRDN_RE_REG
           SET DEL_YN       = 'Y'
             , DEL_DT       = <include refid="utility.now" />   <!-- 삭제 일시 -->
             , DLTR         = #{modifiedBy} <!-- 삭제자 -->
             , DEL_RSN      = #{delRsn}     <!-- 삭제 사유 -->
         WHERE RE_REG_ID    = #{reRegId}    <!-- 재등록 ID -->
           AND DEL_YN       = 'N'
	</update>

	<select id="selectCrdnInfo" parameterType="string" resultType="dataobject">/* 단속 재등록 객체 가져오기(crdnReRegMapper.selectCrdnInfo) */
        SELECT C.CRDN_ID
             , C.SGG_CD
             , C.TASK_SE_CD
             , C.CRDN_REG_SE_CD
             , C.CRDN_INPT_SE_CD
             , C.CVLCPT_LINK_YN
             , C.CVLCPT_LINK_TBL_NM
             , C.CVLCPT_LINK_ID
             , C.RTPYR_ID
             , C.ADDR_SN
             , C.CRDN_YMD
             , C.CRDN_TM
             , C.VHRNO
             , C.CRDN_STDG_NM
             , C.CRDN_ROAD_NM
             , C.CRDN_PLC
             , C.VLTN_ID
             , (SELECT VLTN_CD
                  FROM TB_VLTN X
                 WHERE X.VLTN_ID=C.VLTN_ID AND X.SGG_CD=C.SGG_CD AND X.TASK_SE_CD=C.TASK_SE_CD) AS VLTN_CD
             , C.GPS_X
             , C.GPS_Y
             , C.ATCH_FILE_CNT
             , C.VIN
             , C.VHCL_NM
             , C.VHCL_COLR
             , C.VHCL_CPCT
             , C.FFNLG_CRDN_AMT
             , C.FFNLG_RDCRT
             , C.FFNLG_AMT
             , C.ADVNTCE_BGNG_YMD
             , C.ADVNTCE_DUDT_YMD
             , C.ADVNTCE_AMT
             , C.OPNN_SBMSN_YN
             , C.ETC_CN
             , C.CRDN_STTS_CD
             , C.CRDN_STTS_CHG_DT
             , C.ADTN_AMT
             , C.MINUS_AMT
             , C.RCVMT_AMT
             , C.BFR_CRDN_ID
             , C.NXRP_CRDN_LINK_YN
             , C.NXRP_CRDN_LINK_USER_ID
             , C.NXRP_CRDN_LINK_DT
             , C.NXRP_ACB_KEY
             , C.MM_CODE
             , CA.CRDN_SE_CD
             , CA.TEAM_ID
             , CA.DTL_CRDN_PLC
             , CA.CRDN_SPAREA_CD
             , CA.CRDN_BGNG_TM
             , CA.CRDN_END_TM
             , CA.CRDN_SN
             , CA.MOSC_X
             , CA.MOSC_Y
             , CA.TOWNG_YN
             , CA.USE_FUEL_CD
             , CA.FFNLG_CARMDL_CD
             , CA.PRK_PSBLTY_RSLT_CD
             , CA.VLTN_NMTM
             , CA.OVTM_YN
          FROM TB_CRDN          C
         INNER JOIN TB_CRDN_ADI CA ON (C.CRDN_ID = CA.CRDN_ID)
         WHERE C.CRDN_ID    = #{crdnId}     <!-- 단속 ID -->
           AND C.DEL_YN     = 'N'
	</select>

</mapper>
