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

<!-- 의견제출 대장 정보 매퍼
 ========== 변경 이력 ==========
 2023-06-27	JoJH 최초 작성
 ============================ -->

	<resultMap id="opnnSbmsnRow" type="cokr.xit.fims.excl.OpnnSbmsn"> <!-- 의견제출 대장 -->
		<result property="opnnId"           column="OPNN_ID" />             <!-- 의견 ID -->
		<result property="crdnId"           column="CRDN_ID" />             <!-- 단속 ID -->
		<result property="rcptNo"           column="RCPT_NO" />             <!-- 접수 번호 -->
		<result property="rcptYmd"          column="RCPT_YMD" />            <!-- 접수 일자 -->
		<result property="rcptSeCd"         column="RCPT_SE_CD" />          <!-- 접수 구분 코드 -->
		<result property="rcptSeNm"         column="RCPT_SE_NM" />          <!-- 접수 구분 명 -->
		<result property="ownrRelCd"        column="OWNR_REL_CD" />         <!-- 소유주 관계 코드 -->
		<result property="ownrRelNm"        column="OWNR_REL_NM" />         <!-- 소유주 관계 명 -->
		<result property="sttrNm"           column="STTR_NM" />             <!-- 진술자 명 -->
		<result property="sttrBrdt"         column="STTR_BRDT" />           <!-- 진술자 생년월일 -->
		<result property="sttrBrdtFormat"   column="STTR_BRDT_FORMAT" />    <!-- 진술자 생년월일 -->
		<result property="sttrRrno"         column="STTR_RRNO" />           <!-- 진술자 주민등록번호 -->
		<result property="sttrAddr"         column="STTR_ADDR" />           <!-- 진술자 주소 -->
		<result property="sttrDaddr"        column="STTR_DADDR" />          <!-- 진술자 상세주소 -->
		<result property="sttrZip"          column="STTR_ZIP" />            <!-- 진술자 우편번호 -->
		<result property="sttrCttpc"        column="STTR_CTTPC" />          <!-- 진술자 연락처 -->
		<result property="sttrEml"          column="STTR_EML" />            <!-- 진술자 이메일 -->
		<result property="opnnSbmsnCn"      column="OPNN_SBMSN_CN" />       <!-- 의견 제출 내용 -->
		<result property="opnnSbmsnSeCd"    column="OPNN_SBMSN_SE_CD" />    <!-- 의견 제출 구분 코드 -->
		<result property="opnnSbmsnSeNm"    column="OPNN_SBMSN_SE_NM" />    <!-- 의견 제출 구분 명 -->
		<result property="opnnSbmsnGist"    column="OPNN_SBMSN_GIST" />     <!-- 의견 제출 요지 -->
		<result property="docNo"            column="DOC_NO" />              <!-- 문서 번호 -->
		<result property="ntfctnSeCd"       column="NTFCTN_SE_CD" />        <!-- 통보 구분 코드 -->
		<result property="ntfctnSeNm"       column="NTFCTN_SE_NM" />        <!-- 통보 구분 명 -->
		<result property="picRvwOpnn"       column="PIC_RVW_OPNN" />        <!-- 담당자 검토 의견 -->
		<result property="ansCn"            column="ANS_CN" />              <!-- 답변 내용 -->
		<result property="ansYmd"           column="ANS_YMD" />             <!-- 답변 일자 -->
		<result property="ansTm"            column="ANS_TM" />              <!-- 답변 시각 -->
		<result property="opnnSbmsnSttsCd"  column="OPNN_SBMSN_STTS_CD" />  <!-- 의견 제출 상태 코드 -->
		<result property="opnnSbmsnSttsNm"  column="OPNN_SBMSN_STTS_NM" />  <!-- 의견 제출 상태 명 -->
		<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="selectList">
        SELECT OS.OPNN_ID           <!-- 의견 ID -->
             , (CONCAT(SUBSTR(OS.RCPT_NO,1,4), '-', SUBSTR(OS.RCPT_NO,5,6))) AS RCPT_NO_MASK <!-- 접수 번호 -->
             , OS.RCPT_YMD          <!-- 접수 일자 -->
             , (GET_CODE_NM('FIM029', OS.RCPT_SE_CD)) AS RCPT_SE_NM <!-- 접수 구분 명 -->
             , (GET_CODE_NM('FIM032', OS.OWNR_REL_CD)) AS OWNR_REL_NM   <!-- 소유주 관계 명 -->
             , OS.STTR_NM           <!-- 진술자 명 -->
             , (GET_BRDT_FORMAT(OS.STTR_BRDT, '.')) AS STTR_BRDT_MASK   <!-- 진술자 생년월일 마스크 -->
             , OS.STTR_RRNO         <!-- 진술자 주민등록번호 -->
             , OS.STTR_ADDR         <!-- 진술자 주소 -->
             , OS.STTR_DADDR        <!-- 진술자 상세주소 -->
             , OS.STTR_ZIP          <!-- 진술자 우편번호 -->
             , OS.STTR_CTTPC        <!-- 진술자 연락처 -->
             , OS.STTR_EML          <!-- 진술자 이메일 -->
             , OS.OPNN_SBMSN_CN     <!-- 의견 제출 내용 -->
             , (GET_CODE_NM('FIM033', OS.OPNN_SBMSN_SE_CD)) AS OPNN_SBMSN_SE_NM <!-- 의견 제출 구분 명 -->
             , OS.OPNN_SBMSN_GIST   <!-- 의견 제출 요지 -->
             , OS.DOC_NO            <!-- 문서 번호 -->
             , (GET_CODE_NM('FIM030', OS.NTFCTN_SE_CD)) AS NTFCTN_SE_NM <!-- 통보 구분 명 -->
             , OS.PIC_RVW_OPNN      <!-- 담당자 검토 의견 -->
             , OS.OPNN_SBMSN_STTS_CD <!-- 의견 제출 상태 코드 -->
             , (GET_CODE_NM('FIM031', OS.OPNN_SBMSN_STTS_CD)) AS OPNN_SBMSN_STTS_NM <!-- 의견 제출 상태 명 -->
             , OS.ANS_YMD           <!-- 답변 일자 -->
             , (CONCAT(OS.ANS_YMD, OS.ANS_TM)) AS ANS_YMD_TM    <!-- 답변 일시 -->
             , OS.ANS_CN            <!-- 답변 내용 -->
             , OS.DEL_YN            <!-- 삭제 여부 -->
             , OS.REG_DT            <!-- 등록 일시 -->
             , OS.RGTR              <!-- 등록자 -->
             , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = OS.RGTR) AS RGTR_NM <!-- 등록자 명 -->
             , OS.MDFCN_DT          <!-- 수정 일시 -->
             , OS.MDFR              <!-- 수정자 -->
             , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = OS.MDFR) AS MDFR_NM <!-- 수정자 명 -->
             , C.CRDN_ID            <!-- 단속 ID -->
             , C.SGG_CD             <!-- 시군구 코드 -->
             , C.TASK_SE_CD         <!-- 업무 구분 코드 -->
             , (GET_CODE_NM('FIM054', C.TASK_SE_CD)) AS TASK_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.FFNLG_CRDN_AMT     <!-- 과태료 단속 금액 -->
             , C.FFNLG_AMT          <!-- 과태료 금액 -->
             , C.CRDN_STTS_CD       <!-- 단속 상태 코드 -->
             , (GET_CODE_NM('FIM010', C.CRDN_STTS_CD)) AS CRDN_STTS_NM  <!-- 단속 상태 명 -->
             , (GET_CODE_NM('FIM002', CA.CRDN_SE_CD)) AS CRDN_SE_NM     <!-- 단속 구분 명 -->
             , (GET_CODE_NM('FIM007', CA.CRDN_SPAREA_CD)) AS CRDN_SPAREA_NM <!-- 단속 특별구역 명 -->
             , (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          <!-- 상세 주소 -->
             , R.RDCT_ID            <!-- 감경 ID -->
             , R.RDCT_RSN_CD        <!-- 감경 사유 코드 -->
             , (CASE WHEN R.RDCT_AMT IS NOT NULL THEN R.RDCT_AMT
                     ELSE (SELECT C.FFNLG_CRDN_AMT*T.WKSN_RDCRT/100
                             FROM TB_TASK T
                            WHERE C.SGG_CD=T.SGG_CD AND C.TASK_SE_CD=T.TASK_SE_CD AND T.USE_YN='Y')
                END) AS RDCT_AMT    <!-- 감경 금액 -->
          FROM TB_OPNN_SBMSN      OS
         INNER JOIN TB_CRDN       C   ON (OS.CRDN_ID = C.CRDN_ID)
         INNER JOIN TB_CRDN_ADI   CA  ON (C.CRDN_ID  = CA.CRDN_ID)
    LEFT OUTER 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)
    LEFT OUTER JOIN TB_RDCT       R   ON (C.CRDN_ID  = R.CRDN_ID   AND R.DEL_YN = 'N')
	</sql>

	<select id="selectOpnnSbmsnList" parameterType="map" resultType="dataobject">/* 의견제출 대장 목록 조회(opnnSbmsnMapper.selectOpnnSbmsnList) */
        <include refid="utility.paging-prefix" />
        <include refid="selectList" />
        <where>
            <if test="schRcptYmdFrom != null">
           AND OS.RCPT_YMD <![CDATA[>=]]> #{schRcptYmdFrom}     <!-- 접수 일자 시작 -->
            </if>
            <if test="schRcptYmdTo != null">
           AND OS.RCPT_YMD <![CDATA[<=]]> #{schRcptYmdTo}       <!-- 접수 일자 종료 -->
            </if>
            <if test="schAnsYmdFrom != null">
           AND OS.ANS_YMD <![CDATA[>=]]> #{schAnsYmdFrom}       <!-- 답변 일자 시작 -->
            </if>
            <if test="schAnsYmdTo != null">
           AND OS.ANS_YMD <![CDATA[<=]]> #{schAnsYmdTo}         <!-- 답변 일자 종료 -->
            </if>
            <if test="schSttrNm != null">
           AND OS.STTR_NM   =  #{schSttrNm} <!-- 진술자 명 -->
            </if>
            <if test="schOpnnSbmsnSttsCd != null">
           AND OS.OPNN_SBMSN_STTS_CD=  #{schOpnnSbmsnSttsCd}    <!-- 의견 제출 상태 코드 -->
            </if>
            <if test="schOpnnSbmsnSeCd != null">
           AND OS.OPNN_SBMSN_SE_CD  =  #{schOpnnSbmsnSeCd}      <!-- 의견 제출 구분 코드 -->
            </if>
            <if test="schNtfctnSeCd != null">
           AND OS.NTFCTN_SE_CD      =  #{schNtfctnSeCd}         <!-- 통보 구분 코드 -->
            </if>
            <if test="delYn != null">
           AND OS.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="schRtpyrNm != null">
           AND P.RTPYR_NM   =  #{schRtpyrNm}    <!-- 납부자 명 -->
            </if>
            <choose>
                <when test="schRegDateOpt == 'regDt'">
                    <if test="schRegDateFrom != null">
           AND OS.REG_DT <![CDATA[>=]]> CONCAT(#{schRegDateFrom},'000000')      <!-- 등록 일자 시작 -->
                    </if>
                    <if test="schRegDateTo != null">
           AND OS.REG_DT <![CDATA[<=]]> CONCAT(#{schRegDateTo},'235959')        <!-- 등록 일자 종료 -->
                    </if>
                </when>
                <when test="schRegDateOpt == 'mdfcnDt'">
                    <if test="schRegDateFrom != null">
           AND OS.MDFCN_DT <![CDATA[>=]]> CONCAT(#{schRegDateFrom},'000000')    <!-- 수정 일자 시작 -->
                    </if>
                    <if test="schRegDateTo != null">
           AND OS.MDFCN_DT <![CDATA[<=]]> CONCAT(#{schRegDateTo},'235959')      <!-- 수정 일자 종료 -->
                    </if>
                </when>
                <otherwise>
                </otherwise>
            </choose>
            <choose>
                <when test="schRgtrOpt == 'rgtr'">
                    <if test="schRgtrCd != null">
           AND OS.RGTR      =  #{schRgtrCd}     <!-- 등록자 코드 -->
                    </if>
                </when>
                <when test="schRgtrOpt == 'mdfr'">
                    <if test="schRgtrCd != null">
           AND OS.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 == 'rcptYmd'"> OS.RCPT_YMD </when>
                            <when test="by == 'rcptNo'"> OS.RCPT_NO </when>
                            <when test="by == 'rcptSeCd'"> OS.RCPT_SE_CD </when>
                            <when test="by == 'ntfctnSeCd'"> OS.NTFCTN_SE_CD </when>
                            <when test="by == 'sttrNm'"> OS.STTR_NM </when>
                            <when test="by == 'opnnSbmsnSttsCd'"> OS.OPNN_SBMSN_STTS_CD </when>
                            <when test="by == 'opnnSbmsnSeCd'"> OS.OPNN_SBMSN_SE_CD </when>
                            <when test="by == 'opnnSbmsnGist'"> OS.OPNN_SBMSN_GIST </when>
                            <when test="by == 'docNo'"> OS.DOC_NO </when>
                            <when test="by == 'ansYmd'"> OS.ANS_YMD </when>
                            <when test="by == 'ansCn'"> OS.ANS_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 == 'ffnlgAmt'"> C.FFNLG_AMT </when>
                            <when test="by == 'advntceAmt'"> C.ADVNTCE_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>
           AND C.SGG_CD     =  #{sggCd}     <!-- 시군구 코드 -->
           AND C.TASK_SE_CD =  #{taskSeCd}  <!-- 업무 구분 코드 -->
           AND C.DEL_YN     =  'N'          <!-- 단속 삭제 여부 -->
        </where>
        <include refid="utility.orderBy" />
        <include refid="utility.paging-suffix" />
	</select>

	<sql id="select">
        SELECT C.CRDN_ID            <!-- 단속 ID -->
             , C.SGG_CD             <!-- 시군구 코드 -->
             , C.TASK_SE_CD         <!-- 업무 구분 코드 -->
             , 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_PLC           <!-- 단속 장소 -->
             , C.CRDN_STTS_CD       <!-- 단속 상태 코드 -->
             , (GET_CODE_NM('FIM010', C.CRDN_STTS_CD)) AS CRDN_STTS_NM  <!-- 단속 상태 명 -->
             , C.CRDN_STTS_CHG_DT   <!-- 단속 상태 변경 일시 -->
             , P.RTPYR_ID           <!-- 납부자 ID -->
             , P.RTPYR_NO           <!-- 납부자 번호 -->
             , P.RTPYR_NM           <!-- 납부자 명 -->
             , P.RTPYR_TELNO        <!-- 납부자 전화번호 -->
             , P.RTPYR_MBL_TELNO    <!-- 납부자 휴대 전화번호 -->
             , P.RTPYR_EML          <!-- 납부자 이메일 -->
             , P.RTPYR_BRDT         <!-- 납부자 생년월일 -->
             , PA.ZIP               <!-- 우편번호 -->
             , PA.ADDR              <!-- 주소 -->
             , PA.DTL_ADDR          <!-- 상세 주소 -->
             , OS.OPNN_ID           <!-- 의견 ID -->
             , OS.RCPT_NO           <!-- 접수 번호 -->
             , (CONCAT(SUBSTR(OS.RCPT_NO,1,4), '-', SUBSTR(OS.RCPT_NO,5,6))) AS RCPT_NO_MASK    <!-- 접수 번호 -->
             , OS.RCPT_YMD          <!-- 접수 일자 -->
             , OS.RCPT_SE_CD        <!-- 접수 구분 코드 -->
             , (GET_CODE_NM('FIM029', OS.RCPT_SE_CD)) AS RCPT_SE_NM <!-- 접수 구분 코드 -->
             , OS.OWNR_REL_CD       <!-- 소유주 관계 코드 -->
             , (GET_CODE_NM('FIM032', OS.OWNR_REL_CD)) AS OWNR_REL_NM   <!-- 소유주 관계 코드 -->
             , OS.STTR_NM           <!-- 진술자 명 -->
             , OS.STTR_BRDT         <!-- 진술자 생년월일 -->
             , (GET_BRDT_FORMAT(OS.STTR_BRDT, '.')) AS STTR_BRDT_MASK   <!-- 진술자 생년월일 -->
             , OS.STTR_RRNO         <!-- 진술자 주민등록번호 -->
             , OS.STTR_ADDR         <!-- 진술자 주소 -->
             , OS.STTR_DADDR        <!-- 진술자 상세주소 -->
             , OS.STTR_ZIP          <!-- 진술자 우편번호 -->
             , OS.STTR_CTTPC        <!-- 진술자 연락처 -->
             , OS.STTR_EML          <!-- 진술자 이메일 -->
             , OS.OPNN_SBMSN_CN     <!-- 의견 제출 내용 -->
             , OS.OPNN_SBMSN_SE_CD  <!-- 의견 제출 구분 코드 -->
             , (GET_CODE_NM('FIM033', OS.OPNN_SBMSN_SE_CD)) AS OPNN_SBMSN_SE_NM <!-- 의견 제출 구분 명 -->
             , OS.OPNN_SBMSN_GIST   <!-- 의견 제출 요지 -->
             , OS.DOC_NO            <!-- 문서 번호 -->
             , OS.NTFCTN_SE_CD      <!-- 통보 구분 코드 -->
             , (GET_CODE_NM('FIM030', OS.NTFCTN_SE_CD)) AS NTFCTN_SE_NM <!-- 통보 구분 코드 -->
             , OS.PIC_RVW_OPNN      <!-- 담당자 검토 의견 -->
             , OS.OPNN_SBMSN_STTS_CD <!-- 의견 제출 상태 코드 -->
             , (GET_CODE_NM('FIM031', OS.OPNN_SBMSN_STTS_CD)) AS OPNN_SBMSN_STTS_NM <!-- 의견 제출 상태 명 -->
             , OS.ANS_YMD           <!-- 답변 일자 -->
             , OS.ANS_TM            <!-- 답변 시각 -->
             , (CONCAT(OS.ANS_YMD, OS.ANS_TM)) AS ANS_YMD_TM    <!-- 답변 일시 -->
             , OS.ANS_CN            <!-- 답변 내용 -->
             , OS.REG_DT            <!-- 등록 일시 -->
             , OS.RGTR              <!-- 등록자 -->
             , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = OS.RGTR) AS RGTR_NM <!-- 등록자 명 -->
             , OS.MDFCN_DT          <!-- 수정 일시 -->
             , OS.MDFR              <!-- 수정자 -->
             , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = OS.MDFR) AS MDFR_NM <!-- 수정자 명 -->
             , R.RDCT_ID
             , R.RDCT_RSN_CD
             , (CASE WHEN R.RDCT_AMT IS NOT NULL THEN R.RDCT_AMT
                     ELSE (SELECT C.FFNLG_CRDN_AMT*T.WKSN_RDCRT/100
                             FROM TB_TASK T
                            WHERE C.SGG_CD=T.SGG_CD AND C.TASK_SE_CD=T.TASK_SE_CD AND T.USE_YN='Y')
                END) AS RDCT_AMT    <!-- 감경 금액 -->
          FROM TB_CRDN            C
    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)
    LEFT OUTER JOIN TB_OPNN_SBMSN OS ON (C.CRDN_ID  = OS.CRDN_ID  AND OS.DEL_YN = 'N')
    LEFT OUTER JOIN TB_RDCT       R  ON (C.CRDN_ID  = R.CRDN_ID   AND R.DEL_YN  = 'N')
	</sql>

	<select id="selectOpnnSbmsns" parameterType="map" resultType="dataobject">/* 의견제출 대장 객체 가져오기(opnnSbmsnMapper.selectOpnnSbmsns) */
        <include refid="select" />
        <where>
            <if test="opnnIds != null">
           AND OS.OPNN_ID   IN (        <!-- 의견제출 ID -->
                <foreach collection="opnnIds" item="opnnId" separator=","> #{opnnId} </foreach>
               )
            </if>
            <if test="opnnId != null">
           AND OS.OPNN_ID   = #{opnnId} <!-- 의견제출 ID -->
            </if>
            <if test="crdnId != null">
           AND C.CRDN_ID    = #{crdnId} <!-- 단속 ID -->
           AND C.DEL_YN     = 'N'       <!-- 단속 삭제 여부 -->
            </if>
        </where>
        <include refid="utility.orderBy" />
	</select>

	<select id="selectOpnnSbmsnDlbrDecsns" parameterType="map" resultType="dataobject">/* 의견제출 심의 의결서 가져오기(opnnSbmsnMapper.selectOpnnSbmsnDlbrDecsns) */
        SELECT OS.OPNN_ID           <!-- 의견 ID -->
             , OS.RCPT_NO           <!-- 접수 번호 -->
             , (CONCAT(SUBSTR(OS.RCPT_NO,1,4), '-', SUBSTR(OS.RCPT_NO,5,6))) AS RCPT_NO_MASK    <!-- 접수 번호 -->
             , OS.RCPT_YMD          <!-- 접수 일자 -->
             , (GET_MASK_DATE(OS.RCPT_YMD, '-')) AS RCPT_YMD_MASK   <!-- 접수 일자 마스크 -->
             , OS.RCPT_SE_CD        <!-- 접수 구분 코드 -->
             , OS.OWNR_REL_CD       <!-- 소유주 관계 코드 -->
             , (GET_CODE_NM('FIM032', OS.OWNR_REL_CD)) AS OWNR_REL_NM   <!-- 소유주 관계 코드 -->
             , OS.STTR_NM           <!-- 진술자 명 -->
             , OS.STTR_BRDT         <!-- 진술자 생년월일 -->
             , (GET_BRDT_FORMAT(OS.STTR_BRDT, '.')) AS STTR_BRDT_MASK   <!-- 진술자 생년월일 마스크 -->
             , OS.STTR_ZIP          <!-- 진술자 우편번호 -->
             , OS.STTR_CTTPC        <!-- 진술자 연락처 -->
             , OS.STTR_EML          <!-- 진술자 이메일 -->
             , OS.OPNN_SBMSN_CN     <!-- 의견 제출 내용 -->
             , OS.OPNN_SBMSN_SE_CD  <!-- 의견 제출 구분 코드 -->
             , (GET_CODE_NM('FIM033', OS.OPNN_SBMSN_SE_CD)) AS OPNN_SBMSN_SE_NM <!-- 의견 제출 구분 명 -->
             , OS.OPNN_SBMSN_GIST   <!-- 의견 제출 요지 -->
             , OS.DOC_NO            <!-- 문서 번호 -->
             , OS.NTFCTN_SE_CD      <!-- 통보 구분 코드 -->
             , OS.PIC_RVW_OPNN      <!-- 담당자 검토 의견 -->
             , OS.OPNN_SBMSN_STTS_CD <!-- 의견 제출 상태 코드 -->
             , (GET_CODE_NM('FIM031', OS.OPNN_SBMSN_STTS_CD)) AS OPNN_SBMSN_STTS_NM <!-- 의견 제출 상태 명 -->
             , (CONCAT(OS.STTR_ADDR, ' ', OS.STTR_DADDR)) AS STTR_WHOL_ADDR <!-- 진술자 전체 주소 -->
             , C.CRDN_ID            <!-- 단속 ID -->
             , C.SGG_CD             <!-- 시군구 코드 -->
             , C.TASK_SE_CD         <!-- 업무 구분 코드 -->
             , (GET_CODE_NM('FIM054', C.TASK_SE_CD)) AS TASK_SE_NM  <!-- 업무 구분 명 -->
             , (GET_MASK_DATETIME(C.CRDN_YMD, '-', C.CRDN_TM, ':')) AS CRDN_YMD_TM_MASK <!-- 단속 일시 마스크 -->
             , C.VHRNO              <!-- 차량번호 -->
             , C.CRDN_STDG_NM       <!-- 단속 법정동 명 -->
             , C.CRDN_ROAD_NM       <!-- 단속 도로 명 -->
             , C.CRDN_PLC           <!-- 단속 장소 -->
             , C.FFNLG_CRDN_AMT     <!-- 과태료 단속 금액 -->
             , C.FFNLG_AMT          <!-- 과태료 금액 -->
             , C.CRDN_STTS_CD       <!-- 단속 상태 코드 -->
             , (GET_CODE_NM('FIM010', C.CRDN_STTS_CD)) AS CRDN_STTS_NM  <!-- 단속 상태 명 -->
             , C.CRDN_STTS_CHG_DT   <!-- 단속 상태 변경 일시 -->
             , DLBR_MBR_JBGD1       <!-- 심의 회원 직급1 -->
             , DLBR_MBR_NM1         <!-- 심의 회원 명1 -->
             , DLBR_MBR_JBGD2       <!-- 심의 회원 직급2 -->
             , DLBR_MBR_NM2         <!-- 심의 회원 명2 -->
             , DLBR_MBR_JBGD3       <!-- 심의 회원 직급3 -->
             , DLBR_MBR_NM3         <!-- 심의 회원 명3 -->
             , DLBR_MBR_JBGD4       <!-- 심의 회원 직급4 -->
             , DLBR_MBR_NM4         <!-- 심의 회원 명4 -->
             , DLBR_MBR_JBGD5       <!-- 심의 회원 직급5 -->
             , DLBR_MBR_NM5         <!-- 심의 회원 명5 -->
             , DLBR_MBR_JBGD6       <!-- 심의 회원 직급6 -->
             , DLBR_MBR_NM6         <!-- 심의 회원 명6 -->
             , DLBR_MBR_JBGD7       <!-- 심의 회원 직급7 -->
             , DLBR_MBR_NM7         <!-- 심의 회원 명7 -->
          FROM TB_OPNN_SBMSN         OS
    LEFT OUTER JOIN TB_CRDN          C   ON (OS.CRDN_ID = C.CRDN_ID)
    LEFT OUTER JOIN TB_OPNN_DLBR_MBR ODM ON (C.SGG_CD = ODM.SGG_CD AND C.TASK_SE_CD = ODM.TASK_SE_CD)
         WHERE OS.OPNN_ID   IN (
            <foreach collection="opnnIds" item="opnnId" separator=","> #{opnnId} </foreach>
               )
           AND OS.DEL_YN    =  'N'
        <include refid="utility.orderBy" />
	</select>

	<insert id="insertOpnnSbmsn" parameterType="cokr.xit.fims.excl.OpnnSbmsn">/* 의견제출 대장 등록(opnnSbmsnMapper.insertOpnnSbmsn) */
        <selectKey resultType="hashmap" keyProperty="opnnId,rcptNo" keyColumn="NEW_ID,NEW_RCPT_NO" order="BEFORE">
            SELECT CONCAT(#{sggCd}, DATE_FORMAT(CURRENT_DATE, '%Y'), LPAD(CAST(IFNULL(MAX(SUBSTRING(OPNN_ID, 10)) + 1, 1) AS INT), 11, '0')) AS NEW_ID
                 , (SELECT CONCAT(DATE_FORMAT(CURRENT_DATE, '%Y'), LPAD(CAST(IFNULL(MAX(SUBSTRING(RCPT_NO, 5)) + 1, 1) AS INT), 6, '0'))
                      FROM TB_OPNN_SBMSN
                     WHERE OPNN_ID LIKE CONCAT(#{sggCd}, DATE_FORMAT(CURRENT_DATE, '%Y'), '%')
                       AND RCPT_NO LIKE CONCAT(DATE_FORMAT(CURRENT_DATE, '%Y'), '%'))           AS NEW_RCPT_NO
              FROM TB_OPNN_SBMSN
             WHERE OPNN_ID LIKE CONCAT(#{sggCd}, DATE_FORMAT(CURRENT_DATE, '%Y'), '%')
        </selectKey>
        INSERT
          INTO TB_OPNN_SBMSN (
               OPNN_ID              <!-- 의견 ID -->
             , CRDN_ID              <!-- 단속 ID -->
             , RCPT_NO              <!-- 접수 번호 -->
             , RCPT_YMD             <!-- 접수 일자 -->
             , RCPT_SE_CD           <!-- 접수 구분 코드 -->
             , OWNR_REL_CD          <!-- 소유주 관계 코드 -->
             , STTR_NM              <!-- 진술자 명 -->
             , STTR_BRDT            <!-- 진술자 생년월일 -->
             , STTR_RRNO            <!-- 진술자 주민등록번호 -->
             , STTR_ADDR            <!-- 진술자 주소 -->
             , STTR_DADDR           <!-- 진술자 상세주소 -->
             , STTR_ZIP             <!-- 진술자 우편번호 -->
             , STTR_CTTPC           <!-- 진술자 연락처 -->
             , STTR_EML             <!-- 진술자 이메일 -->
             , OPNN_SBMSN_CN        <!-- 의견 제출 내용 -->
             , OPNN_SBMSN_SE_CD     <!-- 의견 제출 구분 코드 -->
             , OPNN_SBMSN_GIST      <!-- 의견 제출 요지 -->
             , DOC_NO               <!-- 문서 번호 -->
             , NTFCTN_SE_CD         <!-- 통보 구분 코드 -->
             , PIC_RVW_OPNN         <!-- 담당자 검토 의견 -->
             , ANS_CN               <!-- 답변 내용 -->
             , ANS_YMD              <!-- 답변 일자 -->
             , ANS_TM               <!-- 답변 시각 -->
             , OPNN_SBMSN_STTS_CD   <!-- 의견 제출 상태 코드 -->
             , DEL_YN               <!-- 삭제 여부 -->
             , REG_DT               <!-- 등록 일시 -->
             , RGTR                 <!-- 등록자 -->
             , MDFCN_DT             <!-- 수정 일시 -->
             , MDFR                 <!-- 수정자 -->
        )
        VALUES (
               #{opnnId}            <!-- 의견 ID -->
             , #{crdnId}            <!-- 단속 ID -->
             , #{rcptNo}            <!-- 접수 번호 -->
             , #{rcptYmd}           <!-- 접수 일자 -->
             , #{rcptSeCd}          <!-- 접수 구분 코드 -->
             , #{ownrRelCd}         <!-- 소유주 관계 코드 -->
             , #{sttrNm}            <!-- 진술자 명 -->
             , #{sttrBrdt}          <!-- 진술자 생년월일 -->
             , #{sttrRrno}          <!-- 진술자 주민등록번호 -->
             , #{sttrAddr}          <!-- 진술자 주소 -->
             , #{sttrDaddr}         <!-- 진술자 상세주소 -->
             , #{sttrZip}           <!-- 진술자 우편번호 -->
             , #{sttrCttpc}         <!-- 진술자 연락처 -->
             , #{sttrEml}           <!-- 진술자 이메일 -->
             , #{opnnSbmsnCn}       <!-- 의견 제출 내용 -->
             , #{opnnSbmsnSeCd}     <!-- 의견 제출 구분 코드 -->
             , #{opnnSbmsnGist}     <!-- 의견 제출 요지 -->
             , #{docNo}             <!-- 문서 번호 -->
             , #{ntfctnSeCd}        <!-- 통보 구분 코드 -->
             , #{picRvwOpnn}        <!-- 담당자 검토 의견 -->
             , #{ansCn}             <!-- 답변 내용 -->
             , #{ansYmd}            <!-- 답변 일시 -->
             , #{ansTm}             <!-- 답변 일시 -->
             , '00'                 <!-- 의견 제출 상태 코드 -->
             , 'N'                  <!-- 삭제 여부 -->
             , <include refid="utility.now" />  <!-- 등록 일시 -->
             , #{createdBy}         <!-- 등록자 -->
             , <include refid="utility.now" />  <!-- 수정 일시 -->
             , #{modifiedBy}        <!-- 수정자 -->
        )
	</insert>

	<update id="updateOpnnSbmsn" parameterType="cokr.xit.fims.excl.OpnnSbmsn">/* 의견제출 대장 수정(opnnSbmsnMapper.updateOpnnSbmsn) */
        UPDATE TB_OPNN_SBMSN
           SET RCPT_NO          = #{rcptNo}         <!-- 접수 번호 -->
             , RCPT_YMD         = #{rcptYmd}        <!-- 접수 일자 -->
             , RCPT_SE_CD       = #{rcptSeCd}       <!-- 접수 구분 코드 -->
             , OWNR_REL_CD      = #{ownrRelCd}      <!-- 소유주 관계 코드 -->
             , STTR_NM          = #{sttrNm}         <!-- 진술자 명 -->
             , STTR_BRDT        = #{sttrBrdt}       <!-- 진술자 생년월일 -->
             , STTR_RRNO        = #{sttrRrno}       <!-- 진술자 주민등록번호 -->
             , STTR_ADDR        = #{sttrAddr}       <!-- 진술자 주소 -->
             , STTR_DADDR       = #{sttrDaddr}      <!-- 진술자 상세주소 -->
             , STTR_ZIP         = #{sttrZip}        <!-- 진술자 우편번호 -->
             , STTR_CTTPC       = #{sttrCttpc}      <!-- 진술자 연락처 -->
             , STTR_EML         = #{sttrEml}        <!-- 진술자 이메일 -->
             , OPNN_SBMSN_CN    = #{opnnSbmsnCn}    <!-- 의견 제출 내용 -->
             , OPNN_SBMSN_SE_CD = #{opnnSbmsnSeCd}  <!-- 의견 제출 구분 코드 -->
             , OPNN_SBMSN_GIST  = #{opnnSbmsnGist}  <!-- 의견 제출 요지 -->
             , PIC_RVW_OPNN     = #{picRvwOpnn}     <!-- 담당자 검토 의견 -->
             , MDFCN_DT         = <include refid="utility.now" />   <!-- 수정 일시 -->
             , MDFR             = #{modifiedBy}     <!-- 수정자 -->
         WHERE OPNN_ID          = #{opnnId}         <!-- 의견 ID -->
           AND DEL_YN           = 'N'
	</update>

	<update id="updateOpnnSbmsnAnswer" parameterType="cokr.xit.fims.excl.OpnnSbmsn">/* 의견제출 대장 답변 수정(opnnSbmsnMapper.updateOpnnSbmsnAnswer) */
        UPDATE TB_OPNN_SBMSN
           SET DOC_NO            = #{docNo}             <!-- 문서 번호 -->
             , NTFCTN_SE_CD      = #{ntfctnSeCd}        <!-- 통보 구분 코드 -->
             , PIC_RVW_OPNN      = #{picRvwOpnn}        <!-- 담당자 검토 의견 -->
             , OPNN_SBMSN_STTS_CD= #{opnnSbmsnSttsCd}   <!-- 의견 제출 상태 코드 -->
             , ANS_YMD           = #{ansYmd}            <!-- 답변 일자 -->
             , ANS_TM            = #{ansTm}             <!-- 답변 시각 -->
             , ANS_CN            = #{ansCn}             <!-- 답변 내용 -->
             , MDFCN_DT          = <include refid="utility.now" />  <!-- 수정 일시 -->
             , MDFR              = #{modifiedBy}        <!-- 수정자 -->
         WHERE OPNN_ID           = #{opnnId}            <!-- 의견 ID -->
           AND DEL_YN            = 'N'
	</update>

	<update id="deleteOpnnSbmsn" parameterType="cokr.xit.fims.excl.OpnnSbmsn">/* 의견제출 대장 삭제(opnnSbmsnMapper.deleteOpnnSbmsn) */
        UPDATE TB_OPNN_SBMSN
           SET DEL_YN       = 'Y'
             , DEL_DT       = <include refid="utility.now" />   <!-- 삭제 일시 -->
             , DLTR         = #{modifiedBy}     <!-- 삭제자 -->
             , DEL_RSN      = #{delRsn}         <!-- 삭제 사유 -->
         WHERE OPNN_ID      = #{opnnId}         <!-- 의견 ID -->
           AND DEL_YN       = 'N'
	</update>

	<update id="updateCrdnOpnnSbmsnYn" parameterType="cokr.xit.fims.crdn.Crdn">/* 단속 대장 의견제출여부 수정(opnnSbmsnMapper.updateCrdnOpnnSbmsnYn) */
        UPDATE TB_CRDN
           SET OPNN_SBMSN_YN= #{opnnSbmsnYn}    <!-- 의견 제출 여부 -->
             , MDFCN_DT     = <include refid="utility.now" />   <!-- 수정 일시 -->
             , MDFR         = #{modifiedBy}     <!-- 수정자 -->
         WHERE CRDN_ID      = #{crdnId}         <!-- 단속 ID -->
           AND DEL_YN       = 'N'
	</update>

</mapper>