Bläddra i källkod

Merge branch 'order' into develop

card007 5 år sedan
förälder
incheckning
1b600cb5c9

+ 101 - 24
src/main/java/com/style24/core/biz/service/TscOrderService.java

@@ -666,19 +666,18 @@ public class TscOrderService {
 				// 상품쿠폰목록
 				if ("G230_11".equals(goodsCartCpnApply.getCpnType())) {
 					goodsCpnList.add(goodsCartCpnApply);
-				} 
+				}
 				// 장바구니쿠폰목록
 				else if ("G230_20".equals(goodsCartCpnApply.getCpnType())) {
-					
-					Boolean temp = true;
+					Boolean temp2 = true;
 					for (Order cartCpn : cartCpnList) {
 						if (cartCpn.getCpnId() == goodsCartCpnApply.getCpnId()) {
-							temp = false;
+							temp2 = false;
 						}
 					}
 					
 					// 쿠폰시퀀스가 중복 없을때 적용
-					if (temp) {
+					if (temp2) {
 						cartCpnList.add(goodsCartCpnApply);
 					}
 				}
@@ -702,35 +701,113 @@ public class TscOrderService {
 		return orderDao.getDelvCpnList(order);
 	}
 	
-	public Collection<Order> getGoodsCpnApplyList(Collection<Order> tmtbGoodsApplyList, Collection<Order> goodsCartCpnApplyGoodsList) {
+	public Collection<Order> getGoodsCpnApplyList(Collection<Order> tmtbGoodsApplyList, Collection<Order> goodsCpnAllList) {
+		Collection<Order> goodsApplyCpnList = new ArrayList<Order>();
 		
-		Collection<Order> goodsCpnApplyList = new ArrayList<Order>();
+		Boolean temp = true;
+		int cpnDcAmt = 0;
 		
-		// 쿠폰대상이 있는 상품만 정리
+		// 1. 쿠폰대상이 있는 상품만 정리
 		for (Order tmtbGoods : tmtbGoodsApplyList) {
-			for (Order goodsCartCpn : goodsCartCpnApplyGoodsList) {
-				
-				// 상품코드비교후 담기
-				if (tmtbGoods.getGoodsCd().equals(goodsCartCpn.getGoodsCd())) {
-					
-					Boolean temp = false;
+			List<Order> goodsCpnList = new ArrayList<Order>();
+
+			for (Order goodsCpnAll : goodsCpnAllList) {
+				// 2. 적용상풒 전체(A) or 상품코드 같을때 담기
+				if ("A".equals(goodsCpnAll.getApplyScope()) || tmtbGoods.getGoodsCd().equals(goodsCpnAll.getGoodsCd())) {
+					temp = true;
 					
-					// 이미 담긴 상풐은 제외
-					for (Order goodsCpnApply : goodsCpnApplyList) {
-						if (tmtbGoods.getGoodsCd().equals(goodsCpnApply.getGoodsCd())) {
-							temp = true;
+					// 3. 상품쿠폰목록에 담긴 상풐은 제외
+					for (Order goodsCpnApply : goodsCpnList) {
+						if (goodsCpnAll.getCpnId() == goodsCpnApply.getCpnId()) {
+							temp = false;
 						}
 					}
 					
-					if (temp == false) {
-						goodsCpnApplyList.add(tmtbGoods);
+					// 4. 상품쿠폰목록에 담기 가능 상품 담기
+					if (temp) {
+						
+						Order goodsCpn = new Order();
+						goodsCpn.setCpnId(goodsCpnAll.getCpnId());
+						goodsCpn.setGoodsCd(tmtbGoods.getGoodsCd());
+						goodsCpn.setCpnNm(goodsCpnAll.getCpnNm());
+						
+						
+						// 5. 할인방식 금액, 율 판단 
+						// 할인금액 (G240_10)
+						if ("G240_10".equals(goodsCpnAll.getDcWay())) {
+							goodsCpn.setCpnDcAmt(goodsCpnAll.getDcVal());
+						}
+						// 할인율 (G240_11)
+						else {
+							// 6. 할인율 일때 최대금액 판단으로 할인금액 등록
+							if (tmtbGoods.getTmtbDcAmt() > 0) {
+								cpnDcAmt = (tmtbGoods.getTmtbDcAmt() * goodsCpnAll.getDcVal()) / 100;
+							} else {
+								cpnDcAmt = (tmtbGoods.getCurrPrice() * goodsCpnAll.getDcVal()) / 100;
+							}
+							
+							// 7. 할인금액 최대값보다 작으면 적용 or getMaxDcAmt( == 0 이면 무제한
+							if (goodsCpnAll.getMaxDcAmt() > cpnDcAmt || goodsCpnAll.getMaxDcAmt() == 0) {
+								goodsCpn.setCpnDcAmt(cpnDcAmt);
+							} else {
+								goodsCpn.setCpnDcAmt(goodsCpnAll.getMaxDcAmt());
+							}
+						}
+						
+						// 8. 주문최소주문금액 보다 크면 쿠폰 적용
+						if (tmtbGoods.getCurrPrice() > goodsCpn.getBuyLimitAmt()) {
+							goodsCpnList.add(goodsCpn);
+						}
 					}
 				}
+			}
+			
+			// 쿠폰할인금액이 높은순으로 정렬 함수 
+			goodsCpnList = getListSort(goodsCpnList);
+			
+			tmtbGoods.setGoodsCpnList(goodsCpnList);
+			goodsApplyCpnList.add(tmtbGoods);
+		}
+		
+		return goodsApplyCpnList;
+	}
+	
+	// 쿠폰할인금액이 높은순으로 정렬 함수
+	private List<Order> getListSort(List<Order> goodsCpnList) {
+		int cnt 			= 0;
+		int sameCnt 		= 0;
+		
+		List<Order> goodsCpnSortList = new ArrayList<Order>();
+		goodsCpnSortList.addAll(goodsCpnList);
+		
+		// 1. 쿠폰할인금액 순으로 정렬
+		for (int i=0 ; i<goodsCpnList.size() ; i++) {
+			Order tempCpn1 = goodsCpnList.get(i);
+			
+			cnt 	= 0;
+			sameCnt = 0;
+			
+			// 2. 몇번째로 큰 할인금액 인지 판단
+			for (int j=0 ; j<goodsCpnList.size() ; j++) {
+				Order tempCpn2 = goodsCpnList.get(j);
+				
+				if (tempCpn1.getCpnDcAmt() == tempCpn2.getCpnDcAmt() && i <= j) {
+					sameCnt++;
+				}
 				
+				if (tempCpn1.getCpnDcAmt() < tempCpn2.getCpnDcAmt()) {
+					cnt++;
+				}
 			}
+			
+			if (sameCnt > 0) {
+				cnt = cnt + (sameCnt - 1);
+			}
+			
+			goodsCpnSortList.set(cnt, tempCpn1);
 		}
 		
-		return goodsCpnApplyList;
+		return goodsCpnSortList;
 	}
 	
 	/**
@@ -785,11 +862,11 @@ public class TscOrderService {
 			order.setCurrPrice(order.getCurrPrice() * order.getGoodsQty());
 			
 			// 1.3 배송정책별 상품 구분
-			if (order.getDelvFeeCd().equals("WMS")) {
+			if ("WMS".equals(order.getResDelvFeeCd())) {
 				wmsCartList.add(order);
 				wmsCnt++;
 			} 
-			else if (order.getDelvFeeCd().equals("RES")) {
+			else if ("RES".equals(order.getResDelvFeeCd())) {
 				resCartList.add(order);
 				resCnt++;
 			} 
@@ -840,7 +917,7 @@ public class TscOrderService {
 		// 1. 총알배송 가능 시간 체크
 		if (orderDao.getDailyDeliveryTimeInfo() > 0) {
 			// 2. 총알배송 가능 지역 제크
-			if(StringUtils.isEmpty(order.getRecipZipcode())) {
+			if (StringUtils.isEmpty(order.getRecipZipcode())) {
 				rtn = 1;
 			} else {
 				if (orderDao.getDailyDeliveryZoneInfo(order) > 0) {

+ 23 - 2
src/main/java/com/style24/persistence/domain/Order.java

@@ -298,6 +298,7 @@ public class Order extends TscBaseDomain {
 	private int dcPval;
 	private int dcMval;
 	private int dcAval;
+	private String applyScope;
 	
 	// 주문포인트
 	private int pntPrate;
@@ -337,6 +338,7 @@ public class Order extends TscBaseDomain {
 	private int minOrdAmt;
 	private int orgDelvFee;
 	private String delvFeeCd;
+	private String resDelvFeeCd;
 	private int ordCanChgQty;
 	private String allCanYn;
 	
@@ -406,10 +408,12 @@ public class Order extends TscBaseDomain {
 	private int delvCnt;
 	private int delvTotCnt;
 	private int delvFeeTotCnt;
-	
+
+	Collection<Order> notApplyTmtbGoodsList;
 	Collection<Order> wmsCartList;
 	Collection<Order> resCartList;
 	Collection<Order> delvCartList;
+	List<Order> goodsCpnList;
 	
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private int[] freegiftSqArr;
@@ -447,6 +451,7 @@ public class Order extends TscBaseDomain {
 	private int totCartCnt;			// 장바구니 상품 수량
 	private int maxDcAmt;			// 쿠폰 최대 할인 금액
 	private int buyLimitAmt;		// 쿠폰 적용 최소 구매 금액
+	private int wishCnt;			// 위시리스트 수량
 
 	// 다다익선
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
@@ -460,9 +465,15 @@ public class Order extends TscBaseDomain {
 	private int sectionVal;							// 다다익선 조건
 	private int tmtbSumQty;							// 장바구니 수량 다다익선 총계
 	private int tmtbSumAmt;							// 장바구니 금액 다다익선 총계
+	private int qtyTmtbSumQty;						// 수량 다다익선 합계 수량
+	private int qtyTmtbSumAmt;						// 수량 다다익선 합계 금액
+	private int amtTmtbSumQty;						// 금액 다다익선 합계 수량
+	private int amtTmtbSumAmt;						// 금액 다다익선 합계 금액
 	private String qtyTmtbNm;						// 수량 적용 다다익선명
 	private String amtTmtbNm;						// 금액 적용 다다익선명
-	private String goodsGb;
+	private String qtyGoodsGb;						// 상품 구분 (G800_10(기본), G800_20(적용), G800_30(제외), G800_40(ALL))
+	private String amtGoodsGb;						// 상품 구분 (G800_10(기본), G800_20(적용), G800_30(제외), G800_40(ALL))
+	private String goodsGb;							// 상품 구분 (G800_10(기본), G800_20(적용), G800_30(제외), G800_40(ALL))
 	private String applyGb;							// 다다익선 할인 기준
 	private String applyQtySectionYn;				// 다다익선 적용 여부
 	private String applyAmtSectionYn;				// 다다익선 적용 여부
@@ -475,6 +486,7 @@ public class Order extends TscBaseDomain {
 	private String selfGoodsYn;
 	private String brandNm;
 	private String ordDtlStatBanner;
+	private String ordDtlStatLastBanner;
 	private String expiredSoon;
 	private int purchaseConfirmDay;
 	private String giftLimitDt;
@@ -485,4 +497,13 @@ public class Order extends TscBaseDomain {
 	private String vaDeadlineHms;
 	private int totalDcAmt;
 	private int custPntSq;
+	private int orderReceiptCount;
+	private int paymentCompleteCount;
+	private int goodsPrepareCount;
+	private int shipPrepareCount;
+	private int shippingCount;
+	private int shipCompleteCount;
+	private int cancelCount;
+	private int exchangeCount;
+	private int returnCount;
 }

+ 186 - 129
src/main/java/com/style24/persistence/mybatis/shop/TscOrder.xml

@@ -1711,6 +1711,8 @@
 				   AND CD.OPT_CD = VS.OPT_CD
 				  LEFT OUTER JOIN TB_GOODS_RES_SELL GRS
 					ON CA.GOODS_CD = GRS.GOODS_CD
+				   AND GRS.USE_YN = 'Y'
+				   AND GRS.DELV_RES_DT > NOW()
 				 WHERE 1 = 1
 				   AND G.GOODS_STAT = 'G008_90'
 				<if test="custNo == 0">
@@ -1757,6 +1759,7 @@
 			 , GI.SYS_IMG_NM
 		ORDER  BY Z.SUPPLY_COMP_CD
 				, Z.DELV_FEE_CD
+				, Z.GOODS_CD
 				, Z.CART_SQ
 	</select>
 	
@@ -1822,7 +1825,7 @@
 		</if>
 	</select>
 	
-		<!-- 총알배송 가능시간 조회 -->
+	<!-- 총알배송 가능시간 조회 -->
 	<select id="getDailyDeliveryTimeInfo" resultType="int">
 		/* order.getDailyDeliveryTimeInfo */
 		SELECT CASE WHEN TIME_FORMAT(NOW(), '%H%i%S') > 100000
@@ -1839,6 +1842,7 @@
 		  FROM TB_DAILY_DELIVERY_ZONE DC
 	 	 WHERE 1=1
 		   AND ZIP_NO = #{recipZipcode}
+		   AND ISUSE = 'Y'
 	</select>
 	
 	<!-- 상품쿠폰, 장바구니쿠폰 적용 상품 조회 -->
@@ -1878,134 +1882,177 @@
 				#{item}
 			</foreach>
 		)
-		SELECT Z.GOODS_CD
-		     , Z.CART_SQ
-		     , Z.CURR_PRICE
-		     , CP.CPN_ID
-		     , CP.CPN_NM
-		     , CP.CPN_TYPE
-		     , CP.DC_WAY
-		     , CASE WHEN #{frontGb} = 'P' THEN CP.DC_PVAL
-		            WHEN #{frontGb} = 'M' THEN CP.DC_MVAL
-		            ELSE CP.DC_AVAL END AS DC_VAL
-		     , CP.MAX_DC_AMT
-		     , CP.BUY_LIMIT_AMT
-		FROM   TB_COUPON CP
-		INNER  JOIN TB_COUPON_CUST_GRADE CGR
-		ON     CP.CPN_ID = CGR.CPN_ID
-		INNER  JOIN TB_CUST_COUPON CCP
-		ON     CP.CPN_ID = CCP.CPN_ID
-		INNER  JOIN TB_CUSTOMER CT
-		ON     CT.CUST_NO = CT.CUST_NO
-		AND    CGR.USABLE_CUST_GRADE = CT.CUST_GRADE
-		INNER  JOIN TB_COUPON_CUST_GBN CGB
-		ON     CP.CPN_ID = CGB.CPN_ID
-		AND    CGB.USABLE_CUST_GB = CT.CUST_GB
-		INNER  JOIN (
-				SELECT X.*
-				FROM (
-					SELECT CR.CPN_ID
-					     , GD.GOODS_CD
-						 , GD.CART_SQ
-						 , GD.CURR_PRICE
-					FROM   TB_COUPON_REFVAL CR
-					INNER  JOIN GOODS_DATA GD
-					ON     CR.REF_VAL = GD.GOODS_CD
-					WHERE  1=1
-					AND    CR.CPN_TARGET = 'G260_10' -- 상품
-					AND    CR.DEL_YN = 'N'
-					UNION
-					SELECT CR.CPN_ID
-					     , GD.GOODS_CD
-						 , GD.CART_SQ
-						 , GD.CURR_PRICE
-					FROM   (
-						SELECT C4.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   TB_CATE_4SRCH C4
-						LEFT   OUTER JOIN (
-							SELECT 1 AS X
-							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
-						ON     1=1
+		SELECT X.*
+		FROM (
+			SELECT Z.GOODS_CD
+			     , Z.CART_SQ
+			     , Z.CURR_PRICE
+			     , CP.CPN_ID
+			     , CP.CPN_NM
+			     , CP.CPN_TYPE
+			     , CP.DC_WAY
+			     , CASE WHEN #{frontGb} = 'P' THEN CP.DC_PVAL
+			            WHEN #{frontGb} = 'M' THEN CP.DC_MVAL
+			            ELSE CP.DC_AVAL END AS DC_VAL
+			     , CP.MAX_DC_AMT
+			     , CP.BUY_LIMIT_AMT
+			     , CP.APPLY_SCOPE
+			FROM   TB_COUPON CP
+			INNER  JOIN TB_COUPON_CUST_GRADE CGR
+			ON     CP.CPN_ID = CGR.CPN_ID
+			INNER  JOIN TB_CUST_COUPON CCP
+			ON     CP.CPN_ID = CCP.CPN_ID
+			INNER  JOIN TB_CUSTOMER CT
+			ON     CCP.CUST_NO = CT.CUST_NO
+			AND    CGR.USABLE_CUST_GRADE = CT.CUST_GRADE
+			INNER  JOIN TB_COUPON_CUST_GBN CGB
+			ON     CP.CPN_ID = CGB.CPN_ID
+			AND    CGB.USABLE_CUST_GB = CT.CUST_GB
+			INNER  JOIN (
+					SELECT X.*
+					FROM (
+						SELECT CR.CPN_ID
+						     , GD.GOODS_CD
+							 , GD.CART_SQ
+							 , GD.CURR_PRICE
+						FROM   TB_COUPON_REFVAL CR
+						INNER  JOIN GOODS_DATA GD
+						ON     CR.REF_VAL = GD.GOODS_CD
 						WHERE  1=1
-						AND    C4.SITE_CD = 'G000_10'
-						AND    C4.CATE_TYPE = 'G031_10'
-						ORDER  BY LEAF_CATE_NO 
-						     , CATE_LVL
-					) C4SRCH
-					INNER  JOIN TB_COUPON_REFVAL CR
-					ON     C4SRCH.CATE_NO = CR.REF_VAL
-					INNER  JOIN TB_CATE_GOODS CG
-					ON     C4SRCH.LEAF_CATE_NO = CG.CATE_NO
-					INNER  JOIN GOODS_DATA GD
-					ON     CG.GOODS_CD = GD.GOODS_CD
-					WHERE  C4SRCH.CATE_NO IS NOT NULL
-					AND    CR.CPN_TARGET = 'G260_11' -- 카테고리
+						AND    CR.CPN_TARGET = 'G260_10' -- 상품
+						AND    CR.DEL_YN = 'N'
+						UNION
+						SELECT CR.CPN_ID
+						     , GD.GOODS_CD
+							 , GD.CART_SQ
+							 , GD.CURR_PRICE
+						FROM   (
+							SELECT C4.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   TB_CATE_4SRCH C4
+							LEFT   OUTER JOIN (
+								SELECT 1 AS X
+								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
+							ON     1=1
+							WHERE  1=1
+							AND    C4.SITE_CD = 'G000_10'
+							AND    C4.CATE_TYPE = 'G031_10'
+							ORDER  BY LEAF_CATE_NO 
+							     , CATE_LVL
+						) C4SRCH
+						INNER  JOIN TB_COUPON_REFVAL CR
+						ON     C4SRCH.CATE_NO = CR.REF_VAL
+						INNER  JOIN TB_CATE_GOODS CG
+						ON     C4SRCH.LEAF_CATE_NO = CG.CATE_NO
+						INNER  JOIN GOODS_DATA GD
+						ON     CG.GOODS_CD = GD.GOODS_CD
+						WHERE  C4SRCH.CATE_NO IS NOT NULL
+						AND    CR.CPN_TARGET = 'G260_11' -- 카테고리
+						AND    CR.DEL_YN = 'N'
+						UNION
+						SELECT CR1.CPN_ID
+						     , GD.GOODS_CD
+							 , GD.CART_SQ
+							 , GD.CURR_PRICE
+						FROM   GOODS_DATA GD
+						INNER  JOIN TB_COUPON_REFVAL CR1 
+						ON     GD.SUPPLY_COMP_CD = CR1.REF_VAL
+						AND    CR1.CPN_TARGET = 'G260_12' -- 브랜드
+						AND    CR1.DEL_YN = 'N'
+						INNER  JOIN TB_COUPON_REFVAL CR2 
+						ON     GD.SUPPLY_COMP_CD = CR2.REF_VAL
+						AND    CR2.CPN_TARGET = 'G260_13' -- 공급업체
+						AND    CR2.DEL_YN = 'N'
+					) X
+					LEFT   OUTER JOIN TB_COUPON_REFVAL CR
+					ON     X.CPN_ID = CR.CPN_ID
+					AND    X.GOODS_CD = CR.REF_VAL 
+					AND    CR.CPN_TARGET = 'G260_14' -- 제외상품
 					AND    CR.DEL_YN = 'N'
-					UNION
-					SELECT CR1.CPN_ID
-					     , GD.GOODS_CD
-						 , GD.CART_SQ
-						 , GD.CURR_PRICE
-					FROM   GOODS_DATA GD
-					INNER  JOIN TB_COUPON_REFVAL CR1 
-					ON     GD.SUPPLY_COMP_CD = CR1.REF_VAL
-					AND    CR1.CPN_TARGET = 'G260_12' -- 브랜드
-					AND    CR1.DEL_YN = 'N'
-					INNER  JOIN TB_COUPON_REFVAL CR2 
-					ON     GD.SUPPLY_COMP_CD = CR2.REF_VAL
-					AND    CR2.CPN_TARGET = 'G260_13' -- 공급업체
-					AND    CR2.DEL_YN = 'N'
-				) X
-				LEFT  OUTER JOIN TB_COUPON_REFVAL CR
-				ON    X.CPN_ID = CR.CPN_ID
-				AND   X.GOODS_CD = CR.REF_VAL 
-				AND   CR.CPN_TARGET = 'G260_14' -- 제외상품
-				AND   CR.DEL_YN = 'N'
-		) Z
-		ON     Z.CPN_ID = CP.CPN_ID
-		WHERE  1=1
-		<if test="cpnId != null and cpnId != 0">
-		AND    CP.CPN_ID = #{cpnId}
-		</if>
-		AND    CP.SITE_CD = 'G000_10'
-		AND    CP.CPN_STAT = 'G232_11'				 -- 진행쿠폰
-		AND    CP.CPN_TYPE IN ('G230_11', 'G230_20') -- 상품쿠폰, 장바구니쿠폰
-		AND    CP.AVAIL_STDT <![CDATA[<]]> CURRENT_TIMESTAMP 
-		AND    CP.AVAIL_EDDT > CURRENT_TIMESTAMP
-		GROUP  BY Z.GOODS_CD
-		     , Z.CART_SQ
-		     , Z.CURR_PRICE
-			 , CP.CPN_ID
-			 , CP.CPN_NM
-			 , CP.CPN_TYPE
-			 , CP.DC_WAY
-			 , CP.DC_PVAL
-			 , CP.DC_MVAL
-			 , CP.DC_AVAL
-			 , CP.MAX_DC_AMT
-			 , CP.BUY_LIMIT_AMT
-		ORDER  BY Z.GOODS_CD
-		        , CP.CPN_ID
+					WHERE  1=1
+					AND    CR.REF_VAL IS NULL
+			) Z
+			ON     Z.CPN_ID = CP.CPN_ID
+			WHERE  1=1
+			<if test="cpnId != null and cpnId != 0">
+			AND    CP.CPN_ID = #{cpnId}
+			</if>
+			AND    CP.SITE_CD = 'G000_10'
+			AND    CP.CPN_STAT = 'G232_11'				 -- 진행쿠폰
+			AND    CP.CPN_TYPE IN ('G230_11', 'G230_20') -- 상품쿠폰, 장바구니쿠폰
+			AND    CP.AVAIL_STDT <![CDATA[<]]> CURRENT_TIMESTAMP 
+			AND    CP.AVAIL_EDDT > CURRENT_TIMESTAMP
+			AND    CT.CUST_NO = #{custNo}
+			AND    CP.APPLY_SCOPE = 'I'
+			GROUP  BY Z.GOODS_CD
+			     , Z.CART_SQ
+			     , Z.CURR_PRICE
+				 , CP.CPN_ID
+				 , CP.CPN_NM
+				 , CP.CPN_TYPE
+				 , CP.DC_WAY
+				 , CP.DC_PVAL
+				 , CP.DC_MVAL
+				 , CP.DC_AVAL
+				 , CP.MAX_DC_AMT
+				 , CP.BUY_LIMIT_AMT
+				 , CP.APPLY_SCOPE
+			UNION  ALL
+			SELECT 'ALL'		AS GOODS_CD
+			     , 0            AS CART_SQ
+			     , 0            AS CURR_PRICE
+			     , CP.CPN_ID
+			     , CP.CPN_NM
+			     , CP.CPN_TYPE
+			     , CP.DC_WAY
+			     , CASE WHEN #{frontGb} = 'P' THEN CP.DC_PVAL
+			            WHEN #{frontGb} = 'M' THEN CP.DC_MVAL
+			            ELSE CP.DC_AVAL END AS DC_VAL
+			     , CP.MAX_DC_AMT
+			     , CP.BUY_LIMIT_AMT
+			     , CP.APPLY_SCOPE
+			FROM   TB_COUPON CP
+			INNER  JOIN TB_COUPON_CUST_GRADE CGR
+			ON     CP.CPN_ID = CGR.CPN_ID
+			INNER  JOIN TB_CUST_COUPON CCP
+			ON     CP.CPN_ID = CCP.CPN_ID
+			INNER  JOIN TB_CUSTOMER CT
+			ON     CCP.CUST_NO = CT.CUST_NO
+			AND    CGR.USABLE_CUST_GRADE = CT.CUST_GRADE
+			INNER  JOIN TB_COUPON_CUST_GBN CGB
+			ON     CP.CPN_ID = CGB.CPN_ID
+			AND    CGB.USABLE_CUST_GB = CT.CUST_GB
+			WHERE  1=1
+			<if test="cpnId != null and cpnId != 0">
+			AND    CP.CPN_ID = #{cpnId}
+			</if>
+			AND    CP.SITE_CD = 'G000_10'
+			AND    CP.CPN_STAT = 'G232_11'				 -- 진행쿠폰
+			AND    CP.CPN_TYPE IN ('G230_11', 'G230_20') -- 상품쿠폰, 장바구니쿠폰
+			AND    CP.AVAIL_STDT <![CDATA[<]]> CURRENT_TIMESTAMP 
+			AND    CP.AVAIL_EDDT > CURRENT_TIMESTAMP
+			AND    CT.CUST_NO = #{custNo}
+			AND    CP.APPLY_SCOPE = 'A'
+		) X
 	</select>
 	
 	<!-- 배송비쿠폰 조회 -->
@@ -2021,13 +2068,23 @@
 		     , CP.MAX_DC_AMT
 		     , CP.BUY_LIMIT_AMT
 		FROM   TB_COUPON CP
+		INNER  JOIN TB_COUPON_CUST_GRADE CGR
+		ON     CP.CPN_ID = CGR.CPN_ID
 		INNER  JOIN TB_CUST_COUPON CCP
 		ON     CP.CPN_ID = CCP.CPN_ID
+		INNER  JOIN TB_CUSTOMER CT
+		ON     CCP.CUST_NO = CT.CUST_NO
+		AND    CGR.USABLE_CUST_GRADE = CT.CUST_GRADE
+		INNER  JOIN TB_COUPON_CUST_GBN CGB
+		ON     CP.CPN_ID = CGB.CPN_ID
+		AND    CGB.USABLE_CUST_GB = CT.CUST_GB
 		WHERE  1=1
-		AND    CP.SITE_CD = '10'
-		AND    CP.CPN_TYPE = 'G230_30'
+		AND    CP.SITE_CD = 'G000_10'
+		AND    CP.CPN_STAT = 'G232_11' -- 진행쿠폰
+		AND    CP.CPN_TYPE = 'G230_30' -- 배송비쿠폰
 		AND    CCP.AVAIL_STDT <![CDATA[<]]> CURRENT_TIMESTAMP 
 		AND    CCP.AVAIL_EDDT > CURRENT_TIMESTAMP
+		AND    CT.CUST_NO = #{custNo}
 	</select>
 	
 	<!-- 구매확정 포인트 지급 -->