<?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="com.i2sema.bulk.dao.BulkDAO">

    <parameterMap id="bulkVO" type="com.i2sema.bulk.vo.BulkVO" />
    <resultMap id="bulkVO"     type="com.i2sema.bulk.vo.BulkVO"/>

	<select id="listBulk"  parameterType="java.lang.String" resultType="i2c.cmm.base.CommonResultMap">
        /* [com.i2sema.bulk.dao.BulkDAO.listBulk] bulk 목록 */
        SELECT 
               MT_PR          
             , MT_SEQ         
             , PRIORITY       
             , DATE_CLIENT_REQ
             , CONTENT        
             , CALLBACK       
             , MSG_STATUS     
             , RECIPIENT_NUM  
		FROM  BULK_EM_SMT_LOG
		WHERE mt_pr BETWEEN '1' and #{searchCondition}
     </select>
     
     <insert id="insertBulk" parameterType="java.lang.String">
     /* [com.i2sema.bulk.dao.BulkDAO.insertBulk] bulk 등록 */
     INSERT INTO BULK_SFDC_TO_SEMA (
	          mt_pr          
			, mt_seq         
			, priority       
			, date_client_req
			, content        
			, callback       
			, msg_status     
			, recipient_num  
			, ifAggregation
			, ifTotCnt
			, ifSplitCnt
			, ifSplitSeq
			)
		values (
		     #{mt_pr}
		   , #{mt_seq}
		   , #{priority}
		   , #{date_client_req}
		   , #{content}
		   , #{callback}
		   , #{msg_status}
		   , #{recipient_num}
		   , #{ifAggregation}
		   , #{ifTotCnt}
		   , #{ifSplitCnt}
		   , #{ifSplitSeq}	
		)
     </insert>
     
     <delete id="deleteBulk" parameterType="java.lang.String">
     /* [com.i2sema.bulk.dao.BulkDAO.deleteBulk] bulk 삭제 */
	     DELETE 
		   FROM BULK_SFDC_TO_SEMA
		  WHERE ifAggregation =  #{ifAggregation}
     </delete>
     
     <select id="totalCnt"  parameterType="java.lang.String" resultType="int">
      /* [com.i2sema.bulk.dao.BulkDAO.totalCnt] bulk cnt 갯수 */
	     SELECT COUNT(*)
		   FROM BULK_SFDC_TO_SEMA
	      WHERE ifAggregation = #{ifAggregation}
     </select>
     
     <insert id="insertIfLog" parameterType="Map">
	/* [com.i2sema.bulk.dao.BulkDAO.insertIfLog] IF LOG INSERT */	
	INSERT INTO IF_LOG
		   (
			  IF_NAME
			, STATUS
			, START_TIME
			, END_TIME
			, DURATION
			, RECORDS
			, LOGS
			, IF_TRACKING_ID
			, TAR_SYS
			, REGIST_DE			
			) 
	VALUES (
			  #{if_name}
			, #{status}
			, #{start_time}
			, #{end_time}
			, #{duration}
			, #{records}
			, #{logs}
			, #{if_tracking_id}
			, #{tar_sys}
			, SYSDATE()
			)
	</insert>	
	
	<select id="csvOrgList" parameterType="i2c.cmm.base.CommonResultMap" resultMap="bulkVO">
			SELECT 
			       SU.MBER_NO
			     , SU.ORG_SID ORG_ID
			     , SU.USR_ID
			     , SU.LOGIN_ID
			     , SU.USR_NM
			FROM 
			       SNS_USER SU
			     , SNS_CLIENT SC 
			WHERE 
			      SU.ORG_SID = SC.ORG_SID
			  AND SC.ORG_SID != '' AND SC.ORG_SID IS NOT NULL
			  AND SC.SEND_URL != '' AND SC.SEND_URL IS NOT NULL
	</select>
	
	<select id="getLogTabName" parameterMap ="bulkVO" resultType="i2c.cmm.base.CommonResultMap">
    	/* [com.i2sema.bulk.dao.BulkDAO.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') ) 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')) 
					ELSE CONCAT('em_smt_log_', DATE_FORMAT(td.date_client_req , '%Y%m')) 
					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') = DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 DAY) , '%Y%m%d')
			AND TD.MBER_NO = #{mber_no} AND TD.ORG_ID = #{org_id}
      <!--ORDER BY TD.SEQ
       desc limit 1000 -->

    </select>
    
    
    <select id="getLogExist" parameterType="java.util.HashMap" resultType="i2c.cmm.base.CommonResultMap">
    	/* [com.i2sema.bulk.dao.BulkDAO.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="getTabExist" parameterType="String" resultType="int">
    	/* [com.i2sema.bulk.dao.BulkDAO.getTabExist.xml] 테이블 존재 유무 */	
    	SELECT count(0) FROM Information_schema.tables
		WHERE table_schema = 'i2sema'
		AND table_name = #{logTabName}
    </select>
    
    <select id="getLogInfo" parameterType="java.util.HashMap" resultMap="bulkVO">
		/* [com.i2sema.bulk.dao.BulkDAO.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,
					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,
					<!-- 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>

</mapper>