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