<?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.v2.comm.statisticsExcelDAO">
	
	<select id="excelJobSearch" parameterType="map" resultType="int">
		<![CDATA[
			/* [com.i2sema.v2.comm.statisticsExcelDAO.excelJobSearch] excel job 검색 */
			SELECT count(0)
			FROM excel_req
			WHERE usr_id = #{usrId} AND org_id = #{orgId} AND excel_status NOT IN ('D','F')
		]]>
	</select>
	
	<insert id="excelJobCreate" parameterType="map">
		<![CDATA[
			/* [com.i2sema.v2.comm.statisticsExcelDAO.excelJobCreate] excel job 생성 */
			INSERT INTO excel_req (
				 usr_id
				,org_id
				,excel_name
				,excel_type
				,excel_status
				,excel_info
			) VALUES (
				 #{usrId}
				,#{orgId}
				,#{excelName}
				,#{scope}
				,'P'
				,#{excelInfo}
			)
		]]>
	</insert>

	<update id="excelJobSuccess" parameterType="map">
		<![CDATA[
			/* [com.i2sema.v2.comm.statisticsExcelDAO.excelJobSuccess] excel job 성공 */
			UPDATE excel_req
			SET
				 excel_path 	= #{excelPath}
				,excel_status 	= 'S'
				,date_finish 	= SYSDATE()
			WHERE usr_id = #{usrId} AND org_id = #{orgId} AND excel_status = 'P'
		]]>
	</update>

	<update id="excelJobFail" parameterType="map">
		<![CDATA[
			/* [com.i2sema.v2.comm.statisticsExcelDAO.excelJobFail] excel job 실패 */
			UPDATE excel_req
			SET
				 excel_info 	= #{excelInfo}
				,excel_status 	= 'E'
				,date_finish 	= SYSDATE()
			WHERE usr_id = #{usrId} AND org_id = #{orgId} AND excel_status = 'P'
		]]>
	</update>

	<select id="excelJobSelect" parameterType="map" resultType="map">
		<![CDATA[
			/* [com.i2sema.v2.comm.statisticsExcelDAO.excelJobSelect] excel job 선택 */
			SELECT
				 usr_id			AS usrId
				,org_id			AS orgId
				,excel_name		AS excelName
				,excel_path		AS excelPath
				,excel_type		AS excelType
				,excel_status	AS excelStatus
				,excel_info		AS excelInfo
			FROM excel_req
			WHERE usr_id = #{usrId} AND org_id = #{orgId} AND excel_status NOT IN ('D','F')
		]]>
	</select>

	<update id="excelJobDone" parameterType="map">
		<![CDATA[
			/* [com.i2sema.v2.comm.statisticsExcelDAO.excelJobDone] excel job 마무리 */
			UPDATE excel_req
			SET
				 excel_status 	= #{excelStatus}
				,date_download 	= SYSDATE()
			WHERE usr_id = #{usrId} AND org_id = #{orgId} AND excel_status IN ('S','E')
		]]>
	</update>
	
	<select id="getEmmaJourneyValueCnt" parameterType="map" resultType="int">
		<![CDATA[
			/* [com.i2sema.v2.comm.statisticsExcelDAO.getEmmaJourneyValueCnt] 해당 journey에 들어있는 emma version cnt */
			SELECT count(a.journey_version_id)
			FROM (
				SELECT m.journey_version_id
				FROM emma_t_data m LEFT JOIN emma_tdata_detail s ON m.t_seq = s.t_seq
				WHERE m.send_at = 'Y'
					AND m.org_id = #{orgId}
					AND s.yyyy_mm_dd LIKE CONCAT(#{targetDate},'%')
				GROUP BY m.journey_version_id
			) a
		]]>
	</select>
	
	<select id="getEmmaJourneyValueList" parameterType="map" resultType="map">
		<![CDATA[
			/* [com.i2sema.v2.comm.statisticsExcelDAO.getEmmaJourneyValueList] 해당 journey에 들어있는 emma version list */
			SELECT
				 m.journey_name				AS journeyName
				,m.journey_version			AS version
				,SUM(s.all_cnt)				AS allCnt
				,SUM(s.success_cnt)			AS successCnt
				,SUM(s.fail_cnt)			AS failCnt
				,SUM(s.rjct_080_cnt)		AS rejectCnt
				,SUM(s.rjct_cnt)			AS wrongRequests
				,MAX(s.finish_send_date)	AS lastSendDate
			FROM emma_t_data m LEFT JOIN emma_tdata_detail s ON m.t_seq = s.t_seq
			WHERE m.send_at = 'Y'
				AND m.org_id = #{orgId}
				AND s.yyyy_mm_dd LIKE CONCAT(#{targetDate},'%')
			GROUP BY m.journey_version_id
			ORDER BY MAX(s.finish_send_date)
			LIMIT #{firstIndex}, #{recordCountPerPage}
		]]>
	</select>
	
	<select id="getItaJourneyValueCnt" parameterType="map" resultType="int">
		<![CDATA[
			/* [com.i2sema.v2.comm.statisticsExcelDAO.getItaJourneyValueCnt] 해당 journey에 들어있는 ita version cnt */
			SELECT count(a.journey_version_id)
			FROM (
				SELECT m.journey_version_id
				FROM ita_t_data m
				    LEFT JOIN ita_tdata_detail s ON m.t_seq = s.t_seq
				WHERE m.send_at = 'Y'
					AND s.yyyy_mm_dd LIKE CONCAT(#{targetDate},'%')
					AND m.org_id = #{orgId}
				GROUP BY m.journey_version_id
				UNION ALL
				SELECT m.journey_version_id
				FROM frn_pls_tdata m
				    LEFT JOIN frn_pls_tdata_detail s ON m.seq = s.t_seq
				WHERE m.send_yn = 'Y'
					AND s.yyyy_mm_dd LIKE CONCAT(#{targetDate},'%')
					AND m.org_id = #{orgId}
				GROUP BY m.journey_version_id
			) a
		]]>
	</select>
	
	<select id="getItaJourneyValueList" parameterType="map" resultType="map">
		<![CDATA[
			/* [com.i2sema.v2.comm.statisticsExcelDAO.getItaJourneyValueList] 해당 journey에 들어있는 ita version list */
			SELECT
			    journeyName
			     ,version
					 ,allCnt
					 ,successCnt
					 ,failbackCnt
					 ,failCnt
					 ,rejectCnt
					 ,wrongRequests
					 ,lastSendDate
			FROM (
			    SELECT
			        m.journey_name AS journeyName
			         ,m.journey_version AS version
							 ,SUM(s.all_cnt) AS allCnt
							 ,SUM(s.success_cnt) AS successCnt
							 ,SUM(s.failback_cnt) AS failbackCnt
							 ,SUM(s.fail_cnt) AS failCnt
							 ,SUM(s.rjct_080_cnt) AS rejectCnt
							 ,SUM(s.rjct_cnt) AS wrongRequests
							 ,MAX(s.finish_send_date)	AS lastSendDate
					FROM ita_t_data m LEFT JOIN ita_tdata_detail s ON m.t_seq = s.t_seq
					WHERE m.send_at = 'Y'
						AND m.org_id = #{orgId}
						AND s.yyyy_mm_dd LIKE CONCAT(#{targetDate},'%')
					GROUP BY m.journey_version_id
					UNION ALL
					SELECT
					    m.journey_name AS journeyName
							 ,m.journey_version AS version
							 ,SUM(s.all_cnt) AS allCnt
							 ,SUM(s.success_cnt) AS successCnt
							 ,SUM(s.failback_cnt) AS failbackCnt
							 ,SUM(s.fail_cnt) AS failCnt
							 ,SUM(s.reject_080_cnt) AS rejectCnt
							 ,SUM(s.reject_cnt) AS wrongRequests
							 ,MAX(s.finish_send_date)	AS lastSendDate
					FROM frn_pls_tdata m LEFT JOIN frn_pls_tdata_detail s ON m.seq = s.t_seq
					WHERE m.send_yn = 'Y'
						AND m.org_id = #{orgId}
						AND s.yyyy_mm_dd LIKE CONCAT(#{targetDate},'%')
					GROUP BY m.journey_version_id
					) frn
			ORDER BY frn.lastSendDate
			LIMIT #{firstIndex}, #{recordCountPerPage}
		]]>
	</select>
	
	<select id="getEmmaVersionValueCnt" parameterType="map" resultType="int">
		<![CDATA[
			/* [com.i2sema.v2.comm.statisticsExcelDAO.getEmmaVersionValueCnt] 해당 version에 들어있는 emma activity cnt */
			SELECT COUNT(0)
			FROM emma_t_data 
			WHERE org_id = #{orgId} AND journey_version_id = #{versionId}
			AND send_at = 'Y'
		]]>
	</select>
	
	<select id="getEmmaVersionValueList" parameterType="map" resultType="map">
		<![CDATA[
			/* [com.i2sema.v2.comm.statisticsExcelDAO.getEmmaVersionValueList] 해당 version에 들어있는 emma activity list */
			SELECT
				 m.journey_name				AS journeyName
				,m.journey_version			AS version
				,m.activity_name			AS activityName
				,CASE m.service_type
					WHEN '0' THEN 'SMS'
					WHEN '2' THEN 'MMS'
					WHEN '3' THEN 'LMS'
				 END						AS messageType
				,m.content					AS content
				,SUM(s.all_cnt)				AS allCnt
				,SUM(s.success_cnt)			AS successCnt
				,SUM(s.fail_cnt)			AS failCnt
				,SUM(s.rjct_080_cnt)		AS rejectCnt
				,SUM(s.rjct_cnt)			AS wrongRequests
				,MAX(s.finish_send_date)	AS lastSendDate
			FROM emma_t_data m LEFT JOIN emma_tdata_detail s ON m.t_seq = s.t_seq
			WHERE m.org_id = #{orgId} AND journey_version_id = #{versionId}
			AND m.send_at = 'Y'
			GROUP BY m.activity_id
			ORDER BY MAX(s.finish_send_date)
		]]>
	</select>
	
	<select id="getItaVersionValueCnt" parameterType="map" resultType="int">
		<![CDATA[
			/* [com.i2sema.v2.comm.statisticsExcelDAO.getItaVersionValueCnt] 해당 version에 들어있는 ita activity cnt */
			SELECT COUNT(0)
			FROM (
				SELECT t_seq as seq
				FROM ita_t_data
				WHERE org_id = #{orgId}
				  AND journey_version_id = #{versionId}
				  AND send_at = 'Y'
				UNION ALL
				SELECT seq
				FROM frn_pls_tdata
				WHERE org_id = #{orgId}
				  AND journey_version_id = #{versionId}
				  AND send_yn = 'Y'
				) as frn;
		]]>
	</select>
	
	<select id="getItaVersionValueList" parameterType="map" resultType="map">
		<![CDATA[
			/* [com.i2sema.v2.comm.statisticsExcelDAO.getItaVersionValueList] 해당 version에 들어있는 ita activity list */
			SELECT
			    journeyName
					 ,version
					 ,activityName
					 ,messageType
					 ,content
					 ,fbMessageType
					 ,fbContent
					 ,allCnt
					 ,successCnt
					 ,failbackCnt
					 ,failCnt
					 ,rejectCnt
					 ,wrongRequests
					 ,lastSendDate
			FROM (
				SELECT
				    m.journey_name AS journeyName
				    ,m.journey_version AS version
						,m.activity_name AS activityName
						,CASE m.msg_type
						    WHEN '1008' THEN '알림톡'
								WHEN '1012' THEN '알림톡'
								WHEN '1009' THEN '친구톡T'
								WHEN '1013' THEN '친구톡I'
								WHEN '1014' THEN '친구톡W'
						    END AS messageType
				     ,m.content AS content
				     ,CASE f.service_type
				         WHEN '0' THEN 'SMS'
				         WHEN '2' THEN 'MMS'
				         WHEN '3' THEN 'LMS'
				         END AS fbMessageType
				     ,f.content AS fbContent
				     ,SUM(s.all_cnt) AS allCnt
				     ,SUM(s.success_cnt) AS successCnt
				     ,SUM(s.failback_cnt) AS failbackCnt
				     ,SUM(s.fail_cnt) AS failCnt
				     ,SUM(s.rjct_080_cnt) AS rejectCnt
				     ,SUM(s.rjct_cnt) AS wrongRequests
				     ,MAX(s.finish_send_date)	AS lastSendDate
						 FROM ita_t_data m
						     LEFT JOIN ita_tdata_detail s ON m.t_seq = s.t_seq
						     LEFT JOIN ita_failback f ON m.flb_seq = f.flb_seq
						 WHERE m.org_id = #{orgId}
						   AND journey_version_id = #{versionId}
							 AND m.send_at = 'Y'
						 GROUP BY m.activity_id
						 UNION ALL
						 SELECT
						     m.journey_name AS journeyName
						      ,m.journey_version AS version
									,m.activity_name AS activityName
									,CASE m.message_type
										 WHEN '10001' THEN '친구톡+(WIL)'
										 WHEN '10002' THEN '친구톡+(CF)'
									    END	AS messageType
						      ,'' AS content
									,CASE f.service_type
										 WHEN '0' THEN 'SMS'
										 WHEN '2' THEN 'MMS'
										 WHEN '3' THEN 'LMS'
									    END AS fbMessageType
									,f.content AS fbContent
									,SUM(s.all_cnt) AS allCnt
									,SUM(s.success_cnt) AS successCnt
									,SUM(s.failback_cnt) AS failbackCnt
									,SUM(s.fail_cnt) AS failCnt
									,SUM(s.reject_080_cnt) AS rejectCnt
									,SUM(s.reject_cnt) AS wrongRequests
									,MAX(s.finish_send_date)	AS lastSendDate
						 FROM frn_pls_tdata m
						     LEFT JOIN frn_pls_tdata_detail s ON m.seq = s.t_seq
						     LEFT JOIN frn_pls_failback f ON m.flb_seq = f.flb_seq
						 WHERE m.org_id = #{orgId}
						   AND journey_version_id = #{versionId}
							 AND m.send_yn = 'Y'
						 GROUP BY m.activity_id) as frn
			ORDER BY frn.lastSendDate
		]]>
	</select>
	
	<select id="getEmmaActivityValueCnt" parameterType="map" resultType="int">
		<![CDATA[
			/* [com.i2sema.v2.comm.statisticsExcelDAO.getEmmaActivityValueCnt] 해당 emma activity로 발송된 수신자 cnt */
			SELECT COUNT(0)
			FROM ${logTable}
			WHERE v2_seq = #{tSeq}
		]]>
	</select>
	
	<select id="getEmmaActivityValueList" parameterType="map" resultType="map">
		<![CDATA[
			/* [com.i2sema.v2.comm.statisticsExcelDAO.getEmmaActivityValueList] 해당 emma activity로 발송된 수신자 list */
			SELECT
				 m.journey_name			AS journeyName
				,m.journey_version		AS version
				,m.activity_name		AS activityName
				,l.recipient_num		AS recipientNum
				,CASE l.service_type
					WHEN '0' THEN 'SMS'
					WHEN '2' THEN 'MMS'
					WHEN '3' THEN 'LMS'
				 END					AS messageType
				,l.content				AS content
				,l.mt_report_code_ib	AS resultCode
				,l.date_rslt			AS resultDate
			FROM emma_t_data m LEFT JOIN ${logTable} l ON m.t_seq = l.v2_seq
			WHERE m.t_seq = #{tSeq}
			LIMIT #{firstIndex}, #{recordCountPerPage}
		]]>
	</select>
	
	<select id="getItaActivityValueCnt" parameterType="map" resultType="int">
		<![CDATA[
			/* [com.i2sema.v2.comm.statisticsExcelDAO.getItaActivityValueCnt] 해당 ita activity로 발송된 수신자 cnt */
			SELECT COUNT(0)
			FROM ${logTable}
			WHERE v2_seq = #{tSeq}
		]]>
	</select>
	
	<select id="getItaActivityValueList" parameterType="map" resultType="map">
		<![CDATA[
			/* [com.i2sema.v2.comm.statisticsExcelDAO.getItaActivityValueList] 해당 ita activity로 발송된 수신자 list */
			SELECT
				 m.journey_name			AS journeyName
				,m.journey_version		AS version
				,m.activity_name		AS activityName
				,l.recipient_num		AS recipientNum
				,CASE l.msg_type
					WHEN '1008' THEN '알림톡'
					WHEN '1012' THEN '알림톡'
					WHEN '1009' THEN '친구톡T'
					WHEN '1013' THEN '친구톡I'
					WHEN '1014' THEN '친구톡W'
				 END					AS messageType
				,l.content				AS content
				,l.report_code			AS resultCode
				,l.date_rslt			AS resultDate
		]]>
		<if test="@org.apache.commons.lang3.StringUtils@isNotEmpty(subLogTable)">
			<![CDATA[
				,CASE sl.service_type
					WHEN '0' THEN 'SMS'
					WHEN '2' THEN 'MMS'
					WHEN '3' THEN 'LMS'
				 END					AS fbMessageType
				,sl.content				AS fbContent
				,sl.mt_report_code_ib	AS fbResultCode
				,sl.date_rslt			AS fbResultDate
			]]>
		</if>
		<![CDATA[
			FROM ita_t_data m LEFT JOIN ${logTable} l ON m.t_seq = l.v2_seq 
		]]>
		<if test="@org.apache.commons.lang3.StringUtils@isNotEmpty(subLogTable)">
			<![CDATA[
				LEFT JOIN ${subLogTable} sl ON l.noti_id = sl.noti_id
			]]>
		</if>
		<![CDATA[
			WHERE m.t_seq = #{tSeq}
			LIMIT #{firstIndex}, #{recordCountPerPage}
		]]>
	</select>

	<select id="getFrnPlusActivityValueCnt" parameterType="map" resultType="int">
		<![CDATA[
		/* [com.i2sema.v2.comm.statisticsExcelDAO.getFrnPlusActivityValueCnt] 해당 FrnPlus activity로 발송된 수신자 cnt */
		SELECT COUNT(0)
		FROM ${logTable}
		WHERE t_seq = #{tSeq}
		]]>
	</select>

	<select id="getFrnPlusActivityValueList" parameterType="map" resultType="map">
		<![CDATA[
			/* [com.i2sema.v2.comm.statisticsExcelDAO.getFrnPlusActivityValueList] 해당 FrnPlus activity로 발송된 수신자 list */
			SELECT
				 m.journey_name AS journeyName
				,m.journey_version AS version
				,m.activity_name AS activityName
				,l.recipient_num AS recipientNum
				,CASE l.msg_type
					WHEN '10001' THEN '친구톡+(WIL)'
					WHEN '10002' THEN '친구톡+(CF)'
				    END AS messageType
				,'' AS content
				,l.report_code AS resultCode
				,l.date_rslt AS resultDate
		]]>
		<if test="@org.apache.commons.lang3.StringUtils@isNotEmpty(subLogTable)">
			<![CDATA[
				,CASE sl.service_type
					WHEN '0' THEN 'SMS'
					WHEN '2' THEN 'MMS'
					WHEN '3' THEN 'LMS'
				    END AS fbMessageType
				,sl.content AS fbContent
				,sl.mt_report_code_ib	AS fbResultCode
				,sl.date_rslt AS fbResultDate
			]]>
		</if>
		<![CDATA[
			FROM frn_pls_tdata m
			    LEFT JOIN ${logTable} l ON m.seq = l.t_seq
		]]>
		<if test="@org.apache.commons.lang3.StringUtils@isNotEmpty(subLogTable)">
			<![CDATA[
					LEFT JOIN ${subLogTable} sl ON l.noti_id = sl.noti_id
			]]>
		</if>
		<![CDATA[
			WHERE m.seq = #{tSeq}
			LIMIT #{firstIndex}, #{recordCountPerPage}
		]]>
	</select>

</mapper>
