초기소스

This commit is contained in:
jazz
2025-10-29 17:08:05 +09:00
parent e531aa9540
commit 439a379a02
7551 changed files with 1234427 additions and 3 deletions

View File

@@ -0,0 +1,41 @@
<?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.wb.domainserver.domain.gcone.alarm.mapper.BOAlarmMapper">
<select id="selectAnswerCount">
SELECT
'게시판' as menuName,
T1.BBS_ID,
COUNT(T1.BBSCTT_INNB) AS cnt
FROM GC_BOARDDATA T1
LEFT JOIN GC_BOARDDATA T2 ON (T2.SOPMAL_CD = T1.SOPMAL_CD AND T2.BBS_ID = T1.BBS_ID AND T2.PARNTS_BBSCTT_INNB = T1.BBSCTT_INNB)
WHERE T1.SOPMAL_CD = #{sopmalCd}
AND T1.BBS_ID IN ('goods_qna','propose_bbs')
AND T1.REGIST_DT >= DATE_ADD(NOW(),INTERVAL - 30 DAY)
AND T1.USE_AT = 'Y'
AND T1.EXPSR_AT = 'Y'
AND T1.PARNTS_BBSCTT_INNB IS NULL
AND T2.BBSCTT_INNB IS NULL
GROUP BY T1.BBS_ID
</select>
<select id = "selectRefundCount">
SELECT
'주문' as menuName,
COUNT(ORDR_INNB) AS cnt
FROM GC_ORDER_REFUND
WHERE SOPMAL_CD = #{sopmalCd}
AND REFUND_REQST_DT >= DATE_ADD(NOW(),INTERVAL - 30 DAY)
AND (REFUND_PROCS_STTUS_CD = '01' OR RETURN_PROCS_STTUS_CD = '01')
AND USE_AT = 'Y'
</select>
</mapper>

View File

@@ -0,0 +1,208 @@
<?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.wb.domainserver.domain.gcone.analytics.mapper.BOAnalyticsMapper">
<!-- ERP 제상품 조회 WHERE 절 -->
<sql id="selectErpGoodsListWhere">
<![CDATA[
WHERE 1=1
AND analysis_order_history_innb BETWEEN #{firstIndex} AND #{lastIndex}
]]>
<if test="brandCd != null and brandCd != ''">
<![CDATA[
AND sopmal_cd = #{brandCd}
]]>
</if>
<if test="barcode != null and barcode != ''">
<![CDATA[
AND barcode = #{barcode}
]]>
</if>
<if test="goodsName != null and goodsName != ''">
<![CDATA[
AND goods_nm LIKE CONCAT('%', #{goodsName}, '%')
]]>
</if>
</sql>
<sql id="selectErpSetGoodsListWhere">
<![CDATA[
WHERE 1=1
]]>
<if test="brandCd != null and brandCd != ''">
<![CDATA[
AND sopmal_cd = #{brandCd}
]]>
</if>
<if test="setCode != null and setCode != ''">
<![CDATA[
AND set_code = #{setCode}
]]>
</if>
<if test="barcode != null and barcode != ''">
<![CDATA[
AND barcode = #{barcode}
]]>
</if>
<if test="setGoodsName != null and setGoodsName != ''">
<![CDATA[
AND set_goods_nm LIKE CONCAT('%', #{setGoodsName}, '%')
]]>
</if>
<if test="goodsName != null and goodsName != ''">
<![CDATA[
AND goods_nm LIKE CONCAT('%', #{goodsName}, '%')
]]>
</if>
</sql>
<sql id="selectOrderHistoryListWhere">
<![CDATA[
WHERE 1=1
]]>
<if test="brandCd != null and brandCd != ''">
<![CDATA[
AND sopmal_cd = #{brandCd}
]]>
</if>
</sql>
<select id="selectErpGoodsList"
parameterType="com.wb.domainserver.domain.gcone.analytics.vo.BOAnanlyticsErpGoodsSrchVO"
resultType="dataMap">
<![CDATA[
SELECT
ROW_NUMBER() OVER(ORDER BY analysis_erp_goods_innb DESC) AS rnum,
analysis_erp_goods_innb as analysisErpGoodsInnb,
barcode as barcode,
sopmal_cd as sopmalCd,
goods_nm as goodsNm,
goods_qy as goodsQy,
goods_ea as goodsEa,
goods_same_code as goodsSameCode,
goods_manager as goodsManager
FROM
GC_ANALYSIS_ERP_GOODS
]]>
<include refid = "selectErpGoodsListWhere"/>
<![CDATA[
ORDER BY analysis_erp_goods_innb DESC
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<select id="selectErpGoodsListCnt"
parameterType="com.wb.domainserver.domain.gcone.analytics.vo.BOAnanlyticsErpGoodsSrchVO">
<![CDATA[
SELECT
count(*)
FROM
GC_ANALYSIS_ERP_GOODS
]]>
<include refid = "selectErpGoodsListWhere"/>
</select>
<select id="selectErpSetGoodsList"
parameterType="com.wb.domainserver.domain.gcone.analytics.vo.BOAnanlyticsErpGoodsSrchVO"
resultType="dataMap">
<![CDATA[
SELECT
ROW_NUMBER() OVER(ORDER BY analysis_erp_set_goods_innb DESC) AS rnum,
set_code as setCode,
barcode as barcode,
sopmal_cd as sopmalCd,
barcode_qy as barcodeQy,
goods_nm as goodsNm,
set_goods_nm as setGoodsNm,
gift_yn as giftYn
FROM
GC_ANALYSIS_ERP_SET_GOODS
]]>
<include refid = "selectErpSetGoodsListWhere"/>
<![CDATA[
ORDER BY analysis_erp_set_goods_innb DESC
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<select id="selectErpSetGoodsListCnt"
parameterType="com.wb.domainserver.domain.gcone.analytics.vo.BOAnanlyticsErpGoodsSrchVO">
<![CDATA[
SELECT
count(*)
FROM
GC_ANALYSIS_ERP_SET_GOODS
]]>
<include refid = "selectErpSetGoodsListWhere"/>
</select>
<select id="selectSopmalCd">
<![CDATA[
SELECT
SOPMAL_CD as sopmalCd ,SOPMAL_NM as sopmalNm
FROM GC_SHOP
]]>
</select>
<update id="updateErpGoods">
<foreach collection="jsonData" item="item" index="index" separator=";">
UPDATE GC_ANALYSIS_ERP_GOODS SET
goods_ea = #{item.goodsEa},
goods_same_code = #{item.goodsSameCode},
goods_manager = #{item.goodsManager}
WHERE analysis_erp_goods_innb = #{item.id}
</foreach>
</update>
<select id="selectOrderHistoryList"
parameterType="com.wb.domainserver.domain.gcone.analytics.vo.BOAnanlyticsErpGoodsSrchVO"
resultType="dataMap">
<![CDATA[
SELECT
analysis_order_history_innb as rnum,
SHOP_SET_CD as shopSetCd,
barcode as barcode,
sopmal_cd as sopmalCd,
barcode_qy as barcodeQy,
goods_nm as goodsNm,
ordr_innb as ordrInnb,
rl_setle_amt as rlSetleAmt,
CASE WHEN ordr_sttus_cd = '25' THEN '결제확인'
WHEN ordr_sttus_cd = '65' THEN '배송중'
WHEN ordr_sttus_cd = '75' THEN '배송완료'
WHEN ordr_sttus_cd = '85' THEN '취소'
ELSE '주문상태 확인 필요' END
as ordrSttusCd,
goods_qy as goods_qy,
payment_dt as paymentDt,
sopmal_dv as sopmalDv
FROM
GC_ANALYSIS_ORDER_HISTORY
]]>
<include refid = "selectOrderHistoryListWhere"/>
<![CDATA[
ORDER BY analysis_order_history_innb
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<select id="selectOrderHistoryListCnt"
parameterType="com.wb.domainserver.domain.gcone.analytics.vo.BOAnanlyticsErpGoodsSrchVO">
<![CDATA[
SELECT
count(*)
FROM
GC_ANALYSIS_ORDER_HISTORY
]]>
<include refid = "selectOrderHistoryListWhere"/>
</select>
</mapper>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,173 @@
<?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.wb.domainserver.domain.gcone.app.mapper.BOAppMapper">
<!-- 앱 실행시 디바이스 정보 등록 -->
<insert id="insertBOAppDeviceInfo"
parameterType="com.wb.domainserver.domain.gcone.app.vo.BOAppMbrDvcVO"
useGeneratedKeys="true"
keyProperty="mbrDeviceInnb">
<![CDATA[
INSERT INTO GC_MEMBER_DEVICE_INFO (
SOPMAL_CD,
FCM_TOKEN,
PUSH_AGRE_AT,
PHAC_AGRE_AT,
DEVICE_ID,
DEVICE_OS_NM,
DEVICE_OS_VER,
DEVICE_APP_VER,
REGIST_DT,
UPDT_DT
) VALUES (
#{sopmalCd},
#{fcmToken},
#{pushAgreAt},
#{phacAgreAt},
#{deviceId},
#{deviceOsNm},
#{deviceOsVer},
#{deviceAppVer},
NOW(),
NOW()
)
]]>
</insert>
<!-- 앱 실행시 디바이스 정보 수정 -->
<update id="updateBOAppDeviceInfo"
parameterType="com.wb.domainserver.domain.gcone.app.vo.BOAppMbrDvcVO">
<![CDATA[
UPDATE GC_MEMBER_DEVICE_INFO
SET FCM_TOKEN = #{fcmToken},
DEVICE_OS_NM = #{deviceOsNm},
DEVICE_OS_VER = #{deviceOsVer},
DEVICE_APP_VER = #{deviceAppVer},
UPDT_DT = NOW()
WHERE DEVICE_ID = #{deviceId}
AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!-- 앱 로그인시 회원-디바이스 정보 등록 -->
<insert id="insertBOAppMbrDvcInfo"
parameterType="com.wb.domainserver.domain.gcone.app.vo.BOAppMbrDvcVO"
useGeneratedKeys="true"
keyProperty="mbrDeviceInnb">
<![CDATA[
INSERT INTO GC_MEMBER_DEVICE_INFO (
SOPMAL_CD,
MBR_INNB,
MBR_DV_CD,
MBR_ID,
FCM_TOKEN,
PUSH_AGRE_AT,
PHAC_AGRE_AT,
DEVICE_ID,
DEVICE_OS_NM,
DEVICE_OS_VER,
DEVICE_APP_VER,
REGIST_DT,
UPDT_DT
) VALUES (
#{sopmalCd},
#{mbrInnb},
#{mbrDvCd},
#{mbrId},
#{fcmToken},
#{pushAgreAt},
#{phacAgreAt},
#{deviceId},
#{deviceOsNm},
#{deviceOsVer},
#{deviceAppVer},
NOW(),
NOW()
)
]]>
</insert>
<!-- 앱 로그인시 회원-디바이스 정보 수정 -->
<update id="updateBOAppMbrDvcInfo"
parameterType="com.wb.domainserver.domain.gcone.app.vo.BOAppMbrDvcVO">
<![CDATA[
UPDATE GC_MEMBER_DEVICE_INFO
SET MBR_INNB = #{mbrInnb},
MBR_DV_CD = #{mbrDvCd},
MBR_ID = #{mbrId},
FCM_TOKEN = #{fcmToken},
DEVICE_OS_NM = #{deviceOsNm},
DEVICE_OS_VER = #{deviceOsVer},
DEVICE_APP_VER = #{deviceAppVer},
UPDT_DT = NOW()
WHERE DEVICE_ID = #{deviceId}
AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!-- 앱 알림동의 선택시 수정 -->
<update id="updateBOAppMbrDvcPushAgre"
parameterType="com.wb.domainserver.domain.gcone.app.vo.BOAppMbrDvcVO">
<![CDATA[
UPDATE GC_MEMBER_DEVICE_INFO
SET PUSH_AGRE_AT = #{pushAgreAt},
UPDT_DT = NOW()
WHERE DEVICE_ID = #{deviceId}
AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!-- 앱 신체활동접근동의 선택시 수정 -->
<update id="updateBOAppMbrDvcPhacAgre"
parameterType="com.wb.domainserver.domain.gcone.app.vo.BOAppMbrDvcVO">
<![CDATA[
UPDATE GC_MEMBER_DEVICE_INFO
SET PHAC_AGRE_AT = #{phacAgreAt},
UPDT_DT = NOW()
WHERE DEVICE_ID = #{deviceId}
AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!-- 디바이스 정보 조회 -->
<select id="selectBOAppMbrDvcInfo"
parameterType="com.wb.domainserver.domain.gcone.app.vo.BOAppMbrDvcVO"
resultType="dataMap">
<![CDATA[
SELECT gmdi.SOPMAL_CD,
gmdi.MBR_INNB,
gmdi.MBR_DV_CD,
gmdi.MBR_ID,
gmdi.FCM_TOKEN,
gmdi.PUSH_AGRE_AT,
gmdi.DEVICE_ID,
gmdi.DEVICE_OS_NM,
gmdi.DEVICE_OS_VER,
gmdi.DEVICE_APP_VER,
gmdi.REGIST_DT,
gmdi.UPDT_DT
FROM GC_MEMBER_DEVICE_INFO gmdi
LEFT JOIN GC_MEMBER gm ON gm.MBR_INNB = gmdi.MBR_INNB AND gm.MBR_DV_CD = gmdi.MBR_DV_CD
WHERE 1 = 1
AND gmdi.SOPMAL_CD = #{sopmalCd}
AND gmdi.MBR_INNB = #{mbrInnb}
AND gmdi.MBR_DV_CD = #{mbrDvCd}
AND gmdi.DEVICE_ID = #{deviceId}
]]>
</select>
<!-- 디바이스 정보 중복 조회 -->
<select id="selectBOAppMbrDvcDplct"
parameterType="com.wb.domainserver.domain.gcone.app.vo.BOAppMbrDvcVO"
resultType="Integer">
<![CDATA[
SELECT COUNT(*)
FROM GC_MEMBER_DEVICE_INFO
WHERE 1 = 1
AND DEVICE_ID = #{deviceId}
AND SOPMAL_CD = #{sopmalCd}
]]>
</select>
</mapper>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,369 @@
<?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.wb.domainserver.domain.gcone.bbs.cm.mapper.BOCmMapper">
<!-- 댓글 목록 조회 -->
<select id = "selectBOBCmListCnt"
parameterType="com.wb.domainserver.domain.gcone.bbs.cm.vo.BOCmVO"
resultType="Integer">
<![CDATA[
SELECT
COUNT(1)
FROM
GC_BOARDCOMMENT FBC
WHERE 1 = 1
AND FBC.DEPTH = 0
AND FBC.SOPMAL_CD = #{sopmalCd}
AND (FBC.USE_AT = 'Y' OR (FBC.USE_AT = 'N' && 0 < (SELECT
COUNT(FBC2.CM_INNB)
FROM
GC_BOARDCOMMENT FBC2
WHERE
1 = 1
AND FBC2.USE_AT = 'Y'
AND FBC2.DEPTH = 1
AND FBC2.PARNTS_CM_INNB = FBC.CM_INNB
AND FBC2.SOPMAL_CD = FBC.SOPMAL_CD
AND FBC2.BBSCTT_INNB = FBC.BBSCTT_INNB
LIMIT 1)))
AND FBC.BBSCTT_INNB = #{bbscttInnb}
]]>
</select>
<!-- 댓글 목록 조회 -->
<select id = "selectBOCmListInqire"
parameterType="com.wb.domainserver.domain.gcone.bbs.cm.vo.BOCmVO"
resultType="DataMap">
<![CDATA[
SELECT FBC.CM_INNB
, FBC.BBSCTT_INNB
, FBC.PARNTS_CM_INNB
, FBC.SOPMAL_CD
, FBC.CN
, FBC.SECRET_BBSCTT_AT
, FBC.USE_AT
, FBC.REGUSR_DV_CD
, FBC.IP
, FBC.PASSWORD
, FBC.DEPTH
, FBC.REGUSR
, FBC.REGUSR_ID
, FBC.REGUSR_NM
, DATE_FORMAT(FBC.REGIST_DT, '%Y.%m.%d. %H:%i') REGIST_DT
, CONCAT(SUBSTRING(FBC.REGUSR_ID, 1, 4), '***') MASKING_REGUSR_ID
, CONCAT(SUBSTRING(FBC.REGUSR_NM, 1, 1), '*',
SUBSTRING(FBC.REGUSR_NM, CHAR_LENGTH(FBC.REGUSR_NM), 1)) MASKING_REGUSR_NM
, IFNULL(FBC.RECOMEND_CNT, 0) RECOMEND_CNT
, IFNULL(FBC.NONRECOMEND_CNT, 0) NONRECOMEND_CNT
, CASE
WHEN DATE_ADD(FBC.REGIST_DT, INTERVAL FBM.NEW_NTT_STDR_DE_CNT DAY) > SYSDATE() THEN 'Y'
ELSE 'N'
END NEW_AT
, FBM.WRTER_INDICT_TY_CD
, IFNULL(FBM.MNGR_NM, '관리자') AS MNGR_NM
, FMG.MBR_GRAD_NM
, GM.JOIN_MTH_CD
, GM.MBR_DV_CD
, GM.MBR_INNB
FROM GC_BOARDCOMMENT FBC
INNER JOIN GC_BOARDDATA FB
ON FBC.BBSCTT_INNB = FB.BBSCTT_INNB
AND FBC.SOPMAL_CD = FB.SOPMAL_CD
INNER JOIN GC_BOARDMANAGER FBM
ON FB.BBS_ID = FBM.BBS_ID
AND FBM.SOPMAL_CD = FBC.SOPMAL_CD
LEFT JOIN GC_MEMBER_GRAD_MAPPING FMGM
ON FBC.SOPMAL_CD = FMGM.SOPMAL_CD
AND FBC.REGUSR = FMGM.MBR_INNB
LEFT JOIN GC_MEMBER GM
ON GM.MBR_DV_CD = FMGM.MBR_DV_CD
AND GM.MBR_INNB = FMGM.MBR_INNB
LEFT JOIN GC_MEMBER_GRAD FMG
ON FMGM.MBR_GRAD_INNB = FMG.MBR_GRAD_INNB
AND FMG.SOPMAL_CD = FBC.SOPMAL_CD
WHERE 1=1
AND FBC.DEPTH = 0
AND (FBC.USE_AT = 'Y' OR (FBC.USE_AT = 'N' && 0 < (SELECT
COUNT(FBC2.CM_INNB)
FROM
GC_BOARDCOMMENT FBC2
WHERE
1 = 1
AND FBC2.USE_AT = 'Y'
AND FBC2.DEPTH = 1
AND FBC2.PARNTS_CM_INNB = FBC.CM_INNB
AND FBC2.SOPMAL_CD = FBC.SOPMAL_CD
AND FBC2.BBSCTT_INNB = FBC.BBSCTT_INNB
LIMIT 1)))
AND FBC.SOPMAL_CD = #{sopmalCd}
AND FBC.BBSCTT_INNB = #{bbscttInnb}
ORDER BY FBC.CM_INNB DESC
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!-- 대댓글 목록 조회 -->
<select id = "selectBOCmAnswListInqire"
parameterType="com.wb.domainserver.domain.gcone.bbs.cm.vo.BOCmVO"
resultType="DataMap">
SELECT FBC.CM_INNB
,FBC.BBSCTT_INNB
,FBC.SOPMAL_CD
,FBC.CN
,DATE_FORMAT(FBC.REGIST_DT,'%Y-%m-%d')REGIST_DT
,CONCAT(SUBSTRING(FBC.REGUSR_ID, 1, 4), '***')MASKING_REGUSR_ID
,CONCAT(SUBSTRING(FBC.REGUSR_NM, 1, 1),'*',SUBSTRING(FBC.REGUSR_NM,CHAR_LENGTH(FBC.REGUSR_NM),1))MASKING_REGUSR_NM
,FBC.PARNTS_CM_INNB
,FBC.SECRET_BBSCTT_AT
,FBC.USE_AT
,FBC.REGUSR_DV_CD
,FBC.IP
,FBC.PASSWORD
,FBC.DEPTH
,FBC.REGUSR
,FBC.REGUSR_ID
,FBC.REGUSR_NM
,IFNULL(FBC.RECOMEND_CNT, 0) RECOMEND_CNT
,IFNULL(FBC.NONRECOMEND_CNT, 0) NONRECOMEND_CNT
,CASE
WHEN DATE_ADD(FBC.REGIST_DT, INTERVAL FBM.NEW_NTT_STDR_DE_CNT DAY) > SYSDATE() THEN 'Y'
ELSE 'N'
END NEW_AT
,FBM.WRTER_INDICT_TY_CD
,FBM.MNGR_NM
,FMG.MBR_GRAD_NM
,GM.JOIN_MTH_CD
,GM.MBR_DV_CD
,GM.MBR_INNB
FROM GC_BOARDCOMMENT FBC
INNER JOIN GC_BOARDDATA FB
ON FBC.BBSCTT_INNB = FB.BBSCTT_INNB
AND FBC.SOPMAL_CD = FB.SOPMAL_CD
INNER JOIN GC_BOARDMANAGER FBM
ON FB.BBS_ID = FBM.BBS_ID
AND FBM.SOPMAL_CD = FBC.SOPMAL_CD
LEFT JOIN GC_MEMBER_GRAD_MAPPING FMGM
ON FBC.SOPMAL_CD = FMGM.SOPMAL_CD
AND FBC.REGUSR = FMGM.MBR_INNB
LEFT JOIN GC_MEMBER GM
ON GM.MBR_DV_CD = FMGM.MBR_DV_CD
AND GM.MBR_INNB = FMGM.MBR_INNB
LEFT JOIN GC_MEMBER_GRAD FMG
ON FMGM.MBR_GRAD_INNB = FMG.MBR_GRAD_INNB
AND FMG.SOPMAL_CD = FBC.SOPMAL_CD
WHERE 1=1
AND FBC.DEPTH = 1
AND FBC.USE_AT = 'Y'
AND FBC.SOPMAL_CD = #{sopmalCd}
AND FBC.PARNTS_CM_INNB IN
<foreach collection="cmInnbArr" item="cmInnbArr" open="(" close=")" separator=",">
#{cmInnbArr}
</foreach>
AND FBC.BBSCTT_INNB = #{bbscttInnb}
</select>
<select id="selectBOCmWrter" parameterType="com.wb.domainserver.domain.gcone.bbs.gnrlbbsctt.vo.BOGnrlbbscttVO"
resultType="dataMap">
SELECT
CONCAT(SUBSTRING(BB.REGUSR_ID, 1, 3), REPEAT('*', CHAR_LENGTH(BB.REGUSR_ID) - 3))MNGR_REGUSR_ID,
BB.REGUSR_ID,
BB.REGUSR,
BB.MBR_GRAD_NM,
CONCAT(SUBSTRING(BB.REGUSR_NM, 1, 1), REPEAT('*', CHAR_LENGTH(BB.REGUSR_NM) - 2),SUBSTRING(BB.REGUSR_NM,CHAR_LENGTH(BB.REGUSR_NM),1))REGUSR_NM,
BB.WRTER_INDICT_TY_CD,
BB.MNGR_NM,
BB.REGUSR_DV_CD
FROM(SELECT
AA.*,
(SELECT
BB.MBR_GRAD_NM
FROM
(SELECT
FMG.MBR_GRAD_NM
FROM
GC_MEMBER_GRAD_MAPPING FMGMG
LEFT OUTER JOIN GC_MEMBER_GRAD FMG
on FMGMG.MBR_GRAD_INNB = FMG.MBR_GRAD_INNB
AND FMGMG.SOPMAL_CD = FMG.SOPMAL_CD
WHERE FMGMG.SOPMAL_CD= AA.SOPMAL_CD
AND FMGMG.MBR_INNB = AA.REGUSR)BB) AS MBR_GRAD_NM
FROM
(SELECT FBC.REGUSR_DV_CD
,FBC.REGUSR_NM
,FBC.REGUSR_ID
,FBC.REGUSR
,FBC.SOPMAL_CD
,FBC.DEPTH
,FBM.WRTER_INDICT_TY_CD
,IFNULL(FBM.MNGR_NM,'관리자')MNGR_NM
FROM
GC_BOARDCOMMENT FBC
INNER JOIN GC_BOARDDATA FB
ON FBC.SOPMAL_CD = FB.SOPMAL_CD
AND FBC.BBSCTT_INNB = FB.BBSCTT_INNB
INNER JOIN GC_BOARDMANAGER FBM
ON FB.SOPMAL_CD = FBM.SOPMAL_CD
AND FB.BBS_ID = FBM.BBS_ID
WHERE 1 = 1
AND FBC.CM_INNB = #{cmInnbInt}
AND FB.SOPMAL_CD = #{sopmalCd})AA
)BB
</select>
<!-- 게시글 상세 조회 가능 여부 판단 -->
<select id="selectBOCmRegusrCnfirm"
parameterType="com.wb.domainserver.domain.gcone.bbs.cm.vo.BOCmVO"
resultType="dataMap">
SELECT
CASE
WHEN GB.SECRET_BBSCTT_AT = 'N' AND GB.REGUSR_DV_CD = '01'
<if test = "!@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(crudDv, 'R')"> /* 수정, 삭제일 경우 */
AND GB.REGUSR = #{mbrInnb}
</if> THEN 'YES' /* 회원이 쓴 글이고 작성자가 본인일 시 */
<if test = "!@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(crudDv, 'R')"> /* 회원이 쓴 글이고 작성자가 본인이 아닐 시 (수정, 삭제시) */
WHEN GB.SECRET_BBSCTT_AT = 'N' AND GB.REGUSR_DV_CD = '01' AND GB.REGUSR <![CDATA[<>]]> #{mbrInnb} AND 0 <![CDATA[<]]> #{mbrInnb} THEN 'OTHER'
WHEN GB.SECRET_BBSCTT_AT = 'N' AND GB.REGUSR_DV_CD = '01' AND 0 = #{mbrInnb} THEN 'LOGIN' /* 회원이 쓴 글이고 접속자가 비회원일 경우 로그인 유도 */
</if>
<choose>
<when test="!@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(crudDv, 'R')">
WHEN GB.SECRET_BBSCTT_AT = 'N' AND GB.REGUSR_DV_CD = '02' THEN 'PW' /* 관리자가 쓴 글 */
WHEN GB.SECRET_BBSCTT_AT = 'N' AND GB.REGUSR_DV_CD = '99' THEN 'PW' /* 비회원 수정, 삭제일 경우 */
</when>
<otherwise>
WHEN GB.SECRET_BBSCTT_AT = 'N' AND GB.REGUSR_DV_CD = '02' THEN 'YES' /* 관리자가 쓴 글 */
WHEN GB.SECRET_BBSCTT_AT = 'N' AND GB.REGUSR_DV_CD = '99' THEN 'YES' /* 비회원 읽기 일 경우 */
</otherwise>
</choose>
WHEN GB.SECRET_BBSCTT_AT = 'Y' AND GB.REGUSR_DV_CD <![CDATA[<>]]> '01' THEN 'PW' /* 작성자 구분이 회원이 아닐경우 비밀번호 입력 */
WHEN GB.SECRET_BBSCTT_AT = 'Y' AND GB.REGUSR_DV_CD = '01' AND GB.REGUSR = #{mbrInnb} THEN 'YES' /* 회원이 쓴 글이고 작성자가 본인인 경우 */
WHEN GB.SECRET_BBSCTT_AT = 'Y' AND GB.REGUSR_DV_CD = '01' AND GB.REGUSR <![CDATA[<>]]> #{mbrInnb} AND 0 <![CDATA[<]]> #{mbrInnb} THEN 'OTHER' /* 회원이 쓴 글이고 작성자가 본인이 아니고 현재 접속자가 회원인 경우 */
WHEN GB.SECRET_BBSCTT_AT = 'Y' AND GB.REGUSR_DV_CD = '01' AND 0 = #{mbrInnb} THEN 'LOGIN' /* 회원이 쓴 글이고 접속자가 비회원일 경우 로그인 유도 */
END MOVE_AT
FROM GC_BOARDCOMMENT GB
WHERE GB.BBSCTT_INNB = #{bbscttInnb}
AND GB.SOPMAL_CD = #{sopmalCd}
AND GB.CM_INNB = #{cmInnb}
</select>
<!-- 댓글 조회 -->
<select id="selectBOCmCn" parameterType="com.wb.domainserver.domain.gcone.bbs.cm.vo.BOCmVO"
resultType="dataMap">
SELECT FBC.CN
,FBC.CM_INNB
,FBC.PASSWORD
,FBC.SECRET_BBSCTT_AT
,IFNULL(FBC.RECOMEND_CNT,0)RECOMEND_CNT
,IFNULL(FBC.NONRECOMEND_CNT,0)NONRECOMEND_CNT
,FBC.REGUSR_NM
FROM GC_BOARDCOMMENT FBC
WHERE FBC.BBSCTT_INNB = #{bbscttInnb}
AND FBC.SOPMAL_CD = #{sopmalCd}
AND FBC.CM_INNB = #{cmInnb}
</select>
<!-- 댓글 등록 -->
<insert id="insertBOCmRegist">
INSERT INTO GC_BOARDCOMMENT (
SOPMAL_CD,
BBSCTT_INNB,
PARNTS_CM_INNB,
REGUSR_DV_CD,
REGUSR_ID,
REGUSR_NM,
DEPTH,
PASSWORD,
CN,
SECRET_BBSCTT_AT,
INQIRE_CNT,
RECOMEND_CNT,
NONRECOMEND_CNT,
AGENT_ID,
IP,
USE_AT,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
)
VALUES (
#{sopmalCd},
#{bbscttInnb},
#{parntsCmInnb},
#{regusrDvCd},
#{regusrId},
#{regusrNm},
#{depth},
MD5(#{password}),
#{cn},
#{secretBbscttAt},
0,
0,
0,
#{agentId},
#{ip},
'Y',
#{regusr},
NOW(),
#{updusr},
NOW()
)
</insert>
<!-- 댓글 수정 -->
<update id="updateBOCmUpdt" parameterType="com.wb.domainserver.domain.gcone.bbs.cm.vo.BOCmVO">
UPDATE GC_BOARDCOMMENT
SET CN = #{cn},
UPDUSR = #{updusr},
UPDT_DT = NOW(),
SECRET_BBSCTT_AT = #{secretBbscttAt}
WHERE CM_INNB = #{cmInnb}
AND BBSCTT_INNB = #{bbscttInnb}
AND SOPMAL_CD = #{sopmalCd}
</update>
<!-- 댓글 논리삭제 -->
<update id="updateBOCmDel" parameterType="DataMap">
UPDATE GC_BOARDCOMMENT
SET USE_AT = #{useAt},
UPDUSR = #{updusr},
UPDT_DT = NOW()
WHERE BBSCTT_INNB = #{bbscttInnb}
AND SOPMAL_CD = #{sopmalCd}
AND CM_INNB = #{cmInnb}
</update>
<!-- 비밀번호 체크 -->
<select id = "selectBOComparPassword" parameterType="com.wb.domainserver.domain.gcone.bbs.cm.vo.BOCmVO"
resultType="Integer">
SELECT COUNT(*)
FROM GC_BOARDCOMMENT FB
WHERE 1=1
AND FB.PASSWORD = MD5(#{password})
AND FB.CM_INNB = #{cmInnb}
AND FB.SOPMAL_CD = #{sopmalCd}
</select>
<!--추천 비추천 업데이트-->
<update id="updateBOCmRecomendUpdt" parameterType="com.wb.domainserver.domain.gcone.bbs.cm.vo.BOCmVO">
UPDATE GC_BOARDCOMMENT FBC, (
SELECT
IFNULL(MAX(RECOMEND_CNT), 0) + 1 AS RECOMEND_CNT
,IFNULL(MAX(NONRECOMEND_CNT), 0) + 1 AS NONRECOMEND_CNT
,BBSCTT_INNB
,SOPMAL_CD
,CM_INNB
FROM
GC_BOARDCOMMENT
WHERE
1 = 1
AND BBSCTT_INNB = #{bbscttInnb}
AND SOPMAL_CD = #{sopmalCd}
AND CM_INNB = #{cmInnb})FBC2
SET
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(recomendDv, 'recommend')">
FBC.RECOMEND_CNT = FBC2.RECOMEND_CNT
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(recomendDv, 'nonrecommend')">
FBC.NONRECOMEND_CNT = FBC2.NONRECOMEND_CNT
</if>
WHERE 1=1
AND FBC.BBSCTT_INNB = #{bbscttInnb}
AND FBC.SOPMAL_CD = #{sopmalCd}
AND FBC.CM_INNB = #{cmInnb}
</update>
</mapper>

View File

@@ -0,0 +1,348 @@
<?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.wb.domainserver.domain.gcone.bbs.cnslt.mapper.BOCnsltMapper">
<!-- 상담 목록 조회 WHERE 절 -->
<sql id="cnsltListInqireWhere">
WHERE 1=1
AND CNSLT.SOPMAL_CD = #{sopmalCd}
<!-- 검색어 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchKeyword)">
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchKeywordDv, 'keywordName')">
AND MBR.MBR_NM LIKE CONCAT('%', #{srchKeyword}, '%')
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchKeywordDv, 'keywordId')">
AND MBR.MBR_ID LIKE CONCAT('%', #{srchKeyword}, '%')
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchKeywordDv, 'keywordPhone')">
AND CNSLT.TELNB = HEX(AES_ENCRYPT(REPLACE(#{srchKeyword},'-',''), #{secretKey}))
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchKeywordDv)">
AND (
MBR.MBR_NM LIKE CONCAT('%', #{srchKeyword}, '%')
OR MBR.MBR_ID LIKE CONCAT('%', #{srchKeyword}, '%')
OR CNSLT.TELNB = HEX(AES_ENCRYPT(REPLACE(#{srchKeyword},'-',''), #{secretKey}))
OR MBR.EMAIL LIKE CONCAT('%', #{srchKeyword}, '%')
)
</when>
</choose>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchMngrNm)">
AND CNSLT.MNGR_NM LIKE CONCAT('%', #{srchMngrNm}, '%')
</if>
<!-- 처리 상태 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchProcsSttusCd)">
AND CNSLT.PROCS_STTUS_CD IN
<foreach collection="srchProcsSttusCd" item="srchProcsSttusCd" open="(" close=")" separator=",">
#{srchProcsSttusCd}
</foreach>
</if>
<!-- 등록일 -->
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDtDv, 'cnstlDt')">
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStartDate)">
AND CNSLT.REGIST_DT <![CDATA[>=]]> #{srchStartDate} ' 00:00:00'
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndDate)">
AND CNSLT.REGIST_DT <![CDATA[<=]]> #{srchEndDate} ' 23:59:59'
</if>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDtDv, 'procsDt')">
<![CDATA[
AND CNSLT.PROCS_DT IS NOT NULL
]]>
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStartDate)
and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchEndDate)">
AND CNSLT.PROCS_DT BETWEEN #{srchStartDate} ' 00:00:00' AND SYSDATE()
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchStartDate)
and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndDate)">
AND CNSLT.PROCS_DT <![CDATA[<]]> #{srchEndDate} ' 23:59:59'
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStartDate)
and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndDate)">
AND CNSLT.PROCS_DT BETWEEN #{srchStartDate} ' 00:00:00' AND #{srchEndDate} ' 23:59:59'
</when>
</choose>
</when>
</choose>
<!-- 관련번호 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchRelateNm)">
<choose>
<!-- 주문코드 -->
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchRelateDv, 'relateOrdrnb')">
AND CNSLT.ORDR_INNB = #{srchRelateNm}
</when>
<!-- 출고코드 -->
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchRelateDv, 'dlivyCd')">
AND CNSLT.DLIVY_CD_NB = #{srchRelateNm}
</when>
<!-- 환불코드 -->
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchRelateDv, 'refndCd')">
AND CNSLT.REFUND_CD_NB = #{srchRelateNm}
</when>
<!-- 상품문의 -->
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchRelateDv, 'relateGoodsInqry')">
AND CNSLT.GOODS_INQRY_BBSCTT_NB = #{srchRelateNm}
</when>
<!-- 컬럼추가후 '상품후기' 코드로 변경 -->
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchRelateDv, 'goodsRvwBbscttNb')">
AND CNSLT.GOODS_RVW_BBSCTT_NB = #{srchRelateNm}
</when>
</choose>
</if>
<!-- 상담내용 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchCnsltCn)">
AND CNSLT.CNSLT_CN LIKE CONCAT('%', #{srchCnsltCn}, '%')
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(mbrInnb)">
AND (CNSLT.MBR_DV_CD = #{mbrDvCd} AND CNSLT.MBR_INNB = #{mbrInnb} || CNSLT.TELNB = HEX(AES_ENCRYPT(REPLACE(
#{mbtlnb},'-',''), #{secretKey})))
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(mbtlnb) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(mbrTyCd, '02')">
AND CNSLT.TELNB = HEX(AES_ENCRYPT(REPLACE(#{mbtlnb},'-',''), #{secretKey}))
AND CNSLT.MBR_INNB = 0
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(cnsltDtlsInnb)">
<![CDATA[
AND CNSLT.CNSLT_DTLS_INNB = #{cnsltDtlsInnb}
]]>
</if>
</sql>
<!-- 상담 목록 조회 FROM 절 -->
<sql id="cnsltListInqireFrom">
FROM GC_COUNSEL CNSLT
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(crmAt)">
LEFT JOIN GC_MEMBER MBR
ON CNSLT.MBR_INNB = MBR.MBR_INNB
AND CNSLT.MBR_DV_CD = MBR.MBR_DV_CD
LEFT JOIN GC_MEMBER_GRAD_MAPPING FMGM
ON FMGM.MBR_DV_CD = CNSLT.MBR_DV_CD
AND FMGM.SOPMAL_CD = CNSLT.SOPMAL_CD
AND FMGM.MBR_INNB = CNSLT.MBR_INNB
LEFT JOIN GC_MEMBER_GRAD FMG
ON FMG.SOPMAL_CD = CNSLT.SOPMAL_CD
AND FMGM.MBR_GRAD_INNB = FMG.MBR_GRAD_INNB
</if>
</sql>
<!-- 상담 목록 건수 조회 -->
<select id="selectBOCnsltListCnt"
parameterType="com.wb.domainserver.domain.gcone.bbs.cnslt.vo.BOCnsltVO"
resultType="java.lang.Integer">
<![CDATA[
SELECT COUNT(1)
]]>
<include refid="cnsltListInqireFrom"/>
<include refid="cnsltListInqireWhere"/>
</select>
<!-- 상담 목록 조회 with Pagination -->
<select id="selectBOCnsltListInqire"
parameterType="com.wb.domainserver.domain.gcone.bbs.cnslt.vo.BOCnsltVO"
resultType="dataMap">
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM
,TB.*
,IF(TB.DLIVY_INFO IS NOT NULL,SUBSTRING_INDEX(TB.DLIVY_INFO,',',1),NULL) AS DLIVY_ORDR_INNB
,IF(TB.DLIVY_INFO IS NOT NULL,SUBSTRING_INDEX(TB.DLIVY_INFO,',',-1),NULL) AS DLIVY_INNB
,IF(TB.RETURN_REFUND_INFO IS NOT NULL,SUBSTRING_INDEX(TB.RETURN_REFUND_INFO,',',1),NULL) AS REFUND_ORDR_INNB
,IF(TB.RETURN_REFUND_INFO IS NOT NULL,SUBSTRING_INDEX(TB.RETURN_REFUND_INFO,',',-1),NULL) AS ORDER_REFUND_INNB
FROM (
SELECT
CNSLT.CNSLT_DTLS_INNB
,CNSLT.MBR_INNB
,CNSLT.MBR_DV_CD
,CNSLT.MNGR_INNB
,CNSLT.MNGR_NM
,CNSLT.ORDR_INNB
,CNSLT.DLIVY_CD_NB
,CNSLT.RETURN_CD_NB
,CNSLT.REFUND_CD_NB
,CNSLT.GOODS_INQRY_BBSCTT_NB
,CNSLT.GOODS_RVW_BBSCTT_NB
,CNSLT.PROCS_STTUS_CD
,CNSLT.CNSLT_CN
,CNSLT.TELNB_DV_CD
,CNSLT.LRGE_CL_CD
,CNSLT.MIDDL_CL_CD
,CNSLT.RECRD_KY
,CAST(AES_DECRYPT(UNHEX(CNSLT.TELNB) , #{secretKey}) AS CHAR(50)) AS TELNB
,CNSLT.REGUSR
,CNSLT.UPDUSR
,CNSLT.UPDT_DT
,DATE_FORMAT(CNSLT.PROCS_DT, '%Y-%m-%d %H:%i:%s') AS PROCS_DT
,DATE_FORMAT(CNSLT.REGIST_DT, '%Y-%m-%d %H:%i:%s') AS REGIST_DT
,fn_get_commcode_name('COUNSEL_PROCS_STTUS', PROCS_STTUS_CD) AS PROCS_STTUS_CD_NM
,fn_get_commcode_name('LRGE_CL', LRGE_CL_CD) AS LRGE_CL_NM
,fn_get_commcode_name(CONCAT('MIDDL_CL_',REPLACE(LRGE_CL_CD,'0','')), MIDDL_CL_CD) AS MIDDL_CL_NM
,CASE
WHEN IFNULL(CNSLT.DLIVY_CD_NB,'') <![CDATA[<>]]> ''
THEN (SELECT
CONCAT(GGE.ORDR_INNB, ',', GGE.DLIVY_INNB)
FROM
GC_GOODS_EXPORT GGE
WHERE GGE.SOPMAL_CD = CNSLT.SOPMAL_CD
AND GGE.DLIVY_CD_NB = CNSLT.DLIVY_CD_NB)
END DLIVY_INFO
,CASE
WHEN IFNULL(CNSLT.REFUND_CD_NB,'') <![CDATA[<>]]> ''
THEN (SELECT
CONCAT(GOR.ORDR_INNB,',',GOR.ORDER_REFUND_INNB)
FROM
GC_ORDER_REFUND GOR
WHERE
GOR.SOPMAL_CD = CNSLT.SOPMAL_CD
AND (GOR.REFUND_CD = CNSLT.REFUND_CD_NB
OR GOR.RETURN_CD = CNSLT.RETURN_CD_NB))
END RETURN_REFUND_INFO
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(crmAt)">
,MBR.MBR_ID
,MBR.MBR_NM
,MBR.JOIN_MTH_CD
,FMG.MBR_GRAD_NM AS GRAD_NM
</if>
<include refid="cnsltListInqireFrom"/>
<include refid="cnsltListInqireWhere"/>
ORDER BY CNSLT.REGIST_DT DESC
) TB
WHERE (@rownum:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!-- 상담 상세 내역 조회 -->
<select id="selectBOCnsltDtlUpdtInqirePopup"
parameterType="com.wb.domainserver.domain.gcone.bbs.cnslt.vo.BOCnsltVO"
resultType="dataMap">
<![CDATA[
SELECT CNSLT.CNSLT_DTLS_INNB
, CNSLT.MBR_INNB
, CNSLT.MNGR_INNB
, CNSLT.MNGR_NM
, CNSLT.ORDR_INNB
, CNSLT.DLIVY_CD_NB
, CNSLT.RETURN_CD_NB
, CNSLT.REFUND_CD_NB
, CNSLT.GOODS_INQRY_BBSCTT_NB
, CNSLT.GOODS_RVW_BBSCTT_NB
, CNSLT.PROCS_STTUS_CD
, CNSLT.PROCS_DT
, CNSLT.CNSLT_CN
, CNSLT.TELNB_DV_CD
, CNSLT.LRGE_CL_CD
, CNSLT.MIDDL_CL_CD
, CNSLT.RECRD_KY
, CAST(AES_DECRYPT(UNHEX(CNSLT.TELNB), #{secretKey}) AS CHAR(50)) AS MBTLNB
, CNSLT.REGUSR
, DATE_FORMAT(CNSLT.REGIST_DT, '%Y-%m-%d') AS REGIST_DT
, CNSLT.UPDUSR
, CNSLT.UPDT_DT
FROM GC_COUNSEL CNSLT
WHERE CNSLT.CNSLT_DTLS_INNB = #{cnsltDtlsInnb}
AND CNSLT.SOPMAL_CD = #{sopmalCd}
]]>
</select>
<!-- 상담 수정 -->
<update id="updateBOCnsltUpdt">
<![CDATA[
UPDATE GC_COUNSEL SET
ORDR_INNB = #{ordrNb}
,DLIVY_CD_NB = #{dlivyInnb}
,RETURN_CD_NB = #{rtngudCdNb}
,REFUND_CD_NB = #{refndCdNb}
,GOODS_INQRY_BBSCTT_NB = #{goodsInqryBbscttNb}
,GOODS_RVW_BBSCTT_NB = #{goodsRvwBbscttNb}
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(procsSttusCd, '03')">
<![CDATA[
,PROCS_DT = SYSDATE()
]]>
</if>
<![CDATA[
,PROCS_STTUS_CD = #{procsSttusCd}
,CNSLT_CN = #{cnsltCn}
,UPDUSR = #{updusr}
,UPDT_DT = SYSDATE()
WHERE 1=1
AND CNSLT_DTLS_INNB = #{cnsltDtlsInnb} AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!-- 상담 등록 -->
<insert id="insertBOCnsltRegist">
INSERT INTO GC_COUNSEL (
SOPMAL_CD,
MBR_INNB,
MBR_DV_CD,
MNGR_INNB,
MNGR_NM,
ORDR_INNB,
DLIVY_CD_NB,
RETURN_CD_NB,
REFUND_CD_NB,
GOODS_INQRY_BBSCTT_NB,
GOODS_RVW_BBSCTT_NB,
PROCS_STTUS_CD,
PROCS_DT,
CNSLT_CN,
TELNB_DV_CD,
LRGE_CL_CD,
MIDDL_CL_CD,
RECRD_KY,
TELNB,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
)
SELECT #{sopmalCd},
IFNULL(#{mbrInnb}, 0),
IFNULL(#{mbrDvCd}, ''),
#{mngrInnb},
GM.MNGR_NM,
#{ordrNb},
#{dlivyInnb},
#{rtngudCdNb},
#{refndCdNb},
#{goodsInqryBbscttNb},
#{goodsRvwBbscttNb},
#{procsSttusCd},
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(procsSttusCd, '03')">
<![CDATA[
SYSDATE(),
]]>
</when>
<otherwise>
<![CDATA[
#{procsDt},
]]>
</otherwise>
</choose>
#{cnsltCn},
#{telnbDvCd},
#{lrgeCl},
#{middlCl},
#{customer_record_key},
HEX(AES_ENCRYPT(REPLACE(#{telnb},'-',''), #{secretKey})),
#{regusr},
SYSDATE(),
#{updusr},
SYSDATE()
FROM GC_MANAGER GM
WHERE MNGR_INNB = #{regusr}
</insert>
</mapper>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,85 @@
<?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.wb.domainserver.domain.gcone.bbs.prom.mapper.BOPromMapper">
<select id="selectPromInfo" parameterType="com.wb.domainserver.domain.gcone.bbs.prom.vo.BOPromVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT *
FROM GC_PROM
WHERE PROM_INNB = #{promInnb}
LIMIT 1
</select>
<select id="selectPromJoinInfo" parameterType="com.wb.domainserver.domain.gcone.bbs.prom.vo.BOPromVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT *
FROM GC_PROM_JOIN
WHERE MBR_INNB = #{mbrInnb}
AND PROM_INNB = #{promInnb}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(joinDt)">
AND JOIN_DT = #{joinDt}
</if>
LIMIT 1
</select>
<select id="countPromJoin" parameterType="com.wb.domainserver.domain.gcone.bbs.prom.vo.BOPromVO" resultType="int">
SELECT COUNT(*)
FROM GC_PROM_JOIN
WHERE PROM_INNB = #{promInnb}
</select>
<select id="selectPromRewardList" parameterType="com.wb.domainserver.domain.gcone.bbs.prom.vo.BOPromVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PROM_REWARD_INNB as promRewardInnb,
PROM_INNB as promInnb,
SORT_ORDR as sortOrdr,
PROBABILITY as probability,
REWARD_TY as rewardTy,
ACCMLMNY_AMT as accmlmnyAmt,
MLG_APPLC_RESN as mlgApplcResn,
COUPON_INNB as couponInnb,
COUPON_SNDNG_INNB as couponSndngInnb,
REWARD_DC as rewardDc,
EXPIRE_DT as expireDt
FROM GC_PROM_REWARD
WHERE PROM_INNB = #{promInnb}
ORDER BY SORT_ORDR ASC
</select>
<select id="countRewardWinners" parameterType="com.wb.domainserver.domain.gcone.bbs.prom.vo.BOPromVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
SORT_ORDR as sortOrdr,
COUNT(*) as winnerCount
FROM GC_PROM_JOIN
WHERE PROM_INNB = #{promInnb}
AND SORT_ORDR IS NOT NULL
GROUP BY SORT_ORDR
</select>
<insert id="insertPromJoin" parameterType="com.wb.domainserver.domain.gcone.bbs.prom.vo.BOPromVO">
INSERT INTO GC_PROM_JOIN (
PROM_INNB,
SOPMAL_CD,
MBR_INNB,
JOIN_DT,
SORT_ORDR,
REWARD_TY,
ACCMLMNY_AMT,
COUPON_INNB,
COUPON_SNDNG_INNB,
REWARD_DC,
REGIST_DT
) VALUES (
#{promInnb},
#{sopmalCd},
#{mbrInnb},
NOW(),
#{sortOrdr},
#{rewardTy},
#{accmlmnyAmt},
#{couponInnb},
#{couponSndngInnb},
#{rewardDc},
NOW()
)
</insert>
</mapper>

View File

@@ -0,0 +1,292 @@
<?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.wb.domainserver.domain.gcone.bnft.atend.mapper.BOAtendMapper">
<!-- 혜택 화면 설정 정보 조회 -->
<select id="selectBOBenefitScreenInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
b.BNF_INNB, -- 혜택 고유 번호
b.USE_AT, -- 사용여부
b.SCR_REPRSNT_IMG, -- 화면 대표 이미지 경로
b.SCR_REPRSNT_LINK_URL, -- 화면 대표 이미지 링크 URL
b.SCR_RWD_IMG, -- 보상 이미지 경로
b.SCR_RWD_LINK_URL, -- 보상 이미지 링크 URL
b.BNF_WORDS_CN, -- 혜택 안내 문구
b.BNF_BGN_DT, -- 진행기간 시작일시
b.BNF_END_DT, -- 진행기간 종료일시
r.MLG_RWD_AMT -- 마일리지 보상 금액
FROM
GC_BENEFIT b
LEFT JOIN GC_BENEFIT_REWARD r ON b.BNF_INNB = r.BNF_INNB
WHERE
b.BNF_DV_CD = '010' -- 출석체크 혜택 구분 코드
AND b.USE_AT = 'Y'
AND r.BNF_RWD_CATE_DV_CD = '01010'
AND DATE(NOW()) BETWEEN DATE(b.BNF_BGN_DT) AND DATE(b.BNF_END_DT)
AND b.SOPMAL_CD = #{sopmalCd}
ORDER BY
b.BNF_INNB -- 혜택 고유 번호로 정렬
]]>
</select>
<!-- 출석 보상 정보 조회 -->
<select id="selectAttendanceRewardInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
br.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
br.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
br.MLG_RWD_AMT, -- 마일리지 보상 금액
br.COUPON_INNB, -- 쿠폰 고유 번호
br.ITM_NM AS ITM_NM, -- 보상 상품 이름
br.RWD_CND_CNT, -- 보상 조건 횟수
CASE
WHEN br.BNF_RWD_CATE_DV_CD = '01010' THEN '매일'
WHEN br.BNF_RWD_CATE_DV_CD IN ('01020', '01030') THEN CONCAT('누적 ', br.RWD_CND_CNT, '회')
WHEN br.BNF_RWD_CATE_DV_CD = '01040' THEN '100% 출석'
ELSE ''
END AS reward_condition -- 보상 조건 설명
from GC_BENEFIT gb
LEFT JOIN
GC_BENEFIT_REWARD br
ON gb.BNF_INNB = br.BNF_INNB
WHERE
br.BNF_INNB = #{bnfInnb}
AND gb.SOPMAL_CD = #{sopmalCd}
ORDER BY
br.RWD_CND_CNT;
]]>
</select>
<!-- 월간 출석 현황 조회 -->
<select id="selectMonthlyAttendance" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
DATE_FORMAT(BNF_PRT_DT, '%Y-%m-%d') AS attendanceDate -- 출석 날짜
FROM
GC_BENEFIT_PARTCPTN
WHERE
MBR_INNB = #{mbrInnb} -- 회원 고유 번호
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb} -- 혜택 고유 번호
AND DATE_FORMAT(BNF_PRT_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m') -- 현재 월 조건
]]>
</select>
<!-- 일일 출석 보상 정보 조회 -->
<select id="selectDailyAttendanceReward" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 보상 금액
COUPON_INNB, -- 쿠폰 고유 번호
ITM_NM -- 표시명
FROM
GC_BENEFIT_REWARD
WHERE
BNF_INNB = #{bnfInnb} -- 혜택 고유 번호
AND BNF_RWD_CATE_DV_CD = '01010' -- 일일 출석 보상 코드
]]>
</select>
<!-- 누적 출석 보상 정보 조회 -->
<select id="selectCumulativeAttendanceReward" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
br.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
br.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
br.MLG_RWD_AMT, -- 마일리지 보상 금액
br.COUPON_INNB, -- 쿠폰 고유 번호
COALESCE(cs.COUPON_SNDNG_NM, br.ITM_NM) AS ITM_NM, -- 쿠폰 이름 (쿠폰발송명 우선, 없으면 표시명)
br.RWD_CND_CNT -- 보상 조건 횟수
FROM
GC_BENEFIT_REWARD br
LEFT JOIN GC_COUPON_SNDNG cs ON br.COUPON_INNB = cs.COUPON_SNDNG_INNB
AND cs.SOPMAL_CD = #{sopmalCd}
WHERE
br.BNF_INNB = #{bnfInnb} -- 혜택 고유 번호
AND br.BNF_RWD_CATE_DV_CD IN ('01020', '01030', '01040') -- 누적 출석 보상 코드들
ORDER BY
br.RWD_CND_CNT -- 보상 조건 횟수 기준 정렬
]]>
</select>
<!-- 초록잎 지급 개수 조회 -->
<select id="selectLeafCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PYMNT_CNT, -- 지급 초록잎 개수
SPECIAL_CNT -- 스페셜 지급 초록잎 개수
FROM
GC_BENEFIT_CPSLMKN
WHERE
BNF_DV_CD = '010' -- 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!-- 출석체크 참여 -->
<insert id="participateAttendanceCheck" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" useGeneratedKeys="true" keyProperty="bnfPrtInnb" keyColumn="BNF_PRT_INNB">
<![CDATA[
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_INNB, -- 혜택 고유 번호
BNF_PRT_DT, -- 혜택 참여 일시
MBR_INNB, -- 회원 고유 번호
MBR_DV_CD, -- 회원 구분 코드
PRT_LEAF_CNT, -- 참여 초록잎 개수
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
)
SELECT
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
#{paidLeafCnt},
#{regusr},
NOW()
WHERE
NOT EXISTS (
SELECT 1
FROM GC_BENEFIT_PARTCPTN
WHERE BNF_INNB = #{bnfInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND DATE(BNF_PRT_DT) = CURDATE()
)
]]>
</insert>
<!-- 마일리지 적립 (일일/누적 보상 구분) -->
<insert id="insertMileageReceipt" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_RECEIPT
(
BNF_RCV_INNB, -- 혜택 보상수령 고유 번호
BNF_PRT_INNB, -- 혜택 참여 고유 번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 보상 금액
COUPON_INNB, -- 쿠폰 고유 번호
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
)
VALUES
(
#{bnfRcvInnb},
#{bnfPrtInnb},
#{bnfRwdCateDvCd},
#{bnfRwdGodsDvCd},
#{mlgRwdAmt},
#{couponInnb},
#{regusr},
NOW()
)
]]>
</insert>
<!-- 이번 달 출석 횟수 조회 -->
<select id="selectCurrentMonthAttendanceCount" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
COUNT(*) AS currentMonthAttendanceCount -- 이번 달 출석 횟수
FROM
GC_BENEFIT_PARTCPTN
WHERE
MBR_INNB = #{mbrInnb} -- 회원 고유 번호
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb} -- 혜택 고유 번호
AND DATE_FORMAT(BNF_PRT_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m') -- 현재 월 조건
]]>
</select>
<!-- 누적 출석 마일리지 조회 -->
<select id="selectTotalAttendanceMileage" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
COALESCE(SUM(r.MLG_RWD_AMT), 0) AS totalAttendanceMileage -- 누적 출석 마일리지
FROM
GC_BENEFIT_RECEIPT r
JOIN
GC_BENEFIT_PARTCPTN p ON r.BNF_PRT_INNB = p.BNF_PRT_INNB
WHERE
p.MBR_INNB = #{mbrInnb} -- 회원 고유 번호
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.BNF_INNB = #{bnfInnb} -- 혜택 고유 번호
AND r.MLG_RWD_AMT IS NOT NULL
AND r.MLG_RWD_AMT > 0
AND DATE_FORMAT(p.BNF_PRT_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')
]]>
</select>
<!-- 오늘 출석체크 참여 정보 조회 -->
<select id="selectTodayAttendance" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT *
FROM
GC_BENEFIT_PARTCPTN
WHERE
MBR_INNB = #{mbrInnb} -- 회원 고유 번호
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb} -- 혜택 고유 번호
AND DATE(BNF_PRT_DT) = CURDATE() -- 오늘 날짜 조건
]]>
</select>
<!-- 알림 상태 조회 -->
<select id="selectNotificationStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
AGRE_AT -- 동의 여부
FROM
GC_BENEFIT_AGREE
WHERE
MBR_INNB = #{mbrInnb} -- 회원 고유번호
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_DV_CD = '010' -- 혜택 구분 코드 (출석체크)
AND BNF_AGRE_DV_CD = '010' -- 혜택 동의 구분 코드 (알림동의)
]]>
</select>
<!-- 알림 신청 -->
<insert id="insertNotification" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO">
<![CDATA[
INSERT INTO GC_BENEFIT_AGREE (
SOPMAL_CD, -- 쇼핑몰코드
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
BNF_DV_CD, -- 혜택 구분 코드
BNF_AGRE_DV_CD, -- 혜택 동의 구분 코드
AGRE_AT, -- 동의 여부
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{sopmalCd},
#{mbrInnb},
#{mbrDvCd},
'010', -- 출석체크 혜택 구분 코드
'010', -- 알림동의 구분 코드
'Y', -- 동의함
#{regusr},
NOW()
)
]]>
</insert>
<!-- 알림 on off -->
<update id="updateAtendNotification" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO">
<![CDATA[
UPDATE GC_BENEFIT_AGREE
SET
AGRE_AT = #{agreAt},
REGIST_DT = NOW()
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_DV_CD = '010'
AND BNF_AGRE_DV_CD = '010'
]]>
</update>
</mapper>

View File

@@ -0,0 +1,367 @@
<?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.wb.domainserver.domain.gcone.bnft.bnftMain.mapper.BOBnftMainMapper">
<!-- 혜택 메인 메뉴 목록 조회 -->
<select id="selectBnftMainList" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
m.BNF_DV_CD,
m.SOPMAL_CD,
m.MENU_SJ_1,
m.MENU_SJ_2,
m.SORT_ORDR,
CASE
WHEN m.BNF_DV_CD = '120' THEN 'Y'
WHEN m.BNF_DV_CD = '140' THEN 'Y'
WHEN m.BNF_DV_CD = '020' AND (
SELECT COALESCE(d.PHAC_AGRE_AT, 'N')
FROM GC_MEMBER_DEVICE_INFO d
WHERE d.MBR_INNB = #{mbrInnb}
AND d.MBR_DV_CD = #{mbrDvCd}
AND d.SOPMAL_CD = #{sopmalCd}
AND d.DEVICE_ID = #{deviceId}
LIMIT 1
) = 'Y' AND EXISTS (
SELECT 1
FROM GC_BENEFIT b
WHERE b.BNF_DV_CD = m.BNF_DV_CD
AND b.SOPMAL_CD = m.SOPMAL_CD
AND b.USE_AT = 'Y'
AND (b.BNF_BGN_DT IS NULL OR b.BNF_BGN_DT <= NOW())
AND (b.BNF_END_DT IS NULL OR b.BNF_END_DT >= NOW())
) THEN 'Y'
WHEN EXISTS (
SELECT 1
FROM GC_BENEFIT b
WHERE b.BNF_DV_CD = m.BNF_DV_CD
AND b.SOPMAL_CD = m.SOPMAL_CD
AND b.USE_AT = 'Y'
AND (b.BNF_BGN_DT IS NULL OR b.BNF_BGN_DT <= NOW())
AND (b.BNF_END_DT IS NULL OR b.BNF_END_DT >= NOW())
) THEN 'Y'
ELSE 'N'
END AS AVAL_AT,
CASE
WHEN m.BNF_DV_CD = '100' AND EXISTS (
SELECT 1
FROM GC_BENEFIT b
JOIN GC_BENEFIT_NTKCHL n ON b.BNF_INNB = n.BNF_INNB
WHERE b.BNF_DV_CD = '100'
AND b.SOPMAL_CD = m.SOPMAL_CD
AND b.USE_AT = 'Y'
AND n.MBR_INNB = #{mbrInnb}
AND n.MBR_DV_CD = #{mbrDvCd}
AND n.DEL_AT = 'N'
) THEN 'Y'
ELSE 'N'
END AS NTK_CHL_AT,
(
SELECT b.BNF_INNB
FROM GC_BENEFIT b
JOIN GC_BENEFIT_NTKCHL n ON b.BNF_INNB = n.BNF_INNB
WHERE b.BNF_DV_CD = '100'
AND b.SOPMAL_CD = m.SOPMAL_CD
AND b.USE_AT = 'Y'
AND (b.BNF_BGN_DT IS NULL OR b.BNF_BGN_DT <= NOW())
AND (b.BNF_END_DT IS NULL OR b.BNF_END_DT >= NOW())
AND n.MBR_INNB = #{mbrInnb}
AND n.MBR_DV_CD = #{mbrDvCd}
AND n.DEL_AT = 'N'
ORDER BY n.REGIST_DT DESC
LIMIT 1
) AS NTK_BNF_INNB,
CASE
WHEN m.BNF_DV_CD = '050' AND EXISTS (
SELECT
gbcs.BNF_STTUS_INNB,
gbcs.PROGRS_AT,
gbcs.BNF_INNB
from
GC_BENEFIT gb
left join
GC_BENEFIT_CPSLMKN_STTUS gbcs
on gb.BNF_INNB = gbcs.BNF_INNB
WHERE
gbcs.MBR_INNB = #{mbrInnb}
AND gbcs.MBR_DV_CD = #{mbrDvCd}
AND gbcs.PROGRS_AT = 'Y'
AND gb.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND USE_AT = 'Y'
) THEN 'Y'
ELSE 'N'
END AS CPSL_PROGRS_AT,
(
SELECT s.BNF_INNB
FROM GC_BENEFIT_CPSLMKN_STTUS s
JOIN GC_BENEFIT b ON s.BNF_INNB = b.BNF_INNB
WHERE s.MBR_INNB = #{mbrInnb}
AND s.MBR_DV_CD = #{mbrDvCd}
AND s.PROGRS_AT = 'Y'
AND b.SOPMAL_CD = m.SOPMAL_CD
AND b.BNF_DV_CD = '050'
AND b.USE_AT = 'Y'
AND (b.BNF_BGN_DT IS NULL OR b.BNF_BGN_DT <= NOW())
AND (b.BNF_END_DT IS NULL OR b.BNF_END_DT >= NOW())
ORDER BY s.REGIST_DT DESC
LIMIT 1
) AS CPSL_BNF_INNB,
CASE
WHEN EXISTS (
SELECT 1
FROM GC_BENEFIT b2
JOIN GC_BENEFIT_INTEREST bi ON b2.BNF_INNB = bi.BNF_INNB
WHERE b2.BNF_DV_CD = m.BNF_DV_CD
AND b2.SOPMAL_CD = m.SOPMAL_CD
AND bi.USE_AT = 'Y'
AND bi.DEL_AT = 'N'
) THEN 'Y'
ELSE 'N'
END AS INTRST_AVAL_AT,
CASE
WHEN m.BNF_DV_CD = '040' THEN (
COALESCE(
(SELECT SUM(CHG_CNT) FROM GC_BENEFIT_CHARGE
WHERE MBR_INNB = #{mbrInnb} AND BNF_DV_CD = '040')
, 0)
-
COALESCE(
(SELECT COUNT(*) FROM GC_BENEFIT_PARTCPTN BP
INNER JOIN GC_BENEFIT B ON BP.BNF_INNB = B.BNF_INNB
WHERE BP.MBR_INNB = #{mbrInnb}
AND B.BNF_DV_CD = '040')
, 0)
)
ELSE 0
END AS ROULETTE_REMAINING_CNT
FROM
GC_BENEFIT_MANAGE_MENU m
WHERE
m.INDICT_AT = 'Y'
AND SOPMAL_CD = #{sopmalCd}
ORDER BY
m.SORT_ORDR asc
]]>
</select>
<!-- 디바이스 권한 조회 -->
<select id="selectDevicePermission" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
PHAC_AGRE_AT
FROM
GC_MEMBER_DEVICE_INFO
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND DEVICE_ID = #{deviceId}
]]>
</select>
<!-- 배너 목록 조회 -->
<select id="selectBannerList" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_BANNER_INNB, -- 혜택 배너 고유번호
SOPMAL_CD, -- 쇼핑몰코드
BANNER_SJ, -- 배너 제목
LINK_URL, -- 링크 URL
IMG_FIL_COURS, -- 이미지 파일 경로
IMG_FIL_NM, -- 이미지 파일명
SORT_ORDR -- 정렬 순서
FROM
GC_BENEFIT_MANAGE_BANNER
WHERE
SOPMAL_CD = #{sopmalCd} -- 파라미터로 받은 쇼핑몰 코드
AND USE_AT = 'Y' -- 사용 여부가 'Y'인 배너만
AND DEL_AT = 'N' -- 삭제되지 않은 배너만
ORDER BY
SORT_ORDR ASC -- 정렬 순서대로 조회
]]>
</select>
<!-- 마케팅동의 여부 조회 -->
<select id="selectMbrMarktAgreeAt" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
MARKT_RECPTN_AGRE_AT
FROM
GC_MARKETING_AGREE
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
]]>
</select>
<!-- 현재 방영 중인 라이브쇼핑 확인 쿼리 -->
<select id="selectCurrentLiveShopping" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
CASE
WHEN EXISTS (
SELECT 1
FROM GC_BENEFIT b
JOIN GC_BENEFIT_CONTENT c ON b.BNF_INNB = c.BNF_INNB
WHERE b.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND b.BNF_DV_CD = '070' -- 라이브쇼핑 혜택 구분 코드
AND b.USE_AT = 'Y' -- 사용 중인 혜택만
AND c.CN_BGN_DT <= NOW() -- 현재 시간이 방송 시작 시간 이후
AND c.CN_END_DT >= NOW() -- 현재 시간이 방송 종료 시간 이전
) THEN 'Y'
ELSE 'N'
END AS IS_LIVE_ON_AIR -- 라이브쇼핑 방영 중 여부
]]>
</select>
<!-- 새로 시작한 비상시적 이벤트 조회 쿼리 -->
<select id="selectNewEvents" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
b.BNF_INNB, -- 혜택 설정 고유번호
b.BNF_DV_CD, -- 혜택 구분 코드
b.BNF_SJ, -- 혜택 제목
b.BNF_BGN_DT, -- 혜택 시작 일시
b.BNF_END_DT -- 혜택 종료 일시
FROM
GC_BENEFIT b
WHERE
b.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND b.USE_AT = 'Y' -- 사용 중인 혜택만
AND b.BNF_DV_CD NOT IN ('010', '020') -- 출석체크, 만보기 제외
AND b.BNF_BGN_DT <= NOW() -- 현재 시간이 혜택 시작 시간 이후
AND b.BNF_END_DT >= NOW() -- 현재 시간이 혜택 종료 시간 이전
AND DATEDIFF(NOW(), b.BNF_BGN_DT) <= 1 -- 시작한지 7일 이내의 이벤트
ORDER BY
b.BNF_BGN_DT DESC -- 최근에 시작한 순으로 정렬
]]>
</select>
<!-- 참여했거나 혜택 지급 완료된 이벤트 조회 쿼리 -->
<select id="selectParticipatedEvents" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT DISTINCT
b.BNF_INNB, -- 혜택 설정 고유번호
b.BNF_DV_CD, -- 혜택 구분 코드
b.BNF_SJ, -- 혜택 제목
p.BNF_PRT_DT, -- 혜택 참여 일시
CASE
WHEN r.BNF_RCV_INNB IS NOT NULL THEN 'Y'
ELSE 'N'
END AS REWARD_RECEIVED -- 보상 수령 여부
FROM
GC_BENEFIT b
JOIN
GC_BENEFIT_PARTCPTN p ON b.BNF_INNB = p.BNF_INNB
LEFT JOIN
GC_BENEFIT_RECEIPT r ON p.BNF_PRT_INNB = r.BNF_PRT_INNB
WHERE
b.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND p.MBR_INNB = #{mbrInnb} -- 회원 고유번호
AND p.MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드
AND b.BNF_DV_CD != '020' -- 만보기 제외 (참여완료 의미 없음)
AND b.BNF_DV_CD != '040' -- 룰렛 제외 (참여완료 의미 없음)
AND b.BNF_END_DT >= NOW() -- 아직 종료되지 않은 이벤트만
AND DATE(p.BNF_PRT_DT) = CURRENT_DATE() -- 모든 혜택에 대해 오늘 참여한 것만 포함
ORDER BY
p.BNF_PRT_DT DESC -- 최근 참여 순으로 정렬
]]>
</select>
<!-- QR 이벤트 혜택 설정 조회 -->
<select id="selectQrEventBenefit" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
b.BNF_INNB, -- 혜택 고유 번호
b.BNF_SJ, -- 혜택 제목
b.USE_AT, -- 사용여부
b.BNF_WORDS_CN, -- 혜택 안내 문구
b.BNF_BGN_DT, -- 진행기간 시작일시
b.BNF_END_DT -- 진행기간 종료일시
FROM
GC_BENEFIT b
WHERE
b.BNF_DV_CD = '150' -- QR코드 이벤트 혜택 구분 코드
AND b.USE_AT = 'Y' -- 사용 중인 혜택만
AND b.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND (b.BNF_BGN_DT IS NULL OR b.BNF_BGN_DT <= NOW()) -- 시작일 체크
AND (b.BNF_END_DT IS NULL OR b.BNF_END_DT >= NOW()) -- 종료일 체크
ORDER BY
b.BNF_INNB DESC -- 최신 혜택 우선
]]>
</select>
<!-- QR 이벤트 참여 정보 저장 -->
<insert id="insertQrEventParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO" useGeneratedKeys="true" keyProperty="bnfPrtInnb" keyColumn="BNF_PRT_INNB">
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_INNB, -- 혜택 고유 번호
BNF_PRT_DT, -- 혜택 참여 일시
MBR_INNB, -- 회원 고유 번호
MBR_DV_CD, -- 회원 구분 코드
STR_INNB, -- 매장 고유번호
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
)
VALUES (
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
#{strInnb},
#{mbrInnb},
NOW()
)
</insert>
<!-- QR 이벤트 보상 정보 조회 -->
<select id="selectQrEventReward" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
br.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
br.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
br.MLG_RWD_AMT, -- 마일리지 보상 금액
br.COUPON_INNB, -- 쿠폰 고유 번호
COALESCE(cs.COUPON_SNDNG_NM, br.ITM_NM) AS ITM_NM -- 쿠폰 이름 (쿠폰발송명 우선, 없으면 표시명)
FROM
GC_BENEFIT_REWARD br
LEFT JOIN GC_COUPON_SNDNG cs ON br.COUPON_INNB = cs.COUPON_SNDNG_INNB
AND cs.SOPMAL_CD = #{sopmalCd}
WHERE
<if test="bnfInnb != null and bnfInnb != ''">
br.BNF_INNB = #{bnfInnb} -- 혜택 고유 번호
</if>
AND br.BNF_RWD_CATE_DV_CD = '15010' -- QR코드 이벤트 보상 코드
ORDER BY
br.MLG_RWD_AMT DESC -- 마일리지 높은 순으로 정렬
</select>
<!-- QR 이벤트 보상 영수증 저장 -->
<insert id="insertQrEventRewardReceipt" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
INSERT INTO GC_BENEFIT_RECEIPT
(
BNF_RCV_INNB, -- 혜택 보상수령 고유 번호
BNF_PRT_INNB, -- 혜택 참여 고유 번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 보상 금액
COUPON_INNB, -- 쿠폰 고유 번호
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
)
VALUES
(
#{bnfRcvInnb},
#{bnfPrtInnb},
#{bnfRwdCateDvCd},
#{bnfRwdGodsDvCd},
#{mlgRwdAmt},
#{couponInnb},
#{mbrInnb},
NOW()
)
</insert>
</mapper>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,201 @@
<?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.wb.domainserver.domain.gcone.bnft.conrev.mapper.BOConrevMapper">
<!-- 베스트 리뷰 목록 조회 -->
<select id="selectBestReviewList" parameterType="com.wb.domainserver.domain.gcone.bnft.conrev.vo.BOConrevVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
b.BNF_INNB,
b.BNF_SJ,
b.BNF_WORDS_CN,
b.USE_AT,
b.BNF_BGN_DT,
b.BNF_END_DT,
c.CN_SJ,
c.CN_DC,
c.LINK_URL,
c.IMG_FIL_COURS,
c.IMG_FIL_NM,
c.TME_SECND,
CONCAT(SUBSTRING(c.MBR_NM, 1, 4), '***') MBR_NM,
c.WORDS_CN,
r.MLG_RWD_AMT
FROM
GC_BENEFIT b
JOIN
GC_BENEFIT_CONTENT c ON b.BNF_INNB = c.BNF_INNB
JOIN
GC_BENEFIT_REWARD r ON b.BNF_INNB = r.BNF_INNB
WHERE
b.BNF_DV_CD = '090' -- 베스트 리뷰보기 코드
AND b.USE_AT = 'Y'
AND (b.BNF_BGN_DT IS NULL OR b.BNF_BGN_DT &lt;= NOW())
AND (b.BNF_END_DT IS NULL OR b.BNF_END_DT &gt;= NOW())
AND b.SOPMAL_CD = #{sopmalCd}
ORDER BY
b.BNF_INNB DESC
<!-- LIMIT #{pageSize} OFFSET #{offset} -->
</select>
<!-- 리뷰 상세 정보 조회 -->
<select id="selectReviewDetail" parameterType="com.wb.domainserver.domain.gcone.bnft.conrev.vo.BOConrevVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
b.BNF_INNB,
b.BNF_SJ,
c.CN_SJ AS GOODS_NM,
c.CN_DC AS REVIEW_CONTENT,
c.LINK_URL AS REVIEW_LINK,
c.IMG_FIL_COURS,
c.IMG_FIL_NM,
c.TME_SECND,
c.MBR_NM AS REVIEWER_NAME,
r.MLG_RWD_AMT
FROM
GC_BENEFIT b
JOIN
GC_BENEFIT_CONTENT c ON b.BNF_INNB = c.BNF_INNB
JOIN
GC_BENEFIT_REWARD r ON b.BNF_INNB = r.BNF_INNB
WHERE
b.BNF_INNB = #{bnfInnb}
</select>
<!-- 베스트 리뷰 보기 마일리지 적립 여부 확인 -->
<select id="checkConrevMileageAccumulation" parameterType="com.wb.domainserver.domain.gcone.bnft.conrev.vo.BOConrevVO" resultType="int">
<![CDATA[
SELECT
COUNT(*) -- 적립 건수
FROM
GC_BENEFIT_PARTCPTN p
JOIN
GC_BENEFIT_RECEIPT r ON p.BNF_PRT_INNB = r.BNF_PRT_INNB
WHERE
p.BNF_INNB = #{bnfInnb} -- 혜택 설정 고유번호
AND
p.MBR_INNB = #{mbrInnb} -- 회원 고유번호
AND
p.MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드
]]>
</select>
<!-- 베스트 리뷰 보기 보상 정보 조회 -->
<select id="selectConrevRewardInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.conrev.vo.BOConrevVO" resultType="java.lang.Integer">
<![CDATA[
SELECT
MLG_RWD_AMT -- 마일리지 보상 금액
FROM
GC_BENEFIT gb
LEFT JOIN GC_BENEFIT_REWARD gbr
ON gb.BNF_INNB = gbr.BNF_INNB
WHERE
BNF_RWD_CATE_DV_CD = '09010' -- 베스트리뷰보기 보상 코드
AND gb.BNF_INNB = #{bnfInnb}
AND gb.USE_AT = 'Y'
]]>
</select>
<!-- 리뷰 시간 정보 조회 -->
<select id="selectReviewTime" parameterType="com.wb.domainserver.domain.gcone.bnft.conrev.vo.BOConrevVO" resultType="java.lang.Integer">
<![CDATA[
SELECT
TME_SECND -- 시간(초)
FROM
GC_BENEFIT_CONTENT
WHERE
BNF_INNB = #{bnfInnb} -- 혜택 설정 고유번호
]]>
</select>
<!-- 베스트 리뷰 보기 참여 정보 삽입 -->
<insert id="insertReviewParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.conrev.vo.BOConrevVO">
<selectKey keyProperty="bnfPrtInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_INNB, -- 혜택 설정 고유번호
BNF_PRT_DT, -- 혜택 참여일시
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
PRT_LEAF_CNT, -- 참여 초록잎 개수
REGUSR, -- 등록자
REGIST_DT -- 등록일시
) VALUES (
#{bnfPrtInnb},
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
#{paidLeafCnt},
#{regusr},
NOW()
)
]]>
</insert>
<!-- 초록잎 지급량 조회 -->
<select id="selectLeafCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PYMNT_CNT, -- 지급 초록잎 개수
SPECIAL_CNT -- 스페셜 지급 초록잎 개수
FROM
GC_BENEFIT_CPSLMKN
WHERE
BNF_DV_CD = '090' -- 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!-- 베스트 리뷰 보기 마일리지 적립 정보 삽입 -->
<insert id="insertMileageAccumulation" parameterType="com.wb.domainserver.domain.gcone.bnft.conrev.vo.BOConrevVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_RCV_INNB, -- 혜택 보상수령 고유번호
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
REGUSR, -- 등록자
REGIST_DT -- 등록일시
)
SELECT
#{bnfRcvInnb},
latest_participation.BNF_PRT_INNB,
'09010', -- 베스트리뷰보기 보상 코드
'010', -- 마일리지 보상 상품 코드
#{mlgRwdAmt},
#{mbrInnb},
NOW()
FROM (
SELECT BNF_PRT_INNB
FROM GC_BENEFIT_PARTCPTN
WHERE BNF_INNB = #{bnfInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
ORDER BY BNF_PRT_DT DESC
LIMIT 1
) AS latest_participation
]]>
</insert>
<!-- 베스트리뷰 안내문 조회 -->
<select id="selectBestReviewGuidance" parameterType="com.wb.domainserver.domain.gcone.bnft.conrev.vo.BOConrevVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_GDCC_INNB, -- 혜택 안내문 고유번호
BNF_DV_CD, -- 혜택 구분코드
SOPMAL_CD, -- 쇼핑몰코드
WORDS_CN_1, -- 안내문 1
WORDS_CN_2, -- 안내문 2
WORDS_CN_3 -- 안내문 3
FROM
GC_BENEFIT_GDCC
WHERE
BNF_DV_CD = '090' -- 베스트리뷰 구분코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰코드
]]>
</select>
</mapper>

View File

@@ -0,0 +1,644 @@
<?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.wb.domainserver.domain.gcone.bnft.cpslmkn.mapper.BOCpslmknMapper">
<!-- 캡슐만들기 제품목록 조회 -->
<select id="selectRewardProductList" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
b.BNF_INNB, -- 혜택 설정 고유번호
c.CN_SJ, -- 제품명
c.CN_DC, -- 제품 한줄소개
c.LINK_URL, -- 구매 URL
c.IMG_FIL_COURS, -- 썸네일 이미지 파일 경로
c.IMG_FIL_NM, -- 썸네일 이미지 파일명
r.RWD_CND_CNT, -- 필요한 초록잎 개수
b.USE_AT, -- 사용 여부
c.VALID_DT, -- 유효 날짜
r.MLG_RWD_AMT, -- 마일리지 보상 금액
r.COUPON_INNB, -- 쿠폰 고유번호
#{sopmalCd} -- 쇼핑몰 코드
FROM
GC_BENEFIT b
INNER JOIN
GC_BENEFIT_CONTENT c ON b.BNF_INNB = c.BNF_INNB
INNER JOIN
GC_BENEFIT_REWARD r ON b.BNF_INNB = r.BNF_INNB
WHERE
b.BNF_DV_CD = '050' -- 캡슐만들기 혜택 구분 코드
AND b.USE_AT = 'Y' -- 사용 중인 혜택만 조회
AND b.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
ORDER BY
c.CN_SJ ASC -- 제품명 기준 오름차순 정렬
</select>
<!-- 캡슐만들기 게임 안내 조회 -->
<select id="selectImportantNotice" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
WORDS_CN_1 AS NOTICE_1,
WORDS_CN_2 AS NOTICE_2,
WORDS_CN_3 AS NOTICE_3
FROM GC_BENEFIT_GDCC
WHERE BNF_DV_CD = '050' -- 캡슐만들기의 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!--이전 진행 상황 체크 -->
<select id="checkPreviousProgress" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
gbcs.BNF_STTUS_INNB, -- 상태 고유번호 반환
gbcs.PROGRS_AT,
gbcs.BNF_INNB,
gbcs.PROGRS_STEP, -- 현재 단계도 반환
gbcs.TOT_USE_LEAF_CNT -- 사용된 초록잎도 반환
FROM
GC_BENEFIT gb
LEFT JOIN
GC_BENEFIT_CPSLMKN_STTUS gbcs
ON gb.BNF_INNB = gbcs.BNF_INNB
WHERE
gbcs.MBR_INNB = #{mbrInnb}
AND gbcs.MBR_DV_CD = #{mbrDvCd}
AND gbcs.PROGRS_AT = 'Y' -- 진행 중인 게임만
AND gb.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND gb.USE_AT = 'Y'
AND gb.BNF_INNB = #{bnfInnb} -- 현재 혜택만 조회
ORDER BY gbcs.REGIST_DT DESC -- 최신 게임 우선
LIMIT 1 -- 하나만 조회
</select>
<!--필요한 초록잎 개수 조회 -->
<select id="selectProductInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
r.RWD_CND_CNT -- 필요한 초록잎 개수
FROM
GC_BENEFIT_REWARD r
WHERE
r.BNF_INNB = #{bnfInnb}
</select>
<!-- 게임 진행 현황 -->
<select id="selectCpslmknGameStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PROGRS_STEP, -- 진행 단계
TOT_USE_LEAF_CNT, -- 총 사용 초록잎 개수
BNF_STTUS_INNB -- 게임 상태 고유번호
FROM
GC_BENEFIT_CPSLMKN_STTUS
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
AND BNF_STTUS_INNB = #{bnfSttusInnb}
AND PROGRS_AT = 'Y'
</select>
<!-- 보유 초록잎 조회 -->
<select id="selectOwnedLeafCount" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="int">
SELECT
COALESCE(
(SELECT SUM(PRT_LEAF_CNT)
FROM GC_BENEFIT_PARTCPTN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}),
0
) -
COALESCE(
(SELECT SUM(USE_LEAF_CNT)
FROM GC_BENEFIT_CPSLMKN_USELEAF
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}),
0
) AS owned_leaf_count
</select>
<!-- 진행 상태 업데이트 -->
<update id="updateProgressStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO">
UPDATE GC_BENEFIT_CPSLMKN_STTUS
SET
PROGRS_STEP = #{progrsStep}, -- 진행 단계
TOT_USE_LEAF_CNT = #{totUseLeafCnt},-- 총 사용 초록잎 개수
UPDT_DT = NOW() -- 수정 일시
WHERE
BNF_STTUS_INNB = #{bnfSttusInnb} -- 고유번호만으로 조건 단순화
AND PROGRS_AT = 'Y' -- 진행 중인 게임만 (안전장치)
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
</update>
<!-- 진행 상태 삽입 -->
<insert id="insertProgressStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO">
INSERT INTO GC_BENEFIT_CPSLMKN_STTUS (
BNF_INNB, -- 혜택 설정 고유번호
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
PROGRS_AT, -- 진행 여부
PROGRS_STEP, -- 진행 단계
TOT_USE_LEAF_CNT, -- 총 사용 초록잎 개수
REGIST_DT, -- 등록 일시
UPDT_DT -- 수정 일시
) VALUES (
#{bnfInnb},
#{mbrInnb},
#{mbrDvCd},
'Y',
#{progrsStep},
#{totUseLeafCnt},
NOW(),
NOW()
)
</insert>
<!-- 초록잎 사용 내역 저장 -->
<insert id="insertLeafUsage" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO">
INSERT INTO GC_BENEFIT_CPSLMKN_USELEAF (
BNF_INNB, -- 혜택 설정 고유번호
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
USE_LEAF_CNT, -- 사용 초록잎 개수
PROGRS_STEP, -- 진행 단계
REGIST_DT -- 등록 일시
) VALUES (
#{bnfInnb},
#{mbrInnb},
#{mbrDvCd},
#{useLeafCnt},
#{progrsStep},
NOW()
)
</insert>
<!-- 진행 상태 저장 또는 업데이트 -->
<insert id="upsertProgressStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO">
INSERT INTO GC_BENEFIT_CPSLMKN_STTUS (
BNF_INNB, -- 혜택 설정 고유번호
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
PROGRS_AT, -- 진행 여부
PROGRS_STEP, -- 진행 단계
TOT_USE_LEAF_CNT, -- 총 사용 초록잎 개수
REGIST_DT, -- 등록 일시
UPDT_DT -- 수정 일시
) VALUES (
#{bnfInnb},
#{mbrInnb},
#{mbrDvCd},
'Y',
#{progrsStep},
#{totUseLeafCnt},
NOW(),
NOW()
) ON DUPLICATE KEY UPDATE
PROGRS_STEP = #{progrsStep},
TOT_USE_LEAF_CNT = #{totUseLeafCnt},
UPDT_DT = NOW()
</insert>
<!-- 현재 진행 상태와 선택한 보상 확인 -->
<select id="selectCurrentProgress" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
s.PROGRS_STEP, -- 현재 단계
s.TOT_USE_LEAF_CNT, -- 총 사용 초록잎 개수
r.BNF_RWD_GODS_DV_CD, -- 선택한 보상 상품 구분 코드
c.CN_SJ, -- 제품명
c.CN_DC, -- 제품 설명
b.BNF_WORDS_CN -- 중요 사항 안내
FROM
GC_BENEFIT_CPSLMKN_STTUS s
JOIN
GC_BENEFIT_REWARD r ON s.BNF_INNB = r.BNF_INNB
JOIN
GC_BENEFIT_CONTENT c ON s.BNF_INNB = c.BNF_INNB
JOIN
GC_BENEFIT b ON s.BNF_INNB = b.BNF_INNB
WHERE
s.MBR_INNB = #{mbrInnb}
AND
s.MBR_DV_CD = #{mbrDvCd}
AND
s.BNF_INNB = #{bnfInnb}
AND s.PROGRS_AT = 'Y'
</select>
<!-- 모달 데이터 조회 -->
<select id="selectProgressModalData" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
s.PROGRS_STEP, -- 현재 진행 단계
s.TOT_USE_LEAF_CNT, -- 총 사용된 초록잎 개수
r.RWD_CND_CNT, -- 필요한 총 초록잎 개수
c.CN_SJ, -- 선물 제목
c.CN_DC, -- 선물 설명
c.IMG_FIL_COURS, -- 선물 이미지 URL
b.BNF_WORDS_CN -- 중요 공지사항
FROM
GC_BENEFIT_CPSLMKN_STTUS s
JOIN GC_BENEFIT_REWARD r ON s.BNF_INNB = r.BNF_INNB
JOIN GC_BENEFIT_CONTENT c ON s.BNF_INNB = c.BNF_INNB
JOIN GC_BENEFIT b ON s.BNF_INNB = b.BNF_INNB
WHERE
s.MBR_INNB = #{mbrInnb}
AND s.MBR_DV_CD = #{mbrDvCd}
AND s.BNF_INNB = #{bnfInnb}
AND s.PROGRS_AT = 'Y'
</select>
<!-- 캡슐 만들기 알림 설정 정보 조회 -->
<select id="selectCpslmknSettingsInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
BNF_DV_CD, -- 혜택 구분 코드
BNF_AGRE_DV_CD, -- 혜택 동의 구분 코드
AGRE_AT, -- 동의 여부
BNF_INNB -- 혜택 설정 고유번호
FROM
GC_BENEFIT_AGREE
WHERE
MBR_INNB = #{mbrInnb}
AND
MBR_DV_CD = #{mbrDvCd}
AND
BNF_DV_CD = '050' -- 캡슐만들기(050) 혜택 코드
AND
BNF_AGRE_DV_CD = '010' -- 알림동의(010) 코드
AND
SOPMAL_CD = #{sopmalCd}
</select>
<!-- 알림 설정 저장 -->
<insert id="upsertNotificationSetting" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO">
INSERT INTO GC_BENEFIT_AGREE (
SOPMAL_CD, -- 쇼핑몰 코드
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
BNF_DV_CD, -- 혜택 구분 코드
BNF_AGRE_DV_CD, -- 혜택 동의 구분 코드
BNF_INNB, -- 혜택 설정 고유번호
AGRE_AT, -- 동의 여부
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{sopmalCd},
#{mbrInnb},
#{mbrDvCd},
'050', -- 캡슐만들기(050) 혜택 코드
'010', -- 알림동의(010) 코드
#{bnfInnb},
#{agreAt},
#{mbrInnb},
NOW()
) ON DUPLICATE KEY UPDATE
AGRE_AT = #{agreAt},
REGUSR = #{mbrInnb},
REGIST_DT = NOW()
</insert>
<!-- 초록잎 생성, 사용 내역 조회 (최근 6개월) -->
<select id="selectLeafHistory" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT * FROM (
-- 초록잎 생성 내역 (혜택 참여)
SELECT
'CREATE' AS action_type,
CASE b.BNF_DV_CD
WHEN '010' THEN '출석체크'
WHEN '020' THEN '만보기'
WHEN '030' THEN '행운복권'
WHEN '040' THEN '룰렛게임'
WHEN '050' THEN '캡슐만들기 (퍼즐맞추기)'
WHEN '060' THEN '이벤트보기'
WHEN '070' THEN '라이브쇼핑 참여'
WHEN '080' THEN '할인소식 공유'
WHEN '090' THEN '베스트 리뷰보기'
WHEN '100' THEN '섭취챌린지'
WHEN '110' THEN 'GCpay 가입'
WHEN '120' THEN '관심건강분야 설정'
WHEN '130' THEN 'OX퀴즈'
WHEN '140' THEN '모바일스탬프'
WHEN '150' THEN 'QR코드 이벤트'
WHEN '900' THEN '구매확정'
ELSE '기타'
END AS event_name,
DATE_FORMAT(p.BNF_PRT_DT, '%Y-%m-%d %H:%i') AS action_datetime,
p.PRT_LEAF_CNT AS leaf_count,
p.REGIST_DT AS reg_datetime
FROM
GC_BENEFIT_PARTCPTN p
JOIN
GC_BENEFIT b ON p.BNF_INNB = b.BNF_INNB
WHERE
p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.PRT_LEAF_CNT &gt; 0
AND p.BNF_PRT_DT &gt;= DATE_SUB(NOW(), INTERVAL 6 MONTH)
UNION ALL
-- 초록잎 사용 내역 (캡슐 만들기)
SELECT
'USE' AS action_type,
'넣기' AS event_name,
DATE_FORMAT(u.REGIST_DT, '%Y-%m-%d %H:%i') AS action_datetime,
(u.USE_LEAF_CNT * -1) AS leaf_count, -- 사용은 음수로 표시
u.REGIST_DT AS reg_datetime
FROM
GC_BENEFIT_CPSLMKN_USELEAF u
WHERE
u.MBR_INNB = #{mbrInnb}
AND u.MBR_DV_CD = #{mbrDvCd}
AND u.REGIST_DT &gt;= DATE_SUB(NOW(), INTERVAL 6 MONTH)
) history
ORDER BY
reg_datetime DESC
LIMIT
#{offset}, #{limit}
</select>
<!-- 혜택 고유번호로 보상 정보 조회 -->
<select id="selectRewardInfoByBnfInnb" parameterType="long" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
COUPON_INNB -- 쿠폰고유번호
-- 필요하다면 다른 보상 관련 컬럼도 추가 (예: ITM_NM)
FROM
GC_BENEFIT_REWARD
WHERE
BNF_INNB = #{bnfInnb}
-- 캡슐 만들기 관련 보상은 하나만 존재한다고 가정.
-- 만약 여러 개가 있을 수 있다면 추가적인 조건이나 LIMIT 필요
</select>
<!-- 캡슐만들기 5단계 완료 시 혜택 참여 정보 기록 -->
<insert id="insertBenefitParticipationOnCompletion" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO">
<selectKey keyProperty="bnfPrtInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN
</selectKey>
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_INNB, -- 혜택 설정 고유번호
BNF_PRT_DT, -- 혜택 참여일시 (완료 시점)
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
REGIST_DT -- 등록 일시
) VALUES (
#{bnfPrtInnb},
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
NOW()
)
</insert>
<!-- 캡슐만들기 완료 후 보상 수령 내역 기록 -->
<insert id="insertBenefitReceipt" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_RCV_INNB, -- 혜택 보상수령 고유번호
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
COUPON_INNB, -- 쿠폰 고유번호
GOODS_INNB, -- 상품 고유번호
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{bnfRcvInnb},
#{bnfPrtInnb},
#{bnfRwdCateDvCd},
#{bnfRwdGodsDvCd},
#{mlgRwdAmt},
#{couponInnb},
#{goodsInnb},
#{regusr},
NOW()
)
</insert>
<!-- 특정 혜택의 현재 사용 가능 여부 확인 -->
<select id="checkBenefitAvailability" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="int">
SELECT
COUNT(*)
FROM
GC_BENEFIT
WHERE
BNF_DV_CD = '050'
AND USE_AT = 'Y'
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 조건 추가
AND (BNF_BGN_DT IS NULL OR BNF_BGN_DT &lt;= NOW()) -- 시작일이 없거나 시작일 이후
AND (BNF_END_DT IS NULL OR BNF_END_DT &gt;= NOW()) -- 종료일이 없거나 종료일 이전
</select>
<!-- 같은 날짜의 기존 참여 정보 조회 -->
<select id="selectTodayParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
BNF_PRT_INNB,
PRT_LEAF_CNT
FROM
GC_BENEFIT_PARTCPTN
WHERE
BNF_INNB = #{bnfInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND DATE(BNF_PRT_DT) = DATE(NOW())
ORDER BY BNF_PRT_DT DESC
LIMIT 1
</select>
<!-- 참여 정보 업데이트 (초록잎 추가) -->
<update id="updateBenefitParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO">
UPDATE GC_BENEFIT_PARTCPTN
SET
PRT_LEAF_CNT = PRT_LEAF_CNT + #{useLeafCnt},
STEP_CNT = #{progrsStep},
UPDUSR = #{regusr}, <!-- 명시적으로 updusr 사용 -->
UPDT_DT = NOW()
WHERE
BNF_PRT_INNB = #{bnfPrtInnb}
</update>
<!-- 새 참여 정보 삽입 -->
<insert id="insertBenefitParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" useGeneratedKeys="true" keyProperty="bnfPrtInnb">
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_INNB, -- 혜택 설정 고유번호
BNF_PRT_DT, -- 혜택 참여일시
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
PRT_LEAF_CNT, -- 참여 초록잎 개수
STEP_CNT, -- 걸음수
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
#{useLeafCnt},
#{progrsStep}, <!-- 현재 진행 단계를 걸음수로 사용 -->
#{regusr}, <!-- 명시적으로 regusr 사용 -->
NOW()
)
</insert>
<!-- 보상 정보 조회 -->
<select id="selectRewardInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
r.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
r.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
r.MLG_RWD_AMT, -- 마일리지 금액
r.COUPON_INNB -- 쿠폰 고유번호
FROM
GC_BENEFIT_REWARD r
WHERE
r.BNF_INNB = #{bnfInnb}
LIMIT 1
</select>
<!-- 캡슐만들기 정보 조회 - 진행 상태가 없어도 기본 안내 정보 반환 -->
<select id="selectCapsuleGameInfo"
parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
COALESCE(s.PROGRS_STEP, 0) AS currentProgressStep, -- 현재 진행 단계 (없으면 0)
c.CN_SJ AS rewardProductName, -- 현재 리워드 제품 명
c.IMG_FIL_COURS AS productImagePath, -- 제품 이미지 경로
g.WORDS_CN_1 AS notice1, -- 캡슐만들기 게임 안내 1
g.WORDS_CN_2 AS notice2, -- 캡슐만들기 게임 안내 2
g.WORDS_CN_3 AS notice3 -- 캡슐만들기 게임 안내 3
FROM
GC_BENEFIT b
INNER JOIN
GC_BENEFIT_CONTENT c ON b.BNF_INNB = c.BNF_INNB
LEFT JOIN
GC_BENEFIT_GDCC g ON b.BNF_DV_CD = g.BNF_DV_CD AND b.SOPMAL_CD = g.SOPMAL_CD
LEFT JOIN
GC_BENEFIT_CPSLMKN_STTUS s ON b.BNF_INNB = s.BNF_INNB
AND s.MBR_INNB = #{mbrInnb}
AND s.MBR_DV_CD = #{mbrDvCd}
AND s.PROGRS_AT = 'Y'
WHERE
b.BNF_DV_CD = '050' -- 캡슐만들기 혜택 구분 코드
AND b.USE_AT = 'Y' -- 사용 중인 혜택만 조회
AND b.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND (#{bnfInnb} IS NULL OR b.BNF_INNB = #{bnfInnb}) -- 특정 혜택 번호가 있으면 해당 혜택만
LIMIT 1
</select>
<!-- 캡슐 만들기 게임 리셋 : 진행 중인 게임만 리셋 (중간에 그만두고 다시 할 때) -->
<update id="resetCapsuleGame" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO">
UPDATE GC_BENEFIT_CPSLMKN_STTUS
SET
PROGRS_AT = 'N',
UPDT_DT = NOW()
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
AND PROGRS_AT = 'Y' -- 진행 중인 게임만
AND BNF_STTUS_INNB = #{bnfSttusInnb} -- 정확한 게임 식별
AND ( -- 완료되지 않은 게임만 리셋 가능
PROGRS_STEP &lt; 5
OR TOT_USE_LEAF_CNT &lt; (
SELECT RWD_CND_CNT
FROM GC_BENEFIT_REWARD
WHERE BNF_INNB = #{bnfInnb}
)
)
</update>
<!-- 초록잎을 받을 수 있는 이벤트 목록 조회 -->
<select id="selectLeafEventList" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
MAX(b.BNF_INNB) AS BNF_INNB, -- 혜택 설정 고유번호 (최신)
b.BNF_DV_CD, -- 혜택 구분 코드
b.SOPMAL_CD, -- 쇼핑몰 코드
MAX(cp.PYMNT_CNT) AS PYMNT_CNT, -- 지급 초록잎 개수
MAX(cp.SPECIAL_AT) AS SPECIAL_AT, -- 스페셜 여부 (Y/N)
MAX(m.MENU_SJ_1) AS BNF_SJ, -- 메뉴 제목 1
MAX(m.MENU_SJ_2) AS MENU_SJ_2, -- 메뉴 제목 2
MAX(m.SORT_ORDR) AS SORT_ORDR -- 정렬순서
FROM
GC_BENEFIT b
INNER JOIN
GC_BENEFIT_CPSLMKN cp ON b.BNF_DV_CD = cp.BNF_DV_CD AND b.SOPMAL_CD = cp.SOPMAL_CD
LEFT JOIN
GC_BENEFIT_MANAGE_MENU m ON b.BNF_DV_CD = m.BNF_DV_CD AND b.SOPMAL_CD = m.SOPMAL_CD
WHERE
b.SOPMAL_CD = #{sopmalCd}
AND (b.BNF_DV_CD = '120' OR b.USE_AT = 'Y') -- 관심분야설정은 USE_AT 체크 제외
AND cp.INDICT_AT = 'Y'
AND (b.BNF_DV_CD = '120' OR (b.BNF_BGN_DT &lt;= NOW() AND b.BNF_END_DT &gt;= NOW())) -- 관심분야설정은 기간 체크 제외
AND (m.INDICT_AT IS NULL OR m.INDICT_AT = 'Y')
GROUP BY
b.BNF_DV_CD, b.SOPMAL_CD -- BNF_DV_CD 기준으로만 그룹핑
ORDER BY
MAX(cp.SPECIAL_AT) DESC, -- 스페셜 이벤트를 먼저 표시
MAX(m.SORT_ORDR) ASC, -- 메뉴 정렬순서 적용
MAX(b.BNF_INNB) -- 그 다음 일반 순서대로
</select>
<!-- 초록잎 이벤트 총 지급 개수 조회 -->
<select id="selectTotalLeafEventPaymentCount" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="int">
SELECT
COALESCE(SUM(cp.PYMNT_CNT), 0) AS totalPaymentCount
FROM
GC_BENEFIT b
INNER JOIN
GC_BENEFIT_CONTENT c ON b.BNF_INNB = c.BNF_INNB
INNER JOIN
GC_BENEFIT_CPSLMKN cp ON b.BNF_DV_CD = cp.BNF_DV_CD AND b.SOPMAL_CD = cp.SOPMAL_CD
WHERE
b.SOPMAL_CD = #{sopmalCd}
AND b.USE_AT = 'Y'
AND cp.INDICT_AT = 'Y'
AND b.BNF_BGN_DT &lt;= NOW() AND b.BNF_END_DT &gt;= NOW()
</select>
<!-- 캡슐 게임 완료 처리 전용 메소드 -->
<update id="completeGame" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO">
UPDATE GC_BENEFIT_CPSLMKN_STTUS
SET
PROGRS_AT = 'N', -- 완료 상태로 변경
PROGRS_STEP = 5, -- 완료 단계로 명시적 설정
UPDT_DT = NOW()
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
AND PROGRS_AT = 'Y' -- 진행 중인 게임만
AND BNF_STTUS_INNB = #{bnfSttusInnb} -- 정확한 게임 식별
AND PROGRS_STEP &gt;= 5 -- 5단계 이상
AND TOT_USE_LEAF_CNT &gt;= ( -- 필요한 초록잎을 모두 사용한 경우만
SELECT RWD_CND_CNT
FROM GC_BENEFIT_REWARD
WHERE BNF_INNB = #{bnfInnb}
)
</update>
<!-- 완료된 게임 확인 (새 게임 시작 가능 여부 판단용) -->
<select id="checkCompletedGame" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
gbcs.BNF_STTUS_INNB,
gbcs.PROGRS_AT,
gbcs.BNF_INNB,
gbcs.PROGRS_STEP,
gbcs.TOT_USE_LEAF_CNT,
gbcs.REGIST_DT
FROM
GC_BENEFIT gb
LEFT JOIN
GC_BENEFIT_CPSLMKN_STTUS gbcs ON gb.BNF_INNB = gbcs.BNF_INNB
WHERE
gbcs.MBR_INNB = #{mbrInnb}
AND gbcs.MBR_DV_CD = #{mbrDvCd}
AND gb.SOPMAL_CD = #{sopmalCd}
AND gb.USE_AT = 'Y'
AND gb.BNF_DV_CD = '050' -- 캡슐만들기 혜택
ORDER BY gbcs.REGIST_DT DESC
LIMIT 1
</select>
</mapper>

View File

@@ -0,0 +1,129 @@
<?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.wb.domainserver.domain.gcone.bnft.discshar.mapper.BODiscsharMapper">
<!-- 할인소식 공유 혜택 정보 조회 -->
<select id="selectDiscsharBenefitInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.discshar.vo.BODiscsharVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
b.BNF_INNB, -- 혜택 설정 고유번호
b.SOPMAL_CD, -- 쇼핑몰코드
b.BNF_DV_CD, -- 혜택 구분 코드
b.BNF_SJ, -- 혜택 제목
b.BNF_BGN_DT, -- 진행기간 시작일시
b.BNF_END_DT, -- 진행기간 종료일시
b.SCR_REPRSNT_IMG, -- 화면 대표 이미지
b.SCR_REPRSNT_LINK_URL, -- 화면 대표 링크 URL
b.BNF_WORDS_CN, -- 혜택 안내
c.CN_SJ, -- 내용 제목 (상품명)
c.CN_DC, -- 내용 설명
c.LINK_URL, -- 링크 (구매 링크)
c.IMG_FIL_COURS, -- 이미지파일경로
c.IMG_FIL_NM, -- 이미지파일명
c.VALID_DT, -- 유효일시 (할인 유효기간)
c.TME_SECND, -- 시간(초)
c.DSCNT_UNIT_DV_CD, -- 할인구분코드
c.DSCNT_AMT, -- 할인금액
c.DSCNT_RT, -- 할인율
r.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
r.MLG_RWD_AMT -- 마일리지정보
FROM
GC_BENEFIT b
LEFT JOIN GC_BENEFIT_CONTENT c ON b.BNF_INNB = c.BNF_INNB
LEFT JOIN GC_BENEFIT_REWARD r ON b.BNF_INNB = r.BNF_INNB
WHERE
b.BNF_DV_CD = '080' -- 할인소식 공유 혜택 구분 코드
AND b.USE_AT = 'Y'
ORDER BY
c.VALID_DT ASC -- 유효일시 기준 오름차순 정렬
]]>
</select>
<!-- 할인소식 공유 혜택 참여 정보 삽입 -->
<insert id="insertDiscsharBenefitParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.discshar.vo.BODiscsharVO">
<selectKey keyProperty="bnfPrtInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_PARTCPTN
(
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_INNB, -- 혜택 설정 고유번호
BNF_PRT_DT, -- 혜택 참여일시
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
REGUSR, -- 등록자
REGIST_DT -- 등록일시
)
VALUES
(
#{bnfPrtInnb},
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
#{mbrInnb},
NOW()
)
]]>
</insert>
<!-- 할인소식 공유 마일리지 적립 정보 삽입 -->
<insert id="insertDiscsharMileageAccumulation" parameterType="com.wb.domainserver.domain.gcone.bnft.discshar.vo.BODiscsharVO">
<![CDATA[
INSERT INTO GC_BENEFIT_RECEIPT
(
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
REGUSR, -- 등록자
REGIST_DT -- 등록일시
)
VALUES
(
(SELECT BNF_PRT_INNB FROM GC_BENEFIT_PARTCPTN WHERE BNF_INNB = #{bnfInnb} AND MBR_INNB = #{mbrInnb} ORDER BY BNF_PRT_DT DESC LIMIT 1),
'08010', -- 할인소식공유 보상 코드
'010', -- 마일리지 보상 상품 코드
(SELECT MLG_RWD_AMT FROM fm_benefit_reward WHERE BNF_INNB = #{bnfInnb} AND BNF_RWD_CATE_DV_CD = '08010'),
#{mbrInnb},
NOW()
)
]]>
</insert>
<!-- 할인소식 공유 마일리지 적립 여부 확인 -->
<select id="checkMileageAccumulation" parameterType="com.wb.domainserver.domain.gcone.bnft.discshar.vo.BODiscsharVO" resultType="int">
<![CDATA[
SELECT
COUNT(*) -- 적립 건수
FROM
GC_BENEFIT_RECEIPT r
JOIN
GC_BENEFIT_PARTCPTN p ON r.BNF_PRT_INNB = p.BNF_PRT_INNB
WHERE
p.BNF_INNB = #{bnfInnb} -- 혜택 설정 고유번호
AND
p.MBR_INNB = #{mbrInnb} -- 회원 고유번호
]]>
</select>
<!-- 할인소식 공유 링크 정보 조회 -->
<select id="getDiscsharLinkInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.discshar.vo.BODiscsharVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
b.BNF_INNB, -- 혜택 설정 고유번호
b.SCR_REPRSNT_LINK_URL, -- 화면 대표 링크 URL
c.LINK_URL, -- 상품 구매 링크
c.VALID_DT -- 유효일시 (할인 유효기간)
FROM
GC_BENEFIT b
JOIN
GC_BENEFIT_CONTENT c ON b.BNF_INNB = c.BNF_INNB
WHERE
b.BNF_INNB = #{bnfInnb}
AND b.USE_AT = 'Y'
AND b.BNF_DV_CD = '080' -- 할인소식 공유 혜택 구분 코드
]]>
</select>
</mapper>

View File

@@ -0,0 +1,175 @@
<?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.wb.domainserver.domain.gcone.bnft.evntview.mapper.BOEvntViewMapper">
<!-- 이벤트 보기 혜택 기본 정보 및 보상 정보 통합 조회 -->
<select id="selectEventViewBenefitInfoAndContent" parameterType="com.wb.domainserver.domain.gcone.bnft.evntview.vo.BOEvntViewVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
a.BNF_INNB, -- 혜택 설정 고유번호
b.CN_DC AS EVENT_DESC, -- 내용 설명
DATE_FORMAT(b.CN_BGN_DT, '%Y-%m-%d %H:%i:%s') AS CN_BGN_DT, -- 시작일시
DATE_FORMAT(b.CN_END_DT, '%Y-%m-%d %H:%i:%s') AS CN_END_DT, -- 종료일시
b.WORDS_CN AS EVENT_DETAIL, -- 안내내용
b.IMG_FIL_COURS AS EVENT_IMG_PATH, -- 이미지파일경로
b.IMG_FIL_NM AS EVENT_IMG_NAME, -- 이미지파일명
b.TME_SECND AS LOADING_TIME, -- 시간(초)
b.LINK_URL AS EVENT_LINK_URL, -- 링크
b.CN_SJ AS EVENT_LINK_TITLE, -- 내용 제목
b.CN_DC AS EVENT_LINK_DESC, -- 내용 설명
-- 보상 정보 추가
r.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
r.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
r.MLG_RWD_AMT, -- 마일리지 금액
r.COUPON_INNB, -- 쿠폰고유번호
r.ITM_NM, -- 표시명
CASE
WHEN EXISTS (
SELECT 1
FROM GC_BENEFIT_RECEIPT rcpt
JOIN GC_BENEFIT_PARTCPTN p ON rcpt.BNF_PRT_INNB = p.BNF_PRT_INNB
WHERE p.BNF_INNB = a.BNF_INNB
AND p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
) THEN 'Y'
ELSE 'N'
END AS ACCUMULATED_YN -- 적립 완료 여부
FROM
GC_BENEFIT a -- 혜택 기본 정보 테이블
LEFT JOIN
GC_BENEFIT_CONTENT b ON a.BNF_INNB = b.BNF_INNB -- 혜택 내용설정 정보 테이블
LEFT JOIN
GC_BENEFIT_REWARD r ON a.BNF_INNB = r.BNF_INNB
AND r.BNF_RWD_CATE_DV_CD = '06010' /* 이벤트보기 보상 코드 */
WHERE
a.BNF_DV_CD = '060' /* 이벤트보기 혜택 코드 */
AND a.USE_AT = 'Y' -- 사용여부
AND NOW() BETWEEN b.CN_BGN_DT AND b.CN_END_DT -- gc_benefit_content 테이블의 기간으로 변경
AND a.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
<if test="bnfInnb != null">
AND a.BNF_INNB = #{bnfInnb} -- 특정 혜택 번호 조건
</if>
ORDER BY
a.REGIST_DT DESC -- 등록일시 기준 내림차순 정렬
</select>
<!-- 이벤트 보기 안내문 조회 -->
<select id="selectEventViewInstruction" parameterType="com.wb.domainserver.domain.gcone.bnft.evntview.vo.BOEvntViewVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
WORDS_CN_2 AS WORDS_CN
FROM
GC_BENEFIT_GDCC
WHERE
BNF_DV_CD = 060
AND SOPMAL_CD = #{sopmalCd}
</select>
<!-- 초록잎 지급량 조회 -->
<select id="selectLeafCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PYMNT_CNT, -- 지급 초록잎 개수
SPECIAL_CNT -- 스페셜 지급 초록잎 개수
FROM
GC_BENEFIT_CPSLMKN
WHERE
BNF_DV_CD = '060' -- 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!-- 이벤트 보기 혜택 참여 정보 삽입 -->
<insert id="insertEventViewBenefitParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.evntview.vo.BOEvntViewVO">
<selectKey keyProperty="bnfPrtInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN
</selectKey>
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_PRT_INNB, -- 혜택 참여 고유 번호
BNF_INNB, -- 혜택 설정 고유번호
BNF_PRT_DT, -- 혜택 참여일시
MBR_INNB, -- 회원고유번호
MBR_DV_CD, -- 회원구분코드
PRT_LEAF_CNT, -- 참여 초록잎 개수 추가
REGUSR, -- 등록자
REGIST_DT -- 등록일시
) VALUES (
#{bnfPrtInnb},
#{bnfInnb}, -- 혜택 설정 고유번호 파라미터
NOW(), -- 현재 시간
#{mbrInnb}, -- 회원고유번호 파라미터
#{mbrDvCd}, -- 회원구분코드 파라미터
#{paidLeafCnt}, -- 초록잎 개수 파라미터 추가
#{regusr}, -- 등록자 파라미터
NOW() -- 현재 시간
)
</insert>
<!-- 이벤트 보기 혜택 보상 정보 조회 -->
<select id="selectEventViewBenefitRewards" parameterType="com.wb.domainserver.domain.gcone.bnft.evntview.vo.BOEvntViewVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
r.BNF_INNB, -- 혜택 설정 고유번호
r.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
r.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
r.MLG_RWD_AMT, -- 마일리지 금액
r.COUPON_INNB, -- 쿠폰고유번호
r.ITM_NM -- 표시명
FROM
GC_BENEFIT_REWARD r -- 혜택 보상설정 정보 테이블
JOIN
GC_BENEFIT b ON r.BNF_INNB = b.BNF_INNB -- 혜택 기본 정보 테이블과 조인 추가
WHERE
r.BNF_INNB = #{bnfInnb} -- 특정 혜택 번호 조건
AND r.BNF_RWD_CATE_DV_CD = '06010' /* 이벤트보기 보상 코드 */
AND b.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 조건 추가
</select>
<!-- 이벤트 보기 마일리지 적립 여부 확인 -->
<select id="checkMileageAccumulation" parameterType="com.wb.domainserver.domain.gcone.bnft.evntview.vo.BOEvntViewVO" resultType="int">
SELECT
COUNT(1) -- 행 수 카운트
FROM
GC_BENEFIT_RECEIPT r -- 혜택 보상수령 내역 테이블
JOIN
GC_BENEFIT_PARTCPTN p ON r.BNF_PRT_INNB = p.BNF_PRT_INNB -- 혜택 참여 정보 테이블
WHERE
p.BNF_INNB = #{bnfInnb} -- 특정 혜택 번호 조건
AND p.MBR_INNB = #{mbrInnb} -- 회원 고유번호 조건
AND p.MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드 조건
AND r.BNF_RWD_CATE_DV_CD = '06010' -- 이벤트보기 보상 코드
</select>
<!-- 이벤트 보기 마일리지 적립 정보 삽입 -->
<insert id="insertEventViewMileageAccumulation" parameterType="com.wb.domainserver.domain.gcone.bnft.evntview.vo.BOEvntViewVO">
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
REGUSR, -- 등록자
REGIST_DT -- 등록일시
) VALUES (
#{bnfPrtInnb}, -- 혜택 참여 고유번호 파라미터
'06010', /* 이벤트보기 보상 코드 */
'010', -- 보상 상품 구분 코드
#{mlgRwdAmt}, -- 마일리지 금액 파라미터
#{regusr}, -- 등록자 파라미터
NOW() -- 현재 시간
)
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
<!-- 이벤트 유효성 검증 (날짜 체크) -->
<select id="checkEventValidation" parameterType="com.wb.domainserver.domain.gcone.bnft.evntview.vo.BOEvntViewVO" resultType="int">
SELECT
COUNT(1) -- 유효한 이벤트 수
FROM
GC_BENEFIT a -- 혜택 기본 정보 테이블
JOIN
GC_BENEFIT_CONTENT b ON a.BNF_INNB = b.BNF_INNB -- 혜택 내용설정 정보 테이블
WHERE
a.BNF_INNB = #{bnfInnb} -- 특정 혜택 번호 조건
AND a.BNF_DV_CD = '060' /* 이벤트보기 혜택 코드 */
AND a.USE_AT = 'Y' -- 사용여부
AND NOW() BETWEEN b.CN_BGN_DT AND b.CN_END_DT -- gc_benefit_content 테이블의 기간으로 변경
AND a.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
</mapper>

View File

@@ -0,0 +1,292 @@
<?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.wb.domainserver.domain.gcone.bnft.hlthset.mapper.BOHlthsetMapper">
<!-- 관심건강분야 설정 기본 정보 조회 -->
<select id="selectHealthInterestBasicInfo" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
b.BNF_INNB,
r.MLG_RWD_AMT, -- 관심분야 리워드
b.BNF_WORDS_CN, -- 관심분야 안내문구
COALESCE(a.AGRE_AT, 'N') AS AGRE_AT -- 정보받기 동의 여부 (기본값: N)
FROM
GC_BENEFIT b
JOIN GC_BENEFIT_REWARD r ON b.BNF_INNB = r.BNF_INNB
AND r.BNF_RWD_CATE_DV_CD = '12010'
AND r.BNF_RWD_GODS_DV_CD = '010'
LEFT JOIN GC_BENEFIT_AGREE a ON b.BNF_INNB = a.BNF_INNB
AND a.SOPMAL_CD = #{sopmalCd}
AND a.MBR_INNB = #{mbrInnb}
AND a.MBR_DV_CD = #{mbrDvCd}
AND a.BNF_DV_CD = '120'
AND a.BNF_AGRE_DV_CD = '010'
WHERE
b.BNF_DV_CD = '120'
AND b.SOPMAL_CD = #{sopmalCd}
</select>
<!-- 관심분야 목록 조회 -->
<select id="selectInterestAreas"
parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
i.BNF_INTRST_INNB, -- 관심분야 ID
i.INTRST_NM, -- 관심분야명
i.BFE_IMG_FIL_COURS, -- 관심분야 이미지 경로
CASE WHEN pi.CHOISE_AT = 'Y' THEN 'Y' ELSE 'N' END AS CHOISE_AT -- 선택여부
FROM
GC_BENEFIT_INTEREST i
LEFT JOIN GC_BENEFIT_PARTCPTN_INTEREST pi
ON i.BNF_INTRST_INNB = pi.BNF_INTRST_INNB
AND pi.BNF_PRT_INNB = (
SELECT BNF_PRT_INNB
FROM GC_BENEFIT_PARTCPTN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
ORDER BY BNF_PRT_DT DESC
LIMIT 1
)
WHERE
i.BNF_INNB = #{bnfInnb}
AND i.USE_AT = 'Y'
ORDER BY
i.SORT_ORDR
</select>
<!-- 사용자 기존 관심분야 삭제 -->
<delete id="deleteUserInterestAreas" parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO">
<![CDATA[
DELETE FROM GC_BENEFIT_PARTCPTN_INTEREST
WHERE BNF_PRT_INNB = (
SELECT BNF_PRT_INNB
FROM GC_BENEFIT_PARTCPTN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
ORDER BY BNF_PRT_DT DESC
LIMIT 1
)
]]>
</delete>
<!-- 새로운 사용자 관심분야 저장 -->
<insert id="insertUserInterestAreas" parameterType="java.util.List">
<![CDATA[
INSERT INTO GC_BENEFIT_PARTCPTN_INTEREST (
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_INTRST_INNB, -- 혜택 관심분야 고유번호
CHOISE_AT -- 선택여부
) VALUES
]]>
<foreach collection="list" item="item" separator=",">
(
#{item.bnfPrtInnb},
#{item.bnfIntrstInnb},
'Y'
)
</foreach>
</insert>
<!-- 초록잎 지급 개수 조회 -->
<select id="selectLeafCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PYMNT_CNT, -- 지급 초록잎 개수
SPECIAL_CNT -- 스페셜 지급 초록잎 개수
FROM
GC_BENEFIT_CPSLMKN
WHERE
BNF_DV_CD = '120' -- 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!-- 혜택 참여 정보 삽입 (gc_benefit_partcptn) -->
<insert id="insertBenefitParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO">
<selectKey keyProperty="bnfPrtInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_INNB, -- 혜택 설정 고유번호
BNF_PRT_DT, -- 혜택 참여일시
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
PRT_LEAF_CNT, -- 참여 초록잎 개수
REGUSR, -- 등록자
REGIST_DT -- 등록일시
) VALUES (
#{bnfPrtInnb},
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
#{paidLeafCnt},
#{regusr},
NOW()
)
]]>
</insert>
<!-- 사용자 관심분야 정보 수신 동의 저장 (insert 또는 update) -->
<insert id="insertUserInterestAgreement" parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO">
<![CDATA[
INSERT INTO GC_BENEFIT_AGREE (
SOPMAL_CD, -- 쇼핑몰 코드 (예: NC, DT)
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드 (예: GC, DT)
BNF_DV_CD, -- 혜택 구분 코드
BNF_AGRE_DV_CD, -- 혜택 동의 구분 코드 (예: '010' : 알림동의)
BNF_INNB, -- 혜택 설정 고유번호
AGRE_AT, -- 동의 여부 (Y/N)
REGUSR, -- 등록자
REGIST_DT -- 등록일시
) VALUES (
#{sopmalCd},
#{mbrInnb},
#{mbrDvCd},
'120',
'010',
#{bnfInnb},
#{agreAt},
#{regusr},
NOW()
)
ON DUPLICATE KEY UPDATE
AGRE_AT = VALUES(AGRE_AT),
REGUSR = VALUES(REGUSR),
REGIST_DT = NOW()
]]>
</insert>
<!-- 마일리지 적립 내역 저장 -->
<insert id="insertMileageReward" parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_RCV_INNB, -- 혜택 보상수령 고유번호
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{bnfRcvInnb},
#{bnfPrtInnb},
'12010', -- 관심건강분야 보상 코드
'010', -- 보상상품 마일리지 코드
#{mlgRwdAmt},
#{regusr},
NOW()
)
]]>
</insert>
<!-- 사용자 관심분야 조회 -->
<select id="selectUserInterests" parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
i.BNF_INTRST_INNB,
i.INTRST_NM
FROM
GC_BENEFIT_PARTCPTN_INTEREST pi
JOIN
GC_BENEFIT_INTEREST i ON pi.BNF_INTRST_INNB = i.BNF_INTRST_INNB
WHERE
pi.BNF_PRT_INNB = (
SELECT BNF_PRT_INNB
FROM GC_BENEFIT_PARTCPTN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
ORDER BY BNF_PRT_DT DESC
LIMIT 1
)
]]>
</select>
<!-- 해당 월에 마일리지 보상을 받았는지 확인 (수정된 버전) -->
<select id="hasMonthlyMileageReward" parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO" resultType="boolean">
<![CDATA[
SELECT EXISTS (
SELECT 1
FROM GC_BENEFIT_RECEIPT r
JOIN GC_BENEFIT_PARTCPTN p ON r.BNF_PRT_INNB = p.BNF_PRT_INNB
WHERE p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.BNF_INNB = #{bnfInnb}
AND r.BNF_RWD_CATE_DV_CD = '12010' -- 관심건강분야 보상 코드
AND DATE_FORMAT(r.REGIST_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')
)
]]>
</select>
<!-- 사용자 관심분야 저장 상태 및 마일리지 적립 여부 조회 (수정된 버전) -->
<select id="selectUserInterestSaveStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
CASE WHEN COUNT(DISTINCT pi.BNF_INTRST_INNB) > 0 THEN 'Y' ELSE 'N' END AS saved_yn,
CASE WHEN SUM(r.MLG_RWD_AMT) > 0 THEN 'Y' ELSE 'N' END AS mileage_accumulated_yn,
COALESCE(SUM(r.MLG_RWD_AMT), 0) AS MLG_RWD_AMT
FROM
GC_BENEFIT_PARTCPTN p
LEFT JOIN GC_BENEFIT_PARTCPTN_INTEREST pi ON p.BNF_PRT_INNB = pi.BNF_PRT_INNB
LEFT JOIN GC_BENEFIT_RECEIPT r ON p.BNF_PRT_INNB = r.BNF_PRT_INNB
AND r.BNF_RWD_CATE_DV_CD = '12010'
AND DATE_FORMAT(r.REGIST_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')
WHERE
p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.BNF_INNB = #{bnfInnb}
AND DATE_FORMAT(p.BNF_PRT_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')
]]>
</select>
<!-- 마지막 관심분야 참여 월 조회 -->
<select id="selectLastInterestParticipationMonth" parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT DATE_FORMAT(MAX(BNF_PRT_DT), '%Y-%m') AS last_month
FROM GC_BENEFIT_PARTCPTN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
AND EXISTS (
SELECT 1
FROM GC_BENEFIT_PARTCPTN_INTEREST pi
WHERE pi.BNF_PRT_INNB = GC_BENEFIT_PARTCPTN.BNF_PRT_INNB
)
]]>
</select>
<!-- 월별 관심분야 초기화 (관심분야 데이터만 삭제) -->
<delete id="resetMonthlyInterestAreas" parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO">
<![CDATA[
DELETE pi FROM GC_BENEFIT_PARTCPTN_INTEREST pi
JOIN GC_BENEFIT_PARTCPTN p ON pi.BNF_PRT_INNB = p.BNF_PRT_INNB
WHERE p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.BNF_INNB = #{bnfInnb}
AND DATE_FORMAT(p.BNF_PRT_DT, '%Y-%m') < DATE_FORMAT(NOW(), '%Y-%m')
]]>
</delete>
<!-- 현재 월 참여 정보 조회 -->
<select id="selectCurrentMonthParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_PRT_INNB,
BNF_PRT_DT
FROM GC_BENEFIT_PARTCPTN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
AND DATE_FORMAT(BNF_PRT_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')
ORDER BY BNF_PRT_DT DESC
LIMIT 1
]]>
</select>
</mapper>

View File

@@ -0,0 +1,950 @@
<?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.wb.domainserver.domain.gcone.bnft.intakchl.mapper.BOIntakchlMapper">
<!-- 혜택 화면 설정 정보 조회 -->
<select id="selectIntakchlScreenInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_INNB, -- 혜택 고유 번호
SCR_REPRSNT_IMG, -- 화면 대표 이미지 경로
SCR_REPRSNT_LINK_URL, -- 화면 대표 이미지 링크 URL
SCR_RWD_IMG, -- 보상 이미지 경로
SCR_RWD_LINK_URL, -- 보상 이미지 링크 URL
BNF_WORDS_CN -- 혜택 안내 문구
FROM
GC_BENEFIT
WHERE
BNF_DV_CD = '100' -- 출석체크 혜택 구분 코드
AND USE_AT = 'Y'
AND SOPMAL_CD = #{sopmalCd}
ORDER BY
BNF_INNB -- 혜택 고유 번호로 정렬
]]>
</select>
<!-- 선택된 제품 추가 -->
<insert id="insertSelectedProducts" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
INSERT INTO GC_BENEFIT_NTKCHL (
BNF_INNB,
MBR_INNB,
MBR_DV_CD,
GOODS_INNB,
SOPMAL_CD,
BNF_NTK_STTUS_DV_CD,
NTK_CNT,
DEL_AT,
REGUSR,
REGIST_DT
)
VALUES
<foreach collection="products" item="product" separator=",">
(
#{bnfInnb},
#{mbrInnb},
#{mbrDvCd},
#{product.goodsInnb},
#{sopmalCd},
'010', -- 섭취중 상태
0,
'N',
#{regusr},
NOW()
)
</foreach>
</insert>
<!-- 선택한 날짜의 전체 섭취 기록 및 총 섭취율 조회 -->
<select id="selectDailyTotalIntakeRecord" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
COALESCE(total_actual, 0) AS TOTAL_ACTUAL_INTAKE, -- 실제 섭취 횟수 합계
COALESCE(total_target, 0) AS TOTAL_TARGET_INTAKE, -- 목표 섭취 횟수 합계
COALESCE(
CASE
WHEN total_target = 0 THEN 0
ELSE ROUND(total_actual * 100.0 / total_target)
END,
0
) AS OVERALL_INTAKE_RATE_PERCENTAGE -- 전체 섭취율 백분율 (NULL 방지)
FROM (
SELECT
SUM(actual_count) AS total_actual, -- 실제 섭취 횟수 합계
SUM(NTK_CNT) AS total_target -- 목표 섭취 횟수 합계
FROM (
SELECT
n.BNF_NTK_INNB, -- 혜택 섭취챌린지 고유번호
n.NTK_CNT, -- 목표 섭취 횟수
COUNT(p.BNF_PRT_INNB) AS actual_count -- 실제 섭취 횟수
FROM GC_BENEFIT_NTKCHL n
LEFT JOIN GC_BENEFIT_PARTCPTN_NTKCHL nt
ON n.BNF_NTK_INNB = nt.BNF_NTK_INNB
LEFT JOIN GC_BENEFIT_PARTCPTN p
ON nt.BNF_PRT_INNB = p.BNF_PRT_INNB
AND DATE(p.BNF_PRT_DT) = replace(#{selectedDate}, '-', '') -- 날짜 필터링
WHERE n.DEL_AT = 'N' -- 삭제되지 않은 데이터만 조회
AND n.MBR_INNB = #{mbrInnb} -- 회원 고유번호 필터링 추가
AND n.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 필터링 추가
AND n.BNF_NTK_STTUS_DV_CD = '010' -- 섭취중 상태만 조회
AND (#{bnfInnb} IS NULL OR n.BNF_INNB = #{bnfInnb}) -- 혜택 설정 고유번호 필터링 추가
AND DATE(n.REGIST_DT) <= replace(#{selectedDate}, '-', '') -- 제품 등록일이 선택된 날짜 이전이거나 같은 경우만
GROUP BY n.BNF_NTK_INNB, n.NTK_CNT
) AS product_intake -- 제품별 섭취 정보
) AS totals
]]>
</select>
<!-- 선택한 날짜의 섭취 기록 상세 조회 (제품별) -->
<select id="selectDailyIntakeRecordsDetail" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
n.BNF_NTK_INNB, -- 혜택 섭취챌린지 고유번호
n.GOODS_INNB, -- 상품 고유번호
n.NTK_CNT AS target_intake_count, -- 목표 섭취 횟수
COUNT(p.BNF_PRT_INNB) AS today_intake_count, -- 오늘 실제 섭취 횟수
CASE
WHEN COUNT(p.BNF_PRT_INNB) >= n.NTK_CNT THEN 'Y'
ELSE 'N'
END AS goal_achieved -- 목표 달성 여부 ('Y': 달성, 'N': 미달성)
FROM GC_BENEFIT_NTKCHL n
LEFT JOIN GC_BENEFIT_PARTCPTN_NTKCHL nt ON n.BNF_NTK_INNB = nt.BNF_NTK_INNB
LEFT JOIN GC_BENEFIT_PARTCPTN p ON nt.BNF_PRT_INNB = p.BNF_PRT_INNB
AND DATE(p.BNF_PRT_DT) = #{selectedDate}
WHERE n.DEL_AT = 'N'
AND n.MBR_INNB = #{mbrInnb}
AND n.MBR_DV_CD = #{mbrDvCd}
AND (#{bnfInnb} IS NULL OR n.BNF_INNB = #{bnfInnb})
AND n.SOPMAL_CD = #{sopmalCd}
AND n.BNF_NTK_STTUS_DV_CD = '010' -- 섭취중 상태만 조회 (추가)
GROUP BY n.BNF_NTK_INNB, n.GOODS_INNB, n.NTK_CNT
ORDER BY n.BNF_NTK_INNB
]]>
</select>
<!-- 초록잎 지급 개수 조회 -->
<select id="selectLeafCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PYMNT_CNT, -- 지급 초록잎 개수
SPECIAL_CNT -- 스페셜 지급 초록잎 개수
FROM
GC_BENEFIT_CPSLMKN
WHERE
BNF_DV_CD = '100' -- 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!-- 마일리지 보상 금액 조회 -->
<select id="getMileageRewardAmount" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="java.lang.Double">
SELECT CAST(MLG_RWD_AMT AS DECIMAL(12,2)) -- 마일리지 금액
FROM GC_BENEFIT_REWARD
WHERE BNF_INNB = #{bnfInnb} -- 혜택 설정 고유번호
AND BNF_RWD_CATE_DV_CD = '10010' -- 보상 항목 구분 코드 (섭취챌린지 1일 보상)
AND BNF_RWD_GODS_DV_CD = '010' -- 보상 상품 구분 코드 (마일리지)
</select>
<!-- 오늘 이미 마일리지를 적립했는지 확인 -->
<select id="checkMileageAlreadyAwarded" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="boolean">
SELECT EXISTS (
SELECT 1
FROM GC_BENEFIT_RECEIPT r
JOIN GC_BENEFIT_PARTCPTN p ON r.BNF_PRT_INNB = p.BNF_PRT_INNB
WHERE p.BNF_INNB = #{bnfInnb} -- 혜택 설정 고유번호
AND p.MBR_INNB = #{mbrInnb} -- 회원 고유번호
AND p.MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드 추가
AND DATE(p.BNF_PRT_DT) = CURDATE() -- 혜택 참여 일시
AND r.BNF_RWD_CATE_DV_CD = '10010' -- 보상 항목 구분 코드 (섭취챌린지 1일 보상)
)
</select>
<!-- 일일 섭취 목표 달성 여부 확인 -->
<select id="checkDailyGoalAchievement" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="boolean">
SELECT
CASE
WHEN COALESCE(SUM(daily_actual), 0) &gt;= COALESCE(SUM(daily_target), 0)
AND COALESCE(SUM(daily_target), 0) &gt; 0 THEN true
ELSE false
END AS goal_achieved
FROM (
SELECT
n.BNF_NTK_INNB,
n.NTK_CNT AS daily_target,
COUNT(p.BNF_PRT_INNB) AS daily_actual
FROM GC_BENEFIT_NTKCHL n
LEFT JOIN GC_BENEFIT_PARTCPTN_NTKCHL nt ON n.BNF_NTK_INNB = nt.BNF_NTK_INNB
LEFT JOIN GC_BENEFIT_PARTCPTN p ON nt.BNF_PRT_INNB = p.BNF_PRT_INNB
AND DATE(p.BNF_PRT_DT) = CURDATE()
WHERE n.BNF_INNB = #{bnfInnb}
AND n.MBR_INNB = #{mbrInnb}
AND n.MBR_DV_CD = #{mbrDvCd}
AND n.SOPMAL_CD = #{sopmalCd}
AND n.BNF_NTK_STTUS_DV_CD = '010' -- 섭취중 상태만
AND n.DEL_AT = 'N'
GROUP BY n.BNF_NTK_INNB, n.NTK_CNT
) AS intake_summary
</select>
<!-- 마일리지 적립 처리 -->
<insert id="awardIntakeChallengesMileage" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_RCV_INNB, -- 혜택 보상수령 고유번호
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
REGUSR, -- 등록자
REGIST_DT -- 등록일시
)
SELECT
#{bnfRcvInnb},
(SELECT MAX(BNF_PRT_INNB)
FROM GC_BENEFIT_PARTCPTN
WHERE BNF_INNB = #{bnfInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND DATE(BNF_PRT_DT) = CURDATE()
),
'10010', -- 섭취챌린지 1일 보상 코드
'010', -- 마일리지 보상 상품 코드
#{mlgRwdAmt},
#{mbrInnb},
NOW()
WHERE NOT EXISTS (
SELECT 1
FROM GC_BENEFIT_RECEIPT r
JOIN GC_BENEFIT_PARTCPTN p ON r.BNF_PRT_INNB = p.BNF_PRT_INNB
WHERE p.BNF_INNB = #{bnfInnb}
AND p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND DATE(p.BNF_PRT_DT) = CURDATE()
AND r.BNF_RWD_CATE_DV_CD = '10010'
)
</insert>
<!-- 날짜별 상태 정보 조회 -->
<select id="selectStatsDateClasses" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
WITH RECURSIVE DateRange AS (
-- 날짜 범위 생성 (최근 30일)
SELECT DATE_SUB(CURDATE(), INTERVAL 29 DAY) AS date
UNION ALL
SELECT DATE_ADD(date, INTERVAL 1 DAY)
FROM DateRange
WHERE date < CURDATE()
),
DailyIntakeStatus AS (
SELECT
DATE(p.BNF_PRT_DT) AS participation_date,
n.BNF_NTK_INNB,
n.NTK_CNT AS target_count,
COUNT(pn.BNF_PRT_NTK_INNB) AS actual_count,
CASE
WHEN COUNT(pn.BNF_PRT_NTK_INNB) >= n.NTK_CNT THEN 'DONE'
WHEN COUNT(pn.BNF_PRT_NTK_INNB) > 0 THEN 'ING'
ELSE 'NONE'
END AS daily_status
FROM GC_BENEFIT_NTKCHL n
LEFT JOIN GC_BENEFIT_PARTCPTN_NTKCHL pn ON n.BNF_NTK_INNB = pn.BNF_NTK_INNB
LEFT JOIN GC_BENEFIT_PARTCPTN p ON pn.BNF_PRT_INNB = p.BNF_PRT_INNB
WHERE n.MBR_INNB = #{mbrInnb}
AND n.MBR_DV_CD = #{mbrDvCd}
AND n.BNF_INNB = #{bnfInnb}
AND n.SOPMAL_CD = #{sopmalCd}
AND n.DEL_AT = 'N'
AND n.BNF_NTK_STTUS_DV_CD = '010' -- 섭취중 상태만
AND p.BNF_PRT_DT >= DATE_SUB(CURDATE(), INTERVAL 29 DAY)
GROUP BY DATE(p.BNF_PRT_DT), n.BNF_NTK_INNB, n.NTK_CNT
),
ConsecutiveStatus AS (
SELECT
participation_date,
COUNT(CASE WHEN daily_status = 'DONE' THEN 1 END) AS done_count,
COUNT(CASE WHEN daily_status = 'ING' THEN 1 END) AS ing_count,
ROW_NUMBER() OVER (ORDER BY participation_date DESC) AS days_ago
FROM DailyIntakeStatus
GROUP BY participation_date
),
ConsecutiveDays AS (
SELECT
participation_date,
done_count,
ing_count,
@consecutive := CASE
WHEN done_count > 0 THEN @consecutive + 1
ELSE 0
END AS consecutive_days
FROM ConsecutiveStatus
CROSS JOIN (SELECT @consecutive := 0) AS vars
ORDER BY participation_date
)
SELECT
dr.date,
COALESCE(cs.done_count, 0) AS done_count,
COALESCE(cs.ing_count, 0) AS ing_count,
CASE
WHEN COALESCE(cs.done_count, 0) > 0 THEN 'stats_done'
WHEN COALESCE(cs.ing_count, 0) > 0 THEN 'stats_ing'
ELSE ''
END AS stats_done,
CASE
WHEN COALESCE(cs.done_count, 0) > 0 THEN 'stats_done'
WHEN COALESCE(cs.ing_count, 0) > 0 THEN 'stats_ing'
ELSE ''
END AS stats_ing,
CASE
WHEN cd.consecutive_days >= 30 THEN 'stats_30done'
ELSE ''
END AS stats_30done
FROM DateRange dr
LEFT JOIN ConsecutiveStatus cs ON dr.date = cs.participation_date
LEFT JOIN ConsecutiveDays cd ON dr.date = cd.participation_date
ORDER BY dr.date DESC
]]>
</select>
<!-- 현재 챌린지 중인 제품을 조회-->
<select id="selectCurrentChallengeProducts" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
n.BNF_NTK_INNB, -- 혜택 섭취챌린지 고유번호
n.BNF_INNB, -- 혜택 설정 고유번호
n.MBR_INNB, -- 회원 고유번호
n.GOODS_INNB AS productId,-- 상품 고유번호
g.GOODS_NM AS productName,-- 상품명
FN_GET_GOODS_IMAGE(g.SOPMAL_CD, g.GOODS_INNB, '03') AS imageUrl, -- 상품 썸네일 이미지
n.NTK_CNT AS dailyIntakeCount, -- 1일 섭취 횟수
n.BNF_NTK_STTUS_DV_CD, -- 섭취상태 구분코드 (010: 섭취중, 020: 일시중단, 030: 종료)
n.MEMO, -- 메모
n.REGIST_DT, -- 등록일시
(
SELECT COUNT(pn.BNF_PRT_NTK_INNB)
FROM GC_BENEFIT_PARTCPTN_NTKCHL pn
JOIN GC_BENEFIT_PARTCPTN p ON pn.BNF_PRT_INNB = p.BNF_PRT_INNB
WHERE pn.BNF_NTK_INNB = n.BNF_NTK_INNB
AND DATE(p.BNF_PRT_DT) = CASE
WHEN #{selectedDate} IS NOT NULL THEN #{selectedDate}
ELSE CURDATE()
END
) AS todayIntakeCount -- 오늘 섭취 횟수
FROM
GC_BENEFIT_NTKCHL n
LEFT JOIN
GC_GOODS g ON n.GOODS_INNB = g.GOODS_INNB AND n.SOPMAL_CD = g.SOPMAL_CD
WHERE
n.MBR_INNB = #{mbrInnb} -- 회원 고유번호
AND n.MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드 추가
AND (#{bnfInnb} IS NULL OR n.BNF_INNB = #{bnfInnb}) -- 혜택 설정 고유번호
AND n.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 필터링 추가
AND n.BNF_NTK_STTUS_DV_CD = '010' -- 섭취중 상태
AND n.DEL_AT = 'N' -- 삭제되지 않은 데이터
AND (#{selectedDate} IS NULL OR DATE(n.REGIST_DT) <= #{selectedDate}) -- 제품 등록일이 선택된 날짜 이전이거나 같은 경우만
ORDER BY
n.REGIST_DT DESC -- 등록일시 기준 내림차순 정렬
]]>
</select>
<!-- 섭취챌린지 제품 상세 정보 조회 -->
<select id="selectIntakeChallengeProductDetail" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
n.BNF_NTK_INNB, -- 혜택 섭취챌린지 고유번호
n.BNF_INNB, -- 혜택 설정 고유번호
n.MBR_INNB, -- 회원 고유번호
n.GOODS_INNB, -- 상품 고유번호
g.GOODS_NM, -- 상품명
FN_GET_GOODS_IMAGE(g.SOPMAL_CD, g.GOODS_INNB, '03') AS thumbnail, -- 상품 썸네일 이미지
n.NTK_CNT, -- 목표 섭취 횟수
n.BNF_NTK_STTUS_DV_CD, -- 섭취상태 구분코드 (010: 섭취중, 020: 일시중단, 030: 종료)
CASE
WHEN n.BNF_NTK_STTUS_DV_CD = '010' THEN '섭취중'
WHEN n.BNF_NTK_STTUS_DV_CD = '020' THEN '일시중단'
WHEN n.BNF_NTK_STTUS_DV_CD = '030' THEN '종료'
ELSE ''
END AS status_name, -- 섭취상태 이름
n.MEMO, -- 메모
g.SRT_DC AS intake_instructions, -- 섭취방법 (간략설명)
n.REGIST_DT AS start_date, -- 섭취 시작일자 추가
(
SELECT GROUP_CONCAT(
JSON_OBJECT(
'id', c.CTGRY_ID,
'name', c.CTGRY_NM
)
)
FROM GC_CATEGORY_LINK cl
JOIN GC_CATEGORY c ON cl.CTGRY_ID = c.CTGRY_ID AND cl.SOPMAL_CD = c.SOPMAL_CD
WHERE cl.GOODS_INNB = n.GOODS_INNB
AND cl.SOPMAL_CD = n.SOPMAL_CD
) AS categories -- 카테고리 정보 (JSON 형식)
FROM
GC_BENEFIT_NTKCHL n
JOIN
GC_GOODS g ON n.GOODS_INNB = g.GOODS_INNB AND n.SOPMAL_CD = g.SOPMAL_CD
WHERE
n.BNF_NTK_INNB = #{bnfNtkInnb}
AND n.MBR_INNB = #{mbrInnb}
AND n.MBR_DV_CD = #{mbrDvCd}
AND n.DEL_AT = 'N'
]]>
</select>
<!-- 일일 섭취 횟수 및 메모 업데이트 -->
<insert id="upsertIntakeChallengeInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
INSERT INTO GC_BENEFIT_NTKCHL (
BNF_NTK_INNB,
BNF_INNB,
MBR_INNB,
MBR_DV_CD,
GOODS_INNB,
SOPMAL_CD,
BNF_NTK_STTUS_DV_CD,
NTK_CNT,
MEMO,
DEL_AT,
REGUSR,
REGIST_DT
) VALUES (
#{bnfNtkInnb},
#{bnfInnb},
#{mbrInnb},
#{mbrDvCd},
#{goodsInnb},
#{sopmalCd},
#{bnfNtkSttusDvCd},
#{ntkCnt},
#{memo},
'N',
#{regusr},
NOW()
)
ON DUPLICATE KEY UPDATE
NTK_CNT = #{ntkCnt},
MEMO = #{memo},
BNF_NTK_STTUS_DV_CD = #{bnfNtkSttusDvCd},
UPDUSR = #{mbrInnb},
UPDT_DT = NOW()
</insert>
<!-- 섭취챌린지 제품 삭제 (논리적 삭제) -->
<update id="deleteIntakeChallengeProduct" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
UPDATE GC_BENEFIT_NTKCHL
SET
DEL_AT = 'Y', -- 삭제 여부를 'Y'로 설정
UPDUSR = #{mbrInnb}, -- 수정자 (회원 고유번호)
UPDT_DT = NOW() -- 수정일시
WHERE
BNF_NTK_INNB = #{bnfNtkInnb} -- 혜택 섭취챌린지 고유번호
AND MBR_INNB = #{mbrInnb} -- 회원 고유번호
AND MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드 추가
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 필터링 추가
AND DEL_AT = 'N' -- 현재 삭제되지 않은 상태인 경우에만 업데이트
</update>
<!-- 모든 상태의 섭취챌린지 제품 목록 조회 (완료여부 Y/N 포함) -->
<select id="selectAllIntakeChallengeProducts" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
WITH ProductConsecutiveDays AS (
SELECT
n.BNF_NTK_INNB,
n.GOODS_INNB,
MAX(consecutive_days) as max_consecutive_days
FROM GC_BENEFIT_NTKCHL n
LEFT JOIN (
SELECT
pn.BNF_NTK_INNB,
MAX(consec.consecutive_days) as consecutive_days
FROM GC_BENEFIT_PARTCPTN_NTKCHL pn
JOIN GC_BENEFIT_PARTCPTN p ON pn.BNF_PRT_INNB = p.BNF_PRT_INNB
JOIN (
SELECT
pn2.BNF_NTK_INNB,
DATE(p2.BNF_PRT_DT) as participation_date,
@consecutive := CASE
WHEN @prev_date = DATE_SUB(DATE(p2.BNF_PRT_DT), INTERVAL 1 DAY)
AND @prev_product = pn2.BNF_NTK_INNB
THEN @consecutive + 1
ELSE 1
END as consecutive_days,
@prev_date := DATE(p2.BNF_PRT_DT),
@prev_product := pn2.BNF_NTK_INNB
FROM GC_BENEFIT_PARTCPTN_NTKCHL pn2
JOIN GC_BENEFIT_PARTCPTN p2 ON pn2.BNF_PRT_INNB = p2.BNF_PRT_INNB
CROSS JOIN (SELECT @consecutive := 0, @prev_date := '', @prev_product := 0) as vars
ORDER BY pn2.BNF_NTK_INNB, DATE(p2.BNF_PRT_DT)
) consec ON pn.BNF_NTK_INNB = consec.BNF_NTK_INNB
GROUP BY pn.BNF_NTK_INNB
) consecutive_data ON n.BNF_NTK_INNB = consecutive_data.BNF_NTK_INNB
WHERE n.MBR_INNB = #{mbrInnb}
AND n.MBR_DV_CD = #{mbrDvCd}
AND (#{bnfInnb} IS NULL OR n.BNF_INNB = #{bnfInnb})
AND n.SOPMAL_CD = #{sopmalCd}
AND n.DEL_AT = 'N'
GROUP BY n.BNF_NTK_INNB, n.GOODS_INNB
)
SELECT
n.BNF_NTK_INNB, -- 혜택 섭취챌린지 고유번호
n.BNF_INNB, -- 혜택 설정 고유번호
n.MBR_INNB, -- 회원 고유번호
n.GOODS_INNB AS productId, -- 상품 고유번호
g.GOODS_NM AS productName, -- 상품명
FN_GET_GOODS_IMAGE(g.SOPMAL_CD, g.GOODS_INNB, '03') AS imageUrl, -- 상품 썸네일 이미지
n.NTK_CNT AS dailyIntakeCount, -- 1일 섭취 횟수
n.BNF_NTK_STTUS_DV_CD, -- 원본 섭취상태 구분코드
CASE
WHEN n.BNF_NTK_STTUS_DV_CD = '010' THEN 'ACTIVE' -- 섭취중
ELSE 'INACTIVE' -- 기타(일시중단, 종료)
END AS challengeStatus, -- 새로운 챌린지 상태
CASE
WHEN COALESCE(pcd.max_consecutive_days, 0) >= 30 THEN 'Y' -- 30일 완료
ELSE 'N'
END AS isCompleted, -- 30일 완료 여부 (Y/N)
CASE
WHEN COALESCE(pcd.max_consecutive_days, 0) >= 30 THEN '완료'
WHEN n.BNF_NTK_STTUS_DV_CD = '010' THEN '섭취중'
WHEN n.BNF_NTK_STTUS_DV_CD = '020' THEN '일시중단'
WHEN n.BNF_NTK_STTUS_DV_CD = '030' THEN '종료'
ELSE ''
END AS statusName, -- 새로운 상태 이름
n.REGIST_DT AS addedDate, -- 챌린지 추가일
COALESCE(pcd.max_consecutive_days, 0) AS maxConsecutiveDays -- 최대 연속 일수
FROM
GC_BENEFIT_NTKCHL n
LEFT JOIN
GC_GOODS g ON n.GOODS_INNB = g.GOODS_INNB AND n.SOPMAL_CD = g.SOPMAL_CD
LEFT JOIN
ProductConsecutiveDays pcd ON n.BNF_NTK_INNB = pcd.BNF_NTK_INNB
WHERE
n.MBR_INNB = #{mbrInnb} -- 회원 고유번호
AND n.MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드 추가
AND (#{bnfInnb} IS NULL OR n.BNF_INNB = #{bnfInnb}) -- 혜택 설정 고유번호
AND n.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 필터링
AND n.DEL_AT = 'N' -- 삭제되지 않은 데이터
ORDER BY
n.REGIST_DT DESC -- 등록일시 기준 내림차순 정렬(최근 추가순)
]]>
</select>
<!-- 섭취챌린지 전체 현황 조회 (전체, 섭취중, 완료로 분류) -->
<select id="selectIntakeChallengeCount" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
WITH ProductConsecutiveDays AS (
SELECT
n.BNF_NTK_INNB,
n.BNF_NTK_STTUS_DV_CD,
MAX(consecutive_days) as max_consecutive_days
FROM GC_BENEFIT_NTKCHL n
LEFT JOIN (
SELECT
pn.BNF_NTK_INNB,
MAX(consec.consecutive_days) as consecutive_days
FROM GC_BENEFIT_PARTCPTN_NTKCHL pn
JOIN GC_BENEFIT_PARTCPTN p ON pn.BNF_PRT_INNB = p.BNF_PRT_INNB
JOIN (
SELECT
pn2.BNF_NTK_INNB,
DATE(p2.BNF_PRT_DT) as participation_date,
@consecutive := CASE
WHEN @prev_date = DATE_SUB(DATE(p2.BNF_PRT_DT), INTERVAL 1 DAY)
AND @prev_product = pn2.BNF_NTK_INNB
THEN @consecutive + 1
ELSE 1
END as consecutive_days,
@prev_date := DATE(p2.BNF_PRT_DT),
@prev_product := pn2.BNF_NTK_INNB
FROM GC_BENEFIT_PARTCPTN_NTKCHL pn2
JOIN GC_BENEFIT_PARTCPTN p2 ON pn2.BNF_PRT_INNB = p2.BNF_PRT_INNB
CROSS JOIN (SELECT @consecutive := 0, @prev_date := '', @prev_product := 0) as vars
ORDER BY pn2.BNF_NTK_INNB, DATE(p2.BNF_PRT_DT)
) consec ON pn.BNF_NTK_INNB = consec.BNF_NTK_INNB
GROUP BY pn.BNF_NTK_INNB
) consecutive_data ON n.BNF_NTK_INNB = consecutive_data.BNF_NTK_INNB
WHERE n.MBR_INNB = #{mbrInnb}
AND n.MBR_DV_CD = #{mbrDvCd}
AND (#{bnfInnb} IS NULL OR n.BNF_INNB = #{bnfInnb})
AND n.SOPMAL_CD = #{sopmalCd}
AND n.DEL_AT = 'N'
GROUP BY n.BNF_NTK_INNB, n.BNF_NTK_STTUS_DV_CD
)
SELECT
COUNT(*) AS totalCount, -- 전체 제품 수
SUM(CASE
WHEN COALESCE(max_consecutive_days, 0) >= 30 THEN 0 -- 완료된 제품은 섭취중에서 제외
WHEN BNF_NTK_STTUS_DV_CD = '010' THEN 1
ELSE 0
END) AS activeCount, -- 섭취중인 제품 수 (완료 제외)
SUM(CASE
WHEN COALESCE(max_consecutive_days, 0) >= 30 THEN 1
ELSE 0
END) AS completedCount -- 30일 완료한 제품 수
FROM
ProductConsecutiveDays
]]>
</select>
<!-- 누적 보상 정보 조회 -->
<select id="selectCumulativeRewards" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
SUM(CASE WHEN r.BNF_RWD_CATE_DV_CD = '10010' THEN r.MLG_RWD_AMT ELSE 0 END) AS dailyRewardTotal,
SUM(CASE WHEN r.BNF_RWD_CATE_DV_CD = '10020' THEN r.MLG_RWD_AMT ELSE 0 END) AS consecutiveRewardTotal,
COUNT(CASE WHEN r.BNF_RWD_CATE_DV_CD = '10020' AND r.BNF_RWD_GODS_DV_CD = '020' THEN r.COUPON_INNB ELSE NULL END) AS couponCount
FROM
GC_BENEFIT_RECEIPT rec
JOIN
GC_BENEFIT_PARTCPTN p ON rec.BNF_PRT_INNB = p.BNF_PRT_INNB
JOIN
GC_BENEFIT_REWARD r ON p.BNF_INNB = r.BNF_INNB AND rec.BNF_RWD_CATE_DV_CD = r.BNF_RWD_CATE_DV_CD
WHERE
p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.BNF_INNB = #{bnfInnb}
</select>
<!-- 연속 성공 기간 조회 -->
<select id="selectConsecutiveSuccessDays" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
WITH DateRange AS (
SELECT
ADDDATE('1970-01-01', t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) as date
FROM
(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t0,
(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t1,
(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t2,
(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t3,
(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t4
WHERE
ADDDATE('1970-01-01', t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) BETWEEN
(SELECT MIN(REGIST_DT) FROM GC_BENEFIT_NTKCHL WHERE MBR_INNB = #{mbrInnb} AND MBR_DV_CD = #{mbrDvCd} AND BNF_INNB = #{bnfInnb} AND SOPMAL_CD = #{sopmalCd} AND DEL_AT = 'N')
AND CURDATE()
),
SuccessDates AS (
SELECT DISTINCT DATE(p.BNF_PRT_DT) as success_date
FROM GC_BENEFIT_PARTCPTN p
WHERE p.MBR_INNB = #{mbrInnb} AND p.MBR_DV_CD = #{mbrDvCd} AND p.BNF_INNB = #{bnfInnb}
),
DateStatus AS (
SELECT
d.date,
CASE WHEN s.success_date IS NOT NULL THEN 1 ELSE 0 END as is_success,
CASE WHEN @consec := IF(s.success_date IS NOT NULL, @consec + 1, 0) THEN @consec ELSE 0 END as consecutive_count
FROM
DateRange d
LEFT JOIN
SuccessDates s ON d.date = s.success_date
CROSS JOIN
(SELECT @consec := 0) as vars
ORDER BY
d.date
),
ConsecutiveGroups AS (
SELECT
date,
consecutive_count,
@group_id := IF(consecutive_count = 0, @group_id + 1, @group_id) as group_id
FROM
DateStatus
CROSS JOIN
(SELECT @group_id := 0) as vars
ORDER BY
date
),
ConsecutivePeriods AS (
SELECT
group_id,
MIN(date) as start_date,
MAX(date) as end_date,
MAX(consecutive_count) as consecutive_days
FROM
ConsecutiveGroups
WHERE
consecutive_count > 0
GROUP BY
group_id
)
SELECT
start_date,
end_date,
consecutive_days,
CASE WHEN end_date = CURDATE() THEN 'Y' ELSE 'N' END as is_today_completion,
CASE WHEN consecutive_days >= 30 THEN 'Y' ELSE 'N' END as is_30days_completed,
CASE
WHEN consecutive_days >= 30 THEN CEILING(consecutive_days / 30)
ELSE 0
END as completed_cycles,
CASE
WHEN consecutive_days >= 30 THEN consecutive_days % 30
ELSE consecutive_days
END as current_cycle_days
FROM
ConsecutivePeriods
WHERE
(end_date = CURDATE() OR CURDATE() BETWEEN start_date AND end_date)
ORDER BY
end_date DESC
LIMIT 1
]]>
</select>
<!-- 현재 챌린지 상태 종합 정보 조회 -->
<select id="selectChallengeStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
CASE
WHEN EXISTS (
SELECT 1 FROM GC_BENEFIT_NTKCHL
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
AND SOPMAL_CD = #{sopmalCd}
AND BNF_NTK_STTUS_DV_CD = '020'
AND DEL_AT = 'N'
) THEN '020' -- 중단 상태
WHEN EXISTS (
SELECT 1 FROM GC_BENEFIT_PARTCPTN p
JOIN GC_BENEFIT_NTKCHL n ON p.MBR_INNB = n.MBR_INNB AND p.BNF_INNB = n.BNF_INNB
WHERE p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.BNF_INNB = #{bnfInnb}
AND DATE(p.BNF_PRT_DT) = CURDATE()
AND n.BNF_NTK_STTUS_DV_CD = '010'
AND n.MBR_DV_CD = #{mbrDvCd}
AND n.SOPMAL_CD = #{sopmalCd}
AND n.DEL_AT = 'N'
) THEN '100' -- 오늘 성공
ELSE '010' -- 진행중
END as challenge_status,
(
SELECT COUNT(DISTINCT DATE(BNF_PRT_DT))
FROM GC_BENEFIT_PARTCPTN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
) as total_success_days,
(
SELECT DATEDIFF(CURDATE(), MIN(REGIST_DT)) + 1
FROM GC_BENEFIT_NTKCHL
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
AND SOPMAL_CD = #{sopmalCd}
AND BNF_NTK_STTUS_DV_CD = '010'
AND DEL_AT = 'N'
) as total_challenge_days
FROM dual
</select>
<!-- 섭취챌린지 알림설정 조회 -->
<select id="selectIntakeChallengeNotifications" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
BNF_NTK_NTCN_INNB, -- 혜택 섭취챌린지 알림 고유번호
NULL AS BNF_NTK_INNB, -- 혜택 섭취챌린지 고유번호
NTCN_TME, -- 알림 시간
USE_AT, -- 사용 여부
REGIST_DT -- 등록일시
FROM
GC_BENEFIT_NTKCHL_NTCN
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
ORDER BY
NTCN_TME ASC
</select>
<!-- 기본 알림 설정 생성 쿼리 (신규 사용자) -->
<insert id="insertDefaultNotificationTimes" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
INSERT INTO GC_BENEFIT_NTKCHL_NTCN (
BNF_INNB,
MBR_INNB,
MBR_DV_CD,
NTCN_TME,
USE_AT,
REGUSR,
REGIST_DT
)
SELECT
#{bnfInnb}, #{mbrInnb}, #{mbrDvCd}, '07:00:00', 'N', #{regusr}, NOW()
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM GC_BENEFIT_NTKCHL_NTCN
WHERE MBR_INNB = #{mbrInnb} AND BNF_INNB = #{bnfInnb} AND MBR_DV_CD = #{mbrDvCd} AND NTCN_TME = '07:00:00'
)
UNION ALL
SELECT
#{bnfInnb}, #{mbrInnb}, #{mbrDvCd}, '12:00:00', 'N', #{regusr}, NOW()
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM GC_BENEFIT_NTKCHL_NTCN
WHERE MBR_INNB = #{mbrInnb} AND BNF_INNB = #{bnfInnb} AND MBR_DV_CD = #{mbrDvCd} AND NTCN_TME = '12:00:00'
)
UNION ALL
SELECT
#{bnfInnb}, #{mbrInnb}, #{mbrDvCd}, '19:00:00', 'N', #{regusr}, NOW()
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM GC_BENEFIT_NTKCHL_NTCN
WHERE MBR_INNB = #{mbrInnb} AND BNF_INNB = #{bnfInnb} AND MBR_DV_CD = #{mbrDvCd} AND NTCN_TME = '19:00:00'
)
</insert>
<!-- 섭취시간 알림 설정 업데이트 -->
<update id="updateIntakeChallengeNotification" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
UPDATE GC_BENEFIT_NTKCHL_NTCN
SET
NTCN_TME = #{ntcnTme},
USE_AT = #{useAt}
WHERE
BNF_NTK_NTCN_INNB = #{bnfNtkNtcnInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
</update>
<!-- 섭취챌린지 미완료 알림 설정 조회 -->
<select id="selectIntakeChallengeIncompleteNotification" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
ps.BNF_PUSH_EVT_SETUP_INNB,
ps.PUSH_SJ,
ps.PUSH_CN,
ps.USE_AT
FROM
GC_BENEFIT_PUSH_EVT_SETUP ps
WHERE
ps.BNF_PUSH_CND_DV_CD = '10020' -- 섭취챌린지 미완료시
AND ps.SOPMAL_CD = #{sopmalCd}
</select>
<!-- 미완료 알림 설정 업데이트 -->
<update id="updateIntakeChallengeIncompleteNotification" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
UPDATE GC_BENEFIT_PUSH_EVT_SETUP
SET
USE_AT = #{useAt}
WHERE
BNF_PUSH_EVT_SETUP_INNB = #{bnfPushEvtSetupInnb}
AND BNF_PUSH_CND_DV_CD = '10020' -- 섭취챌린지 미완료시
AND SOPMAL_CD = #{sopmalCd}
</update>
<!-- 섭취챌린지 알림설정 조회 -->
<select id="checkUserNotificationSettings" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="boolean">
SELECT EXISTS (
SELECT 1
FROM GC_BENEFIT_NTKCHL_NTCN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
)
</select>
<!-- 특정 유저의 모든 알림 설정 삭제 -->
<delete id="deleteAllNotifications" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
DELETE FROM GC_BENEFIT_NTKCHL_NTCN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
</delete>
<!-- 특정 알림 설정 삭제 -->
<delete id="deleteNotification" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
DELETE FROM GC_BENEFIT_NTKCHL_NTCN
WHERE BNF_NTK_NTCN_INNB = #{bnfNtkNtcnInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
</delete>
<!-- 오늘 참여기록 확인 -->
<select id="selectTodayParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
BNF_PRT_INNB,
PRT_LEAF_CNT,
BNF_PRT_DT
FROM GC_BENEFIT_PARTCPTN
WHERE BNF_INNB = #{bnfInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND DATE(BNF_PRT_DT) = CURDATE()
</select>
<!-- 오늘 참여기록 생성 (첫 참여시에만) -->
<insert id="insertTodayParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
<selectKey keyProperty="bnfPrtInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN
</selectKey>
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_PRT_INNB,
BNF_INNB,
MBR_INNB,
MBR_DV_CD,
BNF_PRT_DT,
REGUSR,
REGIST_DT
) VALUES (
#{bnfPrtInnb},
#{bnfInnb},
#{mbrInnb},
#{mbrDvCd},
NOW(),
#{regusr},
NOW()
)
</insert>
<!-- 개별 섭취 기록 추가 -->
<insert id="insertIntakeRecord" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
<selectKey keyProperty="bnfPrtNtkInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_NTK_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN_NTKCHL
</selectKey>
INSERT INTO GC_BENEFIT_PARTCPTN_NTKCHL (
BNF_PRT_NTK_INNB,
BNF_PRT_INNB,
BNF_NTK_INNB
) VALUES (
#{bnfPrtNtkInnb},
#{bnfPrtInnb},
#{bnfNtkInnb}
)
</insert>
<!-- 오늘 보상 지급 여부 확인 -->
<select id="checkTodayRewardAwarded" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="boolean">
SELECT EXISTS (
SELECT 1
FROM GC_BENEFIT_PARTCPTN
WHERE BNF_INNB = #{bnfInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND DATE(BNF_PRT_DT) = CURDATE()
AND (PRT_LEAF_CNT IS NOT NULL AND PRT_LEAF_CNT > 0)
)
</select>
<!-- 오늘 보상 업데이트 (마일리지 + 초록잎) -->
<update id="updateTodayRewards" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
UPDATE GC_BENEFIT_PARTCPTN
SET PRT_LEAF_CNT = #{paidLeafCnt},
UPDUSR = #{updusr},
UPDT_DT = NOW()
WHERE BNF_INNB = #{bnfInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND DATE(BNF_PRT_DT) = CURDATE()
</update>
<!-- 초록잎 지급 여부 확인 -->
<select id="checkLeafAlreadyAwarded" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="boolean">
SELECT EXISTS (
SELECT 1
FROM GC_BENEFIT_PARTCPTN p
WHERE p.BNF_INNB = #{bnfInnb}
AND p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND DATE(p.BNF_PRT_DT) = CURDATE()
AND p.PRT_LEAF_CNT IS NOT NULL
AND p.PRT_LEAF_CNT &gt; 0
)
</select>
</mapper>

View File

@@ -0,0 +1,250 @@
<?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.wb.domainserver.domain.gcone.bnft.lucklott.mapper.BOLucklottMapper">
<!-- 행운복권 혜택 기본 정보 조회 -->
<select id="selectLucklottBenefitInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_INNB, -- 혜택 설정 고유번호
USE_AT, -- 사용여부
SOPMAL_CD, -- 쇼핑몰코드
BNF_DV_CD, -- 혜택 구분 코드
BNF_SJ, -- 혜택 제목
SCR_REPRSNT_IMG, -- 화면 대표 이미지
SCR_REPRSNT_LINK_URL, -- 화면 대표 링크 URL
SCR_RWD_IMG, -- 화면 보상 이미지
SCR_RWD_LINK_URL, -- 화면 보상 링크 URL
BNF_BGN_DT, -- 진행기간 시작일시
BNF_END_DT, -- 진행기간 종료일시
BNF_WORDS_CN -- 혜택 안내
FROM
GC_BENEFIT
WHERE
BNF_DV_CD = '030' -- 행운복권 혜택 구분 코드 (문자열로 수정)
AND USE_AT = 'Y'
AND SOPMAL_CD = #{sopmalCd}
AND DATE(NOW()) BETWEEN DATE(BNF_BGN_DT) AND DATE(BNF_END_DT)
ORDER BY BNF_INNB DESC
]]>
</select>
<!-- 행운복권 혜택 보상 및 쿠폰 정보 조회 -->
<select id="selectLucklottBenefitRewardsAndCoupons" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
R.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
R.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
R.ITM_NM, -- 표시명
R.MLG_RWD_AMT, -- 마일리지 보상 금액
C.COUP_NM, -- 쿠폰명
C.COUPON_DC -- 쿠폰설명
FROM
GC_BENEFIT B
LEFT JOIN GC_BENEFIT_REWARD R ON B.BNF_INNB = R.BNF_INNB
LEFT JOIN GC_COUPON C ON R.COUPON_INNB = C.COUPON_INNB
AND C.USE_AT = 'Y'
WHERE
B.BNF_DV_CD = '030' -- 행운복권 혜택 구분 코드
AND B.USE_AT = 'Y'
AND B.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 조건 추가
]]>
</select>
<!-- 행운복권 혜택 보상 정보 조회 -->
<select id="selectLucklottBenefitRewards" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
R.BNF_INNB, -- 혜택 설정 고유번호
R.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
R.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
R.MLG_RWD_AMT, -- 마일리지 금액
R.COUPON_INNB, -- 쿠폰 고유번호
R.ITM_NM, -- 표시명
R.PRZWIN_QY, -- 당첨수량
R.PRZWIN_PRC, -- 당첨확률
R.DSCNT_AMT, -- 할인금액
C.COUP_NM, -- 쿠폰명
C.COUPON_DC -- 쿠폰설명
FROM
GC_BENEFIT_REWARD R
LEFT JOIN GC_COUPON C ON R.COUPON_INNB = C.COUPON_INNB
AND C.USE_AT = 'Y'
WHERE
R.BNF_INNB = #{bnfInnb} -- 혜택 설정 고유번호 조건
AND R.PRZWIN_QY > 0 -- 수량이 있는 경우만
ORDER BY R.BNF_RWD_CATE_DV_CD ASC -- 등수 순서대로 정렬 (03010, 03020, 03030, 03040)
]]>
</select>
<!-- 오늘 참여 횟수 조회 -->
<select id="selectTodayParticipationCount" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO" resultType="int">
<![CDATA[
SELECT IFNULL(COUNT(*), 0)
FROM GC_BENEFIT_PARTCPTN
WHERE BNF_INNB = #{bnfInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND DATE(BNF_PRT_DT) = CURDATE()
]]>
</select>
<!-- 초록잎 지급 개수 조회 -->
<select id="selectLeafCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PYMNT_CNT, -- 지급 초록잎 개수
SPECIAL_CNT -- 스페셜 지급 초록잎 개수
FROM
GC_BENEFIT_CPSLMKN
WHERE
BNF_DV_CD = '030' -- 혜택 구분 코드 (행운복권)
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!-- 행운복권 혜택 참여 정보 삽입 (초록잎 적립 포함) -->
<insert id="insertLucklottBenefitParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO">
<selectKey keyProperty="bnfPrtInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_PARTCPTN
(
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_INNB, -- 혜택 설정 고유번호
BNF_PRT_DT, -- 혜택 참여일시
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
PRT_LEAF_CNT, -- 참여 초록잎 개수 (추가)
REGUSR, -- 등록자
REGIST_DT -- 등록일시
)
VALUES
(
#{bnfPrtInnb},
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
#{paidLeafCnt}, -- 초록잎 지급량
#{regusr},
NOW()
)
]]>
</insert>
<!-- 행운복권 혜택 보상 수령 정보 삽입 -->
<insert id="insertLucklottBenefitReceipt" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
COUPON_INNB, -- 쿠폰고유번호
GOODS_INNB, -- 상품고유번호
REGUSR, -- 등록자
REGIST_DT -- 등록일시
) VALUES (
#{bnfPrtInnb}, -- 혜택 참여 고유번호 (파라미터)
#{bnfRwdCateDvCd}, -- 보상 항목 구분 코드 (파라미터)
#{bnfRwdGodsDvCd}, -- 보상 상품 구분 코드 (파라미터)
#{mlgRwdAmt}, -- 마일리지 금액 (파라미터, 해당 없으면 NULL)
#{couponInnb}, -- 쿠폰고유번호 (파라미터, 해당 없으면 NULL)
#{goodsInnb}, -- 상품고유번호 (파라미터, 해당 없으면 NULL)
#{regUsr}, -- 등록자 번호 (파라미터)
NOW() -- 현재 시간
)
]]>
</insert>
<!-- 특정 상품의 당첨된 수량 조회 -->
<select id="selectIssuedGoodsQuantity" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO" resultType="int">
<![CDATA[
SELECT
COUNT(brec.BNF_RCV_INNB) AS issuedGoodsQuantity -- 당첨된 수량
FROM
GC_BENEFIT_REWARD br -- 혜택 보상설정 정보 테이블
LEFT JOIN
GC_BENEFIT_PARTCPTN bp ON br.BNF_INNB = bp.BNF_INNB -- 혜택 참여 정보 테이블과 조인
LEFT JOIN
GC_BENEFIT_RECEIPT brec ON bp.BNF_PRT_INNB = brec.BNF_PRT_INNB -- 혜택 보상수령 내역 테이블과 조인
AND br.BNF_RWD_CATE_DV_CD = brec.BNF_RWD_CATE_DV_CD
AND br.BNF_RWD_GODS_DV_CD = brec.BNF_RWD_GODS_DV_CD
WHERE
br.BNF_INNB = #{bnfInnb} -- 특정 혜택 설정 번호 선택
AND br.BNF_RWD_CATE_DV_CD = #{bnfRwdCateDvCd} -- 특정 보상 항목 구분 코드 선택
AND br.BNF_RWD_GODS_DV_CD = #{bnfRwdGodsDvCd} -- 특정 보상 상품 구분 코드 선택
GROUP BY
br.BNF_INNB, br.BNF_RWD_CATE_DV_CD, br.BNF_RWD_GODS_DV_CD, br.ITM_NM
]]>
</select>
<!-- 특정 상품의 남은 수량 조회 -->
<select id="selectRemainingGoodsQuantity" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO" resultType="int">
<![CDATA[
SELECT
br.PRZWIN_QY - COALESCE(COUNT(brec.BNF_RCV_INNB), 0) AS remainingGoodsQuantity -- 남은 당첨 수량
FROM
GC_BENEFIT_REWARD br -- 혜택 보상설정 정보 테이블
LEFT JOIN
GC_BENEFIT_PARTCPTN bp ON br.BNF_INNB = bp.BNF_INNB -- 혜택 참여 정보 테이블과 조인
LEFT JOIN
GC_BENEFIT_RECEIPT brec ON bp.BNF_PRT_INNB = brec.BNF_PRT_INNB -- 혜택 보상수령 내역 테이블과 조인
AND br.BNF_RWD_CATE_DV_CD = brec.BNF_RWD_CATE_DV_CD
AND br.BNF_RWD_GODS_DV_CD = brec.BNF_RWD_GODS_DV_CD
WHERE
br.BNF_INNB = #{bnfInnb} -- 특정 혜택 설정 번호
AND br.BNF_RWD_CATE_DV_CD = #{bnfRwdCateDvCd} -- 특정 보상 항목 구분 코드로 검색
GROUP BY
br.BNF_INNB, br.BNF_RWD_CATE_DV_CD, br.BNF_RWD_GODS_DV_CD, br.ITM_NM, br.PRZWIN_QY -- 그룹화 기준
ORDER BY
br.BNF_INNB, br.BNF_RWD_CATE_DV_CD, br.BNF_RWD_GODS_DV_CD -- 정렬 기준
]]>
</select>
<!-- 모든 등수 상품의 수량 체크 -->
<select id="selectAllRewardsQuantityStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
br.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
br.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
br.ITM_NM, -- 상품명
br.PRZWIN_QY, -- 총 당첨수량
COALESCE(COUNT(brec.BNF_RCV_INNB), 0) AS issuedQuantity, -- 지급된 수량
br.PRZWIN_QY - COALESCE(COUNT(brec.BNF_RCV_INNB), 0) AS remainingQuantity, -- 남은 수량
CASE
WHEN br.PRZWIN_QY - COALESCE(COUNT(brec.BNF_RCV_INNB), 0) > 0 THEN 'Y'
ELSE 'N'
END AS hasStock -- 재고 여부
FROM
GC_BENEFIT_REWARD br
LEFT JOIN GC_BENEFIT_PARTCPTN bp ON br.BNF_INNB = bp.BNF_INNB
LEFT JOIN GC_BENEFIT_RECEIPT brec ON bp.BNF_PRT_INNB = brec.BNF_PRT_INNB
AND br.BNF_RWD_CATE_DV_CD = brec.BNF_RWD_CATE_DV_CD
AND br.BNF_RWD_GODS_DV_CD = brec.BNF_RWD_GODS_DV_CD
WHERE
br.BNF_INNB = #{bnfInnb}
GROUP BY
br.BNF_RWD_CATE_DV_CD, br.BNF_RWD_GODS_DV_CD, br.ITM_NM, br.PRZWIN_QY
ORDER BY
br.BNF_RWD_CATE_DV_CD
]]>
</select>
<!-- 보상 수량 감소 쿼리 제거 -->
<!--
<update id="updateRewardQuantity" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO">
<![CDATA[
UPDATE GC_BENEFIT_REWARD
SET PRZWIN_QY = PRZWIN_QY - 1
WHERE BNF_INNB = #{bnfInnb}
AND BNF_RWD_CATE_DV_CD = #{bnfRwdCateDvCd}
AND BNF_RWD_GODS_DV_CD = #{bnfRwdGodsDvCd}
AND PRZWIN_QY > 0
]]>
</update>
-->
</mapper>

View File

@@ -0,0 +1,224 @@
<?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.wb.domainserver.domain.gcone.bnft.lvshop.mapper.BOLvshopMapper">
<!-- 현재 진행중인 라이브 쇼핑 정보 조회 -->
<select id="selectCurrentLiveShoppingInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.lvshop.vo.BOLvshopVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
B.BNF_INNB AS BNF_INNB, -- 혜택 고유번호
BC.CN_SJ AS BENEFIT_TITLE, -- 혜택 제목 (방송명)
BC.IMG_FIL_COURS AS THUMBNAIL_IMAGE_URL,-- 방송 썸네일 이미지 URL
BG.WORDS_CN_2 AS BENEFIT_DESC_2, -- 혜택 안내문 2 (이벤트 설명)
BC.WORDS_CN AS BROADCAST_DESC, -- 방송 안내
BC.CN_DC AS CONTENT_DESC, -- 내용 설명 (방송 소개)
BC.TME_SECND AS REQUIRED_WATCH_TIME,-- 필수 시청 시간(초)
BC.LINK_URL AS PARTICIPATION_URL, -- 참여 링크 URL 추가
TIMESTAMPDIFF(SECOND, BC.CN_BGN_DT, NOW()) AS ELAPSED_TIME_IN_SECONDS, -- 방송 경과 시간(초)
BR.MLG_RWD_AMT AS MILEAGE_REWARD -- 마일리지 보상 금액
FROM
GC_BENEFIT B -- 혜택 기본 정보 테이블
INNER JOIN
GC_BENEFIT_CONTENT BC ON B.BNF_INNB = BC.BNF_INNB -- 혜택 내용설정 정보 테이블 조인
LEFT JOIN
GC_BENEFIT_REWARD BR ON B.BNF_INNB = BR.BNF_INNB AND BR.BNF_RWD_CATE_DV_CD = '07010' -- 혜택 보상설정 정보 테이블 조인 (라이브 쇼핑 참여 보상)
LEFT JOIN
GC_BENEFIT_GDCC BG ON B.BNF_DV_CD = BG.BNF_DV_CD AND B.SOPMAL_CD = BG.SOPMAL_CD -- 혜택 안내문 정보 테이블 조인
WHERE
B.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 조건
AND B.BNF_DV_CD = '070' -- 혜택 구분 코드 (라이브 쇼핑) 조건
AND B.USE_AT = 'Y' -- 사용 여부 조건
AND NOW() BETWEEN BC.CN_BGN_DT AND BC.CN_END_DT -- 현재 진행 중인 방송 조건
LIMIT 1 -- 가장 최근 1건 조회
</select>
<!-- 다음 방송 예고 목록 조회 -->
<select id="selectUpcomingLiveShoppingList" parameterType="string" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
B.BNF_INNB AS BNF_INNB, -- 혜택 고유번호
B.BNF_SJ AS BENEFIT_TITLE, -- 방송명
BC.IMG_FIL_COURS AS THUMBNAIL_IMAGE_URL, -- 방송 썸네일 이미지 URL
BC.CN_DC AS CONTENT_DESC, -- 방송소개
BC.WORDS_CN AS BROADCAST_DESC, -- 방송 안내
BC.CN_BGN_DT AS BROADCAST_START_TIME, -- 방송 시작 시간 추가
BG.WORDS_CN_1 AS BENEFIT_DESC_1, -- 혜택 안내문 1
BG.WORDS_CN_2 AS BENEFIT_DESC_2, -- 혜택 안내문 2
BG.WORDS_CN_3 AS BENEFIT_DESC_3, -- 혜택 안내문 3
TIMESTAMPDIFF(SECOND, NOW(), BC.CN_BGN_DT) AS REMAINING_TIME -- 방송 시작까지 남은 시간 (초)
FROM
GC_BENEFIT B
INNER JOIN
GC_BENEFIT_CONTENT BC ON B.BNF_INNB = BC.BNF_INNB
LEFT JOIN
GC_BENEFIT_GDCC BG ON B.BNF_DV_CD = BG.BNF_DV_CD AND B.SOPMAL_CD = BG.SOPMAL_CD -- 혜택 안내문 정보 테이블 조인
WHERE
B.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 (문자열 파라미터)
AND B.BNF_DV_CD = '070' -- 혜택 구분 코드 (라이브쇼핑)
AND B.USE_AT = 'Y' -- 사용 여부
AND NOW() &lt; BC.CN_BGN_DT -- 아직 방송 시작 전인 경우 (예고 방송)
ORDER BY
B.BNF_BGN_DT ASC -- 방송 시작 시간이 빠른 순 정렬
</select>
<!-- 라이브 쇼핑 알림 신청 상태 조회 -->
<select id="selectLiveShoppingNotificationStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.lvshop.vo.BOLvshopVO" resultType="string">
SELECT
AGRE_AT -- 동의 여부
FROM
GC_BENEFIT_AGREE -- 혜택 동의 내역 테이블
WHERE
SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 조건
AND MBR_INNB = #{mbrInnb} -- 회원 고유번호 조건
AND MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드 조건
AND BNF_DV_CD = '070' -- 혜택 구분 코드 (라이브 쇼핑) 조건
AND BNF_AGRE_DV_CD = '010' -- 혜택 동의 구분 코드 (알림동의) 조건
</select>
<!-- 라이브 쇼핑 알림 신청 정보 삽입 (중복 시 업데이트) -->
<insert id="insertLiveShoppingNotification" parameterType="com.wb.domainserver.domain.gcone.bnft.lvshop.vo.BOLvshopVO">
INSERT INTO GC_BENEFIT_AGREE (
SOPMAL_CD, -- 쇼핑몰 코드
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
BNF_DV_CD, -- 혜택 구분 코드
BNF_AGRE_DV_CD, -- 혜택 동의 구분 코드
AGRE_AT, -- 동의 여부
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{sopmalCd}, -- 쇼핑몰 코드
#{mbrInnb}, -- 회원 고유번호
#{mbrDvCd}, -- 회원 구분 코드
'070', -- 혜택 구분 코드 (라이브 쇼핑)
'010', -- 혜택 동의 구분 코드 (알림 동의)
#{agreAt}, -- 동의 여부
#{regusr}, -- 등록자 (회원 고유번호)
NOW() -- 현재 시간
)
ON DUPLICATE KEY UPDATE
BNF_DV_CD = #{bnfDvCd},
BNF_AGRE_DV_CD = #{bnfAgreDvCd},
AGRE_AT = #{agreAt}, -- 동의 여부 업데이트
REGUSR = #{regusr}, -- 수정자 (회원 고유번호)
REGIST_DT = NOW() -- 수정 시간 (현재 시간)
</insert>
<!-- 라이브쇼핑 알림 상태 조회 (기존 쿼리 - 필요시 유지) -->
<select id="getLvshopNotificationStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.lvshop.vo.BOLvshopVO" resultType="string">
SELECT
AGRE_AT -- 동의 여부
FROM
GC_BENEFIT_AGREE -- 혜택 동의 내역 테이블
WHERE
SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 조건
AND MBR_INNB = #{mbrInnb} -- 회원 고유번호 조건
AND MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드 조건
AND BNF_INNB = #{bnfInnb} -- 혜택 고유번호 조건
AND BNF_DV_CD = '070' -- 혜택 구분 코드 (라이브 쇼핑) 조건
AND BNF_AGRE_DV_CD = '010'; -- 혜택 동의 구분 코드 (알림 동의) 조건
</select>
<!-- 초록잎 지급 개수 조회 -->
<select id="selectLeafCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.lvshop.vo.BOLvshopVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PYMNT_CNT, -- 지급 초록잎 개수
SPECIAL_CNT -- 스페셜 지급 초록잎 개수
FROM
GC_BENEFIT_CPSLMKN
WHERE
BNF_DV_CD = '070' -- 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!-- 라이브쇼핑 혜택 참여 정보 삽입 -->
<insert id="insertLvshopBenefitParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.lvshop.vo.BOLvshopVO">
<selectKey keyProperty="bnfPrtInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN
</selectKey>
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_INNB, -- 혜택 고유번호
BNF_PRT_DT, -- 혜택 참여 일시
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
PRT_LEAF_CNT, -- 참여 초록잎 개수
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{bnfPrtInnb}, -- 혜택 참여 고유번호
#{bnfInnb}, -- 혜택 고유번호
NOW(), -- 현재 시간
#{mbrInnb}, -- 회원 고유번호
#{mbrDvCd}, -- 회원 구분 코드
#{paidLeafCnt}, -- 참여 초록잎 개수
#{regusr}, -- 등록자 (회원 고유번호)
NOW() -- 현재 시간
)
</insert>
<!-- 라이브쇼핑 마일리지 적립 여부 확인 -->
<select id="checkLiveShoppingRewardReceived" parameterType="com.wb.domainserver.domain.gcone.bnft.lvshop.vo.BOLvshopVO" resultType="int">
SELECT COUNT(1)
FROM GC_BENEFIT_RECEIPT R
JOIN GC_BENEFIT_PARTCPTN P ON P.BNF_PRT_INNB = R.BNF_PRT_INNB
JOIN GC_BENEFIT B ON B.BNF_INNB = P.BNF_INNB
WHERE B.BNF_DV_CD = '070' <!-- 라이브쇼핑 혜택 -->
<!-- 회원 고유번호 -->
AND P.MBR_INNB = #{mbrInnb}
<!-- 회원 구분 코드 -->
AND P.MBR_DV_CD = #{mbrDvCd}
<!-- 쇼핑몰 코드 -->
<if test="sopmalCd != null and sopmalCd != ''">
AND B.SOPMAL_CD = #{sopmalCd}
</if>
<!-- 특정 혜택(방송)만 점검하고 싶을 때 -->
<if test="bnfInnb != null">
AND P.BNF_INNB = #{bnfInnb}
</if>
</select>
<!-- 라이브쇼핑 마일리지 적립 정보 삽입 -->
<insert id="insertLiveShoppingRewardReceipt" parameterType="com.wb.domainserver.domain.gcone.bnft.lvshop.vo.BOLvshopVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_RCV_INNB, -- 혜택 보상수령 고유번호
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
REGUSR, -- 등록자
REGIST_DT -- 등록 시간
) VALUES (
#{bnfRcvInnb}, -- 혜택 보상수령 고유번호
#{bnfPrtInnb}, -- 혜택 참여 고유번호
'07010', -- 보상 항목 구분 코드 (라이브 쇼핑 참여 보상)
'010', -- 보상 상품 구분 코드 (마일리지)
#{mlgRwdAmt}, -- 마일리지 금액
#{regusr}, -- 등록자 (회원 고유번호)
NOW() -- 현재 시간
)
</insert>
<!-- 라이브쇼핑 혜택 정보 조회 (기존 쿼리 - 필요시 유지) -->
<select id="selectLvshopInfo" parameterType="long" resultType="com.wb.domainserver.domain.gcone.bnft.lvshop.vo.BOLvshopVO">
SELECT
BNF_INNB, -- 혜택 고유번호
SOPMAL_CD, -- 쇼핑몰 코드
BNF_DV_CD, -- 혜택 구분 코드
BNF_SJ, -- 혜택 제목
USE_AT, -- 사용 여부
BNF_BGN_DT, -- 혜택 시작 일시
BNF_END_DT -- 혜택 종료 일시
-- 필요한 컬럼 추가
FROM
GC_BENEFIT -- 혜택 기본 정보 테이블
WHERE
BNF_INNB = #{bnfInnb}; -- 혜택 고유번호 조건
</select>
</mapper>

View File

@@ -0,0 +1,344 @@
<?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.wb.domainserver.domain.gcone.bnft.oxquiz.mapper.BOOxquizMapper">
<!-- OX 퀴즈 기본 정보 조회 -->
<select id="selectOxquizBasicInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_INNB, -- 혜택 설정 고유번호
BNF_SJ, -- 혜택 제목
SCR_REPRSNT_IMG, -- 화면 대표 이미지
BNF_BGN_DT, -- 진행기간 시작일시
BNF_END_DT, -- 진행기간 종료일시
BNF_WORDS_CN -- 혜택 안내
FROM
GC_BENEFIT
WHERE
BNF_DV_CD = '130' -- OX 퀴즈 혜택 구분 코드
AND USE_AT = 'Y'
AND DATE(NOW()) BETWEEN DATE(BNF_BGN_DT) AND DATE(BNF_END_DT)
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
]]>
</select>
<select id="selectOxquizDetailInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_QUIZ_INNB, -- 퀴즈 고유번호
QUIZ_CN, -- 퀴즈 내용
QUIZ_CNSR, -- 퀴즈 정답
HINT_URL, -- 힌트 url
QUIZ_SEQ -- 퀴즈 순서
FROM (
SELECT
c.*,
ROW_NUMBER() OVER (PARTITION BY c.BNF_INNB ORDER BY c.BNF_QUIZ_INNB) as QUIZ_SEQ
FROM
GC_BENEFIT_OXQUIZ c
WHERE
c.DEL_AT = 'N'
) numbered
WHERE
BNF_INNB = #{bnfInnb}
ORDER BY
QUIZ_SEQ ASC
]]>
</select>
<!-- 사용자의 OX 퀴즈 참여 정보 조회 -->
<select id="selectUserOxquizParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
p.BNF_INNB, -- 혜택 설정 고유번호
po.BNF_QUIZ_INNB, -- 퀴즈 고유번호
po.ANSW_CN AS USER_ANSWER, -- 사용자 답변
CASE
WHEN po.ANSW_CN = c.QUIZ_CNSR THEN 'O'
WHEN po.ANSW_CN IS NOT NULL THEN 'X'
ELSE NULL
END AS IS_CORRECT -- 정답 여부
FROM
GC_BENEFIT_PARTCPTN p
JOIN GC_BENEFIT_PARTCPTN_OXQUIZ po ON p.BNF_PRT_INNB = po.BNF_PRT_INNB
JOIN GC_BENEFIT_OXQUIZ c ON po.BNF_QUIZ_INNB = c.BNF_QUIZ_INNB
WHERE
p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.BNF_INNB = #{bnfInnb}
]]>
</select>
<!-- 사용자 당일 참여 조회 -->
<select id="selectTodayParticipationCount" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO" resultType="int">
<![CDATA[
SELECT COUNT(*)
FROM GC_BENEFIT_PARTCPTN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
AND DATE(BNF_PRT_DT) = CURDATE()
]]>
</select>
<!-- 사용자가 맞춘 정답 수 조회 -->
<select id="selectUserCorrectAnswerCount" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO" resultType="int">
<![CDATA[
SELECT COUNT(*)
FROM GC_BENEFIT_PARTCPTN p
JOIN GC_BENEFIT_PARTCPTN_OXQUIZ po ON p.BNF_PRT_INNB = po.BNF_PRT_INNB
JOIN GC_BENEFIT_OXQUIZ o ON po.BNF_QUIZ_INNB = o.BNF_QUIZ_INNB
WHERE p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.BNF_INNB = #{bnfInnb}
AND po.ANSW_CN = o.QUIZ_CNSR
]]>
</select>
<!-- 특정 보상 코드에 해당하는 보상 정보 조회 -->
<select id="selectRewardInfoByCode" parameterType="map" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
COUPON_INNB -- 쿠폰 고유번호
FROM
GC_BENEFIT_REWARD
WHERE
BNF_RWD_CATE_DV_CD = #{rewardCode}
AND BNF_INNB = #{bnfInnb}
]]>
</select>
<!-- 현재 퀴즈 개수 조회 -->
<select id="selectCurrentQuizCount" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO" resultType="int">
<![CDATA[
SELECT COUNT(*)
FROM GC_BENEFIT_OXQUIZ A
JOIN GC_BENEFIT B ON A.BNF_INNB = B.BNF_INNB
WHERE A.BNF_INNB = #{bnfInnb}
AND A.DEL_AT = 'N'
AND B.SOPMAL_CD = #{sopmalCd}
]]>
</select>
<!-- 특정 번호의 퀴즈 조회 -->
<select id="selectCurrentOxquiz" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_QUIZ_INNB, -- 혜택 퀴즈 고유번호
QUIZ_CN, -- 퀴즈 내용
QUIZ_CNSR, -- 퀴즈 정답
HINT_URL -- 힌트보기 링크
FROM
GC_BENEFIT_OXQUIZ
WHERE
BNF_INNB = #{bnfInnb}
AND BNF_QUIZ_INNB = #{bnfQuizInnb}
]]>
</select>
<!-- 초록잎 지급 개수 조회 -->
<select id="selectLeafCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PYMNT_CNT, -- 지급 초록잎 개수
SPECIAL_CNT -- 스페셜 지급 초록잎 개수
FROM
GC_BENEFIT_CPSLMKN
WHERE
BNF_DV_CD = '130' -- 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!-- OX 퀴즈 참여 정보 저장 (초록잎 적립 포함) -->
<insert id="insertOxquizParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO">
<selectKey keyProperty="bnfPrtInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_INNB, -- 혜택 설정 고유번호
BNF_PRT_DT, -- 혜택 참여일시
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
PRT_LEAF_CNT, -- 참여 초록잎 개수 (추가)
REGUSR, -- 등록자
REGIST_DT -- 등록일시
) VALUES (
#{bnfPrtInnb},
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
#{paidLeafCnt}, -- 초록잎 지급량 (추가)
#{regusr},
NOW()
)
]]>
</insert>
<!-- OX 퀴즈 현재 퀴즈 번호 -->
<select id="selectCurrentQuizNumber" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO" resultType="int">
<![CDATA[
SELECT
CASE
WHEN MIN(not_participated.QUIZ_SEQ) IS NULL THEN
(SELECT MAX(QUIZ_SEQ) FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY o.BNF_INNB ORDER BY o.BNF_QUIZ_INNB) as QUIZ_SEQ
FROM GC_BENEFIT_OXQUIZ o
WHERE o.BNF_INNB = #{bnfInnb} AND o.DEL_AT = 'N'
) all_quiz)
ELSE MIN(not_participated.QUIZ_SEQ)
END as current_quiz
FROM (
SELECT
o.*,
ROW_NUMBER() OVER (PARTITION BY o.BNF_INNB ORDER BY o.BNF_QUIZ_INNB) as QUIZ_SEQ
FROM
GC_BENEFIT_OXQUIZ o
WHERE
o.BNF_INNB = #{bnfInnb}
AND o.DEL_AT = 'N'
AND NOT EXISTS (
SELECT 1
FROM GC_BENEFIT_PARTCPTN p
JOIN GC_BENEFIT_PARTCPTN_OXQUIZ po ON p.BNF_PRT_INNB = po.BNF_PRT_INNB
WHERE p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.BNF_INNB = #{bnfInnb}
AND po.BNF_QUIZ_INNB = o.BNF_QUIZ_INNB
)
) not_participated
]]>
</select>
<!-- OX 퀴즈 참여 상세 정보 저장 -->
<insert id="insertOxquizParticipationDetail" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO">
<selectKey keyProperty="bnfPrtQuizInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_QUIZ_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN_OXQUIZ
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_PARTCPTN_OXQUIZ (
BNF_PRT_QUIZ_INNB, -- 혜택 참여 OX퀴즈 고유번호
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_QUIZ_INNB, -- 혜택 퀴즈 고유번호
ANSW_CN, -- 답변내용
CNSR_AT -- 정답여부
) VALUES (
#{bnfPrtQuizInnb},
#{bnfPrtInnb},
#{bnfQuizInnb},
#{answCn},
#{cnsrAt}
)
]]>
</insert>
<!-- 알림 상태 조회 -->
<select id="selectNotificationStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
AGRE_AT -- 동의여부
FROM
GC_BENEFIT_AGREE
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_DV_CD = '130' -- OX 퀴즈 혜택 구분 코드
AND BNF_AGRE_DV_CD = '010' -- 알림동의 구분 코드
]]>
</select>
<!-- 알림 상태 변경 -->
<update id="updateNotificationStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO">
<![CDATA[
INSERT INTO GC_BENEFIT_AGREE (
SOPMAL_CD, -- 쇼핑몰코드
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
BNF_DV_CD, -- 혜택 구분 코드
BNF_AGRE_DV_CD, -- 혜택 동의 구분 코드
BNF_INNB, -- 혜택 설정 고유번호
AGRE_AT, -- 동의여부
REGUSR, -- 등록자
REGIST_DT -- 등록일시
)
SELECT
#{sopmalCd},
#{mbrInnb},
#{mbrDvCd},
'130', -- OX 퀴즈 혜택 구분 코드
'010', -- 알림동의 구분 코드
#{bnfInnb},
#{agreAt},
#{regusr},
NOW()
FROM DUAL
WHERE NOT EXISTS (
SELECT 1
FROM GC_BENEFIT_AGREE
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_DV_CD = '130'
AND BNF_AGRE_DV_CD = '010'
);
UPDATE GC_BENEFIT_AGREE
SET
AGRE_AT = #{agreAt},
REGUSR = #{regusr},
REGIST_DT = NOW()
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_DV_CD = '130'
AND BNF_AGRE_DV_CD = '010';
]]>
</update>
<!-- 보상 정보 조회 -->
<select id="selectRewardInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
COUPON_INNB -- 쿠폰 고유번호
FROM
GC_BENEFIT_REWARD
WHERE
BNF_INNB = #{bnfInnb}
AND BNF_RWD_CATE_DV_CD IN ('13010', '13020', '13030') -- OX 퀴즈 보상 코드
]]>
</select>
<!-- 보상 지급 -->
<insert id="insertReward" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_RCV_INNB, -- 혜택 보상수령 고유번호
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
COUPON_INNB, -- 쿠폰 고유번호
REGUSR, -- 등록자
REGIST_DT -- 등록일시
) VALUES (
#{bnfRcvInnb},
#{bnfPrtInnb},
#{bnfRwdCateDvCd},
#{bnfRwdGodsDvCd},
#{mlgRwdAmt},
#{couponInnb},
#{regusr},
NOW()
)
]]>
</insert>
</mapper>

View File

@@ -0,0 +1,933 @@
<?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.wb.domainserver.domain.gcone.bnft.purstmp.mapper.BOPurstmpStampMapper">
<!-- gc_order 테이블에서 매장 구매 정보 조회 (스탬프 적립/차감 처리용) -->
<select id="selectStoreOrdersForStamp"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
-- gc_order 테이블에서 매장 구매 정보 조회 (디바이스 등록일 기준 조회기간 적용)
SELECT
O.ORDR_INNB AS ORDR_INNB, -- 주문 고유번호
O.STR_INNB AS STR_INNB, -- 매장 고유번호
O.RL_SETLE_AMT AS RL_SETLE_AMT, -- 실 결제금액
CASE
WHEN ST.TENTCPN_NM IS NOT NULL THEN ST.TENTCPN_NM
WHEN ST.STR_NM IS NOT NULL THEN ST.STR_NM
ELSE CONCAT('매장_', O.STR_INNB)
END AS STR_NM, -- 매장명
DATE_FORMAT(O.SETLE_COMPT_DT, '%Y-%m-%d %H:%i:%s') AS SETLE_COMPT_DT, -- 결제완료일시
O.SLE_ENVRN_CD AS SLE_ENVRN_CD, -- 판매환경코드
O.SKN_ENVRN_CD AS SKN_ENVRN_CD, -- 스킨환경코드
O.ORDR_STTUS_CD AS ORDR_STTUS_CD, -- 주문상태코드 추가
CASE
WHEN O.ORDR_STTUS_CD IN ('25', '30', '35', '40', '45', '50', '55', '60', '65', '70', '75', '80') THEN 'ACCUMULATE'
WHEN O.ORDR_STTUS_CD IN ('85', '95', '99') THEN 'DEDUCT'
ELSE 'IGNORE'
END AS STAMP_ACTION -- 스탬프 처리 액션 (적립/차감/무시)
FROM
GC_ORDER O
LEFT JOIN
GC_STORE ST ON O.STR_INNB = ST.STR_INNB
LEFT JOIN
GC_BENEFIT_STMP BS ON O.ORDR_INNB = BS.ORDR_INNB
AND O.MBR_INNB = BS.MBR_INNB
AND O.SOPMAL_CD = BS.SOPMAL_CD
-- 회원 디바이스 정보 JOIN 추가 (조회 기간 산정용)
LEFT JOIN
GC_MEMBER_DEVICE_INFO MDI ON O.MBR_INNB = MDI.MBR_INNB
AND O.MBR_DV_CD = MDI.MBR_DV_CD
AND O.SOPMAL_CD = MDI.SOPMAL_CD
WHERE
O.MBR_INNB = #{mbrInnb}
AND O.MBR_DV_CD = #{mbrDvCd}
AND O.SOPMAL_CD = #{sopmalCd}
AND O.USE_AT = 'Y'
AND (
-- 스탬프 적립 대상 (정상 결제완료 상태)
O.ORDR_STTUS_CD IN ('25', '30', '35', '40', '45', '50', '55', '60', '65', '70', '75', '80')
OR
-- 스탬프 차감 대상 (결제취소/주문무효/결제실패)
O.ORDR_STTUS_CD IN ('85')
)
AND (
-- gc_order 참고사항: 매장 구매금액 조건
O.SLE_ENVRN_CD IN ('S1', 'S2', 'S3')
OR O.SKN_ENVRN_CD = 'POS'
)
-- 차감 대상은 이미 처리된 주문도 포함
AND (
(O.ORDR_STTUS_CD IN ('25', '30', '35', '40', '45', '50', '55', '60', '65', '70', '75', '80') AND BS.ORDR_INNB IS NULL) -- 적립: 미처리만
OR
(O.ORDR_STTUS_CD IN ('85') AND BS.ORDR_INNB IS NOT NULL AND BS.REFUND_AT = 'N') -- 차감: 이미 적립된 것만
)
<if test="strInnb != null and strInnb != '' and strInnb != 'null'">
AND O.STR_INNB = #{strInnb}
</if>
AND O.SETLE_COMPT_DT IS NOT NULL
-- 디바이스 등록일부터 현재까지 조회 (디바이스 정보 없으면 전체 조회)
<if test="true">
AND (MDI.REGIST_DT IS NULL OR O.SETLE_COMPT_DT &gt;= DATE(MDI.REGIST_DT))
</if>
AND O.SETLE_COMPT_DT &lt;= NOW() -- 현재까지
ORDER BY
O.SETLE_COMPT_DT DESC
</select>
<!-- 매장별 적립카드 조회 (유효기간 내, 교환권 포함) - 정렬 수정 -->
<select id="selectStampCards" parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
-- 매장별 진행 중인 스탬프 적립카드와 교환권 정보 조회 (쿠폰 정보 포함, 매장명 개선)
SELECT
SE.BNF_EXTIKET_INNB AS BNF_EXTIKET_INNB, -- 교환권 고유번호
SE.SOPMAL_CD AS SOPMAL_CD, -- 쇼핑몰코드
SE.STR_INNB AS STR_INNB, -- 매장 고유번호
CASE
WHEN ST.STR_NM IS NOT NULL THEN ST.STR_NM
WHEN ST.TENTCPN_NM IS NOT NULL THEN ST.TENTCPN_NM
ELSE CONCAT('매장_', SE.STR_INNB)
END AS STR_NM, -- 매장명 (gc_store 테이블 연동)
SE.MBR_INNB AS MBR_INNB, -- 회원 고유번호
SE.MBR_DV_CD AS MBR_DV_CD, -- 회원 구분코드
SE.EXTIKET_STMP_CNT AS EXTIKET_STMP_CNT, -- 교환권 스탬프 수
DATE_FORMAT(SE.STMP_VALID_DT, '%Y-%m-%d') AS STMP_VALID_DT, -- 스탬프 유효일시
SE.EXCHNG_AT AS EXCHNG_AT, -- 교환여부
SE.COUPON_INNB AS COUPON_INNB, -- 쿠폰고유번호
DATE_FORMAT(SE.REGIST_DT, '%Y-%m-%d') AS REGIST_DT, -- 등록일시
CASE
WHEN SE.EXCHNG_AT = 'Y' THEN 'COMPLETED'
WHEN NOW() &gt; SE.STMP_VALID_DT THEN 'EXPIRED'
ELSE 'ACTIVE'
END AS STATUS,
CASE
WHEN SE.COUPON_INNB IS NOT NULL THEN 'Y'
ELSE 'N'
END AS HAS_COUPON
FROM
GC_BENEFIT_STMP_EXTIKET SE
LEFT JOIN
GC_STORE ST ON SE.STR_INNB = ST.STR_INNB
WHERE
SE.MBR_INNB = #{mbrInnb}
AND SE.MBR_DV_CD = #{mbrDvCd}
AND SE.SOPMAL_CD = #{sopmalCd}
<if test="strInnb != null and strInnb != '' and strInnb > 0">
AND SE.STR_INNB = #{strInnb}
</if>
AND (
-- 유효기간 내의 카드이거나 교환권 발급 완료된 카드
(NOW() &lt;= SE.STMP_VALID_DT OR SE.EXCHNG_AT = 'Y')
)
ORDER BY
-- 교환되지 않은 카드를 먼저 표시
CASE WHEN SE.EXCHNG_AT = 'N' THEN 0 ELSE 1 END ASC,
SE.REGIST_DT ASC
</select>
<!-- 보유한 적립카드 개수 조회 (교환권 발급 완료 건도 포함) -->
<select id="selectTotalCardCount" parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO" resultType="int">
-- 보유한 적립카드 개수 조회 (교환권 발급 완료 건도 포함)
SELECT
COUNT(*) AS CARD_COUNT
FROM
GC_BENEFIT_STMP_EXTIKET SE
WHERE
SE.MBR_INNB = #{mbrInnb}
AND SE.MBR_DV_CD = #{mbrDvCd}
AND SE.SOPMAL_CD = #{sopmalCd}
AND NOW() &lt;= SE.STMP_VALID_DT
</select>
<!-- 스탬프 적립 내역 조회 -->
<select id="selectRecentPurchasesWithStamps"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
-- 최근 스탬프 적립 내역 조회 (매장명 연동)
SELECT
BS.BNF_STMP_INNB AS BNF_STMP_INNB,
BS.ORDR_INNB AS ORDR_INNB,
BS.REFUND_AT AS REFUND_AT,
BS.PURCHS_AMT AS PURCHS_AMT,
BS.RL_SETLE_AMT AS RL_SETLE_AMT,
BS.STMP_CNT AS STMP_CNT,
BS.AMT_FOR_CHG AS AMT_FOR_CHG,
DATE_FORMAT(BS.SETLE_COMPT_DT, '%Y-%m-%d %H:%i:%s') AS SETLE_COMPT_DT,
DATE_FORMAT(BS.REGIST_DT, '%Y-%m-%d %H:%i:%s') AS REGIST_DT,
CASE
WHEN ST.STR_NM IS NOT NULL THEN ST.STR_NM
WHEN ST.TENTCPN_NM IS NOT NULL THEN ST.TENTCPN_NM
ELSE CONCAT('매장_', BS.STR_INNB)
END AS BRANCH_NAME -- 매장명 (gc_store 테이블 연동)
FROM
GC_BENEFIT_STMP BS
LEFT JOIN
GC_STORE ST ON BS.STR_INNB = ST.STR_INNB
WHERE
BS.MBR_INNB = #{mbrInnb}
AND BS.MBR_DV_CD = #{mbrDvCd}
AND BS.SOPMAL_CD = #{sopmalCd}
AND (BS.REFUND_AT IS NULL OR BS.REFUND_AT != 'Y') -- 환불된 건 제외
<if test="strInnb != null and strInnb != ''">
AND BS.STR_INNB = #{strInnb}
</if>
AND BS.REGIST_DT &gt;= DATE_SUB(NOW(), INTERVAL 12 MONTH)
ORDER BY
BS.REGIST_DT DESC
LIMIT 20
</select>
<!-- 스탬프 적립 내역 추가 로딩 (스크롤 시 20개 추가) - 컬럼 추가 -->
<select id="selectMorePurchasesWithStamps"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
-- 스크롤 시 추가 로딩할 스탬프 적립 내역 조회
SELECT
BS.BNF_STMP_INNB AS BNF_STMP_INNB,
BS.ORDR_INNB AS ORDR_INNB,
BS.REFUND_AT AS REFUND_AT,
BS.PURCHS_AMT AS PURCHS_AMT,
BS.RL_SETLE_AMT AS RL_SETLE_AMT,
BS.STMP_CNT AS STMP_CNT,
BS.AMT_FOR_CHG AS AMT_FOR_CHG,
DATE_FORMAT(BS.SETLE_COMPT_DT, '%Y-%m-%d %H:%i:%s') AS SETLE_COMPT_DT,
DATE_FORMAT(BS.REGIST_DT, '%Y-%m-%d %H:%i:%s') AS REGIST_DT,
CASE
WHEN ST.STR_NM IS NOT NULL THEN ST.STR_NM
WHEN ST.TENTCPN_NM IS NOT NULL THEN ST.TENTCPN_NM
ELSE CONCAT('매장_', BS.STR_INNB)
END AS BRANCH_NAME
FROM
GC_BENEFIT_STMP BS
LEFT JOIN
GC_STORE ST ON BS.STR_INNB = ST.STR_INNB
WHERE
BS.MBR_INNB = #{mbrInnb}
AND BS.MBR_DV_CD = #{mbrDvCd}
AND BS.SOPMAL_CD = #{sopmalCd}
AND (BS.REFUND_AT IS NULL OR BS.REFUND_AT != 'Y') -- 환불된 건 제외
<if test="strInnb != null and strInnb != ''">
AND BS.STR_INNB = #{strInnb}
</if>
AND BS.REGIST_DT &gt;= DATE_SUB(NOW(), INTERVAL 12 MONTH)
<if test="lastStmpInnb != null and lastStmpInnb &gt; 0">
AND BS.REGIST_DT &lt; (
SELECT REGIST_DT
FROM GC_BENEFIT_STMP
WHERE BNF_STMP_INNB = #{lastStmpInnb}
)
</if>
ORDER BY
BS.REGIST_DT DESC
LIMIT 20
</select>
<!-- 새로운 스탬프 적립 기록 추가 -->
<insert id="insertNewPurchase" parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO">
-- 새로운 구매 기록 추가 및 스탬프 적립
INSERT INTO GC_BENEFIT_STMP (
SOPMAL_CD, -- 쇼핑몰코드
STR_INNB, -- 매장고유번호
ORDR_INNB, -- 주문 고유번호
REFUND_AT, -- 환불여부
MBR_INNB, -- 회원고유번호
MBR_DV_CD, -- 회원구분코드
PURCHS_INNB, -- 구매식별 고유번호
PURCHS_AMT, -- 구매금액
RL_SETLE_AMT, -- 실 결제금액
SETLE_COMPT_DT, -- 결제완료일시
STMP_CNT, -- 적립 스탬프 수
AMT_FOR_CHG, -- 충전필요금액
REGIST_DT -- 등록일시
) VALUES (
#{sopmalCd},
#{strInnb},
#{ordrInnb},
IFNULL(#{refundAt}, 'N'),
#{mbrInnb},
#{mbrDvCd},
#{purchsInnb},
#{purchsAmt},
#{rlSetleAmt},
#{setleCmptDt},
#{stmpCnt},
#{amtForChg},
NOW()
)
</insert>
<!-- 새로운 적립카드(교환권) 생성 -->
<insert id="insertExchangeTicket"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
useGeneratedKeys="true"
keyProperty="bnfExtiketInnb">
-- 새로운 교환권(스탬프 적립카드) 생성
INSERT INTO GC_BENEFIT_STMP_EXTIKET (
SOPMAL_CD,
STR_INNB,
MBR_INNB,
MBR_DV_CD,
EXTIKET_STMP_CNT,
STMP_VALID_DT,
EXCHNG_AT,
REGIST_DT
) VALUES (
#{sopmalCd},
#{strInnb},
#{mbrInnb},
#{mbrDvCd},
#{extiketStmpCnt},
<choose>
<when test="stmpValidDt != null">
#{stmpValidDt}
</when>
<otherwise>
DATE_ADD(NOW(), INTERVAL 12 MONTH) -- 기본: 현재시점으로부터 12개월
</otherwise>
</choose>,
IFNULL(#{exchngAt}, 'N'),
NOW()
)
</insert>
<!-- Step 1: 교환권 완료 대상 PK 조회 -->
<select id="selectExchangeTicketForComplete"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="Long">
-- 교환권 완료 처리 대상 PK 조회
SELECT
BNF_EXTIKET_INNB
FROM
GC_BENEFIT_STMP_EXTIKET
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND STR_INNB = #{strInnb}
AND EXCHNG_AT = 'N'
AND EXTIKET_STMP_CNT = #{requiredStampCnt}
AND NOW() &lt;= STMP_VALID_DT
ORDER BY
REGIST_DT ASC
LIMIT 1
</select>
<!-- Step 2: PK 기준 교환권 완료 처리 (쿠폰 포함) -->
<update id="completeExchangeTicketWithCoupon"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO">
-- PK 기준 교환권 완료 처리 (쿠폰 정보 포함)
UPDATE
GC_BENEFIT_STMP_EXTIKET
SET
EXCHNG_AT = 'Y',
EXCHNG_DT = NOW(),
COUPON_INNB = #{couponInnb},
UPDT_DT = NOW()
WHERE
BNF_EXTIKET_INNB = #{bnfExtiketInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
</update>
<!-- ✅ 새로 추가: 쿠폰 번호만 업데이트하는 쿼리 -->
<update id="updateExchangeTicketCouponOnly"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO">
-- 교환권에 쿠폰 번호만 업데이트
UPDATE
GC_BENEFIT_STMP_EXTIKET
SET
COUPON_INNB = #{couponInnb},
UPDT_DT = NOW()
WHERE
BNF_EXTIKET_INNB = #{bnfExtiketInnb}
AND EXCHNG_AT = 'Y' -- 이미 완료된 상태에서만 업데이트
-- 추가 조건 제거하여 업데이트 확률 높임
</update>
<!-- 교환권 사용 완료 후 적립카드 삭제 처리 -->
<update id="deleteCompletedExchangeTicket" parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO">
-- 교환권 사용 완료 후 적립카드 삭제 처리
DELETE FROM
GC_BENEFIT_STMP_EXTIKET
WHERE
BNF_EXTIKET_INNB = #{bnfExtiketInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND EXCHNG_AT = 'Y'
</update>
<!-- 총 미교환 스탬프 수 조회 -->
<select id="selectTotalUnexchangedStamps"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="int">
-- ✅ 수정: 실제 사용 가능한 스탬프 수 조회 (완료된 교환권의 스탬프만 제외)
SELECT
GREATEST(0,
(
-- 총 적립된 스탬프 수
SELECT IFNULL(SUM(STMP_CNT), 0)
FROM GC_BENEFIT_STMP
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND STR_INNB = #{strInnb}
AND REFUND_AT = 'N'
) - (
-- 완료된 교환권의 스탬프만 차감 (진행 중인 것은 제외)
SELECT IFNULL(SUM(EXTIKET_STMP_CNT), 0)
FROM GC_BENEFIT_STMP_EXTIKET
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND STR_INNB = #{strInnb}
AND EXCHNG_AT = 'Y' -- 완료된 교환권만 차감
)
) AS AVAILABLE_STAMPS
</select>
<!-- 잔액 조회 수정 (동적 스탬프 기준 금액 적용) -->
<select id="selectRemainingAmount"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="java.lang.Double">
-- 간단한 잔액 조회 (0으로 고정 - 매번 새로운 구매로 처리)
SELECT 0.0 AS REMAINING_AMOUNT
</select>
<!-- 교환권 갯수 조회 -->
<select id="selectTotalRowCountFromBenefitExtiket"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="int">
-- 특정 회원의 유효한 교환권 개수 조회
SELECT
COUNT(*) AS TOTAL_COUNT
FROM
GC_BENEFIT_STMP_EXTIKET
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
<if test="strInnb != null and strInnb != ''">
AND STR_INNB = #{strInnb}
</if>
AND NOW() &lt;= STMP_VALID_DT
</select>
<!-- 스탬프 화면 정보 조회 (gc_benefit_content 테이블 연동) -->
<select id="selectPurstmpScreenInfo"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
-- 스탬프 적립 이벤트의 화면 정보 조회
SELECT
B.BNF_INNB AS BNF_INNB, -- 혜택 설정 고유번호
BC.CN_SJ AS CN_SJ, -- 컨텐츠 제목
BC.IMG_FIL_COURS AS IMG_FIL_COURS, -- 이미지 파일 경로
BC.WORDS_CN AS WORDS_CN -- 안내 내용
FROM
GC_BENEFIT B
INNER JOIN
GC_BENEFIT_CONTENT BC ON B.BNF_INNB = BC.BNF_INNB
WHERE
B.BNF_DV_CD = '140' -- 스탬프 적립 이벤트 코드 (140)
AND B.SOPMAL_CD = #{sopmalCd}
ORDER BY
B.BNF_INNB DESC
LIMIT 1
</select>
<!-- 관리자 설정 이달의 선물 정보 조회 -->
<select id="selectMonthlyGiftInfo"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
B.BNF_INNB AS BNF_INNB, -- 혜택 설정 고유번호
BC.COUPON_INNB AS COUPON_INNB -- 쿠폰 고유번호
FROM
GC_BENEFIT B
INNER JOIN
GC_BENEFIT_REWARD BC ON B.BNF_INNB = BC.BNF_INNB
WHERE
B.BNF_DV_CD = '140' -- 스탬프 적립 이벤트 코드 (140)
AND B.SOPMAL_CD = #{sopmalCd}
ORDER BY
B.BNF_INNB DESC
</select>
<!-- selectCurrentExchangeTicket 수정 -->
<select id="selectCurrentExchangeTicket"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
BNF_EXTIKET_INNB AS bnfExtiketInnb,
EXTIKET_STMP_CNT AS extiketStmpCnt
FROM
GC_BENEFIT_STMP_EXTIKET
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND STR_INNB = #{strInnb}
AND EXCHNG_AT = 'N'
AND EXTIKET_STMP_CNT &lt; 10
AND NOW() &lt;= STMP_VALID_DT
ORDER BY
REGIST_DT ASC
LIMIT 1
</select>
<!-- 교환권 스탬프 수 업데이트 -->
<update id="updateExchangeTicketStampCount">
-- 교환권의 스탬프 수를 업데이트
UPDATE
GC_BENEFIT_STMP_EXTIKET
SET
EXTIKET_STMP_CNT = EXTIKET_STMP_CNT + #{newStampCount},
UPDT_DT = NOW()
WHERE
BNF_EXTIKET_INNB = #{extiketInnb}
</update>
<!-- 쿠폰(교환권) 목록 조회 - 정렬 수정 -->
<select id="selectCouponList"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
-- 회원의 쿠폰(교환권) 목록 조회 (쿠폰 정보 포함, 매장명 개선)
SELECT
SE.BNF_EXTIKET_INNB AS bnfExtiketInnb,
SE.SOPMAL_CD AS sopmalCd,
SE.STR_INNB AS strInnb,
CASE
WHEN ST.STR_NM IS NOT NULL THEN ST.STR_NM
WHEN ST.TENTCPN_NM IS NOT NULL THEN ST.TENTCPN_NM
ELSE CONCAT('매장_', SE.STR_INNB)
END AS branchName, -- 매장명 (gc_store 테이블 연동)
SE.MBR_INNB AS mbrInnb,
SE.MBR_DV_CD AS mbrDvCd,
SE.EXTIKET_STMP_CNT AS extiketStmpCnt,
DATE_FORMAT(SE.STMP_VALID_DT, '%Y-%m-%d %H:%i:%s') AS stmpValidDt,
SE.EXCHNG_AT AS exchngAt,
DATE_FORMAT(SE.EXCHNG_DT, '%Y-%m-%d %H:%i:%s') AS exchngDt,
DATE_FORMAT(SE.REGIST_DT, '%Y-%m-%d %H:%i:%s') AS registDt,
DATE_FORMAT(SE.UPDT_DT, '%Y-%m-%d %H:%i:%s') AS updtDt,
SE.COUPON_INNB AS couponInnb,
CASE
WHEN SE.EXCHNG_AT = 'N' AND NOW() &lt;= SE.STMP_VALID_DT AND SE.EXTIKET_STMP_CNT >= 10 THEN 'Y'
ELSE 'N'
END AS exchangeable,
CASE
WHEN SE.COUPON_INNB IS NOT NULL THEN 'Y'
ELSE 'N'
END AS hasCoupon
FROM
GC_BENEFIT_STMP_EXTIKET SE
LEFT JOIN
GC_STORE ST ON SE.STR_INNB = ST.STR_INNB
WHERE
SE.MBR_INNB = #{mbrInnb}
AND SE.MBR_DV_CD = #{mbrDvCd}
AND SE.SOPMAL_CD = #{sopmalCd}
<if test="strInnb != null and strInnb != ''">
AND SE.STR_INNB = #{strInnb}
</if>
ORDER BY
-- 교환되지 않은 쿠폰을 먼저 표시
CASE WHEN SE.EXCHNG_AT = 'N' THEN 0 ELSE 1 END ASC,
-- 교환되지 않은 쿠폰들은 최신순으로, 교환된 쿠폰들도 최신순으로
SE.REGIST_DT DESC
</select>
<!-- 특정 교환권 정보 조회 -->
<select id="selectSpecificVoucherInfo"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
-- 특정 교환권의 상세 정보 조회
SELECT
SE.BNF_EXTIKET_INNB AS bnfExtiketInnb,
SE.SOPMAL_CD AS sopmalCd,
SE.STR_INNB AS strInnb,
CASE
WHEN ST.STR_NM IS NOT NULL THEN ST.STR_NM
WHEN ST.TENTCPN_NM IS NOT NULL THEN ST.TENTCPN_NM
ELSE CONCAT('매장_', SE.STR_INNB)
END AS branchName,
SE.MBR_INNB AS mbrInnb,
SE.MBR_DV_CD AS mbrDvCd,
SE.EXTIKET_STMP_CNT AS extiketStmpCnt,
DATE_FORMAT(SE.STMP_VALID_DT, '%Y-%m-%d %H:%i:%s') AS stmpValidDt,
SE.EXCHNG_AT AS exchngAt,
DATE_FORMAT(SE.EXCHNG_DT, '%Y-%m-%d %H:%i:%s') AS exchngDt,
DATE_FORMAT(SE.REGIST_DT, '%Y-%m-%d %H:%i:%s') AS registDt,
DATE_FORMAT(SE.UPDT_DT, '%Y-%m-%d %H:%i:%s') AS updtDt
FROM
GC_BENEFIT_STMP_EXTIKET SE
LEFT JOIN
GC_STORE ST ON SE.STR_INNB = ST.STR_INNB
WHERE
SE.BNF_EXTIKET_INNB = #{bnfExtiketInnb}
AND SE.MBR_INNB = #{mbrInnb}
AND SE.MBR_DV_CD = #{mbrDvCd}
AND SE.SOPMAL_CD = #{sopmalCd}
</select>
<!-- 기존 구매 데이터 개수 조회 (더 정확한 조건) -->
<select id="countExistingPurchaseData"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="int">
-- 특정 회원의 기존 구매 데이터 개수 확인
SELECT
COUNT(*) AS PURCHASE_COUNT
FROM
GC_BENEFIT_STMP
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND REGIST_DT &gt;= DATE_SUB(NOW(), INTERVAL 6 MONTH) -- 최근 6개월 데이터만 확인
</select>
<!-- 기존 교환권 데이터 개수 조회 (더 정확한 조건) -->
<select id="countExistingTicketData"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="int">
-- 특정 회원의 기존 교환권 데이터 개수 확인
SELECT
COUNT(*) AS TICKET_COUNT
FROM
GC_BENEFIT_STMP_EXTIKET
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND REGIST_DT &gt;= DATE_SUB(NOW(), INTERVAL 6 MONTH) -- 최근 6개월 데이터만 확인
</select>
<!-- 스탬프 교환 보상 정보 조회 (gc_benefit_reward에서) -->
<select id="selectStampExchangeReward"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
-- 스탬프 교환 보상 정보 조회 (쿠폰/마일리지)
SELECT
br.BNF_RWD_CATE_DV_CD AS BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
br.BNF_RWD_GODS_DV_CD AS BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
br.MLG_RWD_AMT AS MLG_RWD_AMT, -- 마일리지 보상 금액
br.COUPON_INNB AS COUPON_INNB, -- 쿠폰 고유 번호
COALESCE(cs.COUPON_SNDNG_NM, br.ITM_NM) AS ITM_NM -- 쿠폰 이름
FROM
GC_BENEFIT_REWARD br
LEFT JOIN
GC_COUPON_SNDNG cs ON br.COUPON_INNB = cs.COUPON_SNDNG_INNB
AND cs.SOPMAL_CD = #{sopmalCd}
WHERE
br.BNF_INNB = #{bnfInnb}
AND br.BNF_RWD_CATE_DV_CD LIKE '14%' -- 모바일스탬프(140) 관련 보상
ORDER BY
br.BNF_RWD_CATE_DV_CD
LIMIT 1
</select>
<!-- 스탬프 혜택 참여 정보 저장 -->
<insert id="insertStampParticipation"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
useGeneratedKeys="true"
keyProperty="bnfPrtInnb"
keyColumn="BNF_PRT_INNB">
-- 스탬프 적립 시 혜택 참여 정보 저장
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_INNB, -- 혜택 고유 번호
BNF_PRT_DT, -- 혜택 참여 일시
MBR_INNB, -- 회원 고유 번호
MBR_DV_CD, -- 회원 구분 코드
STR_INNB, -- 매장 고유번호 (스탬프용)
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
#{strInnb},
#{regusr},
NOW()
)
</insert>
<!-- 스탬프 혜택 설정 정보 조회 -->
<select id="selectStampBenefitInfo"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
-- 스탬프 혜택 설정 정보 조회
SELECT
BNF_INNB, -- 혜택 고유 번호
USE_AT, -- 사용여부
BNF_BGN_DT, -- 진행기간 시작일시
BNF_END_DT, -- 진행기간 종료일시
SCR_REPRSNT_IMG, -- 화면 대표 이미지 경로
SCR_RWD_IMG, -- 보상 이미지 경로
BNF_WORDS_CN -- 혜택 안내 문구
FROM
GC_BENEFIT
WHERE
BNF_DV_CD = '140' -- 모바일스탬프 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd}
ORDER BY
BNF_INNB DESC
LIMIT 1
]]>
</select>
<!-- 혜택 보상 영수증 저장 수정 -->
<insert id="insertMileageReceipt" parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
useGeneratedKeys="true" keyProperty="bnfRcvInnb" keyColumn="BNF_RCV_INNB">
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_PRT_INNB, -- 혜택 참여 고유 번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 보상 금액
COUPON_INNB, -- 쿠폰 고유 번호
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{bnfPrtInnb},
#{bnfRwdCateDvCd},
#{bnfRwdGodsDvCd},
#{mlgRwdAmt},
#{couponInnb},
#{regusr},
NOW()
)
</insert>
<!-- Step 2: PK 기준 교환권 완료 처리 -->
<update id="completeExchangeTicketByPk"
parameterType="Long">
-- PK 기준 교환권 완료 처리
UPDATE
GC_BENEFIT_STMP_EXTIKET
SET
EXCHNG_AT = 'Y',
EXCHNG_DT = NOW(),
UPDT_DT = NOW()
WHERE
BNF_EXTIKET_INNB = #{bnfExtiketInnb}
</update>
<!-- 스탬프 적립 기준 금액 조회 (gc_benefit_chg_config에서) -->
<select id="selectStampAccumulationAmount"
parameterType="String"
resultType="java.lang.Double">
-- 스탬프 적립 기준 금액 조회 (gc_benefit_chg_config 테이블에서)
SELECT
AMT_FOR_CHG AS AMT_FOR_CHG
FROM
GC_BENEFIT_CHG_CONFIG
WHERE
SOPMAL_CD = #{sopmalCd}
AND BNF_DV_CD = '140' -- 모바일스탬프 구분 코드
LIMIT 1
</select>
<!-- 아직 스탬프 적립되지 않은 구매건만 조회 -->
<select id="selectUnprocessedStoreOrders"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
-- 아직 스탬프 적립되지 않은 매장 구매건만 조회
SELECT
O.ORDR_INNB AS ordrInnb, -- 주문 고유번호
O.STR_INNB AS strInnb, -- 매장 고유번호
O.RL_SETLE_AMT AS rlSetleAmt, -- 실 결제금액
CASE
WHEN ST.STR_NM IS NOT NULL THEN ST.STR_NM
WHEN ST.TENTCPN_NM IS NOT NULL THEN ST.TENTCPN_NM
ELSE CONCAT('매장_', O.STR_INNB)
END AS strNm, -- 매장명
DATE_FORMAT(O.SETLE_COMPT_DT, '%Y-%m-%d %H:%i:%s') AS setleComptDt, -- 결제완료일시
O.SLE_ENVRN_CD AS sleEnvrnCd, -- 판매환경코드
O.SKN_ENVRN_CD AS sknEnvrnCd -- 스킨환경코드
FROM
GC_ORDER O
LEFT JOIN
GC_STORE ST ON O.STR_INNB = ST.STR_INNB
LEFT JOIN
GC_BENEFIT_STMP BS ON O.ORDR_INNB = BS.PURCHS_INNB
AND O.MBR_INNB = BS.MBR_INNB
AND O.MBR_DV_CD = BS.MBR_DV_CD
AND O.SOPMAL_CD = BS.SOPMAL_CD
WHERE
O.MBR_INNB = #{mbrInnb}
AND O.MBR_DV_CD = #{mbrDvCd}
AND O.SOPMAL_CD = #{sopmalCd}
AND O.USE_AT = 'Y'
AND O.ORDR_STTUS_CD IN ('25', '30', '35', '40', '45', '50', '55', '60', '65', '70', '75', '80') -- 결제완료 이후 상태만
AND (
-- gc_order 참고사항: 매장 구매금액 조건
O.SLE_ENVRN_CD IN ('S1', 'S2', 'S3')
OR O.SKN_ENVRN_CD = 'POS'
)
<if test="strInnb != null and strInnb != '' and strInnb != 'null'">
AND O.STR_INNB = #{strInnb}
</if>
AND O.SETLE_COMPT_DT IS NOT NULL
AND O.SETLE_COMPT_DT &gt;= DATE_SUB(NOW(), INTERVAL 12 MONTH) -- 최근 12개월 데이터만
AND BS.BNF_STMP_INNB IS NULL -- 아직 스탬프 적립 기록이 없는 주문만
ORDER BY
O.SETLE_COMPT_DT DESC
</select>
<!-- 첫 스탬프 적립일 조회 -->
<select id="selectFirstStampAccumulationDate"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="java.sql.Date">
-- 해당 매장의 첫 스탬프 적립일 조회
SELECT
MIN(DATE(REGIST_DT)) AS FIRST_STAMP_DATE
FROM
GC_BENEFIT_STMP
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND STR_INNB = #{strInnb}
</select>
<!-- 특정 주문으로 적립된 스탬프 기록 조회 -->
<select id="selectStampsByPurchaseOrder"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
BNF_STMP_INNB,
STMP_CNT,
REFUND_AT, -- EXCHNG_AT 대신 REFUND_AT 사용
ORDR_INNB
FROM
GC_BENEFIT_STMP
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND ORDR_INNB = #{ordrInnb}
AND STR_INNB = #{strInnb}
AND REFUND_AT = 'N' -- 환불되지 않은 기록만 조회
</select>
<!-- 스탬프 기록 삭제 → 환불 처리로 변경 -->
<update id="updateStampRefundStatus" parameterType="Long">
-- 스탬프 환불 처리 (삭제 대신 상태 변경)
UPDATE GC_BENEFIT_STMP
SET
REFUND_AT = 'Y',
REGIST_DT = NOW()
WHERE
BNF_STMP_INNB = #{bnfStmpInnb}
AND REFUND_AT = 'N'
</update>
<!-- 환불 처리 시 스탬프 차감용 UPDATE 쿼리 추가 -->
<update id="updateRefundStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO">
-- 환불 처리 시 스탬프 차감
UPDATE GC_BENEFIT_STMP
SET
REFUND_AT = 'Y',
UPDT_DT = NOW()
WHERE
ORDR_INNB = #{ordrInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND REFUND_AT = 'N'
</update>
<!-- 특정 주문의 스탬프 정보 조회 -->
<select id="selectStampByOrder"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
-- 주문번호로 스탬프 정보 조회
SELECT
BS.BNF_STMP_INNB AS BNF_STMP_INNB,
BS.ORDR_INNB AS ORDR_INNB,
BS.REFUND_AT AS REFUND_AT,
BS.PURCHS_AMT AS PURCHS_AMT,
BS.RL_SETLE_AMT AS RL_SETLE_AMT,
BS.STMP_CNT AS STMP_CNT,
BS.AMT_FOR_CHG AS AMT_FOR_CHG,
DATE_FORMAT(BS.SETLE_COMPT_DT, '%Y-%m-%d %H:%i:%s') AS SETLE_COMPT_DT,
DATE_FORMAT(BS.REGIST_DT, '%Y-%m-%d %H:%i:%s') AS REGIST_DT
FROM
GC_BENEFIT_STMP BS
WHERE
BS.ORDR_INNB = #{ordrInnb}
AND BS.MBR_INNB = #{mbrInnb}
AND BS.MBR_DV_CD = #{mbrDvCd}
AND BS.SOPMAL_CD = #{sopmalCd}
</select>
<!-- 주문 처리 여부 확인 쿼리 추가 -->
<select id="countProcessedOrder"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="int">
SELECT COUNT(*)
FROM GC_BENEFIT_STMP
WHERE SOPMAL_CD = #{sopmalCd}
AND MBR_INNB = #{mbrInnb}
AND ORDR_INNB = #{purchsInnb}
</select>
<!-- 환불로 인해 영향받은 교환권 삭제 -->
<delete id="deleteAffectedExchangeTickets"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO">
<![CDATA[
-- 환불된 스탬프로 인해 유효하지 않은 교환권 삭제
DELETE FROM GC_BENEFIT_STMP_EXTIKET
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND STR_INNB = #{strInnb}
AND EXCHNG_AT = 'N' -- 미교환 교환권만
AND EXTIKET_STMP_CNT > (
-- 현재 유효한 스탬프 수보다 교환권 스탬프가 많으면 삭제
SELECT IFNULL(SUM(STMP_CNT), 0)
FROM GC_BENEFIT_STMP
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND STR_INNB = #{strInnb}
AND REFUND_AT = 'N'
)
]]>
</delete>
<!-- 교환안된 교환권 조회 (오래된 순) -->
<select id="selectUnexchangedTicketsForDeduction"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
BNF_EXTIKET_INNB,
EXTIKET_STMP_CNT
FROM
GC_BENEFIT_STMP_EXTIKET
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND STR_INNB = #{strInnb}
AND EXCHNG_AT = 'N' -- 교환안된 것만
ORDER BY
REGIST_DT ASC -- 오래된 것부터 처리
</select>
<!-- 교환권 스탬프 수 감소 -->
<update id="reduceExchangeTicketStamps"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO">
UPDATE GC_BENEFIT_STMP_EXTIKET
SET
EXTIKET_STMP_CNT = EXTIKET_STMP_CNT - #{deductStampCnt},
UPDT_DT = NOW()
WHERE
BNF_EXTIKET_INNB = #{bnfExtiketInnb}
AND EXTIKET_STMP_CNT >= #{deductStampCnt}
</update>
<!-- 특정 교환권 삭제 -->
<delete id="deleteSpecificExchangeTicket" parameterType="Long">
DELETE FROM GC_BENEFIT_STMP_EXTIKET
WHERE BNF_EXTIKET_INNB = #{bnfExtiketInnb}
</delete>
</mapper>

View File

@@ -0,0 +1,234 @@
<?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.wb.domainserver.domain.gcone.bnft.qrevnt.mapper.BOQREvntMapper">
<!-- QR이벤트 혜택 정보 조회 -->
<select id="selectQREventBenefitInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.qrevnt.vo.BOQREvntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
b.BNF_INNB, -- 혜택 고유 번호
b.BNF_SJ, -- 혜택 제목
b.USE_AT, -- 사용여부
b.BNF_BGN_DT, -- 진행기간 시작일시
b.BNF_END_DT, -- 진행기간 종료일시
b.SCR_REPRSNT_IMG, -- 화면 대표 이미지
b.SCR_REPRSNT_IMG_NM, -- 화면 대표 이미지명
b.SCR_REPRSNT_LINK_URL, -- 화면 대표 링크 URL
b.SCR_RWD_IMG, -- 화면 보상 이미지
b.SCR_RWD_IMG_NM, -- 화면 보상 이미지명
b.SCR_RWD_LINK_URL, -- 화면 보상 링크 URL
b.BNF_WORDS_CN, -- 혜택 안내
gd.WORDS_CN_1, -- 안내문 1 (이벤트 설명)
gd.WORDS_CN_2, -- 안내문 2 (쿠폰 사용법)
gd.WORDS_CN_3 -- 안내문 3 (기타 안내)
FROM
GC_BENEFIT b
LEFT JOIN GC_BENEFIT_GDCC gd ON b.BNF_DV_CD = gd.BNF_DV_CD
AND b.SOPMAL_CD = gd.SOPMAL_CD
WHERE
b.BNF_DV_CD = '150' -- QR이벤트 혜택 구분 코드
AND b.USE_AT = 'Y'
AND DATE(NOW()) BETWEEN DATE(b.BNF_BGN_DT) AND DATE(b.BNF_END_DT)
AND b.SOPMAL_CD = #{sopmalCd}
ORDER BY
b.BNF_INNB
]]>
</select>
<!-- QR이벤트 보상 정보 조회 -->
<select id="selectQREventRewardInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.qrevnt.vo.BOQREvntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
br.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
br.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
br.MLG_RWD_AMT, -- 마일리지 보상 금액
br.COUPON_INNB, -- 쿠폰 고유 번호
COALESCE(cs.COUPON_SNDNG_NM, br.ITM_NM) AS ITM_NM, -- 쿠폰 이름
br.PRZWIN_QY, -- 당첨수량
br.PRZWIN_PRC, -- 당첨확률
cs.DWLD_BGN_DT, -- 다운로드 시작일 (사용유효시작일 대체)
cs.DWLD_END_DT, -- 다운로드 종료일 (사용유효종료일 대체)
cs.COUPON_SNDNG_DC -- 쿠폰 설명 (사용조건내용 대체)
FROM
GC_BENEFIT_REWARD br
LEFT JOIN GC_COUPON_SNDNG cs ON br.COUPON_INNB = cs.COUPON_SNDNG_INNB
AND cs.SOPMAL_CD = #{sopmalCd}
WHERE
br.BNF_INNB = #{bnfInnb}
ORDER BY
br.PRZWIN_PRC DESC
]]>
</select>
<!-- 매장별 참여 여부 확인 -->
<select id="selectStoreParticipationStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.qrevnt.vo.BOQREvntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
COUNT(*) AS participationCount -- 참여 횟수
FROM
GC_BENEFIT_PARTCPTN
WHERE
MBR_INNB = #{mbrInnb} -- 회원 고유 번호
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb} -- 혜택 고유 번호
AND STR_INNB = #{strInnb} -- 매장 고유 번호
AND DATE(BNF_PRT_DT) BETWEEN DATE(#{bnfBgnDt}) AND DATE(#{bnfEndDt}) -- 이벤트 기간 내
]]>
</select>
<!-- 전체 참여 여부 확인 (아이디당 1회) -->
<select id="selectTotalParticipationStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.qrevnt.vo.BOQREvntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
COUNT(*) AS totalParticipationCount -- 전체 참여 횟수
FROM
GC_BENEFIT_PARTCPTN
WHERE
MBR_INNB = #{mbrInnb} -- 회원 고유 번호
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb} -- 혜택 고유 번호
AND DATE(BNF_PRT_DT) BETWEEN DATE(#{bnfBgnDt}) AND DATE(#{bnfEndDt}) -- 이벤트 기간 내
]]>
</select>
<!-- 매장 정보 조회 -->
<select id="selectStoreInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.qrevnt.vo.BOQREvntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
STR_INNB, -- 매장 고유번호
STR_NM, -- 매장명
STR_CD, -- 매장 코드
STR_ADRES, -- 매장 주소
STR_RNM_ADRES, -- 매장 도로명 주소
STR_TELNB, -- 매장 전화번호
CTY_DO, -- 시도
CTY_GUN_GU -- 시군구
FROM
GC_STORE
WHERE
STR_INNB = #{strInnb}
AND TENT_STTUS = '02' -- 개점 상태
]]>
</select>
<!-- QR이벤트 참여 처리 -->
<insert id="participateQREvent" parameterType="com.wb.domainserver.domain.gcone.bnft.qrevnt.vo.BOQREvntVO" useGeneratedKeys="true" keyProperty="bnfPrtInnb" keyColumn="BNF_PRT_INNB">
<![CDATA[
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_INNB, -- 혜택 고유 번호
BNF_PRT_DT, -- 혜택 참여 일시
MBR_INNB, -- 회원 고유 번호
MBR_DV_CD, -- 회원 구분 코드
STR_INNB, -- 매장 고유 번호
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
#{strInnb},
#{regusr},
NOW()
)
]]>
</insert>
<!-- QR이벤트 당첨 결과 처리 (쿠폰 발급) -->
<insert id="insertQREventReward" parameterType="com.wb.domainserver.domain.gcone.bnft.qrevnt.vo.BOQREvntVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_RCV_INNB, -- 혜택 보상수령 고유 번호
BNF_PRT_INNB, -- 혜택 참여 고유 번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 보상 금액
COUPON_INNB, -- 쿠폰 고유 번호
GOODS_INNB, -- 상품 고유 번호
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{bnfRcvInnb},
#{bnfPrtInnb},
#{bnfRwdCateDvCd},
#{bnfRwdGodsDvCd},
#{mlgRwdAmt},
#{couponInnb},
#{goodsInnb},
#{regusr},
NOW()
)
]]>
</insert>
<!-- QR이벤트 참여 내역 조회 -->
<select id="selectQREventParticipationHistory" parameterType="com.wb.domainserver.domain.gcone.bnft.qrevnt.vo.BOQREvntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
p.BNF_PRT_INNB, -- 혜택 참여 고유 번호
p.BNF_PRT_DT, -- 혜택 참여 일시
p.STR_INNB, -- 매장 고유 번호
s.STR_NM, -- 매장명
s.STR_ADRES, -- 매장 주소
r.BNF_RCV_INNB, -- 보상 수령 고유 번호 (당첨 여부 확인용)
r.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
r.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
r.MLG_RWD_AMT, -- 마일리지 보상 금액
r.COUPON_INNB, -- 쿠폰 고유 번호
COALESCE(cs.COUPON_SNDNG_NM, br.ITM_NM) AS couponName, -- 쿠폰명
cs.DWLD_BGN_DT, -- 다운로드 시작일 (사용유효시작일 대체)
cs.DWLD_END_DT, -- 다운로드 종료일 (사용유효종료일 대체)
cs.COUPON_SNDNG_DC -- 쿠폰 설명 (사용조건내용 대체)
FROM
GC_BENEFIT_PARTCPTN p
LEFT JOIN GC_STORE s ON p.STR_INNB = s.STR_INNB
LEFT JOIN GC_BENEFIT_RECEIPT r ON p.BNF_PRT_INNB = r.BNF_PRT_INNB
LEFT JOIN GC_BENEFIT_REWARD br ON p.BNF_INNB = br.BNF_INNB
AND r.BNF_RWD_CATE_DV_CD = br.BNF_RWD_CATE_DV_CD
AND r.BNF_RWD_GODS_DV_CD = br.BNF_RWD_GODS_DV_CD
LEFT JOIN GC_COUPON_SNDNG cs ON r.COUPON_INNB = cs.COUPON_SNDNG_INNB
AND cs.SOPMAL_CD = #{sopmalCd}
WHERE
p.MBR_INNB = #{mbrInnb} -- 회원 고유 번호
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.BNF_INNB = #{bnfInnb} -- 혜택 고유 번호
ORDER BY
p.BNF_PRT_DT DESC
]]>
</select>
<!-- QR이벤트 당첨 정보 상세 조회 -->
<select id="selectQREventWinningDetail" parameterType="com.wb.domainserver.domain.gcone.bnft.qrevnt.vo.BOQREvntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
p.BNF_PRT_INNB, -- 혜택 참여 고유 번호
p.BNF_PRT_DT, -- 혜택 참여 일시
s.STR_NM, -- 참여 매장명
s.STR_ADRES, -- 매장 주소
r.BNF_RCV_INNB, -- 보상 수령 고유 번호
r.COUPON_INNB AS couponNb, -- 쿠폰 번호 (발송 고유번호로 대체)
cs.COUPON_SNDNG_NM AS couponName, -- 쿠폰명
cs.COUPON_SNDNG_DC AS useCndtnCn, -- 쿠폰 설명 (사용조건으로 사용)
br.DSCNT_AMT AS dscntAmt, -- 할인 금액
br.DSCNT_RT AS dscntRt, -- 할인 율
DATE_FORMAT(cs.DWLD_END_DT, '%Y-%m-%d') AS expiryDateTime -- 유효기간
FROM
GC_BENEFIT_PARTCPTN p
INNER JOIN GC_STORE s ON p.STR_INNB = s.STR_INNB
INNER JOIN GC_BENEFIT_RECEIPT r ON p.BNF_PRT_INNB = r.BNF_PRT_INNB
INNER JOIN GC_COUPON_SNDNG cs ON r.COUPON_INNB = cs.COUPON_SNDNG_INNB
AND cs.SOPMAL_CD = #{sopmalCd}
INNER JOIN GC_BENEFIT_REWARD br ON p.BNF_INNB = br.BNF_INNB
AND r.BNF_RWD_CATE_DV_CD = br.BNF_RWD_CATE_DV_CD
AND r.BNF_RWD_GODS_DV_CD = br.BNF_RWD_GODS_DV_CD
WHERE
p.BNF_PRT_INNB = #{bnfPrtInnb} -- 혜택 참여 고유 번호
AND p.MBR_INNB = #{mbrInnb} -- 회원 고유 번호
AND p.MBR_DV_CD = #{mbrDvCd}
]]>
</select>
</mapper>

View File

@@ -0,0 +1,297 @@
<?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.wb.domainserver.domain.gcone.bnft.rougame.mapper.BORougameMapper">
<!-- 룰렛 혜택 기본 정보 조회 -->
<select id="selectRougameBenefitInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_INNB, -- 혜택 설정 고유번호
BNF_DV_CD, -- 혜택 구분 코드
USE_AT, -- 사용여부
BNF_BGN_DT, -- 진행기간 시작일시
BNF_END_DT, -- 진행기간 종료일시
SCR_REPRSNT_IMG, -- 화면 대표 이미지
SCR_REPRSNT_LINK_URL, -- 화면 대표 링크 URL
SCR_RWD_IMG, -- 화면 보상 이미지
SCR_RWD_LINK_URL, -- 화면 보상 링크 URL
BNF_WORDS_CN -- 혜택 안내
FROM
GC_BENEFIT
WHERE
BNF_DV_CD = '040' -- 룰렛 혜택 구분 코드
AND USE_AT = 'Y'
AND DATE(NOW()) BETWEEN DATE(BNF_BGN_DT) AND DATE(BNF_END_DT)
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
]]>
</select>
<!-- 남은 게임 참여 기회 횟수 조회 수정 -->
<select id="selectRemainingGameChances" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
#{mbrInnb} as MBR_INNB, -- 회원 고유번호
'040' as BNF_DV_CD, -- 혜택 구분 코드
(
-- 할당된 총 기회 계산
COALESCE(
(SELECT SUM(CHG_CNT) FROM GC_BENEFIT_CHARGE
WHERE MBR_INNB = #{mbrInnb} AND BNF_DV_CD = '040' AND SOPMAL_CD = #{sopmalCd} AND MBR_DV_CD = #{mbrDvCd})
, 0)
-
-- 사용한 기회 계산
COALESCE(
(SELECT COUNT(*) FROM GC_BENEFIT_PARTCPTN BP
INNER JOIN GC_BENEFIT B ON BP.BNF_INNB = B.BNF_INNB
WHERE BP.MBR_INNB = #{mbrInnb}
AND B.BNF_DV_CD = '040' AND B.SOPMAL_CD = #{sopmalCd} AND BP.MBR_DV_CD = #{mbrDvCd})
, 0)
) as remainingGameChances, -- 남아있는 게임 횟수
-- 실제 GC_BENEFIT_CHARGE 테이블에 레코드가 있는지 확인
(
SELECT COUNT(*) FROM GC_BENEFIT_CHARGE
WHERE MBR_INNB = #{mbrInnb} AND BNF_DV_CD = '040' AND SOPMAL_CD = #{sopmalCd} AND MBR_DV_CD = #{mbrDvCd}
) as hasChargeRecord
]]>
</select>
<!-- 룰렛 보상 정보 조회 -->
<select id="selectRougameRewards" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_INNB, -- 혜택 설정 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
COUPON_INNB, -- 쿠폰 고유번호
ITM_NM, -- 표시명
PRZWIN_QY, -- 당첨수량
PRZWIN_PRC, -- 당첨확률
DSCNT_AMT, -- 할인금액
DSCNT_RT -- 할인비율
FROM
GC_BENEFIT_REWARD
WHERE
BNF_INNB = #{bnfInnb} -- 혜택 설정 고유번호 조건
]]>
</select>
<!-- 초록잎 지급량 조회 -->
<select id="selectLeafCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PYMNT_CNT, -- 지급 초록잎 개수
SPECIAL_CNT -- 스페셜 지급 초록잎 개수
FROM
GC_BENEFIT_CPSLMKN
WHERE
BNF_DV_CD = '040' -- 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!-- 룰렛 참여 정보 저장 (초록잎 적립 포함) -->
<insert id="insertRougameParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO">
<selectKey keyProperty="bnfPrtInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_INNB, -- 혜택 설정 고유번호
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
BNF_PRT_DT, -- 혜택 참여 일시
PRT_LEAF_CNT, -- 참여 초록잎 개수 (추가)
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{bnfPrtInnb}, -- 혜택 참여 고유번호
#{bnfInnb}, -- 혜택 설정 고유번호
#{mbrInnb}, -- 회원 고유번호
#{mbrDvCd}, -- 회원 구분 코드
NOW(), -- 혜택 참여 일시 (현재 시간)
#{paidLeafCnt}, -- 초록잎 지급량 (추가)
#{regusr}, -- 등록자
NOW() -- 등록 일시 (현재 시간)
)
]]>
</insert>
<!-- 마지막으로 삽입된 참여 고유번호 조회 -->
<select id="selectLastInsertedParticipationId" resultType="long">
<![CDATA[
SELECT LAST_INSERT_ID()
]]>
</select>
<!-- 혜택 보상 수령 정보 저장 -->
<insert id="insertRougameReceipt" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_RCV_INNB, -- 혜택 보상수령 고유번호
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
COUPON_INNB, -- 쿠폰고유번호
GOODS_INNB, -- 상품고유번호
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{bnfRcvInnb}, -- 혜택 보상수령 고유번호
#{bnfPrtInnb}, -- 혜택 참여 고유번호
#{bnfRwdCateDvCd}, -- 보상 항목 구분 코드
#{bnfRwdGodsDvCd}, -- 보상 상품 구분 코드
#{mlgRwdAmt}, -- 마일리지 금액
#{couponInnb}, -- 쿠폰고유번호
#{goodsInnb}, -- 상품고유번호
#{regusr}, -- 등록자
NOW() -- 등록 일시 (현재 시간)
)
]]>
</insert>
<!-- 보상 당첨 수량 차감 -->
<update id="decrementRewardQuantity" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO">
<![CDATA[
UPDATE GC_BENEFIT_REWARD
SET PRZWIN_QY = CASE
WHEN PRZWIN_QY > 0 THEN PRZWIN_QY - 1
ELSE 0
END
WHERE BNF_INNB = #{bnfInnb}
AND BNF_RWD_CATE_DV_CD = #{bnfRwdCateDvCd}
]]>
</update>
<!-- 혜택 충전 설정 정보 조회 -->
<select id="selectBenefitChgConfig" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
AMT_FOR_CHG -- 기회 제공 기준 금액
FROM
GC_BENEFIT_CHG_CONFIG
WHERE
BNF_DV_CD = '040' -- 룰렛 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 추가
]]>
</select>
<!-- 게임 기회 신규 등록 -->
<insert id="insertGameChances" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO">
<![CDATA[
INSERT INTO GC_BENEFIT_CHARGE (
BNF_PURCHS_RCV_LOG_INNB, -- 혜택 구매확정 수신 로그 고유번호
SOPMAL_CD, -- 쇼핑몰 코드
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드 추가
BNF_DV_CD, -- 혜택 구분 코드
CHG_CNT, -- 충전 횟수
REGIST_DT -- 등록 일시
) VALUES (
0, -- 혜택 구매확정 수신 로그 고유번호
#{sopmalCd}, -- 쇼핑몰 코드
#{mbrInnb}, -- 회원 고유번호
#{mbrDvCd}, -- 회원 구분 코드
'040', -- 혜택 구분 코드 (룰렛)
#{remainingGameChances}, -- 계산된 게임 기회
NOW() -- 등록 일시 (현재 시간)
)
]]>
</insert>
<!-- 게임 기회 업데이트 -->
<update id="updateGameChances" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO">
<![CDATA[
UPDATE GC_BENEFIT_CHARGE
SET CHG_CNT = #{remainingGameChances},
REGIST_DT = NOW()
WHERE
SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 조건 추가
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드 추가
AND BNF_DV_CD = '040'
]]>
</update>
<!-- 전체 보상 수량 상태 조회 -->
<select id="selectAllRewardsQuantityStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
COUNT(*) as totalRewards, -- 전체 보상 종류 수
COUNT(CASE WHEN PRZWIN_QY > 0 THEN 1 END) as availableRewards, -- 수량이 있는 보상 수
SUM(PRZWIN_QY) as totalQuantity -- 전체 남은 수량 합계
FROM
GC_BENEFIT_REWARD
WHERE
BNF_INNB = #{bnfInnb}
]]>
</select>
<!-- 실제 남은 수량을 계산하는 보상 조회 -->
<select id="selectAvailableRewards" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
r.BNF_INNB,
r.BNF_RWD_CATE_DV_CD,
r.BNF_RWD_GODS_DV_CD,
r.MLG_RWD_AMT,
r.COUPON_INNB,
r.ITM_NM,
r.PRZWIN_QY, -- 설정된 당첨 수량
r.PRZWIN_PRC,
r.DSCNT_AMT,
r.DSCNT_RT,
-- 실제 당첨된 수량 계산
COALESCE(
(SELECT COUNT(*)
FROM GC_BENEFIT_RECEIPT rcpt
INNER JOIN GC_BENEFIT_PARTCPTN part ON rcpt.BNF_PRT_INNB = part.BNF_PRT_INNB
WHERE part.BNF_INNB = r.BNF_INNB
AND rcpt.BNF_RWD_CATE_DV_CD = r.BNF_RWD_CATE_DV_CD), 0
) as ISSUED_QY, -- 실제 당첨된 수량
-- 남은 수량 계산
(r.PRZWIN_QY - COALESCE(
(SELECT COUNT(*)
FROM GC_BENEFIT_RECEIPT rcpt
INNER JOIN GC_BENEFIT_PARTCPTN part ON rcpt.BNF_PRT_INNB = part.BNF_PRT_INNB
WHERE part.BNF_INNB = r.BNF_INNB
AND rcpt.BNF_RWD_CATE_DV_CD = r.BNF_RWD_CATE_DV_CD), 0
)) as REMAINING_QY -- 남은 수량
FROM
GC_BENEFIT_REWARD r
WHERE
r.BNF_INNB = #{bnfInnb}
-- 남은 수량이 0보다 큰 보상만 조회
AND (r.PRZWIN_QY - COALESCE(
(SELECT COUNT(*)
FROM GC_BENEFIT_RECEIPT rcpt
INNER JOIN GC_BENEFIT_PARTCPTN part ON rcpt.BNF_PRT_INNB = part.BNF_PRT_INNB
WHERE part.BNF_INNB = r.BNF_INNB
AND rcpt.BNF_RWD_CATE_DV_CD = r.BNF_RWD_CATE_DV_CD), 0
)) > 0
ORDER BY r.PRZWIN_PRC DESC
]]>
</select>
<!-- 회원 디바이스 등록일 조회 -->
<select id="selectMemberDeviceRegistDate" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
DATE_FORMAT(MDI.REGIST_DT, '%Y-%m-%d') as DEVICE_REGIST_DT
FROM
GC_MEMBER_DEVICE_INFO MDI
INNER JOIN
GC_MEMBER M ON MDI.MBR_INNB = M.MBR_INNB
AND MDI.MBR_DV_CD = M.MBR_DV_CD
WHERE
MDI.SOPMAL_CD = #{sopmalCd}
AND MDI.MBR_INNB = #{mbrInnb}
AND MDI.MBR_DV_CD = #{mbrDvCd}
ORDER BY MDI.REGIST_DT ASC
LIMIT 1
]]>
</select>
</mapper>

View File

@@ -0,0 +1,431 @@
<?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.wb.domainserver.domain.gcone.bnft.stepcnt.mapper.BOStepcntMapper">
<!-- 현재 회원의 최신 걸음 수 조회 -->
<select id="selectCurrentStepCount" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
BP.BNF_PRT_INNB as BNF_PRT_INNB, -- 혜택 참여 고유번호
BP.STEP_CNT as STEP_CNT, -- 현재 걸음 수
BP.BNF_PRT_DT as participationDate, -- 참여 일시
BP.MBR_INNB as memberNo -- 회원 고유번호
FROM
GC_BENEFIT_PARTCPTN BP
INNER JOIN
GC_BENEFIT B ON BP.BNF_INNB = B.BNF_INNB
WHERE
BP.MBR_INNB = #{mbrInnb} -- 회원 고유번호 조건
AND BP.MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드
AND B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND DATE(BP.BNF_PRT_DT) = CURDATE() -- 오늘 날짜 기준
ORDER BY
BP.BNF_PRT_DT DESC -- 최신 정보 우선
LIMIT 1
</select>
<!-- 이번 달 만보 달성 현황 조회 -->
<select id="selectMonthlyStepCountAchievement" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
DATE(BP.BNF_PRT_DT) as achievementDate, -- 달성 일자
MAX(BP.STEP_CNT) as stepCount, -- 일별 최대 걸음 수
CASE WHEN MAX(BP.STEP_CNT) &gt;= 10000 THEN 'Y' ELSE 'N' END as isAchieved -- 만보 달성 여부
FROM
GC_BENEFIT_PARTCPTN BP
INNER JOIN
GC_BENEFIT B ON BP.BNF_INNB = B.BNF_INNB
WHERE
BP.MBR_INNB = #{mbrInnb} -- 회원 고유번호 조건
AND BP.MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드
AND B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND DATE_FORMAT(BP.BNF_PRT_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m') -- 이번 달 필터링
GROUP BY
DATE(BP.BNF_PRT_DT) -- 일자별 그룹화
ORDER BY
DATE(BP.BNF_PRT_DT) -- 날짜순 정렬
</select>
<!-- 이번 달 만보 달성 횟수 조회 -->
<select id="selectMonthlyStepCountAchievementCount" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="int">
SELECT
COUNT(DISTINCT DATE(BP.BNF_PRT_DT)) as achievementCount -- 만보 달성한 날짜 수
FROM
GC_BENEFIT_PARTCPTN BP
INNER JOIN
GC_BENEFIT B ON BP.BNF_INNB = B.BNF_INNB
WHERE
BP.MBR_INNB = #{mbrInnb} -- 회원 고유번호 조건
AND BP.MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드
AND B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND DATE_FORMAT(BP.BNF_PRT_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m') -- 이번 달 필터링
AND BP.STEP_CNT &gt;= 10000 -- 만보 이상 조건
</select>
<!-- 선택한 달의 일별 걸음 수 내역 조회 -->
<select id="selectDailyStepCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
DATE(BP.BNF_PRT_DT) as recordDate, -- 기록 일자
MAX(BP.STEP_CNT) as stepCount, -- 일별 최대 걸음 수
CASE
WHEN MAX(BP.STEP_CNT) &gt;= 10000 THEN 100
ELSE FLOOR(MAX(BP.STEP_CNT) * 100 / 10000)
END as achievementRate, -- 달성률(%) 계산
CASE
WHEN MAX(BP.STEP_CNT) &gt;= 10000 THEN 4 -- 만보 달성
WHEN MAX(BP.STEP_CNT) &gt;= 7500 THEN 3 -- 7500 이상
WHEN MAX(BP.STEP_CNT) &gt;= 5000 THEN 2 -- 5000 이상
WHEN MAX(BP.STEP_CNT) &gt;= 2500 THEN 1 -- 2500 이상
ELSE 0 -- 2500 미만
END as achievementLevel -- 달성 레벨(0~4)
FROM
GC_BENEFIT_PARTCPTN BP
INNER JOIN
GC_BENEFIT B ON BP.BNF_INNB = B.BNF_INNB
WHERE
BP.MBR_INNB = #{mbrInnb} -- 회원 고유번호 조건
AND BP.MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드
AND B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND DATE_FORMAT(BP.BNF_PRT_DT, '%Y-%m') = #{yearMonth} -- 선택한 년월 기준
GROUP BY
DATE(BP.BNF_PRT_DT) -- 일자별 그룹화
ORDER BY
DATE(BP.BNF_PRT_DT) -- 날짜순 정렬
</select>
<!-- 이번 달 만보기 사용 통계 조회 -->
<select id="selectMonthlyStepCountStats" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
ROUND((SELECT AVG(STEP_CNT)
FROM GC_BENEFIT_PARTCPTN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND DATE_FORMAT(BNF_PRT_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')
), 0) as avgStepCount, -- 하루 평균 걸음 수 (조인 영향 없이 계산)
rewardStats.surpriseGiftCount, -- 깜짝선물 획득 수
rewardStats.totalMileage -- 획득한 마일리지 합계
FROM (
SELECT
COUNT(CASE WHEN BR.BNF_RWD_CATE_DV_CD IN ('02030','02031','02032','02033','02034','02035','02036') THEN 1 END) as surpriseGiftCount,
SUM(CASE WHEN BR.BNF_RWD_GODS_DV_CD = '010' THEN BR.MLG_RWD_AMT ELSE 0 END) as totalMileage
FROM
GC_BENEFIT_PARTCPTN BP
LEFT JOIN
GC_BENEFIT_RECEIPT BR ON BR.BNF_PRT_INNB = BP.BNF_PRT_INNB
LEFT JOIN
GC_BENEFIT B ON BP.BNF_INNB = B.BNF_INNB AND B.BNF_DV_CD = '020'
WHERE
BP.MBR_INNB = #{mbrInnb}
AND BP.MBR_DV_CD = #{mbrDvCd}
AND DATE_FORMAT(BP.BNF_PRT_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')
) rewardStats
</select>
<!-- 보상 정보 조회 -->
<select id="selectStepCountReward" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
B.BNF_INNB as bnfInnb, -- 혜택 고유번호
BR.BNF_RWD_CATE_DV_CD as rewardCategoryCode, -- 보상 항목 구분 코드
BR.BNF_RWD_GODS_DV_CD as rewardGoodsCode, -- 보상 상품 구분 코드
BR.MLG_RWD_AMT as mileageAmount, -- 마일리지 보상 금액
BR.COUPON_INNB as couponNo, -- 쿠폰 고유번호
BR.RWD_CND_CNT as rewardConditionCount -- 보상 조건 걸음 수
FROM
GC_BENEFIT B
INNER JOIN
GC_BENEFIT_REWARD BR ON B.BNF_INNB = BR.BNF_INNB
WHERE
B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND B.USE_AT = 'Y' -- 사용 여부 체크
AND B.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND (B.BNF_BGN_DT IS NULL OR B.BNF_BGN_DT &lt;= NOW()) -- 시작일 체크
AND (B.BNF_END_DT IS NULL OR B.BNF_END_DT &gt;= NOW()) -- 종료일 체크
AND BR.BNF_RWD_CATE_DV_CD = #{bnfRwdCateDvCd} -- 요청한 보상 카테고리
</select>
<!-- 깜짝 선물 위치 정보 조회 (요일에 따라 변경) -->
<select id="selectSurpriseGiftPosition" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
B.BNF_INNB as bnfInnb, -- 혜택 고유번호
BR.BNF_RWD_CATE_DV_CD as rewardCategoryCode, -- 보상 항목 구분 코드
BR.RWD_CND_CNT as surprisePosition -- 깜짝 선물 위치 (테이블에 정의된 값)
FROM
GC_BENEFIT B
INNER JOIN
GC_BENEFIT_REWARD BR ON B.BNF_INNB = BR.BNF_INNB
WHERE
B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND B.USE_AT = 'Y' -- 사용 여부 체크
AND B.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND (B.BNF_BGN_DT IS NULL OR B.BNF_BGN_DT &lt;= NOW()) -- 시작일 체크
AND (B.BNF_END_DT IS NULL OR B.BNF_END_DT &gt;= NOW()) -- 종료일 체크
AND BR.BNF_RWD_CATE_DV_CD = CONCAT('0203', WEEKDAY(NOW())) -- 요일에 맞는 깜짝선물 코드
LIMIT 1
</select>
<!-- 초록잎 지급 개수 조회 -->
<select id="selectLeafCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PYMNT_CNT, -- 지급 초록잎 개수
SPECIAL_CNT -- 스페셜 지급 초록잎 개수
FROM
GC_BENEFIT_CPSLMKN
WHERE
BNF_DV_CD = '020' -- 만보기 혜택 구분 코드로 수정
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!-- 걸음수 정보 저장/업데이트 -->
<insert id="insertOrUpdateStepCount" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO">
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_INNB,
BNF_PRT_DT,
MBR_INNB,
MBR_DV_CD,
STEP_CNT,
REGIST_DT,
PRT_LEAF_CNT,
REGUSR
) VALUES (
#{bnfInnb}, -- 혜택 고유번호
NOW(), -- 현재 시간
#{mbrInnb}, -- 회원 고유번호
#{mbrDvCd}, -- 회원 구분 코드
#{stepCnt}, -- 걸음 수
NOW(), -- 등록 시간
#{paidLeafCnt}, -- 적립된 초록잎 개수
#{regusr} -- 등록자
) ON DUPLICATE KEY UPDATE
STEP_CNT = #{stepCnt}, -- 걸음 수 업데이트
UPDT_DT = NOW(), -- 수정 시간
UPDUSR = #{updusr}, -- 수정자
PRT_LEAF_CNT = CASE
WHEN #{stepCnt} &gt;= 10000 AND STEP_CNT &lt; 10000 THEN #{paidLeafCnt}
WHEN #{stepCnt} &gt;= 10000 THEN PRT_LEAF_CNT
ELSE PRT_LEAF_CNT
END -- 만보 최초 달성 시에만 초록잎 추가
</insert>
<!-- 보상 수령 내역 저장 -->
<insert id="insertStepCountReward" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_RCV_INNB, -- 혜택 보상수령 고유 번호
BNF_PRT_INNB,
BNF_RWD_CATE_DV_CD,
BNF_RWD_GODS_DV_CD,
MLG_RWD_AMT,
COUPON_INNB,
REGUSR,
REGIST_DT
) VALUES (
#{bnfRcvInnb}, -- 생성된 고유 번호
#{bnfPrtInnb}, -- 혜택 참여 고유번호
#{bnfRwdCateDvCd}, -- 보상 항목 구분 코드
#{bnfRwdGodsDvCd}, -- 보상 상품 구분 코드
#{mlgRwdAmt}, -- 마일리지 금액
#{couponInnb}, -- 쿠폰 고유번호
#{regusr}, -- 등록자(회원)
NOW() -- 등록 시간
)
</insert>
<!-- 10회 달성 시 추가 보상 대상 상품 정보 조회 -->
<select id="selectMonthlyAchievementReward" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
B.BNF_INNB as bnfInnb, -- 혜택 고유번호
B.BNF_SJ as bnfTitle, -- 혜택 제목
B.SCR_RWD_IMG as rewardImageUrl, -- 보상 이미지 URL
B.SCR_RWD_LINK_URL as rewardLinkUrl, -- 보상 링크 URL
BR.MLG_RWD_AMT as mileageAmount, -- 마일리지 보상 금액
BR.ITM_NM as itemName -- 표시명
FROM
GC_BENEFIT B
INNER JOIN
GC_BENEFIT_REWARD BR ON B.BNF_INNB = BR.BNF_INNB
WHERE
B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND B.USE_AT = 'Y' -- 사용 여부 체크
AND B.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND (B.BNF_BGN_DT IS NULL OR B.BNF_BGN_DT &lt;= NOW()) -- 시작일 체크
AND (B.BNF_END_DT IS NULL OR B.BNF_END_DT &gt;= NOW()) -- 종료일 체크
AND BR.BNF_RWD_CATE_DV_CD = '02020' -- 만보기 월누적10회 코드
LIMIT 1
</select>
<!-- 만보기 동의 상태 조회 -->
<select id="selectStepcntAgreement" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
AGRE_AT
FROM
GC_BENEFIT_AGREE
WHERE
SOPMAL_CD = #{sopmalCd}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_DV_CD = '020'
AND BNF_AGRE_DV_CD = '020'
</select>
<!-- 만보기 동의 정보 저장/업데이트 -->
<insert id="insertStepcntAgreement" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO">
INSERT INTO GC_BENEFIT_AGREE (
SOPMAL_CD, -- 쇼핑몰 코드
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
BNF_DV_CD, -- 혜택 구분 코드
BNF_AGRE_DV_CD, -- 혜택 동의 구분 코드
BNF_INNB, -- 혜택 고유번호
AGRE_AT, -- 동의 여부
REGUSR, -- 등록자
REGIST_DT -- 등록 시간
) VALUES (
#{sopmalCd}, -- 쇼핑몰 코드
#{mbrInnb}, -- 회원 고유번호
#{mbrDvCd}, -- 회원 구분 코드
'020', -- 혜택 구분 코드(만보기)
'020', -- 혜택 동의 구분 코드(만보기)
#{bnfInnb}, -- 혜택 고유번호
#{agreeYn}, -- 동의 여부
#{regusr}, -- 등록자(회원)
NOW() -- 등록 시간
)
</insert>
<!-- 만보기 동의 정보 업데이트 -->
<update id="updateStepcntAgreement" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO">
UPDATE GC_BENEFIT_AGREE
SET AGRE_AT = #{agreeYn}, -- 동의 여부
REGIST_DT = NOW(), -- 등록 시간
REGUSR = #{regusr} -- 등록자(회원)
WHERE SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND MBR_INNB = #{mbrInnb} -- 회원 고유번호
AND MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드
AND BNF_DV_CD = '020' -- 혜택 구분 코드(만보기)
AND BNF_AGRE_DV_CD = '020' -- 혜택 동의 구분 코드(만보기)
</update>
<!-- 만보기 화면의 기본 정보 조회 -->
<select id="selectStepcntBaseInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
B.BNF_INNB as BNF_INNB, -- 혜택 고유번호
B.BNF_SJ as BNF_TITLE, -- 혜택 제목
B.BNF_WORDS_CN as BNF_GUIDANCE, -- 혜택 안내
B.SCR_RWD_IMG as REWARD_IMG, -- 화면 대표 이미지
B.SCR_REPRSNT_LINK_URL as REPRESENT_LINK_URL, -- 화면 대표 링크 URL
B.SCR_RWD_LINK_URL as REWARD_LINK_URL, -- 화면 보상 링크 URL
(
SELECT BCT.CN_DC
FROM GC_BENEFIT_CONTENT BCT
WHERE BCT.BNF_INNB = B.BNF_INNB
LIMIT 1
) as CONTENT_DESCRIPTION, -- 내용 설명
(
SELECT GROUP_CONCAT(BR.BNF_RWD_CATE_DV_CD)
FROM GC_BENEFIT_REWARD BR
WHERE BR.BNF_INNB = B.BNF_INNB
) as REWARD_CATEGORIES, -- 보상 항목 구분 코드 목록
(
SELECT BR.ITM_NM
FROM GC_BENEFIT_REWARD BR
WHERE BR.BNF_INNB = B.BNF_INNB
AND BR.BNF_RWD_CATE_DV_CD = '02020' -- 만보기 월누적10회 코드
LIMIT 1
) as MONTHLY_REWARD_NAME, -- 10회 달성 시 받을 제품 이름
(
SELECT BR.MLG_RWD_AMT
FROM GC_BENEFIT_REWARD BR
WHERE BR.BNF_INNB = B.BNF_INNB
AND BR.BNF_RWD_CATE_DV_CD = '02020' -- 만보기 월누적10회 코드
LIMIT 1
) as MONTHLY_REWARD_MILEAGE -- 10회 달성 시 받을 마일리지
FROM
GC_BENEFIT B
WHERE
B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND B.USE_AT = 'Y' -- 사용 여부 체크
AND B.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND (B.BNF_BGN_DT IS NULL OR B.BNF_BGN_DT &lt;= NOW()) -- 시작일 체크
AND (B.BNF_END_DT IS NULL OR B.BNF_END_DT &gt;= NOW()) -- 종료일 체크
LIMIT 1
</select>
<!-- 이번 달 깜짝선물 획득 횟수 조회 -->
<select id="selectMonthlySurpriseGiftCount" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="int">
SELECT
COUNT(BR.BNF_RCV_INNB) as surpriseGiftCount
FROM
GC_BENEFIT_PARTCPTN BP
INNER JOIN
GC_BENEFIT_RECEIPT BR ON BR.BNF_PRT_INNB = BP.BNF_PRT_INNB
INNER JOIN
GC_BENEFIT B ON BP.BNF_INNB = B.BNF_INNB
WHERE
BP.MBR_INNB = #{mbrInnb}
AND BP.MBR_DV_CD = #{mbrDvCd}
AND B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND DATE_FORMAT(BP.BNF_PRT_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m') -- 이번 달 필터링
AND BR.BNF_RWD_CATE_DV_CD IN ('02030','02031','02032','02033','02034','02035','02036') -- 깜짝선물 카테고리 코드들
</select>
<!-- 오늘 깜짝선물 수령 여부 확인 -->
<select id="selectTodayGiftReceiptStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
COUNT(BR.BNF_RCV_INNB) as receiptCount,
CASE WHEN COUNT(BR.BNF_RCV_INNB) > 0 THEN 'Y' ELSE 'N' END as isReceived
FROM
GC_BENEFIT_PARTCPTN BP
INNER JOIN
GC_BENEFIT_RECEIPT BR ON BR.BNF_PRT_INNB = BP.BNF_PRT_INNB
INNER JOIN
GC_BENEFIT B ON BP.BNF_INNB = B.BNF_INNB
WHERE
BP.MBR_INNB = #{mbrInnb}
AND BP.MBR_DV_CD = #{mbrDvCd}
AND B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND DATE(BP.BNF_PRT_DT) = CURDATE() -- 오늘 날짜 기준
AND BR.BNF_RWD_CATE_DV_CD = #{bnfRwdCateDvCd} -- 오늘의 깜짝선물 카테고리
</select>
<!-- 오늘 마일리지 수령 여부 확인 -->
<select id="selectTodayMileageReceiptStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
COUNT(BR.BNF_RCV_INNB) as receiptCount,
CASE WHEN COUNT(BR.BNF_RCV_INNB) > 0 THEN 'Y' ELSE 'N' END as isReceived
FROM
GC_BENEFIT_PARTCPTN BP
INNER JOIN
GC_BENEFIT_RECEIPT BR ON BR.BNF_PRT_INNB = BP.BNF_PRT_INNB
INNER JOIN
GC_BENEFIT B ON BP.BNF_INNB = B.BNF_INNB
WHERE
BP.MBR_INNB = #{mbrInnb}
AND BP.MBR_DV_CD = #{mbrDvCd}
AND B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND DATE(BP.BNF_PRT_DT) = CURDATE() -- 오늘 날짜 기준
AND BR.BNF_RWD_CATE_DV_CD = #{bnfRwdCateDvCd} -- 보상 카테고리 (02010: 일일만보, 02020: 월누적10회)
</select>
<!-- 만보기 참여 안내 조회-->
<select id="selectStepcntGuide" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
BNF_WORDS_CN
FROM
GC_BENEFIT
WHERE
BNF_INNB = #{bnfInnb}
AND SOPMAL_CD = #{sopmalCd}
</select>
<!-- BNF_INNB 조회 -->
<select id="selectBnfInnb" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
BNF_INNB
FROM
GC_BENEFIT
WHERE
BNF_DV_CD = '020'
AND SOPMAL_CD = #{sopmalCd}
AND USE_AT = 'Y'
</select>
</mapper>

View File

@@ -0,0 +1,336 @@
<?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.wb.domainserver.domain.gcone.common.mapper.BOCommonMapper">
<!-- 이미지 정보 수정 -->
<update id="updateBOFileInfo" parameterType="com.wb.domainserver.domain.gcone.common.vo.BOCommonVO">
<!-- 인트라넷 게시판 첨부파일 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'ITRB')">
<![CDATA[
DELETE FROM GC_INTRANET_BOARDDATA_FILE A
WHERE A.SOPMAL_CD = #{shopCd} AND A.BBSCTT_ATCHMNFIL_INNB = #{fileSeq}
]]>
</if>
<!-- 게시판 첨부파일 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'BDFL')">
<![CDATA[
DELETE FROM GC_BOARDDATA_FILE A
WHERE A.SOPMAL_CD = #{shopCd} AND A.BBSCTT_ATCHMNFIL_INNB = #{fileSeq}
]]>
</if>
<!-- 게시판 대표이미지 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'BDIG')">
<![CDATA[
UPDATE GC_BOARDDATA
SET REPRSNT_IMG_ORGINL_FIL_NM=null, REPRSNT_IMG_SYS_FIL_NM=null
WHERE SOPMAL_CD = #{shopCd} AND BBSCTT_INNB = #{fileSeq}
]]>
</if>
<!-- 배너관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'BANR')">
<![CDATA[
UPDATE GC_GOODS_BANNER
SET ORGINL_FIL_NM=null, SYS_FIL_NM=null, FIL_MG=null, FIL_TY=null, FIL_COURS=null
WHERE SOPMAL_CD = #{shopCd} AND BANNER_INNB = #{fileSeq}
]]>
</if>
<!-- 회원관리 등급이미지 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'MBRG')">
<![CDATA[
UPDATE GC_MEMBER_GRAD
SET MBR_GRAD_ICON_COURS = null
WHERE SOPMAL_CD = #{shopCd} AND MBR_GRAD_INNB = #{fileSeq}
]]>
</if>
<!-- 팝업관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'POUP')">
<![CDATA[
UPDATE GC_DESIGN_POPUP
SET ORGINL_FIL_NM=null, SYS_FIL_NM=null, FIL_MG=null, FIL_TY=null, FIL_COURS=null
WHERE SOPMAL_CD = #{shopCd} AND POPUP_INNB = #{fileSeq}
]]>
</if>
<!-- 이벤트관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'EVNT')">
<![CDATA[
UPDATE GC_EVENT
SET ORGINL_FIL_NM=null, SYS_FIL_NM=null, FIL_MG=null, FIL_TY=null, FIL_COURS=null
WHERE SOPMAL_CD = #{shopCd} AND EVT_INNB = #{fileSeq}
]]>
</if>
<!-- 메인화면관리(상단) -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'MANT')">
<![CDATA[
UPDATE GC_DESIGN
SET TOP_ORGINL_FIL_NM=null, TOP_SYS_FIL_NM=null, TOP_FIL_MG=null, TOP_FIL_TY=null, TOP_FIL_COURS=null
WHERE SOPMAL_CD = #{shopCd} AND MAIN_SITE_INNB = #{fileSeq}
]]>
</if>
<!-- 메인화면관리(하단) -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'MANB')">
<![CDATA[
UPDATE GC_DESIGN
SET FOOTER_ORGINL_FIL_NM=null, FOOTER_SYS_FIL_NM=null, FOOTER_FIL_MG=null, FOOTER_FIL_TY=null, FOOTER_FIL_COURS=null
WHERE SOPMAL_CD = #{shopCd} AND MAIN_SITE_INNB = #{fileSeq}
]]>
</if>
<!-- 메인컨텐츠관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'MANC')">
<![CDATA[
UPDATE GC_DESIGN_CONTENTS_ITEM
SET ORGINL_FIL_NM=null, SYS_FIL_NM=null, FIL_MG=null, FIL_TY=null, FIL_COURS=null
WHERE MAIN_SETUP_ITEM_INNB = #{fileSeq}
]]>
</if>
<!-- 메시지관리(인트라넷) -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'SMSI')">
<![CDATA[
DELETE FROM GC_INTRANET_SMS_FILE A
WHERE A.F_SEQ = #{fileSeq}
]]>
</if>
<!-- 메시지관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'SMSF')">
<![CDATA[
DELETE FROM GC_SMS_FILE A
WHERE A.SMS_FILE_INNB = #{fileSeq}
]]>
</if>
<!-- 대용량메시지관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'SMSQ')">
<![CDATA[
UPDATE GC_LGQY_SMS
SET ORGINL_FIL_NM=null, SYS_FIL_NM=null, FIL_MG=null, FIL_TY=null, FIL_COURS=null
WHERE SMS_LGQY_SNDNG_INNB = #{fileSeq}
]]>
</if>
<!-- 매장관리(대표이미지) -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'STOR')">
<![CDATA[
UPDATE GC_STORE
SET STR_REPRSNT_IMG=null
WHERE STR_INNB = #{fileSeq}
]]>
</if>
</update>
<!-- 상품 이미지 정보 수정 -->
<!-- 상품정보 조회 -->
<select id="selectGoodsInfo"
parameterType="com.wb.domainserver.domain.gcone.common.vo.BOCommonVO"
resultType="dataMap">
<![CDATA[
SELECT A.CUT_NB, A.GOODS_INNB FROM GC_GOODS_IMAGE A WHERE A.GOODS_IMG_INNB = #{fileSeq} AND A.SOPMAL_CD = #{shopCd}
]]>
</select>
<delete id="updateBOGoodsFileInfo" parameterType="com.wb.domainserver.domain.gcone.common.vo.BOCommonVO">
<![CDATA[
DELETE FROM GC_GOODS_IMAGE
WHERE SOPMAL_CD = #{shopCd} and GOODS_INNB = #{goodsInnb} and CUT_NB = #{cutNb}
]]>
</delete>
<!-- 이미지 경로 조회 -->
<select id = "selectBOFileInfo"
parameterType="com.wb.domainserver.domain.gcone.common.vo.BOCommonVO"
resultType="dataMap">
<!-- 인트라넷 게시판 첨부파일 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'ITRB')">
<![CDATA[
SELECT concat(A.FIL_COURS , CASE WHEN RIGHT(FIL_COURS, 1) = '/' THEN '' ELSE '/' END , A.SYS_FIL_NM) AS FILE_FULL_PATH
, FIL_DV_CD, ORGINL_FIL_NM
FROM GC_INTRANET_BOARDDATA_FILE A
WHERE A.SOPMAL_CD = #{shopCd} AND A.BBSCTT_ATCHMNFIL_INNB = #{fileSeq}
]]>
</if>
<!-- 게시판 첨부파일 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'BDFL')">
<![CDATA[
SELECT concat(A.FIL_COURS , CASE WHEN RIGHT(FIL_COURS, 1) = '/' THEN '' ELSE '/' END , A.SYS_FIL_NM) AS FILE_FULL_PATH
, FIL_DV_CD, ORGINL_FIL_NM
FROM GC_BOARDDATA_FILE A
WHERE A.SOPMAL_CD = #{shopCd} AND A.BBSCTT_ATCHMNFIL_INNB = #{fileSeq}
]]>
</if>
<!-- 게시판 대표이미지 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'BDIG')">
<![CDATA[
SELECT REPRSNT_IMG_SYS_FIL_NM AS FILE_FULL_PATH
, '01' FIL_DV_CD , '' ORGINL_FIL_NM
FROM GC_BOARDDATA
WHERE SOPMAL_CD = #{shopCd} AND BBSCTT_INNB = #{fileSeq}
]]>
</if>
<!-- 배너관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'BANR')">
<![CDATA[
SELECT concat(A.FIL_COURS ,'/', A.SYS_FIL_NM) AS FILE_FULL_PATH
, '01' FIL_DV_CD , ORGINL_FIL_NM
FROM GC_GOODS_BANNER A
WHERE SOPMAL_CD = #{shopCd} AND BANNER_INNB = #{fileSeq}
]]>
</if>
<!-- 회원관리 등급이미지 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'MBRG')">
<![CDATA[
SELECT MBR_GRAD_ICON_COURS AS FILE_FULL_PATH
, '01' FIL_DV_CD , '' ORGINL_FIL_NM
FROM GC_MEMBER_GRAD
WHERE MBR_GRAD_INNB = #{fileSeq}
AND SOPMAL_CD = #{shopCd}
]]>
</if>
<!-- 상품 이미지 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'GDIG')">
<![CDATA[
SELECT IMG AS FILE_FULL_PATH
, '01' FIL_DV_CD , '' ORGINL_FIL_NM
FROM GC_GOODS_IMAGE A
WHERE A.SOPMAL_CD = 'NC' AND A.GOODS_IMG_INNB = #{fileSeq}
]]>
</if>
<!-- 팝업관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'POUP')">
<![CDATA[
SELECT concat(A.FIL_COURS ,'/', A.SYS_FIL_NM ) AS FILE_FULL_PATH
, '01' FIL_DV_CD, ORGINL_FIL_NM
FROM GC_DESIGN_POPUP A
WHERE A.POPUP_INNB = #{fileSeq}
]]>
</if>
<!-- 이벤트관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'EVNT')">
<![CDATA[
SELECT concat(A.FIL_COURS ,'/', A.SYS_FIL_NM) AS FILE_FULL_PATH
, '01' FIL_DV_CD , ORGINL_FIL_NM
FROM GC_EVENT A
WHERE SOPMAL_CD = #{shopCd} AND EVT_INNB = #{fileSeq}
]]>
</if>
<!-- 메인화면관리(상단) -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'MANT')">
<![CDATA[
SELECT concat(A.TOP_FIL_COURS ,'/', A.TOP_SYS_FIL_NM) AS FILE_FULL_PATH
, '01' FIL_DV_CD , TOP_ORGINL_FIL_NM AS ORGINL_FIL_NM
FROM GC_DESIGN A
WHERE SOPMAL_CD = #{shopCd} AND MAIN_SITE_INNB = #{fileSeq}
]]>
</if>
<!-- 메인화면관리(하단) -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'MANB')">
<![CDATA[
SELECT concat(A.FOOTER_FIL_COURS ,'/', A.FOOTER_SYS_FIL_NM) AS FILE_FULL_PATH
, '01' FIL_DV_CD , FOOTER_ORGINL_FIL_NM AS ORGINL_FIL_NM
FROM GC_DESIGN A
WHERE SOPMAL_CD = #{shopCd} AND MAIN_SITE_INNB = #{fileSeq}
]]>
</if>
<!-- 메인컨텐츠관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'MANC')">
<![CDATA[
SELECT concat(A.FIL_COURS ,'/', A.SYS_FIL_NM) AS FILE_FULL_PATH
, '01' FIL_DV_CD , ORGINL_FIL_NM
FROM GC_DESIGN_CONTENTS_ITEM A
WHERE MAIN_SETUP_ITEM_INNB = #{fileSeq}
]]>
</if>
<!-- 메시지관리(인트라넷) -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'SMSI')">
<![CDATA[
SELECT CONCAT(A.F_COURSE ,'/', A.F_NAME) AS FILE_FULL_PATH
, '01' FIL_DV_CD , F_NAME_ORG AS ORGINL_FIL_NM
FROM GC_INTRANET_SMS_FILE A
WHERE A.F_SEQ = #{fileSeq}
]]>
</if>
<!-- 메시지관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'SMSF')">
<![CDATA[
SELECT concat(A.FIL_COURS ,'/', A.SYS_FIL_NM) AS FILE_FULL_PATH
, '01' FIL_DV_CD , ORGINL_FIL_NM
FROM GC_SMS_FILE A
WHERE A.SMS_FILE_INNB = #{fileSeq}
]]>
</if>
<!-- 대용량메시지관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'SMSQ')">
<![CDATA[
SELECT concat(A.FIL_COURS ,'/', A.SYS_FIL_NM) AS FILE_FULL_PATH
, '01' FIL_DV_CD , ORGINL_FIL_NM
FROM GC_LGQY_SMS A
WHERE A.SMS_LGQY_SNDNG_INNB = #{fileSeq}
]]>
</if>
<!-- 카테고리조회 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'CTGY')">
<![CDATA[
SELECT concat(FIL_COURS ,'/', SYS_FIL_NM) AS FILE_FULL_PATH
, '01' FIL_DV_CD , ORGINL_FIL_NM
FROM GC_CATEGORY
WHERE CTGRY_ID = #{fileSeq}
AND SOPMAL_CD = #{shopCd}
]]>
</if>
<!-- 매장관리(대표이미지) -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'STOR')">
<![CDATA[
SELECT STR_REPRSNT_IMG AS FILE_FULL_PATH
, '01' FIL_DV_CD
FROM GC_STORE
WHERE STR_INNB = #{fileSeq}
]]>
</if>
</select>
<select id = "selectEncptKey"
parameterType="com.wb.domainserver.domain.gcone.common.vo.BOCommonVO"
resultType = "java.lang.String">
<![CDATA[
SELECT ENCPT_KEY
FROM GC_ENCPT_KEY A
WHERE ENCPT_KEY_DV_CD = #{encptKeyDvCd}
AND IDNTFC_INNB = #{idntfcInnb}
]]>
</select>
<insert id="insertEncptKey" parameterType="com.wb.domainserver.domain.gcone.common.vo.BOCommonVO">
<selectKey order="BEFORE" keyProperty="encptKeyInnb" resultType="java.lang.String">
<![CDATA[
SELECT IFNULL(MAX(ENCPT_KEY_INNB), 0)+1
FROM GC_ENCPT_KEY
]]>
</selectKey>
<![CDATA[
INSERT INTO GC_ENCPT_KEY (
ENCPT_KEY_INNB,
ENCPT_KEY_DV_CD,
IDNTFC_INNB,
ENCPT_KEY,
REGUSR,
REGIST_DT
)
VALUES (
#{encptKeyInnb},
#{encptKeyDvCd},
#{idntfcInnb},
#{encptKey},
${regusr},
SYSDATE()
)
]]>
</insert>
</mapper>

View File

@@ -0,0 +1,376 @@
<?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.wb.domainserver.domain.gcone.goods.banner.mapper.BOBannerMapper">
<!-- 배너 상세조회, 수정, 삭제 조건절-->
<sql id="selectBOMapperKeyWhere">
<![CDATA[
WHERE 1=1
AND BANNER_INNB = #{bannerInnb}
]]>
</sql>
<!-- 배너목록 카운트 -->
<select id="selectBOBannerListCnt"
parameterType="com.wb.domainserver.domain.gcone.goods.banner.vo.BOBannerVO"
resultType="java.lang.Integer">
<![CDATA[
SELECT count(*)
FROM (SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM
, TB.*
FROM (SELECT BANNER_INNB
, BANNER_NM
, EXPSRLC_DV
, EXPSRLC_DV_CD
, DATE_FORMAT(EXPSR_BGN_DT, '%Y-%m-%d %h:%i:%s') AS EXPSR_BGN_DT
, DATE_FORMAT(EXPSR_END_DT, '%Y-%m-%d %h:%i:%s') AS EXPSR_END_DT
, REGUSR
, REGIST_DT
, DATE_FORMAT(REGIST_DT, '%Y-%m-%d') AS REGIST_DE
, UPDUSR
, UPDT_DT
, DATE_FORMAT(UPDT_DT, '%Y-%m-%d') AS UPDT_DE
, (SELECT COUNT(1) FROM GC_SHOP_GOODS_BANNER FSGB WHERE FSGB.BANNER_INNB = FGB.BANNER_INNB) AS GOODS_CNT
FROM GC_GOODS_BANNER FGB
WHERE 1=1
AND USE_AT = 'Y'
AND SOPMAL_CD = #{sopmalCd}
ORDER BY
BANNER_INNB DESC ) TB
WHERE (@ROWNUM:=0) = 0 ) PV
WHERE 1=1
]]>
</select>
<!-- 배너 목록 조회 -->
<select id="selectBOBannerList"
parameterType="com.wb.domainserver.domain.gcone.goods.banner.vo.BOBannerVO"
resultType="dataMap">
<![CDATA[
SELECT *
FROM (SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM
, TB.*
FROM (SELECT BANNER_INNB
, BANNER_NM
, EXPSRLC_DV
, EXPSRLC_DV_CD
, DATE_FORMAT(EXPSR_BGN_DT, '%Y-%m-%d %h:%i:%s') AS EXPSR_BGN_DT
, DATE_FORMAT(EXPSR_END_DT, '%Y-%m-%d %h:%i:%s') AS EXPSR_END_DT
, REGUSR
, REGIST_DT
, DATE_FORMAT(REGIST_DT, '%Y-%m-%d') AS REGIST_DE
, UPDUSR
, UPDT_DT
, DATE_FORMAT(UPDT_DT, '%Y-%m-%d') AS UPDT_DE
, (SELECT COUNT(FSGB.GOODS_INNB) FROM GC_SHOP_GOODS_BANNER FSGB WHERE FSGB.BANNER_INNB = FGB.BANNER_INNB) AS GOODS_CNT
, (SELECT COUNT(FSGB.CTGRY_ID) FROM GC_SHOP_GOODS_BANNER FSGB WHERE FSGB.BANNER_INNB = FGB.BANNER_INNB) AS CTGRY_CNT
FROM GC_GOODS_BANNER FGB
WHERE 1=1
AND USE_AT = 'Y'
AND SOPMAL_CD = #{sopmalCd}
ORDER BY
BANNER_INNB DESC ) TB
WHERE (@ROWNUM:=0) = 0 ) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!-- 배너 등록 -->
<insert id="insertBOBanner"
parameterType="com.wb.domainserver.domain.gcone.goods.banner.vo.BOBannerVO">
<selectKey order="BEFORE" keyProperty="bannerInnb" resultType="java.lang.Integer">
SELECT IFNULL(MAX(BANNER_INNB), 0)+1
FROM GC_GOODS_BANNER
</selectKey>
INSERT INTO GC_GOODS_BANNER (
BANNER_INNB
, SOPMAL_CD
, BANNER_NM
, EXPSRLC_DV
, EXPSRLC_DV_CD
, EXPSR_BGN_DT
, EXPSR_END_DT
, GOODS_APPLC_DV_CD
, BANNER_URL
, ORGINL_FIL_NM
, SYS_FIL_NM
, FIL_MG
, FIL_TY
, FIL_COURS
, BANNER_ORDR
, USE_AT
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
)
VALUES (
#{bannerInnb}
, #{sopmalCd}
, #{bannerNm}
, #{expsrlcDv}
, #{expsrlcDvCd}
<if test="expsrlcDvCd != '03'">
, NULL
, NULL
</if>
<if test="expsrlcDvCd == '03'">
, #{expsrBgnDt}
, #{expsrEndDt}
</if>
,#{goodsApplcDvCd}
,#{bannerUrl}
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(orginlFilNm)">
, #{orginlFilNm}
, #{sysFilNm}
, #{filMg}
, #{filTy}
, #{filCours}
</when>
<otherwise>
, NULL
, NULL
, NULL
, NULL
, NULL
</otherwise>
</choose>
, '99' -- 새로 등록한 배너 순서 맨뒤 지정
, 'Y'
, #{regusr}
, now()
, #{updusr}
, now()
)
</insert>
<!-- 배너 연결 상품 등록 -->
<insert id="insertBOBannerIncludeGoods"
parameterType="DataMap">
<selectKey order="BEFORE" keyProperty="shopGoodsBannerInnb" resultType="java.lang.Integer">
SELECT IFNULL(MAX(SHOP_GOODS_BANNER_INNB), 0)+1
FROM GC_SHOP_GOODS_BANNER
</selectKey>
INSERT INTO GC_SHOP_GOODS_BANNER (
SHOP_GOODS_BANNER_INNB
, GOODS_INNB
, SOPMAL_CD
, BANNER_INNB
, REGUSR
, REGIST_DT
)
VALUES (
#{shopGoodsBannerInnb}
, #{goodsInnb}
, #{sopmalCd}
, #{bannerInnb}
, #{regusr}
, now()
)
</insert>
<!-- 배너 연결 상품 카테고리ID 등록 -->
<insert id="insertBOBannerIncludeGoodsCtgryId"
parameterType="DataMap">
<selectKey order="BEFORE" keyProperty="shopGoodsBannerInnb" resultType="java.lang.Integer">
SELECT IFNULL(MAX(SHOP_GOODS_BANNER_INNB), 0)+1
FROM GC_SHOP_GOODS_BANNER
</selectKey>
INSERT INTO GC_SHOP_GOODS_BANNER (
SHOP_GOODS_BANNER_INNB
, CTGRY_ID
, SOPMAL_CD
, BANNER_INNB
, REGUSR
, REGIST_DT
)
VALUES (
#{shopGoodsBannerInnb}
, #{ctgryId}
, #{sopmalCd}
, #{bannerInnb}
, #{regusr}
, now()
)
</insert>
<!-- 배너수정 -->
<update id="updateBOBannerDtl" parameterType="com.wb.domainserver.domain.gcone.goods.banner.vo.BOBannerVO">
UPDATE GC_GOODS_BANNER
SET
BANNER_NM = #{bannerNm}
, EXPSRLC_DV = #{expsrlcDv}
, EXPSRLC_DV_CD = #{expsrlcDvCd}
<if test="expsrlcDvCd == '03'">
, EXPSR_BGN_DT = #{expsrBgnDt}
, EXPSR_END_DT = #{expsrEndDt}
</if>
<if test="expsrlcDvCd != '03'">
, EXPSR_BGN_DT = NULL
, EXPSR_END_DT = NULL
</if>
<choose>
<when test="fileUse == 'new'">
, ORGINL_FIL_NM = #{orginlFilNm}
, SYS_FIL_NM = #{sysFilNm}
, FIL_MG = #{filMg}
, FIL_TY = #{filTy}
, FIL_COURS = #{filCours}
</when>
<when test="fileUse == 'none'">
, ORGINL_FIL_NM = NULL
, SYS_FIL_NM = NULL
, FIL_MG = NULL
, FIL_TY = NULL
, FIL_COURS = NULL
</when>
<otherwise>
</otherwise>
</choose>
, BANNER_URL = #{bannerUrl}
, GOODS_APPLC_DV_CD = #{goodsApplcDvCd}
, UPDUSR = #{updusr}
, UPDT_DT = now()
<include refid="selectBOMapperKeyWhere"/>
</update>
<!-- 배너 삭제 -->
<update id="deleteBOBanner" parameterType="com.wb.domainserver.domain.gcone.goods.banner.vo.BOBannerVO">
<![CDATA[
UPDATE GC_GOODS_BANNER
SET USE_AT = 'N'
, UPDUSR = #{updusr}
, UPDT_DT = now()
]]>
<include refid="selectBOMapperKeyWhere"/>
</update>
<!-- 배너 상세 조회 -->
<select id="selectBOBannerDtlForm"
parameterType="com.wb.domainserver.domain.gcone.goods.banner.vo.BOBannerVO"
resultType="dataMap">
<![CDATA[
SELECT GGB.BANNER_INNB
, GGB.SOPMAL_CD
, GGB.BANNER_NM
, GGB.EXPSRLC_DV
, GGB.EXPSRLC_DV_CD
, DATE_FORMAT(GGB.EXPSR_BGN_DT, '%Y-%m-%d %h:%i:%s') AS EXPSR_BGN_DT
, DATE_FORMAT(GGB.EXPSR_END_DT, '%Y-%m-%d %h:%i:%s') AS EXPSR_END_DT
, DATE_FORMAT(GGB.EXPSR_BGN_DT, '%Y-%m-%d') AS EXPSR_BGN_YMD
, DATE_FORMAT(GGB.EXPSR_END_DT, '%Y-%m-%d') AS EXPSR_END_YMD
, DATE_FORMAT(GGB.EXPSR_BGN_DT, '%h:%i') AS EXPSR_BGN_TIME
, DATE_FORMAT(GGB.EXPSR_END_DT, '%h:%i') AS EXPSR_END_TIME
, GGB.BANNER_URL
, GGB.ORGINL_FIL_NM
, GGB.SYS_FIL_NM
, GGB.FIL_MG
, GGB.FIL_TY
, GGB.FIL_COURS
, GGB.REGUSR
, GGB.REGIST_DT
, DATE_FORMAT(GGB.REGIST_DT, '%Y-%m-%d') AS REGIST_DE
, GGB.UPDUSR
, GGB.UPDT_DT
, DATE_FORMAT(GGB.UPDT_DT, '%Y-%m-%d') AS UPDT_DE
, GGB.GOODS_APPLC_DV_CD
FROM GC_GOODS_BANNER GGB
WHERE 1=1
AND GGB.BANNER_INNB =#{bannerInnb}
AND GGB.SOPMAL_CD = #{sopmalCd}
]]>
</select>
<!-- 배너 연결 상품 조회 -->
<select id="selectBOBannerIncludeGoods"
parameterType="com.wb.domainserver.domain.gcone.goods.banner.vo.BOBannerVO"
resultType="String">
SELECT GOODS_INNB
FROM GC_SHOP_GOODS_BANNER
WHERE 1=1
AND SOPMAL_CD =#{sopmalCd}
AND BANNER_INNB = #{bannerInnb}
</select>
<!--배너 카테고리 정보 조회-->
<select id="selectBOBannerCtgry" parameterType="dataMap" resultType="dataMap">
WITH RECURSIVE category AS (
SELECT CTGRY_ID, CTGRY_NM, UPPER_CTGRY_ID, SOPMAL_CD, CTGRY_NM as full_path
FROM GC_CATEGORY
where SOPMAL_CD = #{sopmalCd}
AND UPPER_CTGRY_ID = 2
UNION ALL
SELECT c.CTGRY_ID, c.CTGRY_NM, c.UPPER_CTGRY_ID, c.SOPMAL_CD, CONCAT(ch.full_path , ' > ', c.CTGRY_NM ) AS full_path
FROM GC_CATEGORY c
INNER JOIN category ch
ON c.UPPER_CTGRY_ID = ch.CTGRY_ID
AND c.sopmal_cd = ch.sopmal_cd
)
SELECT
cc.CTGRY_ID,
cc.CTGRY_NM,
cc.UPPER_CTGRY_ID,
cc.SOPMAL_CD,
cc.full_path,
GSGB.GOODS_INNB
FROM category cc
JOIN GC_SHOP_GOODS_BANNER GSGB
where GSGB.SOPMAL_CD = cc.sopmal_cd
AND GSGB.CTGRY_ID = cc.CTGRY_ID
AND GSGB.sopmal_cd = #{sopmalCd}
AND GSGB.BANNER_INNB = #{bannerInnb}
ORDER BY CTGRY_ID;
</select>
<!-- 배너 연결 상품 삭제 -->
<delete id="deleteBOBannerIncludeGoods"
parameterType="java.lang.Integer">
DELETE FROM GC_SHOP_GOODS_BANNER
WHERE 1=1
AND BANNER_INNB = #{bannerInnb}
</delete>
<!-- 배너 연결 상품 조회 -->
<select id="selectBOBannerIncludeGoodsCnt"
parameterType="com.wb.domainserver.domain.gcone.goods.banner.vo.BOBannerVO"
resultType="java.lang.Integer">
SELECT count(1)
FROM GC_SHOP_GOODS_BANNER
WHERE 1=1
AND BANNER_INNB = #{bannerInnb}
</select>
<!--배너 순서지정팝업조회-->
<select id="selectBOBannerOrdrPopup" parameterType="com.wb.domainserver.domain.gcone.goods.banner.vo.BOBannerVO" resultType="dataMap">
SELECT
GGB.BANNER_INNB,
GGB.SOPMAL_CD,
GGB.BANNER_NM,
GGB.EXPSRLC_DV, -- 상단, 하단
GGB.BANNER_ORDR
FROM
GC_GOODS_BANNER GGB
WHERE
1 = 1
AND GGB.USE_AT = 'Y'
AND GGB.SOPMAL_CD = #{sopmalCd}
AND(CASE WHEN GGB.EXPSRLC_DV_CD = '01' THEN 'Y'
WHEN GGB.EXPSRLC_DV_CD = '03' AND DATE_FORMAT(SYSDATE(), '%Y-%m-%d') BETWEEN GGB.EXPSR_BGN_DT AND GGB.EXPSR_END_DT THEN 'Y'
ELSE 'N' END )='Y' -- 노출구분이 01 이거나 노출예약이면서 노출기간이 오늘 기준안에 있으면 Y 미노출이면 N)
ORDER BY GGB.BANNER_ORDR ASC
</select>
<!--배너순서수정-->
<update id="updateBOBannerOrdr" parameterType="com.wb.domainserver.domain.gcone.goods.banner.vo.BOBannerVO">
UPDATE
GC_GOODS_BANNER GGB
SET
GGB.BANNER_ORDR = #{bannerOrdr},
GGB.UPDUSR = #{updusr},
GGB.UPDT_DT = SYSDATE()
WHERE 1=1
AND GGB.SOPMAL_CD = #{sopmalCd}
AND GGB.BANNER_INNB = #{bannerInnb}
</update>
</mapper>

View File

@@ -0,0 +1,108 @@
<?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.wb.domainserver.domain.gcone.goods.cmnuse.mapper.BOCmnuseMapper">
<!-- 상품 공용정보 목록 조회 -->
<select id="selectBOCmnuseInfoList"
parameterType = "com.wb.domainserver.domain.gcone.goods.cmnuse.vo.BOCmnuseVO" >
SELECT
ROW_NUMBER() OVER(ORDER BY i.REGIST_DT ASC) RNUM
,i.CMNUSE_INFO_INNB as CMNUSE_INFO_INNB
,i.CMNUSE_INFO_SJ as CMNUSE_INFO_SJ
,DATE_FORMAT(i.REGIST_DT, '%Y-%m-%d %H:%i') as REGIST_DT
, IFNULL(fg.LINKGOODS, 0) as LINKGOODS
FROM GC_GOODS_INFO i
LEFT JOIN
(
SELECT
CMNUSE_INFO_INNB
,COUNT(GOODS_INNB) as LINKGOODS
,SOPMAL_CD
FROM GC_GOODS
WHERE 1=1
AND SOPMAL_CD = #{sopmalCd}
GROUP BY CMNUSE_INFO_INNB
) fg
ON i.CMNUSE_INFO_INNB = fg.CMNUSE_INFO_INNB
WHERE 1=1
AND i.SOPMAL_CD =#{sopmalCd}
AND i.USE_AT ='Y'
ORDER BY REGIST_DT DESC
</select>
<!-- 상품 공용정보 상세 조회 -->
<select id="selectBOCmnuseInfoDtl">
SELECT
CMNUSE_INFO_INNB,
SOPMAL_CD,
CMNUSE_INFO_SJ,
INFO_CN
FROM GC_GOODS_INFO
WHERE 1=1
AND CMNUSE_INFO_INNB = #{cmnuseInfoInnb}
AND USE_AT ='Y'
AND SOPMAL_CD = #{sopmalCd}
</select>
<!-- 상품 공용정보 등록 -->
<insert id="insertBOCmnuseInfo"
parameterType = "com.wb.domainserver.domain.gcone.goods.cmnuse.vo.BOCmnuseVO" >
<selectKey keyProperty="cmnuseInfoInnb" resultType="String" order="BEFORE">
SELECT IFNULL(MAX(CMNUSE_INFO_INNB), 0) + 1
FROM GC_GOODS_INFO
</selectKey>
INSERT INTO GC_GOODS_INFO
(
CMNUSE_INFO_INNB,
SOPMAL_CD,
<if test="bsnmInnb != null and bsnmInnb != ''">
BSNM_INNB,
</if>
<if test="cmnuseInfoSj != null and cmnuseInfoSj != ''">
CMNUSE_INFO_SJ,
</if>
<if test="infoCn != null and infoCn != ''">
INFO_CN,
</if>
USE_AT,
REGUSR,
REGIST_DT
)
VALUES (
#{cmnuseInfoInnb},
#{sopmalCd},
<if test="bsnmInnb != null and bsnmInnb != ''">
#{bsnmInnb},
</if>
<if test="cmnuseInfoSj != null and cmnuseInfoSj != ''">
#{cmnuseInfoSj},
</if>
<if test="infoCn != null and infoCn != ''">
#{infoCn},
</if>
'Y',
#{regusr},
SYSDATE()
)
</insert>
<!-- 상품 공용정보 수정 -->
<update id="updateBOCmnuseInfoDtl">
UPDATE GC_GOODS_INFO
SET CMNUSE_INFO_SJ = #{cmnuseInfoSj},
INFO_CN = #{infoCn},
UPDUSR = #{updusr},
UPDT_DT = now()
WHERE CMNUSE_INFO_INNB = #{cmnuseInfoInnb}
AND SOPMAL_CD = #{sopmalCd}
</update>
<!-- 상품 공용정보 삭제 -->
<update id="deleteBOCmnuseInfo">
update GC_GOODS_INFO
SET USE_AT = 'N'
WHERE CMNUSE_INFO_INNB = #{cmnuseInfoInnb}
AND SOPMAL_CD = #{sopmalCd}
</update>
</mapper>

View File

@@ -0,0 +1 @@
<?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.wb.domainserver.domain.gcone.goods.ctgry.mapper.BOCtgryMapper"></mapper>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,298 @@
<?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.wb.domainserver.domain.gcone.goods.goodsinfo.mapper.BOGoodsinfoMapper">
<!-- 상품 정보 목록 조회 -->
<select id="selectBOGoodsInfoList"
parameterType = "com.wb.domainserver.domain.gcone.goods.goodsinfo.vo.BOGoodsInfoVO"
resultType = "com.wb.domainserver.util.dataaccess.DataMap">
SELECT *
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, BM.*
FROM (
SELECT
GOODS_EXPSR_INFO_INNB,
GOODS_INFO_SETUP_SJ,
GOODS_NM_EXPSR_AT,
GOODS_NM_EXPSR_ORDR,
REPRSNT_DC_EXPSR_AT,
REPRSNT_DC_EXPSR_ORDR,
PRIC_EXPSR_AT,
PRIC_EXPSR_ORDR,
DLVY_EXPSR_AT,
DLVY_EXPSR_ORDR,
RVW_EVL_SCRE_EXPSR_AT,
RVW_EVL_SCRE_EXPSR_ORDR,
ICON_EXPSR_AT,
ICON_EXPSR_ORDR,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
FROM
GC_GOODS_EXPSR_INFO
WHERE
USE_AT = 'Y'
) BM
WHERE
(@ROWNUM:=0)=0
ORDER BY RNUM DESC
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<select id="selectBOGoodsInfoListCnt"
parameterType="com.wb.domainserver.domain.gcone.goods.goodsinfo.vo.BOGoodsInfoVO" resultType="Integer">
SELECT
COUNT(1)
FROM
GC_GOODS_EXPSR_INFO
WHERE
USE_AT = 'Y'
</select>
<select id="selectBOGoodsInfoDtl"
parameterType = "com.wb.domainserver.domain.gcone.goods.goodsinfo.vo.BOGoodsInfoVO"
resultType = "com.wb.domainserver.util.dataaccess.DataMap">
SELECT
GOODS_EXPSR_INFO_INNB,
GOODS_INFO_SETUP_SJ,
GOODS_NM_EXPSR_AT,
GOODS_NM_EXPSR_ORDR,
REPRSNT_DC_EXPSR_AT,
REPRSNT_DC_EXPSR_ORDR,
PRIC_EXPSR_AT,
PRIC_EXPSR_ORDR,
DLVY_EXPSR_AT,
DLVY_EXPSR_ORDR,
RVW_EVL_SCRE_EXPSR_AT,
RVW_EVL_SCRE_EXPSR_ORDR,
ICON_EXPSR_AT,
ICON_EXPSR_ORDR,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
FROM
GC_GOODS_EXPSR_INFO
WHERE
1=1
AND
SOPMAL_CD = #{sopmalCd}
</select>
<!-- 상품 정보 등록 -->
<insert id="insertBOGoodsInfo"
parameterType = "com.wb.domainserver.domain.gcone.goods.goodsinfo.vo.BOGoodsInfoVO" >
<selectKey keyProperty = "goodsExpsrInfoInnb" resultType = "String" order="BEFORE">
SELECT IFNULL(MAX(GOODS_EXPSR_INFO_INNB),0) + 1
FROM GC_GOODS_EXPSR_INFO
</selectKey>
INSERT
INTO
GC_GOODS_EXPSR_INFO (
GOODS_EXPSR_INFO_INNB,
SOPMAL_CD,
GOODS_INFO_SETUP_SJ,
<if test="goodsNmExpsrAt != null and goodsNmExpsrAt != ''">
GOODS_NM_EXPSR_AT,
</if>
<if test="goodsNmExpsrOrdr != null and goodsNmExpsrOrdr != ''">
GOODS_NM_EXPSR_ORDR,
</if>
<if test="reprsntDcExpsrAt != null and reprsntDcExpsrAt != ''">
REPRSNT_DC_EXPSR_AT,
</if>
<if test="reprsntDcExpsrOrdr != null and reprsntDcExpsrOrdr != ''">
REPRSNT_DC_EXPSR_ORDR,
</if>
<if test="pricExpsrAt != null and pricExpsrAt != ''">
PRIC_EXPSR_AT,
</if>
<if test="pricExpsrOrdr != null and pricExpsrOrdr != ''">
PRIC_EXPSR_ORDR,
</if>
<if test="dlvyExpsrAt != null and dlvyExpsrAt != ''">
DLVY_EXPSR_AT,
</if>
<if test="dlvyExpsrOrdr != null and dlvyExpsrOrdr != ''">
DLVY_EXPSR_ORDR,
</if>
<if test="rvwEvlScreExpsrAt != null and rvwEvlScreExpsrAt != ''">
RVW_EVL_SCRE_EXPSR_AT,
</if>
<if test="rvwEvlScreExpsrOrdr != null and rvwEvlScreExpsrOrdr != ''">
RVW_EVL_SCRE_EXPSR_ORDR,
</if>
<if test="iconExpsrAt != null and iconExpsrAt != ''">
ICON_EXPSR_AT,
</if>
<if test="iconExpsrOrdr != null and iconExpsrOrdr != ''">
ICON_EXPSR_ORDR,
</if>
USE_AT,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
)
VALUES (
#{goodsExpsrInfoInnb},
#{sopmalCd},
#{goodsInfoSetupSj},
<if test="goodsNmExpsrAt != null and goodsNmExpsrAt != ''">
#{goodsNmExpsrAt},
</if>
<if test="goodsNmExpsrOrdr != null and goodsNmExpsrOrdr != ''">
#{goodsNmExpsrOrdr},
</if>
<if test="reprsntDcExpsrAt != null and reprsntDcExpsrAt != ''">
#{reprsntDcExpsrAt},
</if>
<if test="reprsntDcExpsrOrdr != null and reprsntDcExpsrOrdr != ''">
#{reprsntDcExpsrOrdr},
</if>
<if test="pricExpsrAt != null and pricExpsrAt != ''">
#{pricExpsrAt},
</if>
<if test="pricExpsrOrdr != null and pricExpsrOrdr != ''">
#{pricExpsrOrdr},
</if>
<if test="dlvyExpsrAt != null and dlvyExpsrAt != ''">
#{dlvyExpsrAt},
</if>
<if test="dlvyExpsrOrdr != null and dlvyExpsrOrdr != ''">
#{dlvyExpsrOrdr},
</if>
<if test="rvwEvlScreExpsrAt != null and rvwEvlScreExpsrAt != ''">
#{rvwEvlScreExpsrAt},
</if>
<if test="rvwEvlScreExpsrOrdr != null and rvwEvlScreExpsrOrdr != ''">
#{rvwEvlScreExpsrOrdr},
</if>
<if test="iconExpsrAt != null and iconExpsrAt != ''">
#{iconExpsrAt},
</if>
<if test="iconExpsrOrdr != null and iconExpsrOrdr != ''">
#{iconExpsrOrdr},
</if>
#{useAt},
#{regusr},
now(),
#{regusr},
now()
)
</insert>
<!-- 상품 정보 수정 -->
<update id="updateBOGoodsInfoDtl"
parameterType = "com.wb.domainserver.domain.gcone.bbs.bbs.vo.BOBbsVO">
UPDATE
GC_GOODS_EXPSR_INFO
SET
GOODS_INFO_SETUP_SJ = #{goodsInfoSetupSj},
<if test="goodsNmExpsrAt != null and goodsNmExpsrAt != ''">
GOODS_NM_EXPSR_AT = #{goodsNmExpsrAt},
</if>
<if test="goodsNmExpsrOrdr != null and goodsNmExpsrOrdr != ''">
GOODS_NM_EXPSR_ORDR = #{goodsNmExpsrOrdr},
</if>
<if test="reprsntDcExpsrAt != null and reprsntDcExpsrAt != ''">
REPRSNT_DC_EXPSR_AT = #{reprsntDcExpsrAt},
</if>
<if test="reprsntDcExpsrOrdr != null and reprsntDcExpsrOrdr != ''">
REPRSNT_DC_EXPSR_ORDR = #{reprsntDcExpsrOrdr},
</if>
<if test="pricExpsrAt != null and pricExpsrAt != ''">
PRIC_EXPSR_AT = #{pricExpsrAt},
</if>
<if test="pricExpsrOrdr != null and pricExpsrOrdr != ''">
PRIC_EXPSR_ORDR = #{pricExpsrOrdr},
</if>
<if test="dlvyExpsrAt != null and dlvyExpsrAt != ''">
DLVY_EXPSR_AT = #{dlvyExpsrAt},
</if>
<if test="dlvyExpsrOrdr != null and dlvyExpsrOrdr != ''">
DLVY_EXPSR_ORDR = #{dlvyExpsrOrdr},
</if>
<if test="rvwEvlScreExpsrAt != null and rvwEvlScreExpsrAt != ''">
RVW_EVL_SCRE_EXPSR_AT = #{rvwEvlScreExpsrAt},
</if>
<if test="rvwEvlScreExpsrOrdr != null and rvwEvlScreExpsrOrdr != ''">
RVW_EVL_SCRE_EXPSR_ORDR = #{rvwEvlScreExpsrOrdr},
</if>
<if test="iconExpsrAt != null and iconExpsrAt != ''">
ICON_EXPSR_AT = #{iconExpsrAt},
</if>
<if test="iconExpsrOrdr != null and iconExpsrOrdr != ''">
ICON_EXPSR_ORDR = #{iconExpsrOrdr},
</if>
UPDUSR = #{updusr},
UPDT_DT = now()
WHERE
1=1
AND
GOODS_EXPSR_INFO_INNB = #{goodsExpsrInfoInnb}
</update>
<!-- 상품정보 삭제 -->
<update id="updateBOGoodsInfoDel"
parameterType = "com.wb.domainserver.domain.gcone.goods.goodsinfo.vo.BOGoodsInfoVO">
UPDATE
GC_GOODS_EXPSR_INFO
SET
USE_AT = 'N'
WHERE
1=1
AND
GOODS_EXPSR_INFO_INNB = #{goodsExpsrInfoInnb}
</update>
<!-- 상품정보 삭제 -->
<!-- <delete id="deleteBOGoodsInfo"
parameterType = "com.wb.domainserver.domain.gcone.goods.goodsinfo.vo.BOGoodsInfoVO">
DELETE FROM
GC_GOODS_EXPSR_INFO
WHERE
1=1
AND
GOODS_EXPSR_INFO_INNB = #{goodsExpsrInfoInnb}
</delete> -->
<select id="selectBOGoodsInfoListNotLimit" resultType = "DataMap">
SELECT *
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, BM.*
FROM (
SELECT
GOODS_EXPSR_INFO_INNB,
GOODS_INFO_SETUP_SJ,
GOODS_NM_EXPSR_AT,
GOODS_NM_EXPSR_ORDR,
REPRSNT_DC_EXPSR_AT,
REPRSNT_DC_EXPSR_ORDR,
PRIC_EXPSR_AT,
PRIC_EXPSR_ORDR,
DLVY_EXPSR_AT,
DLVY_EXPSR_ORDR,
RVW_EVL_SCRE_EXPSR_AT,
RVW_EVL_SCRE_EXPSR_ORDR,
ICON_EXPSR_AT,
ICON_EXPSR_ORDR,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
FROM
GC_GOODS_EXPSR_INFO
WHERE
USE_AT = 'Y'
) BM
WHERE
(@ROWNUM:=0)=0
ORDER BY RNUM DESC
) PV
WHERE 1=1
</select>
</mapper>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,87 @@
<?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.wb.domainserver.domain.gcone.login.mapper.LoginMapper">
<!--회원 정보조회-->
<select id="selectMbrInfo" parameterType="com.wb.domainserver.domain.gcone.login.vo.LoginRequest" resultType="com.wb.domainserver.domain.gcone.login.vo.LoginUser">
SELECT GM.MBR_INNB AS USER_INNB
, GM.MBR_ID AS USER_ID
, GM.MBR_DV_CD
, GM.MBR_NM AS USER_NAME
, GM.MBTLNB
, GM.MBR_PASSWORD AS PASSWORD
, #{sopmalCd} AS SOPMAL_CD
, '01' AS SYS_DV_CD
FROM GC_MEMBER GM
WHERE 1=1
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(username)">
AND GM.MBR_ID = #{username}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(userInnb) and userInnb != 0 ">
AND GM.MBR_INNB = #{userInnb}
</if>
AND GM.USE_AT = 'Y'
AND GM.MBR_DV_CD = #{mbrDvCd}
</select>
<!--회원 마지막 로그인일시 업데이트 -->
<update id="updateMbrLastLoginDt" parameterType="com.wb.domainserver.domain.gcone.login.vo.LoginUser">
UPDATE GC_MEMBER_SITE
SET VISIT_CNT = VISIT_CNT+1
, LAST_LOGIN_DT = NOW()
, FRST_LOGIN_DT = CASE WHEN FRST_LOGIN_DT IS NULL THEN NOW() ELSE FRST_LOGIN_DT END
WHERE MBR_INNB = #{userInnb}
AND SOPMAL_CD = #{sopmalCd}
</update>
<!--관리자 정보조회-->
<select id="selectMngrInfo" parameterType="com.wb.domainserver.domain.gcone.login.vo.LoginRequest" resultType="com.wb.domainserver.domain.gcone.login.vo.LoginUser">
SELECT
MNGR_INNB AS USER_INNB
,MNGR_NM AS USER_NAME
,MNGR_ID AS USER_ID
,PASSWORD
,PARTNM
,EMAIL
,TELNB
,MBTLNB
, MNGR_DV
,(SELECT SYS_DV_CD FROM site WHERE #{accessUrl} LIKE CONCAT('%',URL,'%')) AS SYS_DV_CD
,#{sopmalCd} AS SOPMAL_CD
FROM GC_MANAGER
WHERE 1=1
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(username)">
AND MNGR_ID = #{username}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(userInnb) and userInnb != 0 ">
AND MNGR_INNB = #{userInnb}
</if>
AND MNGR_STTUS_CD = '01'
</select>
<!--관리자 마지막 로그인일시 업데이트 -->
<update id="updateMngrLastLoginDt" parameterType="com.wb.domainserver.domain.gcone.login.vo.LoginUser">
UPDATE GC_MANAGER
SET LAST_CONECT_DT = NOW()
WHERE MNGR_ID = #{userId}
</update>
<!--관리자 접속이력 저장-->
<insert id="insertMngrConectLog" parameterType="com.wb.domainserver.domain.gcone.login.vo.LoginUser">
INSERT INTO
GC_MANAGER_CONECT_LOG
(MNGR_INNB
, CONECT_IP
, CONECT_BRWSR
, CONECT_DT)
VALUES (
#{userInnb} -- 관리자 고유번호
, #{conectIp} -- 접속IP
, #{conectBrwsr} -- 접속 브라우저
,NOW() -- 접속일시
)
</insert>
</mapper>

View File

@@ -0,0 +1 @@
<?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.wb.domainserver.domain.gcone.markt.markt.mapper.BOMarktMapper"></mapper>

View File

@@ -0,0 +1,40 @@
<?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.wb.domainserver.domain.gcone.match.mapper.BOMatchMemberMapper">
<resultMap id="matchMemberResultMap" type="com.wb.domainserver.domain.gcone.match.vo.BOMatchMemberVO">
<result property="mbtlnb" column="MBTLNB"/>
<result property="mbrInnb" column="MBR_INNB"/>
<result property="cnt" column="cnt"/>
<result property="joinMthCd" column="JOIN_MTH_CD"/>
</resultMap>
<select id="selectMatchMember" resultMap="matchMemberResultMap">
SELECT
MBTLNB,
MIN(MBR_INNB) AS MBR_INNB,
SUM(cnt) AS cnt
FROM (
SELECT REPLACE(AES_DECRYPT(UNHEX(M.MBTLNB), #{secretKey}), '-', '') AS MBTLNB,
M.MBR_INNB AS MBR_INNB,
COUNT(O.ORDR_INNB) AS cnt
FROM GC_MEMBER M
LEFT JOIN GC_ORDER O
ON O.MBR_INNB = M.MBR_INNB
AND O.MBR_DV_CD = (SELECT CASE WHEN SOPMAL_TY_CD = '02' THEN SOPMAL_CD ELSE 'GC' END FROM GC_SHOP WHERE SOPMAL_CD = #{sopmalCd})
AND O.ORDR_STTUS_CD BETWEEN 25 AND 75
WHERE M.USE_AT = 'Y'
AND M.MBTLNB IN
<foreach item="item" collection="telnbList" open="(" separator="," close=")">
HEX(AES_ENCRYPT(REPLACE(#{item}, '-', ''), #{secretKey}))
</foreach>
AND M.MBR_DV_CD = (SELECT CASE WHEN SOPMAL_TY_CD = '02' THEN SOPMAL_CD ELSE 'GC' END FROM GC_SHOP WHERE SOPMAL_CD = #{sopmalCd})
GROUP BY MBTLNB, MBR_INNB
) T
GROUP BY MBTLNB
</select>
</mapper>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,443 @@
<?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.wb.domainserver.domain.gcone.mngrstr.mapper.BOMngrStrMapper">
<!-- 공통코드 조회 -->
<select id = "selectBOMngrStrComnCd"
parameterType="java.lang.String"
resultType = "dataMap">
<![CDATA[
SELECT CD,
CD_NM,
CD_DV
FROM GC_CODE
WHERE GROUP_CD = #{param}
]]>
</select>
<!-- 매장 검색 조건 WHERE -->
<sql id="mngrStrListWhere">
<![CDATA[
WHERE 1 = 1
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(manageCpr)">
<![CDATA[
AND gs.MANAGE_CPR = #{manageCpr}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(reprsntBrand)">
<![CDATA[
AND gs.REPRSNT_BRAND = #{reprsntBrand}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(trtmntBrand)">
<![CDATA[
AND (
]]>
<foreach collection="trtmntBrand" item="trtmntBrand" open="" separator="OR" close="">
<![CDATA[
gs.TRTMNT_BRAND LIKE CONCAT('%', #{trtmntBrand}, '%')
]]>
</foreach>
<![CDATA[
)
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(strEstblDvCd)">
<![CDATA[
AND gs.STR_ESTBL_DV_CD IN
]]>
<foreach collection="strEstblDvCd" item="strEstblDvCd" open="(" separator="," close=")">
<![CDATA[
#{strEstblDvCd}
]]>
</foreach>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(strOperDv)">
<![CDATA[
AND gs.STR_OPER_DV IN
]]>
<foreach collection="strOperDv" item="strOperDv" open="(" separator="," close=")">
<![CDATA[
#{strOperDv}
]]>
</foreach>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(tentSttus)">
<![CDATA[
AND gs.TENT_STTUS IN
]]>
<foreach collection="tentSttus" item="tentSttus" open="(" separator="," close=")">
<![CDATA[
#{tentSttus}
]]>
</foreach>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(posCdDvVal)">
<![CDATA[
AND gs.POS_CD_DV_VAL = #{posCdDvVal}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(posCdPassivInputVal)">
<![CDATA[
AND gs.pos_Cd_Passiv_Input_Val = #{posCdPassivInputVal}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(tentcpnNm)">
<![CDATA[
AND gs.TENTCPN_NM like CONCAT('%', #{tentcpnNm}, '%')
]]>
</if>
</sql>
<!-- 매장 개수 조회 -->
<select id = "selectBOMngrStrListCnt"
parameterType="com.wb.domainserver.domain.gcone.mngrstr.vo.BOMngrStrVO"
resultType = "java.lang.Integer">
<![CDATA[
SELECT COUNT(1)
FROM GC_STORE gs
]]>
<include refid="mngrStrListWhere"/>
</select>
<!-- 매장 목록 조회 -->
<select id = "selectBOMngrStrListInqire"
parameterType="com.wb.domainserver.domain.gcone.mngrstr.vo.BOMngrStrVO"
resultType = "dataMap">
<![CDATA[
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM,
TB.*
FROM (
SELECT gs.STR_INNB,
FN_GET_COMMCODE_NAME('MANAGE_CPR', gs.MANAGE_CPR) AS MANAGE_CPR,
FN_GET_COMMCODE_NAME('REPRSNT_BRAND', gs.REPRSNT_BRAND) AS REPRSNT_BRAND,
GROUP_CONCAT(gc.CD_NM ORDER BY FIND_IN_SET(gc.CD, REPLACE(gs.TRTMNT_BRAND, '/', ',')) SEPARATOR '/') AS TRTMNT_BRAND,
FN_GET_COMMCODE_NAME('STR_DV', gs.STR_OPER_DV) AS STR_OPER_DV,
TENT_STTUS AS TENT_STTUS_CD,
FN_GET_COMMCODE_NAME('TENT_STTUS', gs.TENT_STTUS) AS TENT_STTUS,
DATE_FORMAT(gs.OPBIZ_DE, '%Y-%m-%d') AS OPBIZ_DE,
DATE_FORMAT(gs.CLSTR_DE, '%Y-%m-%d') AS CLSTR_DE,
gs.POS_CD_DV_VAL,
gs.POS_CD_PASSIV_INPUT_VAL,
gs.TENTCPN_ID,
gs.TENTCPN_NM,
gs.REGIST_DT
FROM GC_STORE gs
LEFT JOIN GC_CODE gc
ON FIND_IN_SET(gc.CD, REPLACE(gs.TRTMNT_BRAND, '/', ',')) > 0
AND gc.GROUP_CD = 'TRTMNT_BRAND'
]]>
<include refid="mngrStrListWhere"/>
<![CDATA[
GROUP BY gs.STR_INNB,
MANAGE_CPR,
REPRSNT_BRAND,
gs.TRTMNT_BRAND,
STR_OPER_DV,
TENT_STTUS_CD,
TENT_STTUS,
OPBIZ_DE,
CLSTR_DE,
gs.POS_CD_DV_VAL,
gs.POS_CD_PASSIV_INPUT_VAL,
gs.TENTCPN_ID,
gs.TENTCPN_NM
) TB
WHERE (@rownum:=0)=0
ORDER BY
]]>
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(sortDv)">
<![CDATA[
TB.REGIST_DT DESC
]]>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(sortDv, 'registDt')">
<![CDATA[
TB.REGIST_DT DESC
]]>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(sortDv, 'tentcpnNm')">
<![CDATA[
TB.TENTCPN_NM ASC
]]>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(sortDv, 'tentcpnId')">
<![CDATA[
TB.TENTCPN_ID ASC
]]>
</when>
</choose>
<![CDATA[
) PV
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!-- 매장 상세 조회 -->
<select id = "selectBOMngrStrDtlInqire"
parameterType="com.wb.domainserver.domain.gcone.mngrstr.vo.BOMngrStrVO"
resultType = "dataMap">
<![CDATA[
SELECT gs.STR_INNB,
-- 기본정보
DATE_FORMAT(gs.REGIST_DT, '%Y-%m-%d %H:%i:%s') AS REGIST_DT,
DATE_FORMAT(gs.LAST_LOGIN_DT, '%Y-%m-%d %H:%i:%s') AS LAST_LOGIN_DT,
FN_GET_COMMCODE_NAME('MANAGE_CPR', gs.MANAGE_CPR) AS MANAGE_CPR,
gs.MANAGE_CPR AS MANAGE_CPR_CD,
FN_GET_COMMCODE_NAME('REPRSNT_BRAND', gs.REPRSNT_BRAND) AS REPRSNT_BRAND,
gs.REPRSNT_BRAND AS REPRSNT_BRAND_CD,
GROUP_CONCAT(gc.CD_NM ORDER BY FIND_IN_SET(gc.CD, REPLACE(gs.TRTMNT_BRAND, '/', ',')) SEPARATOR ' ■') AS TRTMNT_BRAND,
FN_GET_COMMCODE_NAME('POS_HDQRTRS', gs.POS_CD_DV_VAL) AS POS_HDQRTRS,
gs.POS_CD_DV_VAL,
gs.POS_CD_PASSIV_INPUT_VAL,
gs.STR_CD,
FN_GET_COMMCODE_NAME('STR_ESTBL_DV', gs.STR_ESTBL_DV_CD) AS STR_ESTBL_DV_CD,
FN_GET_COMMCODE_NAME('STR_DV', gs.STR_OPER_DV) AS STR_OPER_DV,
FN_GET_COMMCODE_NAME('STR_KND', gs.DV) AS DV,
FN_GET_COMMCODE_NAME('STR_KND_STTUS', gs.STR_KND_DTL) AS STR_KND_DTL,
gs.SITE_EXPSR_AT,
FN_GET_COMMCODE_NAME('TENT_STTUS', gs.TENT_STTUS) AS TENT_STTUS,
DATE_FORMAT(gs.OPBIZ_DE, '%Y-%m-%d') AS OPBIZ_DE,
DATE_FORMAT(gs.CLSTR_DE, '%Y-%m-%d') AS CLSTR_DE,
gs.AW_LOGIN_AT,
gs.TENTCPN_NM,
gs.STR_NM,
gs.TENTCPN_ID,
gs.TENTCPN_PASSWORD,
-- 매장정보
gs.CHR_DSPTCH_NB,
gs.STR_TELNB,
gs.LOC,
gs.CTY_DO,
gs.CTY_GUN_GU,
gs.STR_ADRES_DV,
gs.STR_ZIP,
gs.STR_ADRES,
gs.STR_RNM_ADRES,
gs.STR_DTL_ADRES,
-- 지도
gs.LA,
gs.LO,
gs.HTGH_PBTRNSP,
gs.HTGH_PVTCAR,
gs.HVOF_DE,
gs.HVOF_DE_ADIT,
gs.BSN_TME,
-- 매장이미지
gs.STR_REPRSNT_IMG,
gs.STR_DTL_IMG,
-- 사업자정보
gs.ENTRPS_NM,
gs.BSNM_NB,
gs.REPRSNTVNM,
FN_GET_COMMCODE_NAME('INDVDL_CPR_DV', gs.INDVDL_CPR_DV) AS INDVDL_CPR_DV,
gs.BIZCND_INDUTY,
gs.SVC,
-- 사업자등록증 사본
gs.ADRES_DV,
gs.ENTRPS_ZIP,
gs.ENTRPS_ADRES,
gs.RNM_ADRES,
gs.ENTRPS_DTL_ADRES,
gs.COMM_SLE_DCL_NB,
gs.SELER_TELNB,
gs.SELER_EMAIL,
gs.SELER_FAX,
-- 대표자정보
gs.REPRSNTV_INFO_REPRSNTVNM,
gs.REPRSNTV_INFO_TELNB,
gs.REPRSNTV_INFO_ADRES_DV,
gs.REPRSNTV_INFO_ZIP,
gs.REPRSNTV_INFO_ADRES,
gs.REPRSNTV_INFO_RNM_ADRES,
gs.REPRSNTV_INFO_DTL_ADRES,
-- 고정지출비용
gs.FIXING_EXPNDTR_RNTCHRG,
gs.FIXING_EXPNDTR_MANAGECT,
gs.FIXING_EXPNDTR_RYALTY,
gs.FIXING_EXPNDTR_SYS_RNTFEE,
gs.FIXING_EXPNDTR_LBCT,
gs.FIXING_EXPNDTR_CARD_FEE,
gs.FIXING_EXPNDTR_PRCT,
gs.FIXING_EXPNDTR_STR_OPERCT,
-- 처리내역
gs.UPDT_DTLS
FROM GC_STORE gs
LEFT JOIN GC_CODE gc
ON FIND_IN_SET(gc.CD, REPLACE(gs.TRTMNT_BRAND, '/', ',')) > 0
AND gc.GROUP_CD = 'TRTMNT_BRAND'
WHERE 1 = 1
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(strInnb)">
<![CDATA[
AND gs.STR_INNB = #{strInnb}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(posCdPassivInputVal)">
<![CDATA[
AND CONCAT(gs.POS_CD_DV_VAL, gs.POS_CD_PASSIV_INPUT_VAL) = #{posCdPassivInputVal}
]]>
</if>
<![CDATA[
GROUP BY gs.STR_INNB,
-- 기본정보
REGIST_DT,
LAST_LOGIN_DT,
MANAGE_CPR,
REPRSNT_BRAND,
TRTMNT_BRAND,
POS_HDQRTRS,
gs.POS_CD_DV_VAL,
gs.POS_CD_PASSIV_INPUT_VAL,
gs.STR_CD,
STR_ESTBL_DV_CD,
STR_OPER_DV,
DV,
STR_KND_DTL,
gs.SITE_EXPSR_AT,
TENT_STTUS,
OPBIZ_DE,
CLSTR_DE,
gs.AW_LOGIN_AT,
gs.TENTCPN_NM,
gs.STR_NM,
gs.TENTCPN_ID,
-- 매장정보
gs.CHR_DSPTCH_NB,
gs.STR_TELNB,
gs.LOC,
gs.CTY_DO,
gs.CTY_GUN_GU,
gs.STR_ADRES_DV,
gs.STR_ZIP,
gs.STR_ADRES,
gs.STR_RNM_ADRES,
gs.STR_DTL_ADRES,
-- 지도
gs.LA,
gs.LO,
gs.HTGH_PBTRNSP,
gs.HTGH_PVTCAR,
gs.HVOF_DE,
gs.HVOF_DE_ADIT,
gs.BSN_TME,
-- 매장이미지
gs.STR_REPRSNT_IMG,
gs.STR_DTL_IMG,
-- 사업자정보
gs.ENTRPS_NM,
gs.BSNM_NB,
gs.REPRSNTVNM,
INDVDL_CPR_DV,
gs.BIZCND_INDUTY,
gs.SVC,
-- 사업자등록증 사본
gs.ADRES_DV,
gs.ENTRPS_ZIP,
gs.ENTRPS_ADRES,
gs.RNM_ADRES,
gs.ENTRPS_DTL_ADRES,
gs.COMM_SLE_DCL_NB,
gs.SELER_TELNB,
gs.SELER_EMAIL,
gs.SELER_FAX,
-- 대표자정보
gs.REPRSNTV_INFO_REPRSNTVNM,
gs.REPRSNTV_INFO_TELNB,
gs.REPRSNTV_INFO_ADRES_DV,
gs.REPRSNTV_INFO_ZIP,
gs.REPRSNTV_INFO_ADRES,
gs.REPRSNTV_INFO_RNM_ADRES,
gs.REPRSNTV_INFO_DTL_ADRES,
-- 고정지출비용
gs.FIXING_EXPNDTR_RNTCHRG,
gs.FIXING_EXPNDTR_MANAGECT,
gs.FIXING_EXPNDTR_RYALTY,
gs.FIXING_EXPNDTR_SYS_RNTFEE,
gs.FIXING_EXPNDTR_LBCT,
gs.FIXING_EXPNDTR_CARD_FEE,
gs.FIXING_EXPNDTR_PRCT,
gs.FIXING_EXPNDTR_STR_OPERCT,
-- 처리내역
gs.UPDT_DTLS
]]>
</select>
<!--매장 아이디 중복 조회 -->
<select id = "selectBOIdDplctCnfirm"
parameterType="com.wb.domainserver.domain.gcone.mngrstr.vo.BOMngrStrVO"
resultType = "Integer">
<![CDATA[
SELECT
COUNT(1)
FROM
GC_STORE
WHERE 1 = 1
AND TENTCPN_ID = #{tentcpnId}
]]>
</select>
<!-- 매장 상세 수정 -->
<update id="updateBOMngrStrDtlU"
parameterType="com.wb.domainserver.domain.gcone.mngrstr.vo.BOMngrStrVO">
<![CDATA[
UPDATE
GC_STORE
SET
SITE_EXPSR_AT = #{siteExpsrAt},
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(awLoginAt)">
<![CDATA[
AW_LOGIN_AT = #{awLoginAt},
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(changeIdAt, 'Y')">
<![CDATA[
TENTCPN_ID = #{tentcpnId},
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(changePasswordAt, 'Y')">
<![CDATA[
TENTCPN_PASSWORD = #{newPassword},
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(chrDsptchNb)">
<![CDATA[
CHR_DSPTCH_NB = #{chrDsptchNb},
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(strReprsntImg)">
<![CDATA[
STR_REPRSNT_IMG = null,
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(strReprsntImg)">
<![CDATA[
STR_REPRSNT_IMG = #{strReprsntImg},
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(strDtlImg)">
<![CDATA[
STR_DTL_IMG = null,
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(strDtlImg)">
<![CDATA[
STR_DTL_IMG = #{strDtlImg},
]]>
</if>
<![CDATA[
HVOF_DE = #{hvofDe},
HVOF_DE_ADIT = #{hvofDeAdit},
BSN_TME = #{bsnTme},
UPDUSR = #{updusr},
UPDT_DT = SYSDATE()
WHERE 1 = 1
AND STR_INNB = #{strInnb}
]]>
</update>
</mapper>

View File

@@ -0,0 +1,353 @@
<?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.wb.domainserver.domain.gcone.ntcn.atmcsndng.mapper.BOAtmcSndngMapper">
<!-- sms 발송 관리 목록 조회 FROM 절 -->
<sql id = "SmsSndngDtlsListFrom">
FROM GC_SMS_TO SMSTO
INNER JOIN GC_SMS SMS
ON SMSTO.SMS_INNB = SMS.SMS_INNB
AND SMSTO.SOPMAL_CD = SMS.SOPMAL_CD
</sql>
<!-- sms 발송 관리 목록 조회 WHERE 절 -->
<sql id = "SmsSndngDtlsListWhere">
<![CDATA[
WHERE 1=1
]]>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sopmalCd)">
<![CDATA[
AND SMS.SOPMAL_CD = #{sopmalCd}
AND SMSTO.SOPMAL_CD = #{sopmalCd}
]]>
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSopmalCd)">
<![CDATA[
AND SMS.SOPMAL_CD = #{srchSopmalCd}
AND SMSTO.SOPMAL_CD = #{srchSopmalCd}
]]>
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSmsInnb)">
<![CDATA[
AND SMS.SMS_INNB = #{srchSmsInnb}
]]>
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSmsToInnb)">
<![CDATA[
AND SMSTO.SMS_TO_INNB = #{srchSmsToInnb}
]]>
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchRecptnNb)">
<![CDATA[
AND CAST(AES_DECRYPT(UNHEX(SMSTO.RECPTN_NB) , '1df5be2f7e90ae36') AS CHAR(50)) = REPLACE(#{srchRecptnNb},'-','')
]]>
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStr)">
<choose>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchNbDv, 'recpntNb')">
<![CDATA[
AND CAST(AES_DECRYPT(UNHEX(SMSTO.RECPTN_NB) , '1df5be2f7e90ae36') AS CHAR(50)) LIKE CONCAT('%', REPLACE(#{srchStr},'-',''), '%')
]]>
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchNbDv, 'sndngNb')">
<![CDATA[
AND SMS.SNDNG_NB LIKE CONCAT('%', #{srchStr}, '%')
]]>
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchNbDv, 'cstmrIdnb')">
<![CDATA[
AND SMSTO.CSTMR_IDNB LIKE CONCAT('%', #{srchStr}, '%')
]]>
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchNbDv, 'cn')">
<![CDATA[
AND (
SMS.CN LIKE CONCAT('%', #{srchStr}, '%')
OR SMSTO.SUBST_DATA LIKE CONCAT('%', #{srchStr}, '%')
)
]]>
</when>
</choose>
</if>
<!-- 발송일 -->
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDtDv, 'sndngDt')">
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStrtSndngDt)">
<![CDATA[
AND SMS.SNDNG_DT >= #{srchStrtSndngDt} ' 00:00:00'
]]>
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndSndngDt)">
<![CDATA[
AND SMS.SNDNG_DT <= #{srchEndSndngDt} ' 00:00:00'
]]>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStrtSndngDt)
and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndSndngDt)">
<![CDATA[
AND SMS.SNDNG_DT BETWEEN #{srchStrtSndngDt} ' 00:00:00' AND #{srchEndSndngDt} ' 23:59:59'
]]>
</when>
</choose>
</if>
<!-- 등록일 -->
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDtDv, 'registDt')">
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStrtSndngDt)">
<![CDATA[
AND SMS.REGIST_DT >= #{srchStrtSndngDt} ' 00:00:00'
]]>
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndSndngDt)">
<![CDATA[
AND SMS.REGIST_DT <= #{srchEndSndngDt} ' 00:00:00'
]]>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStrtSndngDt)
and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndSndngDt)">
<![CDATA[
AND SMS.REGIST_DT BETWEEN #{srchStrtSndngDt} ' 00:00:00' AND #{srchEndSndngDt} ' 23:59:59'
]]>
</when>
</choose>
</if>
<choose>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchDv)">
<![CDATA[
AND SMSTO.DV IN
]]>
<foreach collection="srchDv" item="dv" open="(" separator="," close=")">
<![CDATA[
#{dv}
]]>
</foreach>
</when>
<otherwise>
AND SMSTO.DV != 'AT'
AND SMSTO.DV != 'AI'
</otherwise>
</choose>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSttus)">
<![CDATA[
AND SMSTO.STTUS IN
]]>
<foreach collection="srchSttus" item="sttus" open="(" separator="," close=")">
<![CDATA[
#{sttus}
]]>
</foreach>
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchRegusrDv)">
<![CDATA[
AND SMS.REGUSR_DV = #{srchRegusrDv}
]]>
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sndngNb)">
<![CDATA[
AND SMS.SNDNG_NB = #{sndngNb}
AND SMSTO.RECPTN_NB = REPLACE(#{recptnNb},'-','')
]]>
</if>
</sql>
<!-- 자동 발송 관리 목록 -->
<select id="selectBOAtmcSndngManageListInqire"
parameterType="com.wb.domainserver.domain.gcone.ntcn.atmcsndng.vo.BOAtmcSndngVO"
resultType="dataMap">
<![CDATA[
SELECT *
FROM GC_MESSAGE_SNDNG SNDNG
JOIN (
SELECT GROUPCODE.CD_NM AS GROUP_CD_NM, CODE.GROUP_CD, CODE.CD, CODE.CD_NM
FROM (
SELECT CD, CD_NM, USE_AT
FROM GC_CODE
WHERE GROUP_CD LIKE 'FORM_DV%'
) GROUPCODE
JOIN GC_CODE CODE
ON REPLACE(CODE.GROUP_CD, #{formDvCd}, '') = GROUPCODE.CD
AND CODE.USE_AT = 'Y'
) CODE
ON CODE.GROUP_CD = SNDNG.FORM_DV_CD
AND CODE.CD = SNDNG.FORM_DTL_DV_CD
WHERE SNDNG.SOPMAL_CD = #{sopmalCd}
AND SNDNG.EXPSR_AT = 'Y'
AND SNDNG.MNGR_DV = #{mngrDv}
ORDER BY SNDNG.FORM_DV_CD, SNDNG.FORM_DTL_DV_CD
]]>
</select>
<!-- 자동 발송 관리 수정 -->
<update id="updateBOAtmcSndngManageUpdt" parameterType="com.wb.domainserver.domain.gcone.ntcn.atmcsndng.vo.BOAtmcSndngVO">
<foreach collection="list" item="dto" separator=";">
<![CDATA[
UPDATE GC_MESSAGE_SNDNG
SET
USE_AT = #{dto.useAt}
, EMAIL_USE_AT = #{dto.emailUseAt}
, SMS_USE_AT = #{dto.smsUseAt}
, NTCNTALK_USE_AT = #{dto.ntcntalkUseAt}
, MARKT_AT = #{dto.marktAt}
, SNDNG_STDR_DE = #{dto.sndngStdrDe}
, SNDNG_STDR_TME = #{dto.sndngStdrTme}
, UPDUSR = #{dto.updusr}
, UPDT_DT = SYSDATE()
WHERE SOPMAL_CD = #{dto.sopmalCd}
AND FORM_DV_CD = #{dto.formDvCd}
AND FORM_DTL_DV_CD = #{dto.formDtlDvCd}
]]>
</foreach>
</update>
<!-- 이메일 템플릿 사용여부 수정 -->
<update id="updateBOEmailTmplatUseAt" parameterType="com.wb.domainserver.domain.gcone.ntcn.atmcsndng.vo.BOAtmcSndngVO">
<foreach collection="list" item="dto" separator=";">
<![CDATA[
UPDATE GC_EMAIL_FORM
SET
USE_AT = #{dto.emailUseAt}
WHERE SOPMAL_CD = #{dto.sopmalCd}
AND FORM_DV_CD = #{dto.formDvCd}
AND FORM_DTL_DV_CD = #{dto.formDtlDvCd}
]]>
</foreach>
</update>
<!-- 메시지 템플릿 사용여부 수정 -->
<update id="updateBOMssageTmplatUseAt" parameterType="com.wb.domainserver.domain.gcone.ntcn.atmcsndng.vo.BOAtmcSndngVO">
<foreach collection="list" item="dto" separator=";">
<![CDATA[
UPDATE GC_SMS_FORM
SET
USE_AT = #{dto.smsUseAt}
WHERE SOPMAL_CD = #{dto.sopmalCd}
AND FORM_DV_CD = #{dto.formDvCd}
AND FORM_DTL_DV_CD = #{dto.formDtlDvCd}
]]>
</foreach>
</update>
<!-- 알림톡 템플릿 사용여부 수정 -->
<update id="updateBOKakaoTmplatUseAt" parameterType="com.wb.domainserver.domain.gcone.ntcn.atmcsndng.vo.BOAtmcSndngVO">
<foreach collection="list" item="dto" separator=";">
<![CDATA[
UPDATE GC_KAKAO_FORM
SET
USE_AT = #{dto.ntcntalkUseAt}
WHERE SOPMAL_CD = #{dto.sopmalCd}
AND FORM_DV_CD = #{dto.formDvCd}
AND FORM_DTL_DV_CD = #{dto.formDtlDvCd}
]]>
</foreach>
</update>
<!-- sms 발송 목록 조회 -->
<select id = "selectBOSmsSndngDtlsListInqire"
parameterType="com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOMssageSrchVO"
resultType="dataMap">
<![CDATA[
SELECT
ROW_NUMBER() OVER (ORDER BY SMS.SNDNG_DT, SMSTO.SMS_TO_INNB ASC) AS RNUM,
SMS.SNDNG_NB,
SMSTO.DV,
DATE_FORMAT(SMS.REGIST_DT,'%Y-%m-%d %H:%i:%S') AS REGIST_DT,
CASE
WHEN SMS.RESVE_DT IS NULL THEN DATE_FORMAT(SMS.SNDNG_DT ,'%Y-%m-%d %H:%i:%S')
ELSE DATE_FORMAT(SMS.RESVE_DT, '%Y-%m-%d %H:%i:%S')
END AS SNDNG_DT, -- 예약날짜가 있을경우 예약날짜로 발송시간 표출
CAST(AES_DECRYPT(UNHEX(SMSTO.RECPTN_NB) , '1df5be2f7e90ae36') AS CHAR(50)) AS RECPTN_NB,
SMS.CN AS CN,
SMS.SMS_INNB,
SMSTO.SMS_TO_INNB,
SMSTO.STTUS,
SMS.SUCCES_CNT,
SMS.FAILR_CNT,
SMS.CHR_STTUS,
SMS.SOPMAL_CD ,
SMSTO.RSLT_SJ,
SMSTO.SUBST_DATA,
SHOP.SOPMAL_NM
]]>
<include refid="SmsSndngDtlsListFrom"/>
INNER JOIN GC_SHOP SHOP
ON SMS.SOPMAL_CD = SHOP.SOPMAL_CD
<include refid="SmsSndngDtlsListWhere"/>
<![CDATA[
-- ) TB
ORDER BY RNUM DESC
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!--sms 발송 상세 조회 -->
<select id = "selectBOSmsSndngDtlInfo"
parameterType="com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOMssageSrchVO"
resultType="dataMap">
<![CDATA[
SELECT
SMS.SNDNG_NB,
SMSTO.DV,
DATE_FORMAT(SMS.REGIST_DT,'%Y-%m-%d %H:%i:%S')AS REGIST_DT ,
DATE_FORMAT(SMS.SNDNG_DT ,'%Y-%m-%d %H:%i:%S')AS SNDNG_DT,
CAST(AES_DECRYPT(UNHEX(SMSTO.RECPTN_NB) , '1df5be2f7e90ae36') AS CHAR(50)) AS RECPTN_NB,
SMS.CN AS CN,
SMS.SMS_INNB,
SMSTO.SMS_TO_INNB,
SMSTO.STTUS,
SMS.SUCCES_CNT,
SMS.FAILR_CNT,
SMS.CHR_STTUS,
SMSTO.RSLT_SJ,
SMSTO.SUBST_DATA
]]>
<include refid="SmsSndngDtlsListFrom"/>
<include refid="SmsSndngDtlsListWhere"/>
</select>
<!--sms 발송 관리 건수 조회 -->
<select id = "selectBOSmsSndngDtlsListTotCnt"
parameterType="com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOMssageSrchVO"
resultType="Integer">
<![CDATA[
SELECT COUNT(1)
]]>
<include refid="SmsSndngDtlsListFrom"/>
<include refid="SmsSndngDtlsListWhere"/>
</select>
<!--sms 발송 관리 발신 목록 성공 건수 -->
<select id = "selectBOSmsSndngresultOkCnt"
parameterType="com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOMssageSrchVO"
resultType="dataMap">
<![CDATA[
SELECT
COUNT(SMSTO.STTUS) OKCNT
]]>
<include refid="SmsSndngDtlsListFrom"/>
<include refid="SmsSndngDtlsListWhere"/>
<![CDATA[
AND SMSTO.STTUS IN ('OK')
]]>
</select>
<!--sms 발송 관리 발신 목록 실패 건수 -->
<select id = "selectBOSmsSndngresultFailCnt"
parameterType="com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOMssageSrchVO"
resultType="dataMap">
<![CDATA[
SELECT
COUNT(SMSTO.STTUS) FAILCNT
]]>
<include refid="SmsSndngDtlsListFrom"/>
<include refid="SmsSndngDtlsListWhere"/>
<![CDATA[
AND SMSTO.STTUS IN ('FAIL')
]]>
</select>
<!-- 자동발송 가능 시간 조회 -->
<select id="selectBOShopAtmcSndngTme">
SELECT
LEFT(SMS_ATMC_SNDNG_LMTT_BGNTME, 2) AS SMS_ATMC_SNDNG_LMTT_BGNTME
, LEFT(SMS_ATMC_SNDNG_LMTT_ENDTME, 2) AS SMS_ATMC_SNDNG_LMTT_ENDTME
FROM GC_SHOP
WHERE 1=1
AND SOPMAL_CD = #{sopmalCd}
</select>
</mapper>

View File

@@ -0,0 +1,99 @@
<?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.wb.domainserver.domain.gcone.ntcn.email.mapper.BOEmailMapper">
<!-- 이메일 발송내역 등록 -->
<insert id="insertBOEmailSndngDtls"
parameterType="com.wb.domainserver.domain.gcone.ntcn.email.vo.BOEmailVO"
useGeneratedKeys="true"
keyProperty="emailSndngInnb">
INSERT INTO GC_EMAIL (
SOPMAL_CD
, SNDNG_LC
, SJ
, CN
, SNDR_EMAIL
, RECPTN_RJCT_URL
, REGUSR_DV
, REGUSR
, REGIST_DT
)
VALUES (
#{sopmalCd}
, #{sndngLc}
, #{sj}
, #{cn}
, HEX(AES_ENCRYPT(#{sndrEmail}, #{secretKey}))
, #{recptnRjctUrl}
, #{regusrDv}
, #{regusr}
, SYSDATE()
)
</insert>
<!-- 이메일 발송대상 등록 -->
<insert id="insertBOEmailSndngTo"
parameterType="java.util.List"
useGeneratedKeys="true"
keyProperty="trgetSnb">
INSERT INTO GC_EMAIL_TO (
EMAIL_SNDNG_INNB
, MBR_INNB
, RECPNT_EMAIL
, RECPNT_NM
, STTUS
, SNDNG_DT
, RSLT_CD
)
VALUES
<foreach collection="list" item="dto" separator=",">
(
#{dto.emailSndngInnb}
, #{dto.mbrInnb}
, HEX(AES_ENCRYPT(#{dto.recpntEmail}, #{dto.secretKey}))
, #{dto.recpntNm}
, #{dto.sttus}
, #{dto.sndngDt}
, #{dto.rsltCd}
)
</foreach>
</insert>
<!-- 이메일 발송대상 순번 조회 -->
<select id = "selectBOEmailSndngTrgetSnb"
parameterType="java.lang.Integer"
resultType="java.lang.Integer">
<![CDATA[
SELECT TRGET_SNB
FROM GC_EMAIL_TO
WHERE EMAIL_SNDNG_INNB = #{emailSndngInnb}
]]>
</select>
<!-- 이메일 발신자명(쇼핑몰 이름) 조회 -->
<select id = "selectBOEmailSopmalNm"
parameterType="com.wb.domainserver.domain.gcone.ntcn.email.vo.BOEmailVO"
resultType="java.lang.String">
<![CDATA[
SELECT SOPMAL_NM
FROM GC_SHOP
WHERE SOPMAL_CD = #{sopmalCd}
]]>
</select>
<!-- 이메일 발송여부 업데이트 -->
<update id="updateBOEmailSndng"
parameterType="com.wb.domainserver.domain.gcone.ntcn.email.vo.BOEmailVO">
<foreach collection="list" item="dto" separator=";">
<![CDATA[
UPDATE GC_EMAIL_TO
SET
STTUS = #{dto.sttus}
, SNDNG_DT = SYSDATE()
, RSLT_CD = #{dto.rsltCd}
WHERE EMAIL_SNDNG_INNB = #{dto.emailSndngInnb}
AND TRGET_SNB = #{dto.trgetSnb}
]]>
</foreach>
</update>
</mapper>

View File

@@ -0,0 +1,512 @@
<?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.wb.domainserver.domain.gcone.ntcn.lgqymssage.mapper.BOLgqyMssageMapper">
<!-- 대량 발송 관리 목록 조회 WHERE 절 -->
<sql id="MssageLgqySndngDtlsListWhere">
WHERE 1=1
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSmsLgqySndngInnb)">
<![CDATA[
AND LGQYSMS.SMS_LGQY_SNDNG_INNB = #{srchSmsLgqySndngInnb}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchBrandCd)">
<![CDATA[
AND LGQYSMS.BRAND_CD = #{srchBrandCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSopmalCd)">
<![CDATA[
AND LGQYSMS.SOPMAL_CD = #{srchSopmalCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSndngCn)">
<![CDATA[
AND LGQYSMS.SNDNG_CN LIKE CONCAT('%', #{srchSndngCn}, '%')
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStrtRegistDt)">
<![CDATA[
AND DATE_FORMAT(LGQYSMS.REGIST_DT ,'%Y-%m-%d') >= #{srchStrtRegistDt}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndRegistDt)">
<![CDATA[
AND DATE_FORMAT(LGQYSMS.REGIST_DT ,'%Y-%m-%d') <= #{srchEndRegistDt}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSndngSttus)">
<![CDATA[
AND LGQYSMS.SNDNG_STTUS = #{srchSndngSttus}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSndngReqstDt)">
<![CDATA[
AND LGQYSMS.SNDNG_REQST_DT = #{srchSndngReqstDt}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSndngDvCd)">
<![CDATA[
AND LGQYSMS.SNDNG_DV_CD = #{srchSndngDvCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchSndngDvCd)">
<![CDATA[
AND LGQYSMS.SNDNG_DV_CD <> '02' -- 소멸예정 마일리지 제외
]]>
</if>
</sql>
<!-- 대량메시지 쇼핑몰 정보 조회 -->
<select id="selectBOShopInfoInqire" resultType="DataMap">
SELECT *
FROM GC_SHOP
WHERE 1 = 1
AND SOPMAL_CD = #{srchSopmalCd}
</select>
<!-- 쇼핑몰 리스트 조회 -->
<select id="selectBOShopListInqire" resultType="DataMap">
SELECT SOPMAL_CD,
SOPMAL_NM
FROM GC_SHOP
WHERE 1 = 1
AND OPER_AT = 'Y'
</select>
<!--대량 메시지 발송 관리 건수 조회 -->
<select id="selectBOMssageLgqySndngListTotCnt"
parameterType="com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOLgqyMssageSrchVO"
resultType="Integer">
SELECT
COUNT(1)
FROM GC_LGQY_SMS LGQYSMS
<include refid="MssageLgqySndngDtlsListWhere"/>
</select>
<!--대량 메시지 발송 내역 조회 -->
<select id="selectBOMssageLgqySndngListInqire"
parameterType="com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOLgqyMssageSrchVO"
resultType="dataMap">
SELECT
*
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM
, TB.*
FROM (
SELECT
LGQYSMS.SMS_LGQY_SNDNG_INNB,
FN_GET_SOPMAL_NAME(LGQYSMS.SOPMAL_CD) AS BRAND_CD,
LGQYSMS.SOPMAL_CD,
LGQYSMS.SNDNG_SJ,
DATE_FORMAT(LGQYSMS.REGIST_DT,'%Y-%m-%d %H:%i:%S') AS REGIST_DT,
DATE_FORMAT(LGQYSMS.SNDNG_REQST_DT ,'%Y-%m-%d %H:%i:%S') AS SNDNG_REQST_DT,
DATE_FORMAT(LGQYSMS.SNDNG_DT ,'%Y-%m-%d %H:%i:%S') AS SNDNG_DT,
CONCAT(LEFT(LGQYSMS.SNDNG_CN, 30),'...') SNDNG_CN,
LGQYSMS.ALL_CNT,
LGQYSMS.SUCCES_CNT,
LGQYSMS.SNDNG_STTUS,
LGQYSMS.SNDNG_PROCS_DV_CD
FROM GC_LGQY_SMS LGQYSMS
<include refid="MssageLgqySndngDtlsListWhere"/>
) TB
WHERE (@ROWNUM:=0)=0
) PV
ORDER BY RNUM DESC
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!-- 대량 메시지 상세 조회 -->
<select id="selectBOMssageLgqySndngDtlInqire"
parameterType="com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOLgqyMssageSrchVO"
resultType="dataMap">
SELECT
LGQYSMS.SMS_LGQY_SNDNG_INNB
, LGQYSMS.SOPMAL_CD
, LGQYSMS.BRAND_CD
, LGQYSMS.SNDNG_SJ
, LGQYSMS.SNDNG_CN
, LGQYSMS.LINK_URL1
, LGQYSMS.LINK_URL2
, LGQYSMS.LINK_URL3
, LGQYSMS.SNDNG_CND_PARAM
, LGQYSMS.SNDNG_TRGET_QRY
, DATE_FORMAT(LGQYSMS.REGIST_DT,'%Y-%m-%d %H:%i:%S') AS REGIST_DT
, DATE_FORMAT(LGQYSMS.SNDNG_REQST_DT ,'%Y-%m-%d %H:%i:%S') AS SNDNG_REQST_DT
, DATE_FORMAT(LGQYSMS.SNDNG_REQST_DT ,'%Y-%m-%d') AS SNDNG_REQST
, DATE_FORMAT(LGQYSMS.SNDNG_REQST_DT ,'%H') AS SNDNG_REQST_HOUR
, DATE_FORMAT(LGQYSMS.SNDNG_REQST_DT ,'%i') AS SNDNG_REQST_MINUTE
, DATE_FORMAT(LGQYSMS.SNDNG_REQST_DT ,'%S') AS SNDNG_REQST_SEC
, DATE_FORMAT(LGQYSMS.SNDNG_DT ,'%Y-%m-%d %H:%i:%S') AS SNDNG_DT
, LGQYSMS.SNDNG_CN
, LGQYSMS.ALL_CNT
, LGQYSMS.SUCCES_CNT
, LGQYSMS.SNDNG_STTUS
, LGQYSMS.REQUSR_NM
, LGQYSMS.SNDNG_DV_CD
, LGQYSMS.FIL_COURS
, LGQYSMS.ORGINL_FIL_NM
, LGQYSMS.SYS_FIL_NM
, LGQYSMS.LANDING_TY
, LGQYSMS.LANDING_USE_AT
, LGQYSMS.LANDING_POSITION
, LGQYSMS.RECPNT_DV
, (SELECT REPLACE(MBL_DOMN_ADRES, 'http://', '') FROM GC_SHOP SHOP WHERE SHOP.SOPMAL_CD = LGQYSMS.SOPMAL_CD) AS URL
, FN_GET_COMMCODE_NAME('SNDNG_DV', LGQYSMS.SNDNG_DV_CD) AS SNDNG_DV_CD_NM
FROM GC_LGQY_SMS LGQYSMS
WHERE LGQYSMS.SMS_LGQY_SNDNG_INNB = #{srchSmsLgqySndngInnb}
</select>
<!-- 대량 메시지 대상 조회 -->
<select id="selectBOMssageLgqySndngToInqire"
parameterType="com.wb.domainserver.domain.gcone.ntcn.lgqymssage.vo.BOLgqyMssageSrchVO"
resultType="dataMap">
SELECT SMS_LGQY_SNDNG_INNB
, LGQY_SNDNG_TRGET_INNB
, MNGR_INNB
, CAST(AES_DECRYPT(UNHEX(MBTLNB), '1df5be2f7e90ae36') AS CHAR(50)) AS MBTLNB
, NM
, MBR_ID
, STTUS
, SUBST_CHR_1
, SUBST_CHR_2
, SUBST_CHR_3
, SUBST_CHR_4
, SUBST_CHR_5
FROM GC_LGQY_SMS_TO LGQYSMSTO
WHERE 1 = 1
AND SMS_LGQY_SNDNG_INNB = #{srchSmsLgqySndngInnb}
</select>
<!-- 대량 메시지 발송내역 등록 -->
<insert id="insertBOMssageLgqySndngRegist"
parameterType="com.wb.domainserver.domain.gcone.ntcn.lgqymssage.vo.BOLgqyMssageVO"
keyProperty="smsLgqySndngInnb" useGeneratedKeys="true">
INSERT INTO GC_LGQY_SMS (
SOPMAL_CD
, BRAND_CD
, SNDNG_SJ
, SNDNG_CN
, SNDNG_PROCS_DV_CD
, SNDNG_CND_PARAM
, SNDNG_TRGET_QRY
, RECPNT_DV
, CALL_PGE_USE_AT
, LINK_URL1
, LINK_URL2
, LINK_URL3
, SNDNG_REQST_DT
, SNDNG_DT
, ALL_CNT
, SUCCES_CNT
, SNDNG_STTUS
, LANDING_USE_AT
, REQUSR_NM
, REGUSR
, REGIST_DT
, SNDNG_DV_CD
, UPDUSR
, UPDT_DT
)
VALUES (
#{sopmalCd}
, #{brandCd}
, #{sndngSj}
, #{sndngCn}
, '00'
, #{sndngCndParam}
, #{sndngTrgetQry}
, #{recpntDv}
, #{callPgeUseAt}
, #{linkUrl1}
, #{linkUrl2}
, #{linkUrl3}
, #{sndngReqstDt}
, #{sndngDt}
, #{allCnt}
, #{succesCnt}
, 'SAVE'
, #{landingUseAt}
, #{requsrNm}
, #{regusr}
, NOW()
, #{sndngDvCd}
, #{regusr}
, NOW()
)
</insert>
<!-- 대량 메시지 발송대상 등록 -->
<insert id="insertBOMssageLgqySndngToRegist"
parameterType="com.wb.domainserver.domain.gcone.ntcn.lgqymssage.vo.BOLgqyMssageVO">
INSERT INTO GC_LGQY_SMS_TO (
SMS_LGQY_SNDNG_INNB
, MNGR_INNB
, MBTLNB
, NM
, MBR_ID
, CHOISE_DT
, STTUS
, MEMO
, SUBST_CHR_1
, SUBST_CHR_2
, SUBST_CHR_3
, SUBST_CHR_4
, SUBST_CHR_5
, LINK_AT
, REGUSR
, REGIST_DT
)
VALUES
<foreach collection="list" item="lgqyTo" index="index" separator=",">
(
#{lgqyTo.smsLgqySndngInnb}
, #{lgqyTo.mngrInnb}
, HEX(AES_ENCRYPT( #{lgqyTo.mbtlnb} , #{lgqyTo.secretKey}))
, #{lgqyTo.nm}
, #{lgqyTo.mbrId}
, #{lgqyTo.choiseDt}
, #{lgqyTo.sttus}
, #{lgqyTo.memo}
, #{lgqyTo.substChr1}
, #{lgqyTo.substChr2}
, #{lgqyTo.substChr3}
, #{lgqyTo.substChr4}
, #{lgqyTo.substChr5}
, #{lgqyTo.linkAt}
, #{lgqyTo.regusr}
, NOW()
)
</foreach>
</insert>
<!-- 상태 변경-->
<update id="updateBOMssageLgqySttusUpdate">
UPDATE
GC_LGQY_SMS GLS
SET
SNDNG_PROCS_DV_CD = #{sndngProcsDvCd}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sndngSttus)">
,SNDNG_STTUS = #{sndngSttus}
</if>
WHERE 1=1
AND SMS_LGQY_SNDNG_INNB = #{smsLgqySndngInnb}
AND SOPMAL_CD = #{sopmalCd}
</update>
<!-- 대량 메시지 상세 - 발송요청현황 확인 -->
<select id="selectBOMssageLgqySndngReqInqire"
parameterType="com.wb.domainserver.domain.gcone.ntcn.lgqymssage.vo.BOLgqyMssageSrchVO"
resultType="dataMap">
SELECT SNDNG_REQST_DT
, BRAND_CD
, SNDNG_STTUS
, SNDNG_DV_CD
FROM GC_LGQY_SMS
WHERE 1 = 1
AND SMS_LGQY_SNDNG_INNB = #{srchSmsLgqySndngInnb}
</select>
<!--수정 가능 여부 체크-->
<update id="updateBOMssageLgqySmsUpdt">
UPDATE
GC_LGQY_SMS
SET SNDNG_SJ = #{sndngSj}
, SNDNG_CN = #{sndngCn}
, LINK_URL1 = #{linkUrl1}
, LINK_URL2 = #{linkUrl2}
, LINK_URL3 = #{linkUrl3}
, SNDNG_REQST_DT = #{sndngReqstDt}
, UPDUSR = #{updusr}
, UPDT_DT = NOW()
, SNDNG_DV_CD = #{sndngDvCd}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(orginlFilNm)">
, ORGINL_FIL_NM = #{orginlFilNm}
, SYS_FIL_NM = #{sysFilNm}
, FIL_MG = #{filMg}
, FIL_TY = #{filTy}
, FIL_COURS = #{filCours}
, LANDING_TY = 1/*#{landingTy}*/
</if>
, LANDING_USE_AT = #{landingUseAt}
, LANDING_POSITION = #{landingPosition}
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sndngTrgetQry)">
, SNDNG_TRGET_QRY = #{sndngTrgetQry}
</if>
, SNDNG_CND_PARAM = #{sndngCndParam}
, BRAND_CD = #{brandCd}
<if test="(@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(sndngDvCd, '04') and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(sndngSttus, 'SAVE'))
or(@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(sndngDvCd, '03') and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(sndngSttus, 'REG'))">
,ALL_CNT = #{allCnt}
</if>
WHERE 1 = 1
AND SMS_LGQY_SNDNG_INNB = #{smsLgqySndngInnb}
</update>
<!-- lgqy_sms 수정-->
<select id="selectBOMssageLgqySndngUpdtAt" resultType="String"> /*처리 중이거나 요청, 완료상태는 수정 못함*/
SELECT CASE
WHEN SNDNG_PROCS_DV_CD IN ('P', '02') THEN 'N'
ELSE 'Y'
END AS UPDT_AT
FROM GC_LGQY_SMS
WHERE SMS_LGQY_SNDNG_INNB = #{smsLgqySndngInnb}
AND SOPMAL_CD = #{sopmalCd}
</select>
<!-- 대상 삭제 -->
<delete id="deleteBoMssageLgqySmsToDelete">
DELETE
FROM GC_LGQY_SMS_TO
WHERE SMS_LGQY_SNDNG_INNB = #{smsLgqySndngInnb}
</delete>
<!-- 클릭 수 통계 -->
<select id="selectBOMssageLgqyClickStat" resultType="dataMap">
SELECT COUNT(*) AS TOT_CNT
, COUNT(DISTINCT GLSTL.LGQY_SNDNG_TRGET_INNB) AS CLICK_CNT
, IFNULL(COUNT(DISTINCT GLSTL.LGQY_SNDNG_TRGET_INNB)
/ NULLIF((SELECT GLM.SUCCES_CNT
FROM GC_LGQY_SMS GLM
WHERE GLM.SMS_LGQY_SNDNG_INNB = GLSTL.SMS_LGQY_SNDNG_INNB), 0) * 100,
0) AS CLICK_RATE
FROM GC_LGQY_SMS_TO_LINK GLSTL
WHERE 1 = 1
AND GLSTL.SMS_LGQY_SNDNG_INNB = #{srchSmsLgqySndngInnb}
</select>
<!-- url 별 클릭 수 통계 -->
<select id="selectBOMssageLgqyUrlClickStat"
resultType="dataMap">
SELECT SUM(CASE WHEN A.CNT = 1 AND A.LINK_NB = '1' THEN 1 ELSE 0 END) AS URL1_CNT1
, ROUND(SUM(CASE WHEN A.CNT = 1 AND A.LINK_NB = '1' THEN 1 ELSE 0 END) / COUNT(*), 2) *
100 AS URL1_CNT1_RT
, SUM(CASE WHEN A.CNT = 2 AND A.LINK_NB = '1' THEN 1 ELSE 0 END) AS URL1_CNT2
, ROUND(SUM(CASE WHEN A.CNT = 2 AND A.LINK_NB = '1' THEN 1 ELSE 0 END) / COUNT(*), 2) *
100 AS URL1_CNT2_RT
, SUM(CASE WHEN A.CNT >= 3 AND A.LINK_NB = '1' THEN 1 ELSE 0 END) AS URL1_CNT3
, ROUND(SUM(CASE WHEN A.CNT >= 3 AND A.LINK_NB = '1' THEN 1 ELSE 0 END) / COUNT(*), 2) *
100 AS URL1_CNT3_RT
, SUM(CASE WHEN A.CNT = 1 AND A.LINK_NB = '2' THEN 1 ELSE 0 END) AS URL2_CNT1
, ROUND(SUM(CASE WHEN A.CNT = 1 AND A.LINK_NB = '2' THEN 1 ELSE 0 END) / COUNT(*), 2) *
100 AS URL2_CNT1_RT
, SUM(CASE WHEN A.CNT = 2 AND A.LINK_NB = '2' THEN 1 ELSE 0 END) AS URL2_CNT2
, ROUND(SUM(CASE WHEN A.CNT = 2 AND A.LINK_NB = '2' THEN 1 ELSE 0 END) / COUNT(*), 2) *
100 AS URL2_CNT2_RT
, SUM(CASE WHEN A.CNT >= 3 AND A.LINK_NB = '2' THEN 1 ELSE 0 END) AS URL2_CNT3
, ROUND(SUM(CASE WHEN A.CNT >= 3 AND A.LINK_NB = '2' THEN 1 ELSE 0 END) / COUNT(*), 2) *
100 AS URL2_CNT3_RT
, SUM(CASE WHEN A.CNT = 1 AND A.LINK_NB = '3' THEN 1 ELSE 0 END) AS URL3_CNT1
, ROUND(SUM(CASE WHEN A.CNT = 1 AND A.LINK_NB = '3' THEN 1 ELSE 0 END) / COUNT(*), 2) *
100 AS URL3_CNT1_RT
, SUM(CASE WHEN A.CNT = 2 AND A.LINK_NB = '3' THEN 1 ELSE 0 END) AS URL3_CNT2
, ROUND(SUM(CASE WHEN A.CNT = 2 AND A.LINK_NB = '3' THEN 1 ELSE 0 END) / COUNT(*), 2) *
100 AS URL3_CNT2_RT
, SUM(CASE WHEN A.CNT >= 3 AND A.LINK_NB = '3' THEN 1 ELSE 0 END) AS URL3_CNT3
, ROUND(SUM(CASE WHEN A.CNT >= 3 AND A.LINK_NB = '3' THEN 1 ELSE 0 END) / COUNT(*), 2) *
100 AS URL3_CNT3_RT
FROM (SELECT COUNT(*) CNT
, GLSTL.LINK_NB AS LINK_NB
FROM GC_LGQY_SMS_TO_LINK GLSTL
WHERE 1 = 1
AND SMS_LGQY_SNDNG_INNB = #{srchSmsLgqySndngInnb}
GROUP BY LGQY_SNDNG_TRGET_INNB, LINK_NB) A
</select>
<!-- 시간별 클릭 통계 -->
<select id="selectBOMssageLgqyClickStatList"
resultType="dataMap"
parameterType="com.wb.domainserver.domain.gcone.ntcn.lgqymssage.vo.BOLgqyMssageSrchVO">
SELECT DATE_FORMAT(REGIST_DT, '%Y-%m-%d') DAY
, CONCAT(DATE_FORMAT(REGIST_DT, '%H:'), LPAD(FLOOR(MINUTE(REGIST_DT) / 10) * 10, 2, '0')) AS HOUR
, SUM(IF(LINK_NB = 1, IF(LGQY_SNDNG_TRGET_INNB IS NOT NULL, 1, 0), 0)) CNT1
, SUM(IF(LINK_NB = 2, IF(LGQY_SNDNG_TRGET_INNB IS NOT NULL, 1, 0), 0)) CNT2
, SUM(IF(LINK_NB = 3, IF(LGQY_SNDNG_TRGET_INNB IS NOT NULL, 1, 0), 0)) CNT3
, SUM(IF(LINK_NB = 3, IF(ETC = 'r', 1, 0), 0)) R_CNT1
, SUM(IF(LINK_NB = 3, IF(ETC = 'r', 1, 0), 0)) R_CNT2
, SUM(IF(LINK_NB = 3, IF(ETC = 'r', 1, 0), 0)) R_CNT3
, COUNT(DISTINCT LGQY_SNDNG_TRGET_INNB) P_CNT
FROM GC_LGQY_SMS_TO_LINK
WHERE 1 = 1
AND SMS_LGQY_SNDNG_INNB = #{srchSmsLgqySndngInnb}
GROUP BY DAY, HOUR
</select>
<!-- 출생년도별 클릭 통계 -->
<select id="selectBOMssageLgqySndngBirthStat" resultType="dataMap">
<![CDATA[
SELECT A.BIRTH
, A.SEX
, SUM(A.CNT) PCNT
FROM (SELECT CASE
WHEN LEFT(M.BRTH_DE, 4) > YEAR(NOW()) THEN 'none'
WHEN LEFT(M.BRTH_DE, 4) <= '1900' THEN 'none'
ELSE LEFT(M.BRTH_DE, 4)
END BIRTH,
IF(M.SEX = '', 'none', M.SEX) SEX,
COUNT(1) CNT
FROM GC_MEMBER M
WHERE M.MBTLNB IN (SELECT CAST(AES_DECRYPT(UNHEX(MBTLNB), '1df5be2f7e90ae36') AS CHAR(50)) AS MBTLNB
FROM GC_LGQY_SMS_TO
WHERE 1 = 1
AND SMS_LGQY_SNDNG_INNB = #{srchSmsLgqySndngInnb})
AND M.SEX <> 'none'
AND M.SEX > ''
GROUP BY M.BRTH_DE, M.SEX
ORDER BY LEFT(M.BRTH_DE, 4) DESC) A
WHERE 1 = 1
AND A.BIRTH <> 'none'
AND A.SEX <> 'none'
GROUP BY A.BIRTH, A.SEX
]]>
</select>
<!-- 클릭자 중 구매자수 통계 -->
<select id="selectBOMssageLgqySndngOrdrStat" resultType="dataMap">
SELECT IF(O.DIFF > 0, O.DIFF * 3, O.DIFF) DIFF,
O.CNT
FROM (SELECT FLOOR(DIFF / 3) DIFF
, COUNT(MOBILE) CNT
FROM (
SELECT
CAST(AES_DECRYPT(UNHEX(FO.ORDRR_MBTLNB), '1df5be2f7e90ae36') AS CHAR(50)) AS MOBILE
, TIMESTAMPDIFF(HOUR, #{sndngDt}, FO.ORDR_RCEPT_DT) DIFF
FROM GC_ORDER FO
LEFT JOIN GC_ORDER_ITEM FOI
ON FOI.ORDR_INNB = FO.ORDR_INNB
LEFT JOIN GC_ORDER_ITEM_OPTION FOIO
ON FOIO.ORDR_INNB = FO.ORDR_INNB
WHERE 1 = 1
AND FOIO.ORDR_STTUS_CD BETWEEN 25 AND 75
AND FO.MBR_INNB > 0
AND FO.ORDR_RCEPT_DT BETWEEN #{sndngDt} AND DATE_ADD(#{sndngDt}, INTERVAL +7 DAY)
AND FO.mbtlnb IN (HEX(AES_ENCRYPT(#{mbtlnb}), #{secretKey}))
)
GROUP BY FLOOR(DIFF / 3)
) O
</select>
<!-- 대량 메시지 달력 조회 -->
<select id="selectBOMssageLgqySndngReqstCldr"
parameterType="com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOLgqyMssageSrchVO"
resultType="dataMap">
SELECT
LGQYSMS.SMS_LGQY_SNDNG_INNB,
LGQYSMS.SNDNG_REQST_DT,
FN_GET_SOPMAL_NAME(LGQYSMS.SOPMAL_CD) AS BRAND_NM
FROM
GC_LGQY_SMS LGQYSMS
WHERE 1=1
AND LGQYSMS.SNDNG_REQST_DT BETWEEN #{srchStrtRegistDt} ' 00:00:00' AND #{srchEndRegistDt} ' 23:59:59'
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSndngSttus)">
AND SNDNG_STTUS = #{srchSndngSttus}
</when>
<otherwise>
AND SNDNG_STTUS IN ('S','I','Y','SAVE','REG','END')
</otherwise>
</choose>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSopmalCd)">
AND SOPMAL_CD = #{srchSopmalCd}
</if>
ORDER BY LGQYSMS.SNDNG_REQST_DT DESC
</select>
</mapper>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,509 @@
<?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.wb.domainserver.domain.gcone.ntcn.tmplt.mapper.BOTmpltMapper">
<!-- 이메일 템플릿 조회 조건 -->
<sql id="tmpltEmailListInqireWhere">
<![CDATA[
WHERE 1 = 1
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sopmalCd)">
<![CDATA[
AND SOPMAL_CD = #{sopmalCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDvCd)">
<![CDATA[
AND FORM_DV_CD = #{formDvCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDtlDvCd)">
<![CDATA[
AND FORM_DTL_DV_CD = #{formDtlDvCd}
]]>
</if>
</sql>
<!-- 메시지 템플릿 조회 조건 -->
<sql id="tmpltMssageListInqireWhere">
<![CDATA[
WHERE 1=1
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sopmalCd)">
<![CDATA[
AND SOPMAL_CD = #{sopmalCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDvCd)">
<![CDATA[
AND FORM_DV_CD = #{formDvCd}
]]>
</if>
</sql>
<!-- 알림톡 템플릿 조회 조건 -->
<sql id="tmpltNtcntalkListInqireWhere">
<![CDATA[
WHERE 1=1
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sopmalCd)">
<![CDATA[
AND SOPMAL_CD = #{sopmalCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDvCd)">
<![CDATA[
AND FORM_DV_CD = #{formDvCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDtlDvCd)">
<![CDATA[
AND FORM_DTL_DV_CD = #{formDtlDvCd}
]]>
</if>
</sql>
<!-- 공통코드 -->
<!-- 그룹코드, 양식구분 조회 -->
<select id="selectBOTmplatGroupCd"
parameterType="java.lang.String"
resultType="dataMap">
<![CDATA[
SELECT *
FROM GC_CODE
WHERE 1 = 1
AND GROUP_CD LIKE #{param}
]]>
</select>
<!-- 이메일 자동발송 발신주소 조회 -->
<select id="selectBOEmailAtmcSndngDsptchAdres"
parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO"
resultType="String">
<![CDATA[
SELECT
EMAIL_ATMC_SNDNG_DSPTCH_ADRES
FROM GC_SHOP
WHERE SOPMAL_CD = #{sopmalCd}
]]>
</select>
<!-- 이메일 템플릿 -->
<!-- 이메일 템플릿 조회 -->
<select id="selectBOEmailAtmcSndngTmplatInqireForm"
parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO"
resultType="dataMap">
<![CDATA[
SELECT
EMAIL_SNDNG_FORM_INNB
, SOPMAL_CD
, FORM_DV_CD
, FORM_DTL_DV_CD
, EMAIL_SJ
FROM GC_EMAIL_FORM
]]>
<include refid = "tmpltEmailListInqireWhere"/>
<![CDATA[
ORDER BY FORM_DTL_DV_CD;
]]>
</select>
<!-- 이메일 템플릿 단건 조회 -->
<select id="selectBOEmailAtmcSndngTmplatOneInqireForm"
parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO"
resultType="dataMap">
<![CDATA[
SELECT
EMAIL_SNDNG_FORM_INNB
, SOPMAL_CD
, EMAIL_SJ
, EMAIL_CN
FROM GC_EMAIL_FORM
]]>
<include refid = "tmpltEmailListInqireWhere"/>
</select>
<!-- 이메일 템플릿 등록(사용안함) -->
<insert id="insertBOEmailTmplat"
parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO">
<selectKey order="BEFORE" keyProperty="//////////////" resultType="java.lang.Integer">
<![CDATA[
SELECT IFNULL(MAX(EMAIL_SNDNG_FORM_INNB), 0)+1
FROM GC_EMAIL_FORM
]]>
</selectKey>
INSERT INTO GC_EMAIL_FORM (
EMAIL_SNDNG_FORM_INNB
, SOPMAL_CD
, EMAIL_FORM_DV
, EMAIL_SJ
, EMAIL_CN
, USE_AT
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
)
VALUES (
#{popupInnb}
, #{popupNm}
, #{popupExpsrBgnDt}
, #{popupExpsrEndDt}
, #{cnncUrl}
, #{popupMgWth}
, 'Y'
, #{regusr}
, NOW()
, #{updusr}
, NOW()
)
</insert>
<!-- 이메일 템플릿 수정 -->
<update id="updateBOEmailTmplat" parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO">
<![CDATA[
UPDATE GC_EMAIL_FORM
SET
EMAIL_SJ = #{emailSj}
, EMAIL_CN = #{emailCn}
, UPDUSR = #{updusr}
, UPDT_DT = SYSDATE()
]]>
<include refid = "tmpltEmailListInqireWhere"/>
</update>
<!-- 메시지 템플릿 -->
<!-- 메시지(SMS) 템플릿 조회 -->
<select id="selectBOMssageAtmcSndngTmplatInqireForm"
parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO"
resultType="dataMap">
<![CDATA[
SELECT
FORM.SMS_SNDNG_FORM_INNB
, FORM.FORM_DV_CD
, FORM.FORM_DTL_DV_CD
, CODE.CD_NM
, FORM.SMS_CN
FROM GC_SMS_FORM FORM
INNER JOIN GC_MESSAGE_SNDNG GMS
ON FORM.FORM_DV_CD = GMS.FORM_DV_CD
AND FORM.FORM_DTL_DV_CD = GMS.FORM_DTL_DV_CD
AND FORM.SOPMAL_CD = GMS.SOPMAL_CD
AND GMS.EXPSR_AT = 'Y'
AND GMS.MNGR_DV = '01'
JOIN GC_CODE CODE
ON FORM.FORM_DV_CD = CODE.GROUP_CD
AND FORM.FORM_DTL_DV_CD = CODE.CD
WHERE 1=1
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sopmalCd)">
<![CDATA[
AND GMS.SOPMAL_CD = #{sopmalCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDvCd)">
<![CDATA[
AND GMS.FORM_DV_CD = #{formDvCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDtlDvCd)">
<![CDATA[
AND GMS.FORM_DTL_DV_CD = #{formDtlDvCd}
]]>
</if>
<![CDATA[
ORDER BY GMS.FORM_DTL_DV_CD;
]]>
</select>
<!-- 메시지 템플릿 등록(사용안함) -->
<insert id="insertBOMssageTmplat"
parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO">
<selectKey order="BEFORE" keyProperty="//////////////" resultType="java.lang.Integer">
<![CDATA[
SELECT IFNULL(MAX(SMS_SNDNG_FORM_INNB), 0)+1
FROM GC_SMS_FORM
]]>
</selectKey>
INSERT INTO GC_SMS_FORM (
SMS_SNDNG_FORM_INNB
, SOPMAL_CD
, FORM_DV
, SMS_CN
, USE_AT
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
)
VALUES (
#{popupInnb}
, #{popupNm}
, #{popupExpsrBgnDt}
, #{popupExpsrEndDt}
, 'Y'
, #{regusr}
, SYSDATE()
, #{updusr}
, SYSDATE()
)
</insert>
<!-- 메시지 템플릿 수정 -->
<update id="updateBOMssageTmplat" parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO">
<foreach collection="list" item="dto" separator=";">
<![CDATA[
UPDATE GC_SMS_FORM
SET
SMS_CN = #{dto.smsCn}
, UPDUSR = #{dto.updusr}
, UPDT_DT = SYSDATE()
WHERE SOPMAL_CD = #{dto.sopmalCd}
AND FORM_DV_CD = #{dto.formDvCd}
AND FORM_DTL_DV_CD = #{dto.formDtlDvCd}
]]>
</foreach>
</update>
<!-- 알림톡 템플릿 조회 -->
<select id="selectBONtcntalkAtmcSndngTmplatInqireForm"
parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO"
resultType="dataMap">
<![CDATA[
SELECT
FORM.NTCNTALK_SNDNG_FORM_INNB
, FORM.FORM_DV_CD
, FORM.FORM_DTL_DV_CD
, CODE.CD_NM
, FORM.MSG
, FORM.SMS_RPLC_AT
, FORM.SMS_CN
FROM GC_KAKAO_FORM FORM
INNER JOIN GC_MESSAGE_SNDNG GMS
ON FORM.FORM_DV_CD = GMS.FORM_DV_CD
AND FORM.FORM_DTL_DV_CD = GMS.FORM_DTL_DV_CD
AND FORM.SOPMAL_CD = GMS.SOPMAL_CD
AND GMS.EXPSR_AT = 'Y'
AND GMS.MNGR_DV = '01'
JOIN GC_CODE CODE
ON FORM.FORM_DV_CD = CODE.GROUP_CD
AND FORM.FORM_DTL_DV_CD = CODE.CD
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sopmalCd)">
<![CDATA[
AND GMS.SOPMAL_CD = #{sopmalCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDvCd)">
<![CDATA[
AND GMS.FORM_DV_CD = #{formDvCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDtlDvCd)">
<![CDATA[
AND GMS.FORM_DTL_DV_CD = #{formDtlDvCd}
]]>
</if>
<![CDATA[
ORDER BY GMS.FORM_DTL_DV_CD;
]]>
</select>
<!-- 알림톡 템플릿 조회_팝업 -->
<select id="selectBONtcntalkAtmcSndngTmplatUpdtPopupForm"
parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO"
resultType="dataMap">
<![CDATA[
SELECT
CODE.CD_NM
, FORM.MSG
, FORM.BTN_TYPE_01
, FORM.BTN_NM_01
, FORM.BTN_01_URL_01
, FORM.BTN_01_URL_02
, FORM.BTN_TYPE_02
, FORM.BTN_NM_02
, FORM.BTN_02_URL_01
, FORM.BTN_02_URL_02
, FORM.BTN_TYPE_03
, FORM.BTN_NM_03
, FORM.BTN_03_URL_01
, FORM.BTN_03_URL_02
, FORM.BTN_TYPE_04
, FORM.BTN_NM_04
, FORM.BTN_04_URL_01
, FORM.BTN_04_URL_02
, FORM.BTN_TYPE_05
, FORM.BTN_NM_05
, FORM.BTN_05_URL_01
, FORM.BTN_05_URL_02
, FORM.SMS_RPLC_AT
, FORM.SMS_CN
FROM GC_KAKAO_FORM FORM
JOIN GC_CODE CODE
ON FORM.FORM_DV_CD = CODE.GROUP_CD
AND FORM.FORM_DTL_DV_CD = CODE.CD
]]>
<include refid = "tmpltNtcntalkListInqireWhere"/>
</select>
<!-- 알림톡 템플릿 등록(사용안함) -->
<insert id="insertBOKakaoForm"
parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO">
<selectKey order="BEFORE" keyProperty="//////////////" resultType="java.lang.Integer">
<![CDATA[
SELECT IFNULL(MAX(NTCNTALK_SNDNG_FORM_INNB), 0)+1
FROM GC_KAKAO_FORM
]]>
</selectKey>
INSERT INTO GC_KAKAO_FORM (
NTCNTALK_SNDNG_FORM_INNB
, SOPMAL_CD
, KAKAO_CD
, FORM_DV
, SMS_RPLC_AT
, SMS_RPLC_CN
, USE_AT
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
)
VALUES (
#{popupInnb}
, #{popupNm}
, #{popupExpsrBgnDt}
, #{popupExpsrEndDt}
, 'Y'
, #{regusr}
, SYSDATE()
, #{updusr}
, SYSDATE()
)
</insert>
<!-- 알림톡 템플릿 등록_버튼(사용안함) -->
<insert id="insertBOKakaoFormButton"
parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO">
<selectKey order="BEFORE" keyProperty="//////////////" resultType="java.lang.Integer">
<![CDATA[
SELECT IFNULL(MAX(NTCNTALK_SNDNG_FORM_INNB), 0)+1
FROM GC_KAKAO_FORM_BUTTON
]]>
</selectKey>
INSERT INTO GC_KAKAO_FORM_BUTTON (
NTCNTALK_SNDNG_FORM_INNB
, BUTTON_INNB
, BUTTON_NM
, BUTTON_URL
, USE_AT
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
)
VALUES (
#{popupInnb}
, #{popupNm}
, #{popupExpsrBgnDt}
, #{popupExpsrEndDt}
, 'Y'
, #{regusr}
, SYSDATE()
, #{updusr}
, SYSDATE()
)
</insert>
<!-- 알림톡 템플릿 수정 -->
<update id="updateBOKakaoForm" parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO">
<foreach collection="list" item="dto" separator=";">
<![CDATA[
UPDATE GC_KAKAO_FORM
SET
MSG = #{dto.msg}
, SMS_CN = #{dto.smsCn}
, SMS_RPLC_AT = #{dto.smsRplcAt}
, UPDUSR = #{dto.updusr}
, UPDT_DT = SYSDATE()
WHERE FORM_DV_CD = #{dto.formDvCd}
AND FORM_DTL_DV_CD = #{dto.formDtlDvCd}
]]>
</foreach>
</update>
<!-- 알림톡 템플릿 수정_팝업 -->
<update id="updateBOKakaoFormPopup" parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO">
<![CDATA[
UPDATE GC_KAKAO_FORM
SET
MSG = #{msg}
, BTN_TYPE_01 = #{btnType01}
, BTN_NM_01 = #{btnNm01}
, BTN_01_URL_01 = #{btn01Url01}
, BTN_01_URL_02 = #{btn01Url02}
, BTN_TYPE_02 = #{btnType02}
, BTN_NM_02 = #{btnNm02}
, BTN_02_URL_01 = #{btn02Url01}
, BTN_02_URL_02 = #{btn02Url02}
, BTN_TYPE_03 = #{btnType03}
, BTN_NM_03 = #{btnNm03}
, BTN_03_URL_01 = #{btn03Url01}
, BTN_03_URL_02 = #{btn03Url02}
, BTN_TYPE_04 = #{btnType04}
, BTN_NM_04 = #{btnNm04}
, BTN_04_URL_01 = #{btn04Url01}
, BTN_04_URL_02 = #{btn04Url02}
, BTN_TYPE_05 = #{btnType05}
, BTN_NM_05 = #{btnNm05}
, BTN_05_URL_01 = #{btn05Url01}
, BTN_05_URL_02 = #{btn05Url02}
, SMS_RPLC_AT = #{smsRplcAt}
, SMS_CN = #{smsCn}
, UPDUSR = #{updusr}
, UPDT_DT = SYSDATE()
WHERE FORM_DV_CD = #{formDvCd}
AND FORM_DTL_DV_CD = #{formDtlDvCd}
AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!-- 템플릿 사용 그룹 조회 -->
<select id="selectBOTmplatGroup"
resultType="dataMap">
<![CDATA[
SELECT
*
FROM GC_CODE GC
INNER JOIN (
SELECT
SUBSTRING_INDEX(GMS.FORM_DV_CD, '_', 2) AS GROUP_CD
, SUBSTRING_INDEX(GMS.FORM_DV_CD, '_', -1) AS CD
FROM GC_MESSAGE_SNDNG GMS
WHERE GMS.SOPMAL_CD = #{sopmalCd}
AND GMS.EXPSR_AT = 'Y'
AND GMS.MNGR_DV = '01'
GROUP BY GMS.FORM_DV_CD
) TB
ON GC.GROUP_CD = TB.GROUP_CD
AND GC.CD = TB.CD
]]>
</select>
<!-- 템플릿 사용 그룹별 폼 조회 -->
<select id="selectBOTmplatFormGroup"
resultType="dataMap">
<![CDATA[
SELECT
*
FROM GC_CODE GC
INNER JOIN GC_MESSAGE_SNDNG GMS
ON GC.GROUP_CD = GMS.FORM_DV_CD
AND GC.CD = GMS.FORM_DTL_DV_CD
WHERE 1=1
AND GMS.SOPMAL_CD = #{sopmalCd}
AND GMS.EXPSR_AT = 'Y'
AND GMS.MNGR_DV = '01'
]]>
</select>
</mapper>

View File

@@ -0,0 +1,517 @@
<?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.wb.domainserver.domain.gcone.ordr.atmcrcpmny.mapper.BOAtmcrcpmnyMapper">
<!-- 입금내역 목록 조회 FROM 절 -->
<sql id="selectBOAtmcRcpmnyDtlsListInqireFrom">
<![CDATA[
FROM TBLBANK T
LEFT JOIN GC_ORDER_SETLE S
ON T.SOPMAL_CD = S.SOPMAL_CD
AND T.ORDR_INNB = S.ORDR_INNB
LEFT JOIN GC_ORDER O
ON T.SOPMAL_CD = O.SOPMAL_CD
AND T.ORDR_INNB = O.ORDR_INNB
LEFT JOIN GC_MEMO M
ON T.SOPMAL_CD = M.SOPMAL_CD
AND T.Bkcode = M.BK_CODE
]]>
</sql>
<!-- 입금내역 목록 조회 WHERE 절 -->
<sql id="selectBOAtmcRcpmnyDtlsListInqireWhere">
<![CDATA[
WHERE 1=1
AND T.SOPMAL_CD = #{sopmalCd}
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(searchWord)">
<![CDATA[
AND (
T.BKJUKYO LIKE CONCAT('%', #{searchWord}, '%') OR
T.BKNAME LIKE CONCAT('%', #{searchWord}, '%') OR
T.BKINPUT LIKE CONCAT('%', #{searchWord}, '%') OR
T.ORDR_INNB LIKE CONCAT('%', #{searchWord}, '%')
)
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(searchAccount)">
<choose>
<when test="searchAccount=='all'">
AND T.BKACCTNO LIKE CONCAT('%', '', '%')
</when>
<otherwise>
AND T.BKACCTNO LIKE CONCAT('%', #{searchAccount}, '%')
</otherwise>
</choose>
</if>
<if test='@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStartDate) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndDate)'>
AND T.BKDATE BETWEEN REPLACE(#{srchStartDate}, '-', '') AND REPLACE(#{srchEndDate}, '-', '')
</if>
<!-- 입금 확인 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStatus)">
<![CDATA[
AND
]]>
<foreach collection="srchStatus" item="srchStatus" open="(" close=")" separator="OR">
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchStatus, 'N')">
<![CDATA[
O.AUTODEPOSIT_TY IS NULL
]]>
</when>
<otherwise>
<![CDATA[
O.AUTODEPOSIT_TY = #{srchStatus}
]]>
</otherwise>
</choose>
</foreach>
</if>
ORDER BY BKDATE DESC , BKTIME DESC
</sql>
<!-- 입금내역 목록 건수 조회 -->
<select id = "selectBOAtmcRcpmnyDtlsListCnt"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO"
resultType="java.lang.Integer">
SELECT COUNT(1)
FROM (
SELECT
T.BKDATE
<include refid = "selectBOAtmcRcpmnyDtlsListInqireFrom"/>
<include refid = "selectBOAtmcRcpmnyDtlsListInqireWhere"/>
) AS A
</select>
<!-- 입금내역 목록 조회 -->
<select id="selectBOAtmcRcpmnyDtlsListInqire"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO"
resultType = "dataMap">
SELECT *
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, TB.*
FROM (
SELECT
T.BKID,
T.BKDATE,
T.BKNAME,
T.BKACCTNO,
T.BKJUKYO,
T.BKINPUT,
T.BKTIME,
T.SOPMAL_CD,
T.ORDR_INNB,
T.BKCODE,
S.SETLE_DT,
S.MEMOR_SETLE_AT,
M.MEMO_CN,
O.AUTODEPOSIT_TY,
S.SETLE_AMT,
S.BNNK_NM,
S.DPSTR_NM,
S.RCPMNY_ACNTNB,
S.RCPMNYER_NM
<include refid = "selectBOAtmcRcpmnyDtlsListInqireFrom"/>
<include refid = "selectBOAtmcRcpmnyDtlsListInqireWhere"/>
<![CDATA[
) TB
WHERE (@rownum:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!-- 자동입금확인 메모 테이블 글 유무 조회 -->
<select id="selectBORcpmnyDtlsMngrMemoRegistCnt"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmMemoVO"
resultType="java.lang.Integer">
SELECT COUNT(*)
FROM GC_MEMO
WHERE 1=1
AND BK_CODE = #{bkcode}
AND SOPMAL_CD = #{sopmalCd}
</select>
<!-- 자동입금확인 메모 글 작성 insert or update -->
<insert id="insertBORcpmnyDtlsMngrMemoRegist"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmMemoVO">
<choose>
<when test="insertOrUpdate > 0">
<![CDATA[
UPDATE GC_MEMO
SET MEMO_CN = TRIM(#{memoCn}),
UPDT_DT = SYSDATE()
WHERE 1=1
AND BK_CODE = #{bkcode}
AND SOPMAL_CD = #{sopmalCd}
]]>
</when>
<otherwise>
<![CDATA[
INSERT INTO GC_MEMO (
MEMO_SNB,
SOPMAL_CD,
BK_CODE,
MEMO_CN,
UPDT_DT)
SELECT
COALESCE(MAX(MEMO_SNB), 0) + 1,
#{sopmalCd},
#{bkcode},
TRIM(#{memoCn}),
SYSDATE()
FROM GC_MEMO
]]>
</otherwise>
</choose>
</insert>
<!-- 입금내역 추가 -->
<insert id="insertBORcpmnyDtlsColct"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO">
<selectKey order="BEFORE" keyProperty="bkid" resultType="java.lang.Integer">
<![CDATA[
SELECT IFNULL(MAX(BKID), 0)+1
FROM TBLBANK
]]>
</selectKey>
<![CDATA[
INSERT INTO TBLBANK (
BKID,
BKACCTNO,
BKDATE,
BKJUKYO,
BKINPUT,
BKOUTPUT,
BKCODE,
MID,
BKNAME,
BKTIME,
BKCONTENT,
BKETC,
BKJANGO,
BKXFERDATETIME,
ORDR_INNB,
ORDR_SETLE_INNB
)
VALUES (
#{bkid},
#{bkacctno},
#{bkdate},
#{bkjukyo},
#{bkinput},
#{bkoutput},
#{bkcode},
#{mid},
#{bkname},
#{bktime},
#{bkcontent},
#{bketc},
#{bkjango},
DATE_FORMAT(SYSDATE(), '%Y%m%d%H%i%s'),
"0",
"0"
)
]]>
</insert>
<!-- 입금내역 자동 매칭 될 데이터 리스트 조회 -->
<select id="selectBORcpmnyCnfirmExecut"
parameterType="com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO"
resultType="com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO">
<![CDATA[
SELECT
BKID,
BKACCTNO,
BKDATE,
BKJUKYO,
BKINPUT,
BKTIME,
SOPMAL_CD
FROM TBLBANK
WHERE 1=1
AND ORDR_SETLE_INNB = 0
AND BKDATE >= DATE_SUB(SYSDATE(), INTERVAL 1 WEEK)
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sopmalCd)">
AND SOPMAL_CD = #{sopmalCd}
</if>
</select>
<!-- 입금내역 자동 매칭 될 데이터 조회 -->
<select id="selectBORcpmnyCnfirmTrget"
parameterType="com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO"
resultType="com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO">
<![CDATA[
SELECT
FOS.SOPMAL_CD,
FOS.ORDR_INNB,
FOS.ORDR_SETLE_INNB,
FO.ORDR_RCEPT_DT,
FO.ORDR_STTUS_CD AS CURR_ORDR_STTUS_CD
FROM GC_ORDER_SETLE FOS
INNER JOIN GC_ORDER FO
ON FOS.ORDR_INNB = FO.ORDR_INNB
AND FOS.SOPMAL_CD = FO.SOPMAL_CD
WHERE 1=1
AND FOS.SOPMAL_CD = #{sopmalCd}
AND FOS.SETLE_TY_CD = '02'
AND FOS.SETLE_COMPT_AT = 'N'
AND FO.ORDR_STTUS_CD = '15'
AND FO.AUTODEPOSIT_TY IS NULL
AND FO.ORDR_RCEPT_DT >= DATE_SUB(SYSDATE(), INTERVAL 1 WEEK)
AND FO.ORDR_RCEPT_DT <= STR_TO_DATE(CONCAT(#{bkdate}, #{bktime}), '%Y%m%d%H%i%s')
AND FOS.RCPMNYER_NM = #{bkjukyo}
AND REPLACE(FOS.RCPMNY_ACNTNB, '-', '') = ${bkacctno}
AND FOS.SETLE_AMT = #{bkinput}
ORDER BY FOS.ORDR_SETLE_INNB ASC
LIMIT 1
]]>
</select>
<!-- 수동 매칭 입금내역 업데이트 -->
<update id="updateBORcpmnyCnfirmExecutRcpmny"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO">
<![CDATA[
UPDATE TBLBANK
SET ORDR_INNB = #{ordrInnb}
,ORDR_SETLE_INNB = #{ordrSetleInnb}
WHERE 1=1
AND BKID = #{bkid}
]]>
</update>
<!-- 수동 매칭 주문 업데이트 -->
<update id="updateBORcpmnyCnfirmExecutOrdr"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO">
<![CDATA[
UPDATE GC_ORDER
SET AUTODEPOSIT_TY = #{autodepositTy}
WHERE 1=1
AND SOPMAL_CD = #{sopmalCd}
AND ORDR_INNB = #{ordrInnb}
]]>
</update>
<!-- 수동 매칭 주문결제 업데이트 -->
<update id="updateBORcpmnyCnfirmExecutOrdrSetle"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO">
<![CDATA[
UPDATE GC_ORDER_SETLE
SET SETLE_COMPT_AT = #{setleComptAt}
,SETLE_DT = STR_TO_DATE(CONCAT(#{bkdate}, #{bktime}), '%Y%m%d%H%i%s')
WHERE 1=1
AND SOPMAL_CD = #{sopmalCd}
AND ORDR_SETLE_INNB = #{ordrSetleInnb}
]]>
</update>
<!-- 수동 매칭 뱅크다 데이터 유무 조회 -->
<select id="selectBORcpmnyDtlsLastVal" resultType="String">
<![CDATA[
SELECT max(Bkcode)
FROM TBLBANK
WHERE 1=1
]]>
</select>
<!-- 주문조회 팝업 목록 조회 where절 -->
<sql id="selectBOAtmcRcpmnyOrdrInqireWhere">
WHERE 1=1
AND FOS.SOPMAL_CD = #{sopmalCd}
<!-- 은행명 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchBnnkNm)">
<![CDATA[
AND FOS.BNNK_NM LIKE CONCAT('%', #{srchBnnkNm}, '%')
]]>
</if>
<!-- 입금자명 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchRcpmnyerNm)">
<![CDATA[
AND FOS.RCPMNYER_NM LIKE CONCAT('%', #{srchRcpmnyerNm}, '%')
]]>
</if>
<!-- 계좌번호 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchRcpmnyAcntnb)">
<![CDATA[
AND REPLACE(FOS.RCPMNY_ACNTNB, '-', '') = #{srchRcpmnyAcntnb}
]]>
</if>
<!-- 입금금액1 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSetleAmt1)">
<![CDATA[
AND FOS.SETLE_AMT >= #{srchSetleAmt1}
]]>
</if>
<!-- 입금금액2 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSetleAmt2)">
<![CDATA[
AND FOS.SETLE_AMT <= #{srchSetleAmt2}
]]>
</if>
<!-- 주문일1 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStartDate)">
<![CDATA[
AND FO.ORDR_RCEPT_DT >= #{srchStartDate} ' 00:00:00'
]]>
</if>
<!-- 주문일2 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndDate)">
<![CDATA[
AND FO.ORDR_RCEPT_DT <= #{srchEndDate} ' 23:59:59'
]]>
</if>
<!-- 입금미확인만 체크 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchOrdrSttusCd2) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchOrdrSttusCd3)">
<![CDATA[
AND FO.AUTODEPOSIT_TY IS NULL
]]>
</if>
<!-- 입금확인 체크 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchOrdrSttusCd1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd2) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchOrdrSttusCd3)">
<![CDATA[
AND FO.AUTODEPOSIT_TY IS NOT NULL
]]>
</if>
<!-- 주문무효 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchOrdrSttusCd1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchOrdrSttusCd2) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd3)">
<![CDATA[
AND FO.ORDR_STTUS_CD = '95'
]]>
</if>
<!-- 입금미확인, 입금확인 체크 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd2) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchOrdrSttusCd3)">
<![CDATA[
AND FO.ORDR_STTUS_CD BETWEEN '15' AND '75'
]]>
</if>
<!-- 입금확인, 주문무효 체크 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchOrdrSttusCd1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd2) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd3)">
<![CDATA[
AND (FO.AUTODEPOSIT_TY IS NOT NULL OR FO.ORDR_STTUS_CD = '95')
]]>
</if>
<!-- 입금미확인, 주문무효 체크 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchOrdrSttusCd2) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd3)">
<![CDATA[
AND (FO.AUTODEPOSIT_TY IS NULL OR FO.ORDR_STTUS_CD = '95')
]]>
</if>
<!-- 입금미확인, 입금확인, 주문무효 체크 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd2) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd3)">
<![CDATA[
AND FO.ORDR_STTUS_CD BETWEEN '15' AND '95'
]]>
</if>
</sql>
<!-- 주문조회 팝업 목록 주문조회 from절 -->
<sql id="selectBOAtmcRcpmnyOrdrInqireFrom">
FROM GC_ORDER_SETLE FOS
INNER JOIN GC_ORDER FO
ON FOS.ORDR_INNB = FO.ORDR_INNB
AND FOS.SOPMAL_CD = FO.SOPMAL_CD
</sql>
<!-- 주문조회 팝업 목록 주문조회 건수 -->
<select id = "selectBOAtmcRcpmnyOrdrInqireCnt"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO"
resultType="java.lang.Integer">
SELECT COUNT(*)
<include refid = "selectBOAtmcRcpmnyOrdrInqireFrom" />
<include refid = "selectBOAtmcRcpmnyOrdrInqireWhere" />
</select>
<!-- 주문조회 팝업 목록 주문조회 -->
<select id = "selectBOAtmcRcpmnyOrdrInqire"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO"
resultType="dataMap">
<![CDATA[
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM
,TB.*
FROM (
SELECT
FOS.ORDR_SETLE_INNB,
FOS.ORDR_INNB,
FOS.SOPMAL_CD,
FOS.BNNK_NM,
FOS.RCPMNY_ACNTNB,
FOS.DPSTR_NM,
FOS.RCPMNYER_NM,
FOS.SETLE_AMT,
FOS.SETLE_DT,
FO.ORDR_RCEPT_DT,
FO.ORDRR_NM,
FO.ORDR_STTUS_CD,
FN_GET_COMMCODE_NAME('ORDR_STTUS',FO.ORDR_STTUS_CD) AS ORDR_STTUS_CD_NM,
FO.AUTODEPOSIT_TY
]]>
<include refid = "selectBOAtmcRcpmnyOrdrInqireFrom" />
<include refid = "selectBOAtmcRcpmnyOrdrInqireWhere" />
ORDER BY ORDR_RCEPT_DT DESC
) TB
WHERE (@rownum:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!-- 입금내역 테이블 계좌번호 조회 -->
<select id = "selectRcpmnyDtlsAcntnbList"
resultType="dataMap">
<![CDATA[
SELECT
BKACCTNO
FROM TBLBANK
WHERE 1=1
AND SOPMAL_CD IS NULL
GROUP BY BKACCTNO
]]>
</select>
<!-- 입금내역 테이블 쇼핑몰코드 추가 -->
<update id="updateBORcpmnyDtlsColct"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO">
<![CDATA[
UPDATE TBLBANK SET
SOPMAL_CD = #{sopmalCd}
WHERE 1=1
AND SOPMAL_CD IS NULL
AND BKACCTNO = #{bkacctno}
]]>
</update>
<!-- 현재 주문상태 조회 -->
<select id = "selectCurrOrdrSttusCd" parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO"
resultType="String">
<![CDATA[
SELECT ORDR_STTUS_CD
FROM GC_ORDER
WHERE 1=1
AND SOPMAL_CD = #{sopmalCd}
AND ORDR_INNB = #{ordrInnb}
]]>
</select>
</mapper>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,47 @@
<?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.wb.domainserver.domain.gcone.ordr.npay.mapper.BoIfLogMapper">
<!-- if 로그 등록 -->
<insert id = "insertBoIfLog"
parameterType="com.wb.domainserver.domain.gcone.ordr.npay.vo.BOIfLogVO">
<selectKey keyProperty="ifSeq" resultType = "String" order="BEFORE">
SELECT IFNULL(MAX(CAST(IF_SEQ AS UNSIGNED)), 0) + 1
FROM GC_NPAY_IF_LOG
WHERE SOPMAL_CD = #{sopmalCd}
AND IF_KND_CD = #{ifKndCd}
</selectKey>
INSERT INTO GC_NPAY_IF_LOG (
SOPMAL_CD,
IF_KND_CD,
IF_SEQ,
IF_STTUS_CD,
SEND_PARAM,
RECEIVE_PARAM,
REGIST_DT,
TRAN_STTUS_CD,
ERROR_MESSAGE,
REQUEST_ID
)VALUES(
#{sopmalCd},
#{ifKndCd},
#{ifSeq},
#{ifSttusCd},
#{sendParam},
#{receiveParam},
SYSDATE(),
#{tranSttusCd},
#{errorMessage},
#{requestId}
)
</insert>
</mapper>

View File

@@ -0,0 +1,105 @@
<?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.wb.domainserver.domain.gcone.ordr.npay.mapper.BONpayConfigMapper">
<!-- insert GC_NPAY_CONFIG SQL -->
<insert id="insertNpayConfig" parameterType="com.wb.domainserver.domain.gcone.ordr.npay.vo.BONpayConfigVO">
INSERT INTO GC_NPAY_CONFIG(
SOPMAL_CD
, SHOP_ID
, CERTIFICATION_KEY
, ACCESS_LICENSE
, SECRET_KEY
, BUTTON_KEY
, COMMON_CERTI_KEY
, REGIST_DT
, REGUSR
, UPDT_DT
, UPDUSR
) VALUES (
#{sopmalCd}
, #{shopId}
, #{certificationKey}
, #{accessLicense}
, #{secretKey}
, #{buttonKey}
, #{commonCertiKey}
, SYSDATE()
, #{regusr}
, SYSDATE()
, #{updusr}
)
</insert>
<!-- Update GC_NPAY_CONFIG SQL -->
<update id="updateNpayConfig" parameterType="com.wb.domainserver.domain.gcone.ordr.npay.vo.BONpayConfigVO">
UPDATE GC_NPAY_CONFIG SET
SHOP_ID = #{shopId}
, CERTIFICATION_KEY = #{certificationKey}
, ACCESS_LICENSE = #{accessLicense}
, SECRET_KEY = #{secretKey}
, BUTTON_KEY = #{buttonKey}
, COMMON_CERTI_KEY = #{commonCertiKey}
, UPDT_DT = SYSDATE()
, UPDUSR = #{updusr}
WHERE
SOPMAL_CD = #{sopmalCd}
</update>
<!-- Delete GC_NPAY_CONFIG SQL -->
<delete id="deleteNpayConfig" parameterType="com.wb.domainserver.domain.gcone.ordr.npay.vo.BONpayConfigVO">
DELETE FROM GC_NPAY_CONFIG
WHERE
SOPMAL_CD = #{sopmalCd}
</delete>
<!-- Select Detail GC_NPAY_CONFIG SQL -->
<select id="selectNpayConfigDetail" parameterType="com.wb.domainserver.domain.gcone.ordr.npay.vo.BONpayConfigVO" resultType="com.wb.domainserver.domain.gcone.ordr.npay.vo.BONpayConfigVO">
SELECT
SOPMAL_CD
,SHOP_ID
,CERTIFICATION_KEY
,ACCESS_LICENSE
,SECRET_KEY
,BUTTON_KEY
,COMMON_CERTI_KEY
,ENVRN
,DATE_FORMAT(REGIST_DT, '%Y.%m.%d %H:%i:%s') AS REGIST_DE
,REGIST_DT
,REGUSR
,DATE_FORMAT(UPDT_DT, '%Y.%m.%d %H:%i:%s') AS UPDT_DE
,UPDT_DT
,UPDUSR
FROM
GC_NPAY_CONFIG
WHERE
SOPMAL_CD = #{sopmalCd}
</select>
<!-- Select List GC_NPAY_CONFIG SQL -->
<select id="selectNpayConfigList" parameterType="com.wb.domainserver.domain.gcone.ordr.npay.vo.BONpayConfigVO" resultType="com.wb.domainserver.domain.gcone.ordr.npay.vo.BONpayConfigVO">
SELECT
SOPMAL_CD
,SHOP_ID
,CERTIFICATION_KEY
,ACCESS_LICENSE
,SECRET_KEY
,BUTTON_KEY
,COMMON_CERTI_KEY
,DATE_FORMAT(REGIST_DT, '%Y.%m.%d %H:%i:%s') AS REGIST_DE
,REGIST_DT
,REGUSR
,DATE_FORMAT(UPDT_DT, '%Y.%m.%d %H:%i:%s') AS UPDT_DE
,UPDT_DT
,UPDUSR
FROM
GC_NPAY_CONFIG
WHERE
SOPMAL_CD = #{sopmalCd}
</select>
</mapper>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,730 @@
<?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.wb.domainserver.domain.gcone.ordr.selngpruf.mapper.BOSelngprufMapper">
<!-- 매출증빙 목록 조회 FROM 절 -->
<sql id="selectBOSelngPrufListInqireFrom">
<![CDATA[
FROM GC_SALES FS
LEFT JOIN GC_ORDER_SETLE FOS
ON FS.ORDR_SETLE_INNB = FOS.ORDR_SETLE_INNB
INNER JOIN GC_ORDER FO
ON FOS.ORDR_INNB = FO.ORDR_INNB
AND FOS.SOPMAL_CD = FO.SOPMAL_CD
LEFT JOIN GC_ORDER_REFUND FOR1
ON FO.ORDR_INNB = FOR1.ORDR_INNB
AND FO.SOPMAL_CD = FOR1.SOPMAL_CD
LEFT JOIN GC_MEMBER FM
ON FO.MBR_INNB = FM.MBR_INNB
AND FO.MBR_DV_CD = FM.MBR_DV_CD
]]>
</sql>
<!-- 매출증빙 목록 조회 WHERE 절 -->
<sql id="selectBOSelngPrufListInqireWhere">
WHERE 1=1
AND FO.SOPMAL_CD = #{sopmalCd}
AND FO.ORDR_STTUS_CD NOT IN ('0', '95', '99')
<!-- AND fo.ORDR_RCEPT_DT between '2022-07-19' and '2022-07-25' -->
<!-- 검색어 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchWord)">
AND (
FO.ORDRR_NM LIKE CONCAT('%', #{srchWord}, '%') OR
FO.ORDR_INNB LIKE CONCAT('%', #{srchWord}, '%')
)
</if>
<!-- 날짜 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchDate)">
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDate, '1')">
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStartDate)">
<![CDATA[
AND FO.ORDR_RCEPT_DT >= #{srchStartDate} ' 00:00:00'
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndDate)">
<![CDATA[
AND FO.ORDR_RCEPT_DT <= #{srchEndDate} ' 23:59:59'
]]>
</if>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDate, '2')">
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStartDate)">
<![CDATA[
AND FS.REGIST_DT >= #{srchStartDate} ' 00:00:00'
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndDate)">
<![CDATA[
AND FS.REGIST_DT <= #{srchEndDate} ' 23:59:59'
]]>
</if>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDate, '3')">
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStartDate)">
<![CDATA[
AND FS.UPDT_DT >= #{srchStartDate} ' 00:00:00'
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndDate)">
<![CDATA[
AND FS.UPDT_DT <= #{srchEndDate} ' 23:59:59'
]]>
</if>
</when>
</choose>
</if>
<!-- 증빙서류 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchReqst)">
<![CDATA[
AND FS.REQST_DV_CD IN
]]>
<foreach collection="srchReqst" item="srchReqst" open="(" close=")" separator=",">
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchReqst, '02')">
<![CDATA[
'02', '03'
]]>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchReqst, '04')">
#{srchReqst}
</when>
</choose>
</foreach>
</if>
<!-- 결제여부 입금 체크 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchRcpmny1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchRcpmny2)">
<![CDATA[
AND FO.ORDR_STTUS_CD > 15
]]>
</if>
<!-- 결제여부 미입금 체크 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchRcpmny1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchRcpmny2)">
<![CDATA[
AND FO.ORDR_STTUS_CD = 15
]]>
</if>
<!-- 환불유무 있음 체크 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchRefund1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchRefund2)">
<![CDATA[
AND FOR1.ORDER_REFUND_INNB IS NOT NULL
]]>
</if>
<!-- 환불유무 없음 체크 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchRefund1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchRefund2)">
<![CDATA[
AND FOR1.ORDER_REFUND_INNB IS NULL
]]>
</if>
<!-- 상태 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStatus)">
<![CDATA[
AND
]]>
<foreach collection="srchStatus" item="srchStatus" open="(" close=")" separator="OR">
<![CDATA[
FS.ISSU_STTUS_CD = #{srchStatus}
]]>
</foreach>
</if>
</sql>
<!-- 매출증빙 목록 조회 GROUP BY 절 -->
<sql id="selectBOSelngPrufListInqireGroupBy">
GROUP BY FO.ORDR_INNB
,FO.ORDR_RCEPT_DT
,FO.ORDRR_NM
,FM.MBR_ID
,FOS.SETLE_TY_CD
,FOS.SETLE_AMT
,FO.ORDR_STTUS_CD
,FS.REGIST_DT
,FS.REQST_DV_CD
,FS.SPLPRIC
,FS.VAT_AMT
,FS.AMT
,FS.CANCL_AMT
,FS.ISSU_DT
,FS.ISSU_STTUS_CD
,FS.MNGR_MEMO_CN
,FS.SELNG_PRUF_INNB
ORDER BY FO.ORDR_INNB DESC
</sql>
<!-- 매출증빙 목록 건수 조회 -->
<select id = "selectBOSelngPrufListCnt"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="java.lang.Integer">
SELECT
COUNT(*)
FROM (
SELECT FO.ORDR_INNB
<include refid = "selectBOSelngPrufListInqireFrom"/>
<include refid = "selectBOSelngPrufListInqireWhere"/>
<include refid = "selectBOSelngPrufListInqireGroupBy"/>
) AS TEMP
</select>
<!-- 매출증빙 목록 조회 -->
<select id = "selectBOSelngPrufListInqire"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="dataMap">
SELECT *
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, TB.*
FROM (
SELECT FO.ORDR_INNB
,FO.ORDR_RCEPT_DT
,FO.ORDRR_NM
,FM.MBR_ID
,FOS.SETLE_TY_CD
,FOS.SETLE_AMT
,FO.ORDR_STTUS_CD AS ORDR_STTUS_CD
,FN_GET_COMMCODE_NAME('ORDR_STTUS',FO.ORDR_STTUS_CD) AS ORDR_STTUS_CD_NM
,FS.REGIST_DT
,FS.REQST_DV_CD AS REQST_DV_CD
,FN_GET_COMMCODE_NAME('REQST_DV', FS.REQST_DV_CD) AS REQST_DV_CD_NM
,FS.SPLPRIC
,FS.VAT_AMT
,FS.AMT
,FS.CANCL_AMT
,FS.ISSU_DT
,FS.ISSU_STTUS_CD AS ISSU_STTUS_CD
,FN_GET_COMMCODE_NAME('ISSU_STTUS', FS.ISSU_STTUS_CD) AS ISSU_STTUS_CD_NM
,FS.MNGR_MEMO_CN
,FO.SOPMAL_CD
,GROUP_CONCAT(FOR1.ORDER_REFUND_INNB) AS ORDER_REFUND_INNB
,FS.SELNG_PRUF_INNB
,FS.ORDR_SETLE_INNB
,FS.CSH_RCIPT_DELNG_NB
,FS.CRTNB
,FOS.PG_CMPNY_NM
,FOS.PG_INNB
,FS.UPDT_DT
<include refid = "selectBOSelngPrufListInqireFrom"/>
<include refid = "selectBOSelngPrufListInqireWhere"/>
<include refid = "selectBOSelngPrufListInqireGroupBy"/>
<![CDATA[
) TB
WHERE (@rownum:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!-- 매출증빙 관리자 메모 조회 -->
<select id = "selectBOSelngPrufMngrMemoRegistPopupForm"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="dataMap">
<![CDATA[
SELECT DISTINCT
ORDR_INNB,
SOPMAL_CD,
MNGR_MEMO_CN,
SELNG_PRUF_INNB
FROM GC_SALES
WHERE 1=1
AND SELNG_PRUF_INNB = #{selngPrufInnb}
AND SOPMAL_CD = #{sopmalCd}
]]>
</select>
<!-- 매출증빙 관리자 메모 등록, 수정 -->
<update id = "updateBOSelngPrufMngrMemoRegistPopup"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO">
<![CDATA[
UPDATE GC_SALES
SET MNGR_MEMO_CN = TRIM(#{mngrMemoCn})
,UPDUSR = #{updusr}
,UPDT_DT = SYSDATE()
WHERE 1=1
AND SELNG_PRUF_INNB = #{selngPrufInnb}
AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!-- 매출증빙 전송로그 건수 조회 -->
<select id = "selectBOSelngPrufTrnsmisLogInqireCnt"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="java.lang.Integer">
<![CDATA[
SELECT
COUNT(*)
FROM GC_SALES_LOG
WHERE 1=1
AND SELNG_PRUF_INNB = #{selngPrufInnb}
]]>
</select>
<!-- 매출증빙 전송로그 조회 -->
<select id = "selectBOSelngPrufTrnsmisLogInqire"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="dataMap">
<![CDATA[
SELECT
*
FROM GC_SALES_LOG
WHERE 1=1
AND SELNG_PRUF_INNB = #{selngPrufInnb}
]]>
</select>
<!-- 매출증빙 테이블 조회 -->
<select id = "selectBOCshRcipt"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="dataMap">
<![CDATA[
SELECT
FS.ISSU_STTUS_CD,
FN_GET_COMMCODE_NAME("ISSU_STTUS", FS.ISSU_STTUS_CD) AS ISSU_STTUS_CD_NM,
FS.REGIST_DT,
FS.ISSU_TRGET_DV_CD,
FN_GET_COMMCODE_NAME("ISSU_TRGET_DV",FS.ISSU_TRGET_DV_CD) AS ISSU_TRGET_DV_CD_NM,
FS.CRTNB,
FS.ORDRR_NM,
CAST(AES_DECRYPT(UNHEX(FS.ORDRR_EMAIL) , '1df5be2f7e90ae36') AS CHAR(50)) AS ORDRR_EMAIL,
FS.GOODS_NM,
FS.AMT,
FS.SPLPRIC,
FS.VAT_AMT,
FS.ORDR_INNB,
FS.SOPMAL_CD,
FS.ORDR_SETLE_INNB,
FS.SELNG_PRUF_INNB
FROM GC_SALES FS
WHERE 1=1
AND FS.SELNG_PRUF_INNB = #{selngPrufInnb}
AND FS.SOPMAL_CD = #{sopmalCd}
]]>
</select>
<!-- 매출증빙 현금영수증 정보 수정 -->
<update id = "updateBOCshRcipt"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO">
<![CDATA[
UPDATE GC_SALES
SET ISSU_TRGET_DV_CD = #{issuTrgetDvCd}
,CRTNB = #{crtnb}
]]>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ordrrNm)">
,ORDRR_NM = #{ordrrNm}
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ordrrEmail)">
,ORDRR_EMAIL = HEX(AES_ENCRYPT(#{ordrrEmail}, '1df5be2f7e90ae36'))
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(goodsNm)">
,GOODS_NM = #{goodsNm}
</if>
<![CDATA[
,UPDT_DT = SYSDATE()
,UPDUSR = #{updusr}
WHERE 1=1
AND SELNG_PRUF_INNB = #{selngPrufInnb}
AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!-- 매출증빙 현금영수증 api 응답 값 업데이트
<update id = "updateBOCashRciptRegistSelngPruf"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO">
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(cshRciptDelngNb)">
<![CDATA[
UPDATE GC_SALES
SET CSH_RCIPT_DELNG_NB = #{cshRciptDelngNb}
,CSH_RCIPT_APVLNB = #{cshRciptApvlnb}
,CSH_RCIPT_CONFM_DT = #{cshRciptConfmDt}
,ISSU_TRGET_DV_CD = #{issuTrgetDvCd}
,CRTNB = #{crtnb}
,ORDRR_NM = #{ordrrNm}
,ORDRR_EMAIL = HEX(AES_ENCRYPT(#{ordrrEmail}, '1df5be2f7e90ae36'))
,ISSU_STTUS_CD = #{issuSttusCd}
,UPDT_DT = SYSDATE()
WHERE 1=1
AND SELNG_PRUF_INNB = #{selngPrufInnb}
AND SOPMAL_CD = #{sopmalCd}
]]>
</when>
<otherwise>
<![CDATA[
UPDATE GC_SALES
SET ISSU_STTUS_CD = #{issuSttusCd}
,UPDT_DT = SYSDATE()
WHERE 1=1
AND SELNG_PRUF_INNB = #{selngPrufInnb}
AND SOPMAL_CD = #{sopmalCd}
]]>
</otherwise>
</choose>
</update>
-->
<!-- 매출증빙 현금영수증 api 응답 값 업데이트 -->
<update id = "updateBOCashRciptRegistSelngPruf"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO">
<![CDATA[
UPDATE GC_SALES
SET CSH_RCIPT_DELNG_NB = #{cshRciptDelngNb}
,CSH_RCIPT_APVLNB = #{cshRciptApvlnb}
,CSH_RCIPT_CONFM_DT = #{cshRciptConfmDt}
,ISSU_TRGET_DV_CD = #{issuTrgetDvCd}
,CRTNB = #{crtnb}
,ORDRR_NM = #{ordrrNm}
,ORDRR_EMAIL = HEX(AES_ENCRYPT(#{ordrrEmail}, '1df5be2f7e90ae36'))
,GOODS_NM = #{goodsNm}
,ISSU_STTUS_CD = #{issuSttusCd}
,UPDT_DT = SYSDATE()
,ISSU_DT = SYSDATE()
,UPDUSR = #{updusr}
WHERE 1=1
AND SELNG_PRUF_INNB = #{selngPrufInnb}
AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!-- 매출증빙로그 추가 -->
<update id = "insertBOSelngPrufLogRegist"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO">
<![CDATA[
INSERT INTO GC_SALES_LOG (
SELNG_PRUF_LOG_INNB,
SELNG_PRUF_INNB,
REGIST_DT,
LOG_MSG
)
SELECT
COALESCE(MAX(SELNG_PRUF_LOG_INNB), 0) + 1,
#{selngPrufInnb},
SYSDATE(),
#{logMsg}
FROM GC_SALES_LOG
]]>
</update>
<!-- 엑셀다운로드(전체) -->
<select id = "selectBOSopmalExcelAllList"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="dataMap">
SELECT FO.ORDR_INNB
,DATE_FORMAT(FO.ORDR_RCEPT_DT, '%Y-%m-%d %H:%i:%s') AS ORDR_RCEPT_DT
,FO.ORDRR_NM
,FM.MBR_ID
,FOS.SETLE_TY_CD
,FN_GET_COMMCODE_NAME('SETLE_MTH',FOS.SETLE_TY_CD) AS SETLE_TY_CD_NM
,FOS.SETLE_AMT
,FO.ORDR_STTUS_CD AS ORDR_STTUS_CD
,FN_GET_COMMCODE_NAME('ORDR_STTUS',FO.ORDR_STTUS_CD) AS ORDR_STTUS_CD_NM
,DATE_FORMAT(FS.REGIST_DT, '%Y-%m-%d %H:%i:%s') AS REGIST_DT
,FS.REQST_DV_CD AS REQST_DV_CD
,FN_GET_COMMCODE_NAME('REQST_DV', FS.REQST_DV_CD) AS REQST_DV_CD_NM
,FS.SPLPRIC
,FS.VAT_AMT
,FS.AMT
,FS.CANCL_AMT
,DATE_FORMAT(FS.UPDT_DT, '%Y-%m-%d %H:%i:%s') AS UPDT_DT
,FS.ISSU_STTUS_CD AS ISSU_STTUS_CD
,FN_GET_COMMCODE_NAME('ISSU_STTUS', FS.ISSU_STTUS_CD) AS ISSU_STTUS_CD_NM
,FS.MNGR_MEMO_CN
,FO.SOPMAL_CD
,GROUP_CONCAT(FOR1.ORDER_REFUND_INNB) AS ORDER_REFUND_INNB
,FS.SELNG_PRUF_INNB
,FS.ORDR_SETLE_INNB
,FS.CSH_RCIPT_DELNG_NB
,FS.CRTNB
,FOS.PG_CMPNY_NM
,FOS.PG_INNB
<include refid = "selectBOSelngPrufListInqireFrom"/>
<include refid = "selectBOSelngPrufListInqireWhere"/>
<include refid = "selectBOSelngPrufListInqireGroupBy"/>
</select>
<!-- 엑셀다운로드(선택) -->
<select id = "selectBOSopmalExcelList"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="dataMap">
SELECT FO.ORDR_INNB
,DATE_FORMAT(FO.ORDR_RCEPT_DT, '%Y-%m-%d %H:%i:%s') AS ORDR_RCEPT_DT
,FO.ORDRR_NM
,FM.MBR_ID
,FOS.SETLE_TY_CD
,FN_GET_COMMCODE_NAME('SETLE_MTH',FOS.SETLE_TY_CD) AS SETLE_TY_CD_NM
,FOS.SETLE_AMT
,FO.ORDR_STTUS_CD AS ORDR_STTUS_CD
,FN_GET_COMMCODE_NAME('ORDR_STTUS',FO.ORDR_STTUS_CD) AS ORDR_STTUS_CD_NM
,DATE_FORMAT(FS.REGIST_DT, '%Y-%m-%d %H:%i:%s') AS REGIST_DT
,FS.REQST_DV_CD AS REQST_DV_CD
,FN_GET_COMMCODE_NAME('REQST_DV', FS.REQST_DV_CD) AS REQST_DV_CD_NM
,FS.SPLPRIC
,FS.VAT_AMT
,FS.AMT
,FS.CANCL_AMT
,DATE_FORMAT(FS.UPDT_DT, '%Y-%m-%d %H:%i:%s') AS UPDT_DT
,FS.ISSU_STTUS_CD AS ISSU_STTUS_CD
,FN_GET_COMMCODE_NAME('ISSU_STTUS', FS.ISSU_STTUS_CD) AS ISSU_STTUS_CD_NM
,FS.MNGR_MEMO_CN
,FO.SOPMAL_CD
,GROUP_CONCAT(FOR1.ORDER_REFUND_INNB) AS ORDER_REFUND_INNB
,FS.SELNG_PRUF_INNB
,FS.ORDR_SETLE_INNB
,FS.CSH_RCIPT_DELNG_NB
,FS.CRTNB
,FOS.PG_CMPNY_NM
,FOS.PG_INNB
<include refid = "selectBOSelngPrufListInqireFrom"/>
WHERE 1=1
<![CDATA[
AND FS.SELNG_PRUF_INNB IN
]]>
<foreach collection="selngPrufInnbArr" item="selngPrufInnbArr" open="(" close=")" separator=",">
<![CDATA[
#{selngPrufInnbArr}
]]>
</foreach>
<include refid = "selectBOSelngPrufListInqireGroupBy"/>
</select>
<!-- 쇼핑몰결제설정 테이블 조회 -->
<select id = "selectBOSopmalSetleSetup"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO">
<![CDATA[
SELECT
IF(PG_CMPNY_NM = 'kcp', 'kcp', 'toss') AS PG_CMPNY_NM,
CASE WHEN IFNULL(OS.SETLE_MID, '') <> '' THEN OS.SETLE_MID
WHEN OS.PG_CMPNY_NM = 'kcp' THEN PL.KCP_MID
ELSE PL.OLD_TOSS_MID
END AS MID
FROM GC_ORDER_SETLE OS
INNER JOIN GC_PAY_LINK PL
ON OS.SOPMAL_CD = PL.SOPMAL_CD
WHERE OS.SOPMAL_CD = #{sopmalCd}
AND OS.ORDR_INNB = #{ordrInnb}
ORDER BY PL.SETLE_SETUP_INNB
LIMIT 1
]]>
</select>
<!-- 매출증빙 테이블 현금영수증 취소 조회 -->
<select id = "selectBOCshRciptCancel"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO">
<![CDATA[
SELECT
SELNG_PRUF_INNB,
ORDR_SETLE_INNB,
ORDR_INNB,
SOPMAL_CD,
ROUND(AMT) AMT,
ROUND(SPLPRIC) SPLPRIC,
ROUND(VAT_AMT) VAT_AMT,
GOODS_NM,
REQST_DV_CD,
ISSU_TRGET_DV_CD,
CRTNB,
CSH_RCIPT_DELNG_NB,
CSH_RCIPT_APVLNB,
CSH_RCIPT_CONFM_DT,
ORDRR_NM,
CAST(AES_DECRYPT(UNHEX(ORDRR_EMAIL) , '1df5be2f7e90ae36') AS CHAR(50)) AS ORDRR_EMAIL,
ISSU_STTUS_CD,
UPDUSR_DV_CD,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT,
ISSU_DT,
MNGR_MEMO_CN,
CANCL_AMT,
CANCL_SPLPRIC,
CANCL_VAT_AMT
FROM GC_SALES
WHERE 1=1
AND REQST_DV_CD = '02'
AND ORDR_SETLE_INNB = #{ordrSetleInnb}
AND SOPMAL_CD = #{sopmalCd}
AND ISSU_STTUS_CD != '03'
]]>
</select>
<!-- 매출증빙 현금영수증 취소 update -->
<update id = "updateBOCshRciptCancel"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO">
<![CDATA[
UPDATE GC_SALES
SET CANCL_AMT = #{canclAmt}
,CANCL_SPLPRIC = #{canclSplpric}
,CANCL_VAT_AMT = #{canclVatAmt}
,ISSU_STTUS_CD = #{issuSttusCd}
,UPDT_DT = SYSDATE()
,UPDUSR = #{updusr}
,UPDUSR_DV_CD = #{updusrDvCd}
WHERE 1=1
AND SELNG_PRUF_INNB = #{selngPrufInnb}
AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!-- 매출증빙 테이블 추가 -->
<insert id = "insertBOSelngPrufRegist"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
keyProperty="selngPrufInnb"
useGeneratedKeys="true">
<![CDATA[
INSERT INTO GC_SALES (
ORDR_SETLE_INNB,
ORDR_INNB,
SOPMAL_CD,
AMT,
SPLPRIC,
VAT_AMT,
GOODS_NM,
REQST_DV_CD,
ISSU_TRGET_DV_CD,
CRTNB,
CSH_RCIPT_DELNG_NB,
CSH_RCIPT_APVLNB,
CSH_RCIPT_CONFM_DT,
ORDRR_NM,
ORDRR_EMAIL,
ISSU_STTUS_CD,
UPDUSR_DV_CD,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT,
ISSU_DT,
MNGR_MEMO_CN,
CANCL_AMT,
CANCL_SPLPRIC,
CANCL_VAT_AMT
)
SELECT
#{ordrSetleInnb},
#{ordrInnb},
#{sopmalCd},
#{amt},
#{splpric},
#{vatAmt},
#{goodsNm},
#{reqstDvCd},
#{issuTrgetDvCd},
#{crtnb},
#{cshRciptDelngNb},
#{cshRciptApvlnb},
#{cshRciptConfmDt},
#{ordrrNm},
HEX(AES_ENCRYPT(#{ordrrEmail}, '1df5be2f7e90ae36')),
#{issuSttusCd},
#{updusrDvCd},
#{regusr},
SYSDATE(),
#{updusr},
SYSDATE(),
#{issuDt},
#{mngrMemoCn},
#{canclAmt},
#{canclSplpric},
#{canclVatAmt}
FROM GC_SALES
]]>
</insert>
<!-- 매출증빙 테이블 주문번호로 주문결제 번호 찾기 -->
<select id = "selectBOCashRciptUpdt"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO">
<![CDATA[
SELECT
SELNG_PRUF_INNB,
ORDR_SETLE_INNB,
ORDR_INNB,
SOPMAL_CD,
ROUND(AMT) AMT,
ROUND(SPLPRIC) SPLPRIC,
ROUND(VAT_AMT) VAT_AMT,
GOODS_NM,
REQST_DV_CD,
ISSU_TRGET_DV_CD,
CRTNB,
CSH_RCIPT_DELNG_NB,
CSH_RCIPT_APVLNB,
CSH_RCIPT_CONFM_DT,
ORDRR_NM,
CAST(AES_DECRYPT(UNHEX(ORDRR_EMAIL) , '1df5be2f7e90ae36') AS CHAR(50)) AS ORDRR_EMAIL,
ISSU_STTUS_CD,
UPDUSR_DV_CD,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT,
ISSU_DT,
MNGR_MEMO_CN,
CANCL_AMT,
CANCL_SPLPRIC,
CANCL_VAT_AMT
FROM GC_SALES GS
WHERE 1=1
AND SOPMAL_CD = #{sopmalCd}
AND ORDR_INNB = #{ordrInnb}
AND REQST_DV_CD = '02'
]]>
</select>
<!-- 매출증빙 테이블 쇼핑몰코드, 주문번호로 현금영수증 대상조회 -->
<select id = "selectBOCshRciptRegist"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO">
<![CDATA[
SELECT
FS.SELNG_PRUF_INNB,
FS.SOPMAL_CD,
FS.ORDR_INNB,
FS.ORDR_SETLE_INNB,
FS.ORDRR_NM,
CAST(AES_DECRYPT(UNHEX(FS.ORDRR_EMAIL) , '1df5be2f7e90ae36') AS CHAR(50)) AS ORDRR_EMAIL,
FS.CRTNB,
FS.GOODS_NM,
FS.ISSU_TRGET_DV_CD,
FS.ISSU_STTUS_CD,
ROUND(FS.AMT) AS AMT,
ROUND(FS.SPLPRIC) AS SPLPRIC,
ROUND(FS.VAT_AMT) AS VAT_AMT
FROM GC_SALES FS
INNER JOIN GC_ORDER_SETLE FOS
ON FS.SOPMAL_CD = FOS.SOPMAL_CD
AND FS.ORDR_SETLE_INNB = FOS.ORDR_SETLE_INNB
INNER JOIN GC_ORDER FO
ON FOS.SOPMAL_CD = FO.SOPMAL_CD
AND FOS.ORDR_INNB = FO.ORDR_INNB
WHERE 1=1
AND FS.SOPMAL_CD = #{sopmalCd}
AND FS.ORDR_INNB = #{ordrInnb}
AND FS.REQST_DV_CD = '02'
AND FS.ISSU_STTUS_CD = '01'
AND FOS.SETLE_TY_CD = #{setleTyCd}
AND FO.ORDR_STTUS_CD = '25'
]]>
</select>
</mapper>

View File

@@ -0,0 +1,90 @@
<?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.wb.domainserver.domain.gcone.pos.easywell.mapper.EasyWellMapper">
<!--이지웰 로그 등록-->
<insert id="insertEasyWellLog" useGeneratedKeys="true" keyColumn="EZWELL_LOG_INNB" keyProperty="ezwellLogInnb" parameterType="map">
INSERT INTO GC_EZWELL_LOG
( EW_PROCS_STTUS,
ORDR_INNB,
ORDR_CD,
STR_INNB,
POS_HDQRTRS_CD,
STR_CD,
POSNB,
RCIPT_NB,
EW_JOB_DV,
EW_DELNG_NB,
EW_BRCD_NB,
EW_ORDR_INNB,
EW_USE_CANCL_AMT,
EW_BLCE_NB,
EW_CONFM_NB,
EW_MBR_NB,
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(org_approv)">
DELNG_CONFM_NB,
</if>
EW_RES_CD,
EW_RES_MSG,
REQ_DT
)
VALUES(
'01',
0,
#{order_code},
0,
#{pgubun},
#{pcode},
#{poscode},
#{pnumb},
#{ew_act_cd},
'',
#{ew_code},
#{ew_order_code},
0,
0,
'',
'',
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(org_approv)">
#{org_approv},
</if>
'',
'',
SYSDATE()
)
</insert>
<!--이지웰 로그 수정-->
<update id="updateEasyWellLog" parameterType="map">
UPDATE GC_EZWELL_LOG
SET EW_PROCS_STTUS= '02',
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ew_remain)">
EW_BLCE_NB = #{ew_remain},
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ew_price)">
EW_USE_CANCL_AMT = #{ew_price},
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ew_approv)">
EW_CONFM_NB = #{ew_approv},
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ew_member)">
EW_MBR_NB = #{ew_member},
</if>
EW_RES_CD = #{logcode},
EW_RES_MSG = #{msg},
RES_DT = SYSDATE()
WHERE 1=1
AND EZWELL_LOG_INNB = #{ezwellLogInnb}
</update>
<!--이지웰 로그 조회-->
<select id="selectEasyWellLog" parameterType="map" resultType="dataMap">
SELECT EW_USE_CANCL_AMT
FROM GC_EZWELL_LOG
WHERE 1=1
AND EW_BRCD_NB = #{ew_code}
AND EW_CONFM_NB= #{org_approv}
AND ORDR_CD= #{org_order}
AND EW_PROCS_STTUS = '02'
</select>
</mapper>

View File

@@ -0,0 +1,361 @@
<?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.wb.domainserver.domain.gcone.pos.pos.mapper.PosCouponMapper">
<!-- 포스 쿠폰 조회 -->
<select id="selectPosCouponInqire">
<![CDATA[
SELECT
PC.POS_HDQRTRS_CD
,PC.POS_COUPON_REGIST_YEAR
,PC.POS_COUPON_CD
,PC.COUPON_INNB
,PC.SOPMAL_CD
,#{AUTH_NO} AS OFLNE_COUPON_CRTNB
FROM GC_COUPON_POS PC
WHERE 1 = 1
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(pgubun)">
AND PC.POS_HDQRTRS_CD = #{pgubun}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(COUPON_YEAR)">
AND PC.POS_COUPON_REGIST_YEAR = #{COUPON_YEAR}
</if>
<![CDATA[
AND PC.POS_COUPON_CD = #{COUPON_CODE}
AND SUBSTRING(PC.COUPON_INNB, -3) = SUBSTRING(#{AUTH_NO}, 3, 3)
AND PC.SOPMAL_CD = (
SELECT
SH.SOPMAL_CD
FROM GC_SHOP SH
WHERE SH.SOPMAL_NB = SUBSTRING(#{AUTH_NO}, 1, 2)
)
]]>
</select>
<!-- 유효 쿠폰 정보 조회 -->
<select id="selectPosOflneCouponInqire">
<![CDATA[
(
SELECT *
FROM (
SELECT
DW.SOPMAL_CD AS coupon_site
,DW.COUPON_INNB AS coupon_seq
,DW.COUPON_DC AS coupon_desc
,IFNULL(DW.VALIDPD_BGN_DT, C.VALIDPD_BGN_DT) AS issue_startdate
,IFNULL(DW.VALIDPD_END_DT, C.VALIDPD_END_DT) AS issue_enddate
,C.VALIDPD_KND_CD AS issue_priod_type
,C.VALIDPD_DE_CNT AS after_issue_day
,CASE
WHEN DW.VALIDPD_BGN_DT <= SYSDATE() THEN 'Y'
ELSE 'N'
END AS START_DATE
,CASE
WHEN DW.VALIDPD_END_DT >= SYSDATE() THEN 'Y'
ELSE 'N'
END AS END_DATE
,OFC.OFLNE_COUPON_INNB AS offline_seq
,OFC.REGIST_DT AS OFLNE_REGIST_DT
,OFC.OFLNE_COUPON_CRTNB AS offline_serialnumber
,SD.COUPON_SNDNG_INNB
,SD.COUPON_SNDNG_USE_AT AS issue_stop
,DW.DWLD_COUPON_INNB AS download_seq
,DW.MBR_DV_CD AS mbr_dv_cd
,DW.MBR_INNB AS member_seq
,DW.REGIST_DT AS DWLD_REGIST_DT
,DW.COUPON_STTUS_CD AS use_status
,DW.COUPON_USE_DT AS use_date
FROM GC_COUPON C
INNER JOIN GC_OFFLINE_COUPON OFC
ON OFC.OFLNE_COUPON_CRTNB = #{oflneCouponCrtnb}
AND C.SOPMAL_CD = OFC.SOPMAL_CD
AND C.COUPON_INNB = OFC.COUPON_INNB
INNER JOIN GC_DOWNLOAD DW
ON OFC.OFLNE_COUPON_INNB = DW.OFLNE_COUPON_INNB
AND OFC.SOPMAL_CD = DW.SOPMAL_CD
AND OFC.COUPON_INNB = DW.COUPON_INNB
AND DW.USE_AT = 'Y'
INNER JOIN GC_COUPON_SNDNG SD
ON DW.COUPON_SNDNG_INNB = SD.COUPON_SNDNG_INNB
WHERE C.USE_AT = 'Y'
AND C.SOPMAL_CD = #{sopmalCd}
AND C.COUPON_INNB = #{couponInnb}
LIMIT 1
) AS primary_result
)
UNION ALL
(
SELECT *
FROM (
SELECT
C.SOPMAL_CD AS coupon_site
,C.COUPON_INNB AS coupon_seq
,C.COUPON_DC AS coupon_desc
,C.VALIDPD_BGN_DT AS issue_startdate
,C.VALIDPD_END_DT AS issue_enddate
,C.VALIDPD_KND_CD AS issue_priod_type
,C.VALIDPD_DE_CNT AS after_issue_day
,CASE
WHEN C.VALIDPD_KND_CD = '01' AND C.VALIDPD_BGN_DT > SYSDATE() THEN 'N'
WHEN C.VALIDPD_KND_CD = '01' AND C.VALIDPD_BGN_DT < SYSDATE() THEN 'Y'
WHEN C.VALIDPD_KND_CD = '02' THEN 'Y'
END AS START_DATE
,CASE
WHEN C.VALIDPD_KND_CD = '01' AND C.VALIDPD_END_DT < SYSDATE() THEN 'N'
WHEN C.VALIDPD_KND_CD = '01' AND C.VALIDPD_END_DT > SYSDATE() THEN 'Y'
WHEN C.VALIDPD_KND_CD = '02' AND C.VALIDPD_DE_CNT > 0 THEN 'Y'
WHEN C.VALIDPD_KND_CD = '02' AND C.VALIDPD_DE_CNT <= 0 THEN 'N'
END AS END_DATE
,OFC.OFLNE_COUPON_INNB AS offline_seq
,OFC.REGIST_DT AS OFLNE_REGIST_DT
,OFC.OFLNE_COUPON_CRTNB AS offline_serialnumber
,SD.COUPON_SNDNG_INNB
,SD.COUPON_SNDNG_USE_AT AS issue_stop
,'0' AS download_seq
,'' AS mbr_dv_cd
,0 AS member_seq
,C.REGIST_DT AS DWLD_REGIST_DT
,'02' AS use_status
,'' AS use_date
FROM GC_COUPON C
INNER JOIN GC_OFFLINE_COUPON OFC
ON OFC.OFLNE_COUPON_CRTNB = #{oflneCouponCrtnb}
AND C.SOPMAL_CD = OFC.SOPMAL_CD
AND C.COUPON_INNB = OFC.COUPON_INNB
INNER JOIN GC_COUPON_SNDNG SD
ON OFC.COUPON_SNDNG_INNB = SD.COUPON_SNDNG_INNB
WHERE C.USE_AT = 'Y'
AND C.SOPMAL_CD = #{sopmalCd}
AND C.COUPON_INNB = #{couponInnb}
AND NOT EXISTS (
SELECT 1
FROM GC_COUPON C
INNER JOIN GC_OFFLINE_COUPON OFC
ON OFC.OFLNE_COUPON_CRTNB = #{oflneCouponCrtnb}
AND C.SOPMAL_CD = OFC.SOPMAL_CD
AND C.COUPON_INNB = OFC.COUPON_INNB
INNER JOIN GC_DOWNLOAD DW
ON OFC.OFLNE_COUPON_INNB = DW.OFLNE_COUPON_INNB
AND OFC.SOPMAL_CD = DW.SOPMAL_CD
AND OFC.COUPON_INNB = DW.COUPON_INNB
AND DW.USE_AT = 'Y'
INNER JOIN GC_COUPON_SNDNG SD
ON DW.COUPON_SNDNG_INNB = SD.COUPON_SNDNG_INNB
WHERE C.USE_AT = 'Y'
AND C.SOPMAL_CD = #{sopmalCd}
AND C.COUPON_INNB = #{couponInnb}
)
LIMIT 1
) AS fallback_result
)
]]>
</select>
<!-- 다운로드 쿠폰 사용처리 -->
<update id="updatePosDwldCouponSttusCdUpdt">
<![CDATA[
UPDATE GC_DOWNLOAD SET
USEPLC_DV_CD = '02'
,COUPON_STTUS_CD = '03'
,COUPON_USE_DT = SYSDATE()
,UPDUSR = #{useq}
,UPDT_DT = SYSDATE()
WHERE 1=1
AND DWLD_COUPON_INNB = #{download_seq}
]]>
</update>
<!-- 오프라인 쿠폰 다운로드 insert -->
<insert id="insertPosDwldCouponRegist"
keyProperty="download_seq"
useGeneratedKeys="true">
<![CDATA[
INSERT INTO GC_DOWNLOAD (
OFLNE_COUPON_INNB
,COUPON_INNB
,COUPON_SNDNG_INNB
,SOPMAL_CD
,MBR_INNB
,MBR_DV_CD
,CUPNPK_INNB
,COUPON_SNDNG_TY_CD
,CUPNPK_NM
,CUPNPK_DC
,COUP_NM
,COUPON_DC
,USE_ENVRN_CD
,OTR_COUPON_SMTM_USE_AT
,DPLCT_DWLD_AT
,DPLCT_DSCNT_AT
,USE_POSBL_AMT
,GOODS_APPLC_DV_CD
,VALIDPD_BGN_DT
,VALIDPD_END_DT
,OFLNE_COUPON_CRTNB
,USEPLC_DV_CD
,COUPON_STTUS_CD
,COUPON_USE_DT
,RECOVRY_ORGINL_COUPON
,MBR_NM
,MBTLNB
,BNEF_DV_CD
,ADIT_DSCNT_CD
,ADIT_DSCNT_AMT
,DSCNT_MXMM_AMT
,DLVY_AMT_DSCNT_DV_CD
,DLVY_AMT_DSCNT_AMT
,DLVY_AMT_MXMM_DSCNT_AMT
,USE_AT
,REGUSR
,REGIST_DT
,UPDUSR
,UPDT_DT
) SELECT
OFC.OFLNE_COUPON_INNB
,OFC.COUPON_INNB
,OFC.COUPON_SNDNG_INNB
,OFC.SOPMAL_CD
,#{useq} AS MBR_INNB
,#{mbr_dv_cd} AS MBR_DV_CD
,NULL AS CUPNPK_INNB
,'03' AS COUPON_SNDN_TY_CD
,NULL AS CUPNPK_NM
,NULL AS CUPNPK_DC
,C.COUP_NM
,C.COUPON_DC
,C.USE_ENVRN_CD
,C.OTR_COUPON_SMTM_USE_AT
,C.DPLCT_DWLD_AT
,C.DPLCT_DSCNT_AT
,C.USE_POSBL_AMT
,C.GOODS_APPLC_DV_CD
,CASE
WHEN C.VALIDPD_KND_CD = '01' THEN C.VALIDPD_BGN_DT
WHEN C.VALIDPD_KND_CD = '02' THEN CONCAT(CURDATE(), ' 00:00:00')
END AS VALIDPD_BGN_DT
,CASE
WHEN C.VALIDPD_KND_CD = '01' THEN C.VALIDPD_END_DT
WHEN C.VALIDPD_KND_CD = '02' THEN CONCAT(DATE(DATE_ADD(SYSDATE(), INTERVAL C.VALIDPD_DE_CNT DAY)), ' 23:59:59')
END AS VALIDPD_END_DT
,OFC.OFLNE_COUPON_CRTNB
,'02' USEPLC_DV_CD
,'03' AS COUPON_STTUS_CD
,NOW() COUPON_USE_DT
,NULL RECOVRY_ORGINL_COUPON
,OFC.SNDNG_TRGTER_NM AS MBR_NM
,OFC.SNDNG_TRGET_TELNB AS MBTLNB
,C.BNEF_DV_CD
,C.ADIT_DSCNT_CD
,C.ADIT_DSCNT_AMT
,C.DSCNT_MXMM_AMT
,C.DLVY_AMT_DSCNT_DV_CD
,C.DLVY_AMT_DSCNT_AMT
,C.DLVY_AMT_MXMM_DSCNT_AMT
,'Y' AS USE_AT
,OFC.REGUSR AS REGUSR
,SYSDATE() REGIST_DT
,OFC.UPDUSR AS UPDUSR
,SYSDATE() UPDT_DT
FROM GC_OFFLINE_COUPON OFC
INNER JOIN GC_COUPON C
ON OFC.SOPMAL_CD = C.SOPMAL_CD
AND OFC.COUPON_INNB = C.COUPON_INNB
WHERE 1 = 1
AND OFC.SOPMAL_CD = #{coupon_site}
AND OFC.OFLNE_COUPON_CRTNB = #{offline_serialnumber}
]]>
</insert>
<!-- 다운로드 쿠폰 사용 내역(로그) insert -->
<insert id="insertPosDwldCouponUsedLogRegist" keyProperty="couponUseDtlsIdnb" useGeneratedKeys="true">
<![CDATA[
INSERT INTO GC_ORDER_COUPON (
DWLD_COUPON_INNB,
SOPMAL_CD,
ORDR_INNB,
COUPON_ISSU_SOPMAL_CD,
OFLNE_COUPON_CRTNB,
MANAGE_MEMO,
CANCL_AT,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
) SELECT
#{download_seq},
#{sopmalCd},
#{ordrInnb},
#{coupon_site},
DW.OFLNE_COUPON_CRTNB,
#{manageMemo},
'N',
#{useq},
SYSDATE(),
#{useq},
SYSDATE()
FROM GC_DOWNLOAD DW
LEFT JOIN GC_COUPON_SNDNG SD
ON DW.COUPON_SNDNG_INNB = SD.COUPON_SNDNG_INNB
WHERE DWLD_COUPON_INNB = #{download_seq}
]]>
</insert>
<!-- 복원 쿠폰 조회 -->
<select id="selectPosUseCouponListInqire">
<![CDATA[
SELECT
OC.DWLD_COUPON_INNB
,OC.SOPMAL_CD
,OC.ORDR_INNB
,OC.COUPON_ISSU_SOPMAL_CD
,OC.OFLNE_COUPON_CRTNB
,OC.MANAGE_MEMO
,OC.CANCL_AT
,OC.CANCL_DT
FROM GC_ORDER_COUPON OC
WHERE 1 = 1
AND OC.SOPMAL_CD = #{sopmalCd}
AND OC.ORDR_INNB = #{ordrInnb}
]]>
</select>
<!-- 다운로드 쿠폰 복원처리 -->
<update id="updatePosDwldCouponRecvryUpdt">
<![CDATA[
UPDATE GC_DOWNLOAD SET
COUP_NM = CASE
WHEN COUP_NM LIKE '[복원]%' THEN COUP_NM
ELSE CONCAT('[복원]', COUP_NM)
END
,COUPON_STTUS_CD = '02'
,UPDUSR = #{mbrInnb}
,UPDT_DT = SYSDATE()
WHERE 1=1
AND DWLD_COUPON_INNB = #{dwldCouponInnb}
]]>
</update>
<!-- 다운로드 쿠폰 사용내역 취소처리 상태 업데이트 -->
<update id="updatePosOrderCouponCancelUpdt">
<![CDATA[
UPDATE GC_ORDER_COUPON SET
CANCL_AT = 'Y'
,CANCL_DT = SYSDATE()
,UPDUSR = #{mbrInnb}
,UPDT_DT = SYSDATE()
WHERE 1=1
AND DWLD_COUPON_INNB = #{dwldCouponInnb }
]]>
</update>
</mapper>

View File

@@ -0,0 +1,369 @@
<?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.wb.domainserver.domain.gcone.pos.pos.mapper.PosMapper">
<!--포스 - 매장 정보 조회-->
<select id="selectBOPosStrSrch" parameterType="map" resultType="dataMap">
SELECT
STR_INNB
,TENTCPN_NM -- 매장명
,CONCAT('S', CAST(STR_OPER_DV AS UNSIGNED)) AS STR_OPER_DV -- 매장운영구분
,POS_CD_DV_VAL
,POS_CD_PASSIV_INPUT_VAL
,STR_OPER_DV AS STR_OPER_DV_CD
FROM GC_STORE
WHERE 1=1
AND MRHST_AT='Y'
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(search_corporate,'Y')">
AND MANAGE_CPR = #{search_corporate}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(provider_status)">
AND TENT_STTUS = #{provider_status}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(pgubun)">
AND POS_CD_DV_VAL = #{pgubun}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(pcode)">
AND POS_CD_PASSIV_INPUT_VAL = #{pcode}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(order_by)">
ORDER BY #{order_by}
</if>
</select>
<!--포스 - 매장 방문기록 수정-->
<update id="updateMbrStrVisit" parameterType="map">
UPDATE
GC_MEMBER_SITE
SET
POS_STR_INNB = #{posStrInnb},
POS_RECENT_VISIT_DT = SYSDATE(),
UPDUSR = #{useq},
UPDT_DT = SYSDATE()
WHERE 1=1
AND MBR_INNB = #{useq}
AND SOPMAL_CD = #{sopmalCd}
AND MBR_DV_CD = 'GC'
</update>
<!-- 포스-주문 가져오기 (get_order_posinfo) -->
<select id="selectOrderPosInfo" parameterType="map" resultType="dataMap">
SELECT
P.*
, IFNULL(O.MBR_INNB, 0) MBR_INNB
, O.SOPMAL_CD
, O.MBR_INNB
, O.MBR_DV_CD
FROM GC_ORDER_POSINFO P
LEFT JOIN GC_ORDER O ON(O.ORDR_INNB=P.ORDER_SEQ)
WHERE 1=1
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(storeSeq)">
AND P.STORE_SEQ = #{storeSeq}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(pdate)">
AND P.PDATE = DATE(#{pdate})
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(pono)">
AND P.PONO = #{pono}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(pnumb)">
AND P.PNUMB = #{pnumb}
</if>
</select>
<!-- 주문 아이템 가져오기 (get_order_item) -->
<select id="selectOrderItem" parameterType="map" resultType="dataMap">
SELECT ORDER_SEQ, ITEM_OPTION_SEQ, ITEM_SEQ, STEP, PRICE, ORI_PRICE, CONSUMER_PRICE, EA, REFUND_EA, UNIT_EMONEY, EMONEY_SALE_UNIT, EMONEY_SALE_REST
FROM FM_ORDER_ITEM_OPTION
WHERE 1=1
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(order_seq)">
AND ORDER_SEQ = #{order_seq}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(g_poscode)">
AND G_POSCODE = #{g_poscode}
</if>
</select>
<!-- 포스 주문 결제 등록 -->
<insert id="insertPosOrder" parameterType="map" useGeneratedKeys="true" keyProperty="seq">
INSERT INTO GC_ORDER_POSINFO (
ORDER_SEQ -- 주문번호
, STORE_SEQ
, PGUBUN
, PCODE
, PONO
, PDATE
, PNUMB
, EMP_CODE -- 판매사원 코드
, EMP_NAME -- 판매사원 이름
) VALUES (
#{order_seq}
, #{store_seq}
, #{pgubun}
, #{pcode}
, #{pono}
, #{pdate}
, #{pnumb}
, #{emp_code}
, #{emp_name}
)
</insert>
<!-- 매출 - 매출검색 (as_is 쿼리임. 데이터 이관 후 테이블 보면서 to_be 작성예정 )-->
<select id="selectBOPosOrderSrchList" parameterType="map" resultType="dataMap">
select M.order_seq,
date_format(M.deposit_date, '%Y%m%d') order_date,
M.skintype,
M.step,
O.step,
S.provider_seq,
S.provider_name_home,
S.corp_brand,
P.pgubun,
P.pcode,
P.pono,
P.pdate,
P.pnumb,
D.goods_seq,
D.goods_code,
D.goods_name,
O.item_seq,
O.ea,
O.price,
(O.price * O.ea) price_sum,
(O.member_sale + O.member_sale_rest
+ (O.mobile_sale_unit * O.ea) + O.mobile_sale_rest
+ (O.fblike_sale_unit * O.ea) + O.fblike_sale_rest
+ (O.coupon_sale_unit * O.ea) + O.coupon_sale_rest
+ (O.code_sale_unit * O.ea) + O.code_sale_rest
+ (O.referer_sale_unit * O.ea) + O.referer_sale_rest
+ (O.emoney_sale_unit * O.ea) + O.emoney_sale_rest
+ (O.cash_sale_unit * O.ea) + O.cash_sale_rest
+ (O.enuri_sale_unit * O.ea) + O.enuri_sale_rest
+ (O.npay_point_sale_unit * O.ea) + O.npay_point_sale_rest
) sale_sum
from fm_order M
left join fm_order_item D on (D.order_seq = M.order_seq)
left join fm_order_item_option O on (O.item_seq = D.item_seq)
left join fm_order_posInfo P on (P.order_seq = M.order_seq)
left join fm_provider S on (S.provider_seq = P.store_seq)
where M.member_seq = #{member_seq}
and M.deposit_date between #{from_date} ' 00:00:00' and #{to_date}' 23:59:59'
and O.step between '25' and '85'
order by order_date asc
</select>
<!-- 주문 정보 가져오기 (get_order) -->
<select id="selectOrder" parameterType="map" resultType="dataMap">
SELECT O.ORDER_SEQ, O.MEMBER_SEQ, O.STEP, O.SETTLEPRICE, O.EMONEY, O.REGIST_DATE, O.DEPOSIT_DATE
FROM FM_ORDER O
WHERE 1=1
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(order_seq)">
AND O.ORDER_SEQ = #{order_seq}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(member_seq)">
AND O.MEMBER_SEQ = #{member_seq}
</if>
</select>
<!-- 포스-주문 가져오기 (get_order_posinfo : g_poscode) -->
<select id="selectOrderGPosInfo" parameterType="String" resultType="dataMap">
SELECT
P.*, IFNULL(O.MEMBER_SEQ, 0) MEMBER_SEQ
FROM FM_ORDER_POSINFO P
LEFT JOIN FM_ORDER O ON(O.ORDER_SEQ=P.ORDER_SEQ)
WHERE 1=1
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(gPoscode)">
AND P.G_POSCODE = #{g_poscode}
</if>
limit 1
</select>
<!-- 주문 상품 가져오기 (get_goods) -->
<select id="selectGoods" parameterType="dataMap" resultType="dataMap">
SELECT GOODS_SEQ,
PROVIDER_SEQ,
GOODS_NAME,
GOODS_CODE,
GOODS_TYPE,
GOODS_KIND,
DEFAULT_CONSUMER_PRICE,
DEFAULT_PRICE
FROM GC_GOODS
WHERE GOODS_SEQ = #{goods_seq}
</select>
<!-- 주문 상품옵션 가져오기 (get_goods) -->
<select id="selectGoodsItem" parameterType="dataMap" resultType="dataMap">
SELECT OPTION_TITLE,
OPTION1,
OPTION2,
OPTION3,
OPTION4,
OPTION5,
PRICE,
CONSUMER_PRICE
FROM FM_GOODS_OPTION
WHERE GOODS_SEQ = #{goods_seq}
AND OPTION_SEQ = #{option_seq}
</select>
<!-- 포스주문 날짜 업데이트 -->
<update id="updateSetPosDay" parameterType="map">
<![CDATA[
UPDATE FM_MEMBER
SET POS_DAY = #{posday} -- SYSDATE() yyyymmdd
WHERE MEMBER_SEQ = #{memberSeq}
AND (POS_DAY IS NULL OR POS_DAY < #{posday})
]]>
</update>
<!--포스 - 회원 건수 조회-->
<select id="selectPosMbrCnt" parameterType="map" resultType="int">
SELECT
COUNT(1)
FROM
GC_MEMBER GM
WHERE GM.USE_AT = 'Y'
AND GM.MBR_DV_CD = 'GC'
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(search_key)">
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(search_item, 'uid')">
AND GM.MBR_ID = #{search_key}
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(search_item, 'username')">
AND GM.MBR_NM = #{search_key}
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(search_item, 'cp')">
AND GM.MBTLNB = HEX(AES_ENCRYPT(REPLACE(#{search_key},'-',''), #{secretKey}))
</when>
</choose>
</if>
</select>
<!--포스 - 회원 리스트 조회-->
<select id="selectBOPosMbrList" parameterType="map" resultType="DataMap">
SELECT
A.MBR_INNB AS USEQ,
A.MBR_ID AS UID,
A.MBR_DV_CD,
CASE
WHEN A.APPN_CNT > 0 THEN CONCAT('[판매금지]',A.MBR_NM)
WHEN A.APPN_CNT = 0 AND CONCAT(A.POS_CD_DV_VAL,A.POS_CD_PASSIV_INPUT_VAL) = #{storecode} THEN CONCAT(A.MBR_NM , ' (MY)')
ELSE A.MBR_NM
END AS USERNAME,
A.MBR_NM AS DISPLAYNAME,
A.BRTH_DE AS BIRTHDAY,
A.ADDR1,
A.ADDR2,
CASE
WHEN LENGTH(A.MBTLNB) = 11 THEN
CONCAT(SUBSTR(A.MBTLNB, 1, 3), '-', SUBSTR(A.MBTLNB, 4, 4), '-', SUBSTR(A.MBTLNB, 8, 4))
WHEN LENGTH(A.MBTLNB) = 10 AND A.MBTLNB LIKE '02%' THEN
CONCAT(SUBSTR(A.MBTLNB, 1, 2), '-', SUBSTR(A.MBTLNB, 3, 4), '-', SUBSTR(A.MBTLNB, 7, 4))
WHEN LENGTH(A.MBTLNB) = 10 AND A.MBTLNB NOT LIKE '02%' THEN
CONCAT(SUBSTR(A.MBTLNB, 1, 3), '-', SUBSTR(A.MBTLNB, 4, 3), '-', SUBSTR(A.MBTLNB, 7, 4))
WHEN LENGTH(A.MBTLNB) = 9 THEN
CONCAT(SUBSTR(A.MBTLNB, 1, 2), '-', SUBSTR(A.MBTLNB, 3, 3), '-', SUBSTR(A.MBTLNB, 6, 4))
WHEN LENGTH(A.MBTLNB) = 8 THEN
CONCAT(SUBSTR(A.MBTLNB, 1, 4), '-', SUBSTR(A.MBTLNB, 5, 4))
ELSE
A.MBTLNB -- 포맷팅하지 않은 원본 값 반환
END AS PHONE,
CASE
WHEN LENGTH(A.MBTLNB) = 11 THEN
CONCAT(SUBSTR(A.MBTLNB, 1, 3), '-', SUBSTR(A.MBTLNB, 4, 4), '-', SUBSTR(A.MBTLNB, 8, 4))
WHEN LENGTH(A.MBTLNB) = 10 AND A.MBTLNB LIKE '02%' THEN
CONCAT(SUBSTR(A.MBTLNB, 1, 2), '-', SUBSTR(A.MBTLNB, 3, 4), '-', SUBSTR(A.MBTLNB, 7, 4))
WHEN LENGTH(A.MBTLNB) = 10 AND A.MBTLNB NOT LIKE '02%' THEN
CONCAT(SUBSTR(A.MBTLNB, 1, 3), '-', SUBSTR(A.MBTLNB, 4, 3), '-', SUBSTR(A.MBTLNB, 7, 4))
WHEN LENGTH(A.MBTLNB) = 9 THEN
CONCAT(SUBSTR(A.MBTLNB, 1, 2), '-', SUBSTR(A.MBTLNB, 3, 3), '-', SUBSTR(A.MBTLNB, 6, 4))
WHEN LENGTH(A.MBTLNB) = 8 THEN
CONCAT(SUBSTR(A.MBTLNB, 1, 4), '-', SUBSTR(A.MBTLNB, 5, 4))
ELSE
A.MBTLNB -- 포맷팅하지 않은 원본 값 반환
END AS CP,
CAST(ROUND(IFNULL(A.MLG,0),0) AS CHAR CHARACTER SET utf8mb4) AS TOTALPOINT
FROM(SELECT
GM.MBR_INNB,
GM.MBR_ID,
GM.MBR_NM,
GM.MBR_DV_CD,
DATE_FORMAT(GM.BRTH_DE,'%Y-%m-%d') AS BRTH_DE,
CASE
WHEN GM.ADRES_DV = '02' THEN GM.LNB_ADRES
ELSE GM.RNM_ADRES
END AS ADDR1,
GM.DTL_ADRES AS ADDR2,
CAST(AES_DECRYPT(UNHEX(GM.MBTLNB) ,#{secretKey}) AS CHAR(50))AS MBTLNB,
GM.REGIST_DT,
GS.STR_INNB,
GS.STR_OPER_DV,
GM.JOIN_MTH_CD,
GS.POS_CD_DV_VAL,
GS.POS_CD_PASSIV_INPUT_VAL,
FN_GET_COMMCODE_NAME('STR_DV', GS.STR_OPER_DV) STR_OPER_NM,
SUM( FMI.BLCE ) AS MLG,
COUNT(GMA.APPN_INNB) AS APPN_CNT
FROM GC_MEMBER GM
LEFT JOIN GC_EXTRL_MEMBER GEM
ON GM.MBR_INNB = GEM.MBR_INNB
AND GM.MBR_DV_CD = GEM.MBR_DV_CD
AND GEM.SOPMAL_CD = (SELECT REPRSNT_BRAND FROM GC_STORE WHERE CONCAT(POS_CD_DV_VAL,POS_CD_PASSIV_INPUT_VAL) = #{storecode})
AND GEM.EXTRL_INTRLCK_DV_CD = '03'
LEFT JOIN GC_STORE GS
ON GEM.STR_INNB = GS.STR_INNB
AND GEM.SOPMAL_CD = GS.REPRSNT_BRAND
LEFT JOIN GC_MEMBER_APPN GMA
ON GMA.MBR_IDNTFC_INFO = GM.MBR_INNB
AND GMA.MBR_DV_CD = GM.MBR_DV_CD
AND GMA.APPN_DV_CD = '02'
LEFT JOIN GC_MILEAGE FMI
ON GM.MBR_INNB = FMI.MBR_INNB
AND GM.MBR_DV_CD = FMI.MBR_DV_CD
AND FMI.BLCE > 0
AND FMI.USE_POSBL_END_DT >= DATE_FORMAT(NOW(), '%Y-%m-01')
AND FMI.MLG_ACCML_DV_CD IN ('add', 'up')
AND FMI.CANCL_AT = 'N'
WHERE 1=1
AND GM.USE_AT = 'Y'
AND GM.MBR_DV_CD = 'GC'
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(search_key)">
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(search_item, 'uid')">
AND GM.MBR_ID = #{search_key}
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(search_item, 'username')">
AND GM.MBR_NM = #{search_key}
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(search_item, 'cp')">
AND GM.MBTLNB = HEX(AES_ENCRYPT(REPLACE(#{search_key},'-',''), #{secretKey}))
</when>
</choose>
</if>
GROUP BY
GM.MBR_INNB,
GM.MBR_ID,
GM.MBR_NM,
GM.BRTH_DE,
ADDR1,
ADDR2,
MBTLNB,
GM.REGIST_DT,
GS.STR_INNB,
GS.STR_OPER_DV,
GM.JOIN_MTH_CD,
GS.POS_CD_DV_VAL,
GS.POS_CD_PASSIV_INPUT_VAL,
STR_OPER_NM
)A
ORDER BY A.MBR_NM
LIMIT 40 OFFSET 0
</select>
<select id = "selectPosMbrAppn" parameterType="map" resultType="int">
SELECT COUNT(1) FROM GC_MEMBER_APPN WHERE IDNTFC_STDR_CD = 'order_mbtlnb' AND IDNTFC_INFO = HEX(AES_ENCRYPT(REPLACE(#{search_key},'-',''), #{secretKey})) AND APPN_DV_CD = '02'
</select>
</mapper>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,447 @@
<?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.wb.domainserver.domain.gcone.puri.mapper.BOPuriMapper">
<!-- 정수기 판매 및 설치 내역 조회 WHERE 절 -->
<sql id="selectBOPuriOrderListFormWhere">
<![CDATA[
WHERE 1=1
AND gpo.status != 'delete'
]]>
<choose>
<when test="srchOrderDateType == 'purchsDe'">
<if test="sndngOrderReqstSDate != null and sndngOrderReqstEDate != null">
<![CDATA[
AND gpo.purchs_de between #{sndngOrderReqstSDate} AND #{sndngOrderReqstEDate}
]]>
</if>
</when>
<when test="srchOrderDateType == 'dlivyDe'">
<if test="sndngOrderReqstSDate != null and sndngOrderReqstEDate != null">
<![CDATA[
AND gpo.dlivy_de between #{sndngOrderReqstSDate} AND #{sndngOrderReqstEDate}
]]>
</if>
</when>
<when test="srchOrderDateType == 'visitDe'">
<if test="sndngOrderReqstSDate != null and sndngOrderReqstEDate != null">
<![CDATA[
AND gpo.visit_de between #{sndngOrderReqstSDate} AND #{sndngOrderReqstEDate}
]]>
</if>
</when>
</choose>
<choose>
<when test="srchOrderInfoType == 'purchsrNm'">
<if test="srchOrdrText != null and srchOrdrText != ''">
<![CDATA[
AND gpo.purchsr_nm = #{srchOrdrText}
]]>
</if>
</when>
<when test="srchOrderInfoType == 'cttpc'">
<if test="srchOrdrText != null and srchOrdrText != ''">
<![CDATA[
AND gpo.cttpc = HEX(AES_ENCRYPT(#{srchOrdrText}, #{secretKey}))
]]>
</if>
</when>
<when test="srchOrderInfoType == 'dlivyNm'">
<if test="srchOrdrText != null and srchOrdrText != ''">
<![CDATA[
AND gpo.dlivy_nm = #{srchOrdrText}
]]>
</if>
</when>
<when test="srchOrderInfoType == 'dlivyCttpc'">
<if test="srchOrdrText != null and srchOrdrText != ''">
<![CDATA[
AND gpo.dlivy_cttpc = HEX(AES_ENCRYPT(#{srchOrdrText}, #{secretKey}))
]]>
</if>
</when>
<when test="srchOrderInfoType == 'goodsCd'">
<if test="srchOrdrText != null and srchOrdrText != ''">
<![CDATA[
AND gpo.goods_cd = #{srchOrdrText}
]]>
</if>
</when>
<when test="srchOrderInfoType == 'erpCode'">
<if test="srchOrdrText != null and srchOrdrText != ''">
<![CDATA[
AND gpo.erp_code = #{srchOrdrText}
]]>
</if>
</when>
</choose>
<choose>
<when test="srchMallCdType != ''">
<![CDATA[
AND gpo.purchs_cd = #{srchMallCdType}
]]>
</when>
</choose>
<choose>
<when test="srchGoodsType != ''">
<![CDATA[
AND gpo.goods_cd = #{srchGoodsType}
]]>
</when>
</choose>
<choose>
<when test="srchVisitType != ''">
<![CDATA[
AND gpo.visit_trgter_at = #{srchVisitType}
]]>
</when>
</choose>
<choose>
<when test="srchAlimType != ''">
<![CDATA[
AND gpa.status = #{srchAlimType}
]]>
</when>
</choose>
<choose>
<when test="srchSndngType == 'installDe'">
<if test="sndngAllimReqstSDate != null and sndngAllimReqstEDate != null">
<![CDATA[
AND gpa.install_de between #{sndngAllimReqstSDate} AND #{sndngAllimReqstEDate}
]]>
</if>
</when>
<when test="srchSndngType == 'frstSndngDe'">
<if test="sndngAllimReqstSDate != null and sndngAllimReqstEDate != null">
<![CDATA[
AND gpa.frst_sndng_de between #{sndngAllimReqstSDate} AND #{sndngAllimReqstEDate}
]]>
</if>
</when>
<when test="srchSndngType == 'prevSndngDe'">
<if test="sndngAllimReqstSDate != null and sndngAllimReqstEDate != null">
<![CDATA[
AND gpa.prev_sndng_de between #{sndngAllimReqstSDate} AND #{sndngAllimReqstEDate}
]]>
</if>
</when>
<when test="srchSndngType == 'nextSndngResveDe'">
<if test="sndngAllimReqstSDate != null and sndngAllimReqstEDate != null">
<![CDATA[
AND gpa.next_sndng_resve_de between #{sndngAllimReqstSDate} AND #{sndngAllimReqstEDate}
]]>
</if>
</when>
</choose>
<choose>
<when test="srchAlimInfoType == 'cstmrNm'">
<if test="srchAllimText != null and srchAllimText != ''">
<![CDATA[
AND gpa.cstmr_nm = #{srchAllimText}
]]>
</if>
</when>
<when test="srchAlimInfoType == 'telnb'">
<if test="srchAllimText != null and srchAllimText != ''">
<![CDATA[
AND gpa.telnb = HEX(AES_ENCRYPT(#{srchAllimText}, #{secretKey}))
]]>
</if>
</when>
</choose>
</sql>
<select id="selectBOPuriOrderList"
parameterType="com.wb.domainserver.domain.gcone.puri.vo.BOPuriSrchVO"
resultType="dataMap">
<![CDATA[
SELECT
ROW_NUMBER() OVER (ORDER BY gpo.puri_order_seq DESC) AS rnum,
gpo.puri_order_seq,
gpo.status,
gpo.regist_dt,
gpo.erp_code,
gpo.purchs_dv,
gpo.purchs_cd,
gpo.purchs_nm,
gpo.ordr_cd,
gpo.purchs_de,
gpo.purchs_dtls,
gpo.ordr_rm,
CONCAT(LEFT(gpo.purchsr_nm, 1), '*', RIGHT(gpo.purchsr_nm, 1)) AS purchsr_nm,
gpo.purchsr_nm AS no_mask_purchsr_nm,
CAST(
CONCAT(
LEFT(AES_DECRYPT(UNHEX(gpo.cttpc), #{secretKey}), 3),
'-****-',
RIGHT(AES_DECRYPT(UNHEX(gpo.cttpc), #{secretKey}), 4)
) AS CHAR(50)
) AS cttpc,
CAST(
CONCAT(
LEFT(AES_DECRYPT(UNHEX(gpo.cttpc), #{secretKey}), 3),
'-',
SUBSTR(AES_DECRYPT(UNHEX(gpo.cttpc), #{secretKey}), 4, 4),
'-',
RIGHT(AES_DECRYPT(UNHEX(gpo.cttpc), #{secretKey}), 4)
) AS CHAR(50)
) AS no_mask_cttpc,
gpo.goods_cd,
gpo.goods_nm,
gpo.dlivy_de,
CONCAT(LEFT(gpo.dlivy_nm, 1), '*', RIGHT(gpo.dlivy_nm, 1)) AS dlivyNm,
gpo.dlivy_nm AS no_mask_dlivy_nm,
CAST(
CONCAT(
LEFT(AES_DECRYPT(UNHEX(gpo.dlivy_cttpc), #{secretKey}), 3),
'-****-',
RIGHT(AES_DECRYPT(UNHEX(gpo.dlivy_cttpc), #{secretKey}), 4)
) AS CHAR(50)
) AS dlivy_cttpc,
CAST(
CONCAT(
LEFT(AES_DECRYPT(UNHEX(gpo.dlivy_cttpc), #{secretKey}), 3),
'-',
SUBSTR(AES_DECRYPT(UNHEX(gpo.dlivy_cttpc), #{secretKey}), 4, 4),
'-',
RIGHT(AES_DECRYPT(UNHEX(gpo.dlivy_cttpc), #{secretKey}), 4)
) AS CHAR(50)
) AS no_mask_dlivy_cttpc,
gpo.visit_trgter_at,
IF(gpo.visit_de > '2020-01-01', gpo.visit_de, NULL) AS visitDe,
gpa.puri_allim_seq,
CASE gpa.status
WHEN 'wait' THEN '대기'
WHEN 'send' THEN '발송'
WHEN 'stop' THEN '중지'
ELSE ''
END AS allimStatus,
gpa.cstmr_nm,
CAST(
CONCAT(
LEFT(AES_DECRYPT(UNHEX(gpa.telnb), #{secretKey}), 3),
'-',
SUBSTR(AES_DECRYPT(UNHEX(gpa.telnb), #{secretKey}), 4, 4),
'-',
RIGHT(AES_DECRYPT(UNHEX(gpa.telnb), #{secretKey}), 4)
) AS CHAR(50)
) AS noMasktelnb,
gpa.regist_dt AS allimRegistDt,
gpa.install_de,
IF(gpa.frst_sndng_de > '2020-01-01', gpa.frst_sndng_de, NULL) AS frstSndngDe,
IF(gpa.prev_sndng_de > '2020-01-01', gpa.prev_sndng_de, NULL) AS prevSndngDe,
IF(gpa.next_sndng_resve_de > '2020-01-01', gpa.next_sndng_resve_de, NULL) AS nextSndngResveDe
FROM
GC_PURI_ORDER gpo
LEFT JOIN
GC_PURI_ALLIM gpa ON (gpo.puri_order_seq = gpa.puri_order_seq)
LEFT JOIN
(SELECT puri_allim_seq, MAX(reg_date) AS latest_log_dt
FROM GC_PURI_ALLIM_LOG
GROUP BY puri_allim_seq) gpal ON (gpa.puri_allim_seq = gpal.puri_allim_seq)
]]>
<include refid = "selectBOPuriOrderListFormWhere"/>
<![CDATA[
ORDER BY gpo.puri_order_seq DESC
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<select id="selectBOPuriOrderListCnt"
parameterType="com.wb.domainserver.domain.gcone.puri.vo.BOPuriSrchVO">
<![CDATA[
SELECT
COUNT(1)
FROM GC_PURI_ORDER gpo
LEFT JOIN GC_PURI_ALLIM gpa
ON (gpo.puri_order_seq = gpa.puri_order_seq)
]]>
<include refid = "selectBOPuriOrderListFormWhere"/>
</select>
<select id="selectPuriAllimList"
parameterType="com.wb.domainserver.domain.gcone.puri.vo.BOPuriSrchVO"
resultType="dataMap">
SELECT
@rownum := @rownum + 1 AS rnum,
gpal.sndng_de,
CAST(
CONCAT(
LEFT(AES_DECRYPT(UNHEX(gpal.telnb), #{secretKey}), 3),
'-',
SUBSTR(AES_DECRYPT(UNHEX(gpal.telnb), #{secretKey}), 4,4),
'-',
RIGHT(AES_DECRYPT(UNHEX(gpal.telnb), #{secretKey}), 4)
) AS CHAR(50)
) AS telnb,
gpal.sndng_cn
FROM (SELECT @rownum := 0) r,
GC_PURI_ALLIM_LOG gpal
WHERE puri_allim_seq = #{puriAllimSeq}
AND act = 'send'
</select>
<update id="updatePuriOrder">
UPDATE GC_PURI_ORDER set
status = #{status},
visit_trgter_at = #{visitTrgterAt},
ordr_rm = #{ordrRm}
WHERE puri_order_seq = #{puriOrderSeq}
</update>
<update id="updatePuriAllim">
UPDATE GC_PURI_ALLIM set
status = #{alimStatus},
cstmr_nm = #{cstmrNm},
telnb = HEX(AES_ENCRYPT(#{telnb}, #{secretKey})),
install_de = #{installDe}
WHERE puri_allim_seq = #{puriAllimSeq}
</update>
<insert id="insertPuriAllim">
INSERT INTO GC_PURI_ALLIM (status,regist_dt,puri_order_seq,cstmr_nm,telnb)
VALUES('wait',NOW(),#{puriOrderSeq},#{cstmrNm},HEX(AES_ENCRYPT(#{telnb}, #{secretKey})))
</insert>
<select id="selectPuriVisitUpdate">
SELECT
gpo.puri_order_seq AS puriOrderSeq,
gpo.purchsr_nm AS purchsrNm,
CAST(AES_DECRYPT(UNHEX(gpo.cttpc), #{secretKey}) AS CHAR(50)) AS cttpc,
gpo.visit_de as visitDe,
gpa.puri_allim_seq as puriAllimSeq,
gpa.install_de as installDe,
CAST(AES_DECRYPT(UNHEX(gpo.dlivy_cttpc), #{secretKey}) AS CHAR(50)) AS dlivyCttpc
FROM GC_PURI_ORDER gpo
LEFT JOIN GC_PURI_ALLIM gpa ON (gpo.puri_order_seq=gpa.puri_order_seq)
where gpo.ordr_cd = #{ordrCd}
</select>
<update id="updatePuriVisitDate" parameterType="map">
<foreach collection="puriOrderSeqArr" item="orderSeq" index="index" separator=";">
UPDATE GC_PURI_ORDER SET
visit_trgter_at = 'Y',
visit_de = #{realUpdateVisitDateArr[${index}]}
WHERE puri_order_seq = #{orderSeq}
</foreach>
</update>
<update id="updatePuriVisitCancelDate" parameterType="map">
<![CDATA[
UPDATE GC_PURI_ORDER SET
visit_trgter_at = 'N',
visit_de = ''
WHERE puri_order_seq in
]]>
<foreach collection="item.puriOrderSeqArr" item="seq" open="(" separator="," close=")">
#{seq}
</foreach>
</update>
<select id="selectDupPuriOrderAllimList">
<![CDATA[
select puri_order_seq, puri_allim_seq from GC_PURI_ALLIM
where puri_order_seq = #{puriOrderSeq}
]]>
</select>
<insert id="insertPuriAllimList">
<foreach collection="list" item="item" separator=";">
<![CDATA[
INSERT INTO gcone.GC_PURI_ALLIM (
STATUS,
REGIST_DT,
PURI_ORDER_SEQ,
CSTMR_NM,
TELNB,
INSTALL_DE,
NEXT_SNDNG_RESVE_DE,
CHNG_LOG
) VALUES (
#{item.status},
SYSDATE(),
#{item.puriOrderSeq},
#{item.cstmrNm},
HEX(AES_ENCRYPT(#{item.telnb}, #{item.secretKey})),
#{item.installDe},
#{item.nextSndngResveDe},
#{item.chngLog}
)
]]>
</foreach>
</insert>
<delete id="deletePuriAllim">
<foreach collection="list" item="item" separator=";">
<![CDATA[
delete from GC_PURI_ALLIM
where puri_allim_seq = #{item.puriAllimSeq}
]]>
</foreach>
</delete>
<update id="updatePuriAllimSeq" parameterType="java.util.List">
<foreach collection="list" item="item" separator=";">
<![CDATA[
UPDATE GC_PURI_ORDER SET PURI_ALLIM_SEQ = #{item.puriAllimSeq}
WHERE PURI_ORDER_SEQ = #{item.puriOrderSeq}
]]>
</foreach>
</update>
<select id="selectSameNumber">
<foreach collection="list" item="item" separator=";">
<![CDATA[
select puri_allim_seq from GC_PURI_ALLIM
where telnb = HEX(AES_ENCRYPT(#{item.telnb}, #{item.secretkey}))
and puri_allim_seq != #{item.puriOrderSeq}
and status in ('wait','send')
]]>
</foreach>
</select>
<insert id="insertPuriAllimLogFirst">
<foreach collection="list" item="item" separator=";">
<![CDATA[
insert into GC_PURI_ALLIM_LOG (reg_date,puri_allim_seq,act,telnb,sndng_de,sndng_ty,sndng_cn)
values (now(),#{item.puriAllimSeq},#{item.act},HEX(AES_ENCRYPT(#{item.telnb}, #{item.secretkey}),'','',#{item.sndngCn}))
]]>
</foreach>
</insert>
<update id="updateStopAllim">
<![CDATA[
UPDATE GC_PURI_ALLIM
SET status = 'stop',
chng_log = #{item.chngLog}
WHERE puri_allim_seq IN ]]>
<foreach collection="item.puriAllimSeq" item="seq" open="(" separator="," close=")">
#{seq}
</foreach>
</update>
</mapper>

View File

@@ -0,0 +1,8 @@
<?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.wb.domainserver.domain.sample.mapper.SampleMapper">
<insert id="insertGconeCheck" parameterType="com.wb.domainserver.domain.sample.vo.SampleVO">
INSERT INTO tmp_order (message1, message2) VALUES(#{message1},#{message2})
</insert>
</mapper>

View File

@@ -0,0 +1,26 @@
<?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.wb.domainserver.domain.gcone.setup.adscript.mapper.BOAdScriptMapper">
<!--광고스크립트 목록 조회-->
<select id="selectBOAdScriptList"
parameterType="com.wb.domainserver.domain.gcone.setup.adscript.vo.BOAdScriptVO"
resultType="dataMap">
SELECT
AD_SCRIPT_INNB,
GAS.SOPMAL_CD,
AD_MEDIA_DV_CD,
AD_MEDIA_ID,
INSTL_PGE_DV_CD,
INSTL_PGE_LBL,
INSTL_PGE_ENVRN_CD,
GNC.BUTTON_KEY AS NPAY_BUTTON_ID,
TRIGR_DV_CD
FROM
GC_AD_SCRIPT GAS
LEFT JOIN GC_NPAY_CONFIG GNC
ON GAS.SOPMAL_CD = GNC.SOPMAL_CD
WHERE
1 = 1
AND GAS.SOPMAL_CD = #{sopmalCd}
</select>
</mapper>

View File

@@ -0,0 +1,316 @@
<?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.wb.domainserver.domain.gcone.setup.dlvygrp.mapper.BODlvygrpMapper">
<!-- 배송그룹 목록조회 조건절 -->
<sql id="selectDlvyListWhere">
<![CDATA[
WHERE 1=1
AND SOPMAL_CD = #{sopmalCd}
AND USE_AT = 'Y'
]]>
</sql>
<!-- 배송그룹 상세조회, 수정, 삭제 조건절 -->
<sql id="selectDlvyKeyWhere">
<![CDATA[
WHERE 1=1
AND SOPMAL_CD = #{sopmalCd}
AND DLVY_GROUP_INNB = #{dlvyGroupInnb}
]]>
</sql>
<!-- 배송그룹 목록조회 From절 -->
<sql id="selectDlvyFrom">
<![CDATA[
FROM GC_SHIPPING_GROUPING
]]>
</sql>
<!-- 배송그룹 목록건수조회 -->
<select id="selectDlvyListCnt"
parameterType="com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO"
resultType="java.lang.Integer">
SELECT
COUNT(1)
<include refid="selectDlvyFrom"/>
<include refid="selectDlvyListWhere"/>
</select>
<select id="selectDlvyListCntOld"
parameterType="com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO"
resultType="java.lang.Integer">
SELECT
COUNT(1)
-- FROM (
-- SELECT
-- CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM
-- , TB.*
-- FROM (
-- SELECT DLVY_GROUP_INNB
-- ,DLVY_GROUP_DV_CD
-- ,DLVY_GROUP_NM
-- ,REGIST_DT
-- ,DATE_FORMAT(REGIST_DT, '%Y-%m-%d') AS REGIST_DE
-- ,UPDT_DT
-- ,DATE_FORMAT(UPDT_DT, '%Y-%m-%d') AS UPDT_DE
<include refid="selectDlvyFrom"/>
<include refid="selectDlvyListWhere"/>
-- ORDER BY DLVY_GROUP_INNB DESC ) TB
-- WHERE (@ROWNUM:=0) = 0 ) PV
</select>
<!-- 배송그룹 목록 -->
<select id="selectBODlvyGroupList"
parameterType="com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO"
resultType="datamap">
SELECT
*
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, TB.*
FROM (
SELECT DLVY_GROUP_INNB
,DLVY_GROUP_DV_CD
,DLVY_GROUP_NM
,REGIST_DT
,DATE_FORMAT(REGIST_DT, '%Y-%m-%d') AS REGIST_DE
,UPDT_DT
,DATE_FORMAT(UPDT_DT, '%Y-%m-%d') AS UPDT_DE
<include refid="selectDlvyFrom"/>
<include refid="selectDlvyListWhere"/>
ORDER BY
DLVY_GROUP_INNB DESC ) TB
WHERE (@ROWNUM:=0) = 0 ) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!-- 배송그룹 목록 -->
<select id="selectBODlvyGroupAllList"
parameterType="com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO"
resultType="datamap">
SELECT DLVY_GROUP_INNB
,DLVY_GROUP_DV_CD
,DLVY_GROUP_NM
,REGIST_DT
,DATE_FORMAT(REGIST_DT, '%Y-%m-%d') AS REGIST_DE
,UPDT_DT
,DATE_FORMAT(UPDT_DT, '%Y-%m-%d') AS UPDT_DE
<include refid="selectDlvyFrom"/>
<include refid="selectDlvyListWhere"/>
ORDER BY DLVY_GROUP_INNB DESC
</select>
<!-- 배송그룹 등록 -->
<insert id="insertBODlvyGroup"
parameterType="com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO">
<selectKey keyProperty="dlvyGroupInnb"
resultType="java.lang.Integer"
order="BEFORE">
SELECT IFNULL(MAX(DLVY_GROUP_INNB),0) + 1 FROM GC_SHIPPING_GROUPING
</selectKey>
<![CDATA[
INSERT
INTO GC_SHIPPING_GROUPING
(
DLVY_GROUP_INNB
,SOPMAL_CD
,RTNLC_INNB
,DLVY_GROUP_DV_CD
,DLVY_GROUP_NM
,DFT_DLVY_AMT
,AMT_CND_USE_AT
,AMT_CND_ADIT_AMT
,CNT_CND_USE_AT
,CNT_CND_ADIT_AMT
,DLVY_AREA_ADIT_AT
,AREA_ADIT_DLVY_AMT
,BUNDLE_DLVY_USE_AT
,BUNDLE_DLVY_CND_AMT
,RETURN_DLVY_APPLC_AT
,RETURN_DLVY_AMT
,EXCHNG_DLVY_AMT
,USE_AT
,REGUSR
,REGIST_DT
,UPDUSR
,UPDT_DT
)
VALUES
(
#{dlvyGroupInnb}
,#{sopmalCd}
,#{rtnlcInnb}
,#{dlvyGroupDvCd}
,#{dlvyGroupNm}
,#{dftDlvyAmt}
,#{amtCndUseAt}
,#{amtCndAditAmt}
,#{cntCndUseAt}
,#{cntCndAditAmt}
,#{dlvyAreaAditAt}
,#{areaAditDlvyAmt}
,#{bundleDlvyUseAt}
,#{bundleDlvyCndAmt}
,#{returnDlvyApplcAt}
,#{returnDlvyAmt}
,#{exchngDlvyAmt}
,'Y'
,#{regusr}
,now()
,#{regusr}
,now()
)
]]>
</insert>
<!-- 배송 반송지 등록 -->
<insert id="insertBODlvyGroupAddress" parameterType="com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO">
<selectKey keyProperty="rtnlcInnb"
resultType="java.lang.Integer"
order="BEFORE">
SELECT IFNULL(MAX(RTNLC_INNB),0) + 1 FROM GC_SHIPPING_ADDRESS WHERE SOPMAL_CD = #{sopmalCd}
</selectKey>
INSERT INTO GC_SHIPPING_ADDRESS
(
RTNLC_INNB
, SOPMAL_CD
, RTNLC_ZIP
, RTNLC_ADRES
, RTNLC_DTL_ADRES
, RTNLC_TELNB
, USE_AT
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
)
VALUES
(
#{rtnlcInnb}
, #{sopmalCd}
, #{rtnlcZip}
, #{rtnlcAdres}
, #{rtnlcDtlAdres}
, #{rtnlcTelnb}
, 'Y'
, #{regusr}
, now()
, #{regusr}
, now()
)
</insert>
<!-- 배송그룹 정보 조회 -->
<select id="selectBODlvyGroupDtlForm"
parameterType="com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO"
resultType="com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO">
SELECT
SG.DLVY_GROUP_INNB
,SG.DLVY_GROUP_DV_CD
,SG.DLVY_GROUP_NM
,SG.DFT_DLVY_AMT
,SG.AMT_CND_USE_AT
,SG.AMT_CND_ADIT_AMT
,SG.CNT_CND_USE_AT
,SG.CNT_CND_ADIT_AMT
,SG.DLVY_AREA_ADIT_AT
,SG.AREA_ADIT_DLVY_AMT
,SG.BUNDLE_DLVY_USE_AT
,SG.BUNDLE_DLVY_CND_AMT
,SG.RETURN_DLVY_APPLC_AT
,SG.RETURN_DLVY_AMT
,SG.EXCHNG_DLVY_AMT
,SG.RTNLC_INNB
,SA.RTNLC_ZIP
,SA.RTNLC_ADRES
,SA.RTNLC_DTL_ADRES
,SA.RTNLC_TELNB
,SG.RETURN_DLVY_AMT
,SG.EXCHNG_DLVY_AMT
FROM GC_SHIPPING_GROUPING SG
LEFT JOIN GC_SHIPPING_ADDRESS SA
ON SG.RTNLC_INNB = SA.RTNLC_INNB
AND SG.SOPMAL_CD = SA.SOPMAL_CD
AND SG.USE_AT = 'Y'
AND SA.USE_AT = 'Y'
WHERE 1=1
AND SG.SOPMAL_CD = #{sopmalCd}
AND DLVY_GROUP_INNB = #{dlvyGroupInnb}
</select>
<!-- 배송그룹 수정 -->
<update id="updateBODlvyGroupDtl"
parameterType="com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO">
<![CDATA[
UPDATE GC_SHIPPING_GROUPING
SET DLVY_GROUP_DV_CD = #{dlvyGroupDvCd}
,DLVY_GROUP_NM = #{dlvyGroupNm}
,DFT_DLVY_AMT = #{dftDlvyAmt}
,AMT_CND_USE_AT = #{amtCndUseAt}
,AMT_CND_ADIT_AMT = #{amtCndAditAmt}
,CNT_CND_USE_AT = #{cntCndUseAt}
,CNT_CND_ADIT_AMT = #{cntCndAditAmt}
,DLVY_AREA_ADIT_AT = #{dlvyAreaAditAt}
,AREA_ADIT_DLVY_AMT = #{areaAditDlvyAmt}
,BUNDLE_DLVY_USE_AT = #{bundleDlvyUseAt}
,BUNDLE_DLVY_CND_AMT = #{bundleDlvyCndAmt}
,RETURN_DLVY_APPLC_AT = #{returnDlvyApplcAt}
,RETURN_DLVY_AMT = #{returnDlvyAmt}
,EXCHNG_DLVY_AMT = #{exchngDlvyAmt}
,UPDUSR = #{updusr}
,UPDT_DT = NOW()
]]>
<include refid="selectDlvyKeyWhere"/>
</update>
<!-- 배송그룹 수정 -->
<update id="updateBODlvyGroupRtnlc"
parameterType="com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO">
UPDATE GC_SHIPPING_ADDRESS
SET RTNLC_ZIP = #{rtnlcZip}
, RTNLC_ADRES = #{rtnlcAdres}
, RTNLC_DTL_ADRES = #{rtnlcDtlAdres}
, RTNLC_TELNB = #{rtnlcTelnb}
, UPDUSR = #{updusr}
, UPDT_DT = NOW()
WHERE 1=1
AND RTNLC_INNB = #{rtnlcInnb}
AND SOPMAL_CD = #{sopmalCd}
</update>
<!-- 배송그룹 삭제(사용여부 Update y > n) -->
<update id="deleteBODlvyGroup" parameterType="com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO">
<![CDATA[
UPDATE GC_SHIPPING_GROUPING
SET USE_AT = 'N'
]]>
<include refid="selectDlvyKeyWhere"/>
</update>
<!-- 배송그룹 삭제(사용여부 Update y > n) -->
<update id="deleteBODlvyGroupRtnlc" parameterType="com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO">
UPDATE GC_SHIPPING_ADDRESS
SET USE_AT = 'N'
WHERE RTNLC_INNB = #{rtnlcInnb}
AND SOPMAL_CD = #{sopmalCd}
</update>
<!-- 배송그룹 고유키로 연결 상품의 갯수 검색 -->
<select id="isIncludeGoods"
parameterType="com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO"
resultType="java.lang.Integer">
SELECT COUNT(1)
FROM GC_GOODS
WHERE DLVY_GROUP_INNB = #{dlvyGroupInnb}
</select>
<!-- 배송 반송지 조회 -->
<select id="selectBOReturnAddressInqire">
<![CDATA[
SELECT * FROM GC_SHIPPING_ADDRESS WHERE SOPMAL_CD = #{sopmalCd} AND USE_AT = 'Y' LIMIT 1
]]>
</select>
</mapper>

View File

@@ -0,0 +1,193 @@
<?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.wb.domainserver.domain.gcone.setup.gradbnef.mapper.BOGradbnefMapper">
<!--회원 등급 상세 where절 -->
<sql id="gradBnefDtlWhere">
<![CDATA[
WHERE 1=1
AND FMGS.MBR_GRAD_INNB = #{mbrGradInnb}
]]>
</sql>
<!--회원 등급 총 개수 -->
<select id = "selectBOMbrGradListInqireTotCnt"
parameterType="com.wb.domainserver.domain.gcone.setup.gradbnef.vo.BOGradbnefVO"
resultType="java.lang.Integer">
SELECT
COUNT(1)
FROM GC_MEMBER_GRAD FMG
WHERE 1=1
AND FMG.SOPMAL_CD = #{sopmalCd}
AND FMG.USE_AT = 'Y'
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(searchGradNm)">
AND FMG.MBR_GRAD_NM LIKE CONCAT('%',#{searchGradNm},'%')
</if>
</select>
<!--회원 등급 목록 조회-->
<select id = "selectBOMbrGradListInqire"
parameterType="com.wb.domainserver.domain.gcone.setup.gradbnef.vo.BOGradbnefVO"
resultType="dataMap">
<![CDATA[
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED ) AS RNUM
,TB.*
FROM (
SELECT
FMG.MBR_GRAD_INNB ,
FMG.MBR_GRAD_GROUP_INNB ,
(
SELECT
SOPMAL_NM
FROM GC_SHOP
WHERE SOPMAL_CD = #{sopmalCd}
) AS SOPMAL_NM,
FMG.MBR_GRAD_NM,
FMG.MLG_ACCML_UNIT_DV_CD ,
FN_GET_COMMCODE_NAME('MLG_ACCML_UNIT_DV',FMG.MLG_ACCML_UNIT_DV_CD)MLG_ACCML_UNIT_DV_CD_NM,
ROUND(FMG.MLG_ACCML_AMT) AS MLG_ACCML_AMT,
ROUND(FMG.MLG_MXMM_ACCML_AMT) AS MLG_MXMM_ACCML_AMT,
FMG.MLG_VALID_MT_CNT,
ROUND(FMG.MBR_GRAD_AMT) AS MBR_GRAD_AMT,
CASE
WHEN FMG.MBR_GRAD_AMT >= 10000 THEN CONCAT(IFNULL(ROUND(FMG.MBR_GRAD_AMT / 10000), 0), '만원')
WHEN FMG.MBR_GRAD_AMT < 10000 AND FMG.MBR_GRAD_AMT > 0 THEN CONCAT(FORMAT(ROUND(FMG.MBR_GRAD_AMT), 0), '원')
ELSE ''
END AS MBR_GRAD_AMT_SOP,
FMG.MBR_GRAD_CND_CD ,
FMG.SOPMAL_CD,
FMG.REGUSR,
FMG.REGIST_DT,
FMG.UPDUSR,
FMG.UPDT_DT,
FN_GET_COMMCODE_NAME('MBR_GRAD_CND',FMG.MBR_GRAD_CND_CD)MBR_GRAD_CND_CD_NM,
FMG.MBR_GRAD_ICON_COURS
FROM GC_MEMBER_GRAD FMG
WHERE 1=1
AND FMG.SOPMAL_CD = #{sopmalCd}
AND FMG.USE_AT = 'Y'
]]>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(searchGradNm)">
AND FMG.MBR_GRAD_NM LIKE CONCAT('%',#{searchGradNm},'%')
</if>
<![CDATA[
ORDER BY FMG.MBR_GRAD_ORDR ASC
)TB
WHERE (@ROWNUM:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!-- 회원 등급 상세 조회 -->
<select id = "selectBOGradBnefRegistInqire"
parameterType="com.wb.domainserver.domain.gcone.setup.gradbnef.vo.BOGradbnefVO"
resultType="dataMap">
SELECT
FMG.MBR_GRAD_CND_CD,
FN_GET_COMMCODE_NAME('MBR_GRAD_CND',FMG.MBR_GRAD_CND_CD)MBR_GRAD_CND_CD_NM,
FMG.MBR_GRAD_INNB,
FMG.MBR_GRAD_NM,
FMG.MBR_GRAD_AMT,
FMG.SOPMAL_CD,
FMG.MLG_ACCML_UNIT_DV_CD ,
FMG.MLG_ACCML_AMT ,
FMG.MLG_MXMM_ACCML_AMT ,
FMG.MLG_VALID_MT_CNT
FROM
GC_MEMBER_GRAD FMG
WHERE
1 = 1
AND FMG.SOPMAL_CD = #{sopmalCd}
AND FMG.MBR_GRAD_INNB = #{mbrGradInnb}
</select>
<!-- 회원 등급 혜택 값 있을 시 수정 없으면 추가 -->
<update id="updateBOGradBnefUpdt"
parameterType = "com.wb.domainserver.domain.gcone.setup.gradbnef.vo.BOGradbnefVO">
<![CDATA[
UPDATE
GC_MEMBER_GRAD GMG , (SELECT MLG_VALID_PD FROM GC_SHOP WHERE SOPMAL_CD = #{sopmalCd}) AS GS
SET
GMG.MLG_ACCML_UNIT_DV_CD = #{mlgAccmlUnitDvCd},
GMG.MLG_ACCML_AMT = IFNULL(REPLACE(#{mlgAccmlAmt}, ',', ''), NULL),
GMG.MLG_MXMM_ACCML_AMT = IFNULL(REPLACE(#{mlgMxmmAccmlAmt}, ',', ''), NULL),
GMG.MLG_VALID_MT_CNT = GS.MLG_VALID_PD,
GMG.UPDUSR = #{updusr},
GMG.UPDT_DT = SYSDATE()
WHERE
GMG.MBR_GRAD_INNB = #{mbrGradInnb}
AND GMG.SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!--회원 등급 목록 조회 without pagination -->
<select id = "selectBOMbrGradListInqireWithoutPaging"
parameterType="com.wb.domainserver.domain.gcone.setup.gradbnef.vo.BOGradbnefVO"
resultType="dataMap">
<![CDATA[
SELECT
FMG.MBR_GRAD_INNB ,
FMG.MBR_GRAD_GROUP_INNB,
(
SELECT
SOPMAL_NM
FROM GC_SHOP
WHERE SOPMAL_CD = #{sopmalCd}
) AS SOPMAL_NM,
FMG.MBR_GRAD_NM,
FMG.MLG_ACCML_UNIT_DV_CD ,
FN_GET_COMMCODE_NAME('MLG_ACCML_UNIT_DV',FMG.MLG_ACCML_UNIT_DV_CD)MLG_ACCML_UNIT_DV_CD_NM,
FORMAT(ROUND(FMG.MLG_ACCML_AMT), 0) AS MLG_ACCML_AMT,
FORMAT(ROUND(FMG.MLG_MXMM_ACCML_AMT), 0) AS MLG_MXMM_ACCML_AMT,
FMG.MLG_VALID_MT_CNT,
FORMAT(ROUND(FMG.MBR_GRAD_AMT), 0) AS MBR_GRAD_AMT,
FMG.MBR_GRAD_CND_CD ,
FN_GET_COMMCODE_NAME('MBR_GRAD_CND',FMG.MBR_GRAD_CND_CD)MBR_GRAD_CND_CD_NM,
FMG.SOPMAL_CD,
FMG.REGUSR,
FMG.REGIST_DT,
FMG.UPDUSR,
FMG.UPDT_DT,
FMG.MBR_GRAD_ICON_COURS,
FN_GET_COMMCODE_NAME('MBR_GRAD_CND',FMG.MBR_GRAD_CND_CD)MBR_GRAD_CND_CD_NM
FROM GC_MEMBER_GRAD FMG
WHERE FMG.SOPMAL_CD = #{sopmalCd}
AND FMG.USE_AT = 'Y'
ORDER BY FMG.MBR_GRAD_ORDR ASC
]]>
</select >
<!-- 쇼핑몰별 회원 등급 매핑 수정 -->
<update id="updateBOMbrGradMapingUpdt"
parameterType="com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrVO">
UPDATE GC_MEMBER_GRAD_MAPPING
SET
MBR_GRAD_INNB = #{mbrGradInnb},
GRAD_MDAT_DT = SYSDATE()
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
</update>
<!-- 회원 등급 수정시 이전 회원 등급명, 이후 회원 등급 명 조회 -->
<select id="selectMbrChngGradNm" parameterType="com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrVO">
SELECT
(SELECT
MBR_GRAD_NM
FROM
GC_MEMBER_GRAD
WHERE
MBR_GRAD_INNB = #{beforeMbrGradInnb})AS BEFORE_GRAD_NM,
(SELECT
MBR_GRAD_NM
FROM
GC_MEMBER_GRAD
WHERE
MBR_GRAD_INNB = #{mbrGradInnb})AS AFTER_GRAD_NM
FROM DUAL
</select>
</mapper>

View File

@@ -0,0 +1 @@
<?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.wb.domainserver.domain.gcone.setup.menu.mapper.BOMenuMapper"></mapper>

View File

@@ -0,0 +1,16 @@
<?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.wb.domainserver.domain.gcone.setup.mngr.mapper.BOMngrInfoMapper">
<update id="updateBOMngrInfoUpdt" parameterType="com.wb.domainserver.domain.gcone.setup.mngr.vo.BOMngrInfoVO">
UPDATE GC_MANAGER
SET MNGR_NM = #{mngrNm, jdbcType=VARCHAR}
, EMAIL = HEX(AES_ENCRYPT(#{email, jdbcType=VARCHAR}, #{secretKey}))
, TELNB = HEX(AES_ENCRYPT(#{telnb, jdbcType=VARCHAR}, #{secretKey}))
, MBTLNB = HEX(AES_ENCRYPT(#{mbtlnb, jdbcType=VARCHAR}, #{secretKey}))
, UPDUSR = #{updusr, jdbcType=VARCHAR}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(pwChngAt, 'Y')">
, PASSWORD = #{password}
</if>
WHERE MNGR_INNB = #{mngrInnb}
</update>
</mapper>

View File

@@ -0,0 +1,97 @@
<?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.wb.domainserver.domain.gcone.setup.nbkk.mapper.BONbkkMapper">
<!--무통장 입금 계좌 조회-->
<select id = "selectBOAcntSetup" parameterType="com.wb.domainserver.domain.gcone.setup.nbkk.vo.BOSetupNbkkVO" resultType="dataMap" >
SELECT
SOPMAL_CD,
ACNT_DV_CD,
ACNT_DTL_DV_CD,
BANK_CD,
FN_GET_COMMCODE_NAME("BANK_NM_DV",BANK_CD) AS BANK_NM,
DPSTR_NM,
ACNTNB,
USE_AT
FROM GC_ACNT_SETUP
WHERE ACNT_DV_CD ='01'
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sopmalCd)">
AND SOPMAL_CD = #{sopmalCd}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(useAt)">
AND USE_AT = 'Y'
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(acntDtlDvCd)">
AND ACNT_DTL_DV_CD = #{acntDtlDvCd}
</if>
</select>
<!--환불 계좌 조회-->
<select id = "selectBORefundAcntSetup" parameterType="com.wb.domainserver.domain.gcone.setup.nbkk.vo.BOSetupNbkkVO" resultType="dataMap" >
SELECT SOPMAL_CD,
ACNT_DV_CD,
ACNT_DTL_DV_CD,
BANK_CD,
DPSTR_NM,
ACNTNB,
USE_AT
FROM GC_ACNT_SETUP
WHERE ACNT_DV_CD = '02'
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sopmalCd)">
AND SOPMAL_CD = #{sopmalCd}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(useAt)">
AND USE_AT = 'Y'
</if>
</select>
<!--계좌 삭제-->
<delete id = "deleteBOSopmalAcnt" parameterType="com.wb.domainserver.domain.gcone.setup.nbkk.vo.NbkkInfoVO" >
DELETE FROM GC_ACNT_SETUP GAS WHERE GAS.SOPMAL_CD = #{sopmalCd}
</delete>
<!--계좌 등록-->
<insert id = "insertBOSopmalAcnt" parameterType="com.wb.domainserver.domain.gcone.setup.nbkk.vo.NbkkInfoVO">
<selectKey order="BEFORE" keyProperty="acntSetupInnb" resultType="BigInteger">
SELECT IFNULL(MAX(ACNT_SETUP_INNB), 0) + 1
FROM GC_ACNT_SETUP
</selectKey>
INSERT INTO GC_ACNT_SETUP
(
ACNT_SETUP_INNB,
SOPMAL_CD,
ACNT_DV_CD,
ACNT_DTL_DV_CD,
BANK_CD,
DPSTR_NM,
ACNTNB,
USE_AT,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
)
VALUES
(
#{acntSetupInnb},
#{sopmalCd},
#{acntDvCd},
#{acntDtlDvCd},
#{bankCd},
#{dpstrNm},
#{acntnb},
#{useAt},
#{regusr},
NOW(),
#{updusr},
NOW()
)
</insert>
<!-- 쇼핑몰 무통장자동입금 사용 여부 반환 -->
<select id = "selectBOAcntUseAtInqire" parameterType="com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrdrSrchVO" resultType="Integer" >
SELECT
COUNT(1)
FROM GC_ACNT_SETUP
WHERE ACNT_DV_CD ='01'
AND SOPMAL_CD = #{sopmalCd}
AND USE_AT = 'Y'
</select>
</mapper>

View File

@@ -0,0 +1,74 @@
<?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.wb.domainserver.domain.gcone.setup.ordrmngr.mapper.BOOrdrMngrMapper">
<!--주문 설정 조회-->
<select id="selectBOOrdrSetup">
SELECT GS.MLG_PYMNT_AT,
GS.MLG_PYMNT_DV_CD,
GS.MLG_PYMNT_RT,
GS.MLG_MXMM_PYMNT_AMT,
GS.MLG_MXMM_PYMNT_AMT_AT,
GS.MLG_VALID_PD,
GS.MLG_VALID_PD_AT,
GS.MULTI_DLVY_AT,
GS.FDRM_DLVY_AT,
GS.GIFT_DLVY_AT,
GS.CASH_AT,
GS.GIFT_DLVY_ATMC_CANCL_PD,
GS.PC_DOMN_ADRES,
GS.MBL_DOMN_ADRES,
GS.SOPMAL_NM,
GS.SOPMAL_CD,
GS.FDRM_DLVY_AT,
GS.GIFT_DLVY_AT,
GS.FVICON_COURS,
GS.CSC_TELNB_ORDR_POSBL_AT,
GS.CSC_WKDAY_WORK_TME,
GS.CSC_LUNCH_TME,
GS.CSC_RSTDE,
GS.CSC_TELNB,
GS.META_DC,
GS.META_KWRD,
GS.META_SJ,
GS.META_GOODS_AT,
GS.META_GOODS_DC,
GS.META_GOODS_KWRD,
GS.META_GOODS_SJ,
GS.SOPMAL_TY_CD
FROM GC_SHOP GS
WHERE SOPMAL_CD = #{sopmalCd}
</select>
<!--주문 설정 수정-->
<update id="updateBOOrdrSetup">
UPDATE GC_SHOP
SET MLG_PYMNT_AT = #{mlgPymntAt},
MLG_PYMNT_DV_CD = #{mlgPymntDvCd},
MLG_PYMNT_RT = REPLACE(#{mlgPymntRt},',',''),
MLG_MXMM_PYMNT_AMT = REPLACE(#{mlgMxmmPymntAmt},',',''),
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(mlgMxmmPymntAmtAt)">
MLG_MXMM_PYMNT_AMT_AT = #{mlgMxmmPymntAmtAt},
</when>
<otherwise>
MLG_MXMM_PYMNT_AMT_AT = 'Y',
</otherwise>
</choose>
MLG_VALID_PD = #{mlgValidPd},
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(mlgValidPdAt)">
MLG_VALID_PD_AT = #{mlgValidPdAt},
</when>
<otherwise>
MLG_VALID_PD_AT = 'Y',
</otherwise>
</choose>
CASH_AT = IFNULL(#{cashAt},'N'),
MULTI_DLVY_AT = IFNULL(#{multiDlvyAt},'N'),
FDRM_DLVY_AT = IFNULL(#{fdrmDlvyAt},'N'),
GIFT_DLVY_AT = IFNULL(#{giftDlvyAt},'N'),
GIFT_DLVY_ATMC_CANCL_PD = #{giftDlvyAtmcCanclPd}
WHERE SOPMAL_CD = #{sopmalCd}
</update>
</mapper>

View File

@@ -0,0 +1,232 @@
<?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.wb.domainserver.domain.gcone.setup.popup.mapper.BOPopupMapper">
<!-- 팝업 상세조회, 수정, 삭제 조건절-->
<sql id="selectBOPopupKeyWhere">
<![CDATA[
WHERE 1=1
AND POPUP_INNB = #{popupInnb}
AND SOPMAL_CD = #{sopmalCd}
]]>
</sql>
<!-- 팝업 등록 -->
<insert id="insertBOPopup"
parameterType="com.wb.domainserver.domain.gcone.setup.popup.vo.BOPopupVO">
<selectKey order="BEFORE" keyProperty="popupInnb" resultType="java.lang.Integer">
<![CDATA[
SELECT IFNULL(MAX(POPUP_INNB), 0)+1
FROM GC_DESIGN_POPUP
]]>
</selectKey>
INSERT INTO GC_DESIGN_POPUP (
POPUP_INNB
, SOPMAL_CD
, POPUP_NM
, POPUP_EXPSR_BGN_DT
, POPUP_EXPSR_END_DT
, CNNC_URL
, POPUP_MG_WTH
, POPUP_MG_VTC
, POPUP_LC_X
, POPUP_LC_Y
, EXPSR_AT
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(tmeSetup)">
, TME_SETUP
</if>
, USE_AT
, ORGINL_FIL_NM
, SYS_FIL_NM
, FIL_MG
, FIL_TY
, FIL_COURS
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
, MBL_POPUP_MG_WTH
, MBL_POPUP_MG_VTC
, MBL_POPUP_LC_X
, MBL_POPUP_LC_Y
, TME_SETUP_AT
)
VALUES (
#{popupInnb}
, #{sopmalCd}
, #{popupNm}
, #{popupExpsrBgnDt}
, #{popupExpsrEndDt}
, #{cnncUrl}
, #{popupMgWth}
, #{popupMgVtc}
, #{popupLcX}
, #{popupLcY}
, #{expsrAt}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(tmeSetup)">
, #{tmeSetup}
</if>
, 'Y'
, #{orginlFilNm}
, #{sysFilNm}
, #{filMg}
, #{filTy}
, #{filCours}
, #{regusr}
, SYSDATE()
, #{updusr}
, SYSDATE()
, #{mblPopupMgWth}
, #{mblPopupMgVtc}
, #{mblPopupLcX}
, #{mblPopupLcY}
, #{tmeSetupAt}
)
</insert>
<!-- 팝업 수정 -->
<update id="updateBOPopupDtl" parameterType="com.wb.domainserver.domain.gcone.setup.popup.vo.BOPopupVO">
UPDATE GC_DESIGN_POPUP
SET
POPUP_NM = #{popupNm}
, SOPMAL_CD = #{sopmalCd}
, POPUP_EXPSR_BGN_DT = #{popupExpsrBgnDt}
, POPUP_EXPSR_END_DT = #{popupExpsrEndDt}
, CNNC_URL = #{cnncUrl}
, POPUP_MG_WTH = #{popupMgWth}
, POPUP_MG_VTC = #{popupMgVtc}
, POPUP_LC_X = #{popupLcX}
, POPUP_LC_Y = #{popupLcY}
, EXPSR_AT = #{expsrAt}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(fileAddAt, 'Y')">
, ORGINL_FIL_NM = #{orginlFilNm}
, SYS_FIL_NM = #{sysFilNm}
, FIL_MG = #{filMg}
, FIL_TY = #{filTy}
, FIL_COURS = #{filCours}
</if>
, UPDUSR = #{updusr}
, UPDT_DT = SYSDATE()
, MBL_POPUP_MG_WTH = #{mblPopupMgWth}
, MBL_POPUP_MG_VTC = #{mblPopupMgVtc}
, MBL_POPUP_LC_X = #{mblPopupLcX}
, MBL_POPUP_LC_Y = #{mblPopupLcY}
, TME_SETUP_AT = #{tmeSetupAt}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(tmeSetupAt, 'Y')">
, TME_SETUP = #{tmeSetup}
</if>
<include refid="selectBOPopupKeyWhere"/>
</update>
<!-- 팝업 삭제 -->
<update id="deleteBOPopup" parameterType="com.wb.domainserver.domain.gcone.setup.popup.vo.BOPopupVO">
<![CDATA[
UPDATE GC_DESIGN_POPUP
SET USE_AT = 'N'
, UPDUSR = #{updusr}
, UPDT_DT = SYSDATE()
]]>
<include refid="selectBOPopupKeyWhere"/>
</update>
<!-- 팝업 건수 -->
<select id="selectBOPopupListCnt"
parameterType="com.wb.domainserver.domain.gcone.setup.popup.vo.BOPopupVO"
resultType="java.lang.Integer">
<![CDATA[
SELECT COUNT(1)
FROM GC_DESIGN_POPUP
WHERE 1=1
AND USE_AT = 'Y'
AND SOPMAL_CD = #{sopmalCd}
]]>
</select>
<!-- 팝업 목록 조회 -->
<select id="selectBOPopupList"
parameterType="com.wb.domainserver.domain.gcone.setup.popup.vo.BOPopupVO"
resultType="dataMap">
SELECT *
FROM (
SELECT TB.*
, CAST(@ROWNUM:=@ROWNUM + 1 AS UNSIGNED) AS RNUM
FROM (SELECT POPUP_INNB
, SOPMAL_CD
, POPUP_NM
, DATE_FORMAT(POPUP_EXPSR_BGN_DT, '%Y-%m-%d %H:%i:%s') AS POPUP_EXPSR_BGN_DT
, DATE_FORMAT(POPUP_EXPSR_END_DT, '%Y-%m-%d %H:%i:%s') AS POPUP_EXPSR_END_DT
, CNNC_URL
, POPUP_MG_WTH
, POPUP_MG_VTC
, POPUP_LC_X
, POPUP_LC_Y
, EXPSR_AT
, TME_SETUP
, USE_AT
, ORGINL_FIL_NM
, SYS_FIL_NM
, FIL_MG
, FIL_TY
, FIL_COURS
, REGUSR
, REGIST_DT
, DATE_FORMAT(REGIST_DT, '%Y-%m-%d') AS REGIST_DE
, UPDUSR
, UPDT_DT
, DATE_FORMAT(UPDT_DT, '%Y-%m-%d') AS UPDT_DE
FROM GC_DESIGN_POPUP
WHERE 1=1
AND USE_AT = 'Y'
AND SOPMAL_CD = #{sopmalCd}
ORDER BY REGIST_DT DESC
) TB
WHERE (@ROWNUM:=0)=0) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!-- 팝업 상세 조회 -->
<select id="selectBOPopupDtl"
parameterType="com.wb.domainserver.domain.gcone.setup.popup.vo.BOPopupVO"
resultType="dataMap">
<![CDATA[
SELECT POPUP_INNB
, POPUP_NM
, SOPMAL_CD
, POPUP_EXPSR_BGN_DT
, DATE_FORMAT(POPUP_EXPSR_BGN_DT, '%Y-%m-%d') AS POPUP_EXPSR_BGN_DT_YYYYMMDD
, DATE_FORMAT(POPUP_EXPSR_BGN_DT, '%H:%i') AS POPUP_EXPSR_BGN_DT_TIME
, POPUP_EXPSR_END_DT
, DATE_FORMAT(POPUP_EXPSR_END_DT, '%Y-%m-%d') AS POPUP_EXPSR_END_DT_YYYYMMDD
, DATE_FORMAT(POPUP_EXPSR_END_DT, '%H:%i') AS POPUP_EXPSR_END_DT_TIME
, CNNC_URL
, POPUP_MG_WTH
, POPUP_MG_VTC
, POPUP_LC_X
, POPUP_LC_Y
, EXPSR_AT
, TME_SETUP
, DATE_FORMAT(TME_SETUP, '%Y-%m-%d') AS TME_SETUP_YYYYMMDD
, DATE_FORMAT(TME_SETUP, '%H:%i') AS TME_SETUP_TIME
, USE_AT
, ORGINL_FIL_NM
, SYS_FIL_NM
, FIL_MG
, FIL_TY
, FIL_COURS
, REGUSR
, REGIST_DT
, DATE_FORMAT(REGIST_DT, '%Y-%m-%d') AS REGIST_DE
, UPDUSR
, UPDT_DT
, DATE_FORMAT(UPDT_DT, '%Y-%m-%d') AS UPDT_DE
, MBL_POPUP_MG_WTH
, MBL_POPUP_MG_VTC
, MBL_POPUP_LC_X
, MBL_POPUP_LC_Y
, TME_SETUP_AT
FROM GC_DESIGN_POPUP
]]>
<include refid="selectBOPopupKeyWhere"/>
</select>
</mapper>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,22 @@
<?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.wb.domainserver.domain.gcone.sms.mapper.BOSmsBillingMapper">
<select id="selectStoreList">
SELECT CAST(STR_INNB AS CHAR) as STR_INNB, TENTCPN_NM, TENT_STTUS,
CASE WHEN STR_OPER_DV = '01' THEN '[ 가맹 ]'
WHEN STR_OPER_DV = '02' THEN '[ 직영 ]'
WHEN STR_OPER_DV = '03' THEN '[ 유통 ]'
ELSE ''
END AS etc1
FROM GC_STORE
WHERE 1=1
<if test="storeInnb != null and storeInnb != ''">
AND STR_INNB = #{storeInnb}
</if>
</select>
</mapper>

View File

@@ -0,0 +1,308 @@
<?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.wb.domainserver.domain.gcone.stats.adTraceAnals.mapper.BOAdTraceAnalsMapper">
<!--일별 추적코드 건수-->
<select id="selectBODailyAdTraceCdTableCntInqire"
parameterType = "com.wb.domainserver.domain.gcone.stats.adTraceAnals.vo.BOAdTraceAnalsVO"
resultType="java.lang.Integer">
<![CDATA[
SELECT
COUNT(*)
FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY DT ASC) AS RNUM,
AD_TRACE_CD AS AD_TRACE_CD, DT,
COALESCE(ACCESS_USER_CNT, 0) AS ACCESS_USER_CNT,
COALESCE(ORDR_CNT, 0) AS ORDR_CNT,
COALESCE(RL_SETLE_AMT, 0) AS RL_SETLE_AMT,
IF(ACCESS_USER_CNT = 0, 0, ROUND(COALESCE(ORDR_CNT / ACCESS_USER_CNT * 100, 0))) AS RL_SETLE_AMT_RT,
IF(ACCESS_USER_CNT = 0, 0, ROUND(COALESCE(RL_SETLE_AMT / ACCESS_USER_CNT, 0), 2)) AS ACCESS_USER_RL_SETLE_AMT
FROM (
SELECT
A.AD_TRACE_CD, A.REGIST_DE AS DT,
COUNT(DISTINCT A.AGENT_ID) AS ACCESS_USER_CNT,
COUNT(DISTINCT gos.ORRE_INNB) AS ORDR_CNT,
SUM(gos.RL_SETLE_AMT) AS RL_SETLE_AMT
FROM (
SELECT REGIST_DE, AD_TRACE_CD, SOPMAL_CD ,AGENT_ID FROM GC_AD_TRACE_LOG
GROUP BY REGIST_DE, AD_TRACE_CD, SOPMAL_CD, AGENT_ID
) A
LEFT JOIN GC_ORRE_STAT gos
ON (A.SOPMAL_CD = gos.SOPMAL_CD
AND A.AGENT_ID = gos.AGENT_ID
AND A.REGIST_DE = DATE(gos.SETLE_COMPT_DT)
AND gos.SOPMAL_CD = 'DT'
AND gos.SETLE_COMPT_DT between CONCAT(#{srchStrtSndngDt},' 00:00:00') AND CONCAT(#{srchEndSndngDt},' 23:59:59')
AND gos.ORDR_STTUS_CD BETWEEN 25 AND 75
AND gos.ORRE_DV_CD = '01')
WHERE 1=1
AND A.SOPMAL_CD = #{sopmalCd}
AND A.REGIST_DE between #{srchStrtSndngDt} AND #{srchEndSndngDt}
GROUP BY DT, AD_TRACE_CD
) A2
ORDER BY ${ordrFinal}
) TB
]]>
</select>
<!--일별 추적코드 조회-->
<select id="selectBODailyAdTraceCdTableInqire"
parameterType = "com.wb.domainserver.domain.gcone.stats.adTraceAnals.vo.BOAdTraceAnalsVO"
resultType="DataMap">
<![CDATA[
SELECT
ROW_NUMBER() OVER (ORDER BY DT ASC) AS RNUM,
AD_TRACE_CD AS AD_TRACE_CD, DT,
COALESCE(ACCESS_USER_CNT, 0) AS ACCESS_USER_CNT,
COALESCE(ORDR_CNT, 0) AS ORDR_CNT,
COALESCE(RL_SETLE_AMT, 0) AS RL_SETLE_AMT,
IF(ACCESS_USER_CNT = 0, 0, ROUND(COALESCE(ORDR_CNT / ACCESS_USER_CNT * 100, 0))) AS RL_SETLE_AMT_RT,
IF(ACCESS_USER_CNT = 0, 0, ROUND(COALESCE(RL_SETLE_AMT / ACCESS_USER_CNT, 0), 2)) AS ACCESS_USER_RL_SETLE_AMT
FROM (
SELECT
A.AD_TRACE_CD, A.REGIST_DE AS DT,
COUNT(DISTINCT A.AGENT_ID) AS ACCESS_USER_CNT,
COUNT(DISTINCT gos.ORRE_INNB) AS ORDR_CNT,
SUM(gos.RL_SETLE_AMT) AS RL_SETLE_AMT
FROM (
SELECT REGIST_DE, AD_TRACE_CD, SOPMAL_CD ,AGENT_ID FROM GC_AD_TRACE_LOG
GROUP BY REGIST_DE, AD_TRACE_CD, SOPMAL_CD, AGENT_ID
) A
LEFT JOIN GC_ORRE_STAT gos
ON (A.SOPMAL_CD = gos.SOPMAL_CD
AND A.AGENT_ID = gos.AGENT_ID
AND A.REGIST_DE = DATE(gos.SETLE_COMPT_DT)
AND gos.SOPMAL_CD = 'DT'
AND gos.SETLE_COMPT_DT between CONCAT(#{srchStrtSndngDt},' 00:00:00') AND CONCAT(#{srchEndSndngDt},' 23:59:59')
AND gos.ORDR_STTUS_CD BETWEEN 25 AND 75
AND gos.ORRE_DV_CD = '01')
WHERE 1=1
AND A.SOPMAL_CD = #{sopmalCd}
AND A.REGIST_DE between #{srchStrtSndngDt} AND #{srchEndSndngDt}
GROUP BY DT, AD_TRACE_CD
) A2
ORDER BY ${ordrFinal}
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!-- 주별 추적코드 조회 건수 -->
<select id="selectBOWeeklyAdTraceCdTableCntInqire"
parameterType = "com.wb.domainserver.domain.gcone.stats.adTraceAnals.vo.BOAdTraceAnalsVO"
resultType="java.lang.Integer">
<![CDATA[
SELECT
COUNT(*)
FROM (
SELECT
AD_TRACE_CD AS AD_TRACE_CD,
DT,
COALESCE( ACCESS_USER_CNT, 0) AS ACCESS_USER_CNT,
COALESCE( ORDR_CNT, 0) AS ORDR_CNT,
COALESCE( RL_SETLE_AMT, 0) AS RL_SETLE_AMT,
IF( ACCESS_USER_CNT = 0 , 0, ROUND( COALESCE(ORDR_CNT / ACCESS_USER_CNT * 100, 0) )) AS RL_SETLE_AMT_RT,
IF(ACCESS_USER_CNT = 0, 0, ROUND(COALESCE(RL_SETLE_AMT / ACCESS_USER_CNT, 0), 2)) AS ACCESS_USER_RL_SETLE_AMT
FROM (
SELECT
AD_TRACE_CD,
DAY_T.DT,
SUM(ACCESS_USER_CNT) AS ACCESS_USER_CNT,
SUM(ORDR_CNT) AS ORDR_CNT,
SUM(RL_SETLE_AMT) AS RL_SETLE_AMT
FROM (
WITH RECURSIVE DateSeries AS (
SELECT #{srchStrtSndngDt} AS DT
UNION ALL
SELECT DT + INTERVAL 1 DAY
FROM DateSeries
WHERE DT < #{srchEndSndngDt}
)
SELECT DATE_FORMAT(DS.DT, '%Y-%m-%d') AS DT
FROM DateSeries DS
) DAY_T
INNER JOIN (
SELECT A.AD_TRACE_CD
, A.REGIST_DE AS DT
, COUNT(DISTINCT A.AGENT_ID ) AS ACCESS_USER_CNT
, COUNT(DISTINCT gos.ORRE_INNB) AS ORDR_CNT
, SUM(gos.RL_SETLE_AMT) AS RL_SETLE_AMT
FROM GC_AD_TRACE_LOG A
LEFT JOIN GC_ORRE_STAT gos
ON (A.SOPMAL_CD = gos.SOPMAL_CD AND A.AGENT_ID = gos.AGENT_ID and gos.SOPMAL_CD = #{sopmalCd} AND DATE(gos.SETLE_COMPT_DT) BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} AND gos.ORDR_STTUS_CD BETWEEN 25 AND 75 AND gos.ORRE_DV_CD = '01')
WHERE 1=1
AND A.SOPMAL_CD = #{sopmalCd}
AND A.REGIST_DE BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt}
GROUP BY DT,AD_TRACE_CD
) X
ON DAY_T.DT = X.DT
GROUP BY DT, AD_TRACE_CD
)A2
ORDER BY ${ordrFinal}
) TB
]]>
</select>
<!--주별 추적코드 조회-->
<select id="selectBOWeeklyAdTraceCdTableInqire"
parameterType = "com.wb.domainserver.domain.gcone.stats.adTraceAnals.vo.BOAdTraceAnalsVO"
resultType="DataMap">
<![CDATA[
SELECT
*
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, TB.*
FROM (
SELECT
AD_TRACE_CD AS AD_TRACE_CD,
DT,
COALESCE( ACCESS_USER_CNT, 0) AS ACCESS_USER_CNT,
COALESCE( ORDR_CNT, 0) AS ORDR_CNT,
COALESCE( RL_SETLE_AMT, 0) AS RL_SETLE_AMT,
IF( ACCESS_USER_CNT = 0 , 0, ROUND( COALESCE(ORDR_CNT / ACCESS_USER_CNT * 100, 0) )) AS RL_SETLE_AMT_RT,
IF(ACCESS_USER_CNT = 0, 0, ROUND(COALESCE(RL_SETLE_AMT / ACCESS_USER_CNT, 0), 2)) AS ACCESS_USER_RL_SETLE_AMT
FROM (
SELECT
AD_TRACE_CD,
DAY_T.DT,
SUM(ACCESS_USER_CNT) AS ACCESS_USER_CNT,
SUM(ORDR_CNT) AS ORDR_CNT,
SUM(RL_SETLE_AMT) AS RL_SETLE_AMT
FROM (
WITH RECURSIVE DateSeries AS (
SELECT #{srchStrtSndngDt} AS DT
UNION ALL
SELECT DT + INTERVAL 1 DAY
FROM DateSeries
WHERE DT < #{srchEndSndngDt}
)
SELECT DATE_FORMAT(DS.DT, '%Y-%m-%d') AS DT
FROM DateSeries DS
) DAY_T
INNER JOIN (
SELECT A.AD_TRACE_CD
, A.REGIST_DE AS DT
, COUNT(DISTINCT A.AGENT_ID ) AS ACCESS_USER_CNT
, COUNT(DISTINCT gos.ORRE_INNB) AS ORDR_CNT
, SUM(gos.RL_SETLE_AMT) AS RL_SETLE_AMT
FROM GC_AD_TRACE_LOG A
LEFT JOIN GC_ORRE_STAT gos
ON (A.SOPMAL_CD = gos.SOPMAL_CD AND A.AGENT_ID = gos.AGENT_ID AND DATE(gos.SETLE_COMPT_DT) BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} AND gos.ORDR_STTUS_CD BETWEEN 25 AND 75 AND gos.ORRE_DV_CD = '01')
WHERE 1=1
AND A.SOPMAL_CD = #{sopmalCd}
AND A.REGIST_DE BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt}
GROUP BY DT,AD_TRACE_CD
) X
ON DAY_T.DT = X.DT
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchAdTraceCd)">
AND X.AD_TRACE_CD = #{srchAdTraceCd}
</if>
<![CDATA[
GROUP BY DT, AD_TRACE_CD
)A2
ORDER BY ${ordrFinal}
) TB
WHERE (@rownum:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!--일별 추적코드 건수 (상품)-->
<select id="selectBODailyAdTraceCdGoodsTableCntInqire"
parameterType = "com.wb.domainserver.domain.gcone.stats.adTraceAnals.vo.BOAdTraceAnalsVO"
resultType="java.lang.Integer">
<![CDATA[
SELECT
count(*)
FROM (
SELECT
A.AD_TRACE_CD,
A.REGIST_DE AS DT,
gogs.GOODS_INNB,
gogs.GOODS_NM,
COUNT(DISTINCT gogs.ORDR_INNB) AS ORDR_CNT,
SUM(gogs.ORRE_AMT) AS RL_SETLE_AMT
FROM (
SELECT REGIST_DE, AD_TRACE_CD, SOPMAL_CD ,AGENT_ID FROM GC_AD_TRACE_LOG
GROUP BY REGIST_DE, AD_TRACE_CD, SOPMAL_CD, AGENT_ID
) A
LEFT JOIN GC_ORRE_STAT gos
ON A.SOPMAL_CD = gos.SOPMAL_CD
AND A.AGENT_ID = gos.AGENT_ID
LEFT JOIN GC_ORRE_GOPTN_STAT gogs
ON gos.SOPMAL_CD = gogs.SOPMAL_CD
AND gos.ORRE_INNB = gogs.ORDR_INNB
AND gogs.SOPMAL_CD = #{sopmalCd}
AND gogs.SETLE_COMPT_DT BETWEEN CONCAT(#{srchStrtSndngDt},' 00:00:00') AND CONCAT(#{srchEndSndngDt},' 23:59:59')
AND gogs.ORDR_STTUS_CD BETWEEN 25 AND 75
AND gogs.ORRE_DV_CD = '01'
WHERE A.SOPMAL_CD = #{sopmalCd}
AND A.REGIST_DE BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt}
GROUP BY DT, AD_TRACE_CD, GOODS_INNB, GOODS_NM
) t
]]>
</select>
<!--일별 추적코드 조회(상품)-->
<select id="selectBODailyAdTraceCdGoodsTableInqire"
parameterType = "com.wb.domainserver.domain.gcone.stats.adTraceAnals.vo.BOAdTraceAnalsVO"
resultType="DataMap">
<![CDATA[
SELECT
ROW_NUMBER() OVER (ORDER BY DT ASC) AS RNUM,
AD_TRACE_CD,
DT,
GOODS_INNB,
GOODS_NM,
COALESCE(ORDR_CNT,0) AS ORDR_CNT,
COALESCE(RL_SETLE_AMT,0) AS RL_SETLE_AMT
FROM (
SELECT
A.AD_TRACE_CD,
A.REGIST_DE AS DT,
gogs.GOODS_INNB,
gogs.GOODS_NM,
COUNT(DISTINCT gogs.ORDR_INNB) AS ORDR_CNT,
SUM(gogs.ORRE_AMT) AS RL_SETLE_AMT
FROM (
SELECT REGIST_DE, AD_TRACE_CD, SOPMAL_CD ,AGENT_ID FROM GC_AD_TRACE_LOG
GROUP BY REGIST_DE, AD_TRACE_CD, SOPMAL_CD, AGENT_ID
) A
LEFT JOIN GC_ORRE_STAT gos
ON A.SOPMAL_CD = gos.SOPMAL_CD
AND A.AGENT_ID = gos.AGENT_ID
LEFT JOIN GC_ORRE_GOPTN_STAT gogs
ON gos.SOPMAL_CD = gogs.SOPMAL_CD
AND gos.ORRE_INNB = gogs.ORDR_INNB
AND gogs.SOPMAL_CD = #{sopmalCd}
AND gogs.SETLE_COMPT_DT BETWEEN CONCAT(#{srchStrtSndngDt},' 00:00:00') AND CONCAT(#{srchEndSndngDt},' 23:59:59')
AND gogs.ORDR_STTUS_CD BETWEEN 25 AND 75
AND gogs.ORRE_DV_CD = '01'
WHERE A.SOPMAL_CD = #{sopmalCd}
AND A.REGIST_DE BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt}
GROUP BY DT, AD_TRACE_CD, GOODS_INNB, GOODS_NM
) t
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<select id="selectBOMngrAdTraceCdList">
<![CDATA[
SELECT AD_TRACE_CD
FROM GC_AD_TRACE_LOG
WHERE SOPMAL_CD = #{sopmalCd}
GROUP BY AD_TRACE_CD
]]>
</select>
</mapper>

View File

@@ -0,0 +1,157 @@
<?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.wb.domainserver.domain.gcone.stats.adtrace.mapper.BOAdTraceMapper">
<!--광고추적 목록 조회 개수-->
<select id="selectBOAdTraceCount"
parameterType="com.wb.domainserver.domain.gcone.stats.adtrace.vo.BOAdTraceVO" resultType="java.lang.Integer">
SELECT
COUNT(*)
FROM
GC_AD_TRACE
WHERE 1=1
AND SOPMAL_CD = #{sopmalCd}
<include refid="where"/>
</select>
<!--광고추적 목록 조회-->
<select id="selectBOAdTraceList" parameterType="com.wb.domainserver.domain.gcone.stats.adtrace.vo.BOAdTraceVO" resultType="dataMap">
SELECT *
FROM (
SELECT TB.*
, CAST(@ROWNUM:=@ROWNUM + 1 AS UNSIGNED) AS RNUM
FROM (
SELECT
AD_TRACE_INNB
, SOPMAL_CD
, AD_TRACE_NM
, AD_MEDIA_DV_CD
, AD_MEDIA_NM
, CMPGN_TY
, CMPGN_NM
, AD_GROUP_NM
, MATR_NM
, LANDING_URL
, RM
, REGIST_DT
, UPDT_DT
FROM
GC_AD_TRACE
WHERE 1=1
AND SOPMAL_CD = #{sopmalCd}
<include refid="where"/>
ORDER BY REGIST_DT DESC
) TB
WHERE (@ROWNUM:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!--광고추적 검색조건-->
<sql id="where">
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStr)">
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchTy, 'adTraceNm')">
AND AD_TRACE_NM LIKE CONCAT('%',#{srchStr}, '%')
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchTy, 'adMediaNm')">
AND AD_MEDIA_NM LIKE CONCAT('%',#{srchStr}, '%')
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchTy, 'cmpgnTy')">
AND CMPGN_TY = #{srchStr}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchTy, 'cmpgnNm')">
AND CMPGN_NM LIKE CONCAT('%',#{srchStr}, '%')
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchTy, 'adGroupNm')">
AND AD_GROUP_NM LIKE CONCAT('%',#{srchStr}, '%')
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchTy, 'matrNm')">
AND MATR_NM LIKE CONCAT('%',#{srchStr}, '%')
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchTy, 'rm')">
AND RM LIKE CONCAT('%',#{srchStr}, '%')
</if>
</if>
</sql>
<!--광고추적 등록-->
<insert id="insertBOAdTrace" parameterType="com.wb.domainserver.domain.gcone.stats.adtrace.vo.BOAdTraceVO">
<selectKey order="BEFORE" keyProperty="adTraceInnb" resultType="java.lang.String">
<![CDATA[
SELECT IFNULL(MAX(AD_TRACE_INNB), 0)+1
FROM GC_AD_TRACE
]]>
</selectKey>
INSERT INTO GC_AD_TRACE
(
AD_TRACE_INNB,
SOPMAL_CD,
AD_TRACE_NM,
AD_MEDIA_DV_CD,
AD_MEDIA_NM,
CMPGN_TY,
CMPGN_NM,
AD_GROUP_NM,
MATR_NM,
LANDING_URL,
RM,
REGUSR,
REGIST_DT
)
VALUES(
#{adTraceInnb},
#{sopmalCd},
#{adTraceNm},
#{adMediaDvCd},
#{adMediaNm},
#{cmpgnTy},
#{cmpgnNm},
#{adGroupNm},
#{matrNm},
#{landingUrl},
#{rm},
#{regusr},
SYSDATE()
)
</insert>
<!--광고추적 상세 조회-->
<select id="selectBOAdTraceDtlForm" parameterType="com.wb.domainserver.domain.gcone.stats.adtrace.vo.BOAdTraceVO" resultType="dataMap">
SELECT
AD_TRACE_INNB
, SOPMAL_CD
, AD_TRACE_NM
, AD_MEDIA_DV_CD
, AD_MEDIA_NM
, CMPGN_TY
, CMPGN_NM
, AD_GROUP_NM
, MATR_NM
, LANDING_URL
, RM
FROM
GC_AD_TRACE
WHERE 1=1
AND SOPMAL_CD = #{sopmalCd}
AND AD_TRACE_INNB = #{adTraceInnb}
</select>
<!--광고추적 수정-->
<update id="updateBOAdTraceDtl" parameterType="com.wb.domainserver.domain.gcone.stats.adtrace.vo.BOAdTraceVO">
UPDATE GC_AD_TRACE
SET
AD_TRACE_NM = #{adTraceNm},
AD_MEDIA_DV_CD = #{adMediaDvCd},
AD_MEDIA_NM = #{adMediaNm},
CMPGN_TY = #{cmpgnTy},
CMPGN_NM = #{cmpgnNm},
AD_GROUP_NM = #{adGroupNm},
MATR_NM = #{matrNm},
LANDING_URL = #{landingUrl},
RM = #{rm},
UPDUSR = #{updusr},
UPDT_DT = SYSDATE()
WHERE 1=1
AND SOPMAL_CD = #{sopmalCd}
AND AD_TRACE_INNB = #{adTraceInnb}
</update>
</mapper>

View File

@@ -0,0 +1,936 @@
<?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.wb.domainserver.domain.gcone.stats.marktAnals.mapper.BOMarktAnalsMapper">
<!--
어제 데이터 조회
# 일별 유입수
-->
<select id="selectBOMngrMainDalyInflowCntInqire"
parameterType = "DataMap"
resultType="DataMap">
<![CDATA[
SELECT
COUNT(DISTINCT AGENT_ID ) AS ACCESS_USER_CNT
FROM
GC_ACCESS_STAT A
WHERE 1 = 1
AND A.SOPMAL_CD = #{sopmalCd}
AND DATE(A.BGN_DT) = CURDATE() - INTERVAL 1 DAY
]]>
</select>
<!--
#21 일별 시간대별 유입수와 결제수
-->
<select id="selectBOHourlySetleCntInflowCntInqire"
parameterType = "DataMap"
resultType="DataMap">
<![CDATA[
WITH RECURSIVE Hours AS (
SELECT 1 AS HR
UNION ALL
SELECT HR + 1
FROM Hours
WHERE HR < 24
)
SELECT
CONCAT( LPAD(H.HR, 2, '0'), '시') AS DT,
COALESCE(SUM(A.ACCESS_USER_CNT), 0) AS ACCESS_USER_CNT,
COALESCE(SUM(O.ORDR_CNT), 0) AS ORDR_CNT
FROM Hours H
LEFT JOIN (
SELECT
DATE_FORMAT(BGN_DT, '%H') AS HR,
COUNT(DISTINCT AGENT_ID) AS ACCESS_USER_CNT
FROM GC_ACCESS_STAT A
WHERE A.SOPMAL_CD = #{sopmalCd}
AND A.BGN_DT BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} ' 23:59:59'
GROUP BY HR
) A ON A.HR = H.HR
LEFT JOIN (
SELECT
DATE_FORMAT(SETLE_COMPT_DT, '%H') AS ORD_HR,
SUM(CASE WHEN ORRE_DV_CD = '01' and ORDR_STTUS_CD between '25' and '75' THEN 1 ELSE NULL END) AS ORDR_CNT
FROM GC_ORRE_STAT O
WHERE O.SOPMAL_CD = #{sopmalCd}
AND O.SETLE_COMPT_DT BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} ' 23:59:59'
AND O.ORDR_STTUS_CD between '25' and '85'
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrEnvrnCds)">
AND O.SLE_ENVRN_CD IN
<foreach collection="srchOrdrEnvrnCds" item="srchOrdrEnvrnCd" open="(" close=")" separator=",">
#{srchOrdrEnvrnCd}
</foreach>
</if>
<![CDATA[
GROUP BY ORD_HR
) O ON O.ORD_HR = H.HR
GROUP BY H.HR
ORDER BY H.HR ASC
]]>
</select>
<!--
# 통계 > 일별 유입수 및 결제수
-->
<select id="selectBODailyChartSetleCntInflowCntInqire"
parameterType = "DataMap"
resultType="DataMap">
<![CDATA[
WITH RECURSIVE DateSeries AS (
SELECT #{srchStrtSndngDt} AS DT
UNION ALL
SELECT DATE_ADD(DT, INTERVAL 1 DAY)
FROM DateSeries
WHERE DT < date_sub( #{srchEndSndngDt}, interval 1 day)
)
SELECT
DATE_FORMAT(DS.DT, '%Y%m%d') AS DT,
COALESCE(SUM(X.ACCESS_USER_CNT), 0) AS ACCESS_USER_CNT,
COALESCE(SUM(X.ORDR_CNT), 0) AS ORDR_CNT
FROM DateSeries DS
LEFT JOIN (
SELECT DATE_FORMAT(A.BGN_DT, '%Y%m%d') AS DT
, COUNT(DISTINCT A.AGENT_ID) AS ACCESS_USER_CNT
, 0 AS ORDR_CNT
FROM GC_ACCESS_STAT A
WHERE 1=1
AND A.SOPMAL_CD = #{sopmalCd}
AND A.BGN_DT BETWEEN #{srchStrtSndngDt} AND CONCAT(#{srchEndSndngDt}, ' 23:59:59')
GROUP BY DATE_FORMAT(A.BGN_DT, '%Y%m%d')
UNION ALL
SELECT DATE_FORMAT(A.SETLE_COMPT_DT, '%Y%m%d') AS ORD_DT
, 0 AS ACCESS_USER_CNT
, SUM(CASE WHEN A.ORRE_DV_CD = '01' and A.ORDR_STTUS_CD between '25' and '75' THEN 1 ELSE NULL END) AS ORDR_CNT
FROM GC_ORRE_STAT A
WHERE 1=1
AND A.SOPMAL_CD = #{sopmalCd}
AND A.SETLE_COMPT_DT BETWEEN #{srchStrtSndngDt} AND CONCAT(#{srchEndSndngDt}, ' 23:59:59')
AND A.ORRE_DV_CD = '01' /* 25.03.12 수정*/
AND A.ORDR_STTUS_CD between '25' and '75' /* 25.03.12 수정*/
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrEnvrnCds)">
AND A.SLE_ENVRN_CD IN
<foreach collection="srchOrdrEnvrnCds" item="srchOrdrEnvrnCd" open="(" close=")" separator=",">
#{srchOrdrEnvrnCd}
</foreach>
</if>
<![CDATA[
GROUP BY DATE_FORMAT(A.SETLE_COMPT_DT, '%Y%m%d')
) X ON DATE_FORMAT(DS.DT, '%Y%m%d') = X.DT
GROUP BY DS.DT
ORDER BY DS.DT ASC
]]>
</select>
<!--
#주별 유입수와 결제수
-->
<select id="selectBOWeeklyChartSetleCntInflowCntInqire"
parameterType="DataMap"
resultType="DataMap">
<![CDATA[
SELECT
WEEK(DATE_SUB(X.DT, INTERVAL (WEEKDAY(X.DT) + 3) % 7 DAY), 1) AS YR_WK,
MIN(X.DT) AS DT,
COALESCE(SUM(X.ACCESS_USER_CNT), 0) AS ACCESS_USER_CNT,
COALESCE(SUM(X.ORDR_CNT), 0) AS ORDR_CNT
FROM (
SELECT DATE_FORMAT(BGN_DT , '%Y%m%d') AS DT
, COUNT(DISTINCT AGENT_ID ) AS ACCESS_USER_CNT
, 0 ORDR_CNT
FROM GC_ACCESS_STAT A
WHERE 1=1
AND A.SOPMAL_CD = #{sopmalCd}
AND A.BGN_DT BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} ' 23:59:59'
GROUP BY DT
UNION ALL
SELECT DATE_FORMAT(SETLE_COMPT_DT , '%Y%m%d') AS ORD_DT
, 0 ACCESS_USER_CNT
, SUM(CASE WHEN ORRE_DV_CD = '01' and ORDR_STTUS_CD between '25' and '75' THEN 1 ELSE NULL END ) AS ORDR_CNT
FROM GC_ORRE_STAT A
WHERE 1=1
AND A.SOPMAL_CD = #{sopmalCd}
AND A.SETLE_COMPT_DT BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} ' 23:59:59'
AND A.ORDR_STTUS_CD NOT IN ('95','99') /* 추가 조건 */
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrEnvrnCds)">
AND A.SLE_ENVRN_CD IN
<foreach collection="srchOrdrEnvrnCds" item="srchOrdrEnvrnCd" open="(" close=")" separator=",">
#{srchOrdrEnvrnCd}
</foreach>
</if>
<![CDATA[
GROUP BY ORD_DT
) X
GROUP BY YR_WK
ORDER BY DT ASC, YR_WK ASC
]]>
</select>
<!--
#월별 유입수와 결제수
-->
<select id="selectBOMonthlyChartSetleCntInflowCntInqire"
parameterType="DataMap"
resultType="DataMap">
<![CDATA[
SELECT
DT ,
COALESCE(SUM(X.ACCESS_USER_CNT), 0) AS ACCESS_USER_CNT,
COALESCE(SUM(X.ORDR_CNT), 0) AS ORDR_CNT
FROM (
SELECT DATE_FORMAT(BGN_DT , '%Y%m') AS DT
, COUNT(DISTINCT AGENT_ID ) AS ACCESS_USER_CNT
, 0 ORDR_CNT
FROM GC_ACCESS_STAT A
WHERE 1=1
AND A.SOPMAL_CD = #{sopmalCd}
AND A.BGN_DT BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} ' 23:59:59'
GROUP BY DT
UNION ALL
SELECT DATE_FORMAT(SETLE_COMPT_DT , '%Y%m') AS ORD_DT
, 0 ACCESS_USER_CNT
, SUM(CASE WHEN ORRE_DV_CD = '01' and A.ORDR_STTUS_CD between '25' and '75' THEN 1 ELSE NULL END ) AS ORDR_CNT
FROM GC_ORRE_STAT A
WHERE 1=1
AND A.SOPMAL_CD = #{sopmalCd}
AND A.SETLE_COMPT_DT BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} ' 23:59:59'
AND A.ORDR_STTUS_CD NOT IN ('95','99') /* 추가 조건 */
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrEnvrnCds)">
AND A.SLE_ENVRN_CD IN
<foreach collection="srchOrdrEnvrnCds" item="srchOrdrEnvrnCd" open="(" close=")" separator=",">
#{srchOrdrEnvrnCd}
</foreach>
</if>
<![CDATA[
GROUP BY ORD_DT
) X
GROUP BY DT
ORDER BY DT ASC
]]>
</select>
<!--
#21 일별 시간대별 결제금액
-->
<select id="selectBOHourlySetleAmtInqire"
parameterType = "DataMap"
resultType="DataMap">
<![CDATA[
WITH RECURSIVE cal_hr AS (
SELECT 1 AS HR
UNION ALL
SELECT HR + 1
FROM cal_hr
WHERE HR < 24
)
SELECT H.HR
, CONCAT( LPAD(H.HR, 2, '0'), '시') AS DT_HR
, COALESCE( SUM(ORDR_CNT), 0) AS ORDR_CNT #주문건수
, COALESCE( SUM(REFUND_CNT), 0) AS REFUND_CNT #환불건수
, COALESCE( SUM(RL_SETLE_AMT), 0) AS RL_SETLE_AMT #결제금액
, COALESCE( SUM(REFUND_AMT), 0) AS REFUND_AMT #환불금액
FROM cal_hr H
LEFT JOIN (
SELECT DATE_FORMAT(SETLE_COMPT_DT , '%H') AS HR
, SUM(CASE WHEN ORRE_DV_CD = '01' and ORDR_STTUS_CD between '25' and '75' THEN 1 ELSE NULL END ) AS ORDR_CNT
, COUNT(DISTINCT CASE WHEN ORRE_DV_CD = '02' THEN PARNTS_ORDR_INNB ELSE NULL END ) AS REFUND_CNT
, SUM(case when ORDR_STTUS_CD between '25' and '75' then RL_SETLE_AMT else NULL end ) RL_SETLE_AMT
, SUM(REFUND_AMT) REFUND_AMT
FROM GC_ORRE_STAT A
WHERE A.SOPMAL_CD = #{sopmalCd}
AND A.SETLE_COMPT_DT BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} ' 23:59:59'
AND ORDR_STTUS_CD between '25' and '85'
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrEnvrnCds)">
AND A.SLE_ENVRN_CD IN
<foreach collection="srchOrdrEnvrnCds" item="srchOrdrEnvrnCd" open="(" close=")" separator=",">
#{srchOrdrEnvrnCd}
</foreach>
</if>
<![CDATA[
GROUP BY HR
) TOT
ON TOT.HR = H.HR
GROUP BY H.HR
ORDER BY H.HR
]]>
</select>
<!--
#22 일별 유입수와 결제수 표 건수 조회
-->
<select id="selectBODailySetleCntInflowCntTableCntInqire"
parameterType = "com.wb.domainserver.domain.gcone.stats.marktAnals.vo.BOMarktAnalsVO"
resultType="java.lang.Integer">
<![CDATA[
SELECT
COUNT(*)
FROM (
SELECT
DT,
COALESCE( ACCESS_USER_CNT, 0) AS ACCESS_USER_CNT,
COALESCE( ORDR_CNT, 0) AS ORDR_CNT,
COALESCE( RL_SETLE_AMT, 0) AS RL_SETLE_AMT,
IF( ACCESS_USER_CNT = 0 , 0, ROUND( COALESCE(ORDR_CNT / ACCESS_USER_CNT * 100, 0) )) AS RL_SETLE_AMT_RT
FROM (
SELECT
DAY_T.DT,
SUM(ACCESS_USER_CNT) AS ACCESS_USER_CNT,
SUM(ORDR_CNT) AS ORDR_CNT,
SUM(RL_SETLE_AMT) AS RL_SETLE_AMT
FROM (
WITH RECURSIVE DateSeries AS (
SELECT #{srchStrtSndngDt} AS DT
UNION ALL
SELECT DT + INTERVAL 1 DAY
FROM DateSeries
WHERE DT < #{srchEndSndngDt}
)
SELECT DATE_FORMAT(DS.DT, '%Y-%m-%d') AS DT
FROM DateSeries DS
) DAY_T
LEFT JOIN (
SELECT DATE_FORMAT(BGN_DT , '%Y-%m-%d') AS DT
, COUNT(DISTINCT AGENT_ID ) AS ACCESS_USER_CNT
, 0 AS ORDR_CNT
, 0 AS RL_SETLE_AMT
FROM GC_ACCESS_STAT A
WHERE 1=1
AND A.SOPMAL_CD = #{sopmalCd}
AND A.BGN_DT BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} ' 23:59:59'
GROUP BY DT
UNION ALL
SELECT DATE_FORMAT(SETLE_COMPT_DT , '%Y-%m-%d') AS ORD_DT
, 0 AS ACCESS_USER_CNT
, SUM(CASE WHEN ORRE_DV_CD = '01' and A.ORDR_STTUS_CD between '25' and '75' THEN 1 ELSE NULL END ) AS ORDR_CNT
, SUM(RL_SETLE_AMT) RL_SETLE_AMT
FROM GC_ORRE_STAT A
WHERE 1=1
AND A.SOPMAL_CD = #{sopmalCd}
AND A.ORRE_DV_CD = '01' /* 25.03.12 수정*/
AND A.ORDR_STTUS_CD between '25' and '75' /* 25.03.12 수정*/
AND A.SETLE_COMPT_DT BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} ' 23:59:59'
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrEnvrnCds)">
AND A.SLE_ENVRN_CD IN
<foreach collection="srchOrdrEnvrnCds" item="srchOrdrEnvrnCd" open="(" close=")" separator=",">
#{srchOrdrEnvrnCd}
</foreach>
</if>
<![CDATA[
GROUP BY ORD_DT
) X
ON DAY_T.DT = X.DT
GROUP BY DT
)A2
ORDER BY ${ordrFinal}
) AS TEMP
]]>
</select>
<!--
#12, 13.일별 실적 표 조회 표 조회
-->
<select id="selectBODailySetleCntInflowCntTableInqire"
parameterType = "com.wb.domainserver.domain.gcone.stats.marktAnals.vo.BOMarktAnalsVO"
resultType="DataMap">
<![CDATA[
SELECT
*
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, TB.*
FROM (
SELECT
DT,
COALESCE( ACCESS_USER_CNT, 0) AS ACCESS_USER_CNT,
COALESCE( ORDR_CNT, 0) AS ORDR_CNT,
COALESCE( RL_SETLE_AMT, 0) AS RL_SETLE_AMT,
IF( ACCESS_USER_CNT = 0 , 0, ROUND( COALESCE(ORDR_CNT / ACCESS_USER_CNT * 100, 0) )) AS RL_SETLE_AMT_RT
FROM (
SELECT
DAY_T.DT,
SUM(ACCESS_USER_CNT) AS ACCESS_USER_CNT,
SUM(ORDR_CNT) AS ORDR_CNT,
SUM(RL_SETLE_AMT) AS RL_SETLE_AMT
FROM (
WITH RECURSIVE DateSeries AS (
SELECT #{srchStrtSndngDt} AS DT
UNION ALL
SELECT DT + INTERVAL 1 DAY
FROM DateSeries
WHERE DT < date_sub( #{srchEndSndngDt}, interval 1 day)
)
SELECT DATE_FORMAT(DS.DT, '%Y-%m-%d') AS DT
FROM DateSeries DS
) DAY_T
LEFT JOIN (
SELECT DATE_FORMAT(BGN_DT , '%Y-%m-%d') AS DT
, COUNT(DISTINCT AGENT_ID ) AS ACCESS_USER_CNT
, 0 AS ORDR_CNT
, 0 AS RL_SETLE_AMT
FROM GC_ACCESS_STAT A
WHERE 1=1
AND A.SOPMAL_CD = #{sopmalCd}
AND A.BGN_DT BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} ' 23:59:59'
GROUP BY DT
UNION ALL
SELECT DATE_FORMAT(SETLE_COMPT_DT , '%Y-%m-%d') AS ORD_DT
, 0 AS ACCESS_USER_CNT
, SUM(CASE WHEN ORRE_DV_CD = '01' and A.ORDR_STTUS_CD between '25' and '75' THEN 1 ELSE NULL END ) AS ORDR_CNT
, SUM(RL_SETLE_AMT) RL_SETLE_AMT
FROM GC_ORRE_STAT A
WHERE 1=1
AND A.SOPMAL_CD = #{sopmalCd}
AND A.ORRE_DV_CD = '01' /* 25.03.12 수정*/
AND A.ORDR_STTUS_CD between '25' and '75' /* 25.03.12 수정*/
AND A.SETLE_COMPT_DT BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} ' 23:59:59'
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrEnvrnCds)">
AND A.SLE_ENVRN_CD IN
<foreach collection="srchOrdrEnvrnCds" item="srchOrdrEnvrnCd" open="(" close=")" separator=",">
#{srchOrdrEnvrnCd}
</foreach>
</if>
<![CDATA[
GROUP BY ORD_DT
) X
ON DAY_T.DT = X.DT
GROUP BY DT
)A2
ORDER BY ${ordrFinal}
) TB
WHERE (@rownum:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!--
#22 별 시간대별 유입수와 결제수 표 건수 조회
-->
<select id="selectBODailyHourlySetleCntInflowCntTableCntInqire"
parameterType = "com.wb.domainserver.domain.gcone.stats.marktAnals.vo.BOMarktAnalsVO"
resultType="java.lang.Integer">
<![CDATA[
SELECT
COUNT(*)
FROM (
SELECT
DT,
HR,
ACCESS_USER_CNT,
COALESCE( ORDR_CNT, 0) AS ORDR_CNT,
COALESCE( RL_SETLE_AMT, 0) AS RL_SETLE_AMT,
IF( ACCESS_USER_CNT = 0 , 0, ROUND( COALESCE(ORDR_CNT / ACCESS_USER_CNT * 100, 0) )) AS RL_SETLE_AMT_RT
FROM (
SELECT
DT,
HR,
SUM(ACCESS_USER_CNT) AS ACCESS_USER_CNT,
SUM(ORDR_CNT) AS ORDR_CNT,
SUM(RL_SETLE_AMT) AS RL_SETLE_AMT
FROM (
SELECT DT, HR
, 0 ACCESS_USER_CNT
, 0 ORDR_CNT
, 0 RL_SETLE_AMT
FROM (
-- 시간테이블
WITH RECURSIVE cal_day AS (
SELECT #{srchStrtSndngDt} DT
UNION ALL
SELECT
DT + interval 1 day
FROM
cal_day
WHERE
DT + interval 1 day <= #{srchEndSndngDt}
)
SELECT DT
FROM cal_day
) DAY_T
JOIN (
-- 시간테이블
WITH RECURSIVE cal_hr AS (
SELECT 1 HR
UNION ALL
SELECT
HR + 1
FROM
cal_hr
WHERE
HR + 1 <= 24
)
SELECT lpad(HR-1, 2, '0') HR
FROM cal_hr
) HR_T
ON 1=1
UNION ALL
SELECT DATE_FORMAT(BGN_DT , '%Y-%m-%d') AS DT
, DATE_FORMAT(BGN_DT , '%H') AS HR
, COUNT(DISTINCT AGENT_ID ) AS ACCESS_USER_CNT
, 0 AS ORDR_CNT
, 0 AS RL_SETLE_AMT
FROM GC_ACCESS_STAT A
WHERE 1=1
AND A.SOPMAL_CD = #{sopmalCd}
AND A.BGN_DT BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} ' 23:59:59'
GROUP BY DT, HR
UNION ALL
SELECT DATE_FORMAT(SETLE_COMPT_DT , '%Y-%m-%d') AS ORD_DT
, DATE_FORMAT(SETLE_COMPT_DT , '%H') AS ORD_HR
, 0 AS ACCESS_USER_CNT
, SUM(CASE WHEN ORRE_DV_CD = '01' and A.ORDR_STTUS_CD between '25' and '75' THEN 1 ELSE NULL END ) AS ORDR_CNT
, SUM(RL_SETLE_AMT) RL_SETLE_AMT
FROM GC_ORRE_STAT A
WHERE 1=1
AND A.SOPMAL_CD = #{sopmalCd}
AND A.ORRE_DV_CD = '01' /* 25.03.12 수정*/
AND A.ORDR_STTUS_CD between '25' and '75' /* 25.03.12 수정*/
AND A.SETLE_COMPT_DT BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} ' 23:59:59'
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrEnvrnCds)">
AND A.SLE_ENVRN_CD IN
<foreach collection="srchOrdrEnvrnCds" item="srchOrdrEnvrnCd" open="(" close=")" separator=",">
#{srchOrdrEnvrnCd}
</foreach>
</if>
<![CDATA[
GROUP BY ORD_DT, ORD_HR
) A
GROUP BY DT, HR
)A2
ORDER BY ${ordrFinal}
) AS TEMP
]]>
</select>
<!--
#22 일별 시간대별 유입수와 결제수 표 조회
-->
<select id="selectBODailyHourlySetleCntInflowCntTableInqire"
parameterType = "com.wb.domainserver.domain.gcone.stats.marktAnals.vo.BOMarktAnalsVO"
resultType="DataMap">
<![CDATA[
SELECT
*
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, TB.*
FROM (
SELECT
DT,
HR,
ACCESS_USER_CNT,
COALESCE( ORDR_CNT, 0) AS ORDR_CNT,
COALESCE( RL_SETLE_AMT, 0) AS RL_SETLE_AMT,
IF( ACCESS_USER_CNT = 0 , 0, ROUND( COALESCE(ORDR_CNT / ACCESS_USER_CNT * 100, 0) )) AS RL_SETLE_AMT_RT
FROM (
SELECT
DT,
HR,
SUM(ACCESS_USER_CNT) AS ACCESS_USER_CNT,
SUM(ORDR_CNT) AS ORDR_CNT,
SUM(RL_SETLE_AMT) AS RL_SETLE_AMT
FROM (
SELECT DT, HR
, 0 ACCESS_USER_CNT
, 0 ORDR_CNT
, 0 RL_SETLE_AMT
FROM (
-- 시간테이블
WITH RECURSIVE cal_day AS (
SELECT #{srchStrtSndngDt} DT
UNION ALL
SELECT
DT + interval 1 day
FROM
cal_day
WHERE
DT + interval 1 day <= #{srchEndSndngDt}
)
SELECT DT
FROM cal_day
) DAY_T
JOIN (
-- 시간테이블
WITH RECURSIVE cal_hr AS (
SELECT 1 HR
UNION ALL
SELECT
HR + 1
FROM
cal_hr
WHERE
HR + 1 <= 24
)
SELECT lpad(HR-1, 2, '0') HR
FROM cal_hr
) HR_T
ON 1=1
UNION ALL
SELECT DATE_FORMAT(BGN_DT , '%Y-%m-%d') AS DT
, DATE_FORMAT(BGN_DT , '%H') AS HR
, COUNT(DISTINCT AGENT_ID ) AS ACCESS_USER_CNT
, 0 AS ORDR_CNT
, 0 AS RL_SETLE_AMT
FROM GC_ACCESS_STAT A
WHERE 1=1
AND A.SOPMAL_CD = #{sopmalCd}
AND A.BGN_DT BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} ' 23:59:59'
GROUP BY DT, HR
UNION ALL
SELECT DATE_FORMAT(SETLE_COMPT_DT , '%Y-%m-%d') AS ORD_DT
, DATE_FORMAT(SETLE_COMPT_DT , '%H') AS ORD_HR
, 0 AS ACCESS_USER_CNT
, SUM(CASE WHEN ORRE_DV_CD = '01' and A.ORDR_STTUS_CD between '25' and '75' THEN 1 ELSE NULL END ) AS ORDR_CNT
, SUM(RL_SETLE_AMT) RL_SETLE_AMT
FROM GC_ORRE_STAT A
WHERE 1=1
AND A.SOPMAL_CD = #{sopmalCd}
AND A.ORRE_DV_CD = '01' /* 25.03.12 수정*/
AND A.ORDR_STTUS_CD between '25' and '75' /* 25.03.12 수정*/
AND A.SETLE_COMPT_DT BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} ' 23:59:59'
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrEnvrnCds)">
AND A.SLE_ENVRN_CD IN
<foreach collection="srchOrdrEnvrnCds" item="srchOrdrEnvrnCd" open="(" close=")" separator=",">
#{srchOrdrEnvrnCd}
</foreach>
</if>
<![CDATA[
GROUP BY ORD_DT, ORD_HR
) A
GROUP BY DT, HR
)A2
ORDER BY ${ordrFinal}
) TB
WHERE (@rownum:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!--
쿠폰사용금액 표 건수 조회
-->
<select id="selectBOCoupUseValeTableCntInqire"
parameterType = "com.wb.domainserver.domain.gcone.stats.marktAnals.vo.BOMarktAnalsVO"
resultType="java.lang.Integer">
<![CDATA[
SELECT
COUNT(*)
FROM (
-- 장바구니 쿠폰
SELECT '장바구니' gubun, B.COUPON_INNB, B.COUP_NM, B.COUPON_DWLD_CNT
, COALESCE( cart.SLEPRIC_SUM, 0) AS SLEPRIC_SUM
, COALESCE( cart.DISCOUNT_AMT, 0) AS DISCOUNT_AMT
, COALESCE( cart.COUPON_USE_DCNT, 0) AS COUPON_USE_DCNT
FROM (
SELECT GD.COUPON_INNB
, GD.COUP_NM
, COUNT(GD.DWLD_COUPON_INNB) AS COUPON_DWLD_CNT
FROM GC_DOWNLOAD GD
WHERE GD.SOPMAL_CD = #{sopmalCd}
AND GD.COUPON_STTUS_CD <> '04'
AND GD.BNEF_DV_CD = '03' -- 장바구니 쿠폰
AND GD.REGIST_DT BETWEEN #{srchStrtSndngDt2} AND #{srchEndSndngDt2} ' 23:59:59'
GROUP BY GD.COUPON_INNB, GD.COUP_NM
) B
LEFT JOIN (
SELECT '장바구니' COUPON_DV, GD.COUPON_INNB, A.CART_COUP_NM AS COUPON_NM
, SUM(A.SLEPRIC * A.ORRE_QY) AS SLEPRIC_SUM
, SUM(A.CART_COUPON_DSCNT_UNIT * A.ORRE_QY + A.CART_COUPON_DSCNT_REST) AS DISCOUNT_AMT
, COUNT(DISTINCT CASE WHEN GD.COUPON_STTUS_CD = '03' THEN GD.DWLD_COUPON_INNB ELSE NULL END) AS COUPON_USE_DCNT
FROM GC_ORRE_GOPTN_STAT A
JOIN GC_DOWNLOAD GD
ON A.SOPMAL_CD = GD.SOPMAL_CD
AND A.CART_DWLD_COUPON_INNB = GD.DWLD_COUPON_INNB
WHERE A.SOPMAL_CD = #{sopmalCd}
AND A.CART_DWLD_COUPON_INNB > ''
AND A.ORRE_DV_CD = '01'
AND A.ORDR_STTUS_CD between '25' AND '75'
AND A.SETLE_COMPT_DT BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} ' 23:59:59'
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrEnvrnCds)">
AND A.SLE_ENVRN_CD IN
<foreach collection="srchOrdrEnvrnCds" item="srchOrdrEnvrnCd" open="(" close=")" separator=",">
#{srchOrdrEnvrnCd}
</foreach>
</if>
<![CDATA[
GROUP BY 1,2,3
) cart
ON cart.COUPON_INNB = B.COUPON_INNB
AND cart.COUPON_NM = B.COUP_NM
UNION ALL
-- 상품 쿠폰
SELECT '상품' gubun, B.COUPON_INNB, B.COUP_NM, B.COUPON_DWLD_CNT
, COALESCE( goods.SLEPRIC_SUM, 0) AS SLEPRIC_SUM
, COALESCE( goods.DISCOUNT_AMT, 0) AS DISCOUNT_AMT
, COALESCE( goods.COUPON_USE_DCNT, 0) AS COUPON_USE_DCNT
FROM(
SELECT GD.COUPON_INNB
, GD.COUP_NM
, COUNT(GD.DWLD_COUPON_INNB) AS COUPON_DWLD_CNT
FROM GC_DOWNLOAD GD
WHERE GD.SOPMAL_CD = #{sopmalCd}
AND GD.COUPON_STTUS_CD <> '04'
AND GD.BNEF_DV_CD = '01' -- 상품 쿠폰
AND GD.REGIST_DT BETWEEN #{srchStrtSndngDt2} AND #{srchEndSndngDt2} ' 23:59:59'
GROUP BY GD.COUPON_INNB, GD.COUP_NM
) B
LEFT JOIN (
SELECT '상품' COUPON_DV, GD.COUPON_INNB, A.GOODS_COUP_NM AS COUPON_NM
, SUM(A.SLEPRIC * A.ORRE_QY) AS SLEPRIC_SUM
, SUM(A.GOODS_COUPON_DSCNT_UNIT * A.ORRE_QY + A.GOODS_COUPON_DSCNT_REST) AS DISCOUNT_AMT
, COUNT(DISTINCT CASE WHEN GD.COUPON_STTUS_CD = '03' THEN GD.DWLD_COUPON_INNB ELSE NULL END) AS COUPON_USE_DCNT
FROM GC_ORRE_GOPTN_STAT A
JOIN GC_DOWNLOAD GD
ON A.SOPMAL_CD = GD.SOPMAL_CD
AND A.GOODS_DWLD_COUPON_INNB = GD.DWLD_COUPON_INNB
WHERE A.SOPMAL_CD = #{sopmalCd}
AND A.GOODS_DWLD_COUPON_INNB > ''
AND A.ORRE_DV_CD = '01'
AND A.ORDR_STTUS_CD between '25' AND '75'
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrEnvrnCds)">
AND A.SLE_ENVRN_CD IN
<foreach collection="srchOrdrEnvrnCds" item="srchOrdrEnvrnCd" open="(" close=")" separator=",">
#{srchOrdrEnvrnCd}
</foreach>
</if>
<![CDATA[
AND A.SETLE_COMPT_DT BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} ' 23:59:59'
GROUP BY 1,2,3
) goods
ON goods.COUPON_INNB = B.COUPON_INNB
AND goods.COUPON_NM = B.COUP_NM
UNION ALL
-- 배송비 쿠폰
SELECT '배송' gubun, B.COUPON_INNB, B.COUP_NM, B.COUPON_DWLD_CNT
, COALESCE( dlvy.SLEPRIC_SUM, 0) AS SLEPRIC_SUM
, COALESCE( dlvy.DLVY_DISCOUNT_AMT, 0) AS DISCOUNT_AMT
, COALESCE( dlvy.COUPON_USE_DCNT, 0) AS COUPON_USE_DCNT
FROM (
SELECT GD.COUPON_INNB
, GD.COUP_NM
, COUNT(GD.DWLD_COUPON_INNB) AS COUPON_DWLD_CNT
FROM GC_DOWNLOAD GD
WHERE GD.SOPMAL_CD = #{sopmalCd}
AND GD.COUPON_STTUS_CD <> '04'
AND GD.BNEF_DV_CD = '02' -- 배송비 쿠폰
AND GD.REGIST_DT BETWEEN #{srchStrtSndngDt2} AND #{srchEndSndngDt2} ' 23:59:59'
GROUP BY GD.COUPON_INNB, GD.COUP_NM
) B
LEFT JOIN (
SELECT '배송' COUPON_DV, GD.COUPON_INNB, GD.COUP_NM AS COUPON_NM
, SUM(B.RL_SETLE_AMT) AS SLEPRIC_SUM
, SUM(A.DLVY_COUPON_DSCNT_AMT) AS DLVY_DISCOUNT_AMT
, COUNT(DISTINCT A.DWLD_COUPON_INNB) AS COUPON_USE_DCNT
FROM GC_ORDER_SHIPPING A
JOIN GC_ORDER B
ON A.SOPMAL_CD = B.SOPMAL_CD
AND A.ORDR_INNB = B.ORDR_INNB
JOIN GC_DOWNLOAD GD
ON A.SOPMAL_CD = GD.SOPMAL_CD
AND A.DWLD_COUPON_INNB = GD.DWLD_COUPON_INNB
WHERE A.SOPMAL_CD = #{sopmalCd}
AND A.DWLD_COUPON_INNB > ''
AND A.ORDR_STTUS_CD between '25' AND '75'
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrEnvrnCds)">
AND B.SLE_ENVRN_CD IN
<foreach collection="srchOrdrEnvrnCds" item="srchOrdrEnvrnCd" open="(" close=")" separator=",">
#{srchOrdrEnvrnCd}
</foreach>
</if>
<![CDATA[
AND B.SETLE_COMPT_DT BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} ' 23:59:59'
GROUP BY 1,2,3
) dlvy
ON dlvy.COUPON_INNB = B.COUPON_INNB
AND dlvy.COUPON_NM = B.COUP_NM
ORDER BY ${ordrFinal}
) AS TEMP
]]>
</select>
<!--
쿠폰사용금액 표 조회
-->
<select id="selectBOCoupUseValeTableInqire"
parameterType = "com.wb.domainserver.domain.gcone.stats.marktAnals.vo.BOMarktAnalsVO"
resultType="DataMap">
<![CDATA[
SELECT
*
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, TB.*
FROM (
-- 장바구니 쿠폰
SELECT '장바구니' gubun, B.COUPON_INNB, B.COUP_NM, B.COUPON_DWLD_CNT
, COALESCE( cart.SLEPRIC_SUM, 0) AS SLEPRIC_SUM
, COALESCE( cart.DISCOUNT_AMT, 0) AS DISCOUNT_AMT
, COALESCE( cart.COUPON_USE_DCNT, 0) AS COUPON_USE_DCNT
FROM (
SELECT GD.COUPON_INNB
, GD.COUP_NM
, COUNT(GD.DWLD_COUPON_INNB) AS COUPON_DWLD_CNT
FROM GC_DOWNLOAD GD
WHERE GD.SOPMAL_CD = #{sopmalCd}
AND GD.COUPON_STTUS_CD <> '04'
AND GD.BNEF_DV_CD = '03' -- 장바구니 쿠폰
AND GD.REGIST_DT BETWEEN #{srchStrtSndngDt2} AND #{srchEndSndngDt2} ' 23:59:59'
GROUP BY GD.COUPON_INNB, GD.COUP_NM
) B
LEFT JOIN (
SELECT '장바구니' COUPON_DV, GD.COUPON_INNB, A.CART_COUP_NM AS COUPON_NM
, SUM(A.SLEPRIC * A.ORRE_QY) AS SLEPRIC_SUM
, SUM(A.CART_COUPON_DSCNT_UNIT * A.ORRE_QY + A.CART_COUPON_DSCNT_REST) AS DISCOUNT_AMT
, COUNT(DISTINCT CASE WHEN GD.COUPON_STTUS_CD = '03' THEN GD.DWLD_COUPON_INNB ELSE NULL END) AS COUPON_USE_DCNT
FROM GC_ORRE_GOPTN_STAT A
JOIN GC_DOWNLOAD GD
ON A.SOPMAL_CD = GD.SOPMAL_CD
AND A.CART_DWLD_COUPON_INNB = GD.DWLD_COUPON_INNB
WHERE A.SOPMAL_CD = #{sopmalCd}
AND A.CART_DWLD_COUPON_INNB > ''
AND A.ORRE_DV_CD = '01'
AND A.ORDR_STTUS_CD between '25' AND '75'
AND A.SETLE_COMPT_DT BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} ' 23:59:59'
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrEnvrnCds)">
AND A.SLE_ENVRN_CD IN
<foreach collection="srchOrdrEnvrnCds" item="srchOrdrEnvrnCd" open="(" close=")" separator=",">
#{srchOrdrEnvrnCd}
</foreach>
</if>
<![CDATA[
GROUP BY 1,2,3
) cart
ON cart.COUPON_INNB = B.COUPON_INNB
AND cart.COUPON_NM = B.COUP_NM
UNION ALL
-- 상품 쿠폰
SELECT '상품' gubun, B.COUPON_INNB, B.COUP_NM, B.COUPON_DWLD_CNT
, COALESCE( goods.SLEPRIC_SUM, 0) AS SLEPRIC_SUM
, COALESCE( goods.DISCOUNT_AMT, 0) AS DISCOUNT_AMT
, COALESCE( goods.COUPON_USE_DCNT, 0) AS COUPON_USE_DCNT
FROM(
SELECT GD.COUPON_INNB
, GD.COUP_NM
, COUNT(GD.DWLD_COUPON_INNB) AS COUPON_DWLD_CNT
FROM GC_DOWNLOAD GD
WHERE GD.SOPMAL_CD = #{sopmalCd}
AND GD.COUPON_STTUS_CD <> '04'
AND GD.BNEF_DV_CD = '01' -- 상품 쿠폰
AND GD.REGIST_DT BETWEEN #{srchStrtSndngDt2} AND #{srchEndSndngDt2} ' 23:59:59'
GROUP BY GD.COUPON_INNB, GD.COUP_NM
) B
LEFT JOIN (
SELECT '상품' COUPON_DV, GD.COUPON_INNB, A.GOODS_COUP_NM AS COUPON_NM
, SUM(A.SLEPRIC * A.ORRE_QY) AS SLEPRIC_SUM
, SUM(A.GOODS_COUPON_DSCNT_UNIT * A.ORRE_QY + A.GOODS_COUPON_DSCNT_REST) AS DISCOUNT_AMT
, COUNT(DISTINCT CASE WHEN GD.COUPON_STTUS_CD = '03' THEN GD.DWLD_COUPON_INNB ELSE NULL END) AS COUPON_USE_DCNT
FROM GC_ORRE_GOPTN_STAT A
JOIN GC_DOWNLOAD GD
ON A.SOPMAL_CD = GD.SOPMAL_CD
AND A.GOODS_DWLD_COUPON_INNB = GD.DWLD_COUPON_INNB
WHERE A.SOPMAL_CD = #{sopmalCd}
AND A.GOODS_DWLD_COUPON_INNB > ''
AND A.ORRE_DV_CD = '01'
AND A.ORDR_STTUS_CD between '25' AND '75'
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrEnvrnCds)">
AND A.SLE_ENVRN_CD IN
<foreach collection="srchOrdrEnvrnCds" item="srchOrdrEnvrnCd" open="(" close=")" separator=",">
#{srchOrdrEnvrnCd}
</foreach>
</if>
<![CDATA[
AND A.SETLE_COMPT_DT BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} ' 23:59:59'
GROUP BY 1,2,3
) goods
ON goods.COUPON_INNB = B.COUPON_INNB
AND goods.COUPON_NM = B.COUP_NM
UNION ALL
-- 배송비 쿠폰
SELECT '배송' gubun, B.COUPON_INNB, B.COUP_NM, B.COUPON_DWLD_CNT
, COALESCE( dlvy.SLEPRIC_SUM, 0) AS SLEPRIC_SUM
, COALESCE( dlvy.DLVY_DISCOUNT_AMT, 0) AS DISCOUNT_AMT
, COALESCE( dlvy.COUPON_USE_DCNT, 0) AS COUPON_USE_DCNT
FROM (
SELECT GD.COUPON_INNB
, GD.COUP_NM
, COUNT(GD.DWLD_COUPON_INNB) AS COUPON_DWLD_CNT
FROM GC_DOWNLOAD GD
WHERE GD.SOPMAL_CD = #{sopmalCd}
AND GD.COUPON_STTUS_CD <> '04'
AND GD.BNEF_DV_CD = '02' -- 배송비 쿠폰
AND GD.REGIST_DT BETWEEN #{srchStrtSndngDt2} AND #{srchEndSndngDt2} ' 23:59:59'
GROUP BY GD.COUPON_INNB, GD.COUP_NM
) B
LEFT JOIN (
SELECT '배송' COUPON_DV, GD.COUPON_INNB, GD.COUP_NM AS COUPON_NM
, SUM(B.RL_SETLE_AMT) AS SLEPRIC_SUM
, SUM(A.DLVY_COUPON_DSCNT_AMT) AS DLVY_DISCOUNT_AMT
, COUNT(DISTINCT A.DWLD_COUPON_INNB) AS COUPON_USE_DCNT
FROM GC_ORDER_SHIPPING A
JOIN GC_ORDER B
ON A.SOPMAL_CD = B.SOPMAL_CD
AND A.ORDR_INNB = B.ORDR_INNB
JOIN GC_DOWNLOAD GD
ON A.SOPMAL_CD = GD.SOPMAL_CD
AND A.DWLD_COUPON_INNB = GD.DWLD_COUPON_INNB
WHERE A.SOPMAL_CD = #{sopmalCd}
AND A.DWLD_COUPON_INNB > ''
AND A.ORDR_STTUS_CD between '25' AND '75'
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrEnvrnCds)">
AND B.SLE_ENVRN_CD IN
<foreach collection="srchOrdrEnvrnCds" item="srchOrdrEnvrnCd" open="(" close=")" separator=",">
#{srchOrdrEnvrnCd}
</foreach>
</if>
<![CDATA[
AND B.SETLE_COMPT_DT BETWEEN #{srchStrtSndngDt} AND #{srchEndSndngDt} ' 23:59:59'
GROUP BY 1,2,3
) dlvy
ON dlvy.COUPON_INNB = B.COUPON_INNB
AND dlvy.COUPON_NM = B.COUP_NM
ORDER BY ${ordrFinal}
) TB
WHERE (@rownum:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
</mapper>

View File

@@ -0,0 +1,30 @@
<?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.wb.domainserver.domain.gcone.stats.memberStat.mapper.BOMemberStatMapper">
<!--
#일별 유입수와 결제수
-->
<select id="selectBOMngrMemberStatTableInqire"
parameterType = "DataMap"
resultType="DataMap">
<![CDATA[
select T.MBR_DV_CD,
T.SOPMAL_CD,
T.CNT,
T.CNT_MAIN,
T.CNT_OFFLINE,
T.CNT_AGREE,
T.CNT_LOGIN,
T.CNT_LOGIN_YEAR,
T.CNT_ORDER,
T.CNT_ORDER_YEAR
from GC_MEMBER_STAT_LOG T
WHERE T.DT = DATE_FORMAT(NOW(),'%Y-%m-%d')
order by IF(T.MBR_DV_CD='GC',1,2), T.SOPMAL_CD
]]>
</select>
</mapper>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,593 @@
<?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.wb.domainserver.domain.gcone.tm.mapper.BOTmMapper">
<!--주문관련-->
<!--주문 조회-->
<select id="selectBOOrdrList" resultType="DataMap">
SELECT GO.ORDR_INNB,
GO.ORDR_STTUS_CD,
FN_GET_COMMCODE_NAME('ORDR_STTUS',GO.ORDR_STTUS_CD) AS ORDR_STTUS_NM,
GOS.ORDR_DLVY_INNB,
GOS.DLVYLC_ADRES_DV_CD
FROM GC_ORDER GO
INNER JOIN GC_ORDER_SHIPPING GOS
ON GO.ORDR_INNB = GOS.ORDR_INNB
AND GO.SOPMAL_CD = GOS.SOPMAL_CD
WHERE GO.ORDR_INNB = #{order_seq}
AND GO.SOPMAL_CD = #{order_site}
</select>
<!--분류 정보 -->
<select id = "selectBOTmitmList" resultType="Map">
SELECT (C.CTGRY_DEPTH - 2) AS level,
CASE
WHEN C.CTGRY_DEPTH - 2 = 3 THEN CONCAT(CASE WHEN CHAR_LENGTH(C.UPPER_CTGRY_ID) = 3 THEN CONCAT("0",C.UPPER_CTGRY_ID) ELSE C.UPPER_CTGRY_ID END,C.CTGRY_ID)
WHEN C.CTGRY_DEPTH - 2 = 2 THEN CASE WHEN CHAR_LENGTH(C.CTGRY_ID) THEN CONCAT("0",C.CTGRY_ID) ELSE C.UPPER_CTGRY_ID END
END AS category_code,
C.CTGRY_NM AS title
FROM GC_CATEGORY C
WHERE 1=1
AND C.SOPMAL_CD = #{order_site}
AND C.USE_AT = 'Y'
AND C.TM_EXPSR_AT = 'Y'
ORDER BY
C.CTGRY_DEPTH ,
C.SORT_ORDR,
C.CTGRY_ID
</select>
<!--상품 목록 검색-->
<!--상품 목록 건수-->
<select id = "selectBOTmGoodsCnt" resultType="Integer">
SELECT
COUNT(DISTINCT O.GOODS_OPTN_INNB)
FROM GC_GOODS G
INNER JOIN GC_GOODS_OPTION O
ON O.GOODS_INNB = G.GOODS_INNB
AND O.SOPMAL_CD = G.SOPMAL_CD
AND O.OPTN_EXPSR_AT = 'Y'
INNER JOIN GC_CATEGORY_LINK GCL1
ON G.GOODS_INNB = GCL1.GOODS_INNB
AND G.SOPMAL_CD = GCL1.SOPMAL_CD
INNER JOIN GC_CATEGORY C1
ON C1.CTGRY_ID = GCL1.CTGRY_ID
AND C1.SOPMAL_CD = G.SOPMAL_CD
AND C1.USE_AT = 'Y'
AND C1.TM_EXPSR_AT = 'Y'
WHERE G.SOPMAL_CD = #{order_site}
AND G.GOODS_STTUS_CD = '01'
AND ((G.EXPSR_DV_CD = 01 OR (G.EXPSR_DV_CD = 03 AND DATE_FORMAT(SYSDATE(), '%Y-%m-%d') BETWEEN G.EXPSR_BGN_DT AND G.EXPSR_END_DT)) OR LEFT(G.GOODS_NM,2)='TM') /*노출 코드*/
AND CASE WHEN CAST(IFNULL(#{sch_brand},'') AS UNSIGNED) = '' THEN 1
ELSE (C1.CTGRY_ID = CAST(#{sch_brand} AS UNSIGNED) OR C1.UPPER_CTGRY_ID = CAST(#{sch_brand} AS UNSIGNED)) END
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sch_category)">/*2차 카테고리*/
AND C1.CTGRY_ID = CASE
WHEN LEFT(#{sch_category}, 4) = #{sch_brand} THEN SUBSTRING(#{sch_category}, 5)
ELSE 0359360
END
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sch_goods)">
AND (G.GOODS_NM LIKE CONCAT('%',#{sch_goods},'%') OR O.OPTN_VAL_1 LIKE CONCAT('%',#{sch_goods},'%'))
</if>
</select>
<!--상품 목록 리스트-->
<select id = "selectBOTmGoodsList" resultType="Map">
SELECT
DISTINCT C1.CTGRY_ID AS category_code,
C1.CTGRY_NM AS title,
G.GOODS_INNB AS goods_seq,
fn_get_commcode_name('GOODS_STTUS',G.GOODS_STTUS_CD ) AS goods_status,
'' AS goods_view,
G.GOODS_CD AS goods_code,
G.REPRSNT_GOODS_CD AS main_goods_code,
G.GOODS_NM AS goods_name,
'' AS oneplusone,
'' AS oneplusone_ea,
'' AS oneplusone_cnt,
'' AS oneplusone_cross,
O.GOODS_OPTN_INNB AS option_seq,
'' AS default_option,
CONCAT(IFNULL(O.OPTN_NM_1,''),IFNULL(O.OPTN_NM_2,''),IFNULL(O.OPTN_NM_3,''),IFNULL(O.OPTN_NM_4,'')) AS option_title,
O.OPTN_VAL_1 AS option1,
O.OPTN_CD_1 AS optioncode1,
O.CNSMRPRIC AS consumer_price,
O.SLEPRIC AS price,
O.COMPNB_DSCNT_AT AS opt_multiple_sale_yn,
O.SCTN_DSCNT_AT AS opt_cart_sale_yn,
C1.CTGRY_ID, /*ORDER BY에 필요함*/
C1.SORT_ORDR,
GCL1.GOODS_ORDR ,
O.GOODS_OPTN_INNB
FROM GC_GOODS G
INNER JOIN GC_GOODS_OPTION O
ON O.GOODS_INNB = G.GOODS_INNB
AND O.SOPMAL_CD = G.SOPMAL_CD
AND O.OPTN_EXPSR_AT = 'Y'
INNER JOIN GC_CATEGORY_LINK GCL1
ON G.GOODS_INNB = GCL1.GOODS_INNB
AND G.SOPMAL_CD = GCL1.SOPMAL_CD
INNER JOIN GC_CATEGORY C1
ON C1.CTGRY_ID = GCL1.CTGRY_ID
AND C1.SOPMAL_CD = G.SOPMAL_CD
AND C1.USE_AT = 'Y'
AND C1.TM_EXPSR_AT = 'Y'
WHERE G.SOPMAL_CD = #{order_site}
AND G.GOODS_STTUS_CD = '01'
AND ((G.EXPSR_DV_CD = 01 OR (G.EXPSR_DV_CD = 03 AND DATE_FORMAT(SYSDATE(), '%Y-%m-%d') BETWEEN G.EXPSR_BGN_DT AND G.EXPSR_END_DT)) OR LEFT(G.GOODS_NM,2)='TM') /*노출 코드*/
AND CASE WHEN IFNULL(#{sch_brand},'') = '' THEN 1
ELSE (C1.CTGRY_ID = #{sch_brand} OR C1.UPPER_CTGRY_ID = #{sch_brand} ) END
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sch_category)">/*2차 카테고리*/
AND C1.CTGRY_ID = CASE
WHEN LEFT(#{sch_category}, 4) = #{sch_brand} THEN SUBSTRING(#{sch_category}, 5)
ELSE #{sch_category}
END
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sch_goods)">
AND (G.GOODS_NM LIKE CONCAT('%',#{sch_goods},'%') OR O.OPTN_VAL_1 LIKE CONCAT('%',#{sch_goods},'%'))
</if>
ORDER BY C1.CTGRY_ID, C1.SORT_ORDR , GCL1.GOODS_ORDR , O.GOODS_OPTN_INNB
LIMIT #{start}, #{lines}
</select>
<!--상품정보-->
<select id ="selectBOTmGoodsDtlInfo" resultType="Map">
SELECT
C1.CTGRY_ID AS category_code,
C1.CTGRY_NM AS brand_name,
G.GOODS_INNB AS goods_seq,
G.GOODS_NM AS goods_name,
G.GOODS_CD AS goods_code,
G.REPRSNT_GOODS_CD AS main_goods_code,
IF(LENGTH(G.MBL_GOODS_DC) > 10, G.MBL_GOODS_DC, G.GOODS_DC) AS contents
FROM GC_GOODS G
LEFT JOIN GC_CATEGORY_LINK GCL
ON G.GOODS_INNB = GCL.GOODS_INNB
AND G.SOPMAL_CD = GCL.SOPMAL_CD
LEFT JOIN GC_CATEGORY C1
ON C1.CTGRY_ID = GCL.CTGRY_ID
AND C1.SOPMAL_CD = G.SOPMAL_CD
AND (C1.USE_AT = 'Y' OR LEFT(C1.CTGRY_NM,2)= 'TM')
AND C1.CTGRY_DEPTH = 4
AND C1.TM_EXPSR_AT = 'Y'
AND C1.URL_DV_CD = '01'
WHERE G.SOPMAL_CD = #{order_site}
AND C1.CTGRY_ID IS NOT NULL
AND G.GOODS_INNB = #{goods_seq}
AND G.GOODS_STTUS_CD = '01'
AND ((G.EXPSR_DV_CD = 01 OR (G.EXPSR_DV_CD = 03 AND DATE_FORMAT(SYSDATE(), '%Y-%m-%d') BETWEEN G.EXPSR_BGN_DT AND G.EXPSR_END_DT)) OR LEFT(G.GOODS_NM,2)='TM')
LIMIT 1
</select>
<!--사은품 이벤트 조회-->
<select id="selectBOTmEvtList" resultType="map">
SELECT
GE.EVT_INNB AS gift_seq,
GE.EVTNM AS title,
GE.EVT_BGN_DT AS start_date,
GE.EVT_END_DT AS end_date,
CASE
WHEN GE.GOODS_APPLC_DV_CD = '01' THEN 'all'
WHEN GE.GOODS_APPLC_DV_CD = '02' THEN 'category'
WHEN GE.GOODS_APPLC_DV_CD = '03' THEN 'goods'
WHEN GE.GOODS_APPLC_DV_CD = '04' THEN 'except_category'
WHEN GE.GOODS_APPLC_DV_CD = '05' THEN 'except_goods'
END AS goods_rule,
GE.GOODS_APPLC_DV_CD AS goods_applc_dv_cd
FROM
GC_EVENT GE
WHERE 1 =1
AND GE.EVT_DV = '02' /* 사은품 이벤트 */
AND SYSDATE() BETWEEN GE.EVT_BGN_DT AND GE.EVT_END_DT /* 현재 진행중인 이벤트이고 */
AND GE.SOPMAL_CD = #{order_site}
AND GE.USE_AT = 'Y'
AND CASE WHEN IFNULL(GE.APPLC_DAY, '') = '' THEN 1
ELSE GE.APPLC_DAY LIKE CONCAT('%', CONCAT('0', DAYOFWEEK(SYSDATE())), '%')
END
AND CASE WHEN IFNULL(GE.LMTT_BGNTME, '') = '' OR IFNULL(GE.LMTT_ENDTME, '') = '' THEN 1
ELSE DATE_FORMAT(NOW(), '%H%i') BETWEEN GE.LMTT_BGNTME AND GE.LMTT_ENDTME -- EVT_BGN_DT => LMTT_BGNTME 로 변경
END
AND GE.EVT_TRGET_DV_CD = '01' /* 전체 대상인 이벤트만 적용 */
</select>
<!--사은품 대상 상품/카테고리-->
<select id="selectBOTmTgtGiftList" resultType="java.util.Map">
SELECT MIN(EC.EVT_APPLC_GOODS_INNB) AS gift_choice_seq,
EC.EVT_INNB AS gift_seq, GE.GOODS_APPLC_DV_CD,
CASE
WHEN GE.GOODS_APPLC_DV_CD = '01' THEN 'all'
WHEN GE.GOODS_APPLC_DV_CD = '02' THEN 'goods' -- CTGRY
WHEN GE.GOODS_APPLC_DV_CD = '03' THEN 'goods'
WHEN GE.GOODS_APPLC_DV_CD = '04' THEN 'except_goods' -- CTGRY
WHEN GE.GOODS_APPLC_DV_CD = '05' THEN 'except_goods'
END AS choice_type, /*카테고리를 상품으로 치환해서 반환*/
TMG.GOODS_INNB AS goods_seq,
TMG.SOPMAL_CD
-- TMG.CTGRY_ID,
-- TMG.CTGRY_NM,
-- TMG.UPPER_CTGRY_ID,
-- TMG.CTGRY_DEPTH,
-- TMG.CTGRY_CD,
-- TMG.CTGRY_ID AS category_code
FROM GC_EVENT GE
INNER JOIN GC_EVENT_CHOICE EC
ON EC.SOPMAL_CD = GE.SOPMAL_CD
AND EC.EVT_INNB = GE.EVT_INNB
INNER JOIN
(
SELECT G.GOODS_NM,
G.GOODS_INNB,
-- GGO.GOODS_OPTN_INNB,
-- GGO.OPTN_TY,
G.SOPMAL_CD,
C1.CTGRY_ID,
C1.CTGRY_NM,
C1.UPPER_CTGRY_ID,
C1.CTGRY_DEPTH,
C1.CTGRY_CD
FROM GC_GOODS G
-- INNER JOIN GC_GOODS_OPTION GGO
-- ON GGO.GOODS_INNB = G.GOODS_INNB
-- AND GGO.SOPMAL_CD = G.SOPMAL_CD
-- AND GGO.OPTN_EXPSR_AT = 'Y'
INNER JOIN GC_CATEGORY_LINK GCL1
ON G.GOODS_INNB = GCL1.GOODS_INNB
AND G.SOPMAL_CD = GCL1.SOPMAL_CD
INNER JOIN GC_CATEGORY C1
ON C1.CTGRY_ID = GCL1.CTGRY_ID
AND C1.SOPMAL_CD = G.SOPMAL_CD
AND C1.USE_AT = 'Y'
AND C1.TM_EXPSR_AT = 'Y'
WHERE G.SOPMAL_CD = #{order_site}
AND G.GOODS_STTUS_CD = '01'
AND G.GOODS_KND_CD = '01'
AND G.USE_AT = 'Y'
AND (G.EXPSR_DV_CD = '01' OR (G.EXPSR_DV_CD = '03' AND DATE_FORMAT(SYSDATE(), '%Y-%m-%d') BETWEEN G.EXPSR_BGN_DT AND G.EXPSR_END_DT))
) TMG
ON EC.SOPMAL_CD = TMG.SOPMAL_CD
AND CASE WHEN GE.GOODS_APPLC_DV_CD IN ('02', '04') THEN EC.CTGRY_ID = TMG.CTGRY_ID
WHEN GE.GOODS_APPLC_DV_CD IN ('03', '05') THEN EC.GOODS_INNB = TMG.GOODS_INNB
ELSE 0
END
WHERE 1 = 1
AND GE.SOPMAL_CD = #{order_site}
AND GE.EVT_INNB = #{gift_seq}
GROUP BY gift_seq, GE.GOODS_APPLC_DV_CD,
choice_type,
goods_seq,
TMG.SOPMAL_CD
ORDER BY GOODS_SEQ
</select>
<!--증정 상품-->
<select id="selectBOTmGiftList" resultType="java.util.Map">
SELECT GEB.EVT_BNEF_INNB AS gift_benefit_seq,
GEB.EVT_INNB AS gift_seq,
'' AS benefit_rule,
GEB.BGN_AMT AS sprice,
GEB.END_AMT AS eprice,
GEB.PROVD_CNT AS ea,
CASE
WHEN COUNT(GEBG.GOODS_INNB) > 0 THEN GROUP_CONCAT(GEBG.GOODS_INNB)
ELSE NULL
END AS gift_goods_seq /*상품고유번호 concat해서 밑에 in절로 뽑음*/
FROM GC_EVENT_BENEFITS GEB
INNER JOIN GC_EVENT_BENEFIT_GIFT GEBG
ON GEB.SOPMAL_CD = GEBG.SOPMAL_CD
AND GEB.EVT_BNEF_INNB = GEBG.EVT_BNEF_INNB
WHERE GEB.SOPMAL_CD = #{order_site}
AND GEB.EVT_INNB = #{gift_seq}
GROUP BY GEB.EVT_BNEF_INNB,
GEB.EVT_INNB,
GEB.BGN_AMT,
GEB.END_AMT,
GEB.PROVD_CNT
ORDER BY GEB.BGN_AMT
</select>
<!--상품 조회-->
<select id="selectBOTmGiftGoodsList" resultType="java.util.Map">
SELECT GG.GOODS_INNB AS goods_seq,
CASE
WHEN GG.GOODS_KND_CD = '01' THEN 'goods'
ELSE 'gift'
END AS goods_type,
CASE
WHEN GG.GOODS_STTUS_CD = '01' THEN 'normal'
WHEN GG.GOODS_STTUS_CD = '02' THEN 'runout'
WHEN GG.GOODS_STTUS_CD = '03' THEN 'unsold'
END AS goods_status,
CASE
WHEN GG.EXPSR_DV_CD = '01' THEN 'look'
WHEN GG.EXPSR_DV_CD = '02' THEN 'notLook'
WHEN GG.EXPSR_DV_CD = '03' AND NOW() BETWEEN GG.EXPSR_BGN_DT AND GG.EXPSR_END_DT THEN 'look'
ELSE 'notLook'
END AS goods_view,
GG.GOODS_CD AS goods_code,
GG.GOODS_NM AS goods_name,
GGO.GOODS_OPTN_INNB AS option_seq
FROM GC_GOODS GG
INNER JOIN GC_GOODS_OPTION GGO
ON GG.GOODS_INNB = GGO.GOODS_INNB
AND GG.SOPMAL_CD = GGO.SOPMAL_CD
AND GGO.USE_AT = 'Y'
WHERE GG.GOODS_INNB IN (${giftGoodsSeq})
AND GG.SOPMAL_CD = #{order_site}
</select>
<!--결제정보-->
<select id="selectOrdrSetleInfo" resultType="Map">
SELECT SETLE_COMPT_AT AS deposit_yn,
SETLE_DT AS deposit_date,
VIRTL_ACNTNB AS virtual_account
FROM GC_ORDER_SETLE
WHERE ORDR_INNB = #{order_seq}
AND SOPMAL_CD = #{order_site}
LIMIT 1
</select>
<!--휴대전화로 회원검색-->
<select id="selectBOTmMbrInfo" resultType="Map">
SELECT
MBR_INNB AS member_seq,
MBR_NM AS user_name,
CAST(AES_DECRYPT(UNHEX(GM.EMAIL) , #{secretKey}) AS CHAR(50)) AS email,
'done' AS status
FROM GC_MEMBER GM
WHERE GM.USE_AT = 'Y'
AND GM.MBR_DV_CD = 'GC'
AND MBR_NM = #{user_name}
AND MBTLNB = HEX(AES_ENCRYPT(REPLACE(#{cellphone}, '-', ''), #{secretKey}))
ORDER BY MBR_INNB DESC
LIMIT 1
</select>
<!--결제성공시 또는 주문접수 완료시 필요 데이터 set-->
<select id="selectBOTmOrdrInfo" resultType="Map">
SELECT
GO.TM_ORDR_INNB AS tm_order_seq,
GO.ORDR_INNB AS order_seq,
'결제성공' AS order_status,
FN_GET_COMMCODE_NAME('ORDR_STTUS', GO.ORDR_STTUS_CD) AS order_msg,
GOS.SETLE_COMPT_AT AS deposit_yn,
GOS.SETLE_DT AS deposit_date,
GOS.VIRTL_ACNTNB AS virtual_account,
GOS.VIRTL_ACNT_RCPMNY_LMTT_DE_CTY AS virtual_date,
GO.ORDR_STTUS_CD AS step
FROM
GC_ORDER GO
INNER JOIN GC_ORDER_SETLE GOS
ON GO.ORDR_INNB = GOS.ORDR_INNB
AND GO.SOPMAL_CD = GOS.SOPMAL_CD
WHERE
GO.SOPMAL_CD = #{sopmalCd}
AND GO.ORDR_INNB = #{ordrInnb}
</select>
<!-- 싱크 관련 -->
<!--최근 주문 내역-->
<select id="selectBOTmRecentOrdrList" resultType="Map">
SELECT
O.ORDR_INNB AS order_seq,
O.REGIST_DT AS regist_date,
O.RL_SETLE_AMT AS settleprice,
CASE
WHEN GOS.SETLE_TY_CD = '01' THEN 'card'
WHEN GOS.SETLE_TY_CD = '02' THEN 'bank'
WHEN GOS.SETLE_TY_CD = '03' THEN 'account'
WHEN GOS.SETLE_TY_CD = '04' THEN 'virtual'
WHEN GOS.SETLE_TY_CD = '05' THEN 'escrow_virtual'
WHEN GOS.SETLE_TY_CD = '06' THEN 'escrow_account'
WHEN GOS.SETLE_TY_CD = '07' THEN 'cellphone'
WHEN GOS.SETLE_TY_CD = '08' THEN 'point'
WHEN GOS.SETLE_TY_CD = '09' THEN 'pos'
WHEN GOS.SETLE_TY_CD = '10' THEN 'payco_coupon'
WHEN GOS.SETLE_TY_CD = '11' THEN 'multi'
END AS payment,
FN_GET_COMMCODE_NAME('SETLE_MTH',GOS.SETLE_TY_CD) AS payment_name,
IFNULL(S.TENTCPN_NM , '') AS store_name,
GROUP_CONCAT(I.GOODS_NM, ' x ', D.ORDR_QY,IF(D.STEP85 > 0, concat('(-', D.STEP85, ')'), ''),'개'SEPARATOR ', ') AS goods_list
FROM
GC_ORDER O
INNER JOIN GC_ORDER_ITEM I
ON
I.ORDR_INNB = O.ORDR_INNB
AND O.SOPMAL_CD = I.SOPMAL_CD
INNER JOIN GC_ORDER_ITEM_OPTION D
ON
D.ORDR_GOODS_INNB = I.ORDR_GOODS_INNB
AND D.SOPMAL_CD = I.SOPMAL_CD
INNER JOIN GC_ORDER_SETLE GOS
ON
O.ORDR_INNB = GOS.ORDR_INNB
AND O.SOPMAL_CD = GOS.SOPMAL_CD
LEFT JOIN GC_STORE S
ON
S.STR_INNB = O.STR_INNB
WHERE
O.MBR_INNB = #{member_seq}
AND O.SOPMAL_CD = #{order_site}
AND O.ORDR_STTUS_CD BETWEEN 25 AND 75
AND D.ORDR_QY > D.STEP85
GROUP BY
O.ORDR_INNB,
O.REGIST_DT,
O.RL_SETLE_AMT,
GOS.SETLE_TY_CD,
S.TENTCPN_NM
ORDER BY
O.ORDR_INNB DESC
LIMIT 1
</select>
<!--주문내역-->
<select id="selectBOTmOrdrList">
SELECT
GROUP_CONCAT(
IF(ISNULL(E.DLIVY_INNB), '', CONCAT('{','\"status\":\"', E.DLIVY_STTUS_CD, '\"',
',\"company\":\"', ifnull(S.HDRYCPN_NM, ''), '\"',
',\"delivery_company_code\":\"', ifnull(E.HDRYCPN_CD, ''), '\"',
',\"delivery_number\":\"', ifnull(E.INVCNB, ''), '\"',
',\"export_date\":\"', ifnull(E.DLIVY_DT, ''), '\"',
',\"shipping_date\":\"', ifnull(E.DLVY_COMPT_DT, ''), '\"','}' )) SEPARATOR '|'
) AS export_list,
IFNULL((
SELECT
SUM(IFNULL(REFUND_AMT, 0))
FROM GC_ORDER_REFUND
WHERE ORDR_INNB = O.ORDR_INNB AND REFUND_PROCS_STTUS_CD = '03'
), 0) AS refund_price,
O.ORDR_STTUS_CD AS step,
GOS.SETLE_COMPT_AT AS deposit_yn,
DATE_FORMAT(GOS.SETLE_DT,'%Y-%m-%d %H:%i:%s') AS deposit_date,
GOS.RCPMNYER_NM AS depositor,
GOS.RCPMNY_ACNTNB AS bank_account,
CASE
WHEN O.ORDR_STTUS_CD = 15 THEN O.RL_SETLE_AMT
ELSE 0
END AS remain_price, /* 복합결제 안하니 주문접수일 때 실결제금액으로 남은금액 알려줌 */
'' AS multi_pay_list,
O.ORDR_INNB order_seq
FROM GC_ORDER O
INNER JOIN GC_ORDER_SETLE GOS
ON O.SOPMAL_CD = GOS.SOPMAL_CD
AND O.ORDR_INNB = GOS.ORDR_INNB
LEFT JOIN GC_GOODS_EXPORT E
ON E.ORDR_INNB = O.ORDR_INNB
AND E.SOPMAL_CD = O.SOPMAL_CD
LEFT JOIN GC_SWEET_TRACKER_CODE S
ON S.GCONE_HDRYCPN_CD=E.HDRYCPN_CD
WHERE 1=1
AND O.SOPMAL_CD = #{order_site}
AND O.ORDR_INNB IN <foreach collection="arr" item="arr" separator="," open="(" close=")">${arr}</foreach>
GROUP BY
O.ORDR_INNB ,
O.ORDR_STTUS_CD,
GOS.SETLE_COMPT_AT,
GOS.SETLE_DT,
GOS.RCPMNYER_NM,
GOS.RCPMNY_ACNTNB,
O.RL_SETLE_AMT
</select>
<!--환불 동기화-->
<select id="selectTmRefundList" resultType="Map">
SELECT
GOR.ORDER_REFUND_INNB AS refund_seq,
CASE
WHEN GOR.REFUND_PROCS_STTUS_CD = '01' THEN 'request'
WHEN GOR.REFUND_PROCS_STTUS_CD = '02' THEN 'ing'
WHEN GOR.REFUND_PROCS_STTUS_CD = '03' THEN 'complete'
END AS status,
GOR.REFUND_CD AS refund_code
FROM
GC_ORDER_REFUND GOR
WHERE
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(order_site)">GOR.SOPMAL_CD = #{order_site}</when>
<otherwise>GOR.SOPMAL_CD IN ('CH','NC')</otherwise>
</choose>
AND GOR.REFUND_CD IN <foreach collection="arr" item="arr" separator="," open="(" close=")">${arr}</foreach>
</select>
<!--반품 동기화-->
<select id="selectTmReturnList" resultType="Map">
SELECT
GOR.ORDER_REFUND_INNB AS return_seq,
CASE
WHEN GOR.RETURN_PROCS_STTUS_CD = '01' THEN 'request'
WHEN GOR.RETURN_PROCS_STTUS_CD = '02' THEN 'complete'
END AS status,
GOR.RETURN_CD AS return_code
FROM
GC_ORDER_REFUND GOR
WHERE
<choose>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(order_site)">GOR.SOPMAL_CD = #{order_site}</when>
<otherwise>GOR.SOPMAL_CD IN ('CH','NC')</otherwise>
</choose>
AND GOR.RETURN_CD IN <foreach collection="arr" item="arr" separator="," open="(" close=")">${arr}</foreach>
</select>
<!--여러 회원 최근 주문 내역-->
<select id="selectTmManyMbrRecentOrdrList" resultType="Map">
SELECT
O.MBR_INNB AS member_seq,
O.ORDR_INNB AS order_seq,
FN_GET_SOPMAL_NAME(O.SOPMAL_CD) AS shop_name,
LEFT(O.REGIST_DT,10) AS regist_date,
O.RL_SETLE_AMT AS settleprice,
CASE
WHEN GOS.SETLE_TY_CD = '01' THEN 'card'
WHEN GOS.SETLE_TY_CD = '02' THEN 'bank'
WHEN GOS.SETLE_TY_CD = '03' THEN 'account'
WHEN GOS.SETLE_TY_CD = '04' THEN 'virtual'
WHEN GOS.SETLE_TY_CD = '05' THEN 'escrow_virtual'
WHEN GOS.SETLE_TY_CD = '06' THEN 'escrow_account'
WHEN GOS.SETLE_TY_CD = '07' THEN 'cellphone'
WHEN GOS.SETLE_TY_CD = '08' THEN 'point'
WHEN GOS.SETLE_TY_CD = '09' THEN 'pos'
WHEN GOS.SETLE_TY_CD = '10' THEN 'payco_coupon'
WHEN GOS.SETLE_TY_CD = '11' THEN 'multi'
END AS payment,
IFNULL(R.TENTCPN_NM, '') AS store_name,
GROUP_CONCAT(I.GOODS_NM, ' x ', GOIO.ORDR_QY, IF(GOIO.STEP85 > 0, concat('(-', GOIO.STEP85, ')'), ''), '개' SEPARATOR ', ') AS goods_list
FROM
GC_ORDER O
INNER JOIN GC_ORDER_ITEM I
ON O.ORDR_INNB = I.ORDR_INNB
AND O.SOPMAL_CD = I.SOPMAL_CD
AND I.GOODS_NM != ''
INNER JOIN GC_ORDER_ITEM_OPTION GOIO
ON I.ORDR_GOODS_INNB = GOIO.ORDR_GOODS_INNB
AND I.SOPMAL_CD = GOIO.SOPMAL_CD
AND GOIO.CNSMRPRIC > 0
INNER JOIN GC_ORDER_SETLE GOS
ON O.ORDR_INNB = GOS.ORDR_INNB
AND O.SOPMAL_CD = GOS.SOPMAL_CD
LEFT JOIN GC_ORDER_POSINFO GOP
ON GOP.ORDER_SEQ = O.ORDR_INNB
LEFT JOIN GC_STORE R
ON GOP.STORE_SEQ = R.STR_INNB
WHERE
O.ORDR_INNB IN (
SELECT
MAX(O2.ORDR_INNB)
FROM
GC_ORDER O2
INNER JOIN GC_ORDER_ITEM GOI
ON O2.ORDR_INNB = GOI.ORDR_INNB
AND O2.SOPMAL_CD = GOI.SOPMAL_CD
INNER JOIN GC_ORDER_ITEM_OPTION GOIO
ON GOI.ORDR_GOODS_INNB = GOIO.ORDR_GOODS_INNB
AND GOI.SOPMAL_CD = GOIO.SOPMAL_CD
WHERE
1 = 1
<choose>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(order_site)">AND O2.SOPMAL_CD = #{order_site}</when>
<otherwise>AND O2.SOPMAL_CD IN ('CH','NC')</otherwise>
</choose>
AND O2.MBR_INNB IN <foreach collection="arr" item="arr" separator="," open="(" close=")">${arr}</foreach>
AND O2.MBR_DV_CD = 'GC'
AND O2.SLE_ENVRN_CD <![CDATA[<>]]> 'TM'
AND O2.ORDR_STTUS_CD BETWEEN '25' AND '75'
AND GOIO.ORDR_QY > GOIO.STEP85
GROUP BY
O2.MBR_INNB)
<choose>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(order_site)">AND O.SOPMAL_CD = #{order_site}</when>
<otherwise>AND O.SOPMAL_CD IN ('CH','NC')</otherwise>
</choose>
AND O.MBR_INNB IN <foreach collection="arr" item="arr" separator="," open="(" close=")">${arr}</foreach>
AND O.MBR_DV_CD = 'GC'
GROUP BY
O.MBR_INNB,
O.ORDR_INNB,
O.REGIST_DT,
O.RL_SETLE_AMT,
O.SOPMAL_CD ,
GOS.SETLE_TY_CD,
R.TENTCPN_NM
</select>
</mapper>