<?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.biz.customActivity.message.dao.MessageDAO">

    <resultMap id="messageVO"     type="i2c.biz.customActivity.message.vo.MessageVO" />
    
    <sql id="searchTmpListQuery">
    	<if test="search_text != null and search_text !=''"> 
    		<!-- AND (  CASE WHEN TD.SUBJECT IS NULL THEN TD.CONTENT ELSE TD.SUBJECT END  ) LIKE CONCAT('%',#{search_text},'%') -->
    		 AND TD.TMPL_NAME LIKE CONCAT('%',#{search_text},'%')
    	</if>
    	<if test="msgTypeMO == 'MSG' or msgTypeMO == 'SMS' or msgTypeMO == 'LMS' or msgTypeMO == 'MMS'">
    		AND TD.SERVICE_TYPE IN ('0','2','3')
    	</if>
    	<if test="msgTypeMO == 'KKO'"><!-- 알림톡 -->
    		AND TD.MSG_TYPE = '1008'
    	</if>
    	<if test="msgTypeMO == 'KKF'"><!-- 친구톡 -->
    		AND TD.MSG_TYPE = '1009'
    	</if>
    	<if test="mber_no != '' and mber_no != null">
    		AND TD.mber_no = #{mber_no}
    	</if>
    	<if test="org_id != '' and org_id != null">
    		AND TD.org_id = #{org_id}
    	</if>
    </sql>
    
    <sql id="searchSendResListQuery">
    	<if test="search_text != null and search_text !=''"> 
    		AND TD.NOTI_GROUP_ID LIKE CONCAT('%',#{search_text},'%')
    	</if>
    	<if test="mber_no != '' and mber_no != null">
    		AND TD.mber_no = #{mber_no}
    	</if>
    	<if test="org_id != '' and org_id != null">
    		AND TD.org_id = #{org_id}
    	</if>
    </sql>
    
   	<select id="selectMessage" parameterType="i2c.biz.customActivity.message.vo.MessageVO" resultMap="messageVO">
        /* i2c.biz.customActivity.message.MessageDAO.xml selectMessage 메세지 메인*/		      
	</select>
	
	<insert id="sendMessage" parameterType="i2c.biz.customActivity.message.vo.MessageVO"> 
        /* i2c.biz.customActivity.message.MessageDAO.xml sendMessage 메세지 전송 */        
    </insert>
    
    
    <select id="countMsgTmpList" parameterType="i2c.biz.customActivity.message.vo.MessageVO" resultType="int">
    	/* i2c.biz.customActivity.message.MessageDAO.xml countMsgTmpList 템플릿 목록 카운트*/
		SELECT COUNT(0) FROM T_DATA TD 
		WHERE 1=1 AND TD.TMP_BOOK_YN = 'T' AND (TD.TMPL_DEL_YN != 'Y' OR TD.TMPL_DEL_YN IS NULL)
			<include refid="searchTmpListQuery"/>
    </select>
    
    <select id="selectMsgTmpList" parameterType="i2c.biz.customActivity.message.vo.MessageVO" resultMap="messageVO">
        /* i2c.biz.customActivity.message.MessageDAO.xml selectMsgTmpList 템플릿 리스트*/
        SELECT *
		FROM (
		    SELECT (@ROWNUM  := @ROWNUM + 1) RNUM, B.*
		      FROM (
			        	SELECT <!-- CASE 
				        			WHEN TD.SUBJECT IS null THEN TD.CONTENT 
			        				ELSE TD.SUBJECT 
			        			END AS SUBJECT, -->
			        		SEMA_TEMPLETE_CODE,
			        		(SELECT FILE_SEQ FROM T_FILE TF WHERE TF.SEQ = TD.SEQ) AS FILESEQ,
			        		SUBJECT,
			        		TMPL_NAME,
			        		DATE_FORMAT(TD.CREATE_DATE, '%Y-%m-%d') AS CREATE_DE,
			        		TD.MSG_CL_TYPE,
			        		TD.CONTENT,
			        		CASE 
								WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '0' THEN 'SMS'
								WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '2' THEN 'MMS'
								WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '3' THEN 'LMS'
								WHEN TD.MSG_TYPE IS NOT NULL AND TD.MSG_TYPE = '1008' THEN 'KKO'
								WHEN TD.MSG_TYPE IS NOT NULL AND TD.MSG_TYPE = '1009' THEN 'KKF'
							END AS MSGTYPE,
							(SELECT CONCAT('[',GROUP_CONCAT(TK.KKO_BTN_INFO ORDER BY TK.KAKAO_SEQ ASC SEPARATOR ','),']') FROM T_KAKAO TK WHERE TK.SEQ = TD.SEQ ) AS KAKAOBTN,
							TD.KAKAO_IMG_URL,
							TD.KAKAO_IMG_LINK,
							TEMPLETE_ID,
							TD.ARS_080_NUM,
							TD.CALLBACK,
							TD.HLT_TYPE,
							TD.HLT_MAIN_TITLE,
							TD.HLT_SUB_TITLE
			        	FROM T_DATA TD LEFT JOIN T_FILE TF ON TD.SEQ = TF.SEQ 
							WHERE 1=1 AND TD.TMP_BOOK_YN = 'T' AND (TD.TMPL_DEL_YN != 'Y' OR TD.TMPL_DEL_YN IS NULL)
								<include refid="searchTmpListQuery"/>
                    ) B, (SELECT @ROWNUM := 0 FROM DUAL) ROWNUM
			) C        
		ORDER BY RNUM DESC
		LIMIT #{firstIndex}, #{recordCountPerPage}
	</select>
	
	<select id="selectTmp" parameterType="String" resultType="map">
        /* i2c.biz.customActivity.message.MessageDAO.xml selectTmp 템플릿 데이터*/
        SELECT	TD.CONTENT AS content
	        FROM T_DATA TD 
	        where SEMA_TEMPLETE_CODE = #{semaTempleteCode}
	</select>
	
	<select id="getFileFullPath" parameterType="i2c.biz.customActivity.message.vo.MessageVO" resultMap="messageVO">
        /* i2c.biz.customActivity.message.MessageDAO.xml getFileFullPath 파일 경로*/
        SELECT file_name, file_content, file_size FROM t_file where file_seq = #{fileSeq}
	</select>
	
	<select id="dsptchNumList" parameterType="i2c.biz.customActivity.message.vo.MessageVO" resultType="i2c.cmm.base.CommonResultMap">
		/* [i2c.biz.customActivity.message.MessageDAO.xml]  dsptchNumList 발신번호 목록 */
		SELECT DSPTCH_NUM FROM DSPTCH_NUM_MNG
		WHERE MBER_NO = #{mber_no} AND ORG_ID = #{org_id} AND STATUS = 'DSPTCHST02' AND USE_AT = 'Y'
    </select>
    
    <select id="arsNumList" parameterType="i2c.biz.customActivity.message.vo.MessageVO" resultType="i2c.cmm.base.CommonResultMap">
		/* [ci2c.biz.customActivity.message.MessageDAO.xml] arsNumList 080번호 목록 */
		SELECT ARS_NUM FROM ARS_NUM_MNG
		WHERE MBER_NO = #{mber_no} AND ORG_ID = #{org_id} AND STATUS = 'ARSST02' AND USE_AT = 'Y'
    </select>
    
    <select id="profileList" parameterType="i2c.biz.customActivity.message.vo.MessageVO" resultType="i2c.cmm.base.CommonResultMap">
		/* [i2c.biz.customActivity.message.MessageDAO.xml] profileList 프로필 목록 */
		SELECT ORG_ID, PLUS_UUID, PLUS_NM FROM PROFILE
		WHERE MBER_NO = #{mber_no} AND ORG_ID = #{org_id} AND STATUS = 'PROFLST01' AND USE_AT = 'Y'
    </select>
    
    <select id="getLogTabName" parameterType="map" resultType="i2c.cmm.base.CommonResultMap">
		/* [i2c.biz.customActivity.message.getLogTabName.xml] t_data 테이블 목록 */
		SELECT TD.SEQ , 
			CONCAT( (CASE WHEN TD.MSG_TYPE IS NOT NULL THEN 'ita_talk_log' 
					WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '0' THEN 'em_smt_log'
					WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE != '0' THEN 'em_mmt_log'
					ELSE TD.MSG_TYPE
				END), DATE_FORMAT(TD.DATE_CLIENT_REQ , '_%Y%m%d') ) logTabName,
			CASE WHEN TD.MSG_TYPE IS NOT NULL
			THEN (	CASE WHEN FN_CHK_90BYTE(TD.CONTENT) > 90 
					THEN CONCAT('em_mmt_log_', DATE_FORMAT(td.date_client_req , '%Y%m%d')) 
					ELSE CONCAT('em_smt_log_', DATE_FORMAT(td.date_client_req , '%Y%m%d')) 
					END
				)
			END cha2tab, <!-- ita 2차 전송시 사용하기 위한 테이블명 ita만 2차 전송가능 -->
			CASE 
				WHEN TD.msg_type is not null and TD.msg_type = '1009' THEN 'ITA_TALK_TRAN'
				WHEN TD.msg_type is not null and TD.msg_type = '1008' THEN 'ITA_TALK_TRAN'
				WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '0' THEN 'EM_SMT_TRAN'
				WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE != '0' THEN 'EM_MMT_TRAN'
			end cha1_tran_tab,
			CASE WHEN TD.MSG_TYPE IS NOT NULL
			THEN (	CASE 
					WHEN FN_CHK_90BYTE(TD.CONTENT) > 90 
					THEN 'EM_MMT_TRAN'
					ELSE 'EM_SMT_TRAN'
					END
				)
			END cha2_tran_tab
		FROM T_DATA TD 
		WHERE TD.TMP_BOOK_YN != 'T' AND TD.NOTI_GROUP_ID IS NOT NULL
			AND DATE_FORMAT(TD.DATE_CLIENT_REQ, '%Y%m%d') = #{targetDate}
			AND TD.MBER_NO = #{mberNo} AND TD.ORG_ID = #{orgId}
		<!--ORDER BY TD.SEQ
		 desc limit 1000 -->
    </select>
    
    <select id="getLogExist" parameterType="java.util.HashMap" resultType="i2c.cmm.base.CommonResultMap">
    	/* [i2c.biz.customActivity.message.getLogExist.xml] tran 테이블에 log 존재여부 */
    	
    	<if test="cha2tab != null and cha2tab != ''">
	    	SELECT COUNT(0) LOGTRANCNT, 
	    	<choose>
				<when test='exicha2tab != null and exicha2tab.equals("1")'>
	    			(SELECT COUNT(0) FROM ${cha2tab} EML WHERE SEQ = LOGTAB.SEQ ) CHA2CNT,
	    		</when>
	    		<otherwise>
	    			0 CHA2CNT,
	    		</otherwise>
	    	</choose>
			(SELECT COUNT(0) FROM ${cha2_tran_tab} EML WHERE SEQ = LOGTAB.SEQ ) CHA2TRANCNT
			FROM ${cha1_tran_tab} LOGTAB WHERE SEQ = #{seq}
		</if>
		<if test="cha2tab == null">
			SELECT COUNT(0) LOGTRANCNT FROM ${cha1_tran_tab} LOGTAB WHERE SEQ = #{seq}
    	</if>
    	
    </select>
    
    <select id="getLogInfoDetail" parameterType="java.util.HashMap" resultType="map">
    		/* [i2c.biz.customActivity.message.getLogInfoDetail] Failback 로그 상세정보 */
			SELECT	mt_report_code_ib AS reportCode,
							service_type AS serviceType,
							date_client_req AS dateClientReq
			FROM		${tableName}
			WHERE	seq = #{seq}
							AND org_id = #{orgId}
							AND  recipient_num = #{recipientNum}
							<choose>
								<when test="isFTI == 'true'">
									AND (msg_gb =  '1013' OR msg_gb = '1014' )
								</when>
								<otherwise>
									AND msg_gb = #{msgGb}
								</otherwise>
							</choose>
			LIMIT 1
    </select>
    
    <select id="getLogInfo" parameterType="java.util.HashMap" resultMap="messageVO">
		/* [i2c.biz.customActivity.message.getLogInfo.xml] 로그정보 */
		SELECT logtab.noti_group_id, logtab.noti_id, 
		
		<if test="cha2tab != null and cha2tab != ''">
			<choose>
				<when test='exicha2tab != null and exicha2tab.equals("1")'>
					CASE 
						WHEN logtab.msg_type is not null and logtab.msg_type = '1009' THEN 'FT'
						WHEN logtab.msg_type is not null and (logtab.msg_type = '1013' or logtab.msg_type = '1014') THEN 'FTI'
						WHEN logtab.msg_type is not null and logtab.msg_type = '1008' THEN 'AT'
						else null
					end channel1,
					<!-- 
					CASE 
						WHEN logtab.report_code != '1000'
						THEN (select 
								CASE WHEN chan2tab.service_type is not null and chan2tab.service_type = '0' THEN 'SMS'
								WHEN chan2tab.service_type is not null and chan2tab.service_type = '3' THEN 'LMS'
								WHEN chan2tab.service_type is not null and chan2tab.service_type = '2' THEN 'MMS'
								end 
							from ${cha2tab} chan2tab where chan2tab.seq = logtab.seq and logtab.msg_type = chan2tab.msg_gb and chan2tab.recipient_num = logtab.recipient_num limit 1
							)
					else null
					end channel2,
					 -->
					NULL AS channel2,
					CASE 
						WHEN logtab.report_code = '1000' THEN logtab.date_client_req
						<!--  
						WHEN logtab.report_code != '1000' THEN (
								select regdttab.date_client_req from ${cha2tab} regdttab 
								where regdttab.seq = logtab.seq and regdttab.msg_gb = logtab.msg_type and regdttab.recipient_num = logtab.recipient_num limit 1
							)
						-->
						else null
					end date_client_req,
					CASE 
						WHEN logtab.report_code = '1000' THEN logtab.date_rslt
						<!--  
						WHEN logtab.report_code != '1000' THEN (
									select compdttab.date_rslt from ${cha2tab} compdttab 
									where compdttab.seq = logtab.seq and compdttab.msg_gb = logtab.msg_type and compdttab.recipient_num = logtab.recipient_num limit 1
								) 
					 	-->
						else null
					end comp_dt,
					logtab.report_code  channel1_f_code,
					<!-- 
					CASE 
						WHEN logtab.report_code != '1000' THEN (
									select fcodetab.mt_report_code_ib from ${cha2tab} fcodetab 
									where fcodetab.seq = logtab.seq and fcodetab.msg_gb = logtab.msg_type and fcodetab.recipient_num = logtab.recipient_num limit 1
								)
						else null
					end channel2_f_code,
					 -->
					 NULL AS channel2_f_code, 
					<!-- date_client_req, -->
					replace(replace(content, '\r', ''), '\n', '\\n') as content,
					callback,
					recipient_num,
					(select td.ars_080_num from t_data td where seq = #{seq}) ars_080_num
				</when>
				<otherwise>
					CASE 
						WHEN logtab.msg_type is not null and logtab.msg_type = '1009' THEN 'FT'
						WHEN logtab.msg_type is not null and (logtab.msg_type = '1013' or logtab.msg_type = '1014') THEN 'FTI'
						WHEN logtab.msg_type is not null and logtab.msg_type = '1008' THEN 'AT'
						else null
					end channel1,
					null channel2,
					CASE 
						WHEN logtab.report_code = '1000' THEN logtab.date_client_req
						else null
					end date_client_req,
					CASE 
						WHEN logtab.report_code = '1000' THEN logtab.date_rslt 
						else null
					end comp_dt,
					logtab.report_code  channel1_f_code,
					null channel2_f_code,
					<!-- date_client_req, -->
					replace(replace(content, '\r', ''), '\n', '\\n') as content,
					callback,
					recipient_num,
					(select td.ars_080_num from t_data td where seq = #{seq}) ars_080_num
				</otherwise>
			</choose>
		</if>
		<if test="cha2tab == null">
			CASE 
				WHEN LOGTAB.SERVICE_TYPE IS NOT NULL AND LOGTAB.SERVICE_TYPE = '0' THEN 'SMS'
				WHEN LOGTAB.SERVICE_TYPE IS NOT NULL AND LOGTAB.SERVICE_TYPE = '3' THEN 'LMS'
				WHEN LOGTAB.SERVICE_TYPE IS NOT NULL AND LOGTAB.SERVICE_TYPE = '2' THEN 'MMS'
			END channel1,
			NULL channel2,
			logtab.date_client_req req_dt,
			logtab.date_rslt  comp_dt,
			logtab.mt_report_code_ib channel1_f_code,
			null channel2_f_code,
			date_client_req,
			replace(replace(content, '\r', ''), '\n', '\\n') as content,
			callback,
			recipient_num,
			(select td.ars_080_num from t_data td where seq = #{seq}) ars_080_num
		</if>
		FROM ${logtabname} logtab where seq = #{seq}
    </select>
    
    <select id="getTabExist" parameterType="String" resultType="int">
    	/* [i2c.biz.customActivity.message.getTabExist.xml] 테이블 존재 유무 */
    	SELECT count(0) FROM Information_schema.tables
		WHERE table_schema = 'i2sema'
		AND table_name = #{logTabName}
    </select>
    
    
    <select id="getUserOrg" parameterType="String" resultMap="messageVO">
    	<![CDATA[
    	/* [i2c.biz.customActivity.message.getUserOrg.xml] 권한별 유저정보 검색 */
    	SELECT SU.MBER_NO , SU.ORG_SID ORG_ID, SU.USR_ID FROM SNS_USER SU WHERE SU.USE_STOP_YN = 'N' and SU.ORG_SID is not null and SU.ORG_SID != ''
    	]]>
    </select>
    
    <select id="getUsrExist" parameterType="i2c.biz.customActivity.message.vo.MessageVO" resultType="int">
    	/* [i2c.biz.customActivity.message.getUsrExist.xml] MC 사용자 존재 유무 */
    	SELECT COUNT(0) FROM SNS_USER SU WHERE 1=1 AND ORG_SID = #{org_id} AND AUTH_CODE = 'ROLE_MC_MNGR'
    </select>
    
    
    <select id="getUsrInfo" parameterType="i2c.biz.customActivity.message.vo.MessageVO" resultMap="messageVO">
    	/* [i2c.biz.customActivity.message.getUsrInfo.xml] MC 사용자 정보 조회 */
    	<!-- SELECT USR_ID, MBER_NO, ORG_SID ORG_ID, AUTH_CODE FROM SNS_USER SU WHERE ORG_SID = #{org_id} -->
    	SELECT su.USR_ID AS USR_ID, 
			su.MBER_NO AS MBER_NO, 
			su.ORG_SID AS ORG_ID, 
			su.AUTH_CODE AS AUTH_CODE, 
			smi.REJECT_EMMA AS REJECT_EMMA
		FROM SNS_USER SU INNER JOIN SUB_MBER_INFO smi ON su.ORG_SID = smi.ORG_ID 
		WHERE su.ORG_SID = #{org_id}
    </select>
    
    
    
    <select id="selectAllYearMonth" parameterType="i2c.biz.customActivity.message.vo.MessageVO" resultType="String">
        /* i2c.biz.customActivity.message.MessageDAO.xml selectAllYearMonth 전체 년월 */	
	    SELECT CONCAT(SUBSTRING(DATE_FORMAT(TD.DATE_CLIENT_REQ ,'%Y%M'),1 ,4), '-',SUBSTRING(DATE_FORMAT(TD.DATE_CLIENT_REQ ,'%Y%m'),5 ,6)) AS YM 
		FROM T_DATA TD WHERE TD.DATE_CLIENT_REQ IS NOT NULL 
			AND MBER_NO = #{mber_no} AND ORG_ID = #{org_id}
		GROUP BY YM ORDER BY YM DESC
    </select>
    
    <select id="countSendResList" parameterType="i2c.biz.customActivity.message.vo.MessageVO" resultType="int">
    	/* i2c.biz.customActivity.message.MessageDAO.xml countSendResList 발송결과 목록 카운트*/
		SELECT COUNT(DISTINCT TD.NOTI_GROUP_ID) FROM T_DATA TD 
		WHERE 1=1 AND NOTI_GROUP_ID IS NOT NULL 
			AND TD.DATE_CLIENT_REQ LIKE CONCAT(#{yearMonth},'-%')
			<include refid="searchSendResListQuery"/>
    </select>
    
    <select id="selectSendResList" parameterType="i2c.biz.customActivity.message.vo.MessageVO" resultMap="messageVO">
        /* i2c.biz.customActivity.message.MessageDAO.xml selectSendResList 발송결과 목록 리스트*/
        SELECT *
		FROM (
		    SELECT (@ROWNUM  := @ROWNUM + 1) RNUM, B.*
	      FROM (
	        	SELECT NOTI_GROUP_ID,
					<!-- (SELECT MIN(TD2.DATE_CLIENT_REQ) FROM T_DATA TD2 WHERE TD.SEQ = TD2.SEQ ) AS SEND_START,
					(SELECT MAX(TD2.DATE_CLIENT_REQ) FROM T_DATA TD2 WHERE TD.SEQ = TD2.SEQ ) AS SEND_END, -->
					CASE 
						WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '0' THEN 'SMS'
						WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '2' THEN 'MMS'
						WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '3' THEN 'LMS'
						WHEN TD.MSG_TYPE IS NOT NULL AND TD.MSG_TYPE = '1008' THEN '알림톡'
						WHEN TD.MSG_TYPE IS NOT NULL AND TD.MSG_TYPE = '1009' THEN '친구톡'
					END AS MSGTYPE,
					(SELECT sum(td2.all_cnt) FROM T_DATA TD2 WHERE TD.SEQ = TD2.SEQ ) SEND_CNT,
					(SELECT sum(td3.success_cnt) FROM T_DATA TD3 WHERE TD.SEQ = TD3.SEQ AND TD.TMP_BOOK_YN = 'S') AS SUCCESS_CNT,
					CASE 
						WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '0' 
							THEN (SELECT SMS FROM SUB_MBER_INFO SMI INNER JOIN MBER_LEVEL ML ON SMI.LEVEL_CD = ML.LEVEL_CD WHERE MBER_NO = #{mber_no} AND ORG_ID = #{org_id})
						WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '2' 
							THEN (SELECT MMS FROM SUB_MBER_INFO SMI INNER JOIN MBER_LEVEL ML ON SMI.LEVEL_CD = ML.LEVEL_CD WHERE MBER_NO = #{mber_no} AND ORG_ID = #{org_id})
						WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '3' 
							THEN (SELECT LMS FROM SUB_MBER_INFO SMI INNER JOIN MBER_LEVEL ML ON SMI.LEVEL_CD = ML.LEVEL_CD WHERE MBER_NO = #{mber_no} AND ORG_ID = #{org_id})
						WHEN TD.MSG_TYPE IS NOT NULL AND TD.MSG_TYPE = '1008' 
							THEN (SELECT NTCN_TALK FROM SUB_MBER_INFO SMI INNER JOIN MBER_LEVEL ML ON SMI.LEVEL_CD = ML.LEVEL_CD WHERE MBER_NO = #{mber_no} AND ORG_ID = #{org_id})
						WHEN TD.MSG_TYPE IS NOT NULL AND TD.MSG_TYPE = '1009' 
							THEN (SELECT FRN_TALK FROM SUB_MBER_INFO SMI INNER JOIN MBER_LEVEL ML ON SMI.LEVEL_CD = ML.LEVEL_CD WHERE MBER_NO = #{mber_no} AND ORG_ID = #{org_id})
					END AS FEE
					<if test="yearMonth != '' and yearMonth != null">
						,CASE 
							WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '0' THEN (SELECT min(date_mt_sent) FROM ${smtTab} esl  WHERE td.SEQ = esl.SEQ )
							WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '2' THEN (SELECT min(date_mt_sent) FROM ${mmtTab} eml  WHERE td.SEQ = eml.SEQ )
							WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '3' THEN (SELECT min(date_mt_sent) FROM ${mmtTab} eml  WHERE td.SEQ = eml.SEQ )
							WHEN TD.MSG_TYPE IS NOT NULL AND TD.MSG_TYPE = '1008' THEN (SELECT min(date_mt_sent) FROM ${itaTab} etl  WHERE td.SEQ = etl.SEQ )
							WHEN TD.MSG_TYPE IS NOT NULL AND TD.MSG_TYPE = '1009' THEN (SELECT min(date_mt_sent) FROM ${itaTab} etl  WHERE td.SEQ = etl.SEQ )
						END AS send_start,
						CASE 
							WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '0' THEN (SELECT max(date_mt_sent) FROM ${smtTab} esl  WHERE td.SEQ = esl.SEQ )
							WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '2' THEN (SELECT max(date_mt_sent) FROM ${mmtTab} eml  WHERE td.SEQ = eml.SEQ )
							WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '3' THEN (SELECT max(date_mt_sent) FROM ${mmtTab} eml  WHERE td.SEQ = eml.SEQ )
							WHEN TD.MSG_TYPE IS NOT NULL AND TD.MSG_TYPE = '1008' THEN (SELECT max(date_mt_sent) FROM  ${itaTab} etl  WHERE td.SEQ = etl.SEQ )
							WHEN TD.MSG_TYPE IS NOT NULL AND TD.MSG_TYPE = '1009' THEN (SELECT max(date_mt_sent) FROM  ${itaTab} etl  WHERE td.SEQ = etl.SEQ )
						END AS send_end
					</if>
				FROM T_DATA TD WHERE 1=1 AND NOTI_GROUP_ID IS NOT NULL AND TD.MBER_NO = #{mber_no} AND TD.ORG_ID = #{org_id} 
					AND TD.DATE_CLIENT_REQ LIKE CONCAT(#{yearMonth},'-%')
					<include refid="searchSendResListQuery"/>
				group by noti_group_id <!-- limit #{recordCountPerPage} -->
				ORDER BY TD.SEQ
	        ) B, (SELECT @ROWNUM := 0 FROM DUAL) ROWNUM
		) C        
		ORDER BY RNUM DESC
		LIMIT #{firstIndex}, #{recordCountPerPage}
		<!-- SELECT *
		FROM (
		    SELECT (@ROWNUM  := @ROWNUM + 1) RNUM, B.*
	      FROM (
	        	SELECT NOTI_GROUP_ID,
					(SELECT MIN(TD2.DATE_CLIENT_REQ) FROM T_DATA TD2 WHERE TD.SEQ = TD2.SEQ ) AS SEND_START,
					(SELECT MAX(TD2.DATE_CLIENT_REQ) FROM T_DATA TD2 WHERE TD.SEQ = TD2.SEQ ) AS SEND_END,
					CASE 
						WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '0' THEN 'SMS'
						WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '2' THEN 'MMS'
						WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '3' THEN 'LMS'
						WHEN TD.MSG_TYPE IS NOT NULL AND TD.MSG_TYPE = '1008' THEN '알림톡'
						WHEN TD.MSG_TYPE IS NOT NULL AND TD.MSG_TYPE = '1009' THEN '친구톡'
					END AS MSGTYPE,
					(SELECT sum(td2.all_cnt) FROM T_DATA TD2 WHERE TD.NOTI_GROUP_ID = TD2.NOTI_GROUP_ID ) SEND_CNT,
					(SELECT sum(td3.success_cnt) FROM T_DATA TD3 WHERE TD.NOTI_GROUP_ID = TD3.NOTI_GROUP_ID AND TD.TMP_BOOK_YN = 'S') AS SUCCESS_CNT,
					CASE 
						WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '0' 
							THEN (SELECT SMS FROM SUB_MBER_INFO SMI INNER JOIN MBER_LEVEL ML ON SMI.LEVEL_CD = ML.LEVEL_CD WHERE MBER_NO = #{mber_no} AND ORG_ID = #{org_id})
						WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '2' 
							THEN (SELECT MMS FROM SUB_MBER_INFO SMI INNER JOIN MBER_LEVEL ML ON SMI.LEVEL_CD = ML.LEVEL_CD WHERE MBER_NO = #{mber_no} AND ORG_ID = #{org_id})
						WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '3' 
							THEN (SELECT LMS FROM SUB_MBER_INFO SMI INNER JOIN MBER_LEVEL ML ON SMI.LEVEL_CD = ML.LEVEL_CD WHERE MBER_NO = #{mber_no} AND ORG_ID = #{org_id})
						WHEN TD.MSG_TYPE IS NOT NULL AND TD.MSG_TYPE = '1008' 
							THEN (SELECT NTCN_TALK FROM SUB_MBER_INFO SMI INNER JOIN MBER_LEVEL ML ON SMI.LEVEL_CD = ML.LEVEL_CD WHERE MBER_NO = #{mber_no} AND ORG_ID = #{org_id})
						WHEN TD.MSG_TYPE IS NOT NULL AND TD.MSG_TYPE = '1009' 
							THEN (SELECT FRN_TALK FROM SUB_MBER_INFO SMI INNER JOIN MBER_LEVEL ML ON SMI.LEVEL_CD = ML.LEVEL_CD WHERE MBER_NO = #{mber_no} AND ORG_ID = #{org_id})
					END AS FEE
					<if test="yearMonth != '' and yearMonth != null">
						,CASE 
							WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '0' THEN (SELECT min(date_mt_sent) FROM ${smtTab} esl  WHERE td.noti_group_id = esl.noti_group_id )
							WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '2' THEN (SELECT min(date_mt_sent) FROM ${mmtTab} eml  WHERE td.noti_group_id = eml.noti_group_id )
							WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '3' THEN (SELECT min(date_mt_sent) FROM ${mmtTab} eml  WHERE td.noti_group_id = eml.noti_group_id )
							WHEN TD.MSG_TYPE IS NOT NULL AND TD.MSG_TYPE = '1008' THEN (SELECT min(date_mt_sent) FROM ${itaTab} etl  WHERE td.noti_group_id = etl.noti_group_id )
							WHEN TD.MSG_TYPE IS NOT NULL AND TD.MSG_TYPE = '1009' THEN (SELECT min(date_mt_sent) FROM ${itaTab} etl  WHERE td.noti_group_id = etl.noti_group_id )
						END AS send_start,
						CASE 
							WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '0' THEN (SELECT max(date_mt_sent) FROM ${smtTab} esl  WHERE td.noti_group_id = esl.noti_group_id )
							WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '2' THEN (SELECT max(date_mt_sent) FROM ${mmtTab} eml  WHERE td.noti_group_id = eml.noti_group_id )
							WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '3' THEN (SELECT max(date_mt_sent) FROM ${mmtTab} eml  WHERE td.noti_group_id = eml.noti_group_id )
							WHEN TD.MSG_TYPE IS NOT NULL AND TD.MSG_TYPE = '1008' THEN (SELECT max(date_mt_sent) FROM  ${itaTab} etl  WHERE td.noti_group_id = etl.noti_group_id )
							WHEN TD.MSG_TYPE IS NOT NULL AND TD.MSG_TYPE = '1009' THEN (SELECT max(date_mt_sent) FROM  ${itaTab} etl  WHERE td.noti_group_id = etl.noti_group_id )
						END AS send_end
					</if>
				FROM T_DATA TD WHERE 1=1 AND NOTI_GROUP_ID IS NOT NULL AND TD.MBER_NO = #{mber_no} AND TD.ORG_ID = #{org_id} 
					AND TD.DATE_CLIENT_REQ LIKE CONCAT(#{yearMonth},'-%')
					<include refid="searchSendResListQuery"/>
				group by noti_group_id limit #{recordCountPerPage}
				ORDER BY TD.SEQ
	        ) B, (SELECT @ROWNUM := 0 FROM DUAL) ROWNUM
		) C        
		ORDER BY RNUM DESC
		LIMIT #{firstIndex}, #{recordCountPerPage} -->
	</select>
	
	<select id="selectAllSendFee" parameterType="i2c.biz.customActivity.message.vo.MessageVO" resultMap="messageVO">
        /* i2c.biz.customActivity.message.MessageDAO.xml "selectAllSendFee" 발송결과 비용*/
        SELECT 
			(SELECT COUNT(TD.SUCCESS_CNT) * ML.SMS FROM T_DATA TD 
				INNER JOIN SUB_MBER_INFO SMI ON TD.MBER_NO = SMI.MBER_NO AND TD.ORG_ID = SMI.ORG_ID
				INNER JOIN MBER_LEVEL ML ON SMI.LEVEL_CD = ML.LEVEL_CD 
				WHERE 1=1 AND TD.MBER_NO = #{mber_no} AND TD.ORG_ID = #{org_id} AND TD.SERVICE_TYPE = '0') AS SMS_FEE,
			(SELECT COUNT(TD.SUCCESS_CNT) * ML.MMS FROM T_DATA TD 
				INNER JOIN SUB_MBER_INFO SMI ON TD.MBER_NO = SMI.MBER_NO AND TD.ORG_ID = SMI.ORG_ID
				INNER JOIN MBER_LEVEL ML ON SMI.LEVEL_CD = ML.LEVEL_CD 
				WHERE 1=1 AND TD.MBER_NO = #{mber_no} AND TD.ORG_ID = #{org_id} AND TD.SERVICE_TYPE = '2') AS MMS_FEE,
			(SELECT COUNT(TD.SUCCESS_CNT) * ML.LMS FROM T_DATA TD 
				INNER JOIN SUB_MBER_INFO SMI ON TD.MBER_NO = SMI.MBER_NO AND TD.ORG_ID = SMI.ORG_ID
				INNER JOIN MBER_LEVEL ML ON SMI.LEVEL_CD = ML.LEVEL_CD 
				WHERE 1=1 AND TD.MBER_NO = #{mber_no} AND TD.ORG_ID = #{org_id} AND TD.SERVICE_TYPE = '3') AS LMS_FEE,
			(SELECT COUNT(TD.SUCCESS_CNT) * ML.NTCN_TALK FROM T_DATA TD 
				INNER JOIN SUB_MBER_INFO SMI ON TD.MBER_NO = SMI.MBER_NO AND TD.ORG_ID = SMI.ORG_ID
				INNER JOIN MBER_LEVEL ML ON SMI.LEVEL_CD = ML.LEVEL_CD 
				WHERE 1=1 AND TD.MBER_NO = #{mber_no} AND TD.ORG_ID = #{org_id} AND TD.MSG_TYPE = '1008') AS NTCNTALK_FEE,
			(SELECT COUNT(TD.SUCCESS_CNT) * ML.FRN_TALK FROM T_DATA TD 
				INNER JOIN SUB_MBER_INFO SMI ON TD.MBER_NO = SMI.MBER_NO AND TD.ORG_ID = SMI.ORG_ID
				INNER JOIN MBER_LEVEL ML ON SMI.LEVEL_CD = ML.LEVEL_CD 
				WHERE 1=1 AND TD.MBER_NO = #{mber_no} AND TD.ORG_ID = #{org_id} AND TD.MSG_TYPE = '1009') AS FRNTALK_FEE
	</select>
    
    
    <select id="selectMberInfo" parameterType="i2c.biz.customActivity.message.vo.MessageVO" resultMap="messageVO">
    	/* i2c.biz.customActivity.message.MessageDAO.xml selectMberInfo 회원정보*/
    	SELECT ML.LEVEL_CD FROM SUB_MBER_INFO SMI INNER JOIN MBER_LEVEL ML ON SMI.LEVEL_CD = ML.LEVEL_CD WHERE 1=1 AND MBER_NO = #{mber_no} AND ORG_ID = #{org_id}
    </select>
    
    <select id="selectAllSendCnt" parameterType="i2c.biz.customActivity.message.vo.MessageVO" resultType="int">
    	/* i2c.biz.customActivity.message.MessageDAO.xml selectAllSendCnt 전체 발송성공 건수*/
    	SELECT COUNT(0) FROM T_DATA TD WHERE 1=1 AND td.tmp_book_yn = 'S' AND MBER_NO = #{mber_no} AND ORG_ID = #{org_id} 
    </select>
    
    
    <select id="countBookResList" parameterType="i2c.biz.customActivity.message.vo.MessageVO" resultType="int">
    	/* i2c.biz.customActivity.message.MessageDAO.xml countBookResList 발송예약 목록 카운트*/
		SELECT COUNT(0) FROM (SELECT TD.NOTI_GROUP_ID FROM T_DATA TD 
		WHERE 1=1 AND NOTI_GROUP_ID IS NOT NULL AND TMP_BOOK_YN IN('Y','C')
			<include refid="searchSendResListQuery"/>
		GROUP BY NOTI_GROUP_ID) TAB
    </select>
    
    <select id="selectBookResList" parameterType="i2c.biz.customActivity.message.vo.MessageVO" resultMap="messageVO">
        /* i2c.biz.customActivity.message.MessageDAO.xml selectBookResList 발송예약 목록 리스트*/
		SELECT *
		FROM (
		    SELECT (@ROWNUM  := @ROWNUM + 1) RNUM, B.*
	      FROM (
	        	SELECT NOTI_GROUP_ID,
					DATE_CLIENT_REQ,
					<!-- (SELECT SUM(TD2.ALL_CNT) FROM T_DATA TD2 WHERE TD.SEQ = TD2.SEQ ) SEND_CNT, -->
					(SELECT COUNT(0) FROM MC_CA_DATA MCD WHERE TD.NOTI_GROUP_ID = MCD.NOTI_GROUP_ID ) SEND_CNT,
					CASE 
						WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '0' THEN 'SMS'
						WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '2' THEN 'MMS' 
						WHEN TD.SERVICE_TYPE IS NOT NULL AND TD.SERVICE_TYPE = '3' THEN 'LMS'
						WHEN TD.MSG_TYPE IS NOT NULL AND TD.MSG_TYPE = '1008' THEN '알림톡'
						WHEN TD.MSG_TYPE IS NOT NULL AND TD.MSG_TYPE = '1009' THEN '친구톡'
					END AS MSGTYPE,
					CASE 
						WHEN TD.TMP_BOOK_YN IS NOT NULL AND TD.TMP_BOOK_YN = 'Y' THEN '대기'
						WHEN TD.TMP_BOOK_YN IS NOT NULL AND TD.TMP_BOOK_YN = 'C' THEN '취소' 
					END AS SEND_STATUS,
					TD.TMP_BOOK_YN
				FROM T_DATA TD WHERE 1=1 AND NOTI_GROUP_ID IS NOT NULL 
					AND TMP_BOOK_YN IN('Y','C')
					<include refid="searchSendResListQuery"/>
				GROUP BY NOTI_GROUP_ID <!-- limit #{recordCountPerPage} -->
				ORDER BY CREATE_DATE ASC
	        ) B, (SELECT @ROWNUM := 0 FROM DUAL) ROWNUM
		) C        
		ORDER BY RNUM DESC
		LIMIT #{firstIndex}, #{recordCountPerPage}
	</select>
	
	<delete id="deleteBookMcData" parameterType ="String">
     /* [i2c.biz.customActivity.message.MessageDAO.deleteBookMcData] 예약취소된 mc_ca_data 삭제*/
     	DELETE FROM MC_CA_DATA WHERE NOTI_GROUP_ID = #{noti_group_id}
     </delete>
    
    <update id="cancelBookMsg"  parameterType="String">
    	/* [i2c.biz.admin.srvmngh.dao.SrvmnghDAO.cancelBookMsg] cancelBookMsg 발송취소  */
    	UPDATE T_DATA 
	       SET tmp_book_yn = 'C'
        WHERE noti_group_id   = #{noti_group_id} 
    </update>
    
    <select id="checkCancelBook" parameterType="String" resultType="int">
	    /* [i2c.biz.admin.srvmngh.dao.SrvmnghDAO.checkCancelBook] checkCancelBook 전송 5분전 발송 취소 가능여부  */
	    SELECT COUNT(0) FROM T_DATA TD WHERE DATE_FORMAT(DATE_CLIENT_REQ , '%Y%m%d%H%i%s') > DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 5 MINUTE), '%Y%m%d%H%i%s') 
	    	AND NOTI_GROUP_ID = #{noti_group_id}
    </select>
    
    <update id="delTmplOne"  parameterType="String">
    	/* [i2c.biz.admin.srvmngh.dao.SrvmnghDAO.delTmplOne] delTmplOne 템플릿 삭제처리  */
    	UPDATE T_DATA 
	       SET TMPL_DEL_YN = 'Y'
        WHERE SEMA_TEMPLETE_CODE   = #{sema_templete_code} 
    </update>
    
    <select id="tableChk" resultType="int">
    /* [i2c.biz.admin.srvmngh.dao.SrvmnghDAO.tableChk] tableChk 테이블 존재 여부  */
		SELECT 
			count(*) 
		FROM Information_schema.tables
		WHERE table_schema = 'i2sema'
		   AND table_name = #{logTable}
    </select>
    
    
    <insert id="sendDataTest" parameterType="java.util.HashMap"> 
        /* i2c.biz.customActivity.message.MessageDAO.xml sendDataTest 데이터 전송 테스트 */
   		insert into mc_data_test(content, phn_num, noti_id, date_time, saldate,  salorgcd, prtnrid) 
   		values(#{content},#{phn_num},#{noti_id}, sysdate(), #{name}, #{longUrl}, #{phone})
    </insert>
    
    <insert id="sendDataTestForAutoM" parameterType="java.util.HashMap"> 
        /* i2c.biz.customActivity.message.MessageDAO.xml sendDataTest 데이터 전송 테스트 */
   		insert into mc_data_test(saldate, salorgcd, prtnrid, date_time ) 
   		values(#{SALDATE},#{SALORGCD},#{PRTNRID}, sysdate())
    </insert>
    
    <select id="chkTdata" resultType="i2c.cmm.base.CommonResultMap" parameterType="java.util.HashMap">
    /* [i2c.biz.admin.srvmngh.dao.SrvmnghDAO.chkTdata] tableChk tData 데이터 존재확인  */
	    <!-- SELECT CASE WHEN COUNT(0) = 0 THEN 0 ELSE SEQ END SEQ
		FROM T_DATA TD WHERE NOTI_GROUP_ID = #{noti_group_id} LIMIT 1 -->
		<!-- SELECT	
		CASE WHEN tab.CNT = 0 THEN 0
			WHEN tab.CNT > 0 AND #{tmp_book_yn} = 'Y' AND tab.TMP_BOOK_YN != 'Y' THEN 0
			WHEN tab.CNT > 0 AND #{tmp_book_yn} = 'Y' AND tab.TMP_BOOK_YN = 'Y'  AND DATE_FORMAT(tab.DATE_CLIENT_REQ ,'%Y%m%d%H%i%s') != DATE_FORMAT(#{dateclientreq} ,'%Y%m%d%H%i%s') THEN 0
			WHEN tab.CNT > 0 AND #{tmp_book_yn} = 'Y' AND tab.TMP_BOOK_YN = 'Y'  AND DATE_FORMAT(tab.DATE_CLIENT_REQ ,'%Y%m%d%H%i%s') = DATE_FORMAT(#{dateclientreq} ,'%Y%m%d%H%i%s') THEN tab.SEQ
			WHEN tab.CNT > 0 AND tab.TMP_BOOK_YN != 'Y' AND DATE_FORMAT(tab.DATE_CLIENT_REQ ,'%Y%m%d') < DATE_FORMAT(SYSDATE() ,'%Y%m%d') THEN 0
			WHEN tab.CNT > 0 AND tab.TMP_BOOK_YN != 'Y' AND DATE_FORMAT(tab.DATE_CLIENT_REQ ,'%Y%m%d') = DATE_FORMAT(SYSDATE() ,'%Y%m%d') THEN tab.SEQ
			ELSE 0
		END SEQ, tab.DATE_CLIENT_REQ, tab.TMP_BOOK_YN
		FROM(
				SELECT COUNT(0) AS CNT, SEQ, DATE_CLIENT_REQ, TMP_BOOK_YN 
				FROM T_DATA TD WHERE SEQ = (SELECT MAX(SEQ) FROM T_DATA WHERE NOTI_GROUP_ID = #{noti_group_id})
			) tab -->
		<![CDATA[
		SELECT	
			CASE 
				WHEN tab.CNT = 0 THEN 0
				WHEN tab.CNT > 0 AND tab.TMP_BOOK_YN = 'Y' AND tab.DATE_CLIENT_REQ AND TIME(tab.DATE_CLIENT_REQ) = TIME('08:10:11')
					THEN 
							CASE 
								WHEN tab.ALL_CNT = 0 THEN tab.SEQ
								WHEN tab.ALL_CNT > 0 AND (SELECT NOTI_ID FROM MC_CA_DATA MCD WHERE MCD.NOTI_GROUP_ID = #{noti_group_id} AND SEND_AT = 'N' LIMIT 1) IS NOT NULL 
									AND DATE_FORMAT(tab.CREATE_DATE,'%Y%m%d') = DATE_FORMAT(SYSDATE() ,'%Y%m%d') THEN tab.SEQ
								ELSE 0
							END 
				WHEN tab.CNT > 0 AND #{tmp_book_yn} = 'Y' AND tab.TMP_BOOK_YN != 'Y' THEN 0
				WHEN tab.CNT > 0 AND #{tmp_book_yn} = 'Y' AND tab.TMP_BOOK_YN = 'Y'  AND DATE_FORMAT(tab.DATE_CLIENT_REQ ,'%Y%m%d%H%i%s') != DATE_FORMAT(#{dateclientreq} ,'%Y%m%d%H%i%s') THEN 0
				WHEN tab.CNT > 0 AND #{tmp_book_yn} = 'Y' AND tab.TMP_BOOK_YN = 'Y'  AND DATE_FORMAT(tab.DATE_CLIENT_REQ ,'%Y%m%d%H%i%s') = DATE_FORMAT(#{dateclientreq} ,'%Y%m%d%H%i%s') THEN tab.SEQ
				WHEN tab.CNT > 0 AND tab.TMP_BOOK_YN != 'Y' AND DATE_FORMAT(tab.DATE_CLIENT_REQ ,'%Y%m%d') < DATE_FORMAT(SYSDATE() ,'%Y%m%d') THEN 0
				WHEN tab.CNT > 0 AND tab.TMP_BOOK_YN != 'Y' AND DATE_FORMAT(tab.DATE_CLIENT_REQ ,'%Y%m%d') = DATE_FORMAT(SYSDATE() ,'%Y%m%d') THEN tab.SEQ
			ELSE 0
			END SEQ, 
			tab.DATE_CLIENT_REQ, tab.TMP_BOOK_YN
		FROM(
				SELECT COUNT(0) AS CNT, SEQ, DATE_CLIENT_REQ, TMP_BOOK_YN , ALL_CNT , CREATE_DATE
				FROM T_DATA TD WHERE SEQ = (SELECT MAX(SEQ) FROM T_DATA WHERE NOTI_GROUP_ID = #{noti_group_id})
			) tab
		]]>        
    </select>
    
	 <update id="updateTdataSendData" parameterType="java.util.HashMap"> 
     /* [i2c.biz.customActivity.message.MessageDAO.updateTdataAllCnt] T_DATA 야간광고 전송 req and book 업데이트*/
	     UPDATE T_DATA
	     	SET TMP_BOOK_YN = 'Y', DATE_CLIENT_REQ = #{date_client_req} 
	     WHERE SEQ = #{seq}
     </update>
    
    <insert id="insertMcTmpData" parameterType="java.util.HashMap">
    /* [i2c.biz.customActivity.message.MessageDAO.insertMcTmpData] MC CA 임시 데이터 저장 */
		INSERT INTO MC_CA_DATA
			(
				noti_id
				,noti_group_id
				,activityId
				,longUrl
				,dataExtensionObj
				,personalFieldArr
				,mber_no
				,org_id
				,content
				,subject
				,callback
				,priority
				,tmp_book_yn
				,adsend_yn
				,date_client_req
				,msg_cl_type
				,ars_080_num
				,templete_type
				,templete_id
				,recipient_num
				,kakao_img_url
				,kakao_img_link
				,t_kakao
				,t_kakao_send
				,t_file
				,journeyId
				,definitionInstanceId
				,activityInstanceId
				,keyValue
				,testYn
				,adFrontFlag
				,adEndFlag
			)
		VALUES 
			(
				#{noti_id},
				#{noti_group_id},
				#{activityId},
				#{longUrl},
				#{dataExtensionObj},
				#{personalFieldArr},
				#{mber_no},
				#{org_id},
				#{content},
				#{subject},
				#{callback},
				#{priority},
				#{tmp_book_yn},
				#{adsend_yn},
				#{date_client_req},
				#{msg_cl_type},
				<!-- <if test="msg_cl_type != null and msg_cl_type != '' and msg_cl_type.equals('1') and ars_080_num != null and ars_080_num != ''"> -->
				#{ars_080_num},
				#{templete_type},
				#{templete_id},
				#{recipient_num},
				#{kakao_img_url},
				#{kakao_img_link},
				#{t_kakao},
				#{t_kakao_send},
				#{file_seq},
				#{journeyId},
				#{definitionInstanceId},
				#{activityInstanceId},
				#{keyValue},
				#{testYn},
				#{adfrontflag},
				#{adendflag}
			)
	</insert>
	
	
	<insert id="smsTran" parameterType ="java.util.HashMap">
        /* [i2c.biz.customActivity.message.MessageDAO.smsTran] sms 전송 API */
        INSERT INTO EM_SMT_TRAN_TEST (
	         	  DATE_CLIENT_REQ
         		, MSG_STATUS
	       		, CALLBACK 
	       		, SERVICE_TYPE
         		, CONTENT  
	       		, RECIPIENT_NUM
	       		, seq
	       		, noti_group_id
	       		, noti_id
        						) 
         VALUES 
         	<foreach collection="t_per" item="item" separator=",">
         		(
	           	   <if test='tmp_book_yn.equals("N")'>
				     SYSDATE()
				   </if>
         		   <if test='tmp_book_yn.equals("Y")'>
				     (select date_client_req from t_data where seq = #{seq})
				   </if>
           		, "1"   
	         	, #{callback}
	         	, (select service_type from t_data where seq = #{seq})
	         	, #{item.content}
                , #{item.recipient_num}
                , #{seq}
	       		, #{noti_group_id}
	       		, #{item.noti_id}
                ) 
            </foreach>
	 </insert>
	 
	 
	 <insert id="mmsTran" parameterType ="java.util.HashMap">
        /* [i2c.biz.customActivity.message.MessageDAO.mmsTran] mms 전송 API */
        INSERT INTO EM_MMT_TRAN_TEST (
	         	  DATE_CLIENT_REQ
	         	, INPUT_TYPE  
         		, MSG_STATUS
	       		, CALLBACK 
	       		, SERVICE_TYPE
	       		, SUBJECT
         		, CONTENT  
	       		, RECIPIENT_NUM
	       		, ATTACH_FILE_GROUP_KEY
	       		, seq
	       		, noti_group_id
	       		, noti_id
        						) 
         VALUES 
         	<foreach collection="t_per" item="item" separator=",">
         		(
	           	   <if test='tmp_book_yn.equals("N")'>
				     SYSDATE()
				   </if>
         		   <if test='tmp_book_yn.equals("Y")'>
				     (select date_client_req from t_data where seq = #{seq})
				   </if>
	           	, "0"  
           		, "1"   
	         	, #{callback}
	         	, #{templete_type}
	         	, (select subject from t_data where seq = #{seq})
	         	, #{item.content}
                , #{item.recipient_num}
                , #{fileGroupKey}
                , #{seq}
	       		, #{noti_group_id}
	       		, #{item.noti_id}
                ) 
			</foreach>
	 </insert>
    
    
    <insert id="insertIta" parameterType ="java.util.HashMap">
        /* [i2c.biz.customActivity.message.MessageDAO.insertIta] 알림톡/친구톡 전송 API */
        INSERT INTO ITA_TALK_TRAN_TEST (
	         	  DATE_CLIENT_REQ
	         	, SENDER_KEY
         		, MSG_STATUS
	       		, CALLBACK 
	       		, MSG_TYPE
         		, CONTENT  
	       		, TEMPLATE_CODE
	       		, RECIPIENT_NUM
	       		, img_url
	       		, img_link
	       		, KKO_BTN_TYPE
	       		, KKO_BTN_INFO    	
	       		, seq
	       		, noti_group_id
	       		, noti_id	
        		) 
         VALUES 
         	<foreach collection="t_per" item="item" separator=",">
         		(
	           	   <if test='tmp_book_yn.equals("N")'>
				     SYSDATE()
				   </if>
         		   <if test='tmp_book_yn.equals("Y")'>
				     (select date_client_req from t_data where seq = #{seq})
				   </if>
	           	, (select sender_key from t_data where seq = #{seq})
           		, "1"
	         	, #{callback}
	         	<!-- , (select msg_type from t_data where seq = #{seq}) -->
	         	, CASE (SELECT MSG_TYPE FROM T_DATA WHERE SEQ = #{seq}) 
				  WHEN '1009' THEN
				  	  CASE (SELECT CSA.OUT_ALLW_YN FROM T_DATA CTD INNER JOIN SNS_ATTACH CSA ON CTD.kakao_img_url = CSA.USR_LINK WHERE CTD.SEQ = #{seq})
				  	  WHEN 'Y' THEN IF((SELECT KAKAO_IMG_URL FROM T_DATA WHERE SEQ = #{seq}) != NULL OR (SELECT KAKAO_IMG_URL FROM T_DATA WHERE SEQ = #{seq}) != '', '1014', (SELECT MSG_TYPE FROM T_DATA WHERE SEQ = #{seq}))
			  		  ELSE IF((SELECT KAKAO_IMG_URL FROM T_DATA WHERE SEQ = #{seq}) != NULL OR (SELECT KAKAO_IMG_URL FROM T_DATA WHERE SEQ = #{seq}) != '', '1013', (SELECT MSG_TYPE FROM T_DATA WHERE SEQ = #{seq}))
			  		  END
				  ELSE IF((SELECT KAKAO_IMG_URL FROM T_DATA WHERE SEQ = #{seq}) != NULL OR (SELECT KAKAO_IMG_URL FROM T_DATA WHERE SEQ = #{seq}) != '', '1012', (SELECT MSG_TYPE FROM T_DATA WHERE SEQ = #{seq}))
				  END 
	         	, #{item.content}
                , (select kakao_noti_templete_code from t_data where seq = #{seq})
                , #{item.recipient_num}
                , (select kakao_img_url from t_data where seq = #{seq})
                , (select kakao_img_link from t_data where seq = #{seq})
				, #{kko_btn_type}
				, #{kko_btn_info}
				, #{seq}
	       		, #{noti_group_id}
	       		, #{item.noti_id}
                ) 
			</foreach>
	 </insert>
	 
	 <update id="updateTdataAllCnt" parameterType="java.util.HashMap"> 
     /* [i2c.biz.customActivity.message.MessageDAO.updateTdataAllCnt] T_DATA ALL_CNT 업데이트*/
	     UPDATE T_DATA
	     	SET ALL_CNT = ( SELECT ALL_CNT + #{t_per_cnt} FROM T_DATA WHERE SEQ = #{seq} ) 
	     WHERE SEQ = #{seq}
     </update>
     
     <delete id="deleteMcCaData" parameterType ="java.util.HashMap">
     /* [i2c.biz.customActivity.message.MessageDAO.deleteMcCaData] 저장완료된 mc_ca_data 삭제*/
     	DELETE FROM MC_CA_DATA WHERE NOTI_ID IN(
     		<foreach collection="t_per" item="item" separator=",">
				#{item.noti_id}
			</foreach>
		)
     </delete>
     
     
     <select id="selectMcGroupData"  resultType="i2c.cmm.base.CommonResultMap">
     	/* [i2c.biz.customActivity.message.MessageDAO.selectNotiGpId] 세팅할 t_data  */
     	SELECT 
			noti_group_id
			<!-- ,longUrl
			,dataExtensionObj
			,personalFieldArr
			,mber_no
			,org_id
			,content
			,subject
			,callback
			,priority
			,tmp_book_yn
			,adsend_yn
			,date_client_req
			,msg_cl_type
			,ars_080_num
			,templete_type
			,templete_id
			,kakao_img_url
			,kakao_img_link
			,t_kakao
			,t_file
			,testyn
     	<![CDATA[ FROM MC_CA_DATA MCD WHERE MCD.DATE_CLIENT_REQ < DATE_ADD(NOW(), INTERVAL +6 MINUTE) ]]> -->
     	FROM MC_CA_DATA WHERE SEND_AT = 'N'
     	GROUP BY NOTI_GROUP_ID
     </select>
     
     <select id="selectMcCaData"  resultType="i2c.cmm.base.CommonResultMap" parameterType="java.lang.String">
     	/* [i2c.biz.customActivity.message.MessageDAO.selectNotiGpId] 세팅할 t_data  */
     	SELECT 
			noti_group_id
			,longUrl
			,dataExtensionObj
			,personalFieldArr
			,mber_no
			,org_id
			,content
			,subject
			,callback
			,priority
			,tmp_book_yn
			,adsend_yn
			,date_client_req
			,msg_cl_type
			,ars_080_num
			,templete_type
			,templete_id
			,kakao_img_url
			,kakao_img_link
			,t_kakao
			,t_file
			,testyn
			,adfrontflag
			,adendflag
     	FROM MC_CA_DATA WHERE NOTI_GROUP_ID = #{noti_group_id} AND SEND_AT = 'N'
     	LIMIT 1
     </select>
    
    
	<select id="chkIllegalMsg" parameterType="java.lang.String" resultType="int">
    	/* i2c.biz.customActivity.message.MessageDAO.xml chkIllegalMsg 광고문자 전송불가시간 데이터 유무 확인 */
    	<!-- SELECT COUNT(0) FROM MC_CA_DATA MCD WHERE NOTI_GROUP_ID = #{noti_group_id}
		AND TMP_BOOK_YN = 'N' AND ADSEND_YN IS NULL AND TEMPLETE_TYPE IN('0','2','3') AND MSG_CL_TYPE = '1' -->
		
		SELECT COUNT(0) FROM MC_CA_DATA MCD WHERE NOTI_GROUP_ID = #{noti_group_id}
		AND TMP_BOOK_YN = 'N' AND ADSEND_YN IS NULL AND MSG_CL_TYPE = '1' AND SEND_AT = 'N'
	</select>
	
	<update id="updateIllegalMsg" parameterType="java.util.HashMap"> 
     /* [i2c.biz.customActivity.message.MessageDAO.updateIllegalMsg] 광고문자 전송불가시간 날짜 및 시간변경 */
	     UPDATE MC_CA_DATA SET TMP_BOOK_YN = 'Y' , ADSEND_YN = 'C', DATE_CLIENT_REQ = #{date_client_req} 
	     WHERE NOTI_GROUP_ID = #{noti_group_id}
	</update>
     
     
     <select id="selectTPerData"  resultType="i2c.cmm.base.CommonResultMap" parameterType="java.util.HashMap">
     	/* [i2c.biz.customActivity.message.MessageDAO.selectTPerData] 세팅할 t_per  */
     	<!-- SELECT 
			MCD.noti_id
			,MCD.recipient_num	
			,MCD.dataExtensionObj
			,MCD.personalFieldArr
     	FROM MC_CA_DATA MCD LEFT JOIN (
			SELECT TAB.REJECT_NUM FROM REJECT_NUM_MNG TAB INNER JOIN ARS_NUM_MNG ANM ON TAB.ARS_ID = ANM.ARS_ID 
				WHERE TAB.USE_AT = 'Y' 
		     		AND ANM.MBER_NO = #{mber_no}
					AND ANM.ORG_ID = #{org_id}
					AND ANM.ARS_NUM = #{ars_080_num}
					AND TAB.STATUS = 'REJECTST01'
		) RNM ON MCD.RECIPIENT_NUM = RNM.REJECT_NUM 
     	WHERE RNM.REJECT_NUM IS NULL AND MCD.NOTI_GROUP_ID = #{noti_group_id} AND MCD.SEND_AT = 'N'
     	LIMIT ${send_size} -->
     	SELECT 
			MCD.noti_id
			,MCD.recipient_num	
			,MCD.dataExtensionObj
			,MCD.personalFieldArr
			FROM MC_CA_DATA MCD
		WHERE MCD.NOTI_GROUP_ID = #{noti_group_id} AND MCD.SEND_AT = 'N' LIMIT 1
     </select>
     
     <select id="deleteRejectData"  resultType="Integer" parameterType="java.util.HashMap">
     /* [i2c.biz.customActivity.message.MessageDAO.deleteRejectData] 수신거부 대상 삭제 */
     	<!-- DELETE MCD FROM MC_CA_DATA MCD LEFT JOIN (SELECT TAB.REJECT_NUM FROM REJECT_NUM_MNG TAB WHERE TAB.USE_AT = 'Y') RNM ON MCD.RECIPIENT_NUM = RNM.REJECT_NUM 
     	WHERE RNM.REJECT_NUM IS NOT NULL -->
     	
     	DELETE MCD FROM MC_CA_DATA MCD LEFT JOIN (
				SELECT TAB.REJECT_NUM FROM REJECT_NUM_MNG TAB INNER JOIN ARS_NUM_MNG ANM ON TAB.ARS_ID = ANM.ARS_ID WHERE TAB.USE_AT = 'Y'
					AND ANM.MBER_NO = #{mber_no}
					AND ANM.ORG_ID = #{org_id}
					AND ANM.ARS_NUM = #{ars_080_num}
					AND TAB.STATUS = 'REJECTST01'
			) RNM ON MCD.RECIPIENT_NUM = RNM.REJECT_NUM 
     	WHERE RNM.REJECT_NUM IS NOT NULL AND MCD.NOTI_GROUP_ID = #{noti_group_id}
     </select>
     
     
     <select id="selectSeqFromTData"  resultType="Integer" parameterType="java.lang.String">
     	/* [i2c.biz.customActivity.message.MessageDAO.selectSeqFromTData] 기존의 notiGroupId 존재여부 */
     	SELECT 	CASE 
					WHEN MAX(seq) IS NULL THEN 0
					ELSE MAX(seq)
				END SEQ
		FROM T_DATA TD WHERE NOTI_GROUP_ID = #{notiGroupId}
     </select>
     
     
     <select id="selectTfile" parameterType="String" resultType="i2c.cmm.base.CommonResultMap">
    	/* [i2c.biz.customActivity.message.MessageDAO.selectTfile] T_FILE 조회 API */
    	SELECT file_seq, file_content, seq, file_name
    	  FROM T_FILE
     	 WHERE noti_group_id = #{notiGroupId}  	
     </select>
     
     <insert id="insertFile" parameterType="java.util.HashMap">
     /* [i2c.biz.customActivity.message.MessageDAO.insertFile] T_FILE 저장 API */
	    INSERT INTO T_FILE(
	    	    file_status
	    	  , file_name
	    	  , file_content
	    	  , file_description
	    	  , file_size
	    	  , file_width
	    	  , file_height
	    	  , noti_group_id
	    	  )
	    VALUES
	    <foreach collection="tFileList" item="item" separator=",">
	        (
	            #{item.file_status}
	          , #{item.file_name}
	          , #{item.file_path}
	          , #{item.file_description}
	          , #{item.file_size}
	          , #{item.file_width}
	          , #{item.file_height}
	          , #{item.noti_group_id}
	        )
	    </foreach>
	    
	    <selectKey keyProperty="file_seq" resultType="Integer" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey>
	</insert>
	
	<delete id="deleteTfile" parameterType="String"> 
     	/* [i2c.biz.customActivity.message.MessageDAO.deleteTfile] T_FILE 삭제*/
     	DELETE FROM t_file where noti_group_id = #{notiGroupId}
    </delete>
     
	<update id="updateTFile" parameterType="java.util.HashMap">
	/* [i2c.biz.customActivity.message.MessageDAO.updateTFile] 업데이트 t_file seq */
		UPDATE T_FILE SET
			SEQ = #{seq}
		WHERE FILE_SEQ = #{file_seq}
	</update>
	
	
	
	
<!-- 	<resultMap id="mcSendTranMap" type="i2c.cmm.base.CommonResultMap">        
		<collection property = "noti_id" column = "{noti_id = noti_id, templete_type = templete_type, seq = seq}" javaType="String"  select = "i2c.biz.customActivity.message.dao.MessageDAO.insertTran"/>         
		<collection property = "noti_id" column = "{noti_id = noti_id, seq = seq}" javaType="String"  select = "i2c.biz.customActivity.message.dao.MessageDAO.updateTAllCnt"/>
		<collection property = "noti_id" column = "noti_id = noti_id" javaType="String"  select = "i2c.biz.customActivity.message.dao.MessageDAO.delMcCaDataByNoti"/>
	</resultMap> -->
	
	
	<update id="updateTAllCnt" parameterType="java.util.HashMap"> 
		/* [i2c.biz.customActivity.message.MessageDAO.updateTdataAllCnt] T_DATA ALL_CNT 업데이트*/
		<![CDATA[
		UPDATE T_DATA
			SET ALL_CNT = ( SELECT ALL_CNT + SUM((CHAR_LENGTH(#{noti_id})-CHAR_LENGTH(REPLACE(#{noti_id},',',''))+1)) 
							FROM T_DATA 
							WHERE SEQ = #{seq}
							) 
		WHERE SEQ = #{seq}
		]]>
	</update>
	
	<select id="selectMcNotiId"  parameterType="i2c.cmm.base.CommonResultMap" resultType="i2c.cmm.base.CommonResultMap">
     	/* [i2c.biz.customActivity.message.MessageDAO.selectMcNotiId] 전송할 noti_id  */
			<choose>
				<when test='reject_use == "Y"'>
					SELECT 
						MCD.NOTI_ID, RNM.REJECT_NUM
					FROM MC_CA_DATA MCD LEFT JOIN (
						SELECT TAB.REJECT_NUM FROM REJECT_NUM_MNG TAB INNER JOIN ARS_NUM_MNG ANM ON TAB.ARS_ID = ANM.ARS_ID 
							WHERE ANM.MBER_NO = #{mber_no}
								AND ANM.ORG_ID = #{org_id}
								AND ANM.ARS_NUM = #{ars_080_num}
								AND TAB.STATUS = 'REJECTST01'
					) RNM ON MCD.RECIPIENT_NUM = RNM.REJECT_NUM 
					WHERE MCD.NOTI_GROUP_ID = #{noti_group_id} AND MCD.SEND_AT = 'N'
					LIMIT ${send_size}
				</when>
				<otherwise>
					SELECT 
						MCD.NOTI_ID
					FROM MC_CA_DATA MCD
					WHERE MCD.NOTI_GROUP_ID = #{noti_group_id} AND MCD.SEND_AT = 'N'
					LIMIT ${send_size}
				</otherwise>
			</choose>
     </select>
     
     
     <delete id="delRejectNumMcCaData" parameterType ="java.util.HashMap">
     /* [i2c.biz.customActivity.message.MessageDAO.delRejectNumMcCaData] 수신거부된 사용자 번호 mc_ca_data 삭제처리 */
     	DELETE FROM MC_CA_DATA
     	WHERE NOTI_ID IN(
					<foreach collection="t_per" item="item" separator=",">
						<if test="item.reject_num != null and item.reject_num !=''">
							#{item.noti_id}
						</if>
            		</foreach>
     			)
     </delete>
     
     
     <insert id="insertTran" parameterType ="java.util.HashMap">
     /* [i2c.biz.customActivity.message.MessageDAO.insertTran] 전송테이블 insert*/
     	<choose>
     		<when test='templete_type == "0"'>
     			INSERT INTO ${table_name} (
	         	  DATE_CLIENT_REQ
         		, MSG_STATUS
	       		, CALLBACK 
	       		, SERVICE_TYPE
         		, CONTENT  
	       		, RECIPIENT_NUM
	       		, seq
	       		, noti_group_id
	       		, noti_id
	       		, org_id
	       		, priority
        						)
			        SELECT 
		         	 	CASE 
							WHEN mcd.tmp_book_yn = 'N' THEN SYSDATE()
							WHEN mcd.tmp_book_yn = 'Y' THEN (SELECT DATE_CLIENT_REQ FROM T_DATA td WHERE td.SEQ = #{seq} )
							ELSE SYSDATE()
						END DATE_CLIENT_REQ,
						"1" MSG_STATUS,
					    (SELECT CALLBACK FROM T_DATA td WHERE td.SEQ = #{seq} )	CALLBACK,
					    (SELECT SERVICE_TYPE FROM T_DATA td WHERE td.SEQ = #{seq}) SERVICE_TYPE,
					    
						REPLACE(
							<foreach collection="pfCntList">
								REPLACE(
							</foreach>
						CONTENT,CONCAT('#','{',JSON_UNQUOTE(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(mcd.PERSONALFIELDARR, ',', 1), ',', -1),'[','')) ,'}'),JSON_UNQUOTE(JSON_EXTRACT(mcd.DATAEXTENSIONOBJ,CONCAT('$.',JSON_UNQUOTE(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(mcd.PERSONALFIELDARR, ',', 1), ',', -1),'[','')))))),
							<foreach collection="pfCntList" item="num" index="indx">
								CONCAT('#','{',JSON_UNQUOTE(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(mcd.PERSONALFIELDARR, ',', #{num}), ',', -1),'[','')) ,'}'),JSON_UNQUOTE(JSON_EXTRACT(mcd.DATAEXTENSIONOBJ,CONCAT('$.',JSON_UNQUOTE(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(mcd.PERSONALFIELDARR, ',', #{num}), ',', -1),'[',''))))))
								<if test="pfCntList.size != (indx +1)">
									,
								</if>
							</foreach>
						CONTENT,
						
						mcd.RECIPIENT_NUM,
					   #{seq} seq,
					   mcd.noti_group_id,
					   mcd.noti_id,
					   mcd.org_id,
					   mcd.priority
			        FROM MC_CA_DATA mcd
					WHERE mcd.NOTI_ID IN(
						<foreach collection="t_per" item="item" separator=",">
							#{item.noti_id}
	            		</foreach>
	     			)
     		</when>
     		
     		<when test='templete_type == "2" || templete_type == "3"'>
     			INSERT INTO ${table_name} (
	         	  DATE_CLIENT_REQ
	         	, INPUT_TYPE  
         		, MSG_STATUS
	       		, CALLBACK 
	       		, SERVICE_TYPE
	       		, SUBJECT
         		, CONTENT  
	       		, RECIPIENT_NUM
	       		, ATTACH_FILE_GROUP_KEY
	       		, seq
	       		, noti_group_id
	       		, noti_id
	       		, org_id
	       		, priority
        						) 
					SELECT 
						CASE 
							WHEN mcd.TMP_BOOK_YN = 'N' THEN SYSDATE()
							WHEN mcd.TMP_BOOK_YN = 'Y' THEN (SELECT DATE_CLIENT_REQ FROM T_DATA td WHERE td.SEQ = #{seq} )
							ELSE SYSDATE()
						END DATE_CLIENT_REQ,
						'0' INPUT_TYPE,
						   '1' MSG_STATUS,
						   (SELECT CALLBACK FROM T_DATA td WHERE td.SEQ = #{seq} )	CALLBACK,
						   (SELECT SERVICE_TYPE FROM T_DATA td WHERE td.SEQ = #{seq}) SERVICE_TYPE,
						(SELECT SUBJECT FROM T_DATA td WHERE td.SEQ = #{seq}) SUBJECT,
						
						REPLACE(
							<foreach collection="pfCntList">
								REPLACE(
							</foreach>
						CONTENT,CONCAT('#','{',JSON_UNQUOTE(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(mcd.PERSONALFIELDARR, ',', 1), ',', -1),'[','')) ,'}'),JSON_UNQUOTE(JSON_EXTRACT(mcd.DATAEXTENSIONOBJ,CONCAT('$.',JSON_UNQUOTE(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(mcd.PERSONALFIELDARR, ',', 1), ',', -1),'[','')))))),
							<foreach collection="pfCntList" item="num" index="indx">
								CONCAT('#','{',JSON_UNQUOTE(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(mcd.PERSONALFIELDARR, ',', #{num}), ',', -1),'[','')) ,'}'),JSON_UNQUOTE(JSON_EXTRACT(mcd.DATAEXTENSIONOBJ,CONCAT('$.',JSON_UNQUOTE(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(mcd.PERSONALFIELDARR, ',', #{num}), ',', -1),'[',''))))))
								<if test="pfCntList.size != (indx +1)">
									,
								</if>
							</foreach>
						CONTENT,
						
						mcd.RECIPIENT_NUM,
						#{attach_file_group_key} ATTACH_FILE_GROUP_KEY,
						#{seq} SEQ,
						mcd.NOTI_GROUP_ID,
						mcd.NOTI_ID,
						mcd.org_id,
						mcd.priority
					FROM MC_CA_DATA mcd
					WHERE mcd.NOTI_ID IN(
						<foreach collection="t_per" item="item" separator=",">
							#{item.noti_id}
	            		</foreach>
	     			)
     		</when>
     		
     		<when test="templete_type == '1008' || templete_type == '1009'">
     			INSERT INTO ${table_name} (
	         	  DATE_CLIENT_REQ
	         	, SENDER_KEY
         		, MSG_STATUS
	       		, CALLBACK 
	       		, MSG_TYPE
         		, CONTENT  
	       		, TEMPLATE_CODE
	       		, RECIPIENT_NUM
	       		, img_url
	       		, img_link
	       		, KKO_BTN_TYPE
	       		, KKO_BTN_INFO    	
	       		, seq
	       		, noti_group_id
	       		, noti_id
	       		, org_id
	       		, priority
	       		, AD_FLAG
	       		, adFrontFlag
	       		, adEndFlag
	       		<if test="optional_data != null"> 
		    		, optional_data
		    	</if>
        		) 
	        		SELECT 
						CASE 
							WHEN mcd.TMP_BOOK_YN = 'N' THEN SYSDATE()
							WHEN mcd.TMP_BOOK_YN = 'Y' THEN (SELECT DATE_CLIENT_REQ FROM T_DATA td WHERE td.SEQ = #{seq} )
							ELSE SYSDATE()
						END DATE_CLIENT_REQ,
						(SELECT SENDER_KEY FROM T_DATA td WHERE td.SEQ = #{seq}) SENDER_KEY,
						'1'	MSG_STATUS,
						(SELECT CALLBACK FROM T_DATA td WHERE td.SEQ = #{seq} ) CALLBACK,
						<!-- (SELECT MSG_TYPE FROM T_DATA td WHERE td.SEQ = #{seq}) MSG_TYPE, -->
						CASE #{templete_type} 
						WHEN '1009' THEN
							CASE (SELECT CSA.OUT_ALLW_YN FROM T_DATA CTD INNER JOIN SNS_ATTACH CSA ON CTD.kakao_img_url = CSA.USR_LINK WHERE CTD.SEQ = #{seq})
						  	WHEN 'Y' THEN IF((SELECT KAKAO_IMG_URL FROM T_DATA WHERE SEQ = #{seq}) != NULL OR (SELECT KAKAO_IMG_URL FROM T_DATA WHERE SEQ = #{seq}) != '', '1014', #{templete_type})
					  		ELSE IF((SELECT KAKAO_IMG_URL FROM T_DATA WHERE SEQ = #{seq}) != NULL OR (SELECT KAKAO_IMG_URL FROM T_DATA WHERE SEQ = #{seq}) != '', '1013', #{templete_type})
					  		END
						ELSE IF((SELECT KAKAO_IMG_URL FROM T_DATA WHERE SEQ = #{seq}) != NULL OR (SELECT KAKAO_IMG_URL FROM T_DATA WHERE SEQ = #{seq}) != '', '1012', #{templete_type})
						END MSG_TYPE, 
							
						REPLACE(
							<foreach collection="pfCntList">
								REPLACE(
							</foreach>
						CONTENT,CONCAT('#','{',JSON_UNQUOTE(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(mcd.PERSONALFIELDARR, ',', 1), ',', -1),'[','')) ,'}'),JSON_UNQUOTE(JSON_EXTRACT(mcd.DATAEXTENSIONOBJ,CONCAT('$.',JSON_UNQUOTE(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(mcd.PERSONALFIELDARR, ',', 1), ',', -1),'[','')))))),
							<foreach collection="pfCntList" item="num" index="indx">
								CONCAT('#','{',JSON_UNQUOTE(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(mcd.PERSONALFIELDARR, ',', #{num}), ',', -1),'[','')) ,'}'),JSON_UNQUOTE(JSON_EXTRACT(mcd.DATAEXTENSIONOBJ,CONCAT('$.',JSON_UNQUOTE(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(mcd.PERSONALFIELDARR, ',', #{num}), ',', -1),'[',''))))))
								<if test="pfCntList.size != (indx +1)">
									,
								</if>
							</foreach>
						CONTENT,
							
						(SELECT KAKAO_NOTI_TEMPLETE_CODE FROM T_DATA td WHERE td.SEQ = #{seq} ) TEMPLATE_CODE,
						mcd.RECIPIENT_NUM,
						(SELECT KAKAO_IMG_URL FROM T_DATA td WHERE td.SEQ = #{seq} ) IMG_URL,
						(SELECT KAKAO_IMG_LINK FROM T_DATA td WHERE td.SEQ = #{seq} ) IMG_LINK,
						(SELECT TK.KKO_BTN_TYPE FROM T_KAKAO TK WHERE SEQ = #{seq} LIMIT 1
						) KKO_BTN_TYPE,
						<!-- (SELECT CONCAT('{"button":[', GROUP_CONCAT(kko_btn_info SEPARATOR ','), ']}') KKO_BTN_INFO FROM T_KAKAO WHERE SEQ = #{seq}) KKO_BTN_INFO, -->
						CONCAT('{"button":', mcd.t_kakao_send,'}') KKO_BTN_INFO,
						#{seq} SEQ,
						mcd.NOTI_GROUP_ID,
						mcd.NOTI_ID,
						mcd.org_id,
						mcd.priority,
						CASE 
							WHEN (SELECT td.MSG_CL_TYPE FROM T_DATA td WHERE td.SEQ = #{seq}) = '1' THEN 'Y'
							ELSE 'N'
						END AD_FLAG,
						#{adfrontflag} AS adFrontFlag,
						#{adendflag} AS adEndFlag
			       		<if test="optional_data != null"> 
				    		, #{optional_data}
				    	</if>
						FROM MC_CA_DATA mcd
					WHERE mcd.NOTI_ID IN(
						<foreach collection="t_per" item="item" separator=",">
							#{item.noti_id}
	            		</foreach>
	     			)
     		</when>
     	</choose>
     	
     </insert>
     
     
     <delete id="delMcCaDataByNoti" parameterType ="java.util.HashMap">
     /* [i2c.biz.customActivity.message.MessageDAO.delMcCaDataByNoti] 저장완료된 mc_ca_data 삭제*/
     	DELETE FROM MC_CA_DATA
     	WHERE NOTI_ID IN(
					<foreach collection="t_per" item="item" separator=",">
						#{item.noti_id}
            		</foreach>
     			)  
	    	<!-- <where>
				FIND_IN_SET(NOTI_ID, #{noti_id})
	    	</where> -->
     </delete>
     
     <update id="updateMcSendAt" parameterType ="java.util.HashMap">
     /* [i2c.biz.customActivity.message.MessageDAO.updateMcSendAt] MC_CA_DATA 전송상태 업데이트 */
     	UPDATE MC_CA_DATA SET SEND_AT = 'Y' WHERE NOTI_ID IN(
     		<foreach collection="t_per" item="item" separator=",">
				#{item.noti_id}
     		</foreach>
     	)
     </update>
     
	<update id="updateTdata">
	/* [i2c.biz.customActivity.message.MessageDAO.updateTdata] t_data 상태값 업데이트 */
		UPDATE T_DATA SET
			 TMP_BOOK_YN = (
			 	SELECT 
			 	CASE 
					WHEN (SELECT TMP_BOOK_YN FROM T_DATA WHERE SEQ = #{seq} ) = 'N' 
							AND (SELECT TMP_BOOK_YN FROM MC_CA_DATA WHERE NOTI_GROUP_ID = (SELECT NOTI_GROUP_ID FROM T_DATA WHERE SEQ = #{seq} ) AND SEND_AT = 'N' LIMIT 1) = 'N'
						THEN 'N'
					WHEN (SELECT tmp_book_yn FROM T_DATA WHERE SEQ = #{seq} ) = 'Y' 
							AND (SELECT TMP_BOOK_YN FROM MC_CA_DATA WHERE NOTI_GROUP_ID = (SELECT NOTI_GROUP_ID FROM T_DATA WHERE SEQ = #{seq} ) AND SEND_AT = 'N' LIMIT 1) = 'Y'
						THEN 'Y'
					ELSE 'S'
				END
			 )
		WHERE SEQ = #{seq}
	</update>
	
	<insert id="insertNotiData" parameterType ="java.util.HashMap">
	/* [i2c.biz.customActivity.message.MessageDAO.insertNotiData] 중복체크용 noti 값 저장 */
		INSERT INTO MC_NOTI_DATA (NOTI_ID,REG_DATE)
		VALUES
		<foreach collection="t_per" item="item" separator=",">
			(#{item.noti_id},sysdate())
     	</foreach>
	</insert>
	
	
	<delete id="deleteMcNotiData" >
     /* [i2c.biz.customActivity.message.MessageDAO.deleteMcNotiData] 저장된 noti_id 삭제*/
     	<![CDATA[ DELETE FROM MC_NOTI_DATA WHERE REG_DATE < (SYSDATE()-INTERVAL 2 DAY) ]]>
     </delete>
     
     <delete id="deleteMccaNrmlData" >
     /* [i2c.biz.customActivity.message.MessageDAO.deleteMcNotiData] 전송처리된 mc_ca_data 삭제*/
     	<![CDATA[ DELETE FROM MC_CA_DATA WHERE RGST_DATE < (SYSDATE()-INTERVAL 2 DAY) AND SEND_AT = 'Y' AND TMP_BOOK_YN = 'N' ]]>
     </delete>
     
     <delete id="deleteMcNotiBookData" >
     /* [i2c.biz.customActivity.message.MessageDAO.deleteMcNotiData] 전송처리된 mc_ca_data 예약 삭제*/
     	<![CDATA[ DELETE FROM MC_CA_DATA WHERE DATE_CLIENT_REQ < (SYSDATE()-INTERVAL 2 DAY) AND SEND_AT = 'Y' AND TMP_BOOK_YN = 'Y' ]]>
     </delete>
     
     <update id="deletePhysicalData">
     /* [i2c.biz.customActivity.message.MessageDAO.deletePhysicalData] mc_ca_data 물리 데이터 삭제*/
     	OPTIMIZE TABLE MC_CA_DATA
     </update>
     
     <select id="getTmplatInfo" parameterType="java.util.HashMap" resultType="java.util.Map">
        /* i2c.biz.customActivity.message.MessageDAO.xml getTmplatInfo 메세지 메인*/
        <![CDATA[
        	SELECT	*
        	FROM	tmplat
        	WHERE	sfdc_tmplat_id = #{templete_id}
        			AND use_at = 'Y'
        ]]>		      
	</select>
	
	
	<delete id="deleteDuplicateMcNotiData" >
     /* [i2c.biz.customActivity.message.MessageDAO.deleteDuplicateMcNotiData] 중복 저장된 noti_id 삭제*/
     	DELETE FROM MC_CA_DATA WHERE NOTI_ID IN(
     		SELECT MCDD.NOTI_ID FROM MC_CA_DATA MCDD INNER JOIN MC_NOTI_DATA MND ON MCDD.NOTI_ID = MND.NOTI_ID
     	)
     </delete>
     
     <insert id="insertMcCsv" parameterType="map">
     <![CDATA[
     	INSERT INTO ${tableName}
     	(
     		orgid,
	     	groupid,
			messageid,
			channel1,
			channel2,
			comp_dt,
			channel1_f_code,
			channel2_f_code,
			date_client_req,
			content,
			callback,
			recipient_num,
			ars_080_num
     	) VALUES (
     		#{orgId},
     		#{groupId},
     		#{messageId},
     		#{channel1},
     		#{channel2},
     		#{compDt},
     		#{channel1FCode},
     		#{channel2FCode},
     		#{dateClientReq},
     		#{content},
     		#{callback},
     		#{recipientNum},
     		#{ars080num}
     	)
     ]]>
     </insert>
     
	<select id="selectMcCsv" parameterType="map" resultType="map">
	<![CDATA[
		SELECT	groupid,
						messageid,
						channel1,
						channel2,
						comp_dt,
						channel1_f_code,
						channel2_f_code,
						date_client_req,
						content,
						callback,
						recipient_num,
						ars_080_num
     	FROM		${tableName}
     	ORDER BY date_client_req
     	LIMIT #{firstIndex}, #{recordCountPerPage}
	]]>
	</select>
	
	<select id="selectMcCsvCount" parameterType="map" resultType="int">
	<![CDATA[
		SELECT	count(*) cnt
     	FROM		${tableName}
	]]>
	</select>
	
	<delete id="dropMcCsv" parameterType="map">
	<![CDATA[
		DROP TABLE IF EXISTS mc_csv_${orgId}_${targetDate}
	]]>
	</delete>
	
	<insert id="createMcCsv" parameterType="map">
	<![CDATA[
		CREATE TABLE mc_csv_${orgId}_${targetDate} AS
		SELECT * FROM mc_csv_base
	]]>
	</insert>
	
	<insert id="createLogTableProcedure" parameterType="map">
		<![CDATA[
			CALL ${procedureName}(#{date})
		]]>
	</insert>
	
	<insert id="createLogTable" parameterType="map">
	<![CDATA[
		CREATE TABLE ${createTableName} AS
		SELECT * FROM ${tableName} where date_client_req between #{startDate} and #{endDate};
	]]>
	</insert>
	
	<delete id="dropLogTable" parameterType="map">
	<![CDATA[
		DROP TABLE IF EXISTS ${createTableName}
	]]>
	</delete>
	
	<select id="countTdataCsvCount" parameterType="map" resultType="Long">
	<![CDATA[
		SELECT		SUM(all_cnt) AS cnt
		FROM			t_data
		WHERE		org_id = #{orgId}
							AND date_client_req BETWEEN #{startDate} AND #{endDate}
	]]>
	</select>
</mapper>
