merge master into develop - CscListRForm.jsp FAQ 아코디언 버그 수정
This commit is contained in:
@@ -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>
|
||||
@@ -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
@@ -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 <= NOW())
|
||||
AND (b.BNF_END_DT IS NULL OR b.BNF_END_DT >= 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>
|
||||
@@ -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 > 0
|
||||
AND p.BNF_PRT_DT >= 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 >= 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 <= NOW()) -- 시작일이 없거나 시작일 이후
|
||||
AND (BNF_END_DT IS NULL OR BNF_END_DT >= 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 < 5
|
||||
OR TOT_USE_LEAF_CNT < (
|
||||
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 <= NOW() AND b.BNF_END_DT >= 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 <= NOW() AND b.BNF_END_DT >= 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 >= 5 -- 5단계 이상
|
||||
AND TOT_USE_LEAF_CNT >= ( -- 필요한 초록잎을 모두 사용한 경우만
|
||||
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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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) >= COALESCE(SUM(daily_target), 0)
|
||||
AND COALESCE(SUM(daily_target), 0) > 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 > 0
|
||||
)
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -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>
|
||||
@@ -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() < 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>
|
||||
@@ -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>
|
||||
@@ -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 >= DATE(MDI.REGIST_DT))
|
||||
</if>
|
||||
AND O.SETLE_COMPT_DT <= 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() > 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() <= 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() <= 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 >= 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 >= DATE_SUB(NOW(), INTERVAL 12 MONTH)
|
||||
<if test="lastStmpInnb != null and lastStmpInnb > 0">
|
||||
AND BS.REGIST_DT < (
|
||||
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() <= 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() <= 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 < 10
|
||||
AND NOW() <= 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() <= 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 >= 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 >= 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 >= 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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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) >= 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 >= 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) >= 10000 THEN 100
|
||||
ELSE FLOOR(MAX(BP.STEP_CNT) * 100 / 10000)
|
||||
END as achievementRate, -- 달성률(%) 계산
|
||||
CASE
|
||||
WHEN MAX(BP.STEP_CNT) >= 10000 THEN 4 -- 만보 달성
|
||||
WHEN MAX(BP.STEP_CNT) >= 7500 THEN 3 -- 7500 이상
|
||||
WHEN MAX(BP.STEP_CNT) >= 5000 THEN 2 -- 5000 이상
|
||||
WHEN MAX(BP.STEP_CNT) >= 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 <= NOW()) -- 시작일 체크
|
||||
AND (B.BNF_END_DT IS NULL OR B.BNF_END_DT >= 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 <= NOW()) -- 시작일 체크
|
||||
AND (B.BNF_END_DT IS NULL OR B.BNF_END_DT >= 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} >= 10000 AND STEP_CNT < 10000 THEN #{paidLeafCnt}
|
||||
WHEN #{stepCnt} >= 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 <= NOW()) -- 시작일 체크
|
||||
AND (B.BNF_END_DT IS NULL OR B.BNF_END_DT >= 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 <= NOW()) -- 시작일 체크
|
||||
AND (B.BNF_END_DT IS NULL OR B.BNF_END_DT >= 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>
|
||||
Reference in New Issue
Block a user