merge master into develop - CscListRForm.jsp FAQ 아코디언 버그 수정

This commit is contained in:
jilee4unity
2026-05-28 23:34:06 +09:00
7250 changed files with 570509 additions and 25 deletions

View File

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