<?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.cmmn.dao.CrdnSttsHstryMapper">

<!-- 단속 상태 이력 정보 매퍼
 ========== 변경 이력 ==========
 2023-07-19	JoJH 최초 작성
 ============================ -->

	<resultMap id="crdnSttsHstryRow" type="cokr.xit.fims.cmmn.CrdnSttsHstry"><!-- 단속 상태 이력 -->
		<result property="sttsHstryId"	column="STTS_HSTRY_ID" />	<!-- 상태 이력 ID -->
		<result property="crdnId"		column="CRDN_ID" />			<!-- 단속 ID -->
		<result property="bfrSttsCd"	column="BFR_STTS_CD" />		<!-- 이전 상태 코드 -->
		<result property="bfrSttsChgDt"	column="BFR_STTS_CHG_DT" />	<!-- 이전 상태 변경 일시 -->
		<result property="crdnSttsCd"	column="CRDN_STTS_CD" />	<!-- 단속 상태 코드 -->
		<result property="taskDtlId"	column="TASK_DTL_ID" />		<!-- 업무 상세 ID -->
		<result property="useYn"		column="USE_YN" />			<!-- 사용 여부 -->
		<result property="etcCn"		column="ETC_CN" />			<!-- 기타 내용 -->
		<result property="regDt"		column="REG_DT" />			<!-- 등록 일시 -->
		<result property="rgtr"			column="RGTR" />			<!-- 등록자 -->
		<result property="mdfcnDt"		column="MDFCN_DT" />		<!-- 수정 일시 -->
		<result property="mdfr"			column="MDFR" />			<!-- 수정자 -->
	</resultMap>

	<sql id="select">
        SELECT CSH.STTS_HSTRY_ID    <!-- 상태 이력 ID -->
             , CSH.CRDN_ID          <!-- 단속 ID -->
             , CSH.BFR_STTS_CD      <!-- 이전 상태 코드 -->
             , (SELECT GET_CODE_NM('FIM010', CSH.BFR_STTS_CD) FROM DUAL)    AS BFR_STTS_NM  <!-- 이전 상태 명 -->
             , CSH.BFR_STTS_CHG_DT  <!-- 이전 상태 변경 일시 -->
             , CSH.CRDN_STTS_CD     <!-- 단속 상태 코드 -->
             , (SELECT GET_CODE_NM('FIM010', CSH.CRDN_STTS_CD) FROM DUAL)   AS CRDN_STTS_NM <!-- 단속 상태 명 -->
             , CSH.TASK_DTL_ID      <!-- 업무 상세 ID -->
             , CSH.USE_YN           <!-- 사용 여부 -->
             , (SELECT GET_CODE_NM('CMN003', CSH.USE_YN) FROM DUAL)         AS USE_YN_NM    <!-- 사용 여부 명 -->
             , CSH.ETC_CN           <!-- 기타 내용 -->
             , CSH.REG_DT           <!-- 등록 일시 -->
             , CSH.RGTR             <!-- 등록자 -->
             , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = CSH.RGTR)   AS RGTR_NM      <!-- 등록자 명 -->
             , CSH.MDFCN_DT         <!-- 수정 일시 -->
             , CSH.MDFR             <!-- 수정자 -->
             , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = CSH.MDFR)   AS MDFR_NM      <!-- 수정자 명 -->
          FROM TB_CRDN_STTS_HSTRY   CSH
    LEFT OUTER JOIN TB_CRDN C ON (CSH.CRDN_ID = C.CRDN_ID)
	</sql>

	<select id="selectCrdnSttsHstryList" parameterType="map" resultType="dataobject">/* 단속 상태 이력 목록 조회(crdnSttsHstryMapper.selectCrdnSttsHstryList) */
        <include refid="utility.paging-prefix" />
        <include refid="select" />
        <where>
            <if test="sggCd != null">
           AND C.SGG_CD         = #{sggCd}
            </if>
            <if test="taskSeCd != null">
           AND C.TASK_SE_CD     = #{taskSeCd}
            </if>
            <if test="crdnId != null">
           AND CSH.CRDN_ID      = #{crdnId}
            </if>
            <if test="useYn != null">
           AND CSH.USE_YN       = #{useYn}
            </if>
            <if test="schDateOpt == 'regDt'">
                <if test="schDateFrom != null">AND SUBSTR(CSH.REG_DT,1,8) <![CDATA[ >= ]]> #{schDateFrom} </if>
		        <if test="schDateTo != null">AND SUBSTR(CSH.REG_DT,1,8) <![CDATA[ <= ]]> #{schDateTo} </if>
            </if>
        </where>
        <include refid="utility.orderBy" />
        <include refid="utility.paging-suffix" />
	</select>

	<select id="selectCrdnSttsHstrys" parameterType="map" resultType="dataobject">/* 단속 상태 이력 객체 가져오기(crdnSttsHstryMapper.selectCrdnSttsHstrys) */
		<include refid="select" />
        <where>
            <if test="sttsHstryId != null">
           AND CSH.STTS_HSTRY_ID    = #{sttsHstryId}
            </if>
            <if test="crdnId != null">
           AND CSH.CRDN_ID          = #{crdnId}
            </if>
            <if test="crdnSttsCd != null">
           AND CSH.CRDN_STTS_CD     = #{crdnSttsCd}
            </if>
            <if test="useYn != null">
           AND CSH.USE_YN           = #{useYn}
            </if>
        </where>
        <include refid="utility.orderBy" />
	</select>

	<insert id="insertCrdnSttsHstry" parameterType="cokr.xit.fims.cmmn.CrdnSttsHstry">/* 단속 상태 이력 등록(crdnSttsHstryMapper.insertCrdnSttsHstry) */
        <selectKey resultType="string" keyProperty="sttsHstryId" keyColumn="NEW_ID" order="BEFORE">
            <include refid="numbering.keyByYear">
                <property name="TABLE_NAME" value="TB_CRDN_STTS_HSTRY" />
                <property name="TABLE_KEY" value="STTS_HSTRY_ID" />
                <property name="pad" value="20" />
            </include>
        </selectKey>
        INSERT
          INTO TB_CRDN_STTS_HSTRY (
               STTS_HSTRY_ID    <!-- 상태 이력 ID -->
             , CRDN_ID          <!-- 단속 ID -->
             , BFR_STTS_CD      <!-- 이전 상태 코드 -->
             , BFR_STTS_CHG_DT  <!-- 이전 상태 변경 일시 -->
             , CRDN_STTS_CD     <!-- 단속 상태 코드 -->
             , TASK_DTL_ID      <!-- 업무 상세 ID -->
             , ETC_CN           <!-- 기타 내용 -->
             , USE_YN           <!-- 사용 여부 -->
             , REG_DT           <!-- 등록 일시 -->
             , RGTR             <!-- 등록자 -->
             , MDFCN_DT         <!-- 수정 일시 -->
             , MDFR             <!-- 수정자 -->
             )
        VALUES (
               #{sttsHstryId}   <!-- 상태 이력 ID -->
             , #{crdnId}        <!-- 단속 ID -->
             , #{bfrSttsCd}     <!-- 이전 상태 코드 -->
             , #{bfrSttsChgDt}  <!-- 이전 상태 변경 일시 -->
             , #{crdnSttsCd}    <!-- 단속 상태 코드 -->
             , #{taskDtlId}     <!-- 업무 상세 ID  -->
             , #{etcCn}         <!-- 기타 내용 -->
             , #{useYn}         <!-- 사용 여부 -->
             , <include refid="utility.now" />  <!-- 등록 일시 -->
             , #{createdBy}     <!-- 등록자 -->
             , <include refid="utility.now" />  <!-- 수정 일시 -->
             , #{modifiedBy}    <!-- 수정자 -->
             )
	</insert>

	<update id="updateCrdnSttsHstry" parameterType="cokr.xit.fims.cmmn.CrdnSttsHstry">/* 단속 상태 이력 수정(crdnSttsHstryMapper.updateCrdnSttsHstry) */
        UPDATE TB_CRDN_STTS_HSTRY
           SET USE_YN        = #{useYn}         <!-- 사용 여부 -->
            <if test="etcCn != null">
             , ETC_CN        = #{etcCn}         <!-- 기타 내용 -->
            </if>
             , MDFCN_DT      = <include refid="utility.now" />  <!-- 수정 일시 -->
             , MDFR          = #{modifiedBy}    <!-- 수정자 -->
         WHERE STTS_HSTRY_ID = #{sttsHstryId}   <!-- 상태 이력 ID -->
	</update>

	<update id="deleteCrdnSttsHstry" parameterType="cokr.xit.fims.cmmn.CrdnSttsHstry">/* 단속 상태 이력 삭제(crdnSttsHstryMapper.deleteCrdnSttsHstry) */
        UPDATE TB_CRDN_STTS_HSTRY
           SET USE_YN        = 'N'              <!-- 사용 여부 -->
             , MDFCN_DT      = <include refid="utility.now" />  <!-- 수정 일시 -->
             , MDFR          = #{modifiedBy}    <!-- 수정자 -->
        <choose>
            <when test="crdnId != null">
         WHERE CRDN_ID       = #{crdnId}
            </when>
            <otherwise>
         WHERE STTS_HSTRY_ID = #{sttsHstryId}
            </otherwise>
        </choose>
        <if test="crdnSttsCd != null">
           AND CRDN_STTS_CD = #{crdnSttsCd}     <!-- 단속 상태 코드 -->
        </if>
           AND USE_YN        = 'Y'              <!-- 사용 여부 -->
	</update>

	<update id="updateCrdnSttsCd" parameterType="cokr.xit.fims.cmmn.CrdnSttsHstry">/* 단속 대장 수정(crdnSttsHstryMapper.updateCrdnSttsCd) */
        UPDATE TB_CRDN
           SET CRDN_STTS_CD     = #{crdnSttsCd} <!--  단속 상태 코드 -->
        <choose>
            <when test="crdnSttsChgDt != null">
             , CRDN_STTS_CHG_DT = #{crdnSttsChgDt}  <!-- 단속 상태 변경 일시 -->
            </when>
            <otherwise>
             , CRDN_STTS_CHG_DT = <include refid="utility.now" />   <!-- 단속 상태 변경 일시 -->
            </otherwise>
        </choose>
             , MDFCN_DT         = <include refid="utility.now" />   <!-- 수정 일시 -->
             , MDFR             = #{modifiedBy} <!--  수정자 -->
         WHERE CRDN_ID          = #{crdnId}     <!--  단속 ID -->
	</update>

</mapper>
