<?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="i2c.cmm.email.dao.EmailDAO">

    <resultMap id="getEmailMap" type="egovframework.rte.psl.dataaccess.util.EgovMap">
        <result property="mail_idx"     column="MAIL_IDX"      javaType="java.lang.String"  jdbcType="VARCHAR" />
        <result property="mail_id"      column="MAIL_ID"       javaType="java.lang.String"  jdbcType="VARCHAR" />
        <result property="to"           column="EMAIL"         javaType="java.lang.String"  jdbcType="VARCHAR" />
        <result property="sender"       column="SENDER"        javaType="java.lang.String"  jdbcType="VARCHAR" />
        <result property="sender_email" column="SENDER_EMAIL"  javaType="java.lang.String"  jdbcType="VARCHAR" />
        <result property="subject"      column="SUBJECT"       javaType="java.lang.String"  jdbcType="VARCHAR" />
        <result property="message"      column="CONTENTS"      javaType="java.lang.String"  jdbcType="CLOB"    />
        <result property="before_stats" column="STATS"         javaType="java.lang.String"  jdbcType="VARCHAR" />
        <result property="send_type"    column="SEND_TYPE"     javaType="java.lang.String"  jdbcType="VARCHAR" />
    </resultMap>

    <select id="selectEmailList" resultMap="getEmailMap">
        /* [i2c.cmm.email.dao.EmailDAO.selectEmailList] 이메일발송 목록 */
        SELECT ES.MAIL_IDX
             , ESR.MAIL_ID
             , ESR.EMAIL       
             , ES.SENDER
             , ES.SENDER_EMAIL
             , ES.SUBJECT
             , ES.CONTENTS     
             , ESR.STATS       
             , ES.SEND_TYPE
          FROM EMAIL_SMS ES, EMAIL_SMS_RECEIVER ESR
         WHERE ES.MAIL_IDX = ESR.MAIL_IDX
           AND ES.STATS    = 'N'
    </select>
    
    <update id="updateEmailStats" parameterType="java.util.Map">
        /* [i2c.cmm.email.dao.EmailDAO.updateEmailStats] 이메일상태 변경 */
        UPDATE EMAIL_SMS
          SET STATS     = #{updateStats}
            , UPDATE_DE = SYSDATE
            , UPDATE_ID = #{updateId}
          <if test="updateStats == 'Y'.toString()">
            , SEND_TIME = DATE_FORMAT(SYSDATE(),'%Y%m%d%H%i%s')
          </if>
        WHERE STATS = #{beforeStats}
    </update>
    
    <update id="updateSnsRecvUser" parameterType="java.util.Map">
       /* [i2c.cmm.email.dao.EmailDAO.updateSnsRecvUser] 알림센터 전송 정보 변경 */
       UPDATE SNS_RECV_USER SRU
          SET SND_DTTM = TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS')
            , SNDR_ID  = #{updateId}
        WHERE SRU.MSG_ID = (SELECT SM.MSG_ID 
                              FROM SNS_MESSAGE SM 
                             WHERE SM.MSG_ID    = SRU.MSG_ID 
                               AND SM.BIZ_TP_CD = #{sendType} 
                               AND SM.BIZ_ID    = #{mailIdx})
          AND SRU.USR_ID = (SELECT SU.USR_ID
                              FROM SNS_USER SU
                             WHERE SU.USR_ID = SRU.USR_ID 
                               AND SU.EMAIL  = #{to})                              
    </update>
    
    <update id="updateEmailReceiverStats" parameterType="java.util.Map">
        /* [i2c.cmm.email.dao.EmailDAO.updateEmailReceiverStats] 이메일상태 변경 */
        UPDATE EMAIL_SMS_RECEIVER
           SET UPDATE_DE = SYSDATE
             , UPDATE_ID = #{updateId}
             , STATS     = #{updateStats}
         WHERE MAIL_IDX = #{mailIdx}
           AND MAIL_ID  = #{mailId}
           AND STATS    = #{beforeStats}
    </update>
    
    <insert id="insertEmail" parameterType="java.util.Map">
        /* [i2c.cmm.email.dao.EmailDAO.insertEmail] 이메일내역 등록 */
        <selectKey resultType="String" keyProperty="mailIdx" order="BEFORE">  
            SELECT SER_EMAIL.NEXTVAL FROM DUAL
        </selectKey>
        INSERT INTO EMAIL_SMS (
		    MAIL_IDX
		  , SENDER
		  , SENDER_EMAIL
		  , SUBJECT
		  , SEND_TYPE		  
		  , CONTENTS
		  , STATS
		  , CREATE_DE
		  , CREATE_ID
		  , UPDATE_DE
		  , UPDATE_ID
    	) VALUES (
            #{mailIdx}
          , #{sender}
          , #{senderEmail}
          , #{subject}
          , #{sendType}
          , #{contents}
          , 'N'
          , SYSDATE
          , #{createId}
          , SYSDATE
          , #{createId}
        )
    </insert>
    
    <insert id="insertEmailReceiver" parameterType="java.util.Map">    
        /* [i2c.cmm.email.dao.EmailDAO.insertEmailReceiver] 이메일 받는 사람 등록 */
        <selectKey resultType="String" keyProperty="mailId" order="BEFORE">  
            SELECT SER_EMAIL_RECEIVER.NEXTVAL FROM DUAL
        </selectKey>    
        INSERT INTO EMAIL_SMS_RECEIVER (
	        MAIL_ID
	      , MAIL_IDX
	      , EMAIL
	      , CREATE_DE
	      , CREATE_ID
	      , UPDATE_DE
	      , UPDATE_ID
	      , STATS
    	) VALUES (
    	    #{mailId}
    	  , #{mailIdx}
    	  , #{email}
    	  , SYSDATE
    	  , #{createId}
    	  , SYSDATE
    	  , #{createId}
    	  , 'N'
    	)
    </insert>
    
</mapper>