<?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.interfaces.epost.dao.EmailResultMapper">

<!-- 전자우편 신청 정보 매퍼
 ========== 변경 이력 ==========
 2023-07-03	mjkhan 최초 작성
 ============================ -->

<insert id="insertReceptionResult"  parameterType="cokr.xit.interfaces.epost.ReceptionResult">/* 전자우편 신청 수신 결과 등록(emailResultMapper.insertReceptionResult) */
<selectKey resultType="string" keyProperty="rcptnRsltId" order="BEFORE">
SELECT IFNULL(MAX(RCPTN_RSLT_ID) + 1, CONCAT(TODAY, '0000001')) NEW_ID
  FROM TB_EPOST_RCPTN_RSLT A, (<include refid="utility.selectToday" />) B
 WHERE RCPTN_RSLT_ID LIKE CONCAT(TODAY, '%')</selectKey>
INSERT INTO TB_EPOST_RCPTN_RSLT (
       RCPTN_RSLT_ID <!-- 수신 결과 ID -->
     , OUTSIDUSERID  <!-- 연계기관코드 -->
     , INIT_TIME     <!-- 수신일시 -->
     , RECV_FILENAME <!-- 수신파일명 -->
     , RELDIVKEY     <!-- 연계키 -->
     , RECPRSNSEQ    <!-- 수취인순번 -->
     , REGINO        <!-- 등기번호 -->
     , ATTACHFILENM  <!-- 첨부파일명 -->
     , JUNGHAP1      <!-- 1차검증 -->
     , JUNGHAP2      <!-- 2차검증 -->
     , JUNGHAP3      <!-- 3차검증 -->
     , CODE          <!-- 상태코드 -->
     , MSG           <!-- 메시지 -->
     , REG_DT        <!-- 등록 일시 -->
     , RGTR          <!-- 등록자 -->
)
SELECT #{rcptnRsltId}  <!-- 수신 결과 ID -->
     , #{outsiduserid} <!-- 연계기관코드 -->
     , #{initTime}     <!-- 수신일시 -->
     , #{recvFilename} <!-- 수신파일명 -->
     , #{reldivkey}    <!-- 연계키 -->
     , #{recprsnseq}   <!-- 수취인순번 -->
     , #{regino}       <!-- 등기번호 -->
     , #{attachfilenm} <!-- 첨부파일명 -->
     , #{junghap1}     <!-- 1차검증 -->
     , #{junghap2}     <!-- 2차검증 -->
     , #{junghap3}     <!-- 3차검증 -->
     , #{code}         <!-- 상태코드 -->
     , #{msg}          <!-- 메시지 -->
     , #{createdAt}    <!-- 등록 일시 -->
     , #{createdBy}    <!-- 등록자 -->
 WHERE NOT EXISTS (
       SELECT 1
         FROM TB_EPOST_RCPTN_RSLT
        WHERE RELDIVKEY = #{reldivkey}
          AND REGINO = #{regino}
 )</insert>

<insert id="insertRegistrationResult" parameterType="cokr.xit.interfaces.epost.RegistrationResult">/* 전자우편 신청 접수 결과 등록(emailResultMapper.insertRegistrationResult) */
<selectKey resultType="string" keyProperty="rcptRsltId" order="BEFORE">
SELECT IFNULL(MAX(RCPT_RSLT_ID) + 1, CONCAT(TODAY, '0000001')) NEW_ID
  FROM TB_EPOST_RCPT_RSLT A, (<include refid="utility.selectToday" />) B
 WHERE RCPT_RSLT_ID LIKE CONCAT(TODAY, '%')</selectKey>
INSERT INTO TB_EPOST_RCPT_RSLT (
       RCPT_RSLT_ID <!-- 접수 결과 ID -->
     , CON_ORG      <!-- 외부기관구분코드 -->
     , RELORSECT_CD <!-- 결제부서코드 -->
     , RELETCDATA   <!-- 발송인별추가데이터 -->
     , EXTRI_REGYMD <!-- 기관발송일자 -->
     , RCEPT_YMD    <!-- 접수일자 -->
     , RCEPT_ID     <!-- 접수우체국국기호 -->
     , DIV_KB       <!-- 취급구분 -->
     , RCEPT_CNT    <!-- 발송수량 -->
     , RCEPT_AMT    <!-- 결제금액 -->
     , USEFEE_AMT   <!-- 제작수수료 -->
     , TOTPOST_PRC  <!-- 우편요금 -->
     , JOB_CD       <!-- 작업 코드 -->
     , REG_DT       <!-- 등록 일시 -->
     , RGTR         <!-- 등록자 -->
)
SELECT #{rcptRsltId}  <!-- 접수 결과 ID -->
     , #{conOrg}      <!-- 외부기관구분코드 -->
     , #{relorsectCd} <!-- 결제부서코드 -->
     , #{reletcdata}  <!-- 발송인별추가데이터 -->
     , #{extriRegymd} <!-- 기관발송일자 -->
     , #{rceptYmd}    <!-- 접수일자 -->
     , #{rceptId}     <!-- 접수우체국국기호 -->
     , #{divKb}       <!-- 취급구분 -->
     , #{rceptCnt}    <!-- 발송수량 -->
     , #{rceptAmt}    <!-- 결제금액 -->
     , #{usefeeAmt}   <!-- 제작수수료 -->
     , #{totpostPrc}  <!-- 우편요금 -->
     , #{jobCd}       <!-- 작업 코드 -->
     , #{createdAt}   <!-- 등록 일시 -->
     , #{createdBy}   <!-- 등록자 -->
  FROM DUAL
 WHERE NOT EXISTS ( <!-- RELETCDATA가 등록되어 있는 것은 제외 -->
       SELECT 1
         FROM TB_EPOST_RCPT_RSLT
        WHERE RELETCDATA = #{reletcdata}
 )</insert>

<update id="updateRegistrationResult" parameterType="map">/* 전자우편 신청 접수 결과(jobCd) 업데이트(emailResultMapper.updateRegistrationResult) */
UPDATE TB_EPOST_RCPT_RSLT A
     , TB_EPOST_RCPT_REG B
   SET A.JOB_CD = SUBSTR(B.JOB_CD, 2)
 WHERE A.RELETCDATA IN (<foreach collection="conKeys" item="conKey" separator=",">#{conKey}</foreach>)
   AND A.RELETCDATA = B.CON_KEY</update>

<insert id="insertProductionResult" parameterType="cokr.xit.interfaces.epost.ProductionResult">/* 전자우편 제작 결과 등록(emailResultMapper.insertProductionResult) */
INSERT INTO TB_EPOST_MAKE_RSLT (
       CON_KEY    <!-- 외부연계식별키 -->
     , RGST_NMBR  <!-- 등기 번호 -->
     , RELETCDATA <!-- 발송인별추가데이터 -->
     , DATA_CD    <!-- 제작결과 -->
     , MAIL_CNT   <!-- 내용문매수 -->
     , REG_DT     <!-- 등록 일시 -->
     , RGTR       <!-- 등록자 -->
)
SELECT #{conKey}      <!-- 외부연계식별키 -->
     , #{rgstNmbr}    <!-- 등기 번호 -->
     , #{reletcdata}  <!-- 발송인별추가데이터 -->
     , #{dataCd}      <!-- 제작결과 -->
     , #{mailCnt}     <!-- 내용문매수 -->
     , #{createdAt}   <!-- 등록 일시 -->
     , #{createdBy}   <!-- 등록자 -->
  FROM DUAL
 WHERE NOT EXISTS ( <!-- CON_KEY, RGST_NMBR가 등록되어 있는 것은 제외 -->
       SELECT 1
         FROM TB_EPOST_MAKE_RSLT
        WHERE CON_KEY = #{conKey}
          AND RGST_NMBR = #{rgstNmbr}
 )</insert>

<insert id="insertDeliveryResult" parameterType="cokr.xit.interfaces.epost.DeliveryResult">/* 전자우편 배달 결과 등록(emailResultMapper.insertDeliveryResult) */
<selectKey resultType="string" keyProperty="dlvrRsltId" order="BEFORE">
SELECT IFNULL(MAX(DLVR_RSLT_ID) + 1, CONCAT(TODAY, '0000001')) NEW_ID
  FROM TB_EPOST_DLVR_RSLT A, (<include refid="utility.selectToday" />) B
 WHERE DLVR_RSLT_ID LIKE CONCAT(TODAY, '%')</selectKey>
INSERT INTO TB_EPOST_DLVR_RSLT (
       DLVR_RSLT_ID      <!-- 배달 결과 ID -->
     , CON_KEY           <!-- 외부연계식별키 -->
     , OUTSIDUSERID      <!-- 외부기관구분코드 -->
     , RELETCDATA        <!-- 발송인별추가데이터 -->
     , REGINO            <!-- 등기번호 -->
     , DELIVYMD          <!-- 배달일자 -->
     , DELIVHHMI         <!-- 배달시분 -->
     , DELIVRSLTCD       <!-- 배달결과코드 -->
     , NONDELIVREASNCD   <!-- 미배달사유코드 -->
     , NONDELIVREASNCDNM <!-- 미배달사유명 -->
     , SUBRECPRSNNM      <!-- 수령인명 -->
     , RELRECPRSNCD      <!-- 수령인관계코드 -->
     , RELRECPRSNCDNM    <!-- 수령인관계명 -->
     , REG_DT            <!-- 등록 일시 -->
     , RGTR              <!-- 등록자 -->
) VALUES (
       #{dlvrRsltId}        <!-- 배달 결과 ID -->
     , #{reletcdata}        <!-- 외부연계식별키, 발송인별추가데이터 -->
     , #{outsiduserid}      <!-- 외부기관구분코드 -->
     , #{reletcdata}        <!-- 발송인별추가데이터 -->
     , #{regino}            <!-- 등기번호 -->
     , #{delivymd}          <!-- 배달일자 -->
     , #{delivhhmi}         <!-- 배달시분 -->
     , #{delivrsltcd}       <!-- 배달결과코드 -->
     , #{nondelivreasncd}   <!-- 미배달사유코드 -->
     , #{nondelivreasncdnm} <!-- 미배달사유명 -->
     , #{subrecprsnnm}      <!-- 수령인명 -->
     , #{relrecprsncd}      <!-- 수령인관계코드 -->
     , #{relrecprsncdnm}    <!-- 수령인관계명 -->
     , #{createdAt}         <!-- 등록 일시 -->
     , #{createdBy}         <!-- 등록자 -->
)</insert>

<select id="selectResultLogs" parameterType="map" resultType="dataobject">/* 전자우편 신청결과 로그 조회(emailResultMapper.selectResultLogs) */
<include refid="utility.paging-prefix" />
SELECT PROC_ID    <!-- 처리 ID -->
     , PROC_SEQ   <!-- 순번 -->
     , PROC_TYPE  <!-- 처리 유형 -->
     , RESULT_ID  <!-- 처리결과 ID -->
     , CON_KEY    <!-- 외부연계 식별자 -->
     , RGST_NMBR  <!-- 등기번호 -->
     , PROC_STT   <!-- 처리상태 -->
  FROM TB_EPOST_PROC_LOG
 WHERE PROC_ID = #{procID}
   AND PROC_STT = 'N'
<include refid="utility.orderBy" />
<include refid="utility.paging-suffix" /></select>

<insert id="insertResultLogs" parameterType="map">/* 전자우편 신청결과 로그 등록(emailResultMapper.insertResultLogs) */
INSERT INTO TB_EPOST_PROC_LOG (
       PROC_ID   <!-- 처리 ID -->
     , PROC_SEQ  <!-- 처리 순번 -->
     , PROC_TYPE <!-- 처리 유형 -->
     , RESULT_ID <!-- 결과 ID -->
     , CON_KEY   <!-- 외부연계 식별키 -->
     , RGST_NMBR <!-- 등기번호 -->
     , PROC_STT  <!-- 업무 연계 상태 -->
     , REG_DT    <!-- 등록 일시 -->
     , RGTR      <!-- 등록자 -->
)<foreach collection="logs" item="log" separator=" UNION">
SELECT #{log.procId}       <!-- 처리 ID -->
     , #{log.procSeq}      <!-- 처리 순번 -->
     , #{log.procType}     <!-- 처리 유형 -->
     , #{log.resultId}     <!-- 결과 ID -->
     , #{log.conKey}       <!-- 외부연계 식별키 -->
     , #{log.rgstNmbr}     <!-- 등기번호 -->
     , 'N'                 <!-- 업무 연계 상태 -->
     , #{log.createdAt}    <!-- 등록 일시 -->
     , #{log.createdBy}    <!-- 등록자 --></foreach>
</insert>

<update id="updateResultLogStatus" parameterType="map">/* 전자우편 신청결과 로그 상태 업데이트(emailResultMapper.updateResultLogStatus) */
UPDATE TB_EPOST_PROC_LOG A
     , (<foreach collection="logs" item="log" separator=" UNION">
        SELECT #{log.PROC_ID} PROC_ID, #{log.PROC_SEQ} PROC_SEQ, #{log.PROC_STT} PROC_STT</foreach>
       ) B
   SET A.PROC_STT = B.PROC_STT
 WHERE A.PROC_ID = B.PROC_ID
   AND A.PROC_SEQ = B.PROC_SEQ</update>

</mapper>