<?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 FN_GET_CODE_NM('FIM010', CSH.BFR_STTS_CD) FROM DUAL)             AS BFR_STTS_NM          /* 이전 상태 명 */
             , CSH.BFR_STTS_CHG_DT                                                                              /* 이전 상태 변경 일시 */
             , CSH.CRDN_STTS_CD                                                                                 /* 단속 상태 코드 */
             , (SELECT FN_GET_CODE_NM('FIM010', CSH.CRDN_STTS_CD) FROM DUAL)            AS CRDN_STTS_NM         /* 단속 상태 명 */
             , CSH.TASK_DTL_ID                                                                                  /* 업무 상세 ID */
             , CSH.USE_YN                                                                                       /* 사용 여부 */
             , (SELECT FN_GET_CODE_NM('CMM003', 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
	</sql>

	<select id="selectCrdnSttsHstryList" parameterType="map" resultType="dataobject">/* 단속 상태 이력 목록 조회(crdnSttsHstryMapper.selectCrdnSttsHstryList) */
        <include refid="utility.paging-prefix" />
        <include refid="select" />
        <where>
            <if test="crdnId != null">
           AND CSH.CRDN_ID              = #{crdnId}
            </if>
            <if test="useYn != null">
           AND CSH.USE_YN               = #{useYn}
            </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.sortBy" />
	</select>

	<insert id="insertCrdnSttsHstry" parameterType="map">/* 단속 상태 이력 등록(crdnSttsHstryMapper.insertCrdnSttsHstry) */
        <selectKey resultType="string" keyProperty="crdnSttsHstry.sttsHstryId" keyColumn="NEW_ID" order="BEFORE">
            SELECT CONCAT(DATE_FORMAT(CURRENT_DATE, '%Y'), LPAD(CAST(IFNULL(MAX(SUBSTRING(STTS_HSTRY_ID, 5)) + 1, 1) AS INT), 16, '0')) AS NEW_ID
              FROM TB_CRDN_STTS_HSTRY
             WHERE STTS_HSTRY_ID LIKE CONCAT(DATE_FORMAT(CURRENT_DATE, '%Y'), '%')
        </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 (
               #{crdnSttsHstry.sttsHstryId}                                                                     /* 상태 이력 ID */
             , #{crdnSttsHstry.crdnId}                                                                          /* 단속 ID */
             , #{crdnSttsHstry.bfrSttsCd}                                                                       /* 이전 상태 코드 */
             , #{crdnSttsHstry.bfrSttsChgDt}                                                                    /* 이전 상태 변경 일시 */
             , #{crdnSttsHstry.crdnSttsCd}                                                                      /* 단속 상태 코드 */
             , #{crdnSttsHstry.taskDtlId}                                                                       /* 업무 상세 ID  */
             , #{crdnSttsHstry.etcCn}                                                                           /* 기타 내용 */
             , #{crdnSttsHstry.useYn}                                                                           /* 단속 상태 변경 일시 */
             , #{crdnSttsHstry.createdAt}                                                                       /* 등록 일시 */
             , #{crdnSttsHstry.createdBy}                                                                       /* 등록자 */
             , #{crdnSttsHstry.lastModified}                                                                    /* 수정 일시 */
             , #{crdnSttsHstry.modifiedBy}                                                                      /* 수정자 */
             )
	</insert>

	<update id="updateCrdnSttsHstry" parameterType="map">/* 단속 상태 이력 수정(crdnSttsHstryMapper.updateCrdnSttsHstry) */
        UPDATE TB_CRDN_STTS_HSTRY
           SET USE_YN                   = #{crdnSttsHstry.useYn}                                                /* 사용 여부 */
             , MDFCN_DT                 = #{crdnSttsHstry.lastModified}                                         /* 수정 일시 */
             , MDFR                     = #{crdnSttsHstry.modifiedBy}                                           /* 수정자 */
         WHERE STTS_HSTRY_ID            = #{crdnSttsHstry.sttsHstryId}                                          /* 상태 이력 ID */
	</update>

	<update id="deleteCrdnSttsHstry" parameterType="map">/* 단속 상태 이력 삭제(crdnSttsHstryMapper.deleteCrdnSttsHstry) */
        UPDATE TB_CRDN_STTS_HSTRY
           SET USE_YN                   = 'N'                                                                   /* 사용 여부 */
             , MDFCN_DT                 = #{crdnSttsHstry.lastModified}                                         /* 수정 일시 */
             , MDFR                     = #{crdnSttsHstry.modifiedBy}                                           /* 수정자 */
         WHERE USE_YN                   = 'Y'                                                                   /* 사용 여부 */
            <if test="sttsHstryId != null">
           AND STTS_HSTRY_ID            = #{sttsHstryId}
            </if>
            <if test="crdnId != null">
           AND CRDN_ID                  = #{crdnId}
            </if>
	</update>

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

</mapper>
