<?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.levy.dao.RductMapper">

<!-- 과태료 감경 대장 정보 매퍼
 ========== 변경 이력 ==========
 2023-08-30	JoJH 최초 작성
 ============================ -->

	<resultMap id="rductRow" type="cokr.xit.fims.levy.Rduct">
		<result property="rductId"				column="RDUCT_ID" />					<!-- 감경 ID -->
		<result property="crdnId"				column="CRDN_ID" />						<!-- 단속 ID -->
		<result property="rtpyrId"				column="RTPYR_ID" />					<!-- 납부자 ID -->
		<result property="rductYmd"				column="RDUCT_YMD" />					<!-- 감경 일자 -->
		<result property="rductRsnCd"			column="RDUCT_RSN_CD" />				<!-- 감경 사유 코드 -->
		<result property="rductAmt"				column="RDUCT_AMT" />					<!-- 감경 금액 -->
		<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>

    <sql id="select">
        SELECT R.RDUCT_ID                                                                                       /* 감경 ID */
             , R.RDUCT_YMD                                                                                      /* 감경 일자 */
             , R.RDUCT_RSN_CD                                                                                   /* 감경 사유 코드 */
             , (SELECT FN_GET_CODE_NM('FIM019', R.RDUCT_RSN_CD) FROM DUAL)              AS RDUCT_RSN_NM         /* 감경 사유 명 */
             , R.RDUCT_AMT                                                                                      /* 감경 금액 */
             , R.ETC_CN                                                                                         /* 감액 기타 내용 */
             , R.DEL_YN                                                                                         /* 삭제 여부 */
             , R.REG_DT                                                                                         /* 등록 일시 */
             , R.RGTR                                                                                           /* 등록자 */
             , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = R.RGTR)                 AS RGTR_NM              /* 등록자 명 */
             , R.MDFCN_DT                                                                                       /* 수정 일시 */
             , R.MDFR                                                                                           /* 수정자 */
             , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = R.MDFR)                 AS MDFR_NM              /* 수정자 명 */
             , R.DEL_DT                                                                                         /* 삭제 일시 */
             , R.DLTR                                                                                           /* 삭제자 */
             , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = R.DLTR)                 AS DLTR_NM              /* 삭제자 명 */
             , R.DEL_RSN                                                                                        /* 삭제 사유 */
             , 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.FFNLG_CRDN_AMT                                                                                 /* 과태료 단속 금액 */
             , C.FFNLG_RDUCT_RT                                                                                 /* 과태료 감경 율 */
             , 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         /* 단속 상태 명 */
             , P.RTPYR_ID                                                                                       /* 납부자 ID */
             , P.RTPYR_NO                                                                                       /* 납부자 번호 */
             , P.RTPYR_NM                                                                                       /* 납부자 명 */
             , L.LEVY_ID                                                                                        /* 부과 ID */
             , L.LEVY_PCPTAX + LEVY_ADAMT                                               AS LEVY_AMT             /* 부과 금액 */
             , L.RCVMT_PCPTAX + RCVMT_ADAMT                                             AS RCVMT_AMT            /* 수납 금액 */
             , L.RDCAMT_PCPTAX + RDCAMT_ADAMT                                           AS RDCAMT_AMT           /* 감액 금액 */
             , L.SUM_AMT                                                                                        /* 합계 금액 */
          FROM TB_RDUCT             R
         INNER JOIN TB_CRDN         C   ON (R.CRDN_ID   = C.CRDN_ID)
    LEFT OUTER JOIN TB_PAYER        P   ON (C.RTPYR_ID  = P.RTPYR_ID)
    LEFT OUTER JOIN TB_LEVY         L   ON (C.CRDN_ID   = L.CRDN_ID AND L.DEL_YN = 'N')
    </sql>

    <select id="selectRductList" parameterType="map" resultType="dataobject">/* 과태료 감경 대장 목록 조회(rductMapper.selectRductList) */
        <include refid="utility.paging-prefix" />
        <include refid="select" />
        <where>
            <if test="schRductYmdFrom != null">
           AND R.RDUCT_YMD <![CDATA[ >= ]]> #{schRductYmdFrom}                                                  /* 감경 일자 시작 */
            </if>
            <if test="schRductYmdTo != null">
           AND R.RDUCT_YMD <![CDATA[ <= ]]> #{schRductYmdTo}                                                    /* 감경 일자 시작 */
            </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 R.DEL_YN                 =  #{delYn}                                                             /* 삭제 여부 */
                </when>
                <otherwise>
           AND R.DEL_YN                 =  'N'                                                                  /* 삭제 여부 */
                </otherwise>
            </choose>
        </where>
           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 == 'rductYmd'">R.RDUCT_YMD</when>
                        <when test="by == 'rductRsnCd'">R.RDUCT_RSN_CD</when>
                        <when test="by == 'crdnYmd'">C.CRDN_YMD</when>
                        <when test="by == 'vhrno'">C.VHRNO</when>
                        <when test="by == 'rductAmt'">R.RDUCT_AMT</when>
                        <when test="by == 'rductEtcCn'">R.ETC_CN</when>
                        <when test="by == 'crdnSttsCd'">C.CRDN_STTS_CD</when>
                    </choose>
                    <include refid="dynamicSearch.center" />#{term}<include refid="dynamicSearch.end" />
                </when>
                <otherwise>
                </otherwise>
            </choose>
        </if>
        <if test="crdnId != null">AND C.CRDN_ID = #{crdnId}</if>
        <include refid="utility.sortBy" />
        <include refid="utility.paging-suffix" />
    </select>

    <select id="selectRducts" parameterType="map" resultType="dataobject">/* 과태료 감경 대장 객체 가져오기(rductMapper.selectRducts) */
        <include refid="select" />
        <where>
            <if test="rductId != null">
           AND R.RDUCT_ID               =  #{rductId}                                                           /* 감경 ID */
            </if>
            <if test="crdnId != null">
           AND R.CRDN_ID                =  #{crdnId}                                                            /* 단속 ID */
            </if>
            <if test="delYn != null">
           AND R.DEL_YN                 =  #{delYn}                                                             /* 삭제 여부 */
            </if>
        </where>
        <include refid="utility.orderBy" />
    </select>

    <insert id="insertRduct" parameterType="map">/* 과태료 감경 대장 등록(rductMapper.insertRduct) */
        <selectKey resultType="string" keyProperty="rduct.rductId" keyColumn="NEW_ID" order="BEFORE">
            SELECT CONCAT(DATE_FORMAT(CURRENT_DATE, '%Y'), LPAD(CAST(IFNULL(MAX(SUBSTRING(RDUCT_ID, 5)) + 1, 1) AS INT), 16, '0')) AS NEW_ID
              FROM TB_RDUCT
             WHERE RDUCT_ID LIKE CONCAT(DATE_FORMAT(CURRENT_DATE, '%Y'), '%')
        </selectKey>
        INSERT
          INTO TB_RDUCT (
               RDUCT_ID                                                                                         /* 감경 ID */
             , CRDN_ID                                                                                          /* 단속 ID */
             , RTPYR_ID                                                                                         /* 납부자 ID */
             , RDUCT_YMD                                                                                        /* 감경 일자 */
             , RDUCT_RSN_CD                                                                                     /* 감경 사유 코드 */
             , RDUCT_AMT                                                                                        /* 감경 금액 */
             , ETC_CN                                                                                           /* 기타 내용 */
             , DEL_YN                                                                                           /* 삭제 여부 */
             , REG_DT                                                                                           /* 등록 일시 */
             , RGTR                                                                                             /* 등록자 */
             , MDFCN_DT                                                                                         /* 수정 일시 */
             , MDFR                                                                                             /* 수정자 */
        )
        VALUES (
               #{rduct.rductId}                                                                                 /* 감경 ID */
             , #{rduct.crdnId}                                                                                  /* 단속 ID */
             , #{rduct.rtpyrId}                                                                                 /* 납부자 ID */
             , #{rduct.rductYmd}                                                                                /* 감경 일자 */
             , #{rduct.rductRsnCd}                                                                              /* 감경 사유 코드 */
             , #{rduct.rductAmt}                                                                                /* 감경 금액 */
             , #{rduct.etcCn}                                                                                   /* 기타 내용 */
             , 'N'                                                                                              /* 삭제 여부 */
             , <include refid="utility.now" />                                                                  /* 등록 일시 */
             , #{rduct.createdBy}                                                                               /* 등록자 */
             , <include refid="utility.now" />                                                                  /* 수정 일시 */
             , #{rduct.modifiedBy}                                                                              /* 수정자 */
        )
    </insert>

    <update id="updateRduct" parameterType="map">/* 과태료 감경 대장 수정(rductMapper.updateRduct) */
        UPDATE TB_RDUCT
           SET RDUCT_YMD                =  #{rduct.rductYmd}                                                    /* 감경 일자 */
             , RDUCT_RSN_CD             =  #{rduct.rductRsnCd}                                                  /* 감경 사유 코드 */
             , RDUCT_AMT                =  #{rduct.rductAmt}                                                    /* 감경 금액 */
             , ETC_CN                   =  #{rduct.etcCn}                                                       /* 기타 내용 */
             , MDFCN_DT                 =  <include refid="utility.now" />                                      /* 수정 일시 */
             , MDFR                     =  #{rduct.modifiedBy}                                                  /* 수정자 */
         WHERE RDUCT_ID                 =  #{rduct.rductId}                                                     /* 감경 ID */
           AND DEL_YN                   =  'N'                                                                  /* 삭제 여부 */
     </update>

    <update id="deleteRduct" parameterType="map">/* 과태료 감경 대장 삭제(rductMapper.deleteRduct) */
        UPDATE TB_RDUCT SET
               DEL_YN                   =  'Y'
             , DEL_DT                   =  <include refid="utility.now" />                                      /* 삭제 일시 */
             , DLTR                     =  #{rduct.modifiedBy}                                                  /* 삭제자 */
             , DEL_RSN                  =  #{rduct.delRsn}                                                      /* 삭제 사유 */
         WHERE RDUCT_ID                 =  #{rduct.rductId}                                                     /* 감경 ID */
           AND DEL_YN                   =  'N'                                                                  /* 삭제 여부 */
     </update>

	<select id="selectCrdn" parameterType="map" resultType="dataobject">/* 단속 대장 객체 가져오기(rductMapper.selectCrdn) */
        SELECT C.CRDN_ID                                                                                        /* 단속 ID */
             , C.SGG_CD                                                                                         /* 시군구 코드 */
             , C.TASK_SE_CD                                                                                     /* 업무 구분 코드 */
             , C.VHRNO                                                                                          /* 차량번호 */
             , C.FFNLG_CRDN_AMT                                                                                 /* 과태료 단속 금액 */
             , C.FFNLG_RDUCT_RT                                                                                 /* 과태료 감경 율 */
             , C.FFNLG_AMT                                                                                      /* 과태료 금액 */
             , C.CRDN_STTS_CD                                                                                   /* 단속 상태 코드 */
             , (SELECT FN_GET_CODE_NM('FIM010', C.CRDN_STTS_CD) FROM DUAL)              AS CRDN_STTS_NM         /* 단속 상태 명 */
             , TI.WKSN_RDUCT_RT                                                                                 /* 사회적약자 감경 율 */
             , TI.ADVNTCE_RDUCT_RT                                                                              /* 사전통지 감경 율 */
             , P.RTPYR_ID                                                                                       /* 납부자 ID */
             , P.RTPYR_NO                                                                                       /* 납부자 번호 */
             , P.RTPYR_NM                                                                                       /* 납부자 명 */
             , L.LEVY_ID                                                                                        /* 부과 ID */
             , L.DUDT_YMD                                                                                       /* 납기 일자 */
             , L.LEVY_PCPTAX                                                                                    /* 부과 본세 */
             , L.LEVY_ADAMT                                                                                     /* 부과 가산금 */
             , L.INSPY_INT                                                                                      /* 분납 이자 */
             , L.RCVMT_PCPTAX                                                                                   /* 수납 본세 */
             , L.RCVMT_ADAMT                                                                                    /* 수납 가산금 */
             , L.RDCAMT_PCPTAX                                                                                  /* 감액 본세 */
             , L.RDCAMT_ADAMT                                                                                   /* 감액 가산금 */
             , R.RDUCT_ID                                                                                       /* 감경 ID */
             , <include refid="utility.today" />                                        AS TODAY                /* 오늘 일자 */
             , C.FFNLG_CRDN_AMT * TI.WKSN_RDUCT_RT / 100                                AS CALC_RDUCT_AMT       /* 감경 금액 */
          FROM TB_CRDN              C
         INNER JOIN TB_TASK_INFO    TI  ON (C.SGG_CD   = TI.SGG_CD AND C.TASK_SE_CD = TI.TASK_SE_CD AND TI.USE_YN = 'Y')
    LEFT OUTER JOIN TB_PAYER        P   ON (C.RTPYR_ID = P.RTPYR_ID)
    LEFT OUTER JOIN TB_LEVY         L   ON (C.CRDN_ID  = L.CRDN_ID AND L.DEL_YN = 'N')
    LEFT OUTER JOIN TB_RDUCT        R   ON (C.CRDN_ID  = R.CRDN_ID AND R.DEL_YN = 'N')
        <where>
            <if test="rductId != null">
           AND R.RDUCT_ID               =  #{rductId}                                                           /* 감경 ID */
                <if test="delYn != null">
           AND R.DEL_YN                 =  #{delYn}                                                             /* 삭제 여부 */
                </if>
            </if>
            <if test="crdnId != null">
           AND C.CRDN_ID                =  #{crdnId}                                                            /* 단속 ID */
                <if test="delYn != null">
           AND C.DEL_YN                 =  #{delYn}                                                             /* 삭제 여부 */
                </if>
            </if>
        </where>
	</select>

    <update id="updateCrdnRduct" parameterType="map">/* 단속 대장 과태료 감경 금액 수정(rductMapper.updateCrdnRduct) */
        UPDATE TB_CRDN
           SET FFNLG_RDUCT_RT           =  #{crdn.ffnlgRductRt}                                                 /* 과태료 감경 율 */
             , FFNLG_AMT                =  #{crdn.ffnlgAmt}                                                     /* 과태료 금액 */
             , ADVNTCE_AMT              =  #{crdn.advntceAmt}                                                   /* 사전통지 금액 */
             , MDFCN_DT                 =  <include refid="utility.now" />                                      /* 수정 일시 */
             , MDFR                     =  #{crdn.modifiedBy}                                                   /* 수정자 */
         WHERE CRDN_ID                  =  #{crdn.crdnId}                                                       /* 단속 ID */
           AND DEL_YN                   =  'N'                                                                  /* 삭제 여부 */
     </update>

    <update id="updateLevyRduct" parameterType="map">/* 부과 대장 과태료 감경 금액 수정(rductMapper.updateLevyRduct) */
        UPDATE TB_LEVY
           SET FFNLG_AMT                =  #{levy.ffnlgAmt}                                                     /* 과태료 금액 */
             , LEVY_PCPTAX              =  #{levy.levyPcptax}                                                   /* 부과 본세 */
             , SUM_AMT                  =  #{levy.sumAmt}                                                       /* 합계 금액 */
             , MDFCN_DT                 =  <include refid="utility.now" />                                      /* 수정 일시 */
             , MDFR                     =  #{levy.modifiedBy}                                                   /* 수정자 */
         WHERE LEVY_ID                  =  #{levy.levyId}                                                       /* 단속 ID */
           AND DEL_YN                   =  'N'                                                                  /* 삭제 여부 */
     </update>

</mapper>
