<?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.eICommApiDAO">

	<sql id="searchSQL">
		<if test="searchType != null and searchType != ''">
			<if test="searchType == 'jn'">
				<![CDATA[
					AND main.journey_name LIKE CONCAT('%',#{searchStr},'%')
				]]>
			</if>
			<if test="searchType == 'jv'">
				<![CDATA[
					AND main.journey_version = #{searchStr}
				]]>
			</if>
			<if test="searchType == 'an'">
				<![CDATA[
					AND main.activity_name LIKE CONCAT('%',#{searchStr},'%')
				]]>
			</if>
			<if test="searchType == 'cusYes'">
				<![CDATA[
					AND main.send_at = 'Y'
				]]>
			</if>
			<if test="searchType == 'cusNo'">
				<![CDATA[
					AND main.send_at = 'N'
				]]>
			</if>
		</if>
	</sql>

	<select id="profileList" parameterType="map" resultType="map">
		<![CDATA[
			/* [com.i2sema.v2.comm.eICommApiDAO] 프로필 리스트 */
			SELECT PLUS_UUID AS plusUuid FROM PROFILE WHERE ORG_ID = #{orgId} AND USE_AT = 'Y' AND STATUS = 'PROFLST01'
		]]>
	</select>

	<select id="dsptchNumList" parameterType="map" resultType="map">
		<![CDATA[
			/* [com.i2sema.v2.comm.dsptchNumList] 발신번호 리스트 */
			SELECT DSPTCH_NUM AS dsptchNum FROM DSPTCH_NUM_MNG WHERE ORG_ID = #{orgId} AND USE_AT = 'Y' AND STATUS = 'DSPTCHST02'
		]]>
	</select>

	<select id="arsList" parameterType="map" resultType="map">
		<![CDATA[
			/* [com.i2sema.v2.comm.arsList] ars번호 리스트 */
			SELECT ARS_NUM AS arsNum FROM ARS_NUM_MNG WHERE ORG_ID = #{orgId} AND USE_AT = 'Y' AND STATUS = 'ARSST02'
		]]>
	</select>

	<select id="departmentList" parameterType="map" resultType="map">
		<![CDATA[
			/* [com.i2sema.v2.comm.departmentList] 부서 리스트 */
			SELECT
				DEPT_NAME AS deptNm,
				MT_REFKEY AS deptKey,
				DEPT_CODE AS deptCode
			FROM DEPARTMENT
			WHERE ORG_ID = #{orgId} AND USE_AT = 'Y'
		]]>
	</select>

	<select id="msgResultListCnt" parameterType="map" resultType="int">
		<![CDATA[
			/* [com.i2sema.v2.comm.msgResultListCnt] 발송결과 목록 개수 */
			SELECT SUM(td.cnt)
			FROM (
					SELECT COUNT(0) AS cnt
					FROM emma_t_data main
					WHERE send_at = 'Y' AND org_id  = #{orgId}
		]]>
					<include refid="searchSQL" />
		<![CDATA[
					UNION ALL
					SELECT COUNT(0) AS cnt
					FROM ita_t_data main
					WHERE send_at = 'Y' AND org_id  = #{orgId}
		]]>
					<include refid="searchSQL" />
		<![CDATA[
					UNION ALL
					SELECT COUNT(0) AS cnt
					FROM frn_pls_tdata main
					WHERE send_yn = 'Y' AND org_id  = #{orgId}
		]]>
		<include refid="searchSQL" />
				) td
	</select>

	<select id="msgResultList" parameterType="map" resultType="com.i2sema.v2.comm.vo.commApi.MsgResultData">
		/* [com.i2sema.v2.comm.msgResultList] 발송결과 목록 */
		SELECT
			 journeyName
			,journeyVersion
			,activityName
			,msgType
			,startDate
			,finishDate
			,allCnt
			,successCnt
		FROM
		(
			SELECT
				 main.journey_name			AS journeyName
				,main.journey_version		AS journeyVersion
				,main.activity_name			AS activityName
				,main.service_type			AS msgType
				,MIN(sub.start_send_date)	AS startDate
				,MAX(sub.finish_send_date)	AS finishDate
				,SUM(sub.all_cnt)			AS allCnt
				,SUM(sub.success_cnt)		AS successCnt
			FROM
				emma_t_data main LEFT JOIN
				emma_tdata_detail sub ON main.t_seq = sub.t_seq
			WHERE
				main.send_at = 'Y' AND
				main.org_id = #{orgId}
				<include refid="searchSQL" />
			GROUP BY main.t_seq
			UNION ALL
			SELECT
				 main.journey_name			AS journeyName
				,main.journey_version		AS journeyVersion
				,main.activity_name			AS activityName
				,main.msg_type				AS msgType
				,MIN(sub.start_send_date)	AS startDate
				,MAX(sub.finish_send_date)	AS finishDate
				,SUM(sub.all_cnt)			AS allCnt
				,SUM(sub.success_cnt)		AS successCnt
			FROM
				ita_t_data main LEFT JOIN
				ita_tdata_detail sub ON main.t_seq = sub.t_seq
			WHERE
				main.send_at = 'Y' AND
				main.org_id = #{orgId}
				<include refid="searchSQL" />
			GROUP BY main.t_seq
			UNION ALL
			SELECT
				main.journey_name			AS journeyName
				,main.journey_version		AS journeyVersion
				,main.activity_name			AS activityName
				,main.message_type			AS msgType
				,MIN(sub.start_send_date)	AS startDate
				,MAX(sub.finish_send_date)	AS finishDate
				,SUM(sub.all_cnt)			AS allCnt
				,SUM(sub.success_cnt)		AS successCnt
			FROM
				frn_pls_tdata main LEFT JOIN
				frn_pls_tdata_detail sub ON main.seq = sub.t_seq
			WHERE
				main.send_yn = 'Y' AND
				main.org_id = #{orgId}
				<include refid="searchSQL" />
			GROUP BY main.seq
		) AS td
		ORDER BY td.startDate DESC
		LIMIT #{firstIndex}, #{recordCountPerPage}
	</select>

	<select id="reserveListCnt" parameterType="map" resultType="int">
		/* [com.i2sema.v2.comm.reserveListCnt] 예약현황 목록 개수 */
		SELECT SUM(td.cnt)
		FROM
		(
			SELECT COUNT(0) AS cnt
			FROM emma_t_data main
			WHERE
				main.tmp_book_yn != 'N'	AND
				main.org_id  = #{orgId}	AND
				main.reserve_date > DATE_SUB(SYSDATE(), INTERVAL 1 DAY)
				<include refid="searchSQL" />
			UNION ALL
			SELECT COUNT(0) AS cnt
			FROM ita_t_data main
			WHERE
				main.tmp_book_yn != 'N'	AND
				main.org_id = #{orgId}	AND
				main.reserve_date > DATE_SUB(SYSDATE(), INTERVAL 1 DAY)
				<include refid="searchSQL" />
			UNION ALL
			SELECT COUNT(0) AS cnt
			FROM frn_pls_tdata main
			WHERE
				main.reserve_yn != 'N'	AND
				main.org_id = #{orgId}	AND
				main.date_client_req > DATE_SUB(SYSDATE(), INTERVAL 1 DAY)
				<if test="searchType != null and searchType != ''">
					<if test="searchType == 'jn'">
						<![CDATA[
							AND main.journey_name LIKE CONCAT('%',#{searchStr},'%')
						]]>
					</if>
					<if test="searchType == 'jv'">
						<![CDATA[
							AND main.journey_version = #{searchStr}
						]]>
					</if>
					<if test="searchType == 'an'">
						<![CDATA[
							AND main.activity_name LIKE CONCAT('%',#{searchStr},'%')
						]]>
					</if>
					<if test="searchType == 'cusYes'">
						<![CDATA[
							AND main.send_yn = 'Y'
						]]>
					</if>
					<if test="searchType == 'cusNo'">
						<![CDATA[
							AND main.send_yn = 'N'
						]]>
					</if>
				</if>
		) td
	</select>

	<select id="reserveList" parameterType="map" resultType="com.i2sema.v2.comm.vo.commApi.ReserveData">
		/* [com.i2sema.v2.comm.reserveList] 예약현황 목록 */
		SELECT
			journeyName
			,journeyVersion
			,activityName
			,msgType
			,reservedDate
			,allCnt
			,tmpBookYn
			,sendAt
			,agentType
			,tSeq
		FROM
		(
			SELECT
				main.journey_name			AS journeyName
				,main.journey_version		AS journeyVersion
				,main.activity_name			AS activityName
				,main.service_type			AS msgType
				,main.reserve_date			AS reservedDate
				,SUM(sub.all_cnt)			AS allCnt
				,main.tmp_book_yn			AS tmpBookYn
				,main.send_at				AS sendAt
				,'emma'						AS agentType
				,main.t_seq					AS tSeq
			FROM
				emma_t_data main LEFT JOIN
				emma_tdata_detail sub ON main.t_seq = sub.t_seq
			WHERE
				main.tmp_book_yn != 'N' AND
				main.org_id = #{orgId}	AND
				main.reserve_date > DATE_SUB(SYSDATE(), INTERVAL 1 DAY)
				<include refid="searchSQL" />
			GROUP BY main.t_seq
			UNION ALL
			SELECT
				main.journey_name			AS journeyName
				,main.journey_version		AS journeyVersion
				,main.activity_name			AS activityName
				,main.msg_type				AS msgType
				,main.reserve_date			AS reservedDate
				,SUM(sub.all_cnt)			AS allCnt
				,main.tmp_book_yn			AS tmpBookYn
				,main.send_at				AS sendAt
				,'ita'						AS agentType
				,main.t_seq					AS tSeq
			FROM
				ita_t_data main LEFT JOIN
				ita_tdata_detail sub ON main.t_seq = sub.t_seq
			WHERE
				main.tmp_book_yn != 'N' AND
				main.org_id = #{orgId}	AND
				main.reserve_date > DATE_SUB(SYSDATE(), INTERVAL 1 DAY)
				<include refid="searchSQL" />
			GROUP BY main.t_seq
			UNION ALL
			SELECT
				main.journey_name AS journeyName
				, main.journey_version AS journeyVersion
				, main.activity_name AS activityName
				, main.message_type AS msgType
				, main.date_client_req AS reservedDate
				, SUM(sub.all_cnt) AS allCnt
				, main.reserve_yn AS tmpBookYn
				, main.send_yn AS sendAt
				,'friendtalkPlus' AS agentType
				, main.seq AS tSeq
			FROM
				frn_pls_tdata main LEFT JOIN
				frn_pls_tdata_detail sub ON main.seq = sub.t_seq
			WHERE
				main.reserve_yn != 'N'
				AND main.org_id = #{orgId}
				AND main.date_client_req > DATE_SUB(SYSDATE(), INTERVAL 1 DAY)
				<if test="searchType != null and searchType != ''">
					<if test="searchType == 'jn'">
						<![CDATA[
							AND main.journey_name LIKE CONCAT('%',#{searchStr},'%')
						]]>
					</if>
					<if test="searchType == 'jv'">
						<![CDATA[
							AND main.journey_version = #{searchStr}
						]]>
					</if>
					<if test="searchType == 'an'">
						<![CDATA[
							AND main.activity_name LIKE CONCAT('%',#{searchStr},'%')
						]]>
					</if>
					<if test="searchType == 'cusYes'">
						<![CDATA[
							AND main.send_yn = 'Y'
						]]>
					</if>
					<if test="searchType == 'cusNo'">
						<![CDATA[
							AND main.send_yn = 'N'
						]]>
					</if>
				</if>
			GROUP BY main.seq
		) AS td
		ORDER BY td.reservedDate DESC
		LIMIT #{firstIndex}, #{recordCountPerPage}
	</select>

	<update id="cancelEmmaReserve" parameterType="Long">
		/* [com.i2sema.v2.comm.cancelEmmaReserve] EMMA 예약취소 */
		UPDATE emma_t_data SET tmp_book_yn = 'C' WHERE t_seq = #{tSeq}
	</update>

	<update id="cancelItaReserve" parameterType="Long">
		/* [com.i2sema.v2.comm.cancelItaReserve] ITA 예약취소 */
		UPDATE ita_t_data SET tmp_book_yn = 'C' WHERE t_seq = #{tSeq}
	</update>

	<update id="cancelFriendtalkPlusReserve" parameterType="Long">
		/* [com.i2sema.v2.comm.cancelFriendtalkPlusReserve] FriendtalkPlus 예약취소 */
		UPDATE frn_pls_tdata SET reserve_yn = 'C' WHERE seq = #{tSeq}
	</update>

</mapper>
