Explorar el Código

상품쿠폰 개발중

eskim hace 5 años
padre
commit
fcc60105da

+ 12 - 3
src/main/java/com/style24/front/biz/dao/TsfCouponDao.java

@@ -3,8 +3,8 @@ package com.style24.front.biz.dao;
 import java.util.Collection;
 
 import com.style24.core.support.annotation.ShopDs;
-import com.style24.persistence.domain.Cart;
 import com.style24.persistence.domain.Coupon;
+import com.style24.persistence.domain.Goods;
 
 /**
  * 쿠폰 Dao
@@ -41,7 +41,6 @@ public interface TsfCouponDao {
 	 */
 	Collection<Coupon> getCustGradeCouponInfo(Coupon coupon);
 
-
 	/**
 	 * 회원가입 쿠폰
 	 * @param coupon - 쿠폰정보
@@ -50,5 +49,15 @@ public interface TsfCouponDao {
 	 * @since 2021. 03. 03
 	 */
 	Coupon getJoinCoupon(Coupon coupon);
-
+	
+	/**
+	 * 상품 쿠폰 조회
+	 * 
+	 * @param goods
+	 * @return Collection<Coupon>
+	 * @author eskim
+	 * @since 2021.03.11
+	 */
+	Collection<Coupon> getGoodsCouponList(Goods goods);
+	
 }

+ 12 - 2
src/main/java/com/style24/front/biz/service/TsfCouponService.java

@@ -7,15 +7,14 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.thymeleaf.util.StringUtils;
 
-import com.gagaframework.web.parameter.GagaMap;
 import com.style24.core.biz.dao.TscCouponDao;
-import com.style24.core.biz.service.TscCouponService;
 import com.style24.core.biz.service.TscOrderService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.front.biz.dao.TsfCouponDao;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.CustCoupon;
+import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.Login;
 import com.style24.persistence.domain.Order;
 
@@ -276,4 +275,15 @@ public class TsfCouponService {
 			custCoupon.setRegNo(coupon.getCustNo());
 		}
 	}
+	
+	/**
+	 * 상품 쿠폰 조회
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2021.03.11
+	 */
+	public Collection<Coupon> getGoodsCouponList(Goods goods) {
+		return couponDao.getGoodsCouponList(goods);
+	}
 }

+ 10 - 8
src/main/java/com/style24/front/biz/web/TsfGoodsController.java

@@ -20,6 +20,7 @@ import com.style24.core.biz.service.TscLookbookService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.front.biz.service.TsfCounselService;
+import com.style24.front.biz.service.TsfCouponService;
 import com.style24.front.biz.service.TsfGoodsService;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.env.TsfConstants;
@@ -65,6 +66,9 @@ public class TsfGoodsController extends TsfBaseController {
 
 	@Autowired
 	private TscLookbookService coreLookbookService;
+	
+	@Autowired
+	private TsfCouponService couponService; 
 
 	@Value("${has-ssl}")
 	private String hasSsl;
@@ -123,7 +127,6 @@ public class TsfGoodsController extends TsfBaseController {
 			goods.setSocialSq(socialGoods.getSocialSq());
 			goods.setSocialTnm(socialGoods.getSocialTnm());
 			goods.setSocialEddt(socialGoods.getSocialEddt());
-			goods.setSocialSq(socialGoods.getSocialSq());
 		}
 		// 예약판매정보
 		goods = goodsService.getGoodsResSell(goods);
@@ -157,10 +160,8 @@ public class TsfGoodsController extends TsfBaseController {
 
 //				// 상품 고시정보
 				mav.addObject("goodsNotiList", goodsService.getGoodsNotiList(goods));
-
 				// 상품 안전인증 정보
 				mav.addObject("goodsSafeNo", goodsService.getGoodsSafeNo(goods));
-
 				// 룩북
 				Lookbook lookbook = new Lookbook();
 				lookbook.setGoodsCd(paramsGoods.getGoodsCd());
@@ -170,7 +171,8 @@ public class TsfGoodsController extends TsfBaseController {
 //				mav.addObject("goodsExtendList", goodsService.getGoodsSetExtendList(paramsGoods));
 			}
 			// 상품쿠폰
-//			mav.addObject("goodsCouponList", goodsService.getGoodsCouponList(paramsGoods));
+			paramsGoods.setMaxRownum(1);
+			mav.addObject("goodsCouponList", couponService.getGoodsCouponList(paramsGoods));
 		}
 
 		// 상품 문의건수
@@ -222,7 +224,7 @@ public class TsfGoodsController extends TsfBaseController {
 				mav.setViewName(super.getDeviceViewName("goods/GoodsDetailForm"));
 			}
 		}
-
+		
 		return mav;
 	}
 
@@ -239,15 +241,15 @@ public class TsfGoodsController extends TsfBaseController {
 		goods.setSiteCd(TscConstants.Site.STYLE24.value());
 		goods.setAfLinkCd(TsfSession.getAttribute("afLinkCd"));
 //		goods.setSoldoutGoodsDisplayYn(envsetService.getSoldoutGoodsDisplayYn(TscConstants.Site.STYLE24.value())); // 품절상품노출여부
-//		goods.setPointUnit(envsetService.getPointUnit(TscConstants.Site.STYLE24.value())); // 10:원단위절사(int)
-//		goods.setFloorUnit(envsetService.getPointUnit(TscConstants.Site.STYLE24.value()));
+		goods.setPointUnit(envsetService.getPayUnit(TscConstants.Site.STYLE24.value())); // 10:원단위절사(int)
+		goods.setFloorUnit(envsetService.getPayUnit(TscConstants.Site.STYLE24.value()));
 		// 회원 구분
 		if (TsfSession.getInfo() != null) {
 			goods.setCustGb(TsfSession.getInfo().getCustGb());
 			goods.setCustNo(TsfSession.getInfo().getCustNo());
 			goods.setCustGrade(TsfSession.getInfo().getCustGrade());
 		} else {
-			goods.setCustGb("G100_00");
+			goods.setCustGb("G100_10");
 			goods.setCustNo(0);
 			goods.setCustGrade("00"); //?  확인해보자
 		}

+ 189 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml

@@ -116,6 +116,7 @@
 
 	<!--회원가입 쿠폰-->
 	<select id="getJoinCoupon" parameterType="Coupon" resultType="Coupon">
+		/* TsfCoupon.getJoinCoupon */
 		SELECT CP.CPN_ID
 		     , CP.END_ALIM_YN
 		     , CASE WHEN #{frontGb} = 'P' THEN CP.DC_PVAL
@@ -133,4 +134,192 @@
 		AND   CP.SITE_CD = #{siteCd}
 	</select>
 	
+	<!--상품 쿠폰 조회-->
+	<select id="getGoodsCouponList" parameterType="Goods" resultType="Coupon">
+		/* TsfCoupon.getGoodsCouponList */
+		SELECT A.DC_AMT
+		     , A.DC_VAL
+		     , A.DC_WAY
+		     , A.CPN_ID
+		     , A.CPN_NM
+		     , A.CUST_PUB_LIMIT_QTY
+		     , A.CPN_TYPE
+		     , A.USABLE_CUST_GRADE
+		     , DATE_FORMAT(A.AVAIL_EDDT, '%Y-%m-%d') AS AVAIL_EDDT
+		     , IFNULL((SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = A.CPN_ID AND CUST_NO = #{custNo}),0) AS CUST_COUPON_CNT
+		     , RNUM
+		FROM (
+		SELECT   CPN_ID
+		       , CPN_NM
+		       , DC_AMT
+		       , DC_VAL
+		       , DC_WAY
+		       , CUST_PUB_LIMIT_QTY
+		       , CPN_TYPE
+		       , AVAIL_EDDT
+		       , USABLE_CUST_GRADE
+		       , RANK() OVER(ORDER BY DC_AMT DESC)  AS RNUM   -- 할인금액순
+		FROM   (
+		        SELECT CP.CPN_ID                                              -- 쿠폰ID
+		             , CP.CPN_NM                                              -- 쿠폰명
+		             , CP.DC_WAY                                              -- 할인방식
+		             , CP.DC_VAL                                              -- 할인값
+		             , CP.MAX_DC_AMT                                          -- 최대할인금액
+		             , CP.CURR_PRICE                                          -- 현재 판매가
+		             , CP.CUST_PUB_LIMIT_QTY                                  -- 1인당 발급제한수량
+		             , CP.BUY_LIMIT_AMT                                       -- 구매제한금액
+		             , CP.CPN_TYPE                                            -- 쿠폰타입
+		             , CP.AVAIL_EDDT                                          -- 유효일
+		             , CP.USABLE_CUST_GRADE                                   -- 고객등급(,구분) 
+		             <![CDATA[
+		             , (CASE WHEN CP.DC_WAY = 'G240_10' THEN
+		                    (CASE WHEN IFNULL(CP.MAX_DC_AMT, 0) >0 AND CP.MAX_DC_AMT < CP.DC_VAL THEN CP.MAX_DC_AMT ELSE CP.DC_VAL END)
+		                ELSE
+		                     (CASE WHEN IFNULL(CP.MAX_DC_AMT, 0) >0 AND CP.MAX_DC_AMT < FLOOR((CP.CURR_PRICE * DC_VAL / 100) / #{pointUnit}) * #{pointUnit} THEN CP.MAX_DC_AMT ELSE FLOOR((CP.CURR_PRICE * CP.DC_VAL / 100) / #{pointUnit}) * #{pointUnit} END)
+		                END) AS DC_AMT
+		              ]]>
+		        FROM   (
+		                SELECT CP.CPN_ID
+		                     , CP.CPN_NM
+		                     , CP.DC_WAY
+		                     , (CASE WHEN 'P' = #{frontGb} THEN CP.DC_PVAL
+		                             WHEN 'M' = #{frontGb} THEN CP.DC_MVAL
+		                             ELSE CP.DC_AVAL END) AS DC_VAL
+		                     , CP.MAX_DC_AMT
+		                     , CP.BUY_LIMIT_AMT
+		                     , CP.CUST_PUB_LIMIT_QTY
+		                     , CP.CPN_TYPE
+		                     , IF (CP.PD_GB = 'D', DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S'), CP.AVAIL_EDDT) AS AVAIL_EDDT  
+		                     , (SELECT GROUP_CONCAT(USABLE_CUST_GRADE) FROM TB_COUPON_CUST_GRADE WHERE CPN_ID = CP.CPN_ID) AS USABLE_CUST_GRADE
+		                     , G.GOODS_CD
+		                     , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD, G.CURR_PRICE,#{custGb}) AS CURR_PRICE
+		                FROM   TB_GOODS G
+		                     , TB_COUPON CP
+		                WHERE  G.GOODS_CD = #{goodsCd}
+		                AND    CP.SITE_CD = #{siteCd}
+		                AND    CP.CPN_STAT = 'G232_11'   -- 쿠폰인 진행중인 쿠폰만
+		                <![CDATA[
+		                AND    NOW() <= IF (CP.PD_GB = 'D', DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S'), CP.AVAIL_EDDT)
+		                ]]>
+		                AND    NOW() BETWEEN CP.DOWN_STDT AND CP.DOWN_EDDT
+		                AND    CP.DOWN_ABL_YN = 'Y'                            -- 다운 가능 쿠폰 
+		                AND    CP.CPN_TYPE IN ('G230_11','G230_20','G230_30')  --  상품쿠폰, 주문서쿠폰, 배송비쿠폰
+		                AND    CP.DC_CD_GB = 'G233_00'                         -- 일반유형(할인쿠폰구분)
+		                AND    (SELECT COUNT(1)
+		                        FROM TB_COUPON_CUST_GBN
+		                        WHERE CPN_ID = CP.CPN_ID
+		                        AND USABLE_CUST_GB IN (#{custGb})              -- 사용가능고객구분
+		                       ) >= 1
+		                AND    IF (CP.TOT_PUB_LIMIT_QTY = 0, 9999999999,CP.TOT_PUB_LIMIT_QTY) > (SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = CP.CPN_ID) -- 총발행제한수
+		                AND   (
+		                        (CP.APPLY_SCOPE = 'A' ) 
+		                        OR  /* 적용대상:상품*/
+		                        (CP.APPLY_SCOPE = 'I' AND (SELECT COUNT(1) FROM TB_COUPON_REFVAL
+		                                                   WHERE CPN_ID = CP.CPN_ID
+		                                                   AND CPN_TARGET = 'G260_10'
+		                                                   AND DEL_YN = 'N'
+		                                                   AND REF_VAL = G.GOODS_CD
+		                                                   ) > 0
+		                        ) 
+		                        OR /* 적용대상:카테고리*/
+		                        (CP.APPLY_SCOPE = 'I' AND (SELECT COUNT(1) FROM TB_COUPON_REFVAL
+		                                                   WHERE CPN_ID = CP.CPN_ID
+		                                                   AND CPN_TARGET = 'G260_11' 
+		                                                   AND DEL_YN = 'N'
+		                                                   AND IFNULL(REF_FORMAL_GB,G.FORMAL_GB) = G.FORMAL_GB
+		                                                   AND IFNULL(REF_BRAND_CD,G.BRAND_CD) = G.BRAND_CD
+		                                                   AND REF_VAL IN (SELECT DISTINCT X.CATE_NO 
+		                                                                   FROM 
+		                                                                        (SELECT LEAF_CATE_NO 
+		                                                                              , CATE_LVL 
+		                                                                              , CATE_NO
+		                                                                         FROM (
+		                                                                               SELECT LEAF_CATE_NO ,
+		                                                                                      CASE WHEN X = 1 THEN 'CATE1_NO'  -- 컬럼과 매핑(컬럼명)
+		                                                                                           WHEN X = 2 THEN 'CATE2_NO'
+		                                                                                           WHEN X = 3 THEN 'CATE3_NO'
+		                                                                                           WHEN X = 4 THEN 'CATE4_NO'
+		                                                                                           ELSE  'CATE5_NO' 
+		                                                                                      END CATE_LVL,
+		                                                                                      CASE WHEN X = 1 THEN CATE1_NO  -- 컬럼과 매핑(컬럼 데이터)
+		                                                                                           WHEN X = 2 THEN CATE2_NO
+		                                                                                           WHEN X = 3 THEN CATE3_NO
+		                                                                                           WHEN X = 4 THEN CATE4_NO
+		                                                                                           ELSE  CATE5_NO 
+		                                                                                      END CATE_NO
+		                                                                               FROM (
+		                                                                                      ( SELECT LEAF_CATE_NO
+		                                                                                             , CATE1_NO
+		                                                                                             , CATE2_NO
+		                                                                                             , CATE3_NO
+		                                                                                             , CATE4_NO
+		                                                                                             , CATE5_NO
+		                                                                                        FROM  TB_CATE_4SRCH
+		                                                                                        WHERE SITE_CD = 'G000_10'
+		                                                                                        AND CATE_TYPE = 'G031_10') A, -- 상품타입
+		                                                                                      (SELECT 1 AS X                  -- UNPIVOT 컬럼 수 만큼 선언
+		                                                                                       UNION ALL SELECT 2 AS X
+		                                                                                       UNION ALL SELECT 3 AS X
+		                                                                                       UNION ALL SELECT 4 AS X
+		                                                                                       UNION ALL SELECT 5 AS X
+		                                                                                     ) B
+		                                                                                    )  
+		                                                                               ORDER BY LEAF_CATE_NO, CATE_LVL
+		                                                                              ) K
+		                                                                              WHERE CATE_NO IS NOT NULL
+		                                                                        ) X, 
+		                                                                        (
+		                                                                         SELECT A.CATE_NO, A.GOODS_CD
+		                                                                         FROM TB_CATE_GOODS A
+		                                                                         WHERE GOODS_CD = G.GOODS_CD
+		                                                                        ) Y 
+		                                                                        WHERE X.LEAF_CATE_NO = Y.CATE_NO
+		                                                                  )
+		                                                  ) >0
+		                        ) 
+		                        OR /* 적용대상:브랜드*/
+		                        (CP.APPLY_SCOPE = 'I' AND (SELECT COUNT(1) FROM TB_COUPON_REFVAL
+		                                                   WHERE CPN_ID = CP.CPN_ID
+		                                                   AND CPN_TARGET = 'G260_12' 
+		                                                   AND DEL_YN = 'N'
+		                                                   AND REF_VAL = G.BRAND_CD
+		                                                   AND IFNULL(REF_FORMAL_GB,G.FORMAL_GB) = G.FORMAL_GB
+		                                                  ) >0
+		                        ) 
+		                        OR /* 적용대상:공급업체*/
+		                        (CP.APPLY_SCOPE = 'I' AND (SELECT COUNT(1) FROM TB_COUPON_REFVAL
+		                                                   WHERE CPN_ID = CP.CPN_ID
+		                                                   AND CPN_TARGET = 'G260_13' 
+		                                                   AND DEL_YN = 'N'
+		                                                   AND REF_VAL = G.SUPPLY_COMP_CD
+		                                                  ) >0
+		                        )
+		                      )
+		                AND NOT EXISTS (
+		                                SELECT 1
+		                                FROM   TB_COUPON_REFVAL SCPR
+		                                WHERE  SCPR.CPN_ID = CP.CPN_ID
+		                                AND    SCPR.REF_VAL = G.GOODS_CD
+		                                AND    SCPR.DEL_YN = 'N'      -- 삭제안된넘
+		                                AND    SCPR.CPN_TARGET = '40' -- 제외상품
+		                               )
+		                AND NOT EXISTS (
+		                                 SELECT 1
+		                                FROM TB_COUPON_BAN_GOODS
+		                                WHERE GOODS_CD = G.GOODS_CD
+		                                AND DEL_YN = 'N'
+		                               )
+		               ) CP
+		               WHERE 1 = 1
+		               <![CDATA[
+		               AND CP.BUY_LIMIT_AMT <= CP.CURR_PRICE  -- 최소주문금액
+		               ]]>
+		       ) Y
+		) A
+		WHERE 1 = 1
+		<if test="maxRownum != null and maxRownum > 0">
+		LIMIT #{maxRownum}
+		</if> 
+	</select>
+	
 </mapper>

+ 13 - 2
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html

@@ -122,7 +122,7 @@
 										<span class="save_point">
 											스타일포인트 <th:block th:text="${#numbers.formatInteger(goodsInfo.pntAmt, 0,'COMMA')}"></th:block>P 적립예정
 										</span>
-										<button type="button" id="btn_saleCoupon_pop" class="btn btn_primary btn_sm btn_coupon" th:onclick="cfGoodsCouponInfo([[${goodsInfo.goodsCd}]])"><span>쿠폰받기</span></button>
+										<button type="button" id="btn_saleCoupon_pop" class="btn btn_primary btn_sm btn_coupon"  th:if="${goodsCouponList != null and !goodsCouponList.empty}" th:onclick="cfGoodsCouponInfo([[${goodsInfo.goodsCd}]])"><span>쿠폰받기</span></button>
 									</div>
 								</div>
 								<div class="desc_status" th:if="${not #strings.isEmpty(goodsInfo.delvResDt) }">
@@ -870,6 +870,13 @@
 	
 	//장바구니담기
 	var jfAddCart = function(btnType){
+		
+		// 바로구매는 로그인여부 확인
+		if (btnType == "O" && !cfCheckLogin()) {
+			cfnGoToPage(_PAGE_LOGIN);
+			return false;
+		}
+		
 		var params = [];
 		var goodsType = $("#cartForm  input[name=goodsType]").val();
 
@@ -889,7 +896,7 @@
 			obj.afLinkCd =$("#cartForm  input[name=afLinkCd]").val();
 			obj.ithrCd =$("#cartForm  input[name=ithrCd]").val();
 			obj.contentsLoc =$("#cartForm  input[name=contentsLoc]").val();
-			obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();;
+			obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();
 			params.push(obj);
 
 		}else if (goodsType == 'G056_S'){  //수정요
@@ -919,6 +926,10 @@
 
 			}); */
 		}
+		
+		
+
+		
 		// 장바구니담기
 		cfnAddCart(params);
 	}

+ 6 - 0
src/main/webapp/ux/style24_link.js

@@ -416,6 +416,12 @@ function cfCardInfo() {
 * </pre>
 */
 function cfGoodsCouponInfo(goodsCd) {
+	
+	if (!cfCheckLogin()) {
+		cfnGoToPage(_PAGE_LOGIN);
+		return false;
+	}
+	
 	var str = '<div class="modal fade pd_pop salecoupon_pop" id="layer_goods_coupon" tabindex="-1" role="dialog" aria-labelledby="saleCouponLabel" aria-hidden="true">';
 
 	if ($('#layer_goods_coupon').length == 0) {