<?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="i2c.biz.ntcn.dao.NtcnDAO">

	<resultMap id="ntcnVO"      type="i2c.biz.ntcn.vo.NtcnVO" />		

	<select id="countNtcn" parameterType="i2c.biz.ntcn.vo.NtcnVO" resultType="int">
	/* i2c.biz.ntcn.dao.NtcnDAO.xml countNtcn 알림 정보 건수 */		
	SELECT
		COUNT(A.MSG_ID) TOTCNT
	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_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="listNtcn" parameterType="i2c.biz.ntcn.vo.NtcnVO" resultMap="ntcnVO">
	/* i2c.biz.ntcn.dao.NtcnDAO.xml listNtcn 알림 정보 리스트 */
	SELECT
		*
	FROM
	(
		SELECT
			COUNT(*) OVER() TOTAL_CNT,
			ROW_NUMBER() OVER(ORDER BY A.CRT_DTTM DESC) RNUM,
			A.MSG_ID,
			A.MSG_CNTN,
			A.CRT_USR_ID,
			B.SNDR_ID,
			NVL(FN_GET_USR_NM(A.CRT_USR_ID),'관리자') SNDR_NM,
			FN_GET_USR_ORIGIN_PHOTO(B.SNDR_ID) SNDR_PHOTO_IMG,
			A.CRT_DTTM,
			A.LINK_URL,
			A.BIZ_TP_CD,
			FN_GET_CODE_NM('SEND_TYPE', A.BIZ_TP_CD) 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,
			DECODE(B.RECV_DTTM, NULL, 'N', 'Y') READ_YN
		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_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
		)
	)
	<![CDATA[
     WHERE  RNUM  > #{firstIndex}
       AND  RNUM <= #{firstIndex} + #{recordCountPerPage}
     ORDER BY RNUM
    ]]>
	</select>
	
	<update id="confirmNtcn" parameterType="Map">
	/* i2c.biz.ntcn.dao.NtcnDAO.xml confirmNtcn 알림 정보 확인 */
	UPDATE SNS_RECV_USER SET
		CONFIRM_DTTM = TO_CHAR(SYSDATE, 'yyyymmddHH24mi')
	<if test="@i2c.cmm.util.StringUtil@isNotEmpty(recv_id)">
	WHERE RECV_ID = #{recv_id}
	</if>
	<if test="@i2c.cmm.util.StringUtil@isEmpty(recv_id)">
	WHERE MSG_ID = #{msg_id}
	AND   USR_ID = #{usr_id}
	</if>
	</update>

	<delete id="deleteNtcn" parameterType="Map">
	/* i2c.biz.ntcn.dao.NtcnDAO.xml deleteNtcn 알림 정보 삭제 */
	DELETE FROM SNS_MESSAGE WHERE
	MSG_ID = #{msg_id}
	</delete>	
	
	<select id="receivedInfo" parameterType="i2c.biz.ntcn.vo.NtcnVO" resultType="egovframework.rte.psl.dataaccess.util.EgovMap">
	/* i2c.biz.ntcn.dao.NtcnDAO.xml receivedInfo 미확인, 확인, 전체 알림건수 정보 */		
	SELECT 
  		SUM(CASE WHEN B.CONFIRM_DTTM IS NULL THEN 1 ELSE 0 END) NOT_RECEIVED_CNT,
  		SUM(CASE WHEN B.CONFIRM_DTTM IS NOT NULL THEN 1 ELSE 0 END) RECEIVED_CNT,
  		COUNT(A.MSG_ID) TOTCNT
	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}
  		<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')	/*사용자*/
				</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')	/*뉴스*/
				</when>
				<otherwise>
					AND A.BIZ_TP_CD IN ('MAIL09','MAIL10','PLAN')	/*소통커뮤니티*/
				</otherwise>							
			</choose>	
		</if>
  		AND 
		(
		  INSTR(A.BIZ_TP_CD, 'MAIL') > 0
		  OR INSTR(A.BIZ_TP_CD, 'PLAN') > 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
		)
 	</select>
</mapper>
