<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> 

<mapper namespace="kr.co.i2talk.push">

     <sql id="searchMessage">
       <if test="@i2c.cmm.util.StringUtil@isNotEmpty(push_alarm_excepts)">
		AND A.BIZ_TP_CD NOT IN 
		<foreach collection="push_alarm_excepts" item="item" index="index" separator="," open="(" close=")">
		    #{item}
		</foreach>
		</if>
		and b.usr_id = #{usr_id}		
		<if test="@i2c.cmm.util.StringUtil@isNotEmpty(receive_confirm)">
		<if test='receive_confirm == "received" '>
			and b.confirm_dttm is not null
		</if>
		<if test='receive_confirm == "not_received" '>
			and b.confirm_dttm is null
		</if>
		</if>
		<if test="@i2c.cmm.util.StringUtil@isNotEmpty(biz_tp_cd)">
			and a.biz_tp_cd = #{biz_tp_cd}
		</if>
     </sql>
     
     <sql id="countMessage">
       SELECT 
             COUNT(A.MSG_ID)
        FROM
			SNS_MESSAGE A,
			SNS_RECV_USER B
			, SNS_SCHEDULE_MESSAGE SSM
	  	WHERE
			A.MSG_ID = B.MSG_ID
			AND A.MSG_ID = SSM.SCHDL_MSG_ID
			AND A.BIZ_TP_CD IS NOT NULL
			<include refid="searchMessage"/>		
     </sql>


<!-- 1. 추가  쿼리 메소드 작성 -->
    <select id="kr.co.i2talk.push.listSnsMessage"
		parameterType="Map"
		resultType="i2c.cmm.base.CommonResultMap">
	/* kr.co.i2talk.push.listSnsMessage */
		SELECT 
				*		  
        FROM (
            SELECT 
            	  B.*
            	, (@ROWNUM  := @ROWNUM + 1) RN  
                , (<include refid="countMessage"/>) TOTAL_CNT
			FROM
			(
				SELECT
					A.MSG_ID,
					A.MSG_CNTN,
					A.CRT_USR_ID,
					B.SNDR_ID,
					IFNULL(FN_GET_USR_NM(A.CRT_USR_ID),'관리자') SNDR_NM,
					CONCAT(A.CRT_USR_ID) SNDR_PHOTO_IMG,
					A.CRT_DTTM,
					A.LINK_URL,
					A.BIZ_TP_CD,
					CASE WHEN A.BIZ_TP_CD = 'PUSH'
					     THEN CONCAT(FN_GET_CODE_NM('SEND_TYPE', A.BIZ_TP_CD), '(', FN_GET_CODE_NM('SEND_SE', SSM.SEND_SE), ')')
					     ELSE FN_GET_CODE_NM('SEND_TYPE', A.BIZ_TP_CD)
					     END AS BIZ_TP_NM,
					A.BIZ_SUB_TP_CD,
					FN_GET_CODE_NM('BIZ_SUB_TP_CD', A.BIZ_SUB_TP_CD) BIZ_SUB_TP_NM,
					B.USR_ID RCVR_ID,
					FN_GET_USR_NM(B.USR_ID) RCVR_NM,
					B.RECV_ID,
					B.SND_DTTM,
					B.RECV_DTTM,
					B.CONFIRM_DTTM,
					CASE WHEN B.CONFIRM_DTTM IS NULL
					   THEN 'N'
					   ELSE 'Y'
					   END AS READ_YN
					, SSM.TAR_OBJ_ID
				    , (CASE WHEN (A.BIZ_TP_CD = 'PROPS') 
					            THEN (SELECT PP.PROPSE_OPEN_AT
					                    FROM PETIT_PROPSE PP
					                   WHERE PP.PETIT_PROPSE_ID = SSM.TAR_OBJ_ID)
					        WHEN (A.BIZ_TP_CD = 'VOTE')
					            THEN CASE WHEN (SELECT VQ.CLSDR_AT
					                              FROM VOTE_QUSTNR VQ
					                             WHERE VQ.VOTE_QUSTNR_ID = SSM.TAR_OBJ_ID) = 'Y'
					                      THEN 'N'
					                      WHEN (SELECT VQ.CLSDR_AT
					                              FROM VOTE_QUSTNR VQ
					                             WHERE VQ.VOTE_QUSTNR_ID = SSM.TAR_OBJ_ID) = 'N'
					                      THEN 'Y'
					                      ELSE NULL END 
					        WHEN (A.BIZ_TP_CD = 'NOTICE') AND A.BIZ_SUB_TP_CD IN ('NOTICE', 'OPINION', 'HELP')    
					            THEN CASE WHEN (SELECT B.LOCK_AT
					                              FROM BOARD B
					                             WHERE B.BOARD_ID = SSM.TAR_OBJ_ID) = 'Y'
					                      THEN 'N'
					                      WHEN (SELECT B.LOCK_AT
					                              FROM BOARD B
					                             WHERE B.BOARD_ID = SSM.TAR_OBJ_ID) = 'N'
					                      THEN 'Y'
					                      ELSE NULL END 
					       ELSE NULL
					       END 
					    ) OPEN_AT
				FROM
					SNS_MESSAGE A,
					SNS_RECV_USER B
					, SNS_SCHEDULE_MESSAGE SSM
				WHERE
					A.MSG_ID = B.MSG_ID
					AND A.MSG_ID = SSM.SCHDL_MSG_ID
					AND A.BIZ_TP_CD IS NOT NULL
					<if test="@i2c.cmm.util.StringUtil@isNotEmpty(push_alarm_excepts)">
					AND A.BIZ_TP_CD NOT IN 
					<foreach collection="push_alarm_excepts" item="item" index="index" separator="," open="(" close=")">
					    #{item}
					</foreach>
					</if>
					<if test="@i2c.cmm.util.StringUtil@isNotEmpty(usr_id)">
						AND B.USR_ID = #{usr_id}						
					</if>						
					<if test="@i2c.cmm.util.StringUtil@isNotEmpty(receive_confirm)">
						<if test='receive_confirm == "received" '>
							AND B.CONFIRM_DTTM IS NOT NULL
						</if>
						<if test='receive_confirm == "not_received" '>
							AND B.CONFIRM_DTTM IS NULL
						</if>
					</if>
					<if test="@i2c.cmm.util.StringUtil@isNotEmpty(biz_tp_cd)">
						AND A.BIZ_TP_CD = #{biz_tp_cd}
					</if>
			) B, (SELECT @ROWNUM := 0 FROM DUAL) ROWNUM
   ) C        
   ORDER BY C.CRT_DTTM DESC
   LIMIT #{page} , #{limit}	
    </select>

    <select id="kr.co.i2talk.push.listSnsMessageCount"
		parameterType="Map"
		resultType="i2c.cmm.base.CommonResultMap">
/* kr.co.i2talk.push.listSnsMessageCount */
SELECT
	a.biz_tp_cd,
	count(a.msg_id) cnt
FROM
	sns_message a,
	sns_recv_user b
WHERE
	a.msg_id = b.msg_id
	and a.biz_tp_cd is not null
	<if test="@i2c.cmm.util.StringUtil@isNotEmpty(push_alarm_excepts)">
	AND A.BIZ_TP_CD NOT IN 
	<foreach collection="push_alarm_excepts" item="item" index="index" separator="," open="(" close=")">
	    #{item}
	</foreach>
	</if>
	and b.usr_id = #{usr_id}	
	<if test="@i2c.cmm.util.StringUtil@isNotEmpty(receive_confirm)">
		<if test='receive_confirm == "received" '>
			and b.confirm_dttm is not null
		</if>
		<if test='receive_confirm == "not_received" '>
			and b.confirm_dttm is null
		</if>
	</if>
	<if test="@i2c.cmm.util.StringUtil@isNotEmpty(biz_tp_cd)">
		and a.biz_tp_cd = #{biz_tp_cd}
	</if>
	AND 
	(
	  INSTR(A.BIZ_TP_CD, 'NOTICE') > 0
	  OR INSTR(A.BIZ_TP_CD, 'PLAN') > 0
	  OR INSTR(A.BIZ_TP_CD, 'CHNNLBBS') > 0
	  OR INSTR(A.BIZ_TP_CD, 'CHNNL') > 0
	  OR INSTR(A.BIZ_TP_CD, 'PRPS') > 0
	  OR INSTR(A.BIZ_TP_CD, 'DSCSN') > 0
	  OR INSTR(A.BIZ_TP_CD, 'VOTE') > 0
	  OR INSTR(A.BIZ_TP_CD, 'PUSH') > 0
	)
GROUP BY
	a.biz_tp_cd
    </select>
		
    <select id="kr.co.i2talk.push.viewSnsMessage"
		parameterType="Map"
		resultType="i2c.cmm.base.CommonResultMap">
	/* kr.co.i2talk.push.viewSnsMessage */
SELECT 
	msg_id,
	msg_cntn,
	crt_usr_id,
	crt_dttm
FROM
	sns_message
WHERE
	msg_id = #{msg_id}
    </select>

    <insert id="kr.co.i2talk.push.insertSnsMessage"
		parameterType="Map">
/* kr.co.i2talk.push.insertSnsMessage */
INSERT INTO sns_message ( 
	msg_id, msg_tp_cd, msg_cntn, crt_usr_id, crt_dttm)
VALUES (
	#{msg_id}, #{msg_tp_cd}, #{msg_cntn}, #{crt_usr_id}, #{crt_dttm})
    </insert>
    
	<update id="kr.co.i2talk.push.updateSnsMessage"
		parameterType="Map">
/* kr.co.i2talk.push.updateSnsMessage */
UPDATE sns_message SET
	msg_cntn = #{msg_cntn}, 
	crt_usr_id = #{crt_usr_id}, 
	crt_dttm = #{crt_dttm}
WHERE
	msg_id = #{msg_id}
    </update>

	<delete id="kr.co.i2talk.push.deleteReceivedMessage"
		parameterType="Map">
/* kr.co.i2talk.push.deleteReceivedMessage */
DELETE FROM sns_message WHERE
	msg_id = #{msg_id}
    </delete>
<!-- 1. 추가  쿼리 메소드 작성 끝 -->

<!-- 2. 추가  쿼리 메소드 작성 -->
	<select id="kr.co.i2talk.push.unreadMessageCount" parameterType="Map" resultType="i2c.cmm.base.CommonResultMap">
	/* kr.co.i2talk.push.unreadMessageCount */
		SELECT
			COUNT(0) NOTREAD
		FROM 
			SNS_MESSAGE A,
			SNS_RECV_USER B
		WHERE
			A.MSG_ID = B.MSG_ID
			AND A.BIZ_TP_CD IS NOT NULL
			AND B.USR_ID = #{usr_id}
			AND B.CONFIRM_DTTM IS NULL
			<if test="@i2c.cmm.util.StringUtil@isNotEmpty(biz_type)">			
				<choose>
					<when test="biz_type =='BSNS'">
			    		AND A.BIZ_TP_CD IN ('MAIL05','MAIL08')	/*사업관리*/
					</when>
					<when test="biz_type =='TFCL'">	
			    		AND A.BIZ_TP_CD IN ('MAIL06')	/*신호등관리*/
					</when>	
					<when test="biz_type =='CMBN'">	
			    		AND A.BIZ_TP_CD IN ('MAIL07')	/*취합요청관리*/
					</when>
					<when test="biz_type =='CFRC'">	
			    		AND A.BIZ_TP_CD IN ('MAIL04')	/*회의관리*/
					</when>	
					<when test="biz_type =='USER'">	
			    		AND A.BIZ_TP_CD IN ('MAIL01','MAIL02','MAIL03','CRTFC')	/*사용자*/
					</when>
					<when test="biz_type =='MESSAGE'">	
			    		AND A.BIZ_TP_CD IN ('MESSAGE')	/*자료전달*/
					</when>
					<when test="biz_type =='NEWS'">	
			    		AND A.BIZ_TP_CD IN ('NOTICE','SITTN','FEPA')	/*뉴스*/
					</when>
					<otherwise>
						AND A.BIZ_TP_CD IN ('MAIL09','MAIL10','PLAN','TASK','GRP')	/*소통커뮤니티*/
					</otherwise>							
				</choose>	
			</if>	
			AND
			(
			  INSTR(A.BIZ_TP_CD, 'MAIL') > 0
			  OR INSTR(A.BIZ_TP_CD, 'CRTFC') > 0
			  OR INSTR(A.BIZ_TP_CD, 'MESSAGE') > 0
			  OR INSTR(A.BIZ_TP_CD, 'NOTICE') > 0
			  OR INSTR(A.BIZ_TP_CD, 'SITTN') > 0
			  OR INSTR(A.BIZ_TP_CD, 'PLAN') > 0
			  OR INSTR(A.BIZ_TP_CD, 'TASK') > 0
			  OR INSTR(A.BIZ_TP_CD, 'GRP') > 0
			  OR INSTR(A.BIZ_TP_CD, 'FEPA') > 0
			  OR INSTR(A.BIZ_TP_CD, 'SVC') > 0
			)
	</select>
	
	<select id="kr.co.i2talk.push.countSnsMessage" parameterType="Map" resultType="i2c.cmm.base.CommonResultMap">
	/* kr.co.i2talk.push.countSnsMessage */
		SELECT
			COUNT(0) cnt
		FROM 
			SNS_MESSAGE A,
			SNS_RECV_USER B
		WHERE
			A.MSG_ID = B.MSG_ID
			AND A.BIZ_TP_CD IS NOT NULL
			AND B.USR_ID = #{usr_id}
			AND B.CONFIRM_DTTM IS NULL
			<if test="@i2c.cmm.util.StringUtil@isNotEmpty(target)">			
				<choose>
					<when test="target =='feed'">
			    		AND A.BIZ_TP_CD IN ('MAIL09','MAIL10')
					</when>
					
					<otherwise>
						
					</otherwise>							
				</choose>	
			</if>	
	</select>
<!-- 2. 추가  쿼리 메소드 작성 끝 -->

    <update id="saveUserPushAt" parameterType="Map">
      /* kr.co.i2talk.push.saveUserPushAt */     
      UPDATE SNS_USER
       SET    <if test="flag == 'PUSH'">PUSH_AT = #{user_push_at}</if>
              <if test="flag == 'PUSH_ADVRTS'">PUSH_ADVRTS_AT = #{user_push_at}</if>
              <if test="flag == 'PRPRP'">PRPRP_AT = #{user_push_at}</if>
       WHERE USR_ID = #{usr_id}
    </update>
    
   	<select id="kr.co.i2talk.push.viewPushMessage" parameterType="Map" resultType="i2c.cmm.base.CommonResultMap">
   	   /* kr.co.i2talk.push.viewPushMessage */  
   	       SELECT
		         PM.PUSH_MESSAGE_ID
		       , PM.SUBJECT
		       , PM.CONTENTS
		       , PM.LINK_URL
		    FROM 
		         PUSH_MESSAGE PM
		       , SNS_POST SP 
		   WHERE
		        PM.PUSH_MESSAGE_ID = SP.TAR_OBJ_ID
		    AND SP.POST_TP ='PUSH'
		    AND PM.PUSH_MESSAGE_ID = #{push_message_id}
   	</select>
    
</mapper>
