92 lines
5.0 KiB
XML
92 lines
5.0 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
|
<mapper namespace="com.zioinfo.mall.event.mapper.EventMapper">
|
|
|
|
<!-- ===== 이벤트 ===== -->
|
|
<select id="findEvents" resultType="com.zioinfo.mall.event.MallEvent">
|
|
SELECT * FROM mall_event
|
|
<where>
|
|
<if test="status != null and status != ''">AND status = #{status}</if>
|
|
<if test="type != null and type != ''">AND event_type = #{type}</if>
|
|
<if test="activeOnly != null and activeOnly == true">AND active = TRUE</if>
|
|
</where>
|
|
ORDER BY id DESC
|
|
</select>
|
|
|
|
<!-- 진행중(PUBLISHED + 기간 내). tier 지정 시 전체대상 또는 해당 등급 포함만 -->
|
|
<select id="findOngoing" resultType="com.zioinfo.mall.event.MallEvent">
|
|
SELECT * FROM mall_event
|
|
WHERE status = 'PUBLISHED' AND active = TRUE
|
|
AND (start_date IS NULL OR start_date <= CURRENT_DATE)
|
|
AND (end_date IS NULL OR end_date >= CURRENT_DATE)
|
|
<if test="tier != null and tier != ''">
|
|
AND (target_tiers IS NULL OR target_tiers = '' OR position(#{tier} in target_tiers) > 0)
|
|
</if>
|
|
ORDER BY start_date DESC, id DESC
|
|
</select>
|
|
|
|
<select id="findById" resultType="com.zioinfo.mall.event.MallEvent">SELECT * FROM mall_event WHERE id = #{id}</select>
|
|
<select id="findByCode" resultType="com.zioinfo.mall.event.MallEvent">SELECT * FROM mall_event WHERE code = #{code}</select>
|
|
|
|
<insert id="insert" parameterType="com.zioinfo.mall.event.MallEvent" useGeneratedKeys="true" keyProperty="id">
|
|
INSERT INTO mall_event
|
|
(code, title, event_type, description, start_date, end_date, target_tiers, store_ids,
|
|
coupon_id, bonus_point_rate, gift_description, status, active, created_by)
|
|
VALUES
|
|
(#{code}, #{title}, COALESCE(#{eventType},'DISCOUNT'), #{description}, #{startDate}, #{endDate},
|
|
#{targetTiers}, #{storeIds}, #{couponId}, #{bonusPointRate}, #{giftDescription},
|
|
COALESCE(#{status},'DRAFT'), COALESCE(#{active},TRUE), #{createdBy})
|
|
</insert>
|
|
<update id="update">
|
|
UPDATE mall_event SET
|
|
title=#{title}, event_type=COALESCE(#{eventType},event_type), description=#{description},
|
|
start_date=#{startDate}, end_date=#{endDate}, target_tiers=#{targetTiers}, store_ids=#{storeIds},
|
|
coupon_id=#{couponId}, bonus_point_rate=#{bonusPointRate}, gift_description=#{giftDescription},
|
|
status=COALESCE(#{status},status), active=COALESCE(#{active},active), updated_at=NOW()
|
|
WHERE id=#{id}
|
|
</update>
|
|
<update id="updateStatus">UPDATE mall_event SET status=#{status}, updated_at=NOW() WHERE id=#{id}</update>
|
|
<delete id="delete">DELETE FROM mall_event WHERE id=#{id}</delete>
|
|
|
|
<!-- ===== 배너 ===== -->
|
|
<select id="findBanners" resultType="com.zioinfo.mall.event.MallEventBanner">
|
|
SELECT * FROM mall_event_banner
|
|
<where>
|
|
event_id = #{eventId}
|
|
<if test="activeOnly != null and activeOnly == true">AND active = TRUE</if>
|
|
</where>
|
|
ORDER BY sort_order ASC, id ASC
|
|
</select>
|
|
<!-- 스토어프론트: 진행중 이벤트의 활성 배너 -->
|
|
<select id="findActiveBanners" resultType="com.zioinfo.mall.event.MallEventBanner">
|
|
SELECT b.* FROM mall_event_banner b
|
|
JOIN mall_event e ON e.id = b.event_id
|
|
WHERE b.active = TRUE AND e.status = 'PUBLISHED' AND e.active = TRUE
|
|
AND (e.start_date IS NULL OR e.start_date <= CURRENT_DATE)
|
|
AND (e.end_date IS NULL OR e.end_date >= CURRENT_DATE)
|
|
ORDER BY b.sort_order ASC, b.id ASC
|
|
</select>
|
|
<insert id="insertBanner" parameterType="com.zioinfo.mall.event.MallEventBanner" useGeneratedKeys="true" keyProperty="id">
|
|
INSERT INTO mall_event_banner (event_id, image_url, headline, subtext, link_url, sort_order, active)
|
|
VALUES (#{eventId}, #{imageUrl}, #{headline}, #{subtext}, #{linkUrl}, COALESCE(#{sortOrder},0), COALESCE(#{active},TRUE))
|
|
</insert>
|
|
<delete id="deleteBanner">DELETE FROM mall_event_banner WHERE id=#{id}</delete>
|
|
<delete id="deleteBannersByEvent">DELETE FROM mall_event_banner WHERE event_id=#{eventId}</delete>
|
|
|
|
<!-- ===== 참여 / 성과 ===== -->
|
|
<insert id="insertParticipation">
|
|
INSERT INTO mall_event_participation (event_id, owner, coupon_id, order_no, reward)
|
|
VALUES (#{eventId}, #{owner}, #{couponId}, #{orderNo}, #{reward})
|
|
</insert>
|
|
<select id="performance" resultType="java.util.Map">
|
|
SELECT
|
|
(SELECT COUNT(*) FROM mall_event_participation p WHERE p.event_id = #{eventId}) AS "participations",
|
|
(SELECT COUNT(DISTINCT p.owner) FROM mall_event_participation p WHERE p.event_id = #{eventId}) AS "participants",
|
|
(SELECT COUNT(DISTINCT p.order_no) FROM mall_event_participation p WHERE p.event_id = #{eventId} AND p.order_no IS NOT NULL) AS "linkedOrders",
|
|
COALESCE((SELECT SUM(o.pay_amount) FROM mall_event_participation p
|
|
JOIN mall_order o ON o.order_no = p.order_no
|
|
WHERE p.event_id = #{eventId} AND o.status NOT IN ('CANCELLED','PENDING')),0) AS "attributedSales"
|
|
</select>
|
|
|
|
</mapper>
|