<?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">
		<!-- TB_CRDN_RE_REG 단속 재등록 대장 -->
		<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="regDt"				column="REG_DT" />						<!-- 등록 일시 -->
		<result property="rgtr"					column="RGTR" />						<!-- 등록자 -->
		<result property="delDt"				column="DEL_DT" />						<!-- 삭제 일시 -->
		<result property="dltr"					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                                                                               /* 단속 등록 구분 코드 */
             , (SELECT FN_GET_CODE_NM('FIM026', CRR.CRDN_REG_SE_CD) FROM DUAL)          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              /* 등록자 명 */
             , CRR.DEL_DT                                                                                       /* 삭제 일시 */
             , CRR.DLTR                                                                                         /* 삭제자 */
             , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = CRR.DLTR)               AS DLTR_NM              /* 삭제자 명 */
             , CRR.DEL_RSN                                                                                      /* 삭제 사유 */
             , C.SGG_CD                                                                                         /* 시군구 코드 */
             , C.TASK_SE_CD                                                                                     /* 업무 구분 코드 */
             , C.CRDN_INPT_SE_CD                                                                                /* 단속 입력 구분 코드 */
             , (SELECT FN_GET_CODE_NM('FIM003', C.CRDN_INPT_SE_CD) FROM DUAL)           AS CRDN_INPT_SE_NM      /* 단속 입력 구분 명 */
             , C.CRDN_YMD                                                                                       /* 단속 일자 */
             , C.CRDN_TM                                                                                        /* 단속 시각 */
             , (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                                                                                   /* 단속 상태 코드 */
             , (SELECT FN_GET_CODE_NM('FIM010', C.CRDN_STTS_CD) FROM DUAL)              AS CRDN_STTS_NM         /* 단속 상태 명 */
          FROM TB_CRDN_RE_REG       CRR
         INNER JOIN TB_CRDN         C   ON (CRR.CRDN_ID = C.CRDN_ID)
	</sql>

	<select id="selectCrdnReRegList" parameterType="map" resultType="dataobject">/* 단속 재등록 목록 조회(excl03Mapper.selectCrdnReRegList) */
        <include refid="utility.paging-prefix" />
        <include refid="select" />
        <where>
            <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="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                  =  #{schVhrno}                                                          /* 차량번호 */
            </if>
            <choose>
                <when test="delYn != null">
           AND CRR.DEL_YN               =  #{delYn}                                                             /* 삭제 여부 */
                </when>
                <otherwise>
           AND CRR.DEL_YN               =  'N'                                                                  /* 삭제 여부 */
                </otherwise>
            </choose>
        </where>
           AND CRR.CRDN_REG_SE_CD       =  '03'                                                                 /* 단속 등록 구분 코드 - FIM026 */
           AND C.SGG_CD                 =  #{sggCd}                                                             /* 시군구 코드 */
        <if test="taskSeCd != null">
           AND C.TASK_SE_CD             =  #{taskSeCd}                                                          /* 업무 구분 코드 */
        </if>
        <if test="crdnDelYn != null">
           AND C.DEL_YN                 =  #{crdnDelYn}                                                         /* 삭제 여부 */
        </if>
        <if test="by != null and by != '' and term != null">
            <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 == 'crdnRegSeNm'"> 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 == 'crdnSttsNm'"> C.CRDN_STTS_CD </when>
                    </choose>
                    <include refid="dynamicSearch.center" />#{term}<include refid="dynamicSearch.end" />
                </when>
                <otherwise>
                </otherwise>
            </choose>
        </if>
        <include refid="utility.orderBy" />
        <include refid="utility.paging-suffix" />
	</select>

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

	<insert id="insertCrdnReReg" parameterType="map">/* 단속 재등록 등록(excl03Mapper.insertCrdnReReg) */
        <selectKey resultType="string" keyProperty="crdnReReg.reRegId" keyColumn="NEW_ID" order="BEFORE">
            SELECT CONCAT(DATE_FORMAT(CURRENT_DATE, '%Y'), LPAD(CAST(IFNULL(MAX(SUBSTRING(RE_REG_ID, 5)) + 1, 1) AS INT), 16, '0')) AS NEW_ID
              FROM TB_CRDN_RE_REG
             WHERE RE_REG_ID LIKE CONCAT(DATE_FORMAT(CURRENT_DATE, '%Y'), '%')
        </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 (
               #{crdnReReg.reRegId}                                                                             /* 재등록 ID */
             , #{crdnReReg.bfrCrdnId}                                                                           /* 이전 단속 ID */
             , #{crdnReReg.crdnId}                                                                              /* 단속 ID */
             , <include refid="utility.today" />                                                                /* 재 등록 일자 */
             , #{crdnReReg.crdnRegSeCd}                                                                         /* 단속 등록 구분 코드 */
             , #{crdnReReg.etcCn}                                                                               /* 기타 내용 */
             , 'N'                                                                                              /* 삭제 여부 */
             , <include refid="utility.now" />                                                                  /* 등록 일시 */
             , #{crdnReReg.createdBy}                                                                           /* 등록자 */
        )
	</insert>

	<update id="deleteCrdnReReg" parameterType="map">/* 단속 재등록 삭제(excl03Mapper.deleteCrdnReReg) */
        UPDATE TB_CRDN_RE_REG
           SET DEL_YN                   =  'Y'                                                                  /* 삭제 여부 */
             , DEL_DT                   =  <include refid="utility.now" />                                      /* 삭제 일시 */
             , DLTR                     =  #{crdnReReg.modifiedBy}                                              /* 삭제자 */
             , DEL_RSN                  =  #{crdnReReg.delRsn}                                                  /* 삭제 사유 */
         WHERE RE_REG_ID                =  #{crdnReReg.reRegId}                                                 /* 재등록 ID */
           AND DEL_YN                   =  'N'                                                                  /* 삭제 여부 */
	</update>

	<select id="selectCrdn" parameterType="map" resultType="dataobject">/* 단속 재등록 객체 가져오기(excl03Mapper.selectCrdn) */
        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.LINK_TBL_NM
             , C.LINK_ID
             , C.RTPYR_ID
             , 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_INFO 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_COLOR
             , C.FFNLG_CRDN_AMT
             , C.FFNLG_RDUCT_RT
             , C.FFNLG_AMT
             , C.ADVNTCE_BGNG_YMD
             , C.ADVNTCE_DUDT_YMD
             , C.ADVNTCE_AMT
             , C.OPNN_SBMSN_YN
             , C.ETC_CN
             , C.LEVY_ID
             , C.CRDN_STTS_CD
             , C.CRDN_STTS_CHG_DT
             , C.ADTN_AMT
             , C.MINUS_AMT
             , C.RCVMT_AMT
             , C.BFR_CRDN_ID
             , C.DEL_YN                                                                                         /* 삭제 여부 */
             , C.REG_DT                                                                                         /* 등록 일시 */
             , C.RGTR                                                                                           /* 등록자 */
             , 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.PARKNG_PSBLTY_RSLT_CD
             , CA.VLTN_NMTM
             , CA.OVTIME_YN
          FROM TB_CRDN              C
         INNER JOIN TB_CRDN_ADI     CA  ON (C.CRDN_ID = CA.CRDN_ID)
         WHERE C.CRDN_ID                =  #{crdnId}                                                            /* 단속 ID */
        <if test="delYn != null">
           AND C.DEL_YN                 =  #{delYn}                                                             /* 삭제 여부 */
        </if>
	</select>

</mapper>
