bin2107 4 лет назад
Родитель
Сommit
86e6cdeed3

+ 32 - 3
src/main/java/com/style24/front/biz/service/TsfCouponService.java

@@ -563,6 +563,10 @@ public class TsfCouponService {
 	 */
 	@Transactional("shopTxnManager")
 	public String getPlanCouponInfo(Coupon coupon) {
+		int downloadCnt = 1; 	// 쿠폰당 다운 받을수
+		int custPubLimitQty = 1;
+		int onePubQty = 1;
+
 		coupon.setSiteCd(TscConstants.Site.STYLE24.value());
 		coupon.setFrontGb(TsfSession.getFrontGb());
 		coupon.setCustGb(TsfSession.getCustGb());
@@ -578,14 +582,39 @@ public class TsfCouponService {
 		}
 		Coupon temp = couponList.iterator().next();
 		temp.setCustNo(TsfSession.getInfo().getCustNo());
-		
-		
+		onePubQty = temp.getOnePubQty();	// 1회 발급당 발행수량 설정
+
+		log.info("기획전 쿠폰정보  temp {}", temp);
+
+		// 고객당 발급수량 확인
+		if (temp.getCustPubLimitQty() > 0) {
+			int tempCustCouponCnt = temp.getCustPubLimitQty() * onePubQty;
+			//if (coupon.getCustPubLimitQty() <= coupon.getCustCouponCnt()) {
+			log.info("기획전쿠폰 다운  skip: tempCustCouponCnt : {}, temp.getCustPubLimitQty() : {} , onePubQty : {}", tempCustCouponCnt, temp.getCustPubLimitQty(), onePubQty);
+			if (tempCustCouponCnt <= temp.getCustCouponCnt()) {
+				log.info("기획전쿠폰 다운  skip: 쿠폰발급수 : {}, 회원발급수 : {}", temp.getCustPubLimitQty(), temp.getCustCouponCnt());
+				result = "ERROR_30";
+				return result;
+			}
+		}
+
+		log.info("기획전쿠폰 다운 쿠폰총발급제한수  skip: temp.getTotPubLimitQty() : {}, temp.getTotCouponCnt() : {} ", temp.getTotPubLimitQty(), temp.getTotCouponCnt());
+		// 발급수 확인
 		if (temp.getTotPubLimitQty() > 0) {
-			if (temp.getCustPubLimitQty() <= temp.getCustCouponCnt()) {
+			if (temp.getTotPubLimitQty() <= temp.getTotCouponCnt()) {
+				log.info("기획전쿠폰 다운  skip: 쿠폰총발급제한수 : {}, 전체발급수 : {}", temp.getTotPubLimitQty(), temp.getTotCouponCnt());
 				result = "ERROR_30";
 				return result;
 			}
 		}
+		
+//		if (temp.getTotPubLimitQty() > 0) {
+//			if (temp.getCustPubLimitQty() <= temp.getCustCouponCnt()) {
+//				result = "ERROR_30";
+//				return result;
+//			}
+//		}
+
 		// 첫구매여부 (Y:구매이력이없음 | N:구매이력있음) - 구매기간일자 해당기간에 구매이력이 없으면 다운로드 가능
 		if ("Y".equals(temp.getFirstOrdYn())) {
 			int firstOrdcnt = orderService.getCustFirstOrderCount(temp);

+ 20 - 5
src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml

@@ -1166,12 +1166,26 @@
 		      ,C.CPN_DESC       
 		      ,C.CPN_TYPE 
 		      ,C.BUY_LIMIT_AMT 
-		      ,C.CUST_PUB_LIMIT_QTY 
-		      ,C.TOT_PUB_LIMIT_QTY
-		      ,C.MAX_DC_AMT 
+		      ,C.CUST_PUB_LIMIT_QTY
+		      ,IF(C.DC_CD_GB = 'G233_30', LC.DOWN_LIMIT_QTY , C.TOT_PUB_LIMIT_QTY) AS TOT_PUB_LIMIT_QTY
+		      ,C.ONE_PUB_QTY
+		      ,C.MAX_DC_AMT
 		      ,C.FIRST_ORD_YN
 		      , IFNULL((SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = C.CPN_ID AND CUST_NO = #{custNo}),0) AS CUST_COUPON_CNT
-		      , CONCAT(CASE WHEN C.BUY_LIMIT_AMT = 0 THEN ''
+		      , (
+		          CASE WHEN C.DC_CD_GB = 'G233_30' /* 선착순쿠폰일때 */ THEN IFNULL((
+		                                                   SELECT COUNT(1)
+		                                                   FROM TB_LIMITED_TIME_COUPON LTC
+		                                                      , TB_CUST_COUPON CC
+		                                                   WHERE LTC.CPN_ID  = CC.CPN_ID
+		                                                     AND   NOW() BETWEEN LTC.DOWN_STDT AND LTC.DOWN_EDDT
+		                                                     AND LTC.DEL_YN = 'N'
+		                                                     AND LTC.CPN_ID = C.CPN_ID
+		                                                     AND CC.REG_DT BETWEEN LTC.DOWN_STDT AND LTC.DOWN_EDDT
+		                                               ),0)
+		          ELSE IFNULL((SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = C.CPN_ID),0) END
+		         ) AS TOT_COUPON_CNT
+		     , CONCAT(CASE WHEN C.BUY_LIMIT_AMT = 0 THEN ''
 		                   ELSE CONCAT(FORMAT(C.BUY_LIMIT_AMT , 0),'원 이상 구매 시 ')
 		              END
 		             ,CASE WHEN C.MAX_DC_AMT = 0 THEN ''
@@ -1191,12 +1205,13 @@
 		      ,IF (C.PD_GB = 'D', NOW(), C.AVAIL_STDT) AS AVAIL_STDT
 		      ,IF (C.PD_GB = 'D', CONCAT(CURRENT_DATE + INTERVAL C.AVAIL_DAYS DAY, ' 23:59:59'), C.AVAIL_EDDT) AS AVAIL_EDDT
 		FROM TB_COUPON C
+				 LEFT OUTER JOIN TB_LIMITED_TIME_COUPON LC ON C.CPN_ID = LC.CPN_ID AND NOW() BETWEEN LC.DOWN_STDT AND LC.DOWN_EDDT
 		WHERE 1=1
 		AND C.CPN_STAT = 'G232_11'
 		AND C.CPN_ID = #{cpnId}
 		AND C.SITE_CD = #{siteCd}
 		AND C.CPN_TYPE IN ('G230_11','G230_20','G230_30')
-		AND NOW() BETWEEN C.DOWN_STDT AND C.DOWN_EDDT
+		  AND NOW() BETWEEN IF(C.DC_CD_GB = 'G233_30', LC.DOWN_STDT, C.DOWN_STDT) AND IF(C.DC_CD_GB = 'G233_30', LC.DOWN_EDDT,  C.DOWN_EDDT)
 		AND NOW()  <![CDATA[<=]]> IF (C.PD_GB = 'D', CONCAT(CURRENT_DATE + INTERVAL C.AVAIL_DAYS DAY, ' 23:59:59'), C.AVAIL_EDDT)
 		AND (CASE WHEN #{frontGb} = 'P' THEN C.DC_PVAL
 		          WHEN #{frontGb} = 'M' THEN C.DC_MVAL

+ 22 - 6
src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml

@@ -802,8 +802,9 @@
 		      ,C.CPN_TYPE 
 		      ,C.BUY_LIMIT_AMT 
 		      ,C.CUST_PUB_LIMIT_QTY 
-		      ,C.TOT_PUB_LIMIT_QTY
-		      ,C.MAX_DC_AMT 
+		      ,IF(C.DC_CD_GB = 'G233_30', LC.DOWN_LIMIT_QTY , C.TOT_PUB_LIMIT_QTY) AS TOT_PUB_LIMIT_QTY
+		      ,C.ONE_PUB_QTY
+		      ,C.MAX_DC_AMT
 		      ,C.CPN_STAT 
 		      ,C.REG_DT
 		      ,PC.TITLE
@@ -818,6 +819,19 @@
 		      ,PC.CPN_NOTE8
 		      ,PC.CPN_NOTE9
 		      , IFNULL((SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = C.CPN_ID AND CUST_NO = #{custNo}),0) AS CUST_COUPON_CNT
+		      , (
+		          CASE WHEN C.DC_CD_GB = 'G233_30' /* 선착순쿠폰일때 */ THEN IFNULL((
+		                   SELECT COUNT(1)
+		                   FROM TB_LIMITED_TIME_COUPON LTC
+		                      , TB_CUST_COUPON CC
+		                   WHERE LTC.CPN_ID  = CC.CPN_ID
+		                   AND   NOW() BETWEEN LTC.DOWN_STDT AND LTC.DOWN_EDDT
+		                   AND LTC.DEL_YN = 'N'
+		                   AND LTC.CPN_ID = C.CPN_ID
+		                   AND CC.REG_DT BETWEEN LTC.DOWN_STDT AND LTC.DOWN_EDDT
+		                   ),0)
+		          ELSE IFNULL((SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = C.CPN_ID),0) END
+		        ) AS TOT_COUPON_CNT
 		      , CONCAT(CASE WHEN C.BUY_LIMIT_AMT = 0 THEN ''
 		                   ELSE CONCAT(FORMAT(C.BUY_LIMIT_AMT , 0),'원 이상 구매 시 ')
 		              END
@@ -840,8 +854,9 @@
 		      ,IF (C.PD_GB = 'D', CONCAT(CURRENT_DATE + INTERVAL C.AVAIL_DAYS DAY, ' 23:59:59'), C.AVAIL_EDDT) AS AVAIL_EDDT
 		FROM TB_PLAN_CONTENTS PC 
 		             INNER JOIN TB_PLAN_CONTENTS_ITEM PCI ON PC.PLAN_CONT_SQ = PCI.PLAN_CONT_SQ 
-		             INNER JOIN TB_COUPON C ON PCI.ITEM_VAL = C.CPN_ID 
-		             LEFT JOIN TB_CUST_COUPON CC ON C.CPN_ID = CC.CPN_ID 
+		             INNER JOIN TB_COUPON C ON PCI.ITEM_VAL = C.CPN_ID
+		LEFT OUTER JOIN TB_LIMITED_TIME_COUPON LC ON C.CPN_ID = LC.CPN_ID AND NOW() BETWEEN LC.DOWN_STDT AND LC.DOWN_EDDT
+		LEFT JOIN TB_CUST_COUPON CC ON C.CPN_ID = CC.CPN_ID
 		WHERE 1=1
 		<if test="planSq != null and planSq != ''">
 		AND PC.PLAN_SQ = #{planSq}
@@ -852,7 +867,7 @@
 		AND C.CPN_ID  = #{cpnId}
 		</if>
 		AND C.CPN_TYPE IN ('G230_11','G230_30','G230_20')
-		AND NOW() BETWEEN C.DOWN_STDT AND C.DOWN_EDDT
+		AND NOW() BETWEEN IF(C.DC_CD_GB = 'G233_30', LC.DOWN_STDT, C.DOWN_STDT) AND IF(C.DC_CD_GB = 'G233_30', LC.DOWN_EDDT,  C.DOWN_EDDT)
 		AND NOW()  <![CDATA[<=]]>  IF (C.PD_GB = 'D', CONCAT(CURRENT_DATE + INTERVAL C.AVAIL_DAYS DAY, ' 23:59:59'), C.AVAIL_EDDT)
 		AND (CASE WHEN 'P' = #{frontGb} THEN C.DC_PVAL
 		          WHEN 'M' = #{frontGb} THEN C.DC_MVAL
@@ -864,7 +879,8 @@
 		           ,C.CPN_DESC       
 		           ,C.CPN_TYPE 
 		           ,C.BUY_LIMIT_AMT 
-		           ,C.CUST_PUB_LIMIT_QTY 
+		           ,C.CUST_PUB_LIMIT_QTY
+		           ,LC.DOWN_LIMIT_QTY
 		           ,C.TOT_PUB_LIMIT_QTY
 		           ,C.MAX_DC_AMT
 		           ,C.REG_DT