mjon_api/src/main/resources/mapper/api/inqry/HstryMapper.xml

481 lines
22 KiB
XML

<?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.itn.mjonApi.mjon.api.inqry.mapper.HstryMapper">
<select id="selectApiInqryHstry"
resultType="hashmap"
>
/* 문자온 발송결과 페이지 쿼리를 그대로 사용함 - http://localhost:9080/web/mjon/msgsent/selectMsgSentView.do */
SELECT
AAA.totMsgCnt
, AAA.userId
, AAA.msgGroupId
, AAA.msgGroupCnt
, AAA.smsTxt
, AAA.subject
, AAA.regdate
, AAA.reqdate
, AAA.curState
, AAA.msgType
, AAA.reserveCYn
, AAA.msgTypeName
, AAA.msgResult
, SUM(if(bbb.msgresultSts='W',bbb.msgResultCnt, 0)) w_cnt
, SUM(if(bbb.msgresultSts='S',bbb.msgResultCnt, 0)) s_cnt
, SUM(if(bbb.msgresultSts='F',bbb.msgResultCnt, 0)) f_cnt
, SUM(if(bbb.msgresultSts='W',bbb.msgResultCnt, 0))
+ SUM(if(bbb.msgresultSts='S',bbb.msgResultCnt, 0))
+ SUM(if(bbb.msgresultSts='F',bbb.msgResultCnt, 0)) ttl_cnt
FROM (
SELECT COUNT(USER_ID) OVER() AS totMsgCnt ,
USER_ID AS userId ,
MSG_GROUP_ID AS msgGroupId ,
MSG_GROUP_CNT AS msgGroupCnt ,
SMS_TXT AS smsTxt ,
SUBJECT AS subject ,
DATE_FORMAT(REGDATE, '%Y-%m-%d %T') AS regdate ,
DATE_FORMAT(REQ_DATE, '%Y-%m-%d %T') AS reqdate ,
/*
CALL_FROM AS callFrom ,
CALL_TO AS callTo ,
IFNULL(ADDR_NM, '-') AS addrNm ,
TOT_PRICE AS totPrice ,
EACH_PRICE AS eachPrice ,
*/
CUR_STATE AS curState ,
/*
RSLT_CODE AS rsltCode ,
RSLT_CODE2 AS rsltCode2 ,
IF( (RSLT_CODE != '0'
AND RSLT_CODE != '100'
AND RSLT_CODE != '101'
AND RSLT_CODE != '110'
AND RSLT_CODE != '800'
AND RSLT_CODE != '4100'
AND RSLT_CODE != '6600'
AND RSLT_CODE != '1000'
AND RSLT_CODE != '1001' OR RSLT_CODE2 != '0' ) , '1' ,'0') AS orderByrsltCode ,
DEL_FLAG AS delFlag ,
*/
MSG_TYPE AS msgType ,
/*
FILE_CNT AS fileCnt ,
AGENT_CODE AS agentCode ,
*/
RESERVE_C_YN AS reserveCYn ,
/*
CANCELDATE AS cancelDate ,
'' AS msgId ,
*/
msgTypeName AS msgTypeName ,
/*
orderByCode AS orderByCode ,
*/
RESULT AS msgResult
FROM ( SELECT B.USER_ID ,
B.MSG_GROUP_ID ,
B.MSG_GROUP_CNT ,
B.SMS_TXT ,
B.SUBJECT ,
B.REGDATE ,
B.REQ_DATE ,
B.CALL_FROM ,
B.TOT_PRICE ,
B.EACH_PRICE ,
B.DEL_FLAG ,
B.MSG_TYPE ,
B.FILE_CNT ,
B.AGENT_CODE ,
B.RESERVE_C_YN ,
B.CANCELDATE ,
A.MSG_SEQ ,
A.CALL_TO ,
A.CUR_STATE ,
A.RSLT_CODE ,
A.RSLT_CODE2 ,
CASE
WHEN B.MSG_TYPE = '6'
AND B.FILE_CNT > 0
THEN '그림(MMS)'
WHEN B.MSG_TYPE = '6'
AND B.FILE_CNT = 0
THEN '장문(LMS)'
ELSE '단문(SMS)'
END msgTypeName ,
CASE
WHEN B.MSG_TYPE = '6'
AND B.FILE_CNT > 0
THEN '3'
WHEN B.MSG_TYPE = '6'
AND B.FILE_CNT = 0
THEN '2'
ELSE '1'
END orderByCode , (
CASE
WHEN A.AGENT_CODE = '01'
AND
(
A.RSLT_CODE = '100'
AND
(
A.RSLT_CODE2 = '0'
)
)
THEN 'S'
WHEN A.AGENT_CODE = '02'
AND
(
A.RSLT_CODE = '0'
)
THEN 'S'
WHEN A.AGENT_CODE = '03'
AND
(
A.RSLT_CODE = '100' OR A.RSLT_CODE = '101' OR A.RSLT_CODE = '110' OR A.RSLT_CODE = '800'
)
THEN 'S'
WHEN A.AGENT_CODE = '04'
AND
(
A.RSLT_CODE = '4100' OR A.RSLT_CODE = '6600' OR A.RSLT_CODE = '7000'
)
THEN 'S'
WHEN A.AGENT_CODE = '05'
AND
(
A.RSLT_CODE = '1000' OR A.RSLT_CODE = '1001'
)
THEN 'S'
WHEN A.AGENT_CODE = '07'
AND
(
A.RSLT_CODE = '6' OR A.RSLT_CODE = '1000'
)
THEN 'S'
WHEN
(
A.RSLT_CODE IS NULL
AND A.RSLT_CODE2 IS NULL
AND A.SENT_DATE IS NULL
AND A.RSLT_DATE IS NULL
)
THEN 'W'
ELSE 'F'
END ) AS RESULT
/* common query */
FROM MJ_MSG_DATA A ,
MJ_MSG_GROUP_DATA B
WHERE A.MSG_GROUP_ID = B.MSG_GROUP_ID
AND IFNULL(B.DEL_FLAG,'N') = 'N'
AND A.DEL_FLAG = 'N'
AND B.USER_ID = #{mberId}
AND B.DEL_FLAG ='N'
AND B.RESERVE_C_YN = 'N'
AND DATE_ADD(NOW(), INTERVAL 60 MINUTE) >= B.REQ_DATE
<if test="startDate != null and startDate != ''">
AND b.regdate >= STR_TO_DATE(CONCAT(#{startDate}, '000000'), '%Y%m%d%H%i%s')
</if>
<if test="startDate == null or startDate == ''">
AND b.regdate >= STR_TO_DATE(date_format(now(),'%Y%m%d000000'), '%Y%m%d%H%i%s')
</if>
<if test="endDate != null and endDate != ''">
AND STR_TO_DATE(CONCAT(#{endDate}, '235959'), '%Y%m%d%H%i%s') >= b.regdate
</if>
<if test="startDate == null or startDate == ''">
AND STR_TO_DATE(date_format(DATE_ADD(NOW(), INTERVAL 1 day),'%Y%m%d000000'), '%Y%m%d%H%i%s') >= b.regdate
</if>
)
M
LEFT JOIN
( SELECT ADDR_PHONE_NO ,
ADDR_NM
FROM MJ_ADDR
WHERE 1 =1
AND MBER_ID = #{mberId}
GROUP BY ADDR_PHONE_NO
)
MA
ON M.CALL_TO = MA.ADDR_PHONE_NO
WHERE 1 =1
AND CUR_STATE IN ('0',
'1',
'2',
'3')
AND MSG_TYPE IN ('4',
'6')
GROUP BY MSG_GROUP_ID
/*
ORDER BY 1=1,
MSG_GROUP_ID DESC ,
regdate DESC
*/
LIMIT ${pageSize}
OFFSET ${page}
)AAA
,(
SELECT A.MSG_GROUP_ID AS msgGroupId ,
A.USERDATA AS msgSeq ,
COUNT(RESULT) AS msgResultCnt ,
RESULT AS msgResultSts ,
A.RSLT_CODE AS rsltCode ,
A.RSLT_CODE2 AS rsltCode2 ,
A.AGENT_CODE AS agentCode ,
A.EACH_PRICE AS eachPrice
FROM (SELECT MD.MSG_ID ,
MD.MSG_GROUP_ID ,
MD.USERDATA ,
MD.CUR_STATE ,
MD.SENT_DATE , (
CASE
WHEN MD.AGENT_CODE = '01'
AND
(
MD.RSLT_CODE = '100'
AND
(
MD.RSLT_CODE2 = '0'
)
)
THEN 'S'
WHEN MD.AGENT_CODE = '02'
AND
(
MD.RSLT_CODE = '0'
)
THEN 'S'
WHEN MD.AGENT_CODE = '03'
AND
(
MD.RSLT_CODE = '100' OR MD.RSLT_CODE = '101' OR MD.RSLT_CODE = '110' OR MD.RSLT_CODE = '800'
)
THEN 'S'
WHEN MD.AGENT_CODE = '04'
AND
(
MD.RSLT_CODE = '4100' OR MD.RSLT_CODE = '6600'
)
THEN 'S'
WHEN MD.AGENT_CODE = '05'
AND
(
MD.RSLT_CODE = '1000' OR MD.RSLT_CODE = '1001'
)
THEN 'S'
WHEN MD.AGENT_CODE = '07'
AND
(
MD.RSLT_CODE = '6' OR MD.RSLT_CODE = '1000'
)
THEN 'S'
WHEN
(
MD.RSLT_CODE IS NULL
AND MD.RSLT_CODE2 IS NULL
AND MD.SENT_DATE IS NULL
AND MD.RSLT_DATE IS NULL
)
THEN 'W'
ELSE 'F'
END ) AS RESULT ,
MD.RSLT_CODE ,
MD.RSLT_CODE2 ,
MD.AGENT_CODE ,
MG.EACH_PRICE
FROM MJ_MSG_DATA MD
LEFT JOIN MJ_MSG_GROUP_DATA MG
ON MD.MSG_GROUP_ID = MG.MSG_GROUP_ID
WHERE 1 =1
AND MD.DEL_FLAG = 'N'
AND MD.MSG_TYPE IN ('4',
'6')
)
A
GROUP BY A.MSG_GROUP_ID,
RESULT
ORDER BY A.MSG_GROUP_ID DESC
)BBB
WHERE aaa.msgGroupId=bbb.msgGroupId
GROUP BY
AAA.totMsgCnt
, AAA.userId
, AAA.msgGroupId
, AAA.msgGroupCnt
, AAA.smsTxt
, AAA.subject
, AAA.regdate
, AAA.reqdate
, AAA.curState
, AAA.msgType
, AAA.reserveCYn
, AAA.msgTypeName
, AAA.msgResult
ORDER BY 1=1,
AAA.msgGroupId DESC ,
AAA.regdate DESC
</select>
<select id="selectApiInqryHstryDetail"
resultType="hashmap"
>
/* 문자온 발송결과 페이지 실패 건수 팝업을 변형해서 사용함 - http://localhost:9080/web/mjon/msgsent/selectMsgSFDetailListAjax.do */
SELECT COUNT(USER_ID) OVER() AS totMsgCnt ,
/*
USER_ID AS userId ,
IFNULL(ADDR_NM, '-') AS addrNm ,
*/
MSG_GROUP_ID AS msgGroupId ,
'1' AS msgGroupCnt ,
SMS_TXT AS smsTxt ,
SUBJECT AS subject ,
DATE_FORMAT(REGDATE, '%Y-%m-%d %T') AS regdate ,
DATE_FORMAT(REQ_DATE, '%Y-%m-%d %T') AS reqdate ,
CALL_FROM AS callFrom ,
CALL_TO AS callTo ,
/*
TOT_PRICE AS totPrice ,
EACH_PRICE AS eachPrice ,
*/
CUR_STATE AS curState ,
/*
RSLT_CODE AS rsltCode ,
RSLT_CODE2 AS rsltCode2 ,
DEL_FLAG AS delFlag ,
*/
MSG_TYPE AS msgType ,
/*
FILE_CNT AS fileCnt ,
AGENT_CODE AS agentCode ,
*/
RESERVE_C_YN AS reserveCYn ,
/*
CANCELDATE AS cancelDate ,
MSG_ID AS msgId ,
MSG_SEQ AS msgSeq ,
*/
RESULT AS msgResult
FROM (SELECT MGD.USER_ID ,
MGD.MSG_GROUP_ID ,
MGD.MSG_GROUP_CNT ,
MGD.SMS_TXT ,
MGD.SUBJECT ,
MGD.REGDATE ,
MGD.REQ_DATE ,
MGD.CALL_FROM ,
MGD.TOT_PRICE ,
MGD.EACH_PRICE ,
MGD.DEL_FLAG ,
MGD.MSG_TYPE ,
MGD.FILE_CNT ,
MGD.AGENT_CODE ,
MGD.RESERVE_C_YN ,
MGD.CANCELDATE ,
MD.MSG_ID ,
MD.MSG_SEQ ,
MD.USERDATA ,
MD.CALL_TO ,
MD.CUR_STATE ,
MD.RSLT_CODE ,
MD.RSLT_CODE2 , (
CASE
WHEN MD.AGENT_CODE = '01'
AND
(
MD.RSLT_CODE = '100'
AND
(
MD.RSLT_CODE2 = '0'
)
)
THEN 'S'
WHEN MD.AGENT_CODE = '02'
AND
(
MD.RSLT_CODE = '0'
)
THEN 'S'
WHEN MD.AGENT_CODE = '03'
AND
(
MD.RSLT_CODE = '100' OR MD.RSLT_CODE = '101' OR MD.RSLT_CODE = '110' OR MD.RSLT_CODE = '800'
)
THEN 'S'
WHEN MD.AGENT_CODE = '04'
AND
(
MD.RSLT_CODE = '4100' OR MD.RSLT_CODE = '6600'
)
THEN 'S'
WHEN MD.AGENT_CODE = '05'
AND
(
MD.RSLT_CODE = '1000' OR MD.RSLT_CODE = '1001'
)
THEN 'S'
WHEN MD.AGENT_CODE = '07'
AND
(
MD.RSLT_CODE = '6' OR MD.RSLT_CODE = '1000'
)
THEN 'S'
WHEN
(
MD.RSLT_CODE IS NULL
AND MD.RSLT_CODE2 IS NULL
AND MD.SENT_DATE IS NULL
AND MD.RSLT_DATE IS NULL
)
THEN 'W'
ELSE 'F'
END ) AS RESULT
FROM MJ_MSG_DATA MD
INNER JOIN MJ_MSG_GROUP_DATA MGD
ON MD.MSG_GROUP_ID = MGD.MSG_GROUP_ID
AND MD.MSG_GROUP_ID = #{msgGroupId}
AND MGD.USER_ID = #{mberId}
AND MGD.DEL_FLAG ='N'
)
A
LEFT JOIN
(SELECT ADDR_PHONE_NO ,
ADDR_NM
FROM MJ_ADDR
WHERE 1 =1
AND MBER_ID = #{mberId}
GROUP BY ADDR_PHONE_NO
)
MA
ON A.CALL_TO = MA.ADDR_PHONE_NO
WHERE 1 =1
/*
AND A.RESULT IN ('F',
'W')
*/
ORDER BY 1=1 ,
regdate DESC
LIMIT ${pageSize}
OFFSET ${page}
</select>
</mapper>