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,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>