eskim 5 лет назад
Родитель
Сommit
4300d2e322

+ 12 - 1
src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java

@@ -6,6 +6,7 @@ import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.CardPromotion;
 import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Delivery;
+import com.style24.persistence.domain.Freegift;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsCompose;
 import com.style24.persistence.domain.GoodsDesc;
@@ -315,7 +316,17 @@ public interface TsfGoodsDao {
 	 * @date 2021. 4. 11
 	 */
 	Collection<Tmtb> getTmtbList(Goods goods);
-
+	
+	/**
+	 * 상품의 사은품 목록 
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 4. 13
+	 */
+	Collection<Freegift> getFreeGoodsList(Goods goods);
+	
 	/**
 	 * 컨텐츠카테고리상품 목록
 	 * @param cate - 카테고리 정보

+ 12 - 0
src/main/java/com/style24/front/biz/service/TsfGoodsService.java

@@ -15,6 +15,7 @@ import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.CardPromotion;
 import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Delivery;
+import com.style24.persistence.domain.Freegift;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsCompose;
 import com.style24.persistence.domain.GoodsDesc;
@@ -712,6 +713,17 @@ public class TsfGoodsService {
 	public Collection<Tmtb> getTmtbList(Goods goods) {
 		return goodsDao.getTmtbList(goods);
 	}
+	
+	/**
+	 * 상품의 다다익선 목록 
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 4. 13
+	 */
+	public Collection<Freegift> getFreeGoodsList(Goods goods) {
+		return goodsDao.getFreeGoodsList(goods);
+	}
 
 	/**
 	 * 컨텐츠카테고리상품 목록

+ 7 - 1
src/main/java/com/style24/front/biz/web/TsfGoodsController.java

@@ -234,6 +234,11 @@ public class TsfGoodsController extends TsfBaseController {
 			// 다다익선
 			paramsGoods.setMaxRownum(1);
 			mav.addObject("tmtbList", goodsService.getTmtbList(paramsGoods));
+			
+			// 사은품
+			paramsGoods.setMaxRownum(1);
+			mav.addObject("freeGoodsList", goodsService.getFreeGoodsList(paramsGoods));
+			
 
 			// 베스트 상품평
 			Review review = new Review();
@@ -561,8 +566,9 @@ public class TsfGoodsController extends TsfBaseController {
 		// 다다익선
 		paramsGoods.setMaxRownum(1);
 		mav.addObject("tmtbList", goodsService.getTmtbList(paramsGoods));
-
 		// 사은품
+		paramsGoods.setMaxRownum(1);
+		mav.addObject("freeGoodsList", goodsService.getFreeGoodsList(paramsGoods));
 
 		// 상품 기본정보 --즉시할인정보
 		mav.addObject("goodsInfo", goods);

+ 28 - 0
src/main/java/com/style24/persistence/domain/Freegift.java

@@ -0,0 +1,28 @@
+package com.style24.persistence.domain;
+
+import lombok.Data;
+
+
+/**
+ * 사은품 Domain
+ *
+ * @author eskim
+ * @since 2021. 04. 12
+ */
+@SuppressWarnings("serial")
+@Data
+public class Freegift {
+	
+	private Integer freegiftSq;
+	private Integer freegiftSectionSq;
+	private Integer afreegiftValSq;
+	private String allYn;
+	private String sectionGb;
+	private String sectionVal;
+	private String productNo;
+	private String goodsNm;
+	private String itemQty;
+	private String leftQty;
+	private String targetVal;
+	
+}

+ 81 - 27
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -626,6 +626,11 @@
 		     , FN_GET_GOODS_NM(GOODS_NM,GOODS_GB,FOREIGN_BUY_YN,PARALLEL_IMPORT_YN,ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
 		     , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = Z.GOODS_CD AND COLOR_CD = IFNULL(Z.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
 		     , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = Z.GOODS_CD AND COLOR_CD = IFNULL(Z.MAIN_COLOR_CD,'XX') AND MOUSEOVER_IMG_YN = 'Y') AS SYS_IMG_NM2
+		     , V.VIDEO_GB_M
+		     , V.VIDEO_VAL_M
+		     , V.VIDEO_GB_S
+		     , V.VIDEO_VAL_S
+		     , (CASE WHEN W.GOODS_CD IS NULL THEN 'N' ELSE 'Y' END) AS WISH_YN
 		FROM (
 		      SELECT B.GOODS_CD 
 		           , G.GOODS_NM
@@ -643,11 +648,6 @@
 		           , S.STOCK_QTY
 		           , S.SOLDOUT_YN
 		           , S.OPT_CD
-		           , V.VIDEO_GB_M
-		           , V.VIDEO_VAL_M
-		           , V.VIDEO_GB_S
-		           , V.VIDEO_VAL_S
-		           , (CASE WHEN W.GOODS_CD IS NULL THEN 'N' ELSE 'Y' END) AS WISH_YN
 		      FROM TB_TMTB A
 		      INNER JOIN TB_TMTB_APPLY_GOODS B ON A.TMTB_SQ  = B.TMTB_SQ
 		                                       AND B.DEL_YN = 'N'
@@ -683,26 +683,6 @@
 		                       FROM VW_STOCK
 		                       WHERE DISP_YN = 'Y'
 		                       GROUP BY GOODS_CD) S ON G.GOODS_CD = S.GOODS_CD
-		      LEFT OUTER JOIN (SELECT MAX(GOODS_CD) AS GOODS_CD 
-		                             , MAX(CASE WHEN  RNUM = 1 THEN  VIDEO_GB END) AS  VIDEO_GB_M
-		                             , MAX(CASE WHEN  RNUM = 1 THEN  VIDEO_VAL END) AS  VIDEO_VAL_M
-		                             , MAX(CASE WHEN  RNUM = 2 THEN  VIDEO_GB END) AS  VIDEO_GB_S
-		                             , MAX(CASE WHEN  RNUM = 2 THEN  VIDEO_VAL END) AS  VIDEO_VAL_S
-		                       FROM (
-		                             SELECT A.DISPLOC_VAL AS GOODS_CD
-		                                  , B.VIDEO_GB 
-		                                  , B.VIDEO_VAL 
-		                                  , A.REG_DT 
-		                                  , RANK() OVER(PARTITION BY A.DISPLOC_VAL ORDER BY A.REG_DT ) RNUM 
-		                             FROM TB_VIDEO_DISPLOC  A
-		                             INNER JOIN  TB_VIDEO B ON A.VIDEO_SQ = B.VIDEO_SQ 
-		                                                    AND B.DISP_YN ='Y'
-		                             WHERE A.DISPLOC_GB ='G'
-		                             AND A.DISP_YN = 'Y'
-		                            ) V
-		                       ) V ON G.GOODS_CD = V.GOODS_CD
-		      LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
-		                              AND IFNULL(#{custNo}, 0) = W.CUST_NO
 		      WHERE NOW() BETWEEN A.TMTB_ST_DT AND A.TMTB_ED_DT
 		      AND A.TMTB_STAT ='G232_11'
 		       <![CDATA[
@@ -711,6 +691,26 @@
 		       ]]>
 		      ORDER BY A.TMTB_SQ 
 		) Z
+		LEFT OUTER JOIN (SELECT MAX(GOODS_CD) AS GOODS_CD 
+		                       , MAX(CASE WHEN  RNUM = 1 THEN  VIDEO_GB END) AS  VIDEO_GB_M
+		                       , MAX(CASE WHEN  RNUM = 1 THEN  VIDEO_VAL END) AS  VIDEO_VAL_M
+		                       , MAX(CASE WHEN  RNUM = 2 THEN  VIDEO_GB END) AS  VIDEO_GB_S
+		                       , MAX(CASE WHEN  RNUM = 2 THEN  VIDEO_VAL END) AS  VIDEO_VAL_S
+		                 FROM (
+		                       SELECT A.DISPLOC_VAL AS GOODS_CD
+		                            , B.VIDEO_GB 
+		                            , B.VIDEO_VAL 
+		                            , A.REG_DT 
+		                            , RANK() OVER(PARTITION BY A.DISPLOC_VAL ORDER BY A.REG_DT ) RNUM 
+		                       FROM TB_VIDEO_DISPLOC  A
+		                       INNER JOIN  TB_VIDEO B ON A.VIDEO_SQ = B.VIDEO_SQ 
+		                                              AND B.DISP_YN ='Y'
+		                       WHERE A.DISPLOC_GB ='G'
+		                       AND A.DISP_YN = 'Y'
+		                      ) V
+		                 ) V ON Z.GOODS_CD = V.GOODS_CD
+		LEFT OUTER JOIN TB_WISHLIST W ON Z.GOODS_CD = W.GOODS_CD
+		                        AND IFNULL(#{custNo}, 0) = W.CUST_NO
 		LIMIT #{maxRownum}
 	</select>
 	
@@ -886,10 +886,18 @@
 		      INNER JOIN TB_TMTB_VAL D ON C.TMTB_SQ = D.TMTB_SQ
 		                               AND C.TMTB_SECTION_SQ  = D.TMTB_SECTION_SQ  
 		                               AND D.DEL_YN  = 'N'
+		      INNER JOIN TB_TMTB_APPLY_GOODS B ON A.TMTB_SQ = B.TMTB_SQ
+		                                       AND B.GOODS_CD =  #{goodsCd}
+		                                       AND B.DEL_YN = 'N'
+		                                       AND B.GOODS_GB IN ( 'G800_10', 'G800_20')  -- 기본과 적용상품
+		      LEFT OUTER JOIN TB_TMTB_APPLY_GOODS E ON A.TMTB_SQ = E.TMTB_SQ
+		                                       AND E.GOODS_CD = #{goodsCd}
+		                                       AND E.DEL_YN = 'N'
+		                                       AND E.GOODS_GB = 'G800_30'  -- 제외상품 
 		      WHERE NOW() BETWEEN A.TMTB_ST_DT AND A.TMTB_ED_DT
 		      AND A.TMTB_STAT ='G232_11'  -- 진행중
-		      AND A.TMTB_SQ IN (SELECT TMTB_SQ FROM TB_TMTB_APPLY_GOODS WHERE GOODS_CD =  #{goodsCd} AND DEL_YN = 'N' AND GOODS_GB IN ( 'G800_10', 'G800_20')) -- 기본과 적용상품
-		      AND A.TMTB_SQ NOT IN (SELECT TMTB_SQ FROM TB_TMTB_APPLY_GOODS WHERE GOODS_CD =  #{goodsCd} AND DEL_YN = 'N' AND GOODS_GB = 'G800_30') -- 제외상품 
+		      AND A.DEL_YN = 'N'
+		      AND E.GOODS_CD IS NULL                                      -- 제외상품이 아닌 다다익선 
 		      ORDER BY A.TMTB_SQ , C.TMTB_SECTION_SQ , D.TMTB_VAL_SQ 
 		) Z
 		WHERE 1 = 1
@@ -898,6 +906,52 @@
 		</if> 
 	</select>
 	
+	<!-- 상품의 사은품 목록 -->
+	<select id="getFreeGoodsList"  parameterType="Goods" resultType="Freegift">
+		/* TsfGoods.getFreeGoodsList */
+		SELECT Z.*
+		FROM (
+		      SELECT  A.FREEGIFT_SQ
+		            , B.FREEGIFT_SECTION_SQ
+		            , C.FREEGIFT_VAL_SQ
+		            , A.ALL_YN              -- 모두지급
+		            , B.SECTION_GB          -- G810_10|수량, G810_11|금액
+		            , B.SECTION_VAL
+		            , C.PRODUCT_NO          -- 사은품 번호
+		            , F.GOODS_NM            -- 사은품 명
+		            , C.ITEM_QTY            -- 사은품 지급 수량
+		            , C.LEFT_QTY            -- 잔여수량
+		            , D.TARGET_VAL
+		      FROM TB_FREEGIFT A
+		      INNER JOIN TB_FREEGIFT_SECTION B ON A.FREEGIFT_SQ = B.FREEGIFT_SQ
+		                                       AND B.DEL_YN = 'N'
+		      INNER JOIN TB_FREEGIFT_VAL C ON B.FREEGIFT_SQ = C.FREEGIFT_SQ
+		                                   AND B.FREEGIFT_SECTION_SQ = C.FREEGIFT_SECTION_SQ
+		                                   AND C.DEL_YN = 'N'
+		                                   AND C.LEFT_QTY > 0    -- 사은품 잔여수량
+		      INNER JOIN TB_FREE_GOODS F ON F.PRODUCT_NO = C.PRODUCT_NO
+                           AND F.USE_YN = 'Y'
+		      INNER JOIN TB_FREEGIFT_GOODS D ON A.FREEGIFT_SQ = D.FREEGIFT_SQ
+		                                   AND D.GOODS_GB  IN ( 'G800_10',  'G800_20')
+		                                   AND D.TARGET_GB = 'G260_10'
+		                                   AND D.DEL_YN = 'N'
+		                                   AND D.TARGET_VAL = #{goodsCd}
+		      LEFT OUTER JOIN TB_FREEGIFT_GOODS E ON A.FREEGIFT_SQ = E.FREEGIFT_SQ
+		                                   AND E.GOODS_GB = 'G800_30'
+		                                   AND E.TARGET_GB = 'G260_10'
+		                                   AND E.DEL_YN = 'N'
+		                                   AND E.TARGET_VAL = #{goodsCd}
+		      WHERE NOW() BETWEEN  A.FREEGIFT_STAT AND A.FREEGIFT_EDDT
+		      AND  A.FREEGIFT_STAT = 'G232_11'
+		      AND E.TARGET_VAL IS NULL
+		      AND A.DEL_YN = 'N'
+		) Z
+		WHERE 1 = 1
+		<if test="maxRownum != null and maxRownum > 0">
+		LIMIT #{maxRownum}
+		</if> 
+	</select>
+	
 	<!-- 컨텐츠카테고리상품 목록 -->
 	<select id="getContentsCategoryGoodsList"  parameterType="Cate4Srch" resultType="Goods">
 		/* TsfGoods.getContentsCategoryGoodsList */

+ 5 - 3
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html

@@ -141,8 +141,8 @@
 
 			<div class="inner" th:if="${(cardInfoList != null and !cardInfoList.empty) or
 									(goodsCouponList != null and !goodsCouponList.empty) or
-									(tmtbList != null and !tmtbList.empty)
-									}" >
+									(tmtbList != null and !tmtbList.empty) or
+									(freeGoodsList != null and !freeGoodsList.empty)}" >
 				<div class="benefit_box">
 					<dl class="bnf_shopping" th:if="${(goodsCouponList != null and !goodsCouponList.empty) or (tmtbList != null and !tmtbList.empty)}">
 						<dt>쇼핑혜택</dt>
@@ -159,7 +159,9 @@
 								<em><th:block th:text="${#numbers.formatInteger(tmtb.dcVal, 0,'COMMA')}"></th:block><th:block th:text="${(tmtb.dcWay == 'G240_10')? '원':'%'}"></th:block></em></em> 할인
 							</span>
 							</th:block>
-							<span>미니언즈 우산 증정</span>
+							<span th:if="${freeGoodsList != null and !freeGoodsList.empty}">
+							<th:block th:each="freeGoods, status : ${freeGoodsList}" th:if="${status.first}">
+							<th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'N'}" th:text="외 택1"></th:block></span>
 							<button type="button" id="btn_bnfShopping_pop" class="btn_popup" th:onclick="cfGoodsShopBenefitInfo([[${goodsInfo.goodsCd}]])"><span>자세히</span></button>
 						</dd>
 					</dl>

+ 7 - 11
src/main/webapp/WEB-INF/views/mob/goods/GoodsShopBenefitFormMob.html

@@ -36,10 +36,10 @@
 								</tr>
 								<tr th:if="${(goodsCouponList != null and !goodsCouponList.empty)}">
 									<th>쿠폰할인</th>
-									<td th:each="goodsCoupon, status : ${goodsCouponList}" th:if="${status.first}">최대
+									<td th:each="goodsCoupon, status : ${goodsCouponList}" th:if="${status.first}"><p>최대
 									<th:block th:if="${goodsCoupon.dcWay == 'G240_10'}" th:text="|${#numbers.formatInteger(goodsCoupon.dcVal, 0,'COMMA')}원|"></th:block>
 									<th:block th:unless="${goodsCoupon.dcWay == 'G240_10'}" th:text="|${goodsCoupon.dcVal}%|"></th:block>
-									 할인</td>
+									 할인</p></td>
 								</tr>
 							</tbody>
 						</table>
@@ -56,13 +56,13 @@
 							<tbody>
 								<tr th:each="tmtb, status : ${tmtbList}">
 									<th><th:block th:text="${#numbers.formatInteger(tmtb.sectionVal, 0,'COMMA')}"></th:block><th:block th:text="${(tmtb.sectionGb == 'G810_10')? '개':'금액'}"></th:block> 이상 구매 시</th>
-									<td><th:block th:text="${#numbers.formatInteger(tmtb.dcVal, 0,'COMMA')}"></th:block><th:block th:text="${(tmtb.dcWay == 'G240_10')? '원':'%'}"></th:block> 할인</td>
+									<td><p><th:block th:text="${#numbers.formatInteger(tmtb.dcVal, 0,'COMMA')}"></th:block><th:block th:text="${(tmtb.dcWay == 'G240_10')? '원':'%'}"></th:block> 할인</p></td>
 								</tr>
 							</tbody>
 						</table>
 					</div>
 				</div>	   
-				<div class="benefit_blk">
+				<div class="benefit_blk" th:if="${freeGoodsList != null and !freeGoodsList.empty}">
 					<h6>사은품</h6>
 					<div class="tbl type1">
 						<table>
@@ -71,13 +71,9 @@
 								<col width="*">
 							</colgroup>
 							<tbody>
-								<tr>
-									<th>99,999,999원 이상 구매 시</th>
-									<td>미니언즈 우산 99개 증정</td>
-								</tr>
-								<tr>
-									<th>99,999,999원 이상 구매 시</th>
-									<td>미니언즈 우산 99개 증정 외 택1</td>
+								<tr  th:each="freeGoods, status : ${freeGoodsList}">
+									<th><th:block th:text="${#numbers.formatInteger(freeGoods.sectionVal, 0,'COMMA')}"></th:block></th:block><th:block th:text="${(freeGoods.sectionGb == 'G810_10')? '개':'원'}"></th:block> 이상 구매 시</th>
+									<td><p><th:block th:text="${freeGoods.goodsNm}"></th:block> <th:block th:text="${#numbers.formatInteger(freeGoods.itemQty, 0,'COMMA')}"></th:block>개 증정 <th:block th:if="${freeGoods.allYn == 'N'}" th:text="외 택1"></th:block></p></td>
 								</tr>
 							</tbody>
 						</table>

+ 8 - 4
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html

@@ -134,10 +134,12 @@
 							</div>
 							<div class="benefit_box" th:if="${(cardInfoList != null and !cardInfoList.empty) or
 															(goodsCouponList != null and !goodsCouponList.empty) or
-															(tmtbList != null and !tmtbList.empty)
-															}" >
+															(tmtbList != null and !tmtbList.empty) or
+															(freeGoodsList != null and !freeGoodsList.empty)}" >
 								<dl>
-									<div class="bnf_shopping" th:if="${(goodsCouponList != null and !goodsCouponList.empty) or (tmtbList != null and !tmtbList.empty)}">
+									<div class="bnf_shopping" th:if="${(goodsCouponList != null and !goodsCouponList.empty) or 
+																		(tmtbList != null and !tmtbList.empty) or 
+																		(freeGoodsList != null and !freeGoodsListbList.empty) }">
 										<dt>쇼핑혜택</dt>
 											<dd>
 												<span th:if="${goodsCouponList != null and !goodsCouponList.empty}">
@@ -154,7 +156,9 @@
 												<em class="c_primary"><th:block th:text="${#numbers.formatInteger(tmtb.dcVal, 0,'COMMA')}"></th:block><th:block th:text="${(tmtb.dcWay == 'G240_10')? '원':'%'}"></th:block></em></em> 할인
 												</th:block>
 												</span>
-												<span>미니언즈 우산 증정</span>
+												<span th:if="${freeGoodsList != null and !freeGoodsList.empty}">
+												<th:block th:each="freeGoods, status : ${freeGoodsList}" th:if="${status.first}">
+												<th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'N'}" th:text="외 택1"></th:block></span>
 												<button type="button" id="btn_bnfShopping_pop" class="btn_popup" th:onclick="cfGoodsShopBenefitInfo([[${goodsInfo.goodsCd}]])"><span>자세히</span></button>
 											</dd>
 									</div>

+ 5 - 9
src/main/webapp/WEB-INF/views/web/goods/GoodsShopBenefitFormWeb.html

@@ -61,8 +61,8 @@
 							</tbody>
 						</table>
 					</div>
-				</div>	   
-				<div class="benefit_blk">
+				</div>
+				<div class="benefit_blk" th:if="${freeGoodsList != null and !freeGoodsList.empty}">
 					<h6>사은품</h6>
 					<div class="tbl type1">
 						<table>
@@ -71,13 +71,9 @@
 								<col width="*">
 							</colgroup>
 							<tbody>
-								<tr>
-									<th>99,999,999원 이상 구매 시</th>
-									<td>미니언즈 우산 99개 증정</td>
-								</tr>
-								<tr>
-									<th>99,999,999원 이상 구매 시</th>
-									<td>미니언즈 우산 99개 증정 외 택1</td>
+								<tr th:each="freeGoods, status : ${freeGoodsList}">
+									<th><th:block th:text="${#numbers.formatInteger(freeGoods.sectionVal, 0,'COMMA')}"></th:block></th:block><th:block th:text="${(freeGoods.sectionGb == 'G810_10')? '개':'원'}"></th:block> 이상 구매 시</th>
+									<td><th:block th:text="${freeGoods.goodsNm}"></th:block> <th:block th:text="${#numbers.formatInteger(freeGoods.itemQty, 0,'COMMA')}"></th:block>개 증정 <th:block th:if="${freeGoods.allYn == 'N'}" th:text="외 택1"></th:block></td>
 								</tr>
 							</tbody>
 						</table>