Browse Source

Merge branch 'develop' into eskim

Conflicts:
	src/main/webapp/ux/style24_link.js
eskim 5 năm trước cách đây
mục cha
commit
14b713b820
47 tập tin đã thay đổi với 4657 bổ sung852 xóa
  1. 8 0
      pom.xml
  2. 84 3
      src/main/java/com/style24/front/biz/dao/TsfCartDao.java
  3. 11 0
      src/main/java/com/style24/front/biz/dao/TsfCouponDao.java
  4. 49 0
      src/main/java/com/style24/front/biz/dao/TsfOrderChangeDao.java
  5. 8 1
      src/main/java/com/style24/front/biz/dao/TsfPointDao.java
  6. 184 9
      src/main/java/com/style24/front/biz/service/TsfCartService.java
  7. 56 2
      src/main/java/com/style24/front/biz/service/TsfCouponService.java
  8. 11 11
      src/main/java/com/style24/front/biz/service/TsfCustomerService.java
  9. 3 3
      src/main/java/com/style24/front/biz/service/TsfGoodsService.java
  10. 101 0
      src/main/java/com/style24/front/biz/service/TsfOrderChangeService.java
  11. 16 0
      src/main/java/com/style24/front/biz/service/TsfOrderService.java
  12. 10 1
      src/main/java/com/style24/front/biz/service/TsfPointService.java
  13. 2 4
      src/main/java/com/style24/front/biz/thirdparty/NaverLogin.java
  14. 4 5
      src/main/java/com/style24/front/biz/thirdparty/NiceCertify.java
  15. 49 0
      src/main/java/com/style24/front/biz/thirdparty/Yes24Login.java
  16. 34 2
      src/main/java/com/style24/front/biz/web/TsfCartController.java
  17. 31 1
      src/main/java/com/style24/front/biz/web/TsfIndexController.java
  18. 64 12
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  19. 75 5
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  20. 29 5
      src/main/java/com/style24/persistence/domain/Cart.java
  21. 7 7
      src/main/java/com/style24/persistence/domain/Cate4Srch.java
  22. 0 44
      src/main/java/com/style24/persistence/domain/Coupon.java
  23. 5 5
      src/main/java/com/style24/persistence/domain/Goods.java
  24. 5 5
      src/main/java/com/style24/persistence/domain/GoodsStock.java
  25. 37 0
      src/main/java/com/style24/persistence/domain/Search.java
  26. 476 266
      src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml
  27. 20 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml
  28. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfCustomer.xml
  29. 217 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml
  30. 38 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfPoint.xml
  31. 14 6
      src/main/resources/config/application-locd.yml
  32. 56 0
      src/main/resources/config/application-tsit.yml
  33. 16 14
      src/main/resources/config/application.yml
  34. 25 0
      src/main/resources/log/logback-tsit.xml
  35. BIN
      src/main/webapp/WEB-INF/lib/ConnectionKCP.jar
  36. BIN
      src/main/webapp/WEB-INF/lib/jPpcliE.jar
  37. 246 0
      src/main/webapp/WEB-INF/views/web/cart/cartChangeOptionPopupWeb.html
  38. 69 34
      src/main/webapp/WEB-INF/views/web/cart/cartListAjaxFormWeb.html
  39. 22 143
      src/main/webapp/WEB-INF/views/web/cart/cartListFormWeb.html
  40. 1 1
      src/main/webapp/WEB-INF/views/web/customer/JoinTypeFormWeb.html
  41. 51 10
      src/main/webapp/WEB-INF/views/web/mypage/MypagePointFormWeb.html
  42. 213 78
      src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb.html
  43. 495 158
      src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html
  44. 1720 0
      src/main/webapp/WEB-INF/views/web/order/OrderFormWeb_20210304.html
  45. 51 0
      src/main/webapp/WEB-INF/views/web/pg/kcpOrderWeb.html
  46. 2 1
      src/main/webapp/ux/pc/css/layout.css
  47. 41 15
      src/main/webapp/ux/style24_link.js

+ 8 - 0
pom.xml

@@ -115,6 +115,14 @@
 			<scope>system</scope>
 			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/IPIN2Client.jar</systemPath>
 		</dependency>
+		<!--KCP-->
+		<dependency>
+			<groupId>com.kcp</groupId>
+			<artifactId>kcp</artifactId>
+			<version>1.0</version>
+			<scope>system</scope>
+			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/jPpcliE.jar</systemPath>
+		</dependency>
 		<!--//NICE 본인인증-->
 		<!-- \\\ WEB-INF lib -->
 	</dependencies>

+ 84 - 3
src/main/java/com/style24/front/biz/dao/TsfCartDao.java

@@ -5,6 +5,7 @@ import java.util.List;
 
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.Cart;
+import com.style24.persistence.domain.GoodsImg;
 import com.style24.persistence.domain.Order;
 
 /**
@@ -32,7 +33,7 @@ public interface TsfCartDao {
 	 * @author xodud1202
 	 * @since 2021. 02. 01
 	 */
-	Collection<Integer> selectHasSetItemCartList(Cart param);
+	Collection<Cart> selectHasSetItemCartList(Cart param);
 
 	/**
 	 * 장바구니 등록 상품 확인
@@ -62,7 +63,7 @@ public interface TsfCartDao {
 	void insertCartDetailInfo(Cart param);
 
 	/**
-	 * 장바구니 상세 신규 등록
+	 * 장바구니 수정
 	 * @param Cart
 	 * @return void
 	 * @author xodud1202
@@ -70,9 +71,27 @@ public interface TsfCartDao {
 	 */
 	void updateCartInfo(Cart param);
 
+	/**
+	 * 장바구니 수정
+	 * @param param
+	 * @return void
+	 * @author xodud1202
+	 * @since 2021. 03. 01
+	 */
+	void updateCart(Cart param);
+
+	/**
+	 * 장바구니 상세 수정
+	 * @param param
+	 * @return void
+	 * @author xodud1202
+	 * @since 2021. 03. 01
+	 */
+	void updateCartDetail(Cart param);
+
 	/**
 	 * 장바구니 이력 정보 저장
-	 * @param Cart
+	 * @param param
 	 * @return void
 	 * @author xodud1202
 	 * @since 2021. 02. 02
@@ -190,4 +209,66 @@ public interface TsfCartDao {
 	 * @date 2021. 2. 24
 	 */
 	void deleteCart(Cart param);
+
+	/**
+	 * 장바구니 삭제
+	 * @param param - 장바구니 정보
+	 * @author xodud1202
+	 * @date 2021. 03. 01
+	 */
+	void deleteCartDetail(Cart param);
+
+	/**
+	 * 장바구니 상품 마스터 정보 조회
+	 * @param param
+	 * @return
+	 * @author xodud1202
+	 * @date 2021. 2. 25
+	 */
+	Cart selectCartGoodsInfo(Cart param);
+
+	/**
+	 * 장바구니 세트 구성 상품 정보 조회
+	 * @param param
+	 * @return
+	 * @author xodud1202
+	 * @date 2021. 2. 25
+	 */
+	Collection<Cart> selectCartSetGoodsInfo(Cart param);
+
+	/**
+	 * 장바구니 상품 컬러 옵션 정보 조회
+	 * @param param
+	 * @return
+	 * @author xodud1202
+	 * @date 2021. 2. 26
+	 */
+	Collection<Cart> selectCartGoodsColorList(Cart param);
+
+	/**
+	 * 장바구니 상품 사이즈 옵션 정보 조회
+	 * @param param
+	 * @return
+	 * @author xodud1202
+	 * @date 2021. 2. 26
+	 */
+	Collection<Cart> selectCartGoodsSizeList(Cart param);
+
+	/**
+	 * 장바구니 자사 상품 이미지 리스트 조회
+	 * @param param
+	 * @return
+	 * @author xodud1202
+	 * @date 2021. 2. 25
+	 */
+	Collection<GoodsImg> selectCartSelfGoodsOptionImgList(Cart param);
+
+	/**
+	 * 장바구니 입점업체 상품 이미지 리스트 조회
+	 * @param param
+	 * @return
+	 * @author xodud1202
+	 * @date 2021. 2. 25
+	 */
+	Collection<GoodsImg> selectCartDelvGoodsOptionImgList(Cart param);
 }

+ 11 - 0
src/main/java/com/style24/front/biz/dao/TsfCouponDao.java

@@ -40,4 +40,15 @@ public interface TsfCouponDao {
 	 * @since 2021.02.25
 	 */
 	Collection<Coupon> getCustGradeCouponInfo(Coupon coupon);
+
+
+	/**
+	 * 회원가입 쿠폰
+	 * @param coupon - 쿠폰정보
+	 * @return Coupon
+	 * @author jsshin
+	 * @since 2021. 03. 03
+	 */
+	Coupon getJoinCoupon(Coupon coupon);
+
 }

+ 49 - 0
src/main/java/com/style24/front/biz/dao/TsfOrderChangeDao.java

@@ -0,0 +1,49 @@
+package com.style24.front.biz.dao;
+
+import java.util.Collection;
+
+import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.GiftCard;
+import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.Point;
+
+/**
+ * 주문 변경 Dao
+ * 
+ * @author card007
+ * @since 2021. 02. 26
+ */
+@ShopDs
+public interface TsfOrderChangeDao {
+
+	/**
+	 * 마이페이지 취소/반품 목록 조회
+	 *
+	 * @param Order
+	 * @return Collection<Order>
+	 * @author card007
+	 * @since 2021. 02. 26
+	 */
+	Collection<Order> getCancelListForMypage(Order order);
+
+	/**
+	 * 사용 상품권 정보 조회
+	 *
+	 * @param Order
+	 * @return Collection<GiftCard>
+	 * @author card007
+	 * @since 2021. 03. 02
+	 */
+	Collection<GiftCard> getUsedGiftcardInfo(Order order);
+
+	/**
+	 * 사용 포인트 정보 조회
+	 *
+	 * @param Order
+	 * @return Collection<Point>
+	 * @author card007
+	 * @since 2021. 03. 02
+	 */
+	Collection<Point> getUsedPointInfo(Order order);
+
+}

+ 8 - 1
src/main/java/com/style24/front/biz/dao/TsfPointDao.java

@@ -25,9 +25,16 @@ public interface TsfPointDao {
 	Point getExpectedPointInfo(Point point);
 	Point getExtinctPointInfo(Point point);
 	
-	
+	/**
+	 * 포인트정보 내역조회
+	 *
+	 * @param Point
+	 * @author csh9191
+	 * @since 2021. 03. 03
+	 */	
 	Collection<Point> getAccumulatePointList(Point point);
 	Collection<Point> getUsePointList(Point point);
+	Collection<Point> getAllPointList(Point point);
 	
 	
 

+ 184 - 9
src/main/java/com/style24/front/biz/service/TsfCartService.java

@@ -8,6 +8,7 @@ import java.util.HashMap;
 import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -15,6 +16,7 @@ import com.style24.core.biz.service.TscOrderService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.session.TscSession;
 import com.style24.front.biz.dao.TsfCartDao;
+import com.style24.front.support.env.TsfConstants;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Cart;
 import com.style24.persistence.domain.Goods;
@@ -45,11 +47,14 @@ public class TsfCartService {
 	@Autowired
 	private TscOrderService coreOrderService;
 
+	@Autowired
+	private Environment env;
+
 	/**
 	 * 장바구니 저장
 	 * 단품 : goodsCd, optCd, optCd1, optCd2
 	 * 세트 : goodsCd,
-	 * @param cart
+	 * @param params
 	 */
 	public void saveCartInfo(Collection<Cart> params) {
 		Cart cart = new Cart();
@@ -72,7 +77,10 @@ public class TsfCartService {
 			// 상품 마스터 정보 확인
 			Goods goods = new Goods();
 			goods.setGoodsCd(param.getGoodsCd());
+			goods.setFrontGb(TsfSession.getFrontGb());
+
 			goods = goodsService.getGoodsInfo(goods);
+
 			if (goods == null) {
 				throw new IllegalArgumentException("상품 정보가 존재하지 않습니다.");
 			}
@@ -94,6 +102,8 @@ public class TsfCartService {
 			}
 
 			cart.setGoodsCd(param.getGoodsCd());
+
+			// 장바구니에 있는 같은 상품(옵션이 상이해도 같은 상품이므로 상품 전체 조회)
 			int goodsCartCnt = cartDao.getHasGoodsCartCnt(param);
 			if (param.getGoodsQty() + goodsCartCnt > goods.getDayMaxOrdQty()) {
 				throw new IllegalArgumentException("1일 구매한도 수량이 초과되었습니다.");
@@ -171,13 +181,13 @@ public class TsfCartService {
 		}
 
 		// 같은 장바구니 상품 확인
-		Collection<Integer> cartSqList = cartDao.selectHasSetItemCartList(cart);
+		Collection<Cart> cartSqList = cartDao.selectHasSetItemCartList(cart);
 
 		if (cartSqList != null && cartSqList.size() > 0) {		// 장바구니 기존재
-			if (cartSqList.size() > 1) {							// 장바구니 조회 결과 이상시 insert or select 수정 필요
+			if (cartSqList.size() > 1) {						// 장바구니 조회 결과 이상시 insert or select 수정 필요
 				throw new IllegalArgumentException("장바구니 조회에 실패하였습니다. 관리자에게 문의해주세요.");
 			} else {
-				cart.setCartSq(cartSqList.iterator().next());
+				cart.setCartSq(cartSqList.iterator().next().getCartSq());
 				cartDao.updateCartInfo(cart);               // 장바구니 정보 수정
 				cartDao.insertCartHst(cart);                // 장바구니 수정 이력 저장
 			}
@@ -310,7 +320,7 @@ public class TsfCartService {
 
 	/**
 	 * 다다익선 할인 금액 조회
-	 * @param Order
+	 * @param param
 	 * param.cartSqArr[] : 필수
 	 * @return String
 	 * @author xodud1202
@@ -326,8 +336,6 @@ public class TsfCartService {
 
 		// 장바구니 등록 다다익선 일련번호 지정
 		List<Integer> applySq 		= new ArrayList<Integer>();
-		List<Integer> qtyApplySq	= new ArrayList<Integer>();
-		List<Integer> amtApplySq 	= new ArrayList<Integer>();
 		
 		for(Order tmtbApply : tmtbApplyList) {
 			if(TscConstants.GoodsGb.BASE.value().equals(tmtbApply.getQtyGoodsGb()) || TscConstants.GoodsGb.BASE.value().equals(tmtbApply.getAmtGoodsGb())) {
@@ -503,7 +511,7 @@ public class TsfCartService {
 	/**
 	 * 장바구니 배송단위별 상품 정보 조회
 	 *
-	 * @param Order
+	 * @param cartGoodsList
 	 * @author jsh77b
 	 * @since 2021. 02. 02
 	 */
@@ -563,7 +571,7 @@ public class TsfCartService {
 				if (param.getDelvFeeCd().equals(delv.getDelvFeeCd())) {
 					compCnt++;
 					if("N".equals(param.getSoldoutYn())) {
-						delv.setCompSumPrice(delv.getCompSumPrice() + param.getCurrPrice());
+						delv.setCompSumPrice(delv.getCompSumPrice() + param.getTmtbDcAmt());
 					}
 
 					if (compCnt == 1) {
@@ -645,6 +653,7 @@ public class TsfCartService {
 	public void deleteCart(Cart param) {
 		cartDao.deleteCart(param);
 	}
+
 	/**
 	 * 로그인 후 장바구니 Update
 	 * 		회원 로그인 후 호출됨으로 세션 정보 있음
@@ -688,4 +697,170 @@ public class TsfCartService {
 		}
 	}
 
+	public Cart getCartGoodsInfo(Cart param) {
+		// Collection<Cart> result = new ArrayList<Cart>();
+		/* cart.add(cartDao.selectCartGoodsInfo(param)); */
+
+		// 장바구니 상품 마스터 정보 조회
+		Cart cart = cartDao.selectCartGoodsInfo(param);
+
+		// 세트 상품일 경우
+		if(TscConstants.GoodsType.SET.value().equals(cart.getGoodsType())) {
+			cart.setCartCompsList(cartDao.selectCartSetGoodsInfo(cart));
+			for(Cart comp : cart.getCartCompsList()) {
+				comp.setCartSq(cart.getCartSq());
+				comp.setCartColorList(cartDao.selectCartGoodsColorList(comp));
+				for(Cart color : comp.getCartColorList()) {
+					color.setCartSq(comp.getCartSq());
+					color.setCartSizeList(cartDao.selectCartGoodsSizeList(color));
+				}
+			}
+			cart.setCartImgList(cartDao.selectCartDelvGoodsOptionImgList(cart));		// TB_GOODS.MAIN_COLOR_CD의 이미지를 가져옴.
+		} else {	// 일반, DEAL 상품일 경우
+			cart.setCartCompsList(new ArrayList<Cart>());
+			cart.getCartCompsList().add(new Cart());
+
+			for(Cart comp : cart.getCartCompsList()) {
+				if("Y".equals(cart.getSelfGoodsYn())) {
+					comp.setCartColorList(cartDao.selectCartGoodsColorList(cart));
+
+					if("Y".equals(cart.getSelfGoodsYn())) {		// 자사 상품은 TB_GOODS_IMG.COLOR_CD = TB_OPTION.OPT_CD1
+						for(Cart color : comp.getCartColorList()) {
+							color.setCartSq(cart.getCartSq());
+							color.setCartImgList(cartDao.selectCartSelfGoodsOptionImgList(color));
+							color.setCartSizeList(cartDao.selectCartGoodsSizeList(color));
+						}
+					}
+				} else {
+					comp.setCartColorList(cartDao.selectCartGoodsSizeList(cart));
+				}
+			}
+
+			if(!"Y".equals(cart.getSelfGoodsYn())) {			// 입점 상품은 TB_GOODS_IMG.COLOR_CD = TB_GOODS.MAIN_COLOR_CD
+				cart.setCartImgList(cartDao.selectCartDelvGoodsOptionImgList(cart));
+			}
+		}
+
+		cart.setImgPath(env.getProperty("upload.goods.view"));
+
+		return cart;
+	}
+
+	@Transactional("shopTxnManager")
+	public void updateCartOption(Cart param) {
+		param.setJsessionId(TsfSession.getSessionId());
+		param.setFrontGb(TsfSession.getFrontGb());
+
+		if(TsfSession.isLogin()) {
+			param.setCustNo(TsfSession.getInfo().getCustNo());
+			param.setRegNo(param.getCustNo());
+			param.setUpdNo(param.getCustNo());
+		} else {
+			param.setCustNo(0);
+			param.setRegNo(0);
+			param.setUpdNo(0);
+		}
+
+		// 재고 체크
+		Goods goods = new Goods();
+		goods.setGoodsCd(param.getGoodsCd());
+		goods.setFrontGb(TsfSession.getFrontGb());
+
+		goods = goodsService.getGoodsInfo(goods);
+
+		if (goods == null) {
+			throw new IllegalArgumentException("상품 정보가 존재하지 않습니다.");
+		}
+		if (TscConstants.GoodsStat.SOLDOUT.value().equals(goods.getGoodsStat())) {
+			throw new IllegalArgumentException("품절입니다.");
+		}
+		
+		// 현재 장바구니 수량
+		int goodsCartCnt = cartDao.getHasGoodsCartCnt(param);
+
+		if (param.getGoodsQty() + goodsCartCnt > goods.getDayMaxOrdQty()) {
+			throw new IllegalArgumentException("1일 구매한도 수량이 초과되었습니다.");
+		}
+
+		// 구성 상품 재고 확인
+		for(int i = 0 ; i < param.getCartDtlSqArr().length ; i++) {
+			// 상품 재고 확인
+			GoodsStock checkParam = new GoodsStock();
+			checkParam.setGoodsCd(param.getGoodsCd());
+			checkParam.setItemCd(param.getItemCds()[i]);
+			checkParam.setOptCd(param.getOptCds()[i]);
+			checkParam.setGoodsQty(param.getGoodsQty());
+			checkParam.setGoodsType(param.getGoodsType());
+			String stockResult = goodsService.getCheckStock(checkParam);
+
+			if (!"SUCCESS".equals(stockResult)) {
+				throw new IllegalArgumentException(stockResult);
+			}
+		}
+
+		StringBuilder sb = new StringBuilder();
+		if(TscConstants.GoodsType.SET.value().equals(param.getGoodsType())) {
+			// 장바구니 보유 CART_SQ 쿼리
+			for(int i = 0 ; i < param.getCartDtlSqArr().length ; i++) {
+				sb.append("SELECT CD.CART_SQ \n FROM TB_CART C \n INNER JOIN TB_CART_DETAIL CD \n ON C.CART_SQ = CD.CART_SQ \n WHERE C.CUST_NO = ");
+				// TODO 로그인 정보 확인
+				if (param.getCustNo() == 0) {
+					sb.append(param.getCustNo()).append("\n AND JSESSION_ID = '").append(param.getJsessionId()).append("'");
+				} else {
+					sb.append(param.getCustNo());
+				}
+				sb.append("\n AND CD.ITEM_CD = '").append(param.getItemCds()[i]).append("' \n AND CD.OPT_CD = '").append(param.getOptCds()[i]).append("'");
+				if (i < param.getCartDtlSqArr().length - 1) {
+					sb.append("\n UNION ALL \n");
+				}
+			}
+
+			param.setItemCdSql(sb.toString());
+			param.setCartGb(TscConstants.CartGb.CART.value());
+
+			// 장바구니내 같은 상품 확인
+			param.setNotCartSq(param.getCartSq());				// 수정 장바구니 번호 제외
+			Collection<Cart> cartList = cartDao.selectHasSetItemCartList(param);
+
+			// 동일 상품 존재시
+			if (cartList != null && cartList.size() > 0) {		// 장바구니 기존재
+				if (cartList.size() > 1) {						// 장바구니 조회 결과 이상시 insert or select 수정 필요
+					throw new IllegalArgumentException("장바구니 조회에 실패하였습니다. 관리자에게 문의해주세요.");
+				} else {
+					// 기존 존재 장바구니 UPDATE
+					Cart cart = new Cart();
+					cart.setCartSq(cartList.iterator().next().getCartSq());
+					cart.setGoodsQty(param.getGoodsQty());
+					cart.setAfLinkCd(param.getAfLinkCd());
+					cart.setIthrCd(param.getIthrCd());
+					cart.setContentsLoc(param.getContentsLoc());
+					cart.setPlanDtlSq(param.getPlanDtlSq());
+					cart.setUpdNo(param.getUpdNo());
+					cart.setGoodsCd(param.getGoodsCd());
+					cart.setCustNo(param.getCustNo());
+					cart.setRegNo(param.getRegNo());
+
+					cartDao.updateCartInfo(cart);               // 장바구니 정보 수정
+					cartDao.insertCartHst(cart);                // 장바구니 수정 이력 저장
+
+					// 장바구니 삭제
+					int[] cartSqArr = {param.getCartSq()};
+					param.setCartSqArr(cartSqArr);
+					cartDao.deleteCart(param);
+					cartDao.deleteCartDetail(param);
+				}
+			} else {		// 동일 상품 없을 시 UPDATE
+				cartDao.updateCart(param);						// 장바구니 마스터 정보 저장
+				cartDao.insertCartHst(param);                   // 장바구니 이력 정보 저장
+				for(int i = 0 ; i < param.getCartDtlSqArr().length ; i++) {
+					param.setItemCd(param.getItemCds()[i]);
+					param.setCartDtlSq(param.getCartDtlSqArr()[i]);
+					param.setOptCd(param.getOptCds()[i]);
+
+					cartDao.updateCartDetail(param);		// 장바구니 상세 저장
+					cartDao.insertCartDetailHst(param);         // 장바구니 상세 이력 저장
+				}
+			}
+		}
+	}
 }

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

@@ -7,6 +7,7 @@ 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;
@@ -58,6 +59,7 @@ public class TsfCouponService {
 	 * @since 2021. 02. 16
 	 */
 	public Coupon serialCpnApplyInfo(Coupon param) {
+		
 		// TODO 로그인 정보 입력
 		if(TsfSession.isLogin()) {
 			Login login = TsfSession.getInfo();
@@ -96,6 +98,7 @@ public class TsfCouponService {
 			}
 		} else {
 			// 다운로드 받을 수 있는 쿠폰이 존재하지 않음.
+			cpn = new Coupon();
 			cpn.setResult("해당 쿠폰은 존재하지 않습니다.");
 			return cpn;
 		}
@@ -104,9 +107,38 @@ public class TsfCouponService {
 		cpn.setAvailStdt(dtData.getAvailStdt());
 		cpn.setAvailEddt(dtData.getAvailEddt());
 
+		// 2021.03.03 장바구니 시퀀스 없음 jsh77b 
 		// 장바구니쿠폰 토탈 할인 금액 계산
-		param.setCpnId(cpn.getCpnId());
-		cpn.setDcAmt(getCartCpnApplyTotalAmt(param));
+		if (param.getCartSqArr() != null ) {
+			param.setCpnId(cpn.getCpnId());
+			cpn.setDcAmt(getCartCpnApplyTotalAmt(param));
+		} else {
+			Order order = new Order();
+			
+			
+			/*
+			// 3. 할인구간정보조회
+			// 3.2 상품쿠폰, 장바구니쿠폰 목록 조회
+			GagaMap goodsCartCpnMap = coreOrderService.getGoodsCartCpnApplyGoodsList(order);
+			
+			Collection<Order> goodsCpnList 	= (Collection<Order>) goodsCartCpnMap.get("goodsCpnList");
+			Collection<Order> cartCpnList 	= (Collection<Order>) goodsCartCpnMap.get("cartCpnList");
+			
+			// 3.2.1 상품기준 ---> 상품쿠폰 적용된 상품 목록
+			Collection<Order> goodsApplyCpnList = coreOrderService.getGoodsCpnApplyList(tmtbGoodsApplyList, goodsCpnList);
+			
+			// 3.2.2 장바구니쿠폰기준 ---> 상품목록
+			cartCpnList = coreOrderService.getCartCpnApplyList(tmtbGoodsApplyList, cartCpnList);
+			*/
+			
+			
+			
+			
+			
+		}
+		
+		
+		
 		cpn.setResult("SUCCESS");
 
 		return cpn;
@@ -222,4 +254,26 @@ public class TsfCouponService {
 		
 		return count;
 	}
+
+	/**
+	 * 회원가입시 혜택 쿠폰지급
+	 *
+	 * @param coupon - 쿠폰정보
+	 * @author jsshin
+	 * @since 2021.03.03
+	 */
+	@Transactional("shopTxnManager")
+	public void saveJoinCoupon(Coupon coupon) {
+		Coupon joinCoupon = couponDao.getJoinCoupon(coupon);
+		if (joinCoupon != null) {
+			CustCoupon custCoupon = new CustCoupon();
+			custCoupon.setCpnId(joinCoupon.getCpnId());
+			custCoupon.setAvailStdt(joinCoupon.getAvailStdt());
+			custCoupon.setAvailEddt(joinCoupon.getAvailEddt());
+			custCoupon.setPubReason(TscConstants.PubReason.JOIN.value());
+			custCoupon.setEndAlimSendYn(joinCoupon.getEndAlimYn());
+			custCoupon.setUpdNo(coupon.getCustNo());
+			custCoupon.setRegNo(coupon.getCustNo());
+		}
+	}
 }

+ 11 - 11
src/main/java/com/style24/front/biz/service/TsfCustomerService.java

@@ -6,7 +6,6 @@ import com.gagaframework.web.security.GagaPasswordEncoder;
 import com.style24.core.biz.service.TscCustomerService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.session.TscSession;
-import com.style24.core.support.util.CryptoUtils;
 import com.style24.core.support.util.MaskingUtils;
 import com.style24.front.support.security.TsfLoginDetails;
 import com.style24.front.support.security.session.TsfSession;
@@ -14,7 +13,6 @@ import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.CustSnsInfo;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.Login;
-import com.style24.persistence.domain.Point;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
@@ -52,6 +50,9 @@ public class TsfCustomerService {
 	@Autowired
 	private TsfLoginService loginService;
 
+	@Autowired
+	private TsfCouponService couponService;
+
 	@Autowired
 	private ObjectMapper objectMapper;
 
@@ -332,21 +333,20 @@ public class TsfCustomerService {
 	}
 
 	/**
-	 * 가입 후 처리 혜택(쿠폰,포인트)
+	 * 가입 후 처리 혜택(쿠폰)
 	 * @param customer - 일반가입, SNS 가입
 	 * @author jsshin
 	 * @since 2021. 02. 19
 	 */
 	@Transactional("shopTxnManager")
 	public void saveJoinPostProcessing(Customer customer) {
-		// 1. 쿠폰
-		// 어드민 > 회원등급정책 관리 > 신규회원등급으로 설정된 쿠폰
-
-
-		// 2. 포인트
-		// 어드민 > 포인트 정책설정 > 신규회원 등록된 포인트
-
-
+		// 1. 쿠폰지급 : 운영관리 > 회원등급정책관리 > WELCOME 등급
+		Coupon coupon = new Coupon();
+		coupon.setFrontGb(customer.getFrontGb());
+		coupon.setCustGrade(customer.getCustGrade());
+		coupon.setCustNo(customer.getCustNo());
+		coupon.setSiteCd(TscConstants.Site.STYLE24.value());
+		couponService.saveJoinCoupon(coupon);
 	}
 
 

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

@@ -222,7 +222,7 @@ public class TsfGoodsService {
 
 	/**
 	 * 상품 재고 체크
-	 * @param goodsStock
+	 * @param param
 	 * goodsCd   (원상품코드) 필수
 	 * goodsType (상품타입) 필수
 	 * optCd     (옵션코드) 필수
@@ -243,7 +243,7 @@ public class TsfGoodsService {
 		}
 
 		if(param.getGoodsType().equals(TscConstants.GoodsType.SET.value())) {		// 세트상품이면 구성 상품코드로 조회
-			GoodsStock stockCheck = new GoodsStock();		// 재고 조회 결과
+			GoodsStock stockCheck = new GoodsStock();								// 재고 조회 결과
 			stockCheck.setGoodsCd(param.getItemCd());
 			stockCheck.setOptCd(param.getOptCd());
 
@@ -261,7 +261,7 @@ public class TsfGoodsService {
 				return param.getItemCd() + "의 재고가 충분하지 않습니다.";
 			}
 		} else {
-			GoodsStock stockCheck = new GoodsStock();		// 재고 조회 결과
+			GoodsStock stockCheck = new GoodsStock();								// 재고 조회 결과
 			stockCheck.setGoodsCd(param.getGoodsCd());
 			stockCheck.setOptCd(param.getOptCd());
 

+ 101 - 0
src/main/java/com/style24/front/biz/service/TsfOrderChangeService.java

@@ -0,0 +1,101 @@
+package com.style24.front.biz.service;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.gagaframework.web.parameter.GagaMap;
+import com.style24.core.support.env.TscConstants;
+import com.style24.front.biz.dao.TsfOrderChangeDao;
+import com.style24.front.biz.dao.TsfOrderDao;
+import com.style24.persistence.domain.GiftCard;
+import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.Point;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 주문 변경 Service
+ *
+ * @author card007
+ * @since 2021. 02. 26
+ */
+@Service
+@Slf4j
+public class TsfOrderChangeService {
+
+	@Autowired
+	private TsfOrderChangeDao orderChangeDao;
+
+	/**
+	 * 마이페이지 취소/반품 목록 조회
+	 *
+	 * @param Order
+	 * @return Collection<Order>
+	 * @author card007
+	 * @since 2021. 02. 26
+	 */
+	public GagaMap getCancelListForMypage(Order order) {
+		GagaMap map = new GagaMap();
+		Boolean shotDelv = false;
+		Boolean selfMall = false;
+		Boolean supplyMall = false;
+		
+		Collection<Order> result = orderChangeDao.getCancelListForMypage(order);
+		for (Order tmpOrder : result) {
+			// 총알배송 아이콘 설정
+			if (!shotDelv && "Y".equals(tmpOrder.getShotDelvYn())) {
+				shotDelv = true;
+			}
+
+			// STYLE24 일반배송 아이콘 설정
+			if (!selfMall && "Y".equals(tmpOrder.getSelfGoodsYn())) {
+				selfMall = true;
+			}
+
+			// 업체직배송 아이콘 설정
+			if (!supplyMall && "N".equals(tmpOrder.getSelfGoodsYn())) {
+				supplyMall = true;
+			}
+		}
+		
+		map.set("shotDelv", shotDelv);
+		map.set("selfMall", selfMall);
+		map.set("supplyMall", supplyMall);
+		map.set("oneData", result.iterator().next());
+		map.set("returnList", result);
+		return map;
+	}
+
+	/**
+	 * 사용 상품권 정보 조회
+	 *
+	 * @param Order
+	 * @return Collection<GiftCard>
+	 * @author card007
+	 * @since 2021. 03. 02
+	 */
+	public Collection<GiftCard> getUsedGiftcardInfo(Order order) {
+		return orderChangeDao.getUsedGiftcardInfo(order);
+	}
+
+	/**
+	 * 사용 포인트 정보 조회
+	 *
+	 * @param Order
+	 * @return Collection<Point>
+	 * @author card007
+	 * @since 2021. 03. 02
+	 */
+	public Collection<Point> getUsedPointInfo(Order order) {
+		return orderChangeDao.getUsedPointInfo(order);
+	}
+
+}

+ 16 - 0
src/main/java/com/style24/front/biz/service/TsfOrderService.java

@@ -8,13 +8,18 @@ import java.util.Collection;
 import java.util.Date;
 import java.util.List;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.gagaframework.web.parameter.GagaMap;
+import com.style24.core.biz.service.TscKcpService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.front.biz.dao.TsfOrderDao;
 import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.Payment;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -31,6 +36,9 @@ public class TsfOrderService {
 	@Autowired
 	private TsfOrderDao orderDao;
 
+	@Autowired
+	private TscKcpService coreKcpService;
+
 	/**
 	 * 마이페이지 검색 기간 영역 설정
 	 *
@@ -206,6 +214,14 @@ public class TsfOrderService {
 		return mapList;
 	}
 
+	public void kcpTest(Payment param, HttpServletRequest request, HttpServletResponse response) {
+		try {
+			coreKcpService.kcpPayRequest(param, request, response);
+		} catch(Exception e) {
+			e.printStackTrace();
+		}
+	}
+
 	/**
 	 * 주문 상태 별 수량 조회
 	 *

+ 10 - 1
src/main/java/com/style24/front/biz/service/TsfPointService.java

@@ -42,7 +42,13 @@ public class TsfPointService {
 		return pointDao.getExtinctPointInfo(point);
 	}
 	
-	
+	/**
+	 * 포인트정보 내역조회
+	 *
+	 * @param Point
+	 * @author csh9191
+	 * @since 2021. 03. 03
+	 */	
 	public Collection<Point> getAccumulatePointList(Point point) {
 		return pointDao.getAccumulatePointList(point);
 	}
@@ -50,5 +56,8 @@ public class TsfPointService {
 	public Collection<Point> getUsePointList(Point point) {
 		return pointDao.getUsePointList(point);
 	}
+	public Collection<Point> getAllPointList(Point point) {
+		return pointDao.getAllPointList(point);
+	}
 
 }

+ 2 - 4
src/main/java/com/style24/front/biz/thirdparty/NaverLogin.java

@@ -160,10 +160,8 @@ public class NaverLogin {
 			String snsId = response.getString("id");
 			String custNm = this.uniCodeDeCode(response.getString("name"));
 			String email = response.getString("email");
-			// TODO: 네이버 로그인 셋팅 시 휴대폰 필수로 셋팅 한다고 함 jsshin 2021-02-26
-			String cellphnno = response.getString("mobile").equals("") ? "010-2590-6246" : response.getString("mobile");
-			// TODO: 출생년도도 필수 값으로 셋팅 해야 할것 같음 jsshin 2021-02-26
-			String birthYmd = (response.getString("birthyear").equals("") ? "1990" : response.getString("birthyear")) + response.getString("birthday").replaceAll("-","");
+			String cellphnno = response.getString("mobile");
+			String birthYmd = response.getString("birthyear") + response.getString("birthday").replaceAll("-","");
 			String sexGb = response.getString("gender");
 			String ci = this.requestReplace(response.getString("ci"),"encodeData");
 

+ 4 - 5
src/main/java/com/style24/front/biz/thirdparty/NiceCertify.java

@@ -5,7 +5,6 @@ import NiceID.Check.CPClient;
 import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.util.GagaDateUtil;
 import com.gagaframework.web.util.GagaFileUtil;
-import com.style24.core.support.session.TscSession;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Customer;
 import lombok.extern.slf4j.Slf4j;
@@ -68,7 +67,7 @@ public class NiceCertify {
 
 		String sRequestNo = niceCheck.getRequestNO(niceId);
 		log.info("sRequestNo: {}", sRequestNo);
-		TscSession.setAttribute("REQ_SEQ", sRequestNo);
+		TsfSession.setAttribute("REQ_SEQ", sRequestNo);
 
 		String callback = GagaFileUtil.getConcatenationPath(PROTOCOL + TsfSession.getHttpServletRequest().getServerName(), niceCallback);
 		log.info("niceCallback: {}", niceCallback);
@@ -184,7 +183,7 @@ public class NiceCertify {
 		String sMobileCo = (String)result.get("MOBILE_CO");				// 통신사
 
 
-		String sRequestNo = TscSession.getAttribute("REQ_SEQ");	// 세션에 저장된 요청번호
+		String sRequestNo = TsfSession.getAttribute("REQ_SEQ");	// 세션에 저장된 요청번호
 		if (!sRequestNo.equals(sRequestNumber)) {
 			sResponseNumber = "";
 			sAuthType = "";
@@ -235,7 +234,7 @@ public class NiceCertify {
 		String callback = GagaFileUtil.getConcatenationPath( PROTOCOL + TsfSession.getHttpServletRequest().getServerName(), ipinCallback);
 
 		String sCPRequestNo = ipinClinet.getRequestNO(ipinId);
-		TscSession.setAttribute("CPREQUEST", sCPRequestNo);
+		TsfSession.setAttribute("CPREQUEST", sCPRequestNo);
 
 		// 인증요청 암호화 데이터 생성
 		int iRtn = ipinClinet.fnRequest(ipinId, ipinPwd, sCPRequestNo, callback);
@@ -318,7 +317,7 @@ public class NiceCertify {
 		String sAuthInfo = ipinClinet.getAuthInfo();		// 본인확인수단 (0~4: 가이드 참조)
 
 
-		String sCPRequestNo = TscSession.getAttribute("CPREQUEST");
+		String sCPRequestNo = TsfSession.getAttribute("CPREQUEST");
 		if (!sCPRequestNo.equals(sCPRequestNum)) {
 			throw new IllegalStateException("세션값 불일치 오류 입니다.");
 		}

+ 49 - 0
src/main/java/com/style24/front/biz/thirdparty/Yes24Login.java

@@ -0,0 +1,49 @@
+package com.style24.front.biz.thirdparty;
+
+import com.gagaframework.web.util.GagaFileUtil;
+import com.style24.front.support.security.session.TsfSession;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+
+/**
+ * Yes24 로그인
+ *
+ * @author jsshin
+ * @since 2021. 03. 03
+ */
+@Component
+@Slf4j
+public class Yes24Login {
+
+	@Autowired
+	private Environment env;
+
+	@Autowired
+	private RestTemplate restTemplate;
+
+	public static final String PROTOCOL = "http://";
+
+	/**
+	 * YES24 로그인 창
+	 * @param state - 콜백 시 해당 값으로 비교 및 모바일을 redirect 값이 있음
+	 * @return String - 호출 url정보
+	 * @author jsshin
+	 * @since 2021. 03. 03
+	 */
+	public String getAuthorizeUrl(String state) {
+		String authorizeUrl = "https://www.yes24.com/Templates/FTLogin.aspx";
+		String callBackUrl = "/signin/snsLoginCallback?snsType=YS";
+		StringBuilder apiUrlBuilder = new StringBuilder();
+		String redirectUri = GagaFileUtil.getConcatenationPath(PROTOCOL + TsfSession.getHttpServletRequest().getServerName(), callBackUrl);
+		apiUrlBuilder.append(authorizeUrl)
+				.append("?PID=101582")
+				.append("&ReturnURL=")
+				.append(redirectUri);
+		log.info("apiUrlBuilder ===> {}", apiUrlBuilder.toString());
+		return apiUrlBuilder.toString();
+	}
+}

+ 34 - 2
src/main/java/com/style24/front/biz/web/TsfCartController.java

@@ -4,6 +4,7 @@ import java.text.SimpleDateFormat;
 import java.util.Collection;
 import java.util.Date;
 
+import com.gagaframework.web.rest.server.GagaResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Controller;
@@ -17,6 +18,7 @@ import org.springframework.web.servlet.ModelAndView;
 
 import com.gagaframework.web.parameter.GagaMap;
 import com.style24.core.biz.service.TscOrderService;
+import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.front.biz.service.TsfCartService;
 import com.style24.front.biz.service.TsfCouponService;
@@ -161,8 +163,6 @@ public class TsfCartController extends TsfBaseController {
 	/**
 	 * 장바구니 삭제
 	 * @param param
-	 * rdCpnNm : 시리얼쿠폰명
-	 * cartSqArr[] : 장바구니 번호 배열
 	 * @return GagaMap
 	 * @author xodud1202
 	 * @since 2021. 02. 23
@@ -173,4 +173,36 @@ public class TsfCartController extends TsfBaseController {
 		cartService.deleteCart(param);
 		return new GagaMap();
 	}
+
+	/**
+	 * 장바구니 삭제
+	 * @param param
+	 * @return String
+	 * @author xodud1202
+	 * @since 2021. 02. 23
+	 */
+	// @ResponseBody
+	@PostMapping("/goods/info")
+	public String getCartGoodsInfo(Cart param, Model model) {
+		Cart cart = cartService.getCartGoodsInfo(param);
+
+		model.addAttribute("cart", cart);
+		model.addAttribute("setType", TscConstants.GoodsType.SET.value());
+		return super.getDeviceViewName("cart/cartChangeOptionPopup");
+	}
+
+	/**
+	 * 장바구니 옵션 변경
+	 * @param param
+	 * @return GagaMap
+	 * @author xodud1202
+	 * @since 2021. 02. 23
+	 */
+	@ResponseBody
+	@PostMapping("/change/option")
+	public GagaResponse updateCartOption(@RequestBody Cart param) {
+		log.info("CHECK INFO >> {} / {} / {} / {}", param.getCartSq(), param.getCartDtlSqArr().toString(), param.getOptCds().toString(), param.getGoodsQty());
+		cartService.updateCartOption(param);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
 }

+ 31 - 1
src/main/java/com/style24/front/biz/web/TsfIndexController.java

@@ -17,6 +17,7 @@ import com.style24.core.support.env.TscConstants;
 import com.style24.front.biz.service.TsfCustomerService;
 import com.style24.front.biz.thirdparty.KaKaoLogin;
 import com.style24.front.biz.thirdparty.NaverLogin;
+import com.style24.front.biz.thirdparty.Yes24Login;
 import com.style24.persistence.domain.CustSnsInfo;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -61,6 +62,9 @@ public class TsfIndexController extends TsfBaseController {
 	@Autowired
 	private NaverLogin naverLogin;
 
+	@Autowired
+	private Yes24Login yes24Login;
+
 	@Autowired
 	private ObjectMapper objectMapper;
 
@@ -187,7 +191,7 @@ public class TsfIndexController extends TsfBaseController {
 	 *
 	 * @return String
 	 * @author jsshin
-	 * @since 2020. 5. 25
+	 * @since 2021. 02. 23
 	 */
 	@GetMapping("/signin/naverlogin")
 	public String signinNaverLogin(@RequestParam(value = "rememberMe", required = false) String rememberMe
@@ -208,6 +212,32 @@ public class TsfIndexController extends TsfBaseController {
 		return "redirect:" + redirectUrl;
 	}
 
+	/**
+	 * YES24 로그인 페이지 호출
+	 *
+	 * @return String
+	 * @author jsshin
+	 * @since 2021. 02. 23
+	 */
+	@GetMapping("/signin/yes24login")
+	public String signinYes24Login(@RequestParam(value = "rememberMe", required = false) String rememberMe
+			, @RequestParam(value = "requestGb", required = false) String requestGb) {
+
+		if (StringUtils.isNotBlank(rememberMe)) {
+			// RememberMe 세션 저장
+			TsfSession.setAttribute("rememberMe", rememberMe);
+		}
+		// CSRF 방지를 위한 상태 토큰 생성 코드
+		SecureRandom random = new SecureRandom();
+		String state = new BigInteger(130, random).toString(32);
+		state += "!@!" + requestGb;
+		TsfSession.setAttribute("state", state);
+
+		String redirectUrl = yes24Login.getAuthorizeUrl(state);
+
+		return "redirect:" + redirectUrl;
+	}
+
 
 	/**
 	 * SNS 로그인

+ 64 - 12
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -20,12 +20,16 @@ import org.springframework.web.servlet.ModelAndView;
 import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.rest.server.GagaResponseStatus;
 import com.style24.core.biz.service.TscCustomerService;
+import com.style24.core.biz.service.TscKakaoPayService;
+import com.style24.core.biz.service.TscOrderChangeService;
+import com.style24.core.biz.service.TscOrderRefundService;
 import com.style24.core.biz.service.TscOrderService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.front.biz.service.TsfCouponService;
 import com.style24.front.biz.service.TsfCustomerService;
 import com.style24.front.biz.service.TsfGiftcardService;
+import com.style24.front.biz.service.TsfOrderChangeService;
 import com.style24.front.biz.service.TsfOrderService;
 import com.style24.front.biz.service.TsfPointService;
 import com.style24.front.biz.service.TsfRendererService;
@@ -57,15 +61,24 @@ public class TsfMypageController extends TsfBaseController {
 
 	@Autowired
 	private TsfCustomerService customerService;
-	
+
 	@Autowired
 	private TscCustomerService coreCustomerService;
 
 	@Autowired
 	private TsfOrderService orderService;
-	
+
 	@Autowired
 	private TscOrderService coreOrderService;
+	
+	@Autowired
+	private TsfOrderChangeService orderChangeService;
+
+	@Autowired
+	private TscOrderChangeService coreOrderChangeService;
+
+	@Autowired
+	private TscOrderRefundService coreOrderRefundService;
 
 	@Autowired
 	private TsfReviewService reviewService;
@@ -81,9 +94,12 @@ public class TsfMypageController extends TsfBaseController {
 
 	@Autowired
 	private TsfCouponService couponService;
-	
+
 	@Autowired
 	private TsfRendererService rendererService;
+	
+	@Autowired
+	private TscKakaoPayService kakaoPayService;
 
 	/**
 	 * 마이페이지 메인 화면
@@ -451,15 +467,14 @@ public class TsfMypageController extends TsfBaseController {
 		mav.addObject("customerInfo", customer);
 
 
-		// 주문목록 조회
-		Collection<GagaMap> orderList = orderService.getOrderListForMypage(order);
+		// 반품 가능 리스트 조회
+		mav.addObject("returnList", orderChangeService.getCancelListForMypage(order));
 
-		if (orderList.size() == 0) {
-			mav.setViewName("redirect:/mypage/order/list/form");
-			return mav;
-		}
+		// 사용 상품권 정보 조회
+		mav.addObject("usedGiftCardInfo", orderChangeService.getUsedGiftcardInfo(order));
 
-		mav.addObject("orderList", orderList);
+		// 사용 포인트 정보 조회
+		mav.addObject("usedPointInfo", orderChangeService.getUsedPointInfo(order));
 
 		// 주문 결제정보 조회
 		mav.addObject("paymentInfo", orderService.getPaymentInfoForMypage(order));
@@ -467,8 +482,8 @@ public class TsfMypageController extends TsfBaseController {
 		// 주문 배송지 정보 조회
 		mav.addObject("deliveryAddrInfo", orderService.getOrderDeliveryAddrInfo(order));
 
-		// 교환 사유 목록 조회
-		mav.addObject("exchangeReason", rendererService.getCommonCodeList("G688", "Y"));
+		// 반품 사유 목록 조회
+		mav.addObject("returnReason", rendererService.getCommonCodeList("G688", "Y"));
 
 		mav.setViewName(super.getDeviceViewName("/mypage/MypageReturnForm"));
 
@@ -545,5 +560,42 @@ public class TsfMypageController extends TsfBaseController {
 		
 		return result;
 	}
+	
+	/**
+	 * 마이페이지 STYLE24 전체내역
+	 *
+	 * @param param
+	 * @return GagaMap
+	 * @author csh9191
+	 * @since 2021. 03. 02
+	 */
+	@PostMapping("/allpoint/list")
+	@ResponseBody
+	public GagaMap getAllPointList(@RequestBody Point point) {
+		GagaMap result = new GagaMap();
+		
+		int custNo = TsfSession.getInfo().getCustNo();
+		point.setCustNo(custNo);
+		
+		result.set("allPointList",pointService.getAllPointList(point));
+		
+		log.info("result {}", result);
+		
+		return result;
+	}
+
+	/**
+	 * 마이페이지 반품신청 환불금액 계산
+	 *
+	 * @param Order
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 02. 26
+	 */
+	@PostMapping("/cancel/refund/amt/calculate")
+	@ResponseBody
+	public GagaMap calculateRefundAmt(@RequestBody List<Order> orderList) {
+		return coreOrderRefundService.cnclRtnRefundAmt(orderList);
+	}
 
 }

+ 75 - 5
src/main/java/com/style24/front/biz/web/TsfOrderController.java

@@ -2,8 +2,12 @@ package com.style24.front.biz.web;
 
 import java.util.Collection;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
@@ -11,12 +15,15 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
 import com.gagaframework.web.parameter.GagaMap;
 import com.style24.core.biz.service.TscFreegiftService;
+import com.style24.core.biz.service.TscKakaoPayService;
 import com.style24.core.biz.service.TscOrderService;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.front.biz.service.TsfCartService;
+import com.style24.front.biz.service.TsfOrderService;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.Payment;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -36,6 +43,9 @@ public class TsfOrderController extends TsfBaseController {
 
 	@Autowired
 	private TscOrderService coreOrderService;
+
+	@Autowired
+	private TsfOrderService orderService;
 	
 	@Autowired
 	private TscFreegiftService coreFreegiftService;
@@ -43,6 +53,9 @@ public class TsfOrderController extends TsfBaseController {
 	@Autowired
 	private TsfCartService cartService;
 	
+	@Autowired
+	private TscKakaoPayService kakaoPayService;
+	
 	/**
 	 * 회원, 비회원 주문페이지
 	 *
@@ -173,6 +186,11 @@ public class TsfOrderController extends TsfBaseController {
 		// 3.3 배송비쿠폰목록 조회
 		Collection<Order> delvCpnList = coreOrderService.getDelvCpnList(order);
 		
+		Collection<Order> delvFeeCdList = (Collection<Order>) delvOrderMap.get("delvFeeCdList");
+		
+		// 3.3.1 배소업체기준 ---> 배송비쿠폰
+		delvCpnList = coreOrderService.getDelvCpnApplyList(delvFeeCdList, delvCpnList);
+		
 		// 3.4 고객 보유 포인트 정보 조회
 		int rmPntAmt = coreOrderService.getCustPointInfo(order);
 		
@@ -208,11 +226,15 @@ public class TsfOrderController extends TsfBaseController {
 		mav.addObject("goodsApplyCpnList"				, goodsApplyCpnList);						// 상품적용쿠폰
 		mav.addObject("cartCpnList"						, cartCpnList);								// 장바구니쿠폰목록
 		mav.addObject("delvCpnList"						, delvCpnList);								// 배송비쿠폰목록
-		mav.addObject("prePntDcAmt"						, goodsDcAmtMap.get("prePntDcAmt"));		// 선포인트정보
-		mav.addObject("goodsSumAmt"						, goodsDcAmtMap.get("goodsSumAmt"));		// 상품금액합계
+		
+		mav.addObject("orgGoodsSumAmt"					, goodsDcAmtMap.get("orgGoodsSumAmt"));		// 상품금액합계
+		mav.addObject("cpn1DcSumAmt"					, goodsDcAmtMap.get("cpn1DcSumAmt"));		// 즉시할인금액합계
 		mav.addObject("tmtbDcSumAmt"					, goodsDcAmtMap.get("tmtbDcSumAmt"));		// 다다익선할인금액합계
+		mav.addObject("prePntDcAmt"						, goodsDcAmtMap.get("prePntDcAmt"));		// 선포인트사용가능금액
+
 		mav.addObject("rmPntAmt"						, rmPntAmt);								// 고객포인트정보
 		mav.addObject("rmGfcdAmt"						, rmGfcdAmt);								// 고객상품권정보
+		mav.addObject("savePntSumAmt"					, goodsDcAmtMap.get("savePntSumAmt"));		// 적립예정포인트합계
 		
 		// 104. 사은품정보
 		mav.addObject("freegiftGoodsList"				, resultMap.get("freegiftGoodsList"));		// 사은품상품정보 목록
@@ -222,7 +244,43 @@ public class TsfOrderController extends TsfBaseController {
 		
 		return mav;
 	}
-	
+
+	/**
+	 * 총알배송 가능 지역 체크
+	 *
+	 * @param
+	 * @return
+	 * @author jsh77b
+	 * @since 2021. 02. 08
+	 */
+	@ResponseBody
+	@RequestMapping(value = "/create/order")
+	public ModelAndView createOrder(Order order) {
+		ModelAndView mav = new ModelAndView();
+
+		mav.setViewName(super.getDeviceViewName("pg/kcpOrder"));
+		return mav;
+	}
+
+	/**
+	 * 주문페이지
+	 *
+	 * @param
+	 * @return
+	 * @author jsh77b
+	 * @since 2021. 02. 02
+	 */
+	@SuppressWarnings({ "unchecked", "null" })
+	@RequestMapping(value = "/pay/result/response")
+	public ModelAndView payResultResponse(Payment param, HttpServletRequest request, HttpServletResponse response) {
+		ModelAndView mav = new ModelAndView();
+
+		orderService.kcpTest(param, request, response);
+		
+		mav.setViewName(super.getDeviceViewName("pg/kcpOrder"));
+		return mav;
+	}
+
 	/**
 	 * 총알배송 가능 지역 체크
 	 *
@@ -334,7 +392,19 @@ public class TsfOrderController extends TsfBaseController {
 		
 		return mav;
 	}
-	
-	
+
+	/**
+	 * 카카오페이 결제준비 처리
+	 *
+	 * @param Order
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 03. 03
+	 */
+	@RequestMapping(value = "/kakao/payment/ready")
+	@ResponseBody
+	public GagaMap kakaoPaymentReady(Order order) {
+		return kakaoPayService.kakaoPaymentReady(order);
+	}
 
 }

+ 29 - 5
src/main/java/com/style24/persistence/domain/Cart.java

@@ -1,5 +1,7 @@
 package com.style24.persistence.domain;
 
+import java.util.Collection;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TscBaseDomain;
 
@@ -15,7 +17,10 @@ import lombok.Data;
 @Data
 public class Cart extends TscBaseDomain {
 	// 장바구니 정보
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private int[] cartSqArr;		// 장바구니 일련번호 배열 (일시품절제외 조회)
 	private int cartSq;				// 장바구니 번호
+	private int notCartSq;			// 제외 장바구니 번호
 	private int cartDtlSq;			// 장바구니 상세 번호
 	private int custNo;				// 고객번호
 	private int planDtlSq;			// 기획전상세번호
@@ -30,8 +35,17 @@ public class Cart extends TscBaseDomain {
 	private String ithrCd;			// 유입경로(공통코드 G027)
 	private String contentsLoc;		// 컨텐츠위치(공통코드G028)
 	private String dealGoodsCd;		// 딜상품코드
+	private String cartOptCd1;		// 장바구니 컬러 옵션
+	private String cartOptCd;		// 장바구니 옵션
+	private String cartColorNm;		// 장바구니 컬러명
 
 	// 장바구니 상세 정보
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private int[] cartDtlSqArr;		// 장바구니 일련번호 배열 (일시품절제외 조회)
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] optCds;		// 옵션코드
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] itemCds;		// 장바구니 단품코드
 	private String itemCd;			// 단품코드(상품). 일반상품과 딜상품은 상품코드와 동일
 	private String optCd;			// 옵션코드
 	private String optCd1;			// 옵션코드1
@@ -45,14 +59,24 @@ public class Cart extends TscBaseDomain {
 	private String goodsType;		// 상품 타입
 	private String compsGoodsCd;	// 세트 구성상품 코드
 	private String itemCdSql;		// 상품 조회 쿼리문
+	private String selfGoodsYn;		// 자사상품여부
+	private String mainColorCd;		// 상품 메인 컬러
+	private String brandEnm;		// 브랜드 영문명
+	private String brandKnm;		// 브랜드 국문명
+	private String goodsNm;			// 상품명
+	private String sysImgNm;		// 이미지명
+	private String colorNm;			// 컬러명
+	private String imgPath;			// 상품 이미지 경로
+	private String soldoutYn;		// 옵션
+	private String frontGb;			// 접속 디바이스 정보
 
-	// 다다익선 정보
-
-	// 즉시할인쿠폰 정보
+	// 장바구니 상품 정보 리스트
+	Collection<Cart> cartCompsList;		// 장바구니 상품 구성 상품리스트
+	Collection<Cart> cartColorList;		// 장바구니 상품 컬러리스트
+	Collection<Cart> cartSizeList;		// 장바구니 상품 사이즈리스트
+	Collection<GoodsImg> cartImgList;	// 장바구니 상품 이미지 리스트
 
 	// 시리얼쿠폰 정보
-	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	private int[] cartSqArr;		// 장바구니 일련번호 배열 (일시품절제외 조회)
 	private String cpnNm;
 	private String rdCpnNm;
 	private String usedDt;

+ 7 - 7
src/main/java/com/style24/persistence/domain/Cate4Srch.java

@@ -16,18 +16,18 @@ public class Cate4Srch extends TscBaseDomain {
 
 	private String siteCd;
 	private String cateGb;
-	private int cateNo;
-	private int leafCateNo;
+	private Integer cateNo;
+	private Integer leafCateNo;
 	private String cateType;
-	private int cate1No;
+	private Integer cate1No;
 	private String cate1Nm;
-	private int cate2No;
+	private Integer cate2No;
 	private String cate2Nm;
-	private int cate3No;
+	private Integer cate3No;
 	private String cate3Nm;
-	private int cate4No;
+	private Integer cate4No;
 	private String cate4Nm;
-	private int cate5No;
+	private Integer cate5No;
 	private String cate5Nm;
 	private String fullCateCd;
 	private String fullCateNm;

+ 0 - 44
src/main/java/com/style24/persistence/domain/Coupon.java

@@ -1,44 +0,0 @@
-package com.style24.persistence.domain;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.style24.persistence.TscBaseDomain;
-
-import lombok.Data;
-
-/**
- * 장바구니
- *
- * @author xodud1202
- * @since 2021.01.22
- */
-@SuppressWarnings("serial")
-@Data
-public class Coupon extends TscBaseDomain {
-	// 쿠폰 정보
-	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	private int[] cartSqArr;		// 장바구니 일련번호 배열
-	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	private int[] currPrices;		// 상품가격 배열
-	private int cpnId;				// 쿠폰번호
-	private int custNo;				// 회원번호
-	private String custGb;			// 회원구분
-	private String custGrade;		// 회원등급
-	private int availDays;			// 쿠폰 다운로드 후 유효기간일
-	private int rdCpnId;			// 랜덤쿠폰번호
-	private int dcAmt;				// 할인적용금액
-	private int dcVal;				// 할인금액/율
-	private String useYn;			// 쿠폰 사용 여부
-	private String cpnNm;			// 쿠폰명
-	private String rdCpnNm;			// 시리얼쿠폰 키
-	private String usedDt;			// 쿠폰 사용완료 일자
-	private String result;			// 결과
-	private String pdGb;			// 기간/일수 구분 (P : 기간, D : 일수)
-	private String availStdt;		// 쿠폰 유효일
-	private String availEddt;		// 쿠폰 유효일
-	private String endAlimYn;		// 쿠폰 종료 알림 여부
-	private String frontGb;			// 화면 구분
-	private String availYn;			// 지급 받은 쿠폰 사용 가능 유무
-	private String dcWay;			// 할인금액/율 구분
-	private String cpnDesc;			// 쿠폰설명
-	private int downloadCnt;		// 다운로드수
-}

+ 5 - 5
src/main/java/com/style24/persistence/domain/Goods.java

@@ -74,7 +74,7 @@ public class Goods extends TscBaseDomain {
 	private String colorCd;		//색상코드
 	private String colorNM;		//색상코드명
 	private String brandnm;		//브랜드명
-	private int brandGroupNo;	//브랜드그룹번호
+	private Integer brandGroupNo;	//브랜드그룹번호
 	private String brandGroupNm;	//브랜드그룹명
 	private String frontGb;		//프론트구분
 	private String isApp;		//앱구분
@@ -83,7 +83,7 @@ public class Goods extends TscBaseDomain {
 	private String afLinkCd;	//제휴링크코드
 	private String ithrCd;		//위치코드
 	private String contentsLoc;	//컨텐츠위치
-	private int pntRate;		//적립율
+	private float pntRate;		//적립율
 	private String prePntUsableYn;	//적립율즉시사용여부
 	private String niClsfCd;	//고시분류코드
 	private String brandTcateNo;	//브랜드카테1번호
@@ -92,7 +92,7 @@ public class Goods extends TscBaseDomain {
 	private String viewDt;		//미리보기일시
 	private String custGb;		//고객구분
 	private String custGrade;	//고객등급
-	private int custNo;		//고객번호
+	private Integer custNo;		//고객번호
 	private String soldoutGoodsDisplayYn = "N";	//품절노추여부
 	private int pointUnit = 10;	//포인트단위
 	private String goodsNmFull;	//상품타이틀+ 상품명
@@ -103,7 +103,7 @@ public class Goods extends TscBaseDomain {
 	private String wishYn;		//위시리스트여부
 	private String goodsComposeSearchYn;	//구성상품 조회여부
 	private String goodsCdIncludeYn;	//상품코드포함 여부
-	private String socialSq;	//소셜번호
+	private Integer socialSq;	//소셜번호
 //	private String socialTypeNm;	//소셜타입명
 	private String socialType;	//소셜타입
 	private String socialTnm;	//소셜명
@@ -111,7 +111,7 @@ public class Goods extends TscBaseDomain {
 	private String socialEddt;	//소셜종료일
 	private String planDtlSq;	//기획전상세번호
 
-	private int floorUnit; // 절사단위(10:일원단위절사, 100:십원단위절사, 1000:백원단위절사)
+	private int floorUnit; // 절사단위(1:일원단위절사, 10:십원단위절사, 100:백원단위절사)
 
 	private String skuModelNo;		// SKUModelNo(WMS)
 	private String compsGoodsCd;	// 세트 구성품 상품번호

+ 5 - 5
src/main/java/com/style24/persistence/domain/GoodsStock.java

@@ -14,22 +14,22 @@ import lombok.Data;
 @Data
 public class GoodsStock extends TscBaseDomain {
 	// 재고 정보
+	private Integer productNo;		// ProductNo(WMS)
 	private String goodsCd;			// 상품번호
 	private String optCd;			// 옵션코드
 	private String optCd1;			// 옵션코드1(자사 : 컬러, 입점 : 옵션명1)
 	private String optCd2;			// 옵션코드1(자사 : 사이즈, 입점 : 옵션명2)
-	private Integer skuModelNo;		// SKUModelNo(WMS)
-	private Integer productNo;		// ProductNo(WMS)
-	private Integer productCode;	// ProductCode(WMS)
+	private String skuModelNo;		// SKUModelNo(WMS)
+	private String productCode;		// ProductCode(WMS)
+	private String soldoutYn;		// 품절여부
 	private int currStockQty;		// 가용재고
 	private int addPrice;			// 추가금액
-	private String soldoutYn;		// 품절여부
 	private int dispOrd;			// 표시순서
 
 	private String itemCd;			// 구성상품코드
 	private String goodsType;		// 상품구분
+	private String sysImgNm;		// 상품이미지 명
 	private int goodsQty;			// 안전재고
-	private String sysImgNm;		// 상품이미지
 	private int stockQty;			// 상품 재고
 
 }

+ 37 - 0
src/main/java/com/style24/persistence/domain/Search.java

@@ -0,0 +1,37 @@
+package com.style24.persistence.domain;
+
+import java.util.Collection;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 검색 Domain
+ *
+ * @author gagamel
+ * @since 2021. 3. 2
+ */
+@SuppressWarnings("serial")
+@Data
+public class Search extends TscBaseDomain {
+
+	// 최근검색어 목록
+	private Collection<String> recentlyList;
+
+	// 카테고리 목록
+	private Collection<Cate4Srch> cateList;
+
+	// 브랜드 목록
+	private Collection<Brand> brandList;
+
+	// 상품 목록
+	private Collection<Goods> goodsList;
+
+	@Data
+	public class Brand {
+		private Integer brandGroupNo;
+		private String brandGroupNm;
+	}
+
+}

+ 476 - 266
src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml

@@ -10,7 +10,7 @@
 
 	<!-- 페이징을 위한 select절 하단 -->
 	<sql id="selectForPagingFooter">
-		       ) ORIGINAL
+			   ) ORIGINAL
 		WHERE  NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
 	</sql>
 	
@@ -31,28 +31,35 @@
 		   AND C.CUST_NO = #{custNo}
 			</otherwise>
 		</choose>
+		<if test="cartSq != null and cartSq != 0">
+			AND C.CART_SQ <![CDATA[ <> ]]> #{cartSq}
+		</if>
 	</select>
 
 	<!-- 장바구니 등록 세트 상품 확인 -->
-	<select id="selectHasSetItemCartList" parameterType="Cart" resultType="int">
+	<select id="selectHasSetItemCartList" parameterType="Cart" resultType="Cart">
 		/* TsfCart.selectHasSetItemCartList : 장바구니 등록 세트 상품 확인 */
 		SELECT CART_SQ
-		  FROM (SELECT COUNT(1) AS CNT
+		FROM   (SELECT COUNT(1) AS CNT
 					 , CART_SQ
 					 , #{goodsCd} AS GOODS_CD
-				  FROM (
-					  ${itemCdSql}
-				       ) A
-				 WHERE 1=1
-				 GROUP BY CART_SQ ) AS A
-		  INNER JOIN (SELECT GC.GOODS_CD
+				FROM   (
+						${itemCdSql}
+					   ) A
+				WHERE  1=1
+				GROUP  BY CART_SQ ) AS A
+		INNER  JOIN ( SELECT GC.GOODS_CD
 						   , COUNT(1) AS CNT
-						FROM TB_GOODS_COMPOSE GC
-					   WHERE GC.GOODS_CD = #{goodsCd}
-						 AND GC.USE_YN = 'Y'
-					   GROUP BY GC.GOODS_CD ) B
-			 ON A.GOODS_CD = B.GOODS_CD
-			AND A.CNT = B.CNT
+					  FROM   TB_GOODS_COMPOSE GC
+					  WHERE  GC.GOODS_CD = #{goodsCd}
+					  AND    GC.USE_YN = 'Y'
+					  GROUP  BY GC.GOODS_CD ) B
+		ON     A.GOODS_CD = B.GOODS_CD
+		AND    A.CNT = B.CNT
+		WHERE  1=1
+		<if test="notCartSq != null and notCartSq > 0">
+		AND    A.CART_SQ <![CDATA[ <> ]]> #{notCartSq}
+		</if>
 	</select>
 
 	<!-- 장바구니 등록 일반 or 딜 상품 확인 -->
@@ -70,24 +77,24 @@
 	<insert id="insertCartInfo" parameterType="Cart" keyProperty="cartSq">
 		/* TsfCart.insertCartInfo : 장바구니 신규 등록 */
 		INSERT INTO TB_CART (
-		          CART_GB
-		        , GOODS_CD
-		        , GOODS_QTY
-		        , DEAL_GOODS_CD
-		        , JSESSION_ID
-		        , CUST_NO
-		        , AF_LINK_CD
-		        , ITHR_CD
-		        , CONTENTS_LOC
-		        , PLAN_DTL_SQ
-		        , REG_NO
-		        , REG_DT
-		        , UPD_NO
-		        , UPD_DT)
+				  CART_GB
+				, GOODS_CD
+				, GOODS_QTY
+				, DEAL_GOODS_CD
+				, JSESSION_ID
+				, CUST_NO
+				, AF_LINK_CD
+				, ITHR_CD
+				, CONTENTS_LOC
+				, PLAN_DTL_SQ
+				, REG_NO
+				, REG_DT
+				, UPD_NO
+				, UPD_DT)
 		SELECT #{cartGb}
 			 , GOODS_CD
-		     , #{goodsQty}
-		     , #{dealGoodsCd}
+			 , #{goodsQty}
+			 , #{dealGoodsCd}
 			 , #{jsessionId}
 			 , #{custNo}
 			 , #{afLinkCd}
@@ -95,7 +102,7 @@
 			 , #{contentsLoc}
 			 , #{planDtlSq}
 			 , #{regNo}
-		     , CURRENT_TIMESTAMP
+			 , CURRENT_TIMESTAMP
 			 , #{updNo}
 			 , CURRENT_TIMESTAMP
 		  FROM TB_GOODS
@@ -106,30 +113,30 @@
 	<insert id="insertCartDetailInfo" parameterType="Cart" keyProperty="cartDtlSq">
 		/* TsfCart.insertCartDetailInfo : 장바구니 상세 신규 등록 */
 		INSERT INTO TB_CART_DETAIL (
-		          CART_SQ
-		        , ITEM_CD
-		        , OPT_CD
-		        , OPT_CD1
-		        , OPT_CD2
-		        , SKU_MODEL_NO
-		        , PRODUCT_NO
-		        , PRODUCT_CODE
-		        , ITEM_QTY
-		        , DISP_ORD
-		        , REG_NO
-		        , REG_DT
-		        , UPD_NO
-		        , UPD_DT
+				  CART_SQ
+				, ITEM_CD
+				, OPT_CD
+				, OPT_CD1
+				, OPT_CD2
+				, SKU_MODEL_NO
+				, PRODUCT_NO
+				, PRODUCT_CODE
+				, ITEM_QTY
+				, DISP_ORD
+				, REG_NO
+				, REG_DT
+				, UPD_NO
+				, UPD_DT
 		)
 		SELECT #{cartSq}
 			 , IFNULL(GC.COMPS_GOODS_CD, G.GOODS_CD)		 <!-- 세트 상품이 아니면 원상품코드 -->
-		     , O.OPT_CD
-		     , O.OPT_CD1
-		     , O.OPT_CD2
-		     , O.SKU_MODEL_NO
-		     , O.PRODUCT_NO
-		     , O.PRODUCT_CODE
-		     , IFNULL(GC.QTY, 1)
+			 , O.OPT_CD
+			 , O.OPT_CD1
+			 , O.OPT_CD2
+			 , O.SKU_MODEL_NO
+			 , O.PRODUCT_NO
+			 , O.PRODUCT_CODE
+			 , IFNULL(GC.QTY, 1)
 			 , IFNULL(GC.DISP_ORD, 1)						<!-- TB_GOODS_COMPOSE DISP_ORD 따라 CART_DETAIL도 동일하게 진행 -->
 			 , #{regNo}
 			 , CURRENT_TIMESTAMP
@@ -137,9 +144,9 @@
 			 , CURRENT_TIMESTAMP
 		  FROM TB_GOODS G
 		 INNER JOIN TB_OPTION O
-		    ON G.GOODS_CD = O.GOODS_CD
+			ON G.GOODS_CD = O.GOODS_CD
 		  LEFT OUTER JOIN TB_GOODS_COMPOSE GC		<!-- 일반 상품 제외 확인 필요하여 join -->
-		    ON GC.COMPS_GOODS_CD = G.GOODS_CD
+			ON GC.COMPS_GOODS_CD = G.GOODS_CD
 		   AND GC.GOODS_CD = #{goodsCd}
 		   AND GC.COMPS_GOODS_CD = #{itemCd}
 		   AND GC.GOODS_TYPE = 'G056_S'				<!-- 세트 상품만 구성 상품 코드로 올림. deal 상품은 원상품코드로 올려야함 -->
@@ -156,21 +163,54 @@
 		 ORDER BY GC.DISP_ORD
 	</insert>
 
-	<!-- 장바구니 상세 UPDATE -->
+	<!-- 장바구니 UPDATE -->
 	<update id="updateCartInfo" parameterType="Cart">
-		/* TsfCart.updateCartInfo : 장바구니 상세 UPDATE */
+		/* TsfCart.updateCartInfo : 장바구니 UPDATE */
 		UPDATE TB_CART SET
 			  GOODS_QTY = GOODS_QTY + #{goodsQty}
-		    , DEAL_GOODS_CD = #{dealGoodsCd}
-		    , AF_LINK_CD = #{afLinkCd}
-		    , ITHR_CD = #{ithrCd}
-		    , CONTENTS_LOC = #{contentsLoc}
-		    , PLAN_DTL_SQ = #{planDtlSq}
+			, DEAL_GOODS_CD = #{dealGoodsCd}
+			, AF_LINK_CD = #{afLinkCd}
+			, ITHR_CD = #{ithrCd}
+			, CONTENTS_LOC = #{contentsLoc}
+			, PLAN_DTL_SQ = #{planDtlSq}
+			, UPD_NO = #{updNo}
+			, UPD_DT = CURRENT_TIMESTAMP
+		WHERE CART_SQ = #{cartSq}
+		AND   GOODS_CD = #{goodsCd}
+		AND   CUST_NO = #{custNo}
+	</update>
+
+	<!-- 장바구니 UPDATE -->
+	<update id="updateCart" parameterType="Cart">
+		/* TsfCart.updateCart : 장바구니 UPDATE */
+		UPDATE TB_CART SET
+			  GOODS_QTY = #{goodsQty}
+			, DEAL_GOODS_CD = #{dealGoodsCd}
+			, AF_LINK_CD = #{afLinkCd}
+			, ITHR_CD = #{ithrCd}
+			, CONTENTS_LOC = #{contentsLoc}
+			, PLAN_DTL_SQ = #{planDtlSq}
 			, UPD_NO = #{updNo}
 			, UPD_DT = CURRENT_TIMESTAMP
 		WHERE CART_SQ = #{cartSq}
-		  AND GOODS_CD = #{goodsCd}
-		  AND CUST_NO = #{custNo}
+		AND   GOODS_CD = #{goodsCd}
+		AND   CUST_NO = #{custNo}
+	</update>
+
+	<!-- 장바구니 상세 UPDATE -->
+	<update id="updateCartDetail" parameterType="Cart">
+		/* TsfCart.updateCartDetail : 장바구니 상세 UPDATE */
+		UPDATE TB_CART_DETAIL A, (SELECT GOODS_CD, OPT_CD1, OPT_CD2, SKU_MODEL_NO, PRODUCT_NO, PRODUCT_CODE FROM TB_OPTION WHERE GOODS_CD = #{itemCd} AND OPT_CD = #{optCd}) B SET
+			  A.OPT_CD = #{optCd}
+			, A.OPT_CD1 = B.OPT_CD1
+			, A.OPT_CD2 = B.OPT_CD2
+			, A.SKU_MODEL_NO = B.SKU_MODEL_NO
+			, A.PRODUCT_NO = B.PRODUCT_NO
+			, A.PRODUCT_CODE = B.PRODUCT_CODE
+			, A.UPD_NO = #{updNo}
+			, A.UPD_DT = CURRENT_TIMESTAMP
+		WHERE A.CART_DTL_SQ = #{cartDtlSq}
+		  AND A.ITEM_CD = B.GOODS_CD
 	</update>
 
 	<!-- 장바구니 이력 정보 저장 -->
@@ -193,7 +233,7 @@
 		SELECT C.CART_SQ
 			 , C.CART_GB
 			 , C.GOODS_CD
-		     , C.GOODS_QTY
+			 , C.GOODS_QTY
 			 , C.DEAL_GOODS_CD
 			 , IFNULL(#{ordNo}, 0) AS ORD_NO
 			 , C.CUST_NO
@@ -283,82 +323,82 @@
 								  , COUNT(1) AS TMTB_CNT
 							 FROM   TB_TMTB_APPLY_GOODS TAG
 							 INNER  JOIN TB_CART C
-							 ON     TAG.GOODS_CD = C.GOODS_CD
+							 ON	 TAG.GOODS_CD = C.GOODS_CD
 							 WHERE  TAG.DEL_YN = 'N'
 							<if test="cartSqArr != null and cartSqArr.length > 0">
-							 AND    C.CART_SQ IN
+							 AND	C.CART_SQ IN
 								<foreach collection="cartSqArr" item="item" index="index"  open="(" close=")" separator=",">
 										#{item}
 								</foreach>
 							</if>
 							 GROUP  BY TAG.TMTB_SQ) AS TAG2
-				ON     TAG.TMTB_SQ = TAG2.TMTB_SQ
+				ON	 TAG.TMTB_SQ = TAG2.TMTB_SQ
 				INNER  JOIN TB_TMTB T
 				ON	   T.TMTB_SQ = TAG.TMTB_SQ
 				AND	   T.TMTB_STAT = 'G232_11' /*진행*/
 				INNER  JOIN TB_GOODS G
 				ON	   C.GOODS_CD = G.GOODS_CD
 				INNER  JOIN TB_CART_DETAIL CD
-				ON     C.CART_SQ = CD.CART_SQ
+				ON	 C.CART_SQ = CD.CART_SQ
 				INNER  JOIN (SELECT TAG.TMTB_SQ
 								  , SUM((FN_GET_APPLY_CPN1_PRICE(C.GOODS_CD, #{frontGb}) + IFNULL(OP.ADD_PRICE, 0)) * C.GOODS_QTY) AS TMTB_SUM_AMT
 								  , SUM(C.GOODS_QTY) AS TMTB_SUM_QTY
 							 FROM   TB_TMTB_APPLY_GOODS TAG
 							 INNER  JOIN TB_CART C
-							 ON     TAG.GOODS_CD = C.GOODS_CD
+							 ON	 TAG.GOODS_CD = C.GOODS_CD
 							 INNER  JOIN TB_GOODS G
-							 ON     C.GOODS_CD = G.GOODS_CD
+							 ON	 C.GOODS_CD = G.GOODS_CD
 							 INNER  JOIN TB_TMTB T
-							 ON     TAG.TMTB_SQ = T.TMTB_SQ
+							 ON	 TAG.TMTB_SQ = T.TMTB_SQ
 							 LEFT   OUTER JOIN TB_TMTB_APPLY_GOODS NOT_APPLY
-							 ON     TAG.GOODS_CD = NOT_APPLY.GOODS_CD
-							 AND    TAG.TMTB_SQ = NOT_APPLY.TMTB_SQ
-							 AND    NOT_APPLY.GOODS_GB = 'G800_30'   /* 제외상품 */
+							 ON	 TAG.GOODS_CD = NOT_APPLY.GOODS_CD
+							 AND	TAG.TMTB_SQ = NOT_APPLY.TMTB_SQ
+							 AND	NOT_APPLY.GOODS_GB = 'G800_30'   /* 제외상품 */
 							 LEFT   OUTER JOIN (SELECT OP.ADD_PRICE
 							 						 , C.CART_SQ
 							 					FROM   TB_CART C
 							 					INNER  JOIN TB_CART_DETAIL CD
-							 					ON     C.CART_SQ = CD.CART_SQ
+							 					ON	 C.CART_SQ = CD.CART_SQ
 												 INNER  JOIN TB_OPTION OP
-												 ON     C.GOODS_CD = OP.GOODS_CD
-												 AND    CD.OPT_CD = OP.OPT_CD
+												 ON	 C.GOODS_CD = OP.GOODS_CD
+												 AND	CD.OPT_CD = OP.OPT_CD
 												 WHERE  1=1) OP
-							 ON     C.CART_SQ = OP.CART_SQ
+							 ON	 C.CART_SQ = OP.CART_SQ
 							 WHERE  1=1
-							 AND    NOT_APPLY.TMTB_SQ IS NULL
-							 AND    T.DEL_YN = 'N'
-							 AND    TAG.DEL_YN = 'N'
-							 AND    C.CART_GB = 'G026_BC'
-							 AND    G.GOODS_STAT = 'G008_90'
-							 AND    G.SELF_MALL_YN = 'Y'
+							 AND	NOT_APPLY.TMTB_SQ IS NULL
+							 AND	T.DEL_YN = 'N'
+							 AND	TAG.DEL_YN = 'N'
+							 AND	C.CART_GB = 'G026_BC'
+							 AND	G.GOODS_STAT = 'G008_90'
+							 AND	G.SELF_MALL_YN = 'Y'
 							 <if test="cartSqArr != null and cartSqArr.length > 0">
-							 	AND    C.CART_SQ IN
+							 	AND	C.CART_SQ IN
 							 	<foreach collection="cartSqArr" item="item" index="index"  open="(" close=")" separator=",">
 							 		#{item}
 							 	</foreach>
 							 </if>
 							 GROUP BY TAG.TMTB_SQ
 					   ) SUM_DATA
-				ON     T.TMTB_SQ = SUM_DATA.TMTB_SQ
+				ON	 T.TMTB_SQ = SUM_DATA.TMTB_SQ
 				LEFT   JOIN TB_OPTION OP
-				ON     CD.ITEM_CD = OP.GOODS_CD
-				AND    CD.OPT_CD1 = OP.OPT_CD1
-				AND    CD.OPT_CD2 = OP.OPT_CD2
+				ON	 CD.ITEM_CD = OP.GOODS_CD
+				AND	CD.OPT_CD1 = OP.OPT_CD1
+				AND	CD.OPT_CD2 = OP.OPT_CD2
 				LEFT   OUTER JOIN TB_TMTB_APPLY_GOODS NOT_APPLY
-				ON     T.TMTB_SQ = NOT_APPLY.TMTB_SQ
-				AND    C.GOODS_CD = NOT_APPLY.GOODS_CD
-				AND    NOT_APPLY.GOODS_GB = 'G800_30'   /* 제외상품 */
-				AND    NOT_APPLY.DEL_YN = 'N'
+				ON	 T.TMTB_SQ = NOT_APPLY.TMTB_SQ
+				AND	C.GOODS_CD = NOT_APPLY.GOODS_CD
+				AND	NOT_APPLY.GOODS_GB = 'G800_30'   /* 제외상품 */
+				AND	NOT_APPLY.DEL_YN = 'N'
 				WHERE  1=1
-				AND    NOT_APPLY.TMTB_SQ IS NULL
-				AND    T.DEL_YN = 'N'
-				AND    T.TMTB_ST_DT <![CDATA[<=]]> NOW()
-				AND    T.TMTB_ED_DT >= NOW()
-				AND    C.CART_GB = 'G026_BC'
-				AND    G.GOODS_STAT = 'G008_90'
-				AND    G.SELF_MALL_YN = 'Y'
+				AND	NOT_APPLY.TMTB_SQ IS NULL
+				AND	T.DEL_YN = 'N'
+				AND	T.TMTB_ST_DT <![CDATA[<=]]> NOW()
+				AND	T.TMTB_ED_DT >= NOW()
+				AND	C.CART_GB = 'G026_BC'
+				AND	G.GOODS_STAT = 'G008_90'
+				AND	G.SELF_MALL_YN = 'Y'
 				<if test="cartSqArr != null and cartSqArr.length > 0">
-				AND    C.CART_SQ IN
+				AND	C.CART_SQ IN
 					<foreach collection="cartSqArr" item="item" index="index"  open="(" close=")" separator=",">
 						#{item}
 					</foreach>
@@ -381,41 +421,41 @@
 			 , SUM(C.GOODS_QTY) AS TMTB_SUM_QTY
 		FROM   TB_TMTB_APPLY_GOODS TAG
 		INNER  JOIN TB_CART C
-		ON     TAG.GOODS_CD = C.GOODS_CD
+		ON	 TAG.GOODS_CD = C.GOODS_CD
 		INNER  JOIN TB_GOODS G
-		ON     C.GOODS_CD = G.GOODS_CD
+		ON	 C.GOODS_CD = G.GOODS_CD
 		INNER  JOIN TB_TMTB T
-		ON     TAG.TMTB_SQ = T.TMTB_SQ
+		ON	 TAG.TMTB_SQ = T.TMTB_SQ
 		LEFT   OUTER JOIN TB_TMTB_APPLY_GOODS NOT_APPLY
-		ON     TAG.GOODS_CD = NOT_APPLY.GOODS_CD
-		AND    TAG.TMTB_SQ = NOT_APPLY.TMTB_SQ
-		AND    NOT_APPLY.GOODS_GB = 'G800_30'   /* 제외상품 */
+		ON	 TAG.GOODS_CD = NOT_APPLY.GOODS_CD
+		AND	TAG.TMTB_SQ = NOT_APPLY.TMTB_SQ
+		AND	NOT_APPLY.GOODS_GB = 'G800_30'   /* 제외상품 */
 		LEFT   OUTER JOIN (SELECT OP.ADD_PRICE
 								, C.CART_SQ
-		                   FROM   TB_CART C
+						   FROM   TB_CART C
 						   INNER  JOIN TB_CART_DETAIL CD
-		                   ON     C.CART_SQ = CD.CART_SQ
+						   ON	 C.CART_SQ = CD.CART_SQ
 						   INNER  JOIN TB_OPTION OP
-						   ON     C.GOODS_CD = OP.GOODS_CD
-						   AND    CD.OPT_CD = OP.OPT_CD
-		                   WHERE  1=1
-		       ) OP
-		ON     C.CART_SQ = OP.CART_SQ
+						   ON	 C.GOODS_CD = OP.GOODS_CD
+						   AND	CD.OPT_CD = OP.OPT_CD
+						   WHERE  1=1
+			   ) OP
+		ON	 C.CART_SQ = OP.CART_SQ
 		WHERE  1=1
-		AND    NOT_APPLY.TMTB_SQ IS NULL
-		AND    T.DEL_YN = 'N'
-		AND    TAG.DEL_YN = 'N'
-		AND    C.CART_GB = 'G026_BC'
-		AND    G.GOODS_STAT = 'G008_90'
-		AND    G.SELF_MALL_YN = 'Y'
+		AND	NOT_APPLY.TMTB_SQ IS NULL
+		AND	T.DEL_YN = 'N'
+		AND	TAG.DEL_YN = 'N'
+		AND	C.CART_GB = 'G026_BC'
+		AND	G.GOODS_STAT = 'G008_90'
+		AND	G.SELF_MALL_YN = 'Y'
 		<if test="tmtbSqs != null and tmtbSqs.length > 0">
-		AND    TAG.TMTB_SQ IN
+		AND	TAG.TMTB_SQ IN
 			<foreach collection="tmtbSqs" item="item" index="index"  open="(" close=")" separator=",">
 				#{item}
 			</foreach>
 		</if>
 		<if test="cartSqArr != null and cartSqArr.length > 0">
-		AND    C.CART_SQ IN
+		AND	C.CART_SQ IN
 			<foreach collection="cartSqArr" item="item" index="index"  open="(" close=")" separator=",">
 				#{item}
 			</foreach>
@@ -433,12 +473,12 @@
 			 , TV.DC_VAL
 		FROM   TB_TMTB_SECTION TC
 		INNER  JOIN TB_TMTB_VAL TV
-		ON     TC.TMTB_SECTION_SQ = TV.TMTB_SECTION_SQ
+		ON	 TC.TMTB_SECTION_SQ = TV.TMTB_SECTION_SQ
 		WHERE  1=1
-		AND    TC.DEL_YN = 'N'
-		AND    TV.DEL_YN = 'N'
+		AND	TC.DEL_YN = 'N'
+		AND	TV.DEL_YN = 'N'
 		<if test="list != null and list.size() > 0">
-		AND    TC.TMTB_SQ IN
+		AND	TC.TMTB_SQ IN
 			<foreach collection="list" item="item" index="index"  open="(" close=")" separator=",">
 				#{item}
 			</foreach>
@@ -459,104 +499,118 @@
 			 , Z.CART_SQ
 			 , Z.GOODS_CD
 			 , Z.GOODS_NM
-		     , Z.BRAND_NM
-		     , Z.SUPPLY_COMP_NM
+			 , Z.BRAND_ENM
+		     , Z.BRAND_KNM
+			 , Z.SUPPLY_COMP_NM
 			 , Z.GOODS_QTY
 			 , Z.GOODS_TYPE
 			 , Z.SUPPLY_COMP_CD
 			 , Z.DELV_FEE_CD
-		     , (Z.CURR_PRICE + Z.OPT_ADD_PRICE) * Z.GOODS_QTY AS CURR_PRICE
-		     , Z.SOLDOUT_YN
+			 , (Z.CURR_PRICE + Z.OPT_ADD_PRICE) * Z.GOODS_QTY AS CURR_PRICE
+			 , Z.SOLDOUT_YN
 			 , CASE WHEN #{frontGb} = 'P' THEN (Z.CURR_PRICE * Z.GOODS_QTY) * (Z.PNT_PRATE/100)
 					ELSE (Z.CURR_PRICE * Z.GOODS_QTY) * (Z.PNT_MRATE/100) END AS SAVE_PNT_AMT
-			 , GI.SYS_IMG_NM
+			 , SYS_IMG_NM
 		FROM   (SELECT C.CART_SQ
 					 , C.GOODS_CD
 					 , C.GOODS_QTY
 					 , CD.ITEM_CD
 					 , CD.OPT_CD
-		             , CD.ITEM_QTY
-		             , CD.CART_DTL_SQ
-		             , O.OPT_CD1
-		             , O.OPT_CD2
+					 , CD.ITEM_QTY
+					 , CD.CART_DTL_SQ
+					 , O.OPT_CD1
+					 , O.OPT_CD2
 					 , G.GOODS_TYPE
 					 , G.SUPPLY_COMP_CD
-		             , G.GOODS_NM
-		             , G.BRAND_CD
-		             , G.PNT_PRATE
+					 , G.GOODS_NM
+					 , G.BRAND_CD
+					 , G.PNT_PRATE
 					 , G.PNT_MRATE
-		             , STOCK.SOLDOUT_YN
-		             , FN_GET_APPLY_CPN1_PRICE(C.GOODS_CD, #{frontGb}) AS CURR_PRICE
-		             , IFNULL(O.ADD_PRICE, 0) AS OPT_ADD_PRICE
-		             , (SELECT BRAND_KNM FROM TB_BRAND WHERE BRAND_CD = G.BRAND_CD) AS BRAND_NM
-		             , (SELECT SUPPLY_COMP_NM FROM TB_SUPPLY_COMPANY WHERE SUPPLY_COMP_CD = G.SUPPLY_COMP_CD) AS SUPPLY_COMP_NM
+					 , STOCK.SOLDOUT_YN
+					 , FN_GET_APPLY_CPN1_PRICE(C.GOODS_CD, #{frontGb}) AS CURR_PRICE
+					 , IFNULL(O.ADD_PRICE, 0) AS OPT_ADD_PRICE
+					 , BR.BRAND_ENM
+		             , BR.BRAND_KNM
+		             , CT.CUST_GRADE
+					 , CASE WHEN GOG.CUST_GRADE IS NOT NULL AND GOG.CUST_GRADE = IFNULL(CT.CUST_GRADE, '') THEN GOG.CUST_GRADE
+							WHEN GOG.CUST_GRADE IS NOT NULL THEN 'NO'
+							ELSE CT.CUST_GRADE END AS ORDER_GRADE
+					 , (SELECT SUPPLY_COMP_NM FROM TB_SUPPLY_COMPANY WHERE SUPPLY_COMP_CD = G.SUPPLY_COMP_CD) AS SUPPLY_COMP_NM
 					 , (SELECT GOODS_NM FROM TB_GOODS WHERE GOODS_CD = CD.ITEM_CD) AS ITEM_NM
 					 , CASE WHEN G.SELF_GOODS_YN = 'Y' THEN 'WMS'
 							ELSE DFP.DELV_FEE_CD END AS DELV_FEE_CD
+					 , CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = CD.OPT_CD1 AND DEFAULT_IMG_YN = 'Y' LIMIT 1)
+							ELSE (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = G.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' LIMIT 1) END AS SYS_IMG_NM
 				FROM   TB_CART C
 				INNER  JOIN TB_CART_DETAIL CD
-				ON     C.CART_SQ = CD.CART_SQ
+				ON	 C.CART_SQ = CD.CART_SQ
 				INNER  JOIN TB_GOODS G
-				ON     C.GOODS_CD = G.GOODS_CD
+				ON	 C.GOODS_CD = G.GOODS_CD
+				INNER  JOIN TB_BRAND BR 
+				ON	 G.BRAND_CD = BR.BRAND_CD
 				INNER  JOIN TB_DELV_FEE_POLICY DFP
-				ON     G.DELV_FEE_CD = DFP.DELV_FEE_CD
+				ON	 G.DELV_FEE_CD = DFP.DELV_FEE_CD
 				INNER  JOIN TB_OPTION O
-				ON     CD.ITEM_CD = O.GOODS_CD
-				AND    CD.OPT_CD = O.OPT_CD
+				ON	 CD.ITEM_CD = O.GOODS_CD
+				AND	CD.OPT_CD = O.OPT_CD
 				INNER  JOIN (   SELECT A.CART_SQ
 									 , MIN(A.SOLDOUT_YN) AS SOLDOUT_YN
 								FROM   (SELECT C.CART_SQ
-											 , CASE WHEN VS.SOLDOUT_YN = 'N' AND VS.CURR_STOCK_QTY > C.GOODS_QTY * GC.QTY THEN 'N'
+											 , CASE WHEN VS.SOLDOUT_YN = 'N' AND VS.CURR_STOCK_QTY >= C.GOODS_QTY * GC.QTY THEN 'N'
 													ELSE 'Y' END AS SOLDOUT_YN
 										FROM   TB_CART C
 										INNER  JOIN TB_CART_DETAIL CD
-										ON     C.CART_SQ = CD.CART_SQ
+										ON	 C.CART_SQ = CD.CART_SQ
 										INNER  JOIN TB_GOODS G
-										ON     C.GOODS_CD = G.GOODS_CD
+										ON	 C.GOODS_CD = G.GOODS_CD
 										INNER  JOIN TB_GOODS_COMPOSE GC
-										ON     C.GOODS_CD = GC.GOODS_CD
-										AND    CD.ITEM_CD = GC.COMPS_GOODS_CD
+										ON	 C.GOODS_CD = GC.GOODS_CD
+										AND	CD.ITEM_CD = GC.COMPS_GOODS_CD
 										INNER  JOIN VW_STOCK VS
-										ON     CD.ITEM_CD = VS.GOODS_CD
-										AND    CD.OPT_CD = VS.OPT_CD
+										ON	 CD.ITEM_CD = VS.GOODS_CD
+										AND	CD.OPT_CD = VS.OPT_CD
 										WHERE  1=1
-										AND    C.CART_GB = 'G026_BC'
-										AND    G.GOODS_STAT = 'G008_90'
-										AND    G.SELF_MALL_YN = 'Y'
+										AND	C.CART_GB = 'G026_BC'
+										AND	G.GOODS_STAT = 'G008_90'
+										AND	G.SELF_MALL_YN = 'Y'
 										<if test="custNo == 0">
-											AND    C.CUST_NO = 0
-											AND    C.JSESSION_ID = #{jsessionId}
+											AND	C.CUST_NO = 0
+											AND	C.JSESSION_ID = #{jsessionId}
 										</if>
 										<if test="custNo != 0">
-											AND    C.CUST_NO = #{custNo}
+											AND	C.CUST_NO = #{custNo}
 										</if>
 										UNION ALL
 										SELECT C.CART_SQ
-											 , CASE WHEN VS.SOLDOUT_YN = 'N' AND VS.CURR_STOCK_QTY > C.GOODS_QTY THEN 'N'
+											 , CASE WHEN VS.SOLDOUT_YN = 'N' AND VS.CURR_STOCK_QTY >= C.GOODS_QTY THEN 'N'
 													ELSE 'Y' END AS SOLDOUT_YN
 										FROM   TB_CART C
 										INNER  JOIN TB_CART_DETAIL CD
-										ON     C.CART_SQ = CD.CART_SQ
+										ON	 C.CART_SQ = CD.CART_SQ
 										INNER  JOIN TB_GOODS G
-										ON     C.GOODS_CD = G.GOODS_CD
+										ON	 C.GOODS_CD = G.GOODS_CD
 										INNER  JOIN VW_STOCK VS
-										ON     C.GOODS_CD = VS.GOODS_CD
-										AND    CD.OPT_CD = VS.OPT_CD
+										ON	 C.GOODS_CD = VS.GOODS_CD
+										AND	CD.OPT_CD = VS.OPT_CD
 										WHERE  1=1
-										AND    C.CART_GB = 'G026_BC'
-										AND    G.GOODS_STAT = 'G008_90'
-										AND    G.SELF_MALL_YN = 'Y'
+										AND	C.CART_GB = 'G026_BC'
+										AND	G.GOODS_STAT = 'G008_90'
+										AND	G.SELF_MALL_YN = 'Y'
 										<if test="custNo == 0">
-											AND    C.CUST_NO = 0
-											AND    C.JSESSION_ID = #{jsessionId}
+											AND	C.CUST_NO = 0
+											AND	C.JSESSION_ID = #{jsessionId}
 										</if>
 										<if test="custNo != 0">
-											AND    C.CUST_NO = #{custNo}
+											AND	C.CUST_NO = #{custNo}
 										</if>
-								       ) A
+									   ) A
 								GROUP  BY  A.CART_SQ
 					   ) STOCK
-				ON     C.CART_SQ = STOCK.CART_SQ
+				ON	   C.CART_SQ = STOCK.CART_SQ
+				LEFT   OUTER JOIN TB_CUSTOMER CT
+				ON     C.CUST_NO = CT.CUST_NO
+				LEFT   OUTER JOIN TB_GOODS_ORDER_GRADE GOG
+				ON     G.GOODS_CD = GOG.GOODS_CD
 				WHERE  G.SELF_MALL_YN = 'Y'
 				AND    G.GOODS_STAT = 'G008_90'
 				<if test="custNo == 0">
@@ -564,35 +618,39 @@
 				AND    C.JSESSION_ID = #{jsessionId}
 				</if>
 				<if test="custNo != 0">
-				AND    C.CUST_NO = #{custNo}
+				AND	C.CUST_NO = #{custNo}
 				</if>
 				<if test="cartSqArr != null and cartSqArr.length > 0">
-				AND    C.CART_SQ IN
+				AND	C.CART_SQ IN
 					<foreach collection="cartSqArr" item="item" index="index"  open="(" close=")" separator=",">
 						#{item}
 					</foreach>
 				</if>
 				ORDER BY G.SUPPLY_COMP_CD ) Z
-		LEFT   OUTER JOIN TB_GOODS_IMG GI
-		ON	   Z.GOODS_CD = GI.GOODS_CD
-		AND	   Z.OPT_CD1 = GI.COLOR_CD
-		AND    GI.DEFAULT_IMG_YN = 'Y'
+		WHERE  1=1
+		<if test="custNo != 0">
+		AND    Z.ORDER_GRADE = Z.CUST_GRADE
+		</if>
+		<if test="custNo == 0">
+		AND    Z.ORDER_GRADE IS NULL
+		</if>
 		GROUP  BY Z.CART_SQ
 			 , Z.GOODS_CD
 			 , Z.GOODS_QTY
 			 , Z.GOODS_TYPE
 			 , Z.SUPPLY_COMP_CD
 			 , Z.GOODS_NM
-		     , Z.BRAND_NM
+			 , Z.BRAND_ENM
+			 , Z.BRAND_KNM
 			 , Z.SUPPLY_COMP_NM
 			 , Z.DELV_FEE_CD
-		     , Z.CURR_PRICE
-		     , Z.PNT_PRATE
+			 , Z.CURR_PRICE
+			 , Z.PNT_PRATE
 			 , Z.PNT_MRATE
-		     , Z.OPT_ADD_PRICE
-			 , GI.SYS_IMG_NM
+			 , Z.OPT_ADD_PRICE
+			 , SYS_IMG_NM
 		ORDER  BY Z.DELV_FEE_CD
-			 , Z.CART_SQ
+			 , Z.CART_SQ DESC
 	</select>
 
 	<!-- 장바구니 업체별 배송비 -->
@@ -601,17 +659,17 @@
 		SELECT DFP.MIN_ORD_AMT
 			 , DFP.DELV_FEE
 			 , DFP.DELV_FEE_CRITE
-		     , DFP.DELV_FEE_CD
+			 , DFP.DELV_FEE_CD
 			 , COUNT(G.SUPPLY_COMP_CD) AS COMP_CNT
 		FROM   TB_CART C
 		INNER  JOIN TB_GOODS G
-		ON     C.GOODS_CD = G.GOODS_CD
+		ON	 C.GOODS_CD = G.GOODS_CD
 		INNER  JOIN TB_DELV_FEE_POLICY DFP
-		ON     G.DELV_FEE_CD = DFP.DELV_FEE_CD
-		AND    DFP.USE_YN = 'Y'
+		ON	 G.DELV_FEE_CD = DFP.DELV_FEE_CD
+		AND	DFP.USE_YN = 'Y'
 		WHERE  1=1
-		AND    G.SELF_MALL_YN = 'Y'
-		AND    C.CART_SQ IN
+		AND	G.SELF_MALL_YN = 'Y'
+		AND	C.CART_SQ IN
 		<foreach collection="cartSqArr" item="item" index="index"  open="(" close=")" separator=",">
 			#{item}
 		</foreach>
@@ -630,14 +688,24 @@
 			#{item}
 		</foreach>
 	</delete>
+
+	<!-- 장바구니 삭제 -->
+	<delete id="deleteCartDetail" parameterType="Cart">
+		<!-- TsfCart.deleteCartDetail : 장바구니 삭제 -->
+		DELETE FROM TB_CART_DETAIL
+		WHERE  CART_SQ IN
+		<foreach collection="cartSqArr" item="item" index="index"  open="(" close=")" separator=",">
+			#{item}
+		</foreach>
+	</delete>
 	
 	<!-- 장바구니담긴상품 고객번호 Update -->
 	<update id="updateCartOfCustNo" parameterType="Cart">
 		/* TsfCart.updateCartOfCustNo */
 		UPDATE TB_CART
-		SET    CUST_NO = #{custNo}
-		     , UPD_NO = #{updNo}
-		     , UPD_DT = NOW()
+		SET	CUST_NO = #{custNo}
+			 , UPD_NO = #{updNo}
+			 , UPD_DT = NOW()
 		WHERE  JSESSION_ID = #{jsessionId}
 	</update>
 	
@@ -645,57 +713,57 @@
 	<select id="getCartListAfterLogin" parameterType="Cart" resultType="Cart">
 		/* TsfCart.getCartListAfterLogin */
 		SELECT A.CART_GB
-		     , A.GOODS_CD
-		     , A.ITEM_OPTS
-		     , IFNULL(B.CART_SQ,A.CART_SQ) AS UPD_CART_SQ /*업데이트할 장바구니번호*/
-		     , CASE WHEN B.CART_SQ IS NOT NULL THEN
-		                A.CART_SQ
-		            ELSE
-		                0
-		       END                         AS DEL_CART_SQ /*삭제할 장바구니번호(0이면 삭제할 장바구니번호 없음)*/
+			 , A.GOODS_CD
+			 , A.ITEM_OPTS
+			 , IFNULL(B.CART_SQ,A.CART_SQ) AS UPD_CART_SQ /*업데이트할 장바구니번호*/
+			 , CASE WHEN B.CART_SQ IS NOT NULL THEN
+						A.CART_SQ
+					ELSE
+						0
+			   END						 AS DEL_CART_SQ /*삭제할 장바구니번호(0이면 삭제할 장바구니번호 없음)*/
 		FROM   (
-		        /*장바구니에 담을 상품 목록*/
-		        SELECT C.CART_SQ
-		             , C.CART_GB
-		             , C.GOODS_CD
-		             , GROUP_CONCAT(CONCAT(CD.ITEM_CD,':',CD.OPT_CD1,':',CD.OPT_CD2) ORDER BY CD.ITEM_CD, CD.OPT_CD1, CD.OPT_CD2 SEPARATOR ';') AS ITEM_OPTS
-		        FROM   TB_CART C
-		             , TB_CART_DETAIL CD
-		        WHERE  C.CART_SQ = CD.CART_SQ
-		        AND    C.CUST_NO = #{custNo}
-		        AND    C.JSESSION_ID = #{jsessionId}
-		        GROUP  BY C.CART_SQ, C.CART_GB, C.GOODS_CD
-		       ) A
+				/*장바구니에 담을 상품 목록*/
+				SELECT C.CART_SQ
+					 , C.CART_GB
+					 , C.GOODS_CD
+					 , GROUP_CONCAT(CONCAT(CD.ITEM_CD,':',CD.OPT_CD1,':',CD.OPT_CD2) ORDER BY CD.ITEM_CD, CD.OPT_CD1, CD.OPT_CD2 SEPARATOR ';') AS ITEM_OPTS
+				FROM   TB_CART C
+					 , TB_CART_DETAIL CD
+				WHERE  C.CART_SQ = CD.CART_SQ
+				AND	C.CUST_NO = #{custNo}
+				AND	C.JSESSION_ID = #{jsessionId}
+				GROUP  BY C.CART_SQ, C.CART_GB, C.GOODS_CD
+			   ) A
 		LEFT OUTER JOIN (
-		        /*장바구니에 담긴 기존 상품 목록*/
-		        SELECT C.CART_SQ
-		             , C.CART_GB
-		             , C.GOODS_CD
-		             , GROUP_CONCAT(CONCAT(CD.ITEM_CD,':',CD.OPT_CD1,':',CD.OPT_CD2) ORDER BY CD.ITEM_CD, CD.OPT_CD1, CD.OPT_CD2 SEPARATOR ';') AS ITEM_OPTS
-		        FROM   TB_CART C
-		             , TB_CART_DETAIL CD
-		        WHERE  C.CART_SQ = CD.CART_SQ
-		        AND    C.CUST_NO = #{custNo}
-		        AND    C.JSESSION_ID <![CDATA[<>]]> #{jsessionId}
-		        GROUP  BY C.CART_SQ, C.CART_GB, C.GOODS_CD
-		       ) B
-		ON     A.CART_GB = B.CART_GB
-		AND    A.GOODS_CD = B.GOODS_CD
-		AND    A.ITEM_OPTS = B.ITEM_OPTS
+				/*장바구니에 담긴 기존 상품 목록*/
+				SELECT C.CART_SQ
+					 , C.CART_GB
+					 , C.GOODS_CD
+					 , GROUP_CONCAT(CONCAT(CD.ITEM_CD,':',CD.OPT_CD1,':',CD.OPT_CD2) ORDER BY CD.ITEM_CD, CD.OPT_CD1, CD.OPT_CD2 SEPARATOR ';') AS ITEM_OPTS
+				FROM   TB_CART C
+					 , TB_CART_DETAIL CD
+				WHERE  C.CART_SQ = CD.CART_SQ
+				AND	C.CUST_NO = #{custNo}
+				AND	C.JSESSION_ID <![CDATA[<>]]> #{jsessionId}
+				GROUP  BY C.CART_SQ, C.CART_GB, C.GOODS_CD
+			   ) B
+		ON	 A.CART_GB = B.CART_GB
+		AND	A.GOODS_CD = B.GOODS_CD
+		AND	A.ITEM_OPTS = B.ITEM_OPTS
 	</select>
 
 	<!-- 로그인 후 장바구니 수정 -->
 	<update id="updateCartAfterLogin" parameterType="Cart">
 		/* TsfCart.updateCartAfterLogin */
 		UPDATE TB_CART
-		SET    GOODS_QTY = GOODS_QTY + IFNULL((SELECT A.GOODS_QTY
-		    									 FROM ( SELECT GOODS_QTY
+		SET	GOODS_QTY = GOODS_QTY + IFNULL((SELECT A.GOODS_QTY
+												 FROM ( SELECT GOODS_QTY
 														  FROM TB_CART
 														 WHERE CART_SQ = #{delCartSq}
 														   AND CUST_NO = #{custNo} ) A
-		                                        ),0)
+												),0)
 		WHERE  CART_SQ = #{updCartSq}
-		AND    CUST_NO = #{custNo}
+		AND	CUST_NO = #{custNo}
 	</update>
 
 	<!-- 로그인 후 장바구니단품 삭제 -->
@@ -703,10 +771,10 @@
 		/* TsfCart.deleteCartItemAfterLogin */
 		DELETE FROM TB_CART_DETAIL
 		WHERE  CART_SQ IN (SELECT CART_SQ
-		                   FROM   TB_CART
-		                   WHERE  CART_SQ = #{delCartSq}
-		                   AND    CUST_NO = #{custNo}
-		                  )
+						   FROM   TB_CART
+						   WHERE  CART_SQ = #{delCartSq}
+						   AND	CUST_NO = #{custNo}
+						  )
 	</delete>
 
 	<!-- 로그인 후 장바구니 삭제 -->
@@ -714,42 +782,184 @@
 		/* TsfCart.deleteCartAfterLogin */
 		DELETE FROM TB_CART
 		WHERE  CART_SQ = #{delCartSq}
-		AND    CUST_NO = #{custNo}
+		AND	CUST_NO = #{custNo}
 	</delete>
 	
 	<!-- 로그인 후 장바구니이력 생성 -->
 	<update id="createCartHistoryAfterLogin" parameterType="Cart">
 		/* TsfCart.createCartHistoryAfterLogin */
 		INSERT INTO TB_CART_HST (
-		       CART_SQ
-		     , CART_GB
-		     , GOODS_CD
-		     , GOODS_QTY
-		     , DEAL_GOODS_CD
-		     , ORD_NO
-		     , CUST_NO
-		     , AF_LINK_CD
-		     , ITHR_CD
-		     , CONTENTS_LOC
-		     , PLAN_DTL_SQ
-		     , REG_NO
-		     , REG_DT
+			   CART_SQ
+			 , CART_GB
+			 , GOODS_CD
+			 , GOODS_QTY
+			 , DEAL_GOODS_CD
+			 , ORD_NO
+			 , CUST_NO
+			 , AF_LINK_CD
+			 , ITHR_CD
+			 , CONTENTS_LOC
+			 , PLAN_DTL_SQ
+			 , REG_NO
+			 , REG_DT
 		)
 		SELECT CART_SQ
-		     , CART_GB
-		     , GOODS_CD
-		     , GOODS_QTY
-		     , DEAL_GOODS_CD
-		     , 0
-		     , CUST_NO
-		     , AF_LINK_CD
-		     , ITHR_CD
-		     , CONTENTS_LOC
-		     , PLAN_DTL_SQ
-		     , #{regNo}
-		     , NOW()
+			 , CART_GB
+			 , GOODS_CD
+			 , GOODS_QTY
+			 , DEAL_GOODS_CD
+			 , 0
+			 , CUST_NO
+			 , AF_LINK_CD
+			 , ITHR_CD
+			 , CONTENTS_LOC
+			 , PLAN_DTL_SQ
+			 , #{regNo}
+			 , NOW()
 		FROM   TB_CART C
 		WHERE  CART_SQ = #{updCartSq}
 	</update>
-	
+
+	<!-- 장바구니 상품 정보 조회 -->
+	<select id="selectCartGoodsInfo" parameterType="Cart" resultType="Cart">
+		/* TsfCart.selectCartGoodsInfo : 장바구니 상품 마스터 정보 조회 */
+		SELECT G.GOODS_CD
+			 , G.GOODS_TYPE
+		     , G.GOODS_NM
+			 , BR.BRAND_ENM
+			 , BR.BRAND_KNM
+			 , CA.CART_SQ
+			 , CA.GOODS_QTY
+			 , G.SELF_GOODS_YN
+		FROM   TB_CART CA
+		INNER  JOIN TB_GOODS G
+		ON     CA.GOODS_CD = G.GOODS_CD
+		INNER  JOIN TB_BRAND BR
+		ON     G.BRAND_CD = BR.BRAND_CD
+		WHERE  CA.CART_SQ = #{cartSq}
+		AND    G.SELF_MALL_YN = 'Y'
+		AND    G.GOODS_STAT = 'G008_90'
+	</select>
+
+	<!-- 장바구니 세트 구성 상품 정보 조회 -->
+	<select id="selectCartSetGoodsInfo" parameterType="Cart" resultType="Cart">
+		/* TsfCart.selectCartSetGoodsInfo : 장바구니 세트 구성 상품 정보 조회 */
+		SELECT GC.COMPS_GOODS_CD AS GOODS_CD
+			 , GC.DISP_ORD
+			 , GC.QTY
+			 , CD.CART_DTL_SQ
+			 , CD.ITEM_CD
+			 , CD.OPT_CD
+			 , CD.OPT_CD1
+			 , CD.OPT_CD2
+			 , G.SELF_GOODS_YN
+			 , G.GOODS_NM
+		FROM   TB_CART CA
+		INNER  JOIN TB_CART_DETAIL CD
+		ON     CA.CART_SQ = CD.CART_SQ
+		INNER  JOIN TB_GOODS_COMPOSE GC
+		ON     CA.GOODS_CD = GC.GOODS_CD
+		AND    CD.ITEM_CD = GC.COMPS_GOODS_CD
+		INNER  JOIN TB_GOODS G
+		ON     GC.COMPS_GOODS_CD = G.GOODS_CD
+		WHERE  1=1
+		AND    G.SELF_MALL_YN = 'Y'
+		AND    G.GOODS_STAT = 'G008_90'
+		AND    GC.USE_YN = 'Y'
+		AND    GC.GOODS_CD = #{goodsCd}
+		AND    CA.CART_SQ = #{cartSq}
+		ORDER  BY CA.GOODS_CD, GC.COMPS_GOODS_CD, GC.DISP_ORD
+	</select>
+
+	<!-- 장바구니 상품 컬러 정보 조회 -->
+	<select id="selectCartGoodsColorList" parameterType="Cart" resultType="Cart">
+		/* TsfCart.selectCartGoodsColorList : 장바구니 상품 컬러 정보 조회 */
+		SELECT ST.GOODS_CD
+			 , CASE WHEN SELF_GOODS_YN = 'Y' THEN (SELECT COLOR_KNM FROM TB_COLOR WHERE COLOR_CD = ST.OPT_CD1)
+					ELSE ST.OPT_CD1 END AS COLOR_NM
+			 , CASE WHEN SELF_GOODS_YN = 'Y' AND GOODS_TYPE != 'G056_S' THEN (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = ST.GOODS_CD AND COLOR_CD = ST.OPT_CD1 AND DEFAULT_IMG_YN = 'Y' LIMIT 1)
+					ELSE (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = G.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' LIMIT 1) END AS SYS_IMG_NM
+			 , ST.OPT_CD1
+			 , G.MAIN_COLOR_CD
+			 , MAX(CD.CART_DTL_SQ) AS CART_DTL_SQ
+			 , MAX(ST.DISP_ORD) AS DISP_ORD
+			 , MAX(CD.OPT_CD1) AS CART_OPT_CD1
+			 , IFNULL(MAX( CASE WHEN SELF_GOODS_YN = 'Y' THEN (SELECT COLOR_KNM FROM TB_COLOR WHERE COLOR_CD = CD.OPT_CD1)
+								ELSE CD.OPT_CD1 END), MAX(CD.OPT_CD1)) AS CART_COLOR_NM
+		FROM   TB_GOODS G
+		INNER  JOIN VW_STOCK ST
+		ON     G.GOODS_CD = ST.GOODS_CD
+		LEFT   OUTER JOIN TB_CART_DETAIL CD
+		ON     G.GOODS_CD = CD.ITEM_CD
+		AND    ST.OPT_CD = CD.OPT_CD
+		AND    CD.CART_SQ = #{cartSq}
+		WHERE  ST.DISP_YN = 'Y'
+		AND    G.SELF_MALL_YN = 'Y'
+		AND    G.GOODS_STAT = 'G008_90'
+		AND    G.GOODS_CD = #{goodsCd}
+		GROUP  BY ST.GOODS_CD
+			 , ST.OPT_CD1
+			 , G.MAIN_COLOR_CD
+		ORDER  BY DISP_ORD
+	</select>
+
+	<!-- 장바구니 상품 사이즈 정보 조회 -->
+	<select id="selectCartGoodsSizeList" parameterType="Cart" resultType="Cart">
+		/* TsfCart.selectCartGoodsSizeList : 장바구니 상품 사이즈 정보 조회 */
+		SELECT ST.GOODS_CD
+			 , ST.OPT_CD
+		     , ST.OPT_CD1
+			 , ST.OPT_CD2
+			 , ST.CURR_STOCK_QTY
+			 , ST.SOLDOUT_YN
+			 , CD.OPT_CD AS CART_OPT_CD
+		FROM   TB_GOODS G
+		INNER  JOIN VW_STOCK ST
+		ON     G.GOODS_CD = ST.GOODS_CD
+		LEFT   OUTER JOIN TB_CART_DETAIL CD
+		ON     G.GOODS_CD = CD.ITEM_CD
+		AND    ST.OPT_CD = CD.OPT_CD
+		AND    CD.CART_SQ = #{cartSq}
+		WHERE  1=1
+		AND    G.GOODS_CD = #{goodsCd}
+		<if test="optCd1 != null and optCd1 != ''">
+		AND    ST.OPT_CD1 = #{optCd1}
+		</if>
+		AND    ST.DISP_YN = 'Y'
+		AND    G.SELF_MALL_YN = 'Y'
+		AND    G.GOODS_STAT = 'G008_90'
+		ORDER  BY ST.DISP_ORD
+	</select>
+
+	<!-- 장바구니 자사 일반 및 딜 상품 이미지 리스트 조회 -->
+	<select id="selectCartSelfGoodsOptionImgList" parameterType="Cart" resultType="GoodsImg">
+		/* TsfCart.selectCartSelfGoodsOptionImgList : 장바구니 자사 상품 이미지 리스트 조회 */
+		SELECT GI.GOODS_CD
+			 , GI.COLOR_CD
+			 , GI.SYS_IMG_NM
+		FROM   TB_GOODS G
+		INNER  JOIN TB_GOODS_IMG GI
+		ON     G.GOODS_CD = GI.GOODS_CD
+		WHERE  G.SELF_MALL_YN = 'Y'
+		AND    G.GOODS_STAT = 'G008_90'
+		AND    GI.GOODS_CD = #{goodsCd}
+		AND    GI.COLOR_CD = #{optCd1}
+		ORDER  BY GI.DISP_ORD
+	</select>
+
+	<!-- 장바구니 세트 & 입점업체 상품 이미지 리스트 조회 -->
+	<select id="selectCartDelvGoodsOptionImgList" parameterType="Cart" resultType="GoodsImg">
+		/* TsfCart.selectCartDelvGoodsOptionImgList : 장바구니 입점업체 상품 이미지 리스트 조회 */
+		SELECT GI.GOODS_CD
+			 , GI.COLOR_CD
+			 , GI.SYS_IMG_NM
+		FROM   TB_GOODS G
+		INNER  JOIN TB_GOODS_IMG GI
+		ON     G.GOODS_CD = GI.GOODS_CD
+		AND    G.MAIN_COLOR_CD = GI.COLOR_CD
+		WHERE  G.SELF_MALL_YN = 'Y'
+		AND    G.GOODS_STAT = 'G008_90'
+		AND    GI.GOODS_CD = #{goodsCd}
+		ORDER  BY GI.DISP_ORD
+	</select>
 </mapper>

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

@@ -113,4 +113,24 @@
 				) Z
 		 WHERE Z.DOWNLOAD_CNT > 0
 	</select>
+
+	<!--회원가입 쿠폰-->
+	<select id="getJoinCoupon" parameterType="Coupon" resultType="Coupon">
+		SELECT CP.CPN_ID
+		     , CP.END_ALIM_YN
+		     , CASE WHEN #{frontGb} = 'P' THEN CP.DC_PVAL
+		            WHEN #{frontGb} = 'M' THEN CP.DC_MVAL
+		            ELSE CP.DC_AVAL                                              END AS DC_VAL
+		     , CASE WHEN CP.PD_GB = 'D' THEN DATE_FORMAT(NOW(), '%Y%M%D%H%I%S')
+		            ELSE DATE_FORMAT(CP.AVAIL_STDT, '%Y%M%D%H%I%S')              END AS AVAIL_STDT
+		     , CASE WHEN CP.PD_GB = 'D' THEN DATE_FORMAT(DATE_ADD(NOW(), INTERVAL CP.AVAIL_DAYS DAY), '%Y%M%D%H%I%S')
+		            ELSE  DATE_FORMAT(CP.AVAIL_EDDT, '%Y%M%D%H%I%S')             END AS AVAIL_EDDT
+		FROM  TB_CUST_GRADE_POLICY CGP
+		INNER JOIN
+		      TB_COUPON CP
+		ON    CGP.GRADE_CPN_ID1 = CP.CPN_ID
+		WHERE CGP.GRADE_CD = #{custGrade}
+		AND   CP.SITE_CD = #{siteCd}
+	</select>
+	
 </mapper>

+ 1 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsfCustomer.xml

@@ -234,7 +234,7 @@
 		     , NOW()                               AS JOIN_DT
 		     , IFNULL(#{foreignerYn}, 'N')         AS FOREIGNER_YN
 		     , #{custStat}                         AS CUST_STAT
-		     , #{passwdChgDt}                      AS PASSWD_CHG_DT
+		     , NOW()                               AS PASSWD_CHG_DT
 		     , 'N'                                 AS TEMP_PASSWD_YN
 		     , NOW()                               AS LOGIN_LDT
 		     , #{ci}                               AS CI

+ 217 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml

@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.style24.front.biz.dao.TsfOrderChangeDao">
+
+	<!-- 페이징을 위한 select절 상단 -->
+	<sql id="selectForPagingHeader">
+		SELECT *
+		FROM   (
+	</sql>
+
+	<!-- 페이징을 위한 select절 하단 -->
+	<sql id="selectForPagingFooter">
+		       ) ORIGINAL
+		WHERE  NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
+	</sql>
+	<!--// Paging -->
+
+	<!-- 마이페이지 취소/반품 목록 조회 -->
+	<select id="getCancelListForMypage" parameterType="Order" resultType="Order">
+		/* TscOrderChange.getCancelListForMypage */
+		SELECT O.ORD_NO
+		     , DATE_FORMAT(O.ORD_DT, '%Y.%m.%d')				AS ORD_DT
+		     , OD.ORD_DTL_NO
+		     , OD.ORD_DTL_STAT
+		     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT)			AS ORD_DTL_STAT_NM
+		     , OD.ORD_EXCH_GB
+		     , CASE WHEN OD.ORD_DTL_STAT IN ('G013_20', 'G013_30', 'G013_40') THEN 'Y'
+					ELSE 'N'
+				END												AS ALL_CAN_YN
+		     , OD.GOODS_CD
+		     , G1.GOODS_NM
+		     , G1.GOODS_TYPE
+		     , FN_GET_CODE_NM('G056', G1.GOODS_TYPE)			AS GOODS_TYPE_NM
+		     , G2.GOODS_CD										AS ITEM_CD
+		     , G2.GOODS_NM										AS ITEM_NM
+		     , ODI.ORD_DTL_ITEM_SQ
+		     , ODI.OPT_CD
+		     , ODI.OPT_CD1
+		     , ODI.OPT_CD2
+		     , ODI.ITEM_QTY
+		     , ODI.ITEM_PRICE
+		     , ODI.OPT_ADD_PRICE
+		     , ODI.ORD_AMT
+		     , ODI.CNCL_RTN_AMT
+		     , ODI.CPN1_DC_AMT
+		     , ODI.TMTB1_DC_AMT
+		     , ODI.TMTB2_DC_AMT
+		     , ODI.GOODS_CPN_DC_AMT
+		     , ODI.CART_CPN_DC_AMT
+		     , ODI.PNT_DC_AMT
+		     , ODI.PRE_PNT_DC_AMT
+		     , ODI.GFCD_USE_AMT
+		     , ODI.REAL_ORD_AMT
+		     , GI.SYS_IMG_NM
+		     , OD.ORD_QTY
+		     , OD.CNCL_RTN_QTY
+		     , CASE WHEN OCD.ORD_REQ_CHG_QTY IS NULL THEN 0
+					ELSE OCD.ORD_REQ_CHG_QTY * ODI.ITEM_QTY
+				END												AS ORD_REQ_CHG_QTY
+		     , OD.ORD_QTY - OD.CNCL_RTN_QTY - IF(OCD.ORD_REQ_CHG_QTY IS NULL, 0, OCD.ORD_REQ_CHG_QTY * ODI.ITEM_QTY) AS ORD_CAN_CHG_QTY
+		     , OD.SAVE_PNT_AMT
+		     , OD.SHIP_COMP_CD
+		     , OD.GIFT_PACK_YN
+		     , FN_GET_SUPPLY_COMP_NM(OD.SUPPLY_COMP_CD)			AS SUPPLY_COMP_NM
+		     , OD.INVOICE_NO
+		     , OD.SUPPLY_COMP_CD
+		     , OD.DELV_FEE_CD
+		     , OD.SHOT_DELV_YN
+		     , G1.SELF_GOODS_YN
+		     , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)			AS BRAND_NM
+		     , DF.DELV_FEE
+		     , DF.DELV_FEE_CD
+		     , DFP.MIN_ORD_AMT
+		     , DFP.DELV_FEE										AS ORG_DELV_FEE
+		     , DFP.RTN_DELV_FEE
+		     , DFP.DELV_FEE + DFP.RTN_DELV_FEE					AS EXC_DELV_FEE
+		     , DL.RTN_LOC_NM
+		     , DL.RTN_LOC_ZIPCODE
+		     , DL.RTN_LOC_BASE_ADDR
+		     , DL.RTN_LOC_DTL_ADDR
+		     , DL.RTN_LOC_TELNO
+		     , DA.RECIP_NM
+		     , DA.RECIP_TELNO
+		     , DA.RECIP_PHNNO
+		     , DA.RECIP_ZIPCODE
+		     , DA.RECIP_BASE_ADDR
+		     , DA.RECIP_DTL_ADDR
+		  FROM TB_ORDER O
+		 INNER JOIN TB_ORDER_DETAIL OD
+		    ON O.ORD_NO = OD.ORD_NO
+		   AND OD.ORD_DTL_STAT NOT IN ('G013_11', 'G013_25', 'G013_97')
+		 INNER JOIN TB_ORDER_DETAIL_ITEM ODI
+		    ON OD.ORD_NO = ODI.ORD_NO
+		   AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+		   AND ODI.ORD_DTL_STAT NOT IN ('G013_11', 'G013_25', 'G013_97')
+		 INNER JOIN TB_GOODS G1
+		    ON OD.GOODS_CD = G1.GOODS_CD
+		 INNER JOIN TB_GOODS G2
+		    ON ODI.ITEM_CD = G2.GOODS_CD
+		 INNER JOIN TB_BRAND B
+		    ON B.BRAND_CD = G1.BRAND_CD
+		  LEFT OUTER JOIN (SELECT OD.ORD_DTL_NO
+								, SUM(OCD.CHG_QTY) AS ORD_REQ_CHG_QTY
+							 FROM TB_ORDER_CHANGE_DETAIL OCD
+							INNER JOIN TB_ORDER_DETAIL OD
+							   ON OCD.ORD_DTL_NO = OD.ORD_DTL_NO
+							WHERE OD.ORD_NO = #{ordNo}
+							  AND OCD.DEL_YN = 'N'
+							  AND OCD.CHG_STAT IN ('G685_20', 'G685_30', 'G685_33', 'G685_40')
+							GROUP BY OCD.ORD_DTL_NO
+						  ) OCD
+		    ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+		  LEFT OUTER JOIN TB_DELIVERY_ADDR DA
+		    ON DA.DELV_ADDR_SQ = OD.DELV_ADDR_SQ
+		  LEFT OUTER JOIN TB_GOODS_IMG GI
+		    ON OD.GOODS_CD = GI.GOODS_CD
+		   AND ODI.OPT_CD1 = GI.COLOR_CD
+		   AND GI.DEFAULT_IMG_YN = 'Y'
+		  LEFT OUTER JOIN (SELECT X.DELV_FEE_CD
+							  , SUM(X.DELV_FEE) AS DELV_FEE
+						   FROM TB_DELIVERY_FEE X
+						  WHERE X.ORD_NO = #{ordNo}
+							AND X.DELV_FEE_GB = 'G018_10'
+						  GROUP BY X.DELV_FEE_CD
+						) DF
+		    ON OD.DELV_FEE_CD = DF.DELV_FEE_CD
+		  LEFT OUTER JOIN TB_DELV_FEE_POLICY DFP
+		    ON DF.DELV_FEE_CD = DFP.DELV_FEE_CD
+		   AND DFP.USE_YN = 'Y'
+		  LEFT OUTER JOIN (SELECT TDL.DELV_LOC_CD
+								, TDL.RTN_LOC_NM
+								, TDL.RTN_LOC_TELNO
+								, TDL.RTN_LOC_ZIPCODE
+								, TDL.RTN_LOC_BASE_ADDR
+								, TDL.RTN_LOC_DTL_ADDR
+							 FROM TB_DELIVERY_LOC TDL
+							INNER JOIN TB_SUPPLY_COMPANY TSC
+							   ON TDL.SUPPLY_COMP_CD = TSC.SUPPLY_COMP_CD
+						  ) DL
+		    ON OD.DELV_LOC_CD = DL.DELV_LOC_CD
+		<where>
+			<choose>
+				<when test='custNo != null and custNo != ""'>
+		   AND O.CUST_NO = #{custNo}
+				</when>
+				<otherwise>
+		   AND O.ORD_NO = #{ordNo}
+		   AND O.ORD_NM = #{orderNm}
+				</otherwise>
+			</choose>
+			<if test="ordNo != null and ordNo != ''">
+		   AND O.ORD_NO = #{ordNo}
+			</if>
+			<if test="ordNoList != null">
+		   AND O.ORD_NO IN
+				<foreach collection="ordNoList" item="item" index="index"  open="(" close=")" separator=",">
+					#{item}
+				</foreach>
+			</if>
+			<if test="ordDtlNoArr != null">
+		   AND OD.ORD_DTL_NO IN
+				<foreach collection="ordDtlNoArr" item="item" index="index"  open="(" close=")" separator=",">
+					#{item}
+				</foreach>
+			</if>
+		   AND O.DISP_YN = 'Y'
+		</where>
+		 ORDER BY OD.ORD_DTL_NO
+	</select>
+	
+	<!-- 사용 상품권 정보 조회 -->
+	<select id="getUsedGiftcardInfo" parameterType="Order" resultType="GiftCard">
+		/* TscOrderChange.getUsedGiftcardInfo */
+		SELECT CGH.ORD_NO
+			 , CGH.ORD_DTL_NO
+			 , SUM(CGH.GFCD_AMT) AS GFCD_AMT
+		  FROM TB_CUST_GIFTCARD_HST CGH
+		 INNER JOIN TB_CUST_GIFTCARD CG
+		    ON CG.CUST_GFCD_SQ = CGH.CUST_GFCD_SQ
+		 WHERE CGH.CUST_NO = #{custNo}
+		   AND CGH.ORD_NO = #{ordNo}
+		<if test="ordDtlNoArr != null">
+		   AND CGH.ORD_DTL_NO IN
+			<foreach collection="ordDtlNoArr" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+		   AND OCCUR_GB = 'G074_12'
+		   AND NOW() BETWEEN CG.USE_ST_DATE AND CG.USE_EXP_DATE
+		 GROUP BY CGH.ORD_NO, CGH.ORD_DTL_NO
+		 ORDER BY CGH.ORD_NO, CGH.ORD_DTL_NO
+	</select>
+	
+	<!-- 사용 포인트 정보 조회 -->
+	<select id="getUsedPointInfo" parameterType="Order" resultType="Point">
+		/* TscOrderChange.getUsedPointInfo */
+		SELECT CPH.ORD_NO
+			 , CPH.ORD_DTL_NO
+			 , SUM(CPH.PNT_AMT) AS PNT_AMT
+		  FROM TB_CUST_POINT_HST CPH
+		  INNER JOIN TB_CUST_POINT CP
+		  ON CP.CUST_PNT_SQ = CPH.CUST_PNT_SQ
+		 WHERE CPH.CUST_NO = #{custNo}
+		   AND CPH.ORD_NO = #{ordNo}
+		<if test="ordDtlNoArr != null">
+		   AND CPH.ORD_DTL_NO IN
+			<foreach collection="ordDtlNoArr" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+		   AND CPH.OCCUR_GB = 'G069_10'
+		   AND CP.EXP_BE_DT <![CDATA[>]]> NOW()
+		   AND CP.EXP_CMP_DT IS NULL
+		 GROUP BY CPH.ORD_NO, CPH.ORD_DTL_NO
+		 ORDER BY CPH.ORD_NO, CPH.ORD_DTL_NO
+	</select>
+</mapper>

+ 38 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfPoint.xml

@@ -105,4 +105,42 @@
 		GROUP BY CD_NM, PNT_AMT, GOODS_NM, CD,OCCUR_DTL_DESC, TCHP.UPD_DT
 		ORDER BY TCHP.UPD_DT DESC;
 	</select>
+	
+	<!-- 전체내역 조회-->
+	<select id="getAllPointList" parameterType="Point" resultType="Point">
+		/* TsfPoint.getAllPointList */
+		SELECT
+		CASE   TCC.CD_NM
+		WHEN   '포인트사용' THEN '구매 사용'
+		WHEN   '상품평승인취소' THEN '구매 취소'
+		WHEN   '기타' THEN '관리자'
+		WHEN   '포인트소멸' THEN '소멸'
+		WHEN   '예정포인트적립' THEN '상품 구매'
+		WHEN   '상품평승인' THEN '리뷰'
+		WHEN   '온라인이벤트' THEN '이벤트'
+		WHEN   '기타' THEN '관리자'
+		END AS OCCUR_GB ,	
+		CASE   TCC.CD  	
+		WHEN   'G069_10' THEN TG.GOODS_NM
+		WHEN   'G069_12' THEN TG.GOODS_NM 
+		WHEN   'G069_20' THEN TG.GOODS_NM 
+		WHEN   'G069_21' THEN TG.GOODS_NM
+		WHEN   'G069_30' THEN TCHP.OCCUR_DTL_DESC
+		WHEN   'G069_90' THEN TCHP.OCCUR_DTL_DESC
+		WHEN   'G069_99' THEN TCHP.OCCUR_DTL_DESC
+		END AS OCCUR_DTL_DESC
+			 , TCHP.PNT_AMT AS pntAmt
+			 , TCHP.UPD_DT  AS pntUploadDt
+		FROM TB_CUST_POINT_HST TCHP
+		INNER JOIN TB_COMMON_CODE TCC
+		ON TCC.CD = TCHP.OCCUR_GB
+		INNER JOIN TB_ORDER_DETAIL TOD
+		ON TOD.ORD_NO = TCHP.ORD_NO
+		INNER JOIN TB_GOODS TG 
+		ON TG.GOODS_CD = TOD.GOODS_CD 
+		WHERE TCHP.CUST_NO =  #{custNo}
+		AND TCHP.OCCUR_GB IN ('G069_10','G069_12','G069_20','G069_21','G069_30','G069_90','G069_99')
+		GROUP BY CD_NM, PNT_AMT, GOODS_NM, CD,OCCUR_DTL_DESC, TCHP.UPD_DT
+		ORDER BY TCHP.UPD_DT DESC;
+	</select>
 </mapper>

+ 14 - 6
src/main/resources/config/application-locd.yml

@@ -56,9 +56,17 @@ download.path: /WIDE/workspace/files/data
 
 # PG
 pg:
-    nicepay:
-        merchantId: nictest00m
-        merchantKey: 33F49GnCMS1mFYlGXisbUDzVf2ATWCl9k3R++d5hDd3Frmuos/XLx8XhXpe+LDYAbpGKZYSwtlyyLOtS/8aD7A==
-        log.path: /WIDE/workspace/logs/wivis
-        account.cert.url: https://webapi.nicepay.co.kr/api/checkBankAccountAPI.jsp
-        vbank.refund.url: https://webapi.nicepay.co.kr/v2/api/merchant/vbank_refund.jsp
+    kcp:
+        log.dir: D:\\WIDE\\workspace\\webapps\\style24\\STYLE24\\style24.front\\src\\main\\webapp\\logs
+        gw:
+            url: testpaygw.kcp.co.kr
+            port: 8090
+        js.url: https://testpay.kcp.co.kr/plugin/payplus_web.jsp
+        server: false
+        site:
+            cd: T0007
+            key: 4Ho4YsuOZlLXUZUdOxM1Q7X__
+            name: KCP TEST SHOP
+        log.level: 3
+        module.type: 01
+        tx.mode: 0

+ 56 - 0
src/main/resources/config/application-tsit.yml

@@ -0,0 +1,56 @@
+spring:
+    profiles:
+        active: tsit
+    cache.type: redis
+    redis:
+        lettuce:
+            pool:
+                max-active: 10
+                max-idle: 10
+                min-idle: 2
+        host: localhost
+        port: 6379
+        password:
+
+# SSL Server
+has-ssl: false
+
+logging:
+    config: classpath:log/logback-tsit.xml
+
+domain:
+    admin: //tdadmin.style24.com
+    front: //tdfront.style24.com
+    style24: //tdfront.style24.com
+    image: //tdimage.style24.com
+    cdnimage: //tdimage.style24.com
+    uximage: //tdimage.style24.com
+
+upload:
+    default:
+        target.path: /TSIT/servers/files/data
+        max.size: 10
+        allow.extension: jpg|gif|jpeg|png|bmp|txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
+        view: //tdimage.style24.com
+    goods:
+        target.path: /TSIT/servers/files/data/goods
+        max.size: 10
+        allow.extension: jpg|gif|jpeg|png
+        view: //tdimage.style24.com/Upload/ProductImage
+    image:
+        target.path: /TSIT/servers/files/data
+        max.size: 10
+        allow.extension: jpg|gif|jpeg|png
+        view: //tdimage.style24.com
+    excel:
+        target.path: /TSIT/servers/files/data/excel
+        max.size: 10
+        allow.extension: xls|xlsx
+        view: //tdimage.style24.com/excel
+    sample:
+        target.path: /WIDE/workspace/files/data
+        max.size: 10
+        allow.extension: txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
+        view: //tdimage.style24.com/sample
+
+download.path: /TSIT/servers/files/data

+ 16 - 14
src/main/resources/config/application.yml

@@ -48,26 +48,28 @@ naver:
 
 #카카오 API
 kakao:
-    appId: 442702
-    appName: 아이스타일24
-    companyName: 예스이십사
-    nativeAppKey: 5d97db2ee36fa0e121d962b2531ae0c1
-    restApiKey: 46d601394bd887cbada3cf00fdddef54
-    javascriptKey: b3c9ee69171042c3637e8d714a4c8a75
-    adminKey: 7cc33b2ef96d785c4caf3376f9dc9254
-#    appId : 399207
-#    appName : 구축용 테스트앱
-#    companyName : 예스이십사
-#    nativeAppKey : f961e612e07b47aa2d1884714518a194
-#    restApiKey: b3955cef0328a09156c7e25f18552164
-#    javascriptKey : 06cab652ad5d25be2190388d11a88fa4
-#    adminKey : a25ca74dde640f3a63a8d8442fe35fcd
+#    appId: 442702
+#    appName: 아이스타일24
+#    companyName: 예스이십사
+#    nativeAppKey: 5d97db2ee36fa0e121d962b2531ae0c1
+#    restApiKey: 46d601394bd887cbada3cf00fdddef54
+#    javascriptKey: b3c9ee69171042c3637e8d714a4c8a75
+#    adminKey: 7cc33b2ef96d785c4caf3376f9dc9254
+    cid : TC0ONETIME
+    appId : 399207
+    appName : 구축용 테스트앱
+    companyName : 예스이십사
+    nativeAppKey : f961e612e07b47aa2d1884714518a194
+    restApiKey: b3955cef0328a09156c7e25f18552164
+    javascriptKey : 06cab652ad5d25be2190388d11a88fa4
+    adminKey : a25ca74dde640f3a63a8d8442fe35fcd
     addressApiRequestUrl : https://dapi.kakao.com/v2/local/search/address.json?page=1&query=
     login.callbackUrl: /signin/snsLoginCallback?snsType=KK
     tokenUrl: https://kauth.kakao.com/oauth/token
     userInfoUrl: https://kapi.kakao.com/v2/user/me
     authorizeUrl: https://kauth.kakao.com/oauth/authorize
     unlinkUrl : https://kapi.kakao.com/v1/user/unlink
+    paymentReadyUrl : https://kapi.kakao.com/v1/payment/ready
 
 # SPEEDY Image Upload
 speedy:

+ 25 - 0
src/main/resources/log/logback-tsit.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration scan="true">
+	<property name="LOG_HOME" value="/TSIT/servers/logs/style24/front"/>
+	<property name="LOG_LEVEL" value="INFO"/>
+	
+	<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+		<encoder>
+			<charset>utf-8</charset>
+			<pattern>[%d] [%thread] %-5level %logger{32} : %msg%n</pattern>
+		</encoder>
+	</appender>
+	
+	<logger name="org.springframework" level="ERROR"/>
+
+	<!-- SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함한다. -->
+	<logger name="jdbc.sqltiming" level="INFO" additivity="false">
+		<appender-ref ref="CONSOLE"/>
+	</logger>
+
+	<root level="${LOG_LEVEL}">
+		<appender-ref ref="CONSOLE"/>
+	</root>
+
+</configuration>

BIN
src/main/webapp/WEB-INF/lib/ConnectionKCP.jar


BIN
src/main/webapp/WEB-INF/lib/jPpcliE.jar


+ 246 - 0
src/main/webapp/WEB-INF/views/web/cart/cartChangeOptionPopupWeb.html

@@ -0,0 +1,246 @@
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+<!-- 옵션변경 팝업 -->
+<div class="modal-dialog cartOptionModal" role="document">
+	<div class="modal-content">
+		<div class="modal-header">
+			<h5 class="modal-title" id="optModifyLabel">옵션변경</h5>
+			<div class="prod_title">
+				<span class="brand" th:text="|${cart.brandEnm + ' ' + cart.brandKnm}|"></span>
+				<span class="name" th:text="${cart.goodsNm}"></span>
+			</div>
+		</div>
+
+		<div class="modal-body">
+			<div class="pop_cont">
+				<div class="prod_info">
+					<div class="prod_preview">
+						<div class="area_pic">
+							<ul class="pic_list">
+								<th:block th:if="${setType.equals(cart.goodsType) or cart.selfGoodsYn.equals('N')}">
+									<li th:each="img, index : ${cart.cartImgList}">
+										<span class="thumb"><img th:src="${cart.imgPath + '/' + img.sysImgNm}" src="#" alt="" /></span>
+									</li>
+								</th:block>
+								<th:block th:if="${!setType.equals(cart.goodsType) and cart.selfGoodsYn.equals('Y')}">
+									<th:block th:each="comp, status : ${cart.cartCompsList}">
+										<th:block th:each="color, index : ${comp.cartColorList}">
+											<th:block th:if="${color.cartOptCd1 != null and color.cartOptCd1.equals(color.optCd1)}">
+												<li th:each="img, index : ${color.cartImgList}">
+													<span class="thumb"><img th:src="${cart.imgPath + '/' + img.sysImgNm}" src="#" alt="" /></span>
+												</li>
+											</th:block>
+										</th:block>
+									</th:block>
+								</th:block>
+							</ul>
+						</div>
+						<div class="area_order">
+							<th:block th:each="comp, status : ${cart.cartCompsList}">
+								<!-- 세트상품 옵션 -->
+								<th:block th:if="${setType.equals(cart.goodsType)}">
+									<div class="opt_select setOption">
+										<div class="opt_header">
+											<span class="title" th:text="${comp.goodsNm}"></span>
+										</div>
+
+										<!-- 컬러 변경시 만들어줄 size option -->
+										<th:block th:each="color, index : ${comp.cartColorList}">
+											<span style="display:none;">
+												<select th:classappend="|color_${color.goodsCd}_${color.optCd1}|">
+													<th:block th:each="size, i : ${color.cartSizeList}">
+														<th:block th:if="${color.optCd1.equals(size.optCd1)}">
+															<option th:value="${size.optCd}" th:text="${size.optCd2}"></option>
+														</th:block>
+													</th:block>
+												</select>
+											</span>
+										</th:block>
+
+										<div class="form_field">
+											<select class="setColorSelect">
+												<option th:data="${comp.goodsCd}" value="aa">TEST</option>
+												<th:block th:each="color, index : ${comp.cartColorList}">
+													<option th:data="${comp.goodsCd}" th:value="${color.optCd1}" rel="icon-temperature" th:text="${color.colorNm}" th:selected="${color.cartColorNm != null}"></option>
+												</th:block>
+											</select>
+										</div>
+										<div class="form_field">
+											<th:block th:each="color, index : ${comp.cartColorList}">
+											<select th:data="${color.goodsCd}" th:class="|size_${comp.goodsCd} setSizeSelect|">
+												<th:block th:each="size, i : ${color.cartSizeList}">
+													<th:block th:if="${color.optCd1.equals(size.optCd1)}">
+														<option th:data="${comp.cartDtlSq}" th:value="${size.optCd}" th:text="${size.optCd2}" th:selected="${size.cartOptCd != null}"></option>
+													</th:block>
+												</th:block>
+											</select>
+											</th:block>
+										</div>
+									</div>
+								</th:block>
+
+								<!-- 자사 일반 상품 옵션 -->
+								<th:block th:if="${!setType.equals(cart.goodsType) and 'Y'.equals(cart.selfGoodsYn)}">
+									<div class="opt_color">
+										<div class="opt_header">
+											<span class="title">컬러</span>
+											<th:block th:each="color, index : ${comp.cartColorList}">
+												<th:block th:if="${color.cartColorNm != null}">
+													<span class="color" th:text="${color.cartColorNm}"></span>
+												</th:block>
+											</th:block>
+										</div>
+										<ul>
+											<li th:each="color, index : ${comp.cartColorList}" class="selfGoodsColor">
+												<a href="" th:classappend="${color.cartColorNm != null} ? 'on'" class="selfGoodsColorSelect" th:data="${color.optCd1}">
+													<img th:src="${cart.imgPath + '/' + color.sysImgNm}" src="#" th:alt="${color.colorNm}" alt="" />
+												</a>
+											</li>
+										</ul>
+									</div>
+
+									<div class="opt_size">
+										<div class="opt_header">
+											<span class="title">사이즈</span>
+										</div>
+										<div class="form_field selfGoodsSize">
+											<th:block th:each="color, index : ${comp.cartColorList}">
+												<th:block th:if="${color.cartColorNm != null}">
+													<th:block th:each="size, index : ${color.cartSizeList}">
+														<div>
+															<input type="radio" name="rdi-optsize" th:id="|${'rdi-optsize' + size.goodsCd + '-' + size.optCd}|" th:value="${size.optCd}" th:checked="${size.cartOptCd != null}" th:disabled="${size.soldoutYn == 'Y' or cart.goodsQty < size.currStockQty}">
+															<label th:for="|${'rdi-optsize' + size.goodsCd + '-' + size.optCd}|"><span th:text="${size.optCd2}"></span></label>
+														</div>
+													</th:block>
+												</th:block>
+											</th:block>
+										</div>
+									</div>
+								</th:block>
+
+								<!-- 입점업체 상품 옵션 -->
+								<th:block th:if="${!setType.equals(cart.goodsType) and !'Y'.equals(cart.selfGoodsYn)}">
+									<div class="opt_select">
+										<div class="opt_header">
+											<span class="title">옵션선택</span>
+										</div>
+										<div class="form_field">
+											<select id="">
+												<th:block th:each="color, index : ${comp.cartColorList}">
+												<option th:value="${color.optCd}" th:text="${color.optCd1 + '/' + color.optCd2}" th:selected="${color.cartOptCd != null}"></option>
+												</th:block>
+											</select>
+										</div>
+									</div>
+								</th:block>
+							</th:block>
+							<div class="opt_count">
+								<div class="opt_header">
+									<span class="title">수량</span>
+								</div>
+								<div class="number_count">
+									<span class="minus"><span class="sr-only">감소</span></span>
+									<input type="text" name="goodsQty" maxlength="3" style='ime-mode:disabled' th:value="${cart.goodsQty}" />
+									<!-- <input type="text" name="goodsQty" maxlength="3" style='ime-mode:disabled' th:value="2" /> -->
+									<span class="plus"><span class="sr-only">추가</span></span>
+								</div>
+							</div>
+							<div class="btn_group_block">
+								<button class="btn btn_dark btn_block" th:onclick="|fnChangeCartOption(${cart.cartSq})|"><span>옵션변경</span></button>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+<!-- //옵션변경 팝업 -->
+
+
+<script th:inline="javascript">
+	$(document).ready(function() {
+
+	})
+
+	// 세트상품 컬러 변경시
+	$(".setColorSelect").on("change", function(e) {
+		let goodsCd = $(this).find("option:checked").attr("data");
+		$(".setOption .size_" + goodsCd).html("");
+		$(".setOption .size_" + goodsCd).html($(".color_" + goodsCd + "_" + $(this).val()).html());
+	});
+
+	// 자사 일반 상품 컬러 선택시
+	$(".selfGoodsColorSelect").on("click", function(e) {
+		let html = "";
+		let cart = [[${cart}]];
+		let color =  [[${cart.cartCompsList[0].cartColorList}]];
+		let optCd1 = $(this).attr("data");
+
+		for(let i = 0 ; i < color.length ; i++) {
+			let size = color[i].cartSizeList;
+			for(let j = 0 ; j < size.length ; j++) {
+				if(optCd1 == size[j].optCd1) {
+					html += "<div>";
+					html += "<input type='radio' name='rdi-optsize' id='" + size[j].goodsCd + "-" + size[j].optCd + "' value='" + size[j].optCd + "' ";
+					if(size[j].soldoutYn == "Y" || cart.goodsQty < size[j].currStockQty) {
+						html += "disabled = 'disabled'";
+					}
+					html += " />\n";
+					html += "<label for='" + size[j].goodsCd + "-" + size[j].optCd + "'><span>" + size[j].optCd2 + "</span></label>\n"
+					html += "</div>\n";
+				}
+			}
+		}
+
+		$(".selfGoodsSize").html(html);
+	});
+
+	function fnChangeCartOption(cartSq) {
+		let cart = [[${cart}]];
+		let cartDtlSqArr = [], itemCds = [], optCds = [];
+		let data;
+
+		if(cart.goodsType == "G056_S") {
+			$(".setSizeSelect").each(function() {
+				optCds.push($(this).val());
+				itemCds.push($(this).attr("data"));
+				cartDtlSqArr.push($(this).find("option:checked").attr("data"));
+			});
+
+			data = {
+				  cartSq : cart.cartSq
+				, goodsCd : cart.goodsCd
+				, goodsType : cart.goodsType
+				, cartDtlSqArr : cartDtlSqArr
+				, itemCds : itemCds
+				, optCds : optCds
+				, goodsQty : $("input[name=goodsQty]").val()
+			}
+		} else if(cart.goodsType != "G056_S" && cart.selfGoodsYn == "Y") {
+			alert("자사 일반");
+		} else {
+			alert("입점업체");
+		}
+
+		$.ajax( {
+			type: "POST",
+			url : '/cart/change/option',
+			contentType: 'application/json',
+			dataType : 'json',
+			data : JSON.stringify(data),
+			success : function(result) {
+				alert(result.message);
+				$(".closeCartOptionModal").trigger("click");
+				getCartList();
+			}
+		});
+	}
+
+	$(".closeCartOptionModal").on("click", function() {
+		$(".cartOptionModal").html("");
+	});
+</script>
+
+</div>
+<a href="#close-modal" rel="modal:close" class="close-modal closeCartOptionModal">Close</a>
+</html>

+ 69 - 34
src/main/webapp/WEB-INF/views/web/cart/cartListAjaxFormWeb.html

@@ -83,7 +83,7 @@
 										<div class="info_box">
 											<p class="od_name">
 												<a href="">
-													<span class="brand" th:text="${cart.brandNm}"></span>
+													<span class="brand" th:text="|${cart.brandEnm} ${cart.brandKnm}|"></span>
 													<span th:if="${!#strings.isEmpty(cart.delvResDt)}" class="reserv_date" th:text="|${cart.delvResDt} 배송예정|"></span>
 													<span class="name" th:text="${cart.goodsNm}"></span>
 												</a>
@@ -96,7 +96,7 @@
 											</p>
 
 											<p class="od_modify">
-												<button type="button" class="btn_opt_pop"><span>옵션/수량변경</span></button>
+												<button type="button" class="btn_opt_pop" th:onclick="|changeCartOptCd(${cart.cartSq})|"><span>옵션/수량변경</span></button>
 											</p>
 											<!-- 다다익선 적용 -->
 											<div class="od_moresale applyTmtb" th:if="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'Y') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y')}">
@@ -215,7 +215,7 @@
 										<div class="info_box">
 											<p class="od_name">
 												<a href="">
-													<span class="brand" th:text="${cart.brandNm}"></span>
+													<span class="brand" th:text="|${cart.brandEnm} ${cart.brandKnm}|"></span>
 													<span class="name" th:text="${cart.goodsNm}"></span>
 												</a>
 											</p>
@@ -226,7 +226,7 @@
 												<span class="count">수량:<em th:text="${cart.goodsQty}"></em>개</span>
 											</p>
 											<p class="od_modify">
-												<button type="button" class="btn_opt_pop"><span>옵션/수량변경</span></button>
+												<button type="button" class="btn_opt_pop" th:onclick="|changeCartOptCd(${cart.cartSq})|"><span>옵션/수량변경</span></button>
 											</p>
 											<!-- 다다익선 적용 -->
 											<div class="od_moresale applyTmtb" th:if="${(cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'Y') or (cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y')}">
@@ -385,6 +385,15 @@
 	<!-- // CONT-BODY -->
 </form>
 
+<!-- 옵션변경 팝업 -->
+<div class="modal fade od_pop opt_modify_pop" id="optModifyPop" tabindex="-1" role="dialog" aria-labelledby="optModifyLabel" aria-hidden="true"></div>
+<!-- //옵션변경 팝업 -->
+
+
+<!-- KCP PG TEST -->
+<form name="order_info" method="post" action="pp_cli_hub.jsp" >
+</form>
+
 <script th:inline="javascript">
 	let sumRealPayAmt = [[${order.sumRealPayAmt + order.totDelvFee}]];
 	let totDcAmt = [[${order.totDcAmt}]];
@@ -410,6 +419,47 @@
 
 		// 다다익선 할인 대상(미적용) 리스트
 		notApplyTmtbAreaList();
+
+		/* 세트상품 장바구니 */
+		/* let compsList = [];
+		let temp = new Object;
+		temp.goodsCd = "STYS00000042";
+		temp.itemCd = "14373746";
+		temp.optCd = "베이지110";
+		temp.goodsQty = 1;
+		temp.goodsType = "G056_S";
+		temp.cartGb = "C";
+		temp.afLinkCd = "afLinkCd";
+		temp.ithrCd = "G027_ZZZ";
+		temp.contentsLoc = "G028_YYY";
+		temp.planDtlSq = "123";
+		compsList.push(temp);
+
+		temp.goodsCd = "STYS00000042";
+		temp.itemCd = "14373769";
+		temp.optCd = "블루110";
+		temp.goodsQty = 1;
+		temp.goodsType = "G056_S";
+		temp.cartGb = "C";
+		temp.afLinkCd = "afLinkCd";
+		temp.ithrCd = "G027_ZZZ";
+		temp.contentsLoc = "G028_YYY";
+		temp.planDtlSq = "123";
+		compsList.push(temp);
+
+		temp.goodsCd = "STYS00000042";
+		temp.itemCd = "14373770";
+		temp.optCd = "아이보리110";
+		temp.goodsQty = 1;
+		temp.goodsType = "G056_S";
+		temp.cartGb = "C";
+		temp.afLinkCd = "afLinkCd";
+		temp.ithrCd = "G027_ZZZ";
+		temp.contentsLoc = "G028_YYY";
+		temp.planDtlSq = "123";
+		compsList.push(temp);
+
+		cfnAddCart(compsList); */
 	});
 
 	function notApplyTmtbAreaList() {
@@ -607,7 +657,7 @@
 				}
 			}
 		});
-	};
+	}
 
 	//다다익선 적용내역 보기
 	$(document).on('click','.shopping_bag .part_deliver .btn_moresale',function(e){
@@ -850,7 +900,7 @@
 				obj.tmtbNm = cart.qtyTmtbNm;
 				obj.currPrice = cart.currPrice;
 				obj.goodsNm = cart.goodsNm;
-				obj.brandNm = cart.brandNm;
+				obj.brandNm = cart.brandEnm + " " + cart.brandKnm;
 				obj.imgPath = order.imgPath1 + "/" + cart.sysImgNm;
 
 				notApplyQtyTmtbList.push(obj);
@@ -882,33 +932,18 @@
 	}
 
 	//옵션변경 팝업열기
-	$(document).on('click','.btn_opt_pop',function(e){
-		$("#optModifyPop").modal("show");
-		return false;
-	});
-
-	//상품옵션변경 팝업 > 수량조절
-	$(document).on('click','.opt_modify_pop .number_count .minus',function(e){
-		var $input = $(this).parent().find('input');
-		var count = parseInt($input.val()) - 1;
-		count = count < 1 ? 1 : count;
-		$input.val(count);
-		$input.change();
-		return false;
-	}).on('click','.opt_modify_pop .number_count .plus',function(e){
-		var $input = $(this).parent().find('input');
-		$input.val(parseInt($input.val()) + 1);
-		$input.change();
-		return false;
-	});
-
-	//상품옵션변경 팝업 > 컬러선택 표기
-	$(document).on('click','.opt_modify_pop .opt_color ul li a',function(e){
-		$(this).parents('.opt_color').find('li a').removeClass('on');
-		$(this).addClass('on');
-		var optColor = $('.opt_modify_pop .opt_color ul li a.on img').attr('alt');
-		$('.opt_modify_pop .opt_color .opt_header .color').text(optColor);
-		return false;
-	});
+	function changeCartOptCd(cartSq) {
+		$.ajax( {
+			type: "POST",
+			url : '/cart/goods/info',
+			dataType : 'html',
+			data : {cartSq : cartSq},
+			success : function(result) {
+				//fnChangeCartListInfo(result);
+				$("#optModifyPop").html(result);
+				$("#optModifyPop").modal("show");
+			}
+		});
+	}
 </script>
 </html>

+ 22 - 143
src/main/webapp/WEB-INF/views/web/cart/cartListFormWeb.html

@@ -253,144 +253,6 @@
 </div>
 <!-- // container -->
 
-<!-- 옵션변경 팝업 -->
-<div class="modal fade od_pop opt_modify_pop" id="optModifyPop" tabindex="-1" role="dialog" aria-labelledby="optModifyLabel" aria-hidden="true">
-    <div class="modal-dialog" role="document">
-        <div class="modal-content">
-            <div class="modal-header">
-                <h5 class="modal-title" id="optModifyLabel">옵션변경</h5>
-                <div class="prod_title">
-                    <span class="brand">버카루 BUCKROO</span>
-                    <span class="name">남성 제기장 스웨이드 자켓</span>
-                </div>
-            </div>
-            <div class="modal-body">
-                <div class="pop_cont">
-                    <div class="prod_info">
-                        <div class="prod_preview">
-                            <div class="area_pic">
-                                <ul class="pic_list">
-                                    <li><span class="thumb"><img src="/images/pc/thumb/tmp_pdDetail1.jpg" alt=""></span></li>
-                                    <li><span class="thumb"><img src="/images/pc/thumb/tmp_pdDetail2.jpg" alt=""></span></li>
-                                    <li><span class="thumb"><img src="/images/pc/thumb/tmp_pdDetail3.jpg" alt=""></span></li>
-                                    <li><span class="thumb"><img src="/images/pc/thumb/tmp_pdDetail4.jpg" alt=""></span></li>
-                                    <li><span class="thumb"><img src="/images/pc/thumb/tmp_pdDetail5.jpg" alt=""></span></li>
-                                    <li><span class="thumb"><img src="/images/pc/thumb/tmp_pdDetail6.jpg" alt=""></span></li>
-                                </ul>
-                            </div>
-                            <div class="area_order">
-                                <div class="opt_color">
-                                    <div class="opt_header">
-                                        <span class="title">컬러</span>
-                                        <span class="color">그레이</span>
-                                    </div>
-                                    <ul>
-                                        <li>
-                                            <a href="" class="on">
-                                                <img src="/images/pc/thumb/tmp_cartColor1.jpg" alt="그레이">
-                                            </a>
-                                        </li>
-                                        <li>
-                                            <a href="">
-                                                <img src="/images/pc/thumb/tmp_cartColor1.jpg" alt="베이지">
-                                            </a>
-                                        </li>
-                                        <li>
-                                            <a href="">
-                                                <img src="/images/pc/thumb/tmp_cartColor1.jpg" alt="그린">
-                                            </a>
-                                        </li>
-                                        <li>
-                                            <a href="">
-                                                <img src="/images/pc/thumb/tmp_cartColor1.jpg" alt="핑크">
-                                            </a>
-                                        </li>
-                                        <li>
-                                            <a href="">
-                                                <img src="/images/pc/thumb/tmp_cartColor1.jpg" alt="민트">
-                                            </a>
-                                        </li>
-                                        <li>
-                                            <a href="">
-                                                <img src="/images/pc/thumb/tmp_cartColor1.jpg" alt="블랙">
-                                            </a>
-                                        </li>
-                                    </ul>
-                                </div>
-                                <div class="opt_size">
-                                    <div class="opt_header">
-                                        <span class="title">사이즈</span>
-                                    </div>
-                                    <div class="form_field">
-                                        <div>
-                                            <input type="radio" name="rdi-optsize" id="rdi-optsize1" value="" checked="">
-                                            <label for="rdi-optsize1"><span>90</span></label>
-                                        </div>
-                                        <div>
-                                            <input type="radio" name="rdi-optsize" id="rdi-optsize2" value="" disabled>
-                                            <label for="rdi-optsize2"><span>95</span></label>
-                                        </div>
-                                        <div>
-                                            <input type="radio" name="rdi-optsize" id="rdi-optsize3" value="">
-                                            <label for="rdi-optsize3"><span>100</span></label>
-                                        </div>
-                                        <div>
-                                            <input type="radio" name="rdi-optsize" id="rdi-optsize4" value="">
-                                            <label for="rdi-optsize4"><span>105</span></label>
-                                        </div>
-                                        <div>
-                                            <input type="radio" name="rdi-optsize" id="rdi-optsize5" value="">
-                                            <label for="rdi-optsize5"><span>110</span></label>
-                                        </div>
-                                        <div>
-                                            <input type="radio" name="rdi-optsize" id="rdi-optsize6" value="">
-                                            <label for="rdi-optsize6"><span>115</span></label>
-                                        </div>
-                                        <div>
-                                            <input type="radio" name="rdi-optsize" id="rdi-optsize7" value="">
-                                            <label for="rdi-optsize7"><span>free</span></label>
-                                        </div>
-                                    </div>
-                                </div>
-                                <div class="opt_select">
-                                    <div class="opt_header">
-                                        <span class="title">옵션선택</span>
-                                    </div>
-                                    <div class="form_field">
-                                        <select id="">
-                                            <option value="" rel="icon-temperature">카키/95</option>
-                                            <option value="">카키/100</option>
-                                            <option value="">카키/105</option>
-                                            <option value="">카키/110</option>
-                                            <option value="">옐로우/95</option>
-                                            <option value="">옐로우/100</option>
-                                            <option value="">옐로우/105</option>
-                                            <option value="">옐로우/110</option>
-                                        </select>
-                                    </div>
-                                </div>
-                                <div class="opt_count">
-                                    <div class="opt_header">
-                                        <span class="title">수량</span>
-                                    </div>
-                                    <div class="number_count">
-                                        <span class="minus"><span class="sr-only">감소</span></span>
-                                        <input type="text" name="" maxlength="3" style='ime-mode:disabled' value="1" />
-                                        <span class="plus"><span class="sr-only">추가</span></span>
-                                    </div>
-                                </div>
-                                <div class="btn_group_block">
-                                    <button class="btn btn_dark btn_block" id=""><span>옵션변경</span></button>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
-<!-- //옵션변경 팝업 -->
 <!-- 쿠폰사용안내 팝업 -->
 <div class="modal fade od_pop cpinfo_pop" id="cpinfoPop" tabindex="-1" role="dialog" aria-labelledby="cpinfoLabel" aria-hidden="true">
     <div class="modal-dialog" role="document">
@@ -413,8 +275,6 @@
 <link rel="stylesheet" type="text/css" href="/ux/pc/css/swiper.min.css" />
 
 <script type="text/javascript">
-    /* xodud1202 수정 */
-
     $(document).ready(function() {
         // 장바구니 상품 정보 select
         getCartList();
@@ -434,10 +294,29 @@
         });
     }
 
-    /* // xodud1202 수정 */
-
-
+    //상품옵션변경 팝업 > 수량조절
+    $(document).on('click','.opt_modify_pop .number_count .minus',function(e){
+        var $input = $(this).parent().find('input');
+        var count = parseInt($input.val()) - 1;
+        count = count < 1 ? 1 : count;
+        $input.val(count);
+        $input.change();
+        return false;
+    }).on('click','.opt_modify_pop .number_count .plus',function(e){
+        var $input = $(this).parent().find('input');
+        $input.val(parseInt($input.val()) + 1);
+        $input.change();
+        return false;
+    });
 
+    //상품옵션변경 팝업 > 컬러선택 표기
+    $(document).on('click','.opt_modify_pop .opt_color ul li a',function(e){
+        $(this).parents('.opt_color').find('li a').removeClass('on');
+        $(this).addClass('on');
+        var optColor = $(this).find("img").attr('alt');
+        $(this).parent().parent().parent().find(".color").text(optColor);
+        return false;
+    });
 
     $(function(){
         //추천상품 슬라이드

+ 1 - 1
src/main/webapp/WEB-INF/views/web/customer/JoinTypeFormWeb.html

@@ -51,7 +51,7 @@
 								</a>
 							</li>
 							<li>
-								<a href="javascript:void(0)">
+								<a href="javascript:void(0)" onclick="cfnLoginYes24();">
 									<i class="ico ico_snslogin yes24"></i>
 									<span>YES24</span>
 								</a>

+ 51 - 10
src/main/webapp/WEB-INF/views/web/mypage/MypagePointFormWeb.html

@@ -64,7 +64,7 @@
 												<tr>
 													<th>사유</th>
 													<th>내용</th>
-													<th>차감</th>
+													<th id="plusMinus"></th>
 													<th>일자</th>
 												</tr>
 											</thead>
@@ -77,17 +77,55 @@
 						</div>
 					</div>
 <script th:inline="javascript">
+
 	// 전체내역 조회
 	$("#fnSetSearchFullHistory").click(function(){
 		// Class제거 추가
 		$("#fnSetSearchCollectHistory").removeClass("on");
 		$("#fnSetSearchUsedHistory").removeClass("on");
 		$("#fnSetSearchFullHistory").addClass("on");
+		$("#plusMinus").text("증감/차감");
+		
+		let data = {};
+		
+		data.searchDt = $('select[name=searchDt]').val();
 		
-		// 적립내역 + 사용내역(sum)으로 표시
+		var jsonData = JSON.stringify(data);
 		
+		$.ajax(
+				{
+					type 	 : "POST",
+					data	 : jsonData,
+					url 	 : '/mypage/allpoint/list',
+					contentType: 'application/json',
+  					dataType : 'json',
+					success  : function(result){
+						fnPointAllListInfo(result);
+					}
+				}
+		)
 	});
 	
+	function fnPointAllListInfo(result) {
+		
+		let allPointList = result.allPointList;
+		
+		let tmtbHtml = "";
+		for(let i=0; i<allPointList.length; i++){
+			let point = allPointList[i];
+			tmtbHtml +='<tr>';
+			tmtbHtml +='<td>'+ point.occurGb + '</td>';
+			tmtbHtml += '<td class="t_l pl40">'+ point.occurDtlDesc + '</td>';
+			if(point.pntAmt > 0){
+				tmtbHtml += '<td class="c_blue">'+ point.pntAmt + '</td>';
+			}else{
+				tmtbHtml += '<td class="c_primary">'+ point.pntAmt + '</td>';
+			}
+			tmtbHtml += '<td>'+ point.pntUploadDt + '</td>';
+			tmtbHtml += '</tr>';
+		}
+		$("#pointAjaxList").html(tmtbHtml);
+	}
 	
 	// 적립내역 조회
 	$("#fnSetSearchCollectHistory").click(function(){
@@ -99,6 +137,7 @@
 		// 적립내역 포인트 블루
 		$("#pntAmt").removeClass("c_primary");
 		$("#pntAmt").addClass("c_blue");
+		$("#plusMinus").text("증감");
 		
 		let data = {};
 		
@@ -137,7 +176,6 @@
 		$("#pointAjaxList").html(tmtbHtml);
 	}
 	
-	
 	// 사용내역 조회
 	$("#fnSetSearchUsedHistory").click(function(){
 		// Class제거 추가
@@ -148,6 +186,7 @@
 		// 사용내역 포인트 블루
 		$("#pntAmt").removeClass("c_blue");
 		$("#pntAmt").addClass("c_primary");
+		$("#plusMinus").text("차감");
 		
 		let data = {};
 		
@@ -172,27 +211,29 @@
 	function fnUsePointListInfo(result) {
 		
 		let usePointList = result.usePointList;
-		
+		console.log(usePointList);
 		let tmtbHtml = "";
 		for(let i=0; i<usePointList.length; i++){
-			let point = usePointList[i];
+			let usePoint = usePointList[i];
 			tmtbHtml +='<tr>';
-			tmtbHtml +='<td>'+ usePointList.occurGb + '</td>';
-			tmtbHtml += '<td class="t_l pl40">'+ usePointList.occurDtlDesc + '</td>';
-			tmtbHtml += '<td class="c_primary">'+  usePointList.pntAmt + '</td>';
-			tmtbHtml += '<td>'+ usePointList.pntUploadDt + '</td>';
+			tmtbHtml +='<td>'+ usePoint.occurGb + '</td>';
+			tmtbHtml += '<td class="t_l pl40">'+ usePoint.occurDtlDesc + '</td>';
+			tmtbHtml += '<td class="c_primary">'+  usePoint.pntAmt + '</td>';
+			tmtbHtml += '<td>'+ usePoint.pntUploadDt + '</td>';
 			tmtbHtml += '</tr>';
 		}
 		$("#pointAjaxList").html(tmtbHtml);
 	}
 
-	
 	$(document).ready(function() {
 		// 마이페이지 LNB 설정
 		fnSetMypageLnbList(5);
 		
 		// 마이페이지 location 설정
 		fnSetMypageLocation('STYLE24 포인트', '_PAGE_MYPAGE_POINT');
+		
+		// 전체내역
+		$("#fnSetSearchFullHistory").trigger('click');
 
 	});
 

+ 213 - 78
src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb.html

@@ -30,81 +30,86 @@
 			<form class="form_wrap" role="form">
 				<div class="order_list">
 					<section class="order_row">
-						<th:block th:if="${orderList}" th:each="oneData, status : ${orderList}">
-							<div class="part_deliver">
-								<div class="tbl_tit">
-									<!-- 주문일/선물일 설정 -->
-									<span class="start_t" th:unless="${oneData.giftPackYn == 'Y'}">주문일</span>
-									<span class="gift_t" th:if="${oneData.giftPackYn == 'Y'}">선물일</span>
-									<!-- //주문일/선물일 설정 -->
-	
-									<span class="order_date" th:text="${oneData.ordDt}"></span>
-	
-									<!-- 배송구분 설정 -->
-									<span class="order_label02" th:if="${oneData.shotDelv}">총알배송</span>
-									<span class="order_label01" th:if="${oneData.selfMall}">STYLE24 일반배송</span>
-									<span class="order_label01" th:if="${oneData.supplyMall}">업체직배송</span>
-									<!-- //배송구분 설정 -->
-									<a href="javascript:void(0)" class="detail_btn" th:attr="ordNo=${oneData.ordNo}" onclick="fnGoToOrderDetail(this)">주문상세보기</a>
-								</div>
-								<th:block th:if="${oneData.orderList}" th:each="order, status : ${oneData.orderList}">
-									<div class="tbl type2">
-										<table id="returnList">
-											<colgroup>
-												<col width="1020">
-												<col width="180">
-											</colgroup>
-											<tbody>
-											<th:block th:if="${order.ordDtlList}" th:each="ordDtl, status : ${order.ordDtlList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
-												<input type="hidden" name="ordDtlNo" th:value="${ordDtl.ordDtlNo}"/>
-												<input type="hidden" name="ordDtlStat" th:value="${ordDtl.ordDtlStat}"/>
-												<input type="hidden" name="reviewSq" th:value="${ordDtl.reviewSq}"/>
-												<tr>
-													<td>
-														<div class="info_item">
-															<div class="thumb_box">
-																<a href="">
-																	<img th:src="${imageUrl + '/' + ordDtl.sysImgNm}" width="100%" alt="">
-																</a>
-															</div>
-															<div class="info_box">
-																<p class="od_name">
-																	<a href="">
-																		<span class="brand" th:text="${ordDtl.brandNm}"></span>
-																		<span class="name" th:text="${ordDtl.goodsNm}"></span>
-																	</a>
-																</p>
-																<p class="od_opt">
-																	<span class="option"><em th:text="${ordDtl.optCd1}"></em><em th:text="${ordDtl.optCd2}"></em></span>
-																	<span class="count">수량 <em th:text="${ordDtl.ordQty}"></em>개</span>
-																</p>
-															</div>
-															<div class="info_calc">
-																<p class="price">
-																	<span class="selling_price" th:text="|${#numbers.formatInteger(ordDtl.ordAmt, 1, 'COMMA')}원|"></span>
-																</p>
-																<p class="point"><span th:text="${#numbers.formatInteger(ordDtl.savePntAmt, 1, 'COMMA')}"></span>p</p>
-															</div>
+						<div class="part_deliver">
+							<div class="tbl_tit">
+								<!-- 주문일/선물일 설정 -->
+								<span class="start_t" th:unless="${returnList.oneData.giftPackYn == 'Y'}">주문일</span>
+								<span class="gift_t" th:if="${returnList.oneData.giftPackYn == 'Y'}">선물일</span>
+								<!-- //주문일/선물일 설정 -->
+
+								<span class="order_date" th:text="${returnList.oneData.ordDt}"></span>
+
+								<!-- 배송구분 설정 -->
+								<span class="order_label02" th:if="${returnList.shotDelv}">총알배송</span>
+								<span class="order_label01" th:if="${returnList.selfMall}">STYLE24 일반배송</span>
+								<span class="order_label01" th:if="${returnList.supplyMall}">업체직배송</span>
+								<!-- //배송구분 설정 -->
+								<a href="javascript:void(0)" class="detail_btn" th:attr="ordNo=${returnList.oneData.ordNo}" onclick="fnGoToOrderDetail(this)">주문상세보기</a>
+							</div>
+							<div class="tbl type2">
+								<table id="returnList">
+									<colgroup>
+										<col width="1020">
+										<col width="180">
+									</colgroup>
+									<tbody>
+									<th:block th:if="${returnList.returnList}" th:each="return, status : ${returnList.returnList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+										<tr>
+											<td>
+												<div class="info_item">
+													<div class="thumb_box">
+														<a href="">
+															<img th:src="${imageUrl + '/' + return.sysImgNm}" width="100%" alt="">
+														</a>
+													</div>
+													<div class="info_box">
+														<p class="od_name">
+															<a href="">
+																<span class="brand" th:text="${return.brandNm}"></span>
+																<span class="name" th:text="${return.goodsNm}"></span>
+															</a>
+														</p>
+														<p class="od_opt">
+															<span class="option"><em th:text="${return.optCd1}"></em><em th:text="${return.optCd2}"></em></span>
+															<span class="count">수량 <em th:text="${return.ordQty}"></em>개</span>
+														</p>
+													</div>
+													<div class="info_calc">
+														<p class="price">
+															<span class="selling_price" th:text="|${#numbers.formatInteger(return.ordAmt, 1, 'COMMA')}원|"></span>
+														</p>
+														<p class="point"><span th:text="${#numbers.formatInteger(return.savePntAmt, 1, 'COMMA')}"></span>p</p>
+													</div>
+												</div>
+											</td>
+											<td class="cnt_sel">
+												<span class="cnt_t">수량</span>
+												<div class="form_field">
+													<div class="select_custom type1">
+														<div class="combo">
+															<input type="hidden" name="chgQty" value="0" th:attr="ordDtlNo=${return.ordDtlNo}, ordCanChgQty=${return.ordCanChgQty}"/>
+															<div class="select">선택</div>
+															<ul class="list" style="width:100px; margin:0 auto">
+																<li class="selected" value="0">선택</li>
+																<li th:if="${return.ordCanChgQty > 0}" th:each="num : ${#numbers.sequence(1,return.ordCanChgQty)}" th:value="${num}" th:text="${num}" onclick="fnChangeQty(this);"></li>
+															</ul>
 														</div>
-													</td>
-													<td class="cnt_sel">
-														<span class="cnt_t">수량</span>
-														<select class="select_dress" name="chgQty" onchange="fnChangeQty();">
-															<option value="">선택</option>
-															<option th:if="${ordDtl.ordQty > 0}" th:each="num : ${#numbers.sequence(1,ordDtl.ordQty)}" th:value="${num}" th:text="${num}"></option>
-														</select>
-													</td>
-												</tr>
-											</th:block>
-											</tbody>
-										</table>
-									</div>
-								</th:block>
-								<div class="order_confirm">
-									<p class="cf_txt cf_desc c_primary">반품하실 상품의 수량을 선택하신 후 반품 신청을 하실 수 있습니다.</p>
-								</div>
+													</div>
+												</div>
+<!--												<select class="select_dress" name="chgQty" onchange="fnChangeQty();">-->
+<!--													<option value="">선택</option>-->
+<!--													<option th:if="${return.ordQty > 0}" th:each="num : ${#numbers.sequence(1,return.ordQty)}" th:value="${num}" th:text="${num}"></option>-->
+<!--												</select>-->
+											</td>
+										</tr>
+									</th:block>
+									</tbody>
+								</table>
+							</div>
+							<div class="order_confirm">
+								<p class="cf_txt cf_desc c_primary">반품하실 상품의 수량을 선택하신 후 반품 신청을 하실 수 있습니다.</p>
 							</div>
-						</th:block>
+						</div>
 					</section>
 					<section class="order_row">
 						<div class="tbl_tit">
@@ -118,10 +123,17 @@
 								<tbody>
 								<tr>
 									<td>
-										<select id="mounth" name="chgReason" onchange="fnChangeReason(this);">
-											<option value="">반품 사유를 선택하세요</option>
-											<option th:if="${returnReason}" th:each="oneData, status : ${returnReason}" th:value="${oneData.cd}" th:text="${oneData.cdNm}"></option>
-										</select>
+										<div class="form_field">
+											<div class="select_custom type1">
+												<div class="combo">
+													<div class="select" name="chgReason">반품 사유를 선택하세요</div>
+													<ul class="list" style="width:400px">
+														<li class="selected" value="">반품 사유를 선택하세요</li>
+														<li th:if="${returnReason}" th:each="oneData, status : ${returnReason}" th:value="${oneData.cd}" th:text="${oneData.cdNm}" onclick="fnChangeReason(this);"></li>
+													</ul>
+												</div>
+											</div>
+										</div>
 									</td>
 								</tr>
 								<tr>
@@ -303,12 +315,23 @@
 	</div>
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
+	let returnList = [[${returnList.returnList}]];
+	let usedGiftCardInfo = [[${usedGiftCardInfo}]];
+	let usedPointInfo = [[${usedPointInfo}]];
+	let refundPoint = 0;
+	let refundGiftCard = 0;
+
 	$(document).ready(function() {
 		// 마이페이지 LNB 설정
 		fnSetMypageLnbList(2);
 		
 		// 마이페이지 location 설정
 		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRS_LIST', '반품 신청');
+		
+		// 셀렉트박스 활성화
+		$('.select_custom.type1').each(function(index) {
+			var selecter01 = new sCombo($(this));
+		});
 	});
 	
 	// 반품 처리
@@ -319,14 +342,126 @@
 	
 	// 반품 수량 변경 이벤트 처리
 	var fnChangeQty = function(param) {
+		let url = '/mypage/cancel/refund/amt/calculate';
+		$(param).parent().parent().find('input[name=chgQty]').val($(param).val());
+		
+		let chgReason = $('div[name=chgReason]').parent().find('li.selected').attr('value');
+		
+		if (!gagajf.isNull(chgReason)) {
+			let returnRequestList = [];
+
+			// 반품 수량 설정
+			let chgQtyArr = [];
+			let ordDtlNoArr = [];
+			let ordCanChgQtyArr = [];
+			$.each($('input[name=chgQty]'), function(idx, item) {
+				let chgQty = $(item).val();
+				let ordDtlNo = $(item).attr('ordDtlNo');
+				let ordCanChgQty = $(item).attr('ordCanChgQty');
+				
+				console.log('chgQty >>> '+chgQty);
+				console.log('ordDtlNo >>> '+ordDtlNo);
+				console.log('ordCanChgQty >>> '+ordCanChgQty);
+
+				chgQtyArr.push(Number(chgQty));
+				ordDtlNoArr.push(Number(ordDtlNo));
+				ordCanChgQtyArr.push(Number(ordCanChgQty));
+			});
+			
+			// 환불포인트, 환불상품권 금액 계산
+			let refundPoint = fnCalculatePoint(chgQtyArr, ordDtlNoArr, ordCanChgQtyArr);
+			let refundGiftCard = fnCalculateGiftCard(chgQtyArr, ordDtlNoArr, ordCanChgQtyArr);
+
+			$.each(returnList, function(idx, item) {
+				let index = ordDtlNoArr.indexOf(item.ordDtlNo);
+				item.ordCanChgQty = chgQtyArr[index];
+
+				returnRequestList.push(item);
+			})
+			
+			let jsonData = JSON.stringify(returnRequestList);
+			
+			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+				let spanCnclRtnAmt = Number(result.spanCnclRtnAmt);
+				let sumDeliveryFee = Number(result.sumDeliveryFee);
+				let spanTotDeliveryFee = Number(result.spanTotDeliveryFee);
+				let spanCpnDcAmt = Number(result.spanCpnDcAmt);
+				let spanTmtbDcAmt = Number(result.spanTmtbDcAmt);
+				let spanPrePntDcAmt = Number(result.spanPrePntDcAmt);
+				let spanRefundAmt = Number(result.spanRefundAmt);
+				
+				let goodsCancelAmt = spanCnclRtnAmt;										// 상품취소금액
+				let deliveryFee = sumDeliveryFee - spanTotDeliveryFee;						// 배송비
+				let deductDcAmt = 0 - spanCpnDcAmt - spanTmtbDcAmt - spanPrePntDcAmt;		// 할인금액 차감(쿠폰+다다익선+선포인트)
+				let refundPayAmt = spanRefundAmt;											// 결제금액 환불
+				let returnAmt = refundPayAmt + refundPoint + refundGiftCard;				// 환불예정금액
+
+				// 금액 설정
+				$('#returnAmt').text(returnAmt.addComma());
+				$('#goodsCancelAmt').text(goodsCancelAmt.addComma());
+				$('#deliveryFee').text(deliveryFee.addComma());
+				$('#deductDcAmt').text(deductDcAmt.addComma());
+				$('#refundPayAmt').text(refundPayAmt.addComma());
+				$('#refundPoint').text(refundPoint.addComma());
+				$('#refundGiftCard').text(refundGiftCard.addComma());
+				console.log(result);
+			})
+		}
+	}
+	
+	// 반품 사유 변경 이벤트
+	var fnChangeReason = function(param) {
 		// TODO
-		// 반품 수량 변경 처리
+		// 반품 사유 변경 처리
 	}
 	
+	// 반품 방식 선택 이벤트
 	var fnChangeWdGb = function() {
 		let wdGb = $('input[name=wdGb]:radio:checked').val();
 		console.log(wdGb);
 	}
+
+	// 환불 포인트 계산
+	var fnCalculatePoint = function(chgQtyArr, ordDtlNoArr, ordCanChgQtyArr) {
+		let refundPoint = 0;
+
+		$.each(usedPointInfo, function(idx, item) {
+			let index = ordDtlNoArr.indexOf(item.ordDtlNo);
+			let chgQty = chgQtyArr[index];
+			let ordCanChgQty = ordCanChgQtyArr[index];
+			
+			if (chgQty > 0) {
+				if (chgQty == ordCanChgQty) {
+					refundPoint += item.pntAmt;
+				} else {
+					refundPoint += item.pntAmt * (chgQty / ordCanChgQty);
+				}
+			}
+		});
+		
+		return refundPoint;
+	}
+	
+	// 환불 상품권 계산
+	var fnCalculateGiftCard = function(chgQtyArr, ordDtlNoArr, ordCanChgQtyArr) {
+		let refundGiftCard = 0;
+		
+		$.each(usedGiftCardInfo, function(idx, item) {
+			let index = ordDtlNoArr.indexOf(item.ordDtlNo);
+			let chgQty = chgQtyArr[index];
+			let ordCanChgQty = ordCanChgQtyArr[index];
+			
+			if (chgQty > 0) {
+				if (chgQty == ordCanChgQty) {
+					refundGiftCard += item.gfcdAmt;
+				} else {
+					refundGiftCard += item.pntAmt * (chgQty / ordCanChgQty);
+				}
+			}
+		});
+		
+		return refundGiftCard;
+	}
 </script>
 
 </th:block>

+ 495 - 158
src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html

@@ -23,6 +23,81 @@
 <script type="text/javascript" src="/ux/pc/js/slick.min.js"></script>
 <script type="text/javascript" src="/ux/pc/js/jquery-ui.js"></script>
 
+<!-- xodud1202 -->
+	<script type="text/javascript">
+		/****************************************************************/
+		/* m_Completepayment  설명                                      */
+		/****************************************************************/
+		/* 인증완료시 재귀 함수                                         */
+		/* 해당 함수명은 절대 변경하면 안됩니다.                        */
+		/* 해당 함수의 위치는 payplus.js 보다먼저 선언되어여 합니다.    */
+		/* Web 방식의 경우 리턴 값이 form 으로 넘어옴                   */
+		/****************************************************************/
+		function m_Completepayment( FormOrJson, closeEvent )
+		{
+			var frm = document.order_info;
+
+			/********************************************************************/
+			/* FormOrJson은 가맹점 임의 활용 금지                               */
+			/* frm 값에 FormOrJson 값이 설정 됨 frm 값으로 활용 하셔야 됩니다.  */
+			/* FormOrJson 값을 활용 하시려면 기술지원팀으로 문의바랍니다.       */
+			/********************************************************************/
+			GetField( frm, FormOrJson );
+
+
+			if( frm.res_cd.value == "0000" )
+			{
+				alert("결제 승인 요청 전,\n\n반드시 결제창에서 고객님이 결제 인증 완료 후\n\n리턴 받은 ordr_chk 와 업체 측 주문정보를\n\n다시 한번 검증 후 결제 승인 요청하시기 바랍니다."); //업체 연동 시 필수 확인 사항.
+				/*
+					가맹점 리턴값 처리 영역
+				*/
+
+				frm.submit();
+			} else {
+				alert( "[" + frm.res_cd.value + "] " + frm.res_msg.value );
+				closeEvent();
+			}
+		}
+	</script>
+
+	<script type="text/javascript" th:src="${@environment.getProperty('pg.kcp.js.url')}" src=""></script>
+
+	<script type="text/javascript">
+		/* 표준웹 실행 */
+		function jsf__pay( form ) {
+			try {
+				KCP_Pay_Execute( form );
+			} catch (e) {
+				/* IE 에서 결제 정상종료시 throw로 스크립트 종료 */
+			}
+		}
+
+		$(document).on("click", "#buyBtn", function() {
+			$.ajax( {
+				type: "POST",
+				url : '/order/create/order',
+				dataType : 'html',
+				data : {cartSq : 8},
+				success : function(result) {
+					$("#order_info").html(result);
+					jsf__pay(document.order_info);
+				}
+			});
+		});
+	</script>
+
+	<form id="order_info" name="order_info" method="post" action="/order/pay/result/response" >
+		<input type="button" id="buyBtn" value="테스트버튼" style="width:200px; height:200px;"/>
+	</form>
+
+<!-- // xodud1202 -->
+
+
+<!-- card007 -->
+
+<!-- // card007 -->
+
+
 <!--  container -->
 <form id="payForm" name="payForm">
 	<input type="hidden" name="delvMemo" th:value="${deliveryAddrInfo.delvMemo}">
@@ -70,7 +145,9 @@
 								<!-- -->
 								<div class="foldGroup">
 									<ul>
-										<li class="fold_mbinfo">
+									
+										
+										<li class="fold_mbinfo" id="custemerInfo">
 											<!-- 주문고객정보 -->
 											<div class="fold_head">
 												<a href="javascript:void(0)">
@@ -118,7 +195,8 @@
 												</div>
 											</div> <!-- //주문고객정보 -->
 										</li>
-										<li class="fold_mbinfo">
+									
+										<li class="fold_mbinfo" id="deliveryAddrInfo">
 											<!-- 배송지정보 -->
 											<div class="fold_head">
 												<a href="javascript:void(0)">
@@ -338,8 +416,8 @@
 															<dd>
 																<div class="form_field">
 																	<div class="input_wrap">
-																		<input type="text" class="form_control" maxlength="13" placeholder="할인코드를 입력해주세요.">
-																		<button type="button" class="btn btn_dark">적용</button>
+																		<input type="text" id="serialCpnNm" class="form_control" maxlength="13" placeholder="할인코드를 입력해주세요.">
+																		<button type="button" class="btn btn_dark" onclick="serialCpnApply()">적용</button>
 																	</div>
 																</div>
 															</dd>
@@ -347,7 +425,7 @@
 														<div>
 															<dt>할인쿠폰</dt>
 															<dd>
-																<a href="" class="btn_coupon_toggle">할인쿠폰 <span>3장</span>적용</a>
+																<a href="javascript:void(0);" class="btn_coupon_toggle">할인쿠폰 <span id="cpnApplyCnt"></span>적용</a>
 																<div class="coupon_list">
 																	<ul>
 																		<!--  상품쿠폰 -->
@@ -376,6 +454,7 @@
 																						<div class="form_field">
 																							<div class="select_custom type1">
 																								<div class="combo">
+																									<input type="hidden" name="cpnType" value="goodsCpn"/>
 																									<input type="hidden" name="cpnCartSq" th:value="${goods.cartSq}"/>
 																									<input type="hidden" name="custCpnSq" value="0"/>
 																									<input type="hidden" name="cpnDcAmt" value="0"/>
@@ -407,6 +486,7 @@
 																					<div class="form_field">
 																						<div class="select_custom type1">
 																							<div class="combo">
+																								<input type="hidden" name="cpnType" value="cartCpn"/>
 																								<input type="hidden" name="custCpnSq" value="0"/>
 																								<input type="hidden" name="cpnDcAmt" value="0"/>
 																								
@@ -416,8 +496,10 @@
 																									<th:block th:each="cartCpn, k : ${cartCpnList}">
 																										<li th:value="${cartCpn.custCpnSq}" th:data="${cartCpn.cpnDcAmt}">
 																											<th:block th:text="${cartCpn.cpnNm}"></th:block>
+																											<input type="hidden" name="dcWay" th:value="${cartCpn.dcWay}"/>
+																											<input type="hidden" name="dcVal" th:value="${cartCpn.dcVal}"/>
 																											<th:block th:each="cartCpnCartSq, kokok : ${cartCpn.cartCpnCartSqArr}"> 
-																												<input type="text" name="cartCpnCartSq" th:value="${cartCpnCartSq}" />
+																												<input type="hidden" name="cartCpnCartSq" th:value="${cartCpnCartSq}" />
 																											</th:block>
 																										</li>
 																									</th:block>
@@ -441,14 +523,16 @@
 																					<div class="form_field">
 																						<div class="select_custom type1">
 																							<div class="combo">
+																								<input type="hidden" name="cpnType" value="delvCpn"/>
 																								<input type="hidden" name="custCpnSq" value="0"/>
 																								<input type="hidden" name="cpnDcAmt" value="0"/>
+																								<input type="hidden" name="delvFeeCd" value="0"/>
 																								
 																								<div class="select" value="0">선택없음</div>
 																								<ul class="list">
 																									<li value="0">선택없음</li>
 																									<th:block th:each="delvCpn, k : ${delvCpnList}">
-																										<li th:value="${delvCpn.custCpnSq}" th:data="${delvCpn.cpnDcAmt}" th:text="${delvCpn.cpnNm}"></li>
+																										<li th:value="${delvCpn.custCpnSq}" th:data="${delvCpn.cpnDcAmt}" th:delvfeecd="${delvCpn.delvFeeCd}" th:text="${delvCpn.cpnNm}"></li>
 																									</th:block>
 																								</ul>
 																							</div>
@@ -469,77 +553,84 @@
 													</dl>
 												</div>
 												
-												<div class="area_selpoint">
-													<dl>
-														<th:block th:if="${prePntDcAmt} > 0">
-															<div>
-																<dt>선 포인트 사용</dt>
-																<dd>
-																	<div class="form_field">
-																		<div>
-																			<input type="radio" name="rdi-beforpoint" id="rdi-beforpoint1"> 
-																			<label for="rdi-beforpoint1"><span>사용 안함</span></label>
-																		</div>
-																		<div>
-																			<input type="radio" name="rdi-beforpoint" id="rdi-beforpoint2"> 
-																			<label for="rdi-beforpoint2"><span>사용함</span></label> 
-																			<span class="remain_point" th:text="|사용가능 포인트 : ${#numbers.formatInteger(prePntDcAmt, 1, 'COMMA')} P|"></span>
-																		</div>
-																	</div>
-																</dd>
-															</div>
-														</th:block>
-														<div>
-															<dt>
-																<span class="mid">스타일 포인트</span>
-															</dt>
-															<dd>
-																<div class="form_field">
-																	<!-- 스타일 포인트 3만원 이상 결제시 노출 -->
-																	<th:block th:if="${goodsSumAmt} >= 30000">
-																		<div class="input_wrap">
-																			<input type="text" class="form_control" maxlength="" placeholder="사용할 포인트를 입력해주세요.">
-																			<button type="button" class="btn btn_dark">적용</button>
+												<!-- 선포인트금액, 포인트금액, 상품권금액 0보다 클때 적용 -->
+												<th:block th:if="${prePntDcAmt} > 0 or ${rmPntAmt} > 0 or ${rmGfcdAmt} > 0">
+													<div class="area_selpoint">
+														<dl>
+															<th:block th:if="${prePntDcAmt} > 0">
+																<div>
+																	<dt>선 포인트 사용</dt>
+																	<dd>
+																		<div class="form_field">
+																			<div>
+																				<input type="radio" name="rdi-beforpoint" id="rdi-beforpoint1"> 
+																				<label for="rdi-beforpoint1"><span>사용 안함</span></label>
+																			</div>
+																			<div>
+																				<input type="radio" name="rdi-beforpoint" id="rdi-beforpoint2"> 
+																				<label for="rdi-beforpoint2"><span>사용함</span></label> 
+																				<span class="remain_point" th:text="|사용가능 포인트 : ${#numbers.formatInteger(prePntDcAmt, 1, 'COMMA')} P|"></span>
+																			</div>
 																		</div>
-																	</th:block>
-																	<!-- 스타일 포인트 3만원 이상 결제시 노출 -->
-																	
-																	<!-- 스타일 포인트 3만원 미만 결제시 노출 -->
-																	<th:block th:if="${goodsSumAmt} < 30000">
-																		<div class="input_wrap">
-																			<input type="text" class="form_control" maxlength="" placeholder="3만원 이상 결제시에만 포인트 사용이 가능합니다." disabled>
+																	</dd>
+																</div>
+															</th:block>
+															<th:block th:if="${rmPntAmt} > 0">
+																<div>
+																	<dt>
+																		<span class="mid">스타일 포인트</span>
+																	</dt>
+																	<dd>
+																		<div class="form_field">
+																			<!-- 스타일 포인트 3만원 이상 결제시 노출 -->
+																			<th:block th:if="${orgGoodsSumAmt} >= 30000">
+																				<div class="input_wrap">
+																					<input type="text" class="form_control" maxlength="" placeholder="사용할 포인트를 입력해주세요.">
+																					<button type="button" class="btn btn_dark">적용</button>
+																				</div>
+																				<!-- //스타일 포인트 3만원 미만 결제시 노출 -->
+																				<p><span class="remain_point" th:text="|보유 : ${#numbers.formatInteger(rmPntAmt, 1, 'COMMA')} P|"></span>(결제금액의 최대 40%까지 사용가능)</p>
+																			</th:block>
+																			<!-- 스타일 포인트 3만원 이상 결제시 노출 -->
+																			
+																			<!-- 스타일 포인트 3만원 미만 결제시 노출 -->
+																			<th:block th:if="${orgGoodsSumAmt} < 30000">
+																				<div class="input_wrap">
+																					<input type="text" class="form_control" maxlength="" placeholder="3만원 이상 결제시에만 포인트 사용이 가능합니다." disabled>
+																				</div>
+																			</th:block>
 																		</div>
-																		<!-- //스타일 포인트 3만원 미만 결제시 노출 -->
-																		<p><span class="remain_point" th:text="|보유 : ${#numbers.formatInteger(rmPntAmt, 1, 'COMMA')} P|"></span>(결제금액의 최대 40%까지 사용가능)</p>
-																	</th:block>
+																	</dd>
 																</div>
-															</dd>
-														</div>
-														<div>
-															<dt>
-																<span class="mid">상품권</span>
-															</dt>
-															<dd>
-																<div class="form_field">
-																	<div class="input_wrap">
-																		<input type="text" class="form_control" maxlength="" placeholder="사용할 금액을 입력해주세요.">
-																		<button type="button" class="btn btn_dark">적용</button>
-																	</div>
-																	<p><span class="remain_point" th:text="|보유 : ${#numbers.formatInteger(rmGfcdAmt, 1, 'COMMA')} 원|"></span></p>
-																	<div class="agree_receipt">
-																		<input id="chk-receipt" type="checkbox"> 
-																		<label for="chk-receipt"><span>상품권 현금영수증 신청</span></label>
-																		<div class="info_box">
+															</th:block>
+															<th:block th:if="${rmGfcdAmt} > 0">
+																<div>
+																	<dt>
+																		<span class="mid">상품권</span>
+																	</dt>
+																	<dd>
+																		<div class="form_field">
 																			<div class="input_wrap">
-																				<input type="text" class="form_control" maxlength="11" placeholder="">
+																				<input type="text" class="form_control" maxlength="" placeholder="사용할 금액을 입력해주세요.">
+																				<button type="button" class="btn btn_dark">적용</button>
+																			</div>
+																			<p><span class="remain_point" th:text="|보유 : ${#numbers.formatInteger(rmGfcdAmt, 1, 'COMMA')} 원|"></span></p>
+																			<div class="agree_receipt">
+																				<input id="chk-receipt" type="checkbox"> 
+																				<label for="chk-receipt"><span>상품권 현금영수증 신청</span></label>
+																				<div class="info_box">
+																					<div class="input_wrap">
+																						<input type="text" class="form_control" maxlength="11" placeholder="">
+																					</div>
+																				</div>
 																			</div>
 																		</div>
-																	</div>
+																	</dd>
 																</div>
-															</dd>
-														</div>
-													</dl>
-												</div>
+															</th:block>
+														</dl>
+													</div>
+												</th:block>
 											</div> <!-- //할인/혜택 사용 -->
 										</li>
 										<li class="fold_paymethod">
@@ -836,32 +927,34 @@
 												<div class="gd_list">
 													<th:block th:each="goods, i : ${delvAllCart}">
 														<div class="item_gd">
-															<input type="text" name="cartSq" 			th:value="${goods.cartSq}"/>
-															<input type="text" name="cpn1CpnSq" 		th:value="${goods.cpn1CpnSq}"/>
-															<input type="text" name="cpn1DcAmt" 		th:value="${goods.orgCurrPrice} - ${goods.currPrice}"/>
+															<input type="hidden" name="cartSq" 			th:value="${goods.cartSq}"/>
+															<input type="hidden" name="currPrice"		th:value="${goods.currPrice}"/>
+															
+															<input type="hidden" name="cpn1CpnSq" 		th:value="${goods.cpn1CpnSq}"/>
+															<input type="hidden" name="cpn1DcAmt" 		th:value="${goods.orgCurrPrice} - ${goods.currPrice}"/>
 															
 															<th:block th:if="${goods.applyQtySectionYn} == 'Y' and ${goods.qtyTmtbSq} > 0">
-																<input type="text" name="tmtb1Sq" 		th:value="${goods.qtyTmtbSq}"/>
-																<input type="text" name="tmtb1DcAmt" 	th:value="${goods.tmtb1DcAmt}"/>
+																<input type="hidden" name="tmtb1Sq" 	th:value="${goods.qtyTmtbSq}"/>
+																<input type="hidden" name="tmtb1DcAmt" 	th:value="${goods.tmtb1DcAmt}"/>
 															</th:block>
 															<th:block th:if="${goods.applyQtySectionYn} != 'Y'">
-																<input type="text" name="tmtb1Sq" 		value="0"/>
-																<input type="text" name="tmtb1DcAmt" 	value="0"/>
+																<input type="hidden" name="tmtb1Sq" 	value="0"/>
+																<input type="hidden" name="tmtb1DcAmt" 	value="0"/>
 															</th:block>
 															
 															<th:block th:if="${goods.applyAmtSectionYn} == 'Y' and ${goods.amtTmtbSq} > 0">
-																<input type="text" name="tmtb2Sq" 		th:value="${goods.amtTmtbSq}"/>
-																<input type="text" name="tmtb2DcAmt" 	th:value="${goods.tmtb2DcAmt}"/>
+																<input type="hidden" name="tmtb2Sq" 	th:value="${goods.amtTmtbSq}"/>
+																<input type="hidden" name="tmtb2DcAmt" 	th:value="${goods.tmtb2DcAmt}"/>
 															</th:block>
 															<th:block th:if="${goods.applyAmtSectionYn} != 'Y'">
-																<input type="text" name="tmtb2Sq" 		value="0"/>
-																<input type="text" name="tmtb2DcAmt" 	value="0"/>
+																<input type="hidden" name="tmtb2Sq" 	value="0"/>
+																<input type="hidden" name="tmtb2DcAmt" 	value="0"/>
 															</th:block>
 															
-															<input type="text" name="goodsCpnSq" 		value=""/>
-															<input type="text" name="goodsCpnDcAmt" 	value=""/>
-															<input type="text" name="cartCpnSq" 		value=""/>
-															<input type="text" name="cartCpnDcAmt" 		value=""/>
+															<input type="hidden" name="goodsCpnSq" 		value=""/>
+															<input type="hidden" name="goodsCpnDcAmt" 	value=""/>
+															<input type="hidden" name="cartCpnSq" 		value=""/>
+															<input type="hidden" name="cartCpnDcAmt" 	value=""/>
 															
 															<figure>
 																<span class="thumb"><img src="/images/pc/thumb/tmp_odSide1.jpg" alt=""></span>
@@ -894,36 +987,59 @@
 								<div class="od_amount_box">
 									<dl>
 										<div>
+											<input type="hidden" name="goodsSumAmt" th:value="${orgGoodsSumAmt}"/>
 											<dt>상품금액</dt>
-											<dd id="goodsSumAmt" th:text="|${#numbers.formatInteger(goodsSumAmt, 1, 'COMMA')}원|"></dd>
+											<dd id="goodsSumAmt" th:text="|${#numbers.formatInteger(orgGoodsSumAmt, 1, 'COMMA')}원|"></dd>
 										</div>
 										<div>
+											<input type="hidden" name="delvSumAmt" th:value="${sumDelvFee}"/>
 											<dt>배송비</dt>
 											<dd id="delvSumAmt" th:text="|${#numbers.formatInteger(sumDelvFee, 1, 'COMMA')}원|"></dd>
 										</div>
 										<div>
+											<input type="hidden" name="cpn1DcSumAmt" th:value="${cpn1DcSumAmt}"/>
 											<dt>할인금액</dt>
-											<dd><span class="disc_amount" id="goodsDcSumAmt"></span></dd>
+											<th:block th:if="${cpn1DcSumAmt} > 0">
+												<dd><span class="disc_amount" id="cpn1DcSumAmt" th:text="|-${#numbers.formatInteger(cpn1DcSumAmt, 1, 'COMMA')}원|"></span></dd>
+											</th:block>
+											<th:block th:if="${cpn1DcSumAmt} < 1">
+												<dd><span class="disc_amount" id="cpn1DcSumAmt" th:text="|${#numbers.formatInteger(cpn1DcSumAmt, 1, 'COMMA')}원|"></span></dd>
+											</th:block>
 										</div>
 										<div>
+											<input type="hidden" name="tmtbDcSumAmt" th:value="${tmtbDcSumAmt}"/>
 											<dt>다다익선할인금액</dt>
-											<dd><span class="disc_amount" id="tmtbDcSumAmt" th:text="|${#numbers.formatInteger(tmtbDcSumAmt, 1, 'COMMA')}원|"></span></dd>
+											<th:block th:if="${tmtbDcSumAmt} > 0">
+												<dd><span class="disc_amount" id="tmtbDcSumAmt" th:text="|-${#numbers.formatInteger(tmtbDcSumAmt, 1, 'COMMA')}원|"></span></dd>
+											</th:block>
+											<th:block th:if="${tmtbDcSumAmt} < 1">
+												<dd><span class="disc_amount" id="tmtbDcSumAmt" th:text="|${#numbers.formatInteger(tmtbDcSumAmt, 1, 'COMMA')}원|"></span></dd>
+											</th:block>
 										</div>
 										<div>
+											<input type="hidden" name="couponDcSumAmt" value="0"/>
 											<dt>쿠폰할인금액</dt>
 											<dd><span class="disc_amount" id="couponDcSumAmt"></span></dd>
 										</div>
 										<div>
+											<input type="hidden" name="prePntDcAmt" th:value="${prePntDcAmt}"/>
 											<dt>선포인트 사용</dt>
-											<dd><span class="disc_amount" id="prePntDcSumAmt"></span></dd>
+											<th:block th:if="${prePntDcAmt} > 0">
+												<dd><span class="disc_amount" id="prePntDcSumAmt" th:text="|-${#numbers.formatInteger(prePntDcAmt, 1, 'COMMA')}원|"></span></dd>
+											</th:block>
+											<th:block th:if="${prePntDcAmt} < 1">
+												<dd><span class="disc_amount" id="prePntDcSumAmt" th:text="|${#numbers.formatInteger(prePntDcAmt, 1, 'COMMA')}원|"></span></dd>
+											</th:block>
 										</div>
 										<div>
+											<input type="hidden" name="pntDcAmt" value="0"/>
 											<dt>포인트 사용</dt>
-											<dd><span class="disc_amount" id="pntDcSumAmt"></span></dd>
+											<dd><span class="disc_amount" id="pntDcAmt">0원</span></dd>
 										</div>
 										<div>
+											<input type="hidden" name="gfcdUseAmt" value="0"/>
 											<dt>상품권 사용</dt>
-											<dd><span class="disc_amount" id="gfcdUseSumAmt"></span></dd>
+											<dd><span class="disc_amount" id="gfcdUseSumAmt">0원</span></dd>
 										</div>
 									</dl>
 								</div>
@@ -931,11 +1047,12 @@
 									<dl>
 										<dt>총 결제 예정 금액</dt>
 										<dd data-weight="price" data-font="lato">
-											<span>3,546,200</span>원
+											<span id="realOrdAmt"></span>원
 										</dd>
 									</dl>
-									<p class="info_point">
-										스타일 포인트 <span class="save_point">3,500 P</span> 적립예정
+									<p class="info_point">스타일 포인트 
+										<input type="hidden" name="savePntSumAmt" th:value="${savePntSumAmt}"/>
+										<span class="save_point" id="savePntSumAmt" th:text="|${#numbers.formatInteger(savePntSumAmt, 1, 'COMMA')}P|"></span> 적립예정
 									</p>
 								</div>
 							</div>
@@ -1176,6 +1293,8 @@ $(document).ready( function() {
 	var resCnt 				= [[${resCnt}]];				// 자사 예약 배송건수
 	var delvCnt 			= [[${delvCnt}]];				// 입전 일반 배송건수
 	var shotDelvYn			= [[${shotDelvYn}]];			// 총알배송여부
+	var orgSumDelvFee		= [[${sumDelvFee}]];			// 최초배송비합계
+	var prePntDcAmt			= [[${prePntDcAmt}]];			// 선포인트사용가능금액
 	
 	// 할인관련정보 변수선언
 	var freegiftList		= [[${freegiftList}]];			// 사은품 프로모션 목록
@@ -1236,22 +1355,8 @@ $(document).ready( function() {
 				$(this).on("click", function(){
 					// 쿠폰 선택없음
 					if ($(this).prop("value") == 0) {
-						// select box 쿠폰 적용
-						var cpnCartSq = $(this).parent().parent().find("input[name='cpnCartSq']").val();
-						
-						// 장바구니시퀀스 체크
-						$("input[name='cartSq']").each(function(){
-							if (cpnCartSq == $(this).val()) {
-								$(this).parent().find("input[name='goodsCpnSq']").val("0");			// 상품쿠폰시퀀스
-								$(this).parent().find("input[name='goodsCpnDcAmt']").val("0");		// 상품쿠폰할인금액
-							}
-						});
-						
-						$(this).parent().parent().find("input[name='custCpnSq']").val("0");
-						$(this).parent().parent().find("input[name='cpnDcAmt']").val("0");
-						
-						$(this).parent().parent().find(".select").text("선택없음");
-						$(this).parent().parent().parent().parent().parent().find(".cp_discount").css("display", "none");
+						// 쿠폰 선택없음
+						cpnApplyDel($(this));
 					}
 					// 쿠폰선택
 					else {
@@ -1265,28 +1370,87 @@ $(document).ready( function() {
 							// 쿠폰적용불가
 							custCpnNotApply($(this));
 						}
+						
+						// 쿠폰할인금액 SUM
+						custCpnSumAmtCal();
+						
+						// 최대할인혜택적용 체크해제
+						if ($("#chk-maxdisc").is(":checked")) {
+							$("#chk-maxdisc").attr("checked", false);
+						}
 					}
-					
-					// 최대할인혜택적용 체크해제
-					if ($("#chk-maxdisc").is(":checked")) {
-						$("#chk-maxdisc").attr("checked", false);
-					}
-					
-					// 쿠폰할인금액 SUM
-					custCpnSumAmtCal();
 				});
 			});
 		});
 		
-		// 3. 쿠폰 최대할인금액 초기화 버튼 설정
-		$("#chk-maxdisc").on("click", function(){
+		
+		// 4 쿠폰적용초기화(할인율최고)
+		custCpnInit();
+	});
+	
+	// 사은품선택 라디오 버튼 기능
+	$(".freegiftRdo").on("click", function() {
+		var total_gift 		= 0;
+		var total_deduct 	= 0;
+		
+		$(".freegiftRdo").each(function(){
+			// 라디오버튼 사은품 체크
 			if ($(this).is(":checked")) {
-				custCpnInit();
+				// 수령거부가 아닐때 체크
+				if ($(this).val() != "noSel") {
+					total_gift 		+= 1;
+					total_deduct 	+= parseInt($(this).attr("usepoint"));
+				}
 			}
 		});
 		
-		// 3. 쿠폰적용초기화(할인율최고)
-		custCpnInit();
+		$(".total_gift").text(total_gift);			// 사은품총선택개수
+		$(".total_deduct").text(total_deduct);		// 사은품총사용포인트
+	});
+	
+	// 프로모션 쿠폰 적용 함수
+	function serialCpnApply() {
+		let data = {
+			cartSq	: $().val(),
+			rdCpnNm : $("#payForm #serialCpnNm").val()
+		}
+
+		let jsonData = JSON.stringify(data);
+
+		$.ajax( {
+			type			: "POST",
+			url 			: '/cart/list/serialCpnApply',
+			contentType		: 'application/json',
+			dataType 		: 'json',
+			data 			: jsonData,
+			success 		: function(result) {
+				// SUCCESS
+				// 성공일때는 쿠폰정보 및 포인트 정보 reset
+				if (result.serialCpnInfo.result == "SUCCESS") {
+					
+				} else {
+					alert(result.serialCpnInfo.result);
+				}
+			}
+		});
+	}
+	
+	// 쿠폰 최대할인금액 초기화 버튼 설정
+	$("#chk-maxdisc").on("click", function(){
+		if ($(this).is(":checked")) {
+			custCpnInit();
+		}
+	});
+	
+	// 쿠폰할인적용 삭제 버튼
+	$(".btn_del_coupon").on("click", function(){
+		//선택없음선택
+		$(this).parent().parent().find("ul li").each(function(i){
+			if (i == 0) {
+				// 쿠폰 선택없음
+				cpnApplyDel($(this));
+			}
+		});
 	});
 	
 	// 쿠폰 최대할인율 쿠폰적용
@@ -1327,7 +1491,7 @@ $(document).ready( function() {
 						if (custCpnDuplicationCheck($(this).prop("value"), index)) {
 							// 쿠폰적용
 							custCpnApply($(this));
-							
+							// 쿠폰할인적용
 							cpnApplyTemp = true;
 						}
 					}
@@ -1366,25 +1530,125 @@ $(document).ready( function() {
 	
 	// 쿠폰중복체크 후 적용가능
 	var custCpnApply = function(obj) {
-		// 적용된 할인금액 text 설정 
-		var dcAmtStr = "- " + parseInt(obj.attr("data")).addComma() + " 원 할인적용";
-		obj.parent().parent().parent().parent().parent().find(".cp_amount").text(dcAmtStr);
-		
 		// select box 쿠폰 적용
-		var cpnCartSq = obj.parent().parent().find("input[name='cpnCartSq']").val();
+		var cpnType 	= obj.parent().parent().find("input[name='cpnType']").val();
 		
-		// 장바구니시퀀스 체크
-		$("input[name='cartSq']").each(function(){
-			if (cpnCartSq == $(this).val()) {
-				$(this).parent().find("input[name='goodsCpnSq']").val(obj.prop("value"));		// 상품쿠폰시퀀스
-				$(this).parent().find("input[name='goodsCpnDcAmt']").val(obj.attr("data"));		// 상품쿠폰할인금액
-			}
-		});
+		// 상품쿠폰적용
+		if (cpnType == "goodsCpn") {
+			// 적용된 할인금액 text 설정 
+			var dcAmtStr = "- " + parseInt(obj.attr("data")).addComma() + " 원 할인적용";
+			obj.parent().parent().parent().parent().parent().find(".cp_amount").text(dcAmtStr);
+			
+			var cpnCartSq 	= obj.parent().parent().find("input[name='cpnCartSq']").val();
+			
+			// 장바구니상품시퀀스 체크
+			$("input[name='cartSq']").each(function(){
+				if (cpnCartSq == $(this).val()) {
+					$(this).parent().find("input[name='goodsCpnSq']").val(obj.prop("value"));		// 상품쿠폰시퀀스
+					$(this).parent().find("input[name='goodsCpnDcAmt']").val(obj.attr("data"));		// 상품쿠폰할인금액
+				}
+			});
+			
+			obj.parent().parent().find("input[name='cpnDcAmt']").val(obj.attr("data"));
+		} 
+		// 장바구니쿠폰적용
+		else if (cpnType == "cartCpn") {
+			var dcWay 				= obj.parent().find("input[name='dcWay']").val();
+			var dcVal 				= obj.parent().find("input[name='dcVal']").val();
+			var cartCpnDcSumAmt		= 0;
+			var tempSumAmt			= 0;
+			var applyGoodsCnt		= 0;
+			var leftAmt				= 0;
+			var index				= 0;
+			
+			// 장바구니쿠폰 해당 장바구니상품들 할인가 적용
+			obj.find("input[name='cartCpnCartSq']").each(function(){
+				var cartCpnCartSq 		= $(this).val();
+				var cartCpnDcAmt		= 0;
+				
+				// 장바구니시퀀스 체크
+				$("input[name='cartSq']").each(function(){
+					if (cartCpnCartSq == $(this).val()) {
+						var currPrice 		= parseInt($(this).parent().find("input[name='currPrice']").val());
+						var tmtb1DcAmt 		= parseInt($(this).parent().find("input[name='tmtb1DcAmt']").val());
+						var tmtb2DcAmt 		= parseInt($(this).parent().find("input[name='tmtb2DcAmt']").val());
+						var goodsCpnDcAmt 	= parseInt($(this).parent().find("input[name='goodsCpnDcAmt']").val());
+						
+						var tempAmt 		= currPrice - tmtb1DcAmt - tmtb2DcAmt - goodsCpnDcAmt;
+						tempSumAmt			= tempSumAmt + tempAmt; 
+						
+						// 할인율일때 할인금액 
+						if (dcWay == "G240_20") {
+							cartCpnDcAmt = (tempAmt * dcVal) / 100;
+							cartCpnDcSumAmt = cartCpnDcSumAmt + cartCpnDcAmt;
+							
+							$(this).parent().find("input[name='cartCpnSq']").val(obj.prop("value"));
+							$(this).parent().find("input[name='cartCpnDcAmt']").val(cartCpnDcAmt);
+						}
+						
+						applyGoodsCnt++;
+					}
+				});
+			});
+			
+			// 금액일때 할인금액 적용
+			if (dcWay == "G240_10") {
+				cartCpnDcSumAmt = dcVal;
+				leftAmt			= dcVal;
+				index			= 0;
+				
+				// 장바구니쿠폰 해당 장바구니상품들 할인가 적용
+				obj.find("input[name='cartCpnCartSq']").each(function(){
+					var cartCpnCartSq 		= $(this).val();
+					var cartCpnDcAmt		= 0;
+										
+					// 장바구니시퀀스 체크
+					$("input[name='cartSq']").each(function(){
+						if (cartCpnCartSq == $(this).val()) {
+							index++;
+							
+							var currPrice 		= parseInt($(this).parent().find("input[name='currPrice']").val());
+							var tmtb1DcAmt 		= parseInt($(this).parent().find("input[name='tmtb1DcAmt']").val());
+							var tmtb2DcAmt 		= parseInt($(this).parent().find("input[name='tmtb2DcAmt']").val());
+							var goodsCpnDcAmt 	= parseInt($(this).parent().find("input[name='goodsCpnDcAmt']").val());
+							
+							var tempAmt 		= currPrice - tmtb1DcAmt - tmtb2DcAmt - goodsCpnDcAmt;
+							var tempDiv 		= parseInt((tempAmt / tempSumAmt) * 100);
+							var cartCpnDcAmt	= 0;
+					
+							if (index == applyGoodsCnt) {
+								cartCpnDcAmt 	= leftAmt;
+							} else {
+								cartCpnDcAmt	= parseInt((cartCpnDcSumAmt * tempDiv) / 100);
+								leftAmt 		= leftAmt - cartCpnDcAmt;
+							}
+							
+							$(this).parent().find("input[name='cartCpnSq']").val(obj.prop("value"));
+							$(this).parent().find("input[name='cartCpnDcAmt']").val(cartCpnDcAmt);
+						}
+					});
+				});
+			} 
+			
+			obj.parent().parent().find("input[name='cpnDcAmt']").val(cartCpnDcSumAmt);
+			
+			var dcAmtStr = "- " + cartCpnDcSumAmt.addComma() + " 원 할인적용";
+			obj.parent().parent().parent().parent().parent().find(".cp_amount").text(dcAmtStr);
+		}
+		// 배송비쿠폰적용
+		else if (cpnType == "delvCpn") {
+			// 적용된 할인금액 text 설정 
+			var dcAmtStr = "- " + parseInt(obj.attr("data")).addComma() + " 원 할인적용";
+			obj.parent().parent().parent().parent().parent().find(".cp_amount").text(dcAmtStr);
+			
+			var cpnCartSq 	= obj.parent().parent().find("input[name='cpnCartSq']").val();
+			
+			obj.parent().parent().find("input[name='cpnDcAmt']").val(obj.attr("data"));
+			obj.parent().parent().find("input[name='delvFeeCd']").val(obj.attr("delvfeecd"));
+		}
 		
-		// select box 쿠폰 적용
+		// select box 쿠폰 적용 (공통적용)
 		obj.parent().parent().find("input[name='custCpnSq']").val(obj.prop("value"));
-		obj.parent().parent().find("input[name='cpnDcAmt']").val(obj.attr("data"));
-		
 		obj.parent().parent().find(".select").text(obj.text());
 		
 		// 선택된 할인금액 노출
@@ -1410,34 +1674,107 @@ $(document).ready( function() {
 		});
 	}
 	
+	// 쿠폰 선택없음 기능 구현
+	var cpnApplyDel = function(obj) {
+		// 쿠폰타입(상품쿠폰, 장바구니쿠폰, 배송비쿠폰)
+		var cpnType = obj.parent().parent().find("input[name='cpnType']").val();
+		
+		// 상품쿠폰적용
+		if (cpnType == "goodsCpn") {
+			// select box 쿠폰 적용
+			var cpnCartSq = obj.parent().parent().find("input[name='cpnCartSq']").val();
+			
+			// 장바구니시퀀스 체크
+			$("input[name='cartSq']").each(function(){
+				if (cpnCartSq == $(this).val()) {
+					$(this).parent().find("input[name='goodsCpnSq']").val("0");			// 상품쿠폰시퀀스
+					$(this).parent().find("input[name='goodsCpnDcAmt']").val("0");		// 상품쿠폰할인금액
+				}
+			});
+		}
+		// 장바구니쿠폰적용
+		else if (cpnType == "cartCpn") {
+			// 장바구니쿠폰 시퀀스 0, 장바구니할인금액 0
+			$("input[name='cartSq']").each(function(){
+				$(this).parent().find("input[name='cartCpnSq']").val("0");
+				$(this).parent().find("input[name='cartCpnDcAmt']").val("0");
+			});
+		}
+		// 배송비쿠폰적용
+		else if (cpnType == "delvCpn") {
+			// 장바구니쿠폰 시퀀스 0, 장바구니할인금액 0
+			$("input[name='cartSq']").each(function(){
+				$(this).parent().find("input[name='delvFeeCd']").val("0");
+			});
+		}
+		
+		obj.parent().parent().find("input[name='custCpnSq']").val("0");
+		obj.parent().parent().find("input[name='cpnDcAmt']").val("0");
+
+		obj.parent().parent().find(".select").text("선택없음");
+		obj.parent().parent().parent().parent().parent().find(".cp_discount").css("display", "none");
+		
+		// 쿠폰할인금액 SUM
+		custCpnSumAmtCal();
+		
+		// 최대할인혜택적용 체크해제
+		if ($("#chk-maxdisc").is(":checked")) {
+			$("#chk-maxdisc").attr("checked", false);
+		}
+	}
+	
 	// 쿠폰할인금액합계설정
 	var custCpnSumAmtCal = function() {
 		var cpnDcSumAmt = 0;
+		var cpnApplyCnt = 0;
+		
 		$("input[name='cpnDcAmt']").each(function(){
 			cpnDcSumAmt = cpnDcSumAmt + parseInt($(this).val());
+			
+			// 적용된 쿠폰 수량
+			if (parseInt($(this).val()) > 0) {
+				cpnApplyCnt++;
+			}
 		});
-		$(".maxdisc_amount").text("(-" + cpnDcSumAmt.addComma() + "원)");
-	};
-	
-	// 사은품선택 라디오 버튼 기능
-	$(".freegiftRdo").on("click", function() {
-		var total_gift 		= 0;
-		var total_deduct 	= 0;
 		
-		$(".freegiftRdo").each(function(){
-			// 라디오버튼 사은품 체크
-			if ($(this).is(":checked")) {
-				// 수령거부가 아닐때 체크
-				if ($(this).val() != "noSel") {
-					total_gift 		+= 1;
-					total_deduct 	+= parseInt($(this).attr("usepoint"));
-				}
+		// 쿠폰영역
+		$(".maxdisc_amount").text("(-" + cpnDcSumAmt.addComma() + "원)"); // 쿠폰할인금액합계
+		$("#cpnApplyCnt").text(cpnApplyCnt + "장");
+		
+		// 상품목록영역
+		$("#couponDcSumAmt").text("-" + cpnDcSumAmt.addComma() + "원"); // 쿠폰할인금액합계
+		$("input[name='couponDcSumAmt']").val(cpnDcSumAmt);
+		
+		// 배송비할인적용
+		$("input[name='cpnType']").each(function(){
+			if ($(this).val() == "delvCpn") {
+				sumDelvFee = parseInt(orgSumDelvFee) - parseInt($(this).parent().find("input[name='cpnDcAmt']").val());
+				
+				// 최종배송비
+				$("#delvSumAmt").text(sumDelvFee.addComma() + "원");
+				$("input[name='delvSumAmt']").val(sumDelvFee);
 			}
 		});
 		
-		$(".total_gift").text(total_gift);			// 사은품총선택개수
-		$(".total_deduct").text(total_deduct);		// 사은품총사용포인트
-	});
+		var goodsSumAmt 		= parseInt($("input[name='goodsSumAmt']").val());
+		var delvSumAmt 			= parseInt($("input[name='delvSumAmt']").val());
+		var cpn1DcSumAmt 		= parseInt($("input[name='cpn1DcSumAmt']").val());
+		var tmtbDcSumAmt 		= parseInt($("input[name='tmtbDcSumAmt']").val());
+		var couponDcSumAmt 		= parseInt($("input[name='couponDcSumAmt']").val());
+		var prePntDcAmt 		= parseInt($("input[name='prePntDcAmt']").val());
+		var pntDcAmt 			= parseInt($("input[name='pntDcAmt']").val());
+		var gfcdUseAmt 			= parseInt($("input[name='gfcdUseAmt']").val());
+		
+		// 실결제금액(PG)
+		var realOrdAmt			= (goodsSumAmt + delvSumAmt) - (cpn1DcSumAmt + tmtbDcSumAmt + couponDcSumAmt + prePntDcAmt) - (pntDcAmt + gfcdUseAmt);
+		$("#realOrdAmt").text(realOrdAmt.addComma());
+		
+		// 적립예정포인트
+		var savePntSumAmt		= parseInt($("input[name='savePntSumAmt']").val());
+		var tempSavePnt			= savePntSumAmt - prePntDcAmt;
+		
+		$("#savePntSumAmt").text(tempSavePnt.addComma()+"P");
+	};
 </script>
 </th:block>
 </body>

+ 1720 - 0
src/main/webapp/WEB-INF/views/web/order/OrderFormWeb_20210304.html

@@ -0,0 +1,1720 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="web/common/layout/DefaultLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : OrderFormWeb.html
+ * @desc    : 주문/결제 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.01   jsh77b     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+
+<link rel="stylesheet" type="text/css" href="/ux/pc/css/swiper.min.css">
+<script type="text/javascript" src="/ux/pc/js/swiper.min.js"></script>
+<script type="text/javascript" src="/ux/pc/js/slick.min.js"></script>
+<script type="text/javascript" src="/ux/pc/js/jquery-ui.js"></script>
+
+<!-- xodud1202 -->
+
+<!-- // xodud1202 -->
+
+
+<!-- card007 -->
+
+<!-- // card007 -->
+
+
+
+
+
+
+<!--  container -->
+<form id="payForm" name="payForm">
+	<input type="hidden" name="delvMemo" th:value="${deliveryAddrInfo.delvMemo}">
+		
+	<div id="container" class="container od">
+		<div class="wrap">
+			<div class="content odPayment">
+				<!-- 페이지특정 클래스 = odPayment -->
+				<div class="cont_head">
+					<h2>주문&#47;결제</h2>
+					<div class="oder_steps">
+						<ul>
+							<li>01 쇼핑백</li>
+							<li class="on">02 주문/결제</li>
+							<li>03 주문완료</li>
+						</ul>
+					</div>
+				</div>
+				<div class="cont_body">
+					<!-- CONT-BODY -->
+					<form class="form_wrap">
+						<div class="od_cont">
+							<div class="sec_head">
+								<div class="tbl type4">
+									<table>
+										<colgroup>
+											<col width="240">
+											<col width="*">
+										</colgroup>
+										<tbody>
+											<tr>
+												<th>총 <span class="c_primary bold" th:text="${delvFeeTotCnt}"></span> 건으로 나뉘어 배송 예정</th>
+												<td class="t_l">
+													<span>총알배송<em class="c_primary bold" th:text="${wmsCnt}" id="shotDelv"></em>건</span>
+													<span>STYLE24<em class="c_primary bold" th:text="${wmsCnt}" id="wmsDelv"></em>건</span>
+													<span>업체직배송<em class="c_primary bold" th:text="${delvCnt}"></em>건</span>
+													<span>예약배송<em class="c_primary bold" th:text="${resCnt}"></em>건</span>
+												</td>
+											</tr>
+										</tbody>
+									</table>
+								</div>
+							</div>
+							<div class="sec_body">
+								<!-- -->
+								<div class="foldGroup">
+									<ul>
+									
+										
+										<li class="fold_mbinfo" id="custemerInfo">
+											<!-- 주문고객정보 -->
+											<div class="fold_head">
+												<a href="javascript:void(0)">
+													<div>
+														<div class="fold_tit">
+															<span>주문고객</span>
+														</div>
+														<div class="data">
+															<span th:text="${custemerInfo.custNm}"></span>
+															<span th:text="${custemerInfo.email}"></span>
+															<span th:text="${custemerInfo.cellPhnno}"></span>
+														</div>
+													</div>
+												</a>
+											</div>
+											<div class="fold_cont" style="display: none;">
+												<div class="area_mbinfo">
+													<dl>
+														<div>
+															<dt>
+																<span class="sr-only">주문자명</span>
+															</dt>
+															<dd th:text="${custemerInfo.custNm}"></dd>
+														</div>
+														<div>
+															<dt>
+																<span class="sr-only">이메일</span>
+															</dt>
+															<dd th:text="${custemerInfo.email}">/dd>
+														</div>
+														<div>
+															<dt>
+																<span class="sr-only">휴대폰 번호</span>
+															</dt>
+															<dd>
+																<span th:text="${custemerInfo.cellPhnno}"></span>
+																<th:block th:if="${custemerInfo.ci} == null or ${custemerInfo.ci} == ''">
+																	<button type="button" class="btn_popup" id="">
+																		<span>본인인증하기</span>
+																	</button>
+																</th:block>
+															</dd>
+														</div>
+													</dl>
+												</div>
+											</div> <!-- //주문고객정보 -->
+										</li>
+									
+										<li class="fold_mbinfo" id="deliveryAddrInfo">
+											<!-- 배송지정보 -->
+											<div class="fold_head">
+												<a href="javascript:void(0)">
+													<div>
+														<div class="fold_tit">
+															<span>배송지 정보</span>
+														</div>
+														<div class="data" th:text="${deliveryAddrInfo.recipBaseAddr} + ${deliveryAddrInfo.recipDtlAddr}"></div>
+													</div>
+												</a>
+											</div>
+											<div class="fold_cont" style="display: none;">
+												<div class="area_mbinfo">
+													<dl>
+														<div>
+															<dt><span class="sr-only">배송지명</span></dt>
+															<dd>
+																<span th:text="${deliveryAddrInfo.delvAddrNm}"></span>
+																<span class="icon_tag">
+																	<em class="tag_stype1">기본 배송지</em> 
+																	<em class="tag_stype2">총알배송</em>
+																</span>
+															</dd>
+														</div>
+														<div>
+															<dt>
+																<span class="sr-only">배송주소</span>
+															</dt>
+															<dd>
+																<span th:text="${deliveryAddrInfo.recipBaseAddr} + ${deliveryAddrInfo.recipDtlAddr}"></span>
+																<button type="button" class="btn_popup" id="btn_adrsChange_pop">
+																	<span>배송지 선택</span>
+																</button>
+															</dd>
+														</div>
+														<div>
+															<dt>
+																<span class="sr-only">휴대폰 번호</span>
+															</dt>
+															<dd th:text="${custemerInfo.cellPhnno}"></dd>
+														</div>
+														<div>
+															<dt>배송요청 사항</dt>
+															<dd>
+																<span th:text="${deliveryAddrInfo.delvMemo}" id="delvMemo"></span>
+																<button type="button" class="btn_popup" id="btn_rqstModify_pop">
+																	<span>변경하기</span>
+																</button>
+															</dd>
+														</div>
+													</dl>
+												</div>
+												
+												<!-- 해외배송상품일 경우 노출 -->
+												<div class="area_overseas">
+													<dl>
+														<div>
+															<dt>개인통관고유부호</dt>
+															<dd>
+																<div class="form_field">
+																	<div>
+																		<input type="radio" name="rdi-overseas" id="rdi-overs1" checked> 
+																		<label for="rdi-overs1"><span>받는사람 개인통관고유부호</span></label>
+																	</div>
+																	<div>
+																		<input type="radio" name="rdi-overseas" id="rdi-overs2">
+																		<label for="rdi-overs2"><span>입력 안 함</span></label>
+																	</div>
+																	<div class="info_box overs1">
+																		<div class="input_wrap">
+																			<input type="text" class="form_control err" maxlength="13" placeholder="P로 시작하는 13자리">
+																			<!-- 유효하지 않은 개인통관고유부호 일때 class명 'err' 추가 -->
+																		</div>
+																		<div class="t_err">개인통관고유부호가 유효하지 않습니다.</div>
+																		<!-- 유효하지 않은 개인통관고유부호 일때 노출 -->
+																		<div class="agree_overs">
+																			<input id="chk-overs-agr" type="checkbox" checked="">
+																			<label for="chk-overs-agr">
+																				<span>
+																					위 정보는 원활한 통관을 위해 수집 및 판매자에게 제공하며,계속 사용하도록 안전하게 STYLE24에서 저장 &#47; 관리 합니다.&nbsp;&nbsp;
+																					<em class="tmark_required">(필수)</em>
+																				</span>
+																			</label>
+																		</div>
+																	</div>
+																	<div class="info_box overs2" style="display: none;">
+																		<p>개인통관고유부호를 입력하지 않아도 관세사무소에서 개인정보 확인을 위해 별도 연락을 드릴 예정입니다.</p>
+																	</div>
+																</div>
+																<div class="info_txt">
+																	<ul>
+																		<li>물품가액이 $150초과할 경우 관/부과세가 발생 할 수 있습니다.</li>
+																		<li>물품 종류와 해외공급자 관계없이 같은 날 입항하게 되면 합산과세 대상이 됩니다.</li>
+																	</ul>
+																</div>
+															</dd>
+														</div>
+													</dl>
+												</div>
+												<!-- //해외배송상품일 경우 노출 -->
+												
+												<!-- 주문제작상품일 경우 노출 -->
+												<div class="area_customitem">
+													<div class="form_field">
+														<div class="agree_custom">
+															<input id="chk-custom-agr1" type="checkbox" checked="">
+															<label for="chk-custom-agr1">
+																<span>고객님께서 주문하신 상품에는 주문제작상품이 포함되어 있습니다.<br>주문제작상품에 대한 안내를 확인하였으며 배송에 동의합니다.&nbsp;&nbsp;
+																	<em class="tmark_required">(필수)</em>
+																</span>
+															</label>
+														</div>
+													</div>
+													<div class="info_txt">
+														<ul>
+															<li>주문 제작 상품은 주문 후 제작이 진행되며, 제작 완료 후 배송이 시작됩니다.</li>
+															<li>주문 제작 상품의 특성상 주문 완료 후 취소/교환이 불가능합니다. (상품 하자에 한해 가능)</li>
+														</ul>
+													</div>
+												</div>
+												<!-- //주문제작상품일 경우 노출 -->
+											</div> <!-- //배송지정보 -->
+										</li>
+										
+										<!-- 사은품선택 -->
+										<th:block th:if="${freegiftList != null && #lists.size(freegiftList) > 0}">
+											<li>
+												<div class="fold_head">
+													<a href="javascript:void(0)">
+														<div>
+															<div class="fold_tit">
+																<span>사은품 선택</span>
+															</div>
+															<div class="data">
+																<span>사은품 총 <em class="total_gift">0</em>&nbsp;개 선택</span> 
+																<span><em class="total_deduct">0</em>&nbsp;P 차감</span>
+															</div>
+														</div>
+													</a>
+												</div>
+												<div class="fold_cont" style="display: none;">
+													<div class="area_selgift">
+														<th:block th:each="freegift, i : ${freegiftList}">
+															<div class="gift_box">
+																<p class="txt">
+																	<span th:text="'사은품선택' + ${i.count} + '' + ${freegift.freegiftNm}"></span>
+																</p>
+																<div class="form_field">
+																	<th:block th:each="freegiftGoods, k : ${freegiftGoodsList}">
+																		<th:block th:if="${freegift.freegiftSq} == ${freegiftGoods.freegiftSq}">
+																			<div class="gift">
+																				<input type="radio" th:name="'rdi-gift'+${i.count}" th:id="'rdi-gift'+${i.count}+${k.count}" class="chk_img freegiftRdo" th:value="${freegiftGoods.freegiftValSq}" th:usepoint="${freegiftGoods.usePoint}"> 
+																				<label th:for="'rdi-gift'+${i.count}+${k.count}"> 
+																					<span class="thumb"><img src="http://ts5000.ipdisk.co.kr:89/images/pc/thumb/tmp_gift1.jpg" width="" alt=""></span>
+																					<span class="name" th:text="${freegiftGoods.goodsNm}"></span> 
+																					<span th:if="${freegiftGoods.usePoint} < 1" class="deduct" th:text="무료"></span>
+																					<span th:if="${freegiftGoods.usePoint} > 0" class="deduct" th:text="|- ${freegiftGoods.usePoint} P|"></span>
+																				</label>
+																			</div>
+																		</th:block>
+																	</th:block>
+																	<div class="gift">
+																		<input type="radio" th:name="'rdi-gift'+${i.count}" th:id="${i.count}+'0'" class="chk_img freegiftRdo" value="noSel" usepoint="0"> 
+																		<label th:for="${i.count}+'0'">
+																			<span class="thumb"><img src="/images/pc/thumb/tmp_gift_empty.jpg" width=""alt=""></span> 
+																			<span class="name">사은품 수령안함</span>
+																			<span class="deduct">수령거부</span>
+																		</label>
+																	</div>
+																</div>
+															</div>
+														</th:block>
+														<div class="form_field">
+															<div class="agree_gift">
+																<p>
+																	<input id="chk-agree_gift" type="checkbox">
+																	<label for="chk-agree_gift"><span>동의합니다</span></label>
+																</p>
+																<p class="txt">
+																	사은품 지금에 대한 내용을 확인하였으며, 이에 동의합니다.
+																	<button type="button" class="btn_link_popup" id="btn_infoGift_pop">
+																		<span>보기</span>
+																	</button>
+																</p>
+															</div>
+														</div>
+													</div>
+												</div> <!-- //사은품선택 -->
+											</li>
+										</th:block>
+										
+										
+										<li>
+											<!-- 할인/혜택 사용 -->
+											<div class="fold_head">
+												<a href="javascript:void(0)">
+													<div>
+														<div class="fold_tit">
+															<span>할인/혜택 사용</span>
+														</div>
+														<div class="data maxdisc">
+															<div class="form_field">
+																<input id="chk-maxdisc" type="checkbox" checked="">
+																<label for="chk-maxdisc">
+																	<span>최대 할인혜택을 바로 적용하세요 <em class="maxdisc_amount"></em></span>
+																</label>
+															</div>
+														</div>
+													</div>
+												</a>
+											</div>
+											<div class="fold_cont" style="display: none;">
+												<div class="area_seldiscount">
+													<dl>
+														<div>
+															<dt><span class="mid">할인코드</span></dt>
+															<dd>
+																<div class="form_field">
+																	<div class="input_wrap">
+																		<input type="text" id="serialCpnNm" class="form_control" maxlength="13" placeholder="할인코드를 입력해주세요.">
+																		<button type="button" class="btn btn_dark" onclick="serialCpnApply()">적용</button>
+																	</div>
+																</div>
+															</dd>
+														</div>
+														<div>
+															<dt>할인쿠폰</dt>
+															<dd>
+																<a href="javascript:void(0);" class="btn_coupon_toggle">할인쿠폰 <span id="cpnApplyCnt"></span>적용</a>
+																<div class="coupon_list">
+																	<ul>
+																		<!--  상품쿠폰 -->
+																		<th:block th:each="goods, i : ${goodsApplyCpnList}">
+																			<th:block th:if="${goods.goodsCpnList.size() > 0}">
+																				<li>
+																					<div class="coupon">
+																						<div class="item_gd">
+																							<figure>
+																								<span class="thumb"><img src="/images/pc/thumb/tmp_odSide1.jpg" alt=""></span>
+																								<figcaption>
+																									<div class="brand" th:text="${goods.brandEnm}+' '+${goods.brandKnm}"></div>
+																									<div class="name" th:text="${goods.goodsNm}"></div>
+																									<div class="price">
+																										<th:block th:if="${goods.tmtbDcAmt} > 0">
+																											<span class="selling_price"  th:text="${#numbers.formatInteger(goods.tmtbDcAmt, 1, 'COMMA')}"></span>
+																										</th:block>
+																										<th:block th:if="${goods.tmtbDcAmt} < 1">
+																											<span class="selling_price"  th:text="${#numbers.formatInteger(goods.currPrice, 1, 'COMMA')}"></span>
+																										</th:block>
+																									</div>
+																								</figcaption>
+																							</figure>
+																						</div>
+																						 
+																						<div class="form_field">
+																							<div class="select_custom type1">
+																								<div class="combo">
+																									<input type="hidden" name="cpnType" value="goodsCpn"/>
+																									<input type="hidden" name="cpnCartSq" th:value="${goods.cartSq}"/>
+																									<input type="hidden" name="custCpnSq" value="0"/>
+																									<input type="hidden" name="cpnDcAmt" value="0"/>
+																									
+																									<div class="select">선택없음</div>
+																									<ul class="list">
+																										<li value="0">선택없음</li>
+																										<th:block th:each="goodsCpn, k : ${goods.goodsCpnList}">
+																											<li th:value="${goodsCpn.custCpnSq}" th:data="${goodsCpn.cpnDcAmt}" th:text="${goodsCpn.cpnNm}"></li>
+																										</th:block>
+																									</ul>
+																								</div>
+																							</div>
+																						</div>
+																						<div class="cp_discount" style="display:none;">
+																							<span class="cp_amount"></span>
+																							<button type="button" class="btn_del_coupon"><span>쿠폰적용해제</span></button>
+																						</div>
+																					</div>
+																				</li>
+																			</th:block>
+																		</th:block>
+																		<!--  상품쿠폰 -->
+
+																		<!--  장바구니쿠폰 -->
+																		<th:block th:if="${cartCpnList.size() > 0}">
+																			<li>
+																				<div class="coupon">
+																					<div class="form_field">
+																						<div class="select_custom type1">
+																							<div class="combo">
+																								<input type="hidden" name="cpnType" value="cartCpn"/>
+																								<input type="hidden" name="custCpnSq" value="0"/>
+																								<input type="hidden" name="cpnDcAmt" value="0"/>
+																								
+																								<div class="select">선택없음</div>
+																								<ul class="list">
+																									<li value="0">선택없음</li>
+																									<th:block th:each="cartCpn, k : ${cartCpnList}">
+																										<li th:value="${cartCpn.custCpnSq}" th:data="${cartCpn.cpnDcAmt}">
+																											<th:block th:text="${cartCpn.cpnNm}"></th:block>
+																											<input type="hidden" name="dcWay" th:value="${cartCpn.dcWay}"/>
+																											<input type="hidden" name="dcVal" th:value="${cartCpn.dcVal}"/>
+																											<th:block th:each="cartCpnCartSq, kokok : ${cartCpn.cartCpnCartSqArr}"> 
+																												<input type="hidden" name="cartCpnCartSq" th:value="${cartCpnCartSq}" />
+																											</th:block>
+																										</li>
+																									</th:block>
+																								</ul>
+																							</div>
+																						</div>
+																					</div>
+																					<div class="cp_discount">
+																						<span class="cp_amount"></span>
+																						<button type="button" class="btn_del_coupon"><span>쿠폰적용해제</span></button>
+																					</div>
+																				</div>
+																			</li>
+																		</th:block>
+																		<!--  장바구니쿠폰 -->
+																		
+																		<!--  배송비쿠폰 -->
+																		<th:block th:if="${delvCpnList.size() > 0}">
+																			<li>
+																				<div class="coupon">
+																					<div class="form_field">
+																						<div class="select_custom type1">
+																							<div class="combo">
+																								<input type="hidden" name="cpnType" value="delvCpn"/>
+																								<input type="hidden" name="custCpnSq" value="0"/>
+																								<input type="hidden" name="cpnDcAmt" value="0"/>
+																								<input type="hidden" name="delvFeeCd" value="0"/>
+																								
+																								<div class="select" value="0">선택없음</div>
+																								<ul class="list">
+																									<li value="0">선택없음</li>
+																									<th:block th:each="delvCpn, k : ${delvCpnList}">
+																										<li th:value="${delvCpn.custCpnSq}" th:data="${delvCpn.cpnDcAmt}" th:delvfeecd="${delvCpn.delvFeeCd}" th:text="${delvCpn.cpnNm}"></li>
+																									</th:block>
+																								</ul>
+																							</div>
+																						</div>
+																					</div>
+																					<div class="cp_discount">
+																						<span class="cp_amount"></span>
+																						<button type="button" class="btn_del_coupon"><span>쿠폰적용해제</span></button>
+																					</div>
+																				</div>
+																			</li>
+																		</th:block>
+																		<!--  배송비쿠폰 -->
+																	</ul>
+																</div>
+															</dd>
+														</div>
+													</dl>
+												</div>
+												
+												<!-- 선포인트금액, 포인트금액, 상품권금액 0보다 클때 적용 -->
+												<th:block th:if="${prePntDcAmt} > 0 or ${rmPntAmt} > 0 or ${rmGfcdAmt} > 0">
+													<div class="area_selpoint">
+														<dl>
+															<th:block th:if="${prePntDcAmt} > 0">
+																<div>
+																	<dt>선 포인트 사용</dt>
+																	<dd>
+																		<div class="form_field">
+																			<div>
+																				<input type="radio" name="rdi-beforpoint" id="rdi-beforpoint1"> 
+																				<label for="rdi-beforpoint1"><span>사용 안함</span></label>
+																			</div>
+																			<div>
+																				<input type="radio" name="rdi-beforpoint" id="rdi-beforpoint2"> 
+																				<label for="rdi-beforpoint2"><span>사용함</span></label> 
+																				<span class="remain_point" th:text="|사용가능 포인트 : ${#numbers.formatInteger(prePntDcAmt, 1, 'COMMA')} P|"></span>
+																			</div>
+																		</div>
+																	</dd>
+																</div>
+															</th:block>
+															<th:block th:if="${rmPntAmt} > 0">
+																<div>
+																	<dt>
+																		<span class="mid">스타일 포인트</span>
+																	</dt>
+																	<dd>
+																		<div class="form_field">
+																			<!-- 스타일 포인트 3만원 이상 결제시 노출 -->
+																			<th:block th:if="${orgGoodsSumAmt} >= 30000">
+																				<div class="input_wrap">
+																					<input type="text" class="form_control" maxlength="" placeholder="사용할 포인트를 입력해주세요.">
+																					<button type="button" class="btn btn_dark">적용</button>
+																				</div>
+																				<!-- //스타일 포인트 3만원 미만 결제시 노출 -->
+																				<p><span class="remain_point" th:text="|보유 : ${#numbers.formatInteger(rmPntAmt, 1, 'COMMA')} P|"></span>(결제금액의 최대 40%까지 사용가능)</p>
+																			</th:block>
+																			<!-- 스타일 포인트 3만원 이상 결제시 노출 -->
+																			
+																			<!-- 스타일 포인트 3만원 미만 결제시 노출 -->
+																			<th:block th:if="${orgGoodsSumAmt} < 30000">
+																				<div class="input_wrap">
+																					<input type="text" class="form_control" maxlength="" placeholder="3만원 이상 결제시에만 포인트 사용이 가능합니다." disabled>
+																				</div>
+																			</th:block>
+																		</div>
+																	</dd>
+																</div>
+															</th:block>
+															<th:block th:if="${rmGfcdAmt} > 0">
+																<div>
+																	<dt>
+																		<span class="mid">상품권</span>
+																	</dt>
+																	<dd>
+																		<div class="form_field">
+																			<div class="input_wrap">
+																				<input type="text" class="form_control" maxlength="" placeholder="사용할 금액을 입력해주세요.">
+																				<button type="button" class="btn btn_dark">적용</button>
+																			</div>
+																			<p><span class="remain_point" th:text="|보유 : ${#numbers.formatInteger(rmGfcdAmt, 1, 'COMMA')} 원|"></span></p>
+																			<div class="agree_receipt">
+																				<input id="chk-receipt" type="checkbox"> 
+																				<label for="chk-receipt"><span>상품권 현금영수증 신청</span></label>
+																				<div class="info_box">
+																					<div class="input_wrap">
+																						<input type="text" class="form_control" maxlength="11" placeholder="">
+																					</div>
+																				</div>
+																			</div>
+																		</div>
+																	</dd>
+																</div>
+															</th:block>
+														</dl>
+													</div>
+												</th:block>
+											</div> <!-- //할인/혜택 사용 -->
+										</li>
+										<li class="fold_paymethod">
+											<!-- 결제수단 선택 -->
+											<div class="fold_head">
+												<a href="javascript:void(0)">
+													<div>
+														<div class="fold_tit"><span>결제수단 선택</span></div>
+														<div class="data"><span>STYLE24 간편결제</span></div>
+													</div>
+												</a>
+											</div>
+											<div class="fold_cont" style="display: none;">
+												<div class="area_paymethod">
+													<div class="form_field">
+														<div class="radio_blk">
+															<div class="paymethod_radio">
+																<input type="radio" name="rdi-paymethod" id="rdi-paymethod-quick" value=""> 
+																<label for="rdi-paymethod-quick"><span>STYLE24 간편결제</span></label>
+																<div class="quickpay_bnr">
+																	<span>3초면 결제 끝! 추가 혜택 할인과 함께 만나는 STYLE24 간편결제! 지금 바로 등록하세요!</span>
+																	<button type="button" class="btn_close_bnr">
+																		<span class="sr-only">닫기</span>
+																	</button>
+																</div>
+															</div>
+															<div class="paymethod_box" style="display: none;">
+																<div class="card_quickpay">
+																	<!-- 등록카드 없을때 -->
+																	<div class="empty">
+																		<button type="button" class="btn_addcard">
+																			<span>결제수단 등록</span>
+																		</button>
+																	</div>
+																	<!-- //등록카드 없을때 -->
+																	
+																	<!-- 등록카드 있을때 -->
+																	<div class="list_card swiper-container">
+																		<div class="swiper-wrapper">
+																			<div class="swiper-slide">
+																				<!-- 등록된 카드 -->
+																				<div class="card">
+																					<span class="logo_samsung">삼성카드</span>
+																					<p class="number">
+																						<span>9410</span> <span>09**</span> <span>****</span>
+																						<span>1287</span>
+																					</p>
+																					<p class="name">삼성개인특별카드</p>
+																					<select name="" id="" class="select_month">
+																						<option value="">일시불</option>
+																						<option value="">2개월 무이자</option>
+																						<option value="">3개월 무이자</option>
+																						<option value="">4개월 무이자</option>
+																						<option value="">5개월 무이자</option>
+																						<option value="">6개월 무이자</option>
+																						<option value="">7개월</option>
+																						<option value="">8개월</option>
+																						<option value="">9개월</option>
+																						<option value="">10개월</option>
+																						<option value="">11개월</option>
+																						<option value="">12개월</option>
+																					</select>
+																					<div class="etc">
+																						<button type="button" class="btn_favorcard">
+																							<span><i class="ico ico_star"></i><em class="sr-only">즐겨찾기</em></span>
+																						</button>
+																						<button type="button" class="btn_delcard">
+																							<span><i class="ico ico_trash_wh"></i><em class="sr-only">카드삭제</em></span>
+																						</button>
+																					</div>
+																				</div>
+																				<!-- //등록된 카드 -->
+																			</div>
+																			<div class="swiper-slide">
+																				<!-- 등록된 카드 -->
+																				<div class="card">
+																					<span class="logo_hyundai">현대카드</span>
+																					<p class="number">
+																						<span>9410</span> <span>09**</span> <span>****</span>
+																						<span>1287</span>
+																					</p>
+																					<p class="name">현대 M3 카드</p>
+																					<select name="" id="" class="select_month">
+																						<option value="">일시불</option>
+																						<option value="">2개월 무이자</option>
+																						<option value="">3개월 무이자</option>
+																						<option value="">4개월 무이자</option>
+																						<option value="">5개월 무이자</option>
+																						<option value="">6개월 무이자</option>
+																						<option value="">7개월</option>
+																						<option value="">8개월</option>
+																						<option value="">9개월</option>
+																						<option value="">10개월</option>
+																						<option value="">11개월</option>
+																						<option value="">12개월</option>
+																					</select>
+																					<div class="etc">
+																						<button type="button" class="btn_favorcard active">
+																							<span><i class="ico ico_star"></i><em class="sr-only">즐겨찾기</em></span>
+																						</button>
+																						<button type="button" class="btn_delcard">
+																							<span><i class="ico ico_trash_wh"></i><em class="sr-only">카드삭제</em></span>
+																						</button>
+																					</div>
+																				</div>
+																				<!-- //등록된 카드 -->
+																			</div>
+																			<div class="swiper-slide">
+																				<!-- 카드추가버튼 -->
+																				<button type="button" class="btn_addcard">
+																					<span>결제수단 등록</span>
+																				</button>
+																				<!-- //카드추가버튼 -->
+																			</div>
+																		</div>
+																		<div class="swiper-button-next"></div>
+																		<div class="swiper-button-prev"></div>
+																	</div>
+																	<!-- //등록카드 있을때 -->
+																</div>
+																<ul class="info_quick">
+																	<li>결제수단 등록 한번으로 간편하게 결제하실 수 있습니다.</li>
+																	<li>국내 8개 카드에 대해 이용 가능합니다. (법인카드,기프트카드,해외카드 제외)</li>
+																	<li>일반 신용카드의 할인혜택은 적용되지 않습니다.</li>
+																</ul>
+															</div>
+														</div>
+														<div class="radio_blk">
+															<div class="paymethod_radio">
+																<input type="radio" name="rdi-paymethod" id="rdi-paymethod-normal" value=""> 
+																<label for="rdi-paymethod-normal"><span>일반 결제</span></label>
+															</div>
+															<div class="paymethod_box" style="display: none;">
+																<ul class="sel_method">
+																	<li>
+																		<input type="radio" name="rdi-paynormal" id="rdi-paynormal1" value=""> 
+																		<label for="rdi-paynormal1"><span>신용카드</span></label>
+																	</li>
+																	<li>
+																		<input type="radio" name="rdi-paynormal" id="rdi-paynormal2" value=""> 
+																		<label for="rdi-paynormal2"><span>실시간계좌이체</span></label>
+																	</li>
+																	<li>
+																		<input type="radio" name="rdi-paynormal" id="rdi-paynormal3" value=""> 
+																		<label for="rdi-paynormal3"><span>무통장입금</span></label>
+																	</li>
+																	<li>
+																		<input type="radio" name="rdi-paynormal" id="rdi-paynormal4" value=""> 
+																		<label for="rdi-paynormal4"><span>휴대폰 결제</span></label>
+																	</li>
+																	<li>
+																		<input type="radio" name="rdi-paynormal" id="rdi-paynormal5" value=""> 
+																		<label for="rdi-paynormal5">
+																			<span>
+																				<em class="sr-only">카카오페이 결제</em>
+																				<em class="payimg kakao"></em>
+																			</span>
+																		</label>
+																	</li>
+																	<li>
+																		<input type="radio" name="rdi-paynormal" id="rdi-paynormal6" value=""> 
+																		<label for="rdi-paynormal6">
+																			<span>
+																				<em class="sr-only">네이버페이 결제</em>
+																				<em class="payimg naver"></em>
+																			</span>
+																		</label>
+																	</li>
+																	<li>
+																		<input type="radio" name="rdi-paynormal" id="rdi-paynormal7" value=""> 
+																		<label for="rdi-paynormal7">
+																			<span>
+																				<em class="sr-only">페이코 결제</em>
+																				<em class="payimg payco"></em>
+																			</span>
+																		</label>
+																	</li>
+																</ul>
+																<div class="agree_insurance">
+																	<input id="chk-insurance" type="checkbox"> 
+																	<label for="chk-insurance"> 
+																		<span>소비자 피해 보상보험 신청&nbsp;&nbsp;<em class="tmark_optional">(선택)</em></span>
+																		<button type="button" class="btn_link_popup" id="">
+																			<span>FAQ확인</span>
+																		</button>
+																	</label>
+																	<p>
+																		‘전자상거래 등에서의 소비자보호에 관한 법률‘에 따라 현금 결제 시 서울보증보험㈜가 제공하는
+																		소비자 피해보상보험을<br>신청할 수 있도록 해드리고 있습니다.
+																		(2013.11.28부터 시행)
+																	</p>
+																</div>
+															</div>
+														</div>
+													</div>
+													<div class="form_field">
+														<div class="agree_paymethod">
+															<input id="chk-agree_paymethod" type="checkbox">
+															<label for="chk-agree_paymethod"> 
+																<span>선택한 결제수단으로 향후 결제 이용에 동의합니다.&nbsp;&nbsp;<em class="tmark_optional">(선택)</em>
+															</span>
+															</label>
+														</div>
+													</div>
+												</div>
+												<div class="area_paymentinfo">
+													<div class="paymentinfo">
+														<div class="payinfo_blk on">
+															<a href=""> 개인정보 제공에 대한 동의 <span>닫기</span>
+															</a>
+															<div class="infotxt">개인정보제공에 대한 동의 내용입니다.개인정보제공에
+																대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
+																내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에
+																대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
+																내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에
+																대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
+																내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에
+																대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
+																내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에
+																대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
+																내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에
+																대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
+																내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에
+																대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의
+																내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.</div>
+														</div>
+														<div class="payinfo_blk">
+															<a href=""> 결제대행 서비스 약관 동의 <span>보기</span>
+															</a>
+															<div class="infotxt">결제대행서비스 약관 동의 내용입니다.결제대행서비스
+																약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
+																내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스
+																약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
+																내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스
+																약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
+																내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스
+																약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
+																내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스
+																약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
+																내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스
+																약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
+																내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스
+																약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의
+																내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.</div>
+														</div>
+													</div>
+
+													<div class="agree_payment">위 주문내역을 확인 하였으며, 회원 본인은 결제에 동의합니다.</div>
+												</div>
+												<div class="area_paybtn">
+													<div class="form_field">
+														<button type="button" class="btn btn_primary btn_block">동의 후 123,456,789원 결제하기</button>
+													</div>
+												</div>
+											</div> <!-- //결제수단 선택 -->
+										</li>
+									</ul>
+								</div>
+							</div>
+						</div>
+						<div class="od_side">
+							<div class="area_order">
+								<div class="tit_box">
+									<h3 class="subH2">주문내역</h3>
+									<span> <em class="number" th:text="${delvTotCnt}"></em>개의 상품</span>
+								</div>
+								<div class="od_item_box">
+								
+									<!-- 전체배송목록 sort --> 
+									<th:block th:each="delvAllCart, i : ${delvAllCartList}">
+										<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
+											<div class="part_dlvr">
+												<th:block th:if="${i.index} == 0">
+													<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
+														<h4 class="subH3 mb20">STYLE24 총알배송<span>오늘 자정까지 도착</span></h4>
+													</th:block>
+												</th:block>
+												<th:block th:if="${i.index} == 1">
+													<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
+														<h4 class="subH3 mb20" id="wmsDelvTitle">STYLE24 일반배송</h4>
+													</th:block>
+												</th:block>
+												<th:block th:if="${i.index} == 2">
+													<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
+														<h4 class="subH3 mb20">업체직배송</h4>
+													</th:block>
+												</th:block>
+												<th:block th:if="${i.index} == 3">
+													<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
+														<h4 class="subH3 mb20">예약배송</h4>
+													</th:block>
+												</th:block>
+												
+												<div class="gd_list">
+													<th:block th:each="goods, i : ${delvAllCart}">
+														<div class="item_gd">
+															<input type="hidden" name="cartSq" 			th:value="${goods.cartSq}"/>
+															<input type="hidden" name="currPrice"		th:value="${goods.currPrice}"/>
+															
+															<input type="hidden" name="cpn1CpnSq" 		th:value="${goods.cpn1CpnSq}"/>
+															<input type="hidden" name="cpn1DcAmt" 		th:value="${goods.orgCurrPrice} - ${goods.currPrice}"/>
+															
+															<th:block th:if="${goods.applyQtySectionYn} == 'Y' and ${goods.qtyTmtbSq} > 0">
+																<input type="hidden" name="tmtb1Sq" 	th:value="${goods.qtyTmtbSq}"/>
+																<input type="hidden" name="tmtb1DcAmt" 	th:value="${goods.tmtb1DcAmt}"/>
+															</th:block>
+															<th:block th:if="${goods.applyQtySectionYn} != 'Y'">
+																<input type="hidden" name="tmtb1Sq" 	value="0"/>
+																<input type="hidden" name="tmtb1DcAmt" 	value="0"/>
+															</th:block>
+															
+															<th:block th:if="${goods.applyAmtSectionYn} == 'Y' and ${goods.amtTmtbSq} > 0">
+																<input type="hidden" name="tmtb2Sq" 	th:value="${goods.amtTmtbSq}"/>
+																<input type="hidden" name="tmtb2DcAmt" 	th:value="${goods.tmtb2DcAmt}"/>
+															</th:block>
+															<th:block th:if="${goods.applyAmtSectionYn} != 'Y'">
+																<input type="hidden" name="tmtb2Sq" 	value="0"/>
+																<input type="hidden" name="tmtb2DcAmt" 	value="0"/>
+															</th:block>
+															
+															<input type="hidden" name="goodsCpnSq" 		value=""/>
+															<input type="hidden" name="goodsCpnDcAmt" 	value=""/>
+															<input type="hidden" name="cartCpnSq" 		value=""/>
+															<input type="hidden" name="cartCpnDcAmt" 	value=""/>
+															
+															<figure>
+																<span class="thumb"><img src="/images/pc/thumb/tmp_odSide1.jpg" alt=""></span>
+																<figcaption>
+																	<div class="brand" th:text="${goods.brandEnm} + ' ' + ${goods.brandKnm}"></div>
+																	<div class="name" th:text="${goods.goodsNm}"></div>
+																	<div class="option" th:each="opt, index : ${goods.itemNmArr}">
+																		<span th:text="${goods.optCdArr[index.index]}"></span> 
+																		<span>수량:<em th:text="${goods.goodsQty}"></em>개</span>
+																	</div>
+																	<div class="price">
+																		<th:block th:if="${goods.tmtbDcAmt} > 0">
+																			<span class="selling_price"  th:text="${#numbers.formatInteger(goods.tmtbDcAmt, 1, 'COMMA')}"></span>
+																		</th:block>
+																		<th:block th:if="${goods.tmtbDcAmt} < 1">
+																			<span class="selling_price"  th:text="${#numbers.formatInteger(goods.currPrice, 1, 'COMMA')}"></span>
+																		</th:block>
+																	</div>
+																</figcaption>
+															</figure>
+														</div>
+													</th:block>
+												</div>
+											</div>
+										</th:block>
+									</th:block>
+									<!-- //전체배송목록 sort -->
+								</div>
+								
+								<div class="od_amount_box">
+									<dl>
+										<div>
+											<input type="hidden" name="goodsSumAmt" th:value="${orgGoodsSumAmt}"/>
+											<dt>상품금액</dt>
+											<dd id="goodsSumAmt" th:text="|${#numbers.formatInteger(orgGoodsSumAmt, 1, 'COMMA')}원|"></dd>
+										</div>
+										<div>
+											<input type="hidden" name="delvSumAmt" th:value="${sumDelvFee}"/>
+											<dt>배송비</dt>
+											<dd id="delvSumAmt" th:text="|${#numbers.formatInteger(sumDelvFee, 1, 'COMMA')}원|"></dd>
+										</div>
+										<div>
+											<input type="hidden" name="cpn1DcSumAmt" th:value="${cpn1DcSumAmt}"/>
+											<dt>할인금액</dt>
+											<th:block th:if="${cpn1DcSumAmt} > 0">
+												<dd><span class="disc_amount" id="cpn1DcSumAmt" th:text="|-${#numbers.formatInteger(cpn1DcSumAmt, 1, 'COMMA')}원|"></span></dd>
+											</th:block>
+											<th:block th:if="${cpn1DcSumAmt} < 1">
+												<dd><span class="disc_amount" id="cpn1DcSumAmt" th:text="|${#numbers.formatInteger(cpn1DcSumAmt, 1, 'COMMA')}원|"></span></dd>
+											</th:block>
+										</div>
+										<div>
+											<input type="hidden" name="tmtbDcSumAmt" th:value="${tmtbDcSumAmt}"/>
+											<dt>다다익선할인금액</dt>
+											<th:block th:if="${tmtbDcSumAmt} > 0">
+												<dd><span class="disc_amount" id="tmtbDcSumAmt" th:text="|-${#numbers.formatInteger(tmtbDcSumAmt, 1, 'COMMA')}원|"></span></dd>
+											</th:block>
+											<th:block th:if="${tmtbDcSumAmt} < 1">
+												<dd><span class="disc_amount" id="tmtbDcSumAmt" th:text="|${#numbers.formatInteger(tmtbDcSumAmt, 1, 'COMMA')}원|"></span></dd>
+											</th:block>
+										</div>
+										<div>
+											<input type="hidden" name="couponDcSumAmt" value="0"/>
+											<dt>쿠폰할인금액</dt>
+											<dd><span class="disc_amount" id="couponDcSumAmt"></span></dd>
+										</div>
+										<div>
+											<input type="hidden" name="prePntDcAmt" th:value="${prePntDcAmt}"/>
+											<dt>선포인트 사용</dt>
+											<th:block th:if="${prePntDcAmt} > 0">
+												<dd><span class="disc_amount" id="prePntDcSumAmt" th:text="|-${#numbers.formatInteger(prePntDcAmt, 1, 'COMMA')}원|"></span></dd>
+											</th:block>
+											<th:block th:if="${prePntDcAmt} < 1">
+												<dd><span class="disc_amount" id="prePntDcSumAmt" th:text="|${#numbers.formatInteger(prePntDcAmt, 1, 'COMMA')}원|"></span></dd>
+											</th:block>
+										</div>
+										<div>
+											<input type="hidden" name="pntDcAmt" value="0"/>
+											<dt>포인트 사용</dt>
+											<dd><span class="disc_amount" id="pntDcAmt">0원</span></dd>
+										</div>
+										<div>
+											<input type="hidden" name="gfcdUseAmt" value="0"/>
+											<dt>상품권 사용</dt>
+											<dd><span class="disc_amount" id="gfcdUseSumAmt">0원</span></dd>
+										</div>
+									</dl>
+								</div>
+								<div class="totalprice_box">
+									<dl>
+										<dt>총 결제 예정 금액</dt>
+										<dd data-weight="price" data-font="lato">
+											<span id="realOrdAmt"></span>원
+										</dd>
+									</dl>
+									<p class="info_point">스타일 포인트 
+										<input type="hidden" name="savePntSumAmt" th:value="${savePntSumAmt}"/>
+										<span class="save_point" id="savePntSumAmt" th:text="|${#numbers.formatInteger(savePntSumAmt, 1, 'COMMA')}P|"></span> 적립예정
+									</p>
+								</div>
+							</div>
+						</div>
+					</form>
+					<!-- // CONT-BODY -->
+				</div>
+			</div>
+		</div>
+	</div>
+</form>
+
+<!-- // container -->
+<footer id="footer"></footer>
+
+<!-- 배송지변경팝업 -->
+<div class="modal fade od_pop adrsChange_pop" id="adrsChangePop" tabindex="-1" role="dialog" aria-labelledby="adrsChangeLabel" aria-hidden="true"></div>
+
+<!-- 배송지수정팝업 -->
+<div class="modal fade od_pop adrsModify_pop" id="adrsModifyPop" tabindex="-1" role="dialog" aria-labelledby="adrsModifyLabel" aria-hidden="true"></div>
+
+<!-- 배송지추가팝업 -->
+<div class="modal fade od_pop adrsAdd_pop" id="adrsAddPop" tabindex="-1" role="dialog" aria-labelledby="adrsAddLabel" aria-hidden="true"></div>
+
+<!-- 배송요청사항수정 팝업 -->
+<div class="modal fade od_pop rqstModify_pop" id="rqstModifyPop" tabindex="-1" role="dialog" aria-labelledby="rqstModifyLabel" aria-hidden="true"></div>
+
+<!-- 사은품지급안내 팝업 -->
+<div class="modal fade od_pop infoGift_pop" id="infoGiftPop" tabindex="-1" role="dialog" aria-labelledby="infoGiftLabel" aria-hidden="true"></div>
+
+<script th:inline="javascript">
+
+$(document).ready( function() {
+	
+	// 배송지변경 팝업열기
+	$(document).on('click','#btn_adrsChange_pop',function(e){
+		$.ajax( {
+			type		: "POST",
+			url 		: '/order/delvAddrChangePop',
+			dataType 	: 'html',
+			success 	: function(result) {
+				if (result != null) {
+					$("#adrsChangePop").html(result);
+					$("#adrsChangePop").modal("show");
+				}
+			}
+		});
+		
+		return false;
+	});
+
+	// 배송지추가 팝업열기
+	$(document).on('click','#btn_addrAdd_pop',function(e){
+		$.ajax( {
+			type		: "POST",
+			url 		: '/order/delvAddrAddPop',
+			dataType 	: 'html',
+			success 	: function(result) {
+				if (result != null) {
+					$("#adrsAddPop").html(result);
+					$("#adrsAddPop").modal("show");
+				}
+			}
+		});
+		
+		return false;
+	});
+
+	// 배송지수정 팝업열기
+	$("#btn_addrModify_pop").on("click", function(e){
+		$.ajax( {
+			type		: "POST",
+			url 		: '/order/delvAddrModifyPop',
+			dataType 	: 'html',
+			success 	: function(result) {
+				if (result != null) {
+					$("#adrsModifyPop").html(result);
+					$("#adrsModifyPop").modal("show");
+				}
+			}
+		});
+		
+		return false;
+	});
+
+	// 배송요청사항 팝업열기
+	$("#btn_rqstModify_pop").on("click", function(e){
+		var jsonObj = new Object();
+		jsonObj.delvMemo = $("input[name='delvMemo']").val();
+		
+		$.ajax({
+			type		: "POST",
+			url 		: "/order/delvMemoChangePop",
+			data		: jsonObj,
+			dataType 	: "html",
+			success 	: function(result) {
+				if (result != null) {
+					$("#rqstModifyPop").html(result);
+					$("#rqstModifyPop").modal("show");
+				}
+			}
+		});
+		
+		return false;
+	});
+		
+	// 해외배송 입력
+	$(document).on('change','.odPayment .area_overseas #rdi-overs1', function(e){
+		$('.info_box.overs2').hide();
+		$('.info_box.overs1').show();
+		return false;
+	}).on('change','.odPayment .area_overseas #rdi-overs2', function(e){
+		$('.info_box.overs1').hide();
+		$('.info_box.overs2').show();
+		return false;
+	});
+	
+	// 사은품지급안내 팝업열기
+	$("#btn_infoGift_pop").on("click",function(e){
+		$.ajax({
+			type		: "POST",
+			url 		: "/order/freegiftInfoPop",
+			dataType 	: "html",
+			success 	: function(result) {
+				if (result != null) {
+					$("#infoGiftPop").html(result);
+					$("#infoGiftPop").modal("show");
+				}
+			}
+		});
+		
+		return false;
+	});
+
+	// 할인쿠폰 확인
+	$(document).on('click','.odPayment .area_seldiscount .btn_coupon_toggle',function(e){
+		$('.coupon_list').toggle();
+		$(this).toggleClass('on');
+		return false;
+	});
+
+	// 결제수단 선택
+	$(document).on('change','.odPayment .area_paymethod .paymethod_radio input',function(e){
+		$('.radio_blk').removeClass('on');
+		$(this).parents('.radio_blk').addClass('on');
+		$(this).parents('.radio_blk').find('.paymethod_box').show();
+		$(this).parents('.radio_blk').siblings('div').find('.paymethod_box').hide();
+
+		var paymethodlabel =  $(this).prop('labels');
+		$(this).parents('li').find('.fold_head .data span').text($(paymethodlabel).text());
+
+		// 간편결제 카드추가 슬라이드
+		var swiper = new Swiper('.paymethod_box .card_quickpay .list_card', {
+			slidesPerView: 'auto',
+			spaceBetween: 160,
+			centeredSlides: true,
+			navigation: {
+				nextEl: '.list_card .swiper-button-next',
+				prevEl: '.list_card .swiper-button-prev',
+			},
+		});
+		return false;
+	});
+
+	// STYLE24 간편결제 배너닫기
+	$(document).on('click','.odPayment .area_paymethod .quickpay_bnr .btn_close_bnr',function(e){
+		$('.quickpay_bnr').hide();
+	});
+
+	// 결제수단 선택 > 즐겨찾기 추가시 
+	$(document).on('click','.odPayment .area_paymethod .paymethod_box .card .etc .btn_favorcard',function(e){
+		$(this).toggleClass('active');
+		return false;
+	});
+
+	// 결제수단 > 일반결제> 실시간계좌이체 선택시            
+	$(document).on('change','.odPayment input:radio[name=rdi-paynormal]',function(e){
+		var paynormalValue = $(this).attr('id');
+		
+		if (paynormalValue == 'rdi-paynormal2') {
+			$('.area_paymethod .agree_insurance').show();
+		} else {
+			$('.area_paymethod .agree_insurance').hide();
+		}
+		return false;
+	});
+
+	// 개인정보동의 열고닫기
+	$(document).on('click','.area_paymentinfo .payinfo_blk a',function(e){		
+		e.preventDefault();
+		$(this).parents('.payinfo_blk').toggleClass('on');
+		var privacyToggle = $(this).find('span');
+		$(privacyToggle).text($(privacyToggle).text() == '보기' ? '닫기' : '보기');
+		return false;
+	});
+
+	// 간편결제등록 > STEP1.이용약관 팝업열기
+	$(document).on('click','.btn_addcard',function(e){
+		$("#qPayAgree_pop").modal("show");
+		return false;
+	});
+
+	// 간편결제등록 > STEP1.이용약관 체크
+	$(document).on('click','.area_QpayCk .agr_select button',function(e){
+		$(this).parents('.area_QpayCk').find('.info_agrQpay').toggle();
+		var payagrToggle = $(this).find('span');
+		$(payagrToggle).text($(payagrToggle).text() == '약관열기' ? '약관닫기' : '약관열기');
+		return false;
+	});
+
+	// 간편결제등록 > STEP1.이용약관 체크박스 전체선택
+	$(document).on('click','#chk-Qpay-agrAll',function(e){
+		$(this).parents(".qPayAgree_pop").find('.agree_Qpay input').prop("checked", $(this).is(":checked"));
+	});
+
+	// 간편결제등록 > STEP1.이용약관 체크박스 개별선택
+	$(document).on("click", ".agree_Qpay input",function(e){
+		var is_checked = true;
+		$(".agree_Qpay input").each(function(){
+			is_checked = is_checked && $(this).is(":checked");
+		});
+		$("#chk-Qpay-agrAll").prop("checked", is_checked);
+	});
+
+	// 간편결제등록 > 본인인증 팝업열기
+	$(document).on('click','#btn_qPayidConfirm_pop',function(e){
+		$("#qPayidConfirm_pop").modal("show");
+		return false;
+	});
+
+});
+</script>
+
+<script th:inline="javascript">
+	// 배송관련정보 변수선언
+	var cartGoodsList		= [[${cartGoodsList}]]			// 배송목록
+	var wmsCnt 				= [[${wmsCnt}]];				// 자사 일반,촐알 배송건수
+	var resCnt 				= [[${resCnt}]];				// 자사 예약 배송건수
+	var delvCnt 			= [[${delvCnt}]];				// 입전 일반 배송건수
+	var shotDelvYn			= [[${shotDelvYn}]];			// 총알배송여부
+	var orgSumDelvFee		= [[${sumDelvFee}]];			// 최초배송비합계
+	var prePntDcAmt			= [[${prePntDcAmt}]];			// 선포인트사용가능금액
+	
+	// 할인관련정보 변수선언
+	var freegiftList		= [[${freegiftList}]];			// 사은품 프로모션 목록
+	var freegiftGoodsList	= [[${freegiftGoodsList}]];		// 사은품 프로모션 상품 목록
+
+	// 총알배송가능 지역, 총알배송 가능 시간 체크
+	var fnGetDailyDeliveryCheck = function () {
+		// TODO
+		var jsonObj 	= {"zipNo" : 12345};
+		var jsonData 	= JSON.stringify(jsonObj);
+
+		gagajf.ajaxJsonSubmit(
+			"/order/getDailyDeliveryCheck"
+			, jsonData
+			, function (result) {
+				// 자사몰 일반배송
+				$("#shotDelv").text(0);
+				$("#wmsDelv").text(wmsCnt);
+				$("#wmsDelvTitle").css("display", "block");
+				$("#shotDelvTitle").css("display", "none");
+				$(".tag_stype2").css("display", "none");
+
+				// 자사몰 총알배송
+				if (shotDelvYn == "Y") {
+					if (parseInt(result) > 0) {
+						$("#shotDelv").text(wmsCnt);
+						$("#wmsDelv").text(0);
+						
+						$("#wmsDelvTitle").css("display", "none");
+						$("#shotDelvTitle").css("display", "block");
+						$(".tag_stype2").css("display", "block");
+					}
+				}
+			}
+		)
+	}
+
+</script>
+
+<script th:inline="javascript">
+	var custCpnSq 		= 0;
+	var cpnIndex		= 0;
+	var cpnApplyTemp	= false;
+	
+	// 컨텐츠 호출
+	$(document).ready( function() {
+		// 1. 총알배송가능 지역, 총알배송 가능 시간 체크
+		fnGetDailyDeliveryCheck();
+		
+		// 2. 쿠폰 SELECT BOX 기능 설정(js적용)
+		$('.select_custom.type1').each(function(index){
+			var selecter01 	= new sCombo($(this));
+			
+			// 선택박스 버튼기능 구현
+			$(this).find("ul li").each(function(i){
+				
+				// SELECT BOX 버튼 기능 설정
+				$(this).on("click", function(){
+					// 쿠폰 선택없음
+					if ($(this).prop("value") == 0) {
+						// 쿠폰 선택없음
+						cpnApplyDel($(this));
+					}
+					// 쿠폰선택
+					else {
+						// 쿠폰중복체크 후 적용
+						if (custCpnDuplicationCheck($(this).prop("value"), index)) {
+							// 쿠폰적용
+							custCpnApply($(this));
+						} else {
+							alert("이미 적용된 쿠폰 입니다.");
+							
+							// 쿠폰적용불가
+							custCpnNotApply($(this));
+						}
+						
+						// 쿠폰할인금액 SUM
+						custCpnSumAmtCal();
+						
+						// 최대할인혜택적용 체크해제
+						if ($("#chk-maxdisc").is(":checked")) {
+							$("#chk-maxdisc").attr("checked", false);
+						}
+					}
+				});
+			});
+		});
+		
+		
+		// 4 쿠폰적용초기화(할인율최고)
+		custCpnInit();
+	});
+	
+	// 사은품선택 라디오 버튼 기능
+	$(".freegiftRdo").on("click", function() {
+		var total_gift 		= 0;
+		var total_deduct 	= 0;
+		
+		$(".freegiftRdo").each(function(){
+			// 라디오버튼 사은품 체크
+			if ($(this).is(":checked")) {
+				// 수령거부가 아닐때 체크
+				if ($(this).val() != "noSel") {
+					total_gift 		+= 1;
+					total_deduct 	+= parseInt($(this).attr("usepoint"));
+				}
+			}
+		});
+		
+		$(".total_gift").text(total_gift);			// 사은품총선택개수
+		$(".total_deduct").text(total_deduct);		// 사은품총사용포인트
+	});
+	
+	// 프로모션 쿠폰 적용 함수
+	function serialCpnApply() {
+		let data = {
+			cartSq	: $().val(),
+			rdCpnNm : $("#payForm #serialCpnNm").val()
+		}
+
+		let jsonData = JSON.stringify(data);
+
+		$.ajax( {
+			type			: "POST",
+			url 			: '/cart/list/serialCpnApply',
+			contentType		: 'application/json',
+			dataType 		: 'json',
+			data 			: jsonData,
+			success 		: function(result) {
+				// SUCCESS
+				// 성공일때는 쿠폰정보 및 포인트 정보 reset
+				if (result.serialCpnInfo.result == "SUCCESS") {
+					
+				} else {
+					alert(result.serialCpnInfo.result);
+				}
+			}
+		});
+	}
+	
+	// 쿠폰 최대할인금액 초기화 버튼 설정
+	$("#chk-maxdisc").on("click", function(){
+		if ($(this).is(":checked")) {
+			custCpnInit();
+		}
+	});
+	
+	// 쿠폰할인적용 삭제 버튼
+	$(".btn_del_coupon").on("click", function(){
+		//선택없음선택
+		$(this).parent().parent().find("ul li").each(function(i){
+			if (i == 0) {
+				// 쿠폰 선택없음
+				cpnApplyDel($(this));
+			}
+		});
+	});
+	
+	// 쿠폰 최대할인율 쿠폰적용
+	var custCpnInit = function() {
+		
+		// 쿠폰적용없음적용
+		$(".select_custom.type1").each(function(index){
+			// select box 쿠폰 적용
+			var cpnCartSq = $(this).find("input[name='cpnCartSq']").val();
+			
+			// 장바구니시퀀스 체크
+			$("input[name='cartSq']").each(function(){
+				if (cpnCartSq == $(this).val()) {
+					$(this).parent().find("input[name='goodsCpnSq']").val("0");			// 상품쿠폰시퀀스
+					$(this).parent().find("input[name='goodsCpnDcAmt']").val("0");		// 상품쿠폰할인금액
+				}
+			});
+			
+			$(this).find("input[name='custCpnSq']").val("0");
+			$(this).find("input[name='cpnDcAmt']").val("0");
+			
+			$(this).find(".select").text("선택없음");
+			$(this).find(".cp_discount").css("display", "none");
+		});
+		
+		// 최대할인율 쿠폰적용
+		$('.select_custom.type1').each(function(index){
+			cpnIndex 		= 0;
+			cpnApplyTemp 	= false;
+			
+			// select 박스 반복문 실행
+			$(this).find("ul li").each(function(i){
+				cpnIndex++;
+				
+				// 1이상부터 중복 체크
+				if (cpnApplyTemp == false) {
+					if (cpnIndex > 1) {
+						if (custCpnDuplicationCheck($(this).prop("value"), index)) {
+							// 쿠폰적용
+							custCpnApply($(this));
+							// 쿠폰할인적용
+							cpnApplyTemp = true;
+						}
+					}
+				}
+			});
+		});
+		
+		// 쿠폰할인금액 SUM
+		custCpnSumAmtCal();
+	}
+	
+	// 쿠폰중복사용체크
+	var custCpnDuplicationCheck = function(custCpnSq, index) {
+		var selCustSq 	= 0;
+		var cnt 		= 0;
+
+		// 쿠폰중본사용체크
+		$("input[name='custCpnSq']").each(function(i){
+			if (index != i) {
+				selCustSq = $(this).val();
+				if (selCustSq == custCpnSq) {
+					cnt++;
+				}
+			}
+		});
+		
+		// 쿠폰적용불가
+		if (cnt > 0) {
+			return false;
+		}
+		// 쿠폰적용가능
+		else {
+			return true;
+		}
+	}
+	
+	// 쿠폰중복체크 후 적용가능
+	var custCpnApply = function(obj) {
+		// select box 쿠폰 적용
+		var cpnType 	= obj.parent().parent().find("input[name='cpnType']").val();
+		
+		// 상품쿠폰적용
+		if (cpnType == "goodsCpn") {
+			// 적용된 할인금액 text 설정 
+			var dcAmtStr = "- " + parseInt(obj.attr("data")).addComma() + " 원 할인적용";
+			obj.parent().parent().parent().parent().parent().find(".cp_amount").text(dcAmtStr);
+			
+			var cpnCartSq 	= obj.parent().parent().find("input[name='cpnCartSq']").val();
+			
+			// 장바구니상품시퀀스 체크
+			$("input[name='cartSq']").each(function(){
+				if (cpnCartSq == $(this).val()) {
+					$(this).parent().find("input[name='goodsCpnSq']").val(obj.prop("value"));		// 상품쿠폰시퀀스
+					$(this).parent().find("input[name='goodsCpnDcAmt']").val(obj.attr("data"));		// 상품쿠폰할인금액
+				}
+			});
+			
+			obj.parent().parent().find("input[name='cpnDcAmt']").val(obj.attr("data"));
+		} 
+		// 장바구니쿠폰적용
+		else if (cpnType == "cartCpn") {
+			var dcWay 				= obj.parent().find("input[name='dcWay']").val();
+			var dcVal 				= obj.parent().find("input[name='dcVal']").val();
+			var cartCpnDcSumAmt		= 0;
+			var tempSumAmt			= 0;
+			var applyGoodsCnt		= 0;
+			var leftAmt				= 0;
+			var index				= 0;
+			
+			// 장바구니쿠폰 해당 장바구니상품들 할인가 적용
+			obj.find("input[name='cartCpnCartSq']").each(function(){
+				var cartCpnCartSq 		= $(this).val();
+				var cartCpnDcAmt		= 0;
+				
+				// 장바구니시퀀스 체크
+				$("input[name='cartSq']").each(function(){
+					if (cartCpnCartSq == $(this).val()) {
+						var currPrice 		= parseInt($(this).parent().find("input[name='currPrice']").val());
+						var tmtb1DcAmt 		= parseInt($(this).parent().find("input[name='tmtb1DcAmt']").val());
+						var tmtb2DcAmt 		= parseInt($(this).parent().find("input[name='tmtb2DcAmt']").val());
+						var goodsCpnDcAmt 	= parseInt($(this).parent().find("input[name='goodsCpnDcAmt']").val());
+						
+						var tempAmt 		= currPrice - tmtb1DcAmt - tmtb2DcAmt - goodsCpnDcAmt;
+						tempSumAmt			= tempSumAmt + tempAmt; 
+						
+						// 할인율일때 할인금액 
+						if (dcWay == "G240_20") {
+							cartCpnDcAmt = (tempAmt * dcVal) / 100;
+							cartCpnDcSumAmt = cartCpnDcSumAmt + cartCpnDcAmt;
+							
+							$(this).parent().find("input[name='cartCpnSq']").val(obj.prop("value"));
+							$(this).parent().find("input[name='cartCpnDcAmt']").val(cartCpnDcAmt);
+						}
+						
+						applyGoodsCnt++;
+					}
+				});
+			});
+			
+			// 금액일때 할인금액 적용
+			if (dcWay == "G240_10") {
+				cartCpnDcSumAmt = dcVal;
+				leftAmt			= dcVal;
+				index			= 0;
+				
+				// 장바구니쿠폰 해당 장바구니상품들 할인가 적용
+				obj.find("input[name='cartCpnCartSq']").each(function(){
+					var cartCpnCartSq 		= $(this).val();
+					var cartCpnDcAmt		= 0;
+										
+					// 장바구니시퀀스 체크
+					$("input[name='cartSq']").each(function(){
+						if (cartCpnCartSq == $(this).val()) {
+							index++;
+							
+							var currPrice 		= parseInt($(this).parent().find("input[name='currPrice']").val());
+							var tmtb1DcAmt 		= parseInt($(this).parent().find("input[name='tmtb1DcAmt']").val());
+							var tmtb2DcAmt 		= parseInt($(this).parent().find("input[name='tmtb2DcAmt']").val());
+							var goodsCpnDcAmt 	= parseInt($(this).parent().find("input[name='goodsCpnDcAmt']").val());
+							
+							var tempAmt 		= currPrice - tmtb1DcAmt - tmtb2DcAmt - goodsCpnDcAmt;
+							var tempDiv 		= parseInt((tempAmt / tempSumAmt) * 100);
+							var cartCpnDcAmt	= 0;
+					
+							if (index == applyGoodsCnt) {
+								cartCpnDcAmt 	= leftAmt;
+							} else {
+								cartCpnDcAmt	= parseInt((cartCpnDcSumAmt * tempDiv) / 100);
+								leftAmt 		= leftAmt - cartCpnDcAmt;
+							}
+							
+							$(this).parent().find("input[name='cartCpnSq']").val(obj.prop("value"));
+							$(this).parent().find("input[name='cartCpnDcAmt']").val(cartCpnDcAmt);
+						}
+					});
+				});
+			} 
+			
+			obj.parent().parent().find("input[name='cpnDcAmt']").val(cartCpnDcSumAmt);
+			
+			var dcAmtStr = "- " + cartCpnDcSumAmt.addComma() + " 원 할인적용";
+			obj.parent().parent().parent().parent().parent().find(".cp_amount").text(dcAmtStr);
+		}
+		// 배송비쿠폰적용
+		else if (cpnType == "delvCpn") {
+			// 적용된 할인금액 text 설정 
+			var dcAmtStr = "- " + parseInt(obj.attr("data")).addComma() + " 원 할인적용";
+			obj.parent().parent().parent().parent().parent().find(".cp_amount").text(dcAmtStr);
+			
+			var cpnCartSq 	= obj.parent().parent().find("input[name='cpnCartSq']").val();
+			
+			obj.parent().parent().find("input[name='cpnDcAmt']").val(obj.attr("data"));
+			obj.parent().parent().find("input[name='delvFeeCd']").val(obj.attr("delvfeecd"));
+		}
+		
+		// select box 쿠폰 적용 (공통적용)
+		obj.parent().parent().find("input[name='custCpnSq']").val(obj.prop("value"));
+		obj.parent().parent().find(".select").text(obj.text());
+		
+		// 선택된 할인금액 노출
+		obj.parent().parent().parent().parent().parent().find(".cp_discount").css("display", "block");
+	}
+	
+	// 쿠폰중복체크 후 적용불가
+	var custCpnNotApply = function(obj) {
+		// 이전에 등록된 쿠폰시퀀스  
+		var custCpnSq = obj.parent().parent().find("input[name='custCpnSq']").val();
+
+		// 이전에 등록된 쿠폰시퀀스 비교후 데이타 원복
+		obj.parent().find("li").each(function(){
+			if ($(this).prop("value") == custCpnSq) {
+				$(this).parent().parent().find(".select").text($(this).text());
+				
+				if (custCpnSq == 0) {
+					$(this).parent().parent().parent().parent().parent().find(".cp_discount").css("display", "none");
+				} else {
+					$(this).parent().parent().parent().parent().parent().find(".cp_discount").css("display", "block");
+				}
+			}
+		});
+	}
+	
+	// 쿠폰 선택없음 기능 구현
+	var cpnApplyDel = function(obj) {
+		// 쿠폰타입(상품쿠폰, 장바구니쿠폰, 배송비쿠폰)
+		var cpnType = obj.parent().parent().find("input[name='cpnType']").val();
+		
+		// 상품쿠폰적용
+		if (cpnType == "goodsCpn") {
+			// select box 쿠폰 적용
+			var cpnCartSq = obj.parent().parent().find("input[name='cpnCartSq']").val();
+			
+			// 장바구니시퀀스 체크
+			$("input[name='cartSq']").each(function(){
+				if (cpnCartSq == $(this).val()) {
+					$(this).parent().find("input[name='goodsCpnSq']").val("0");			// 상품쿠폰시퀀스
+					$(this).parent().find("input[name='goodsCpnDcAmt']").val("0");		// 상품쿠폰할인금액
+				}
+			});
+		}
+		// 장바구니쿠폰적용
+		else if (cpnType == "cartCpn") {
+			// 장바구니쿠폰 시퀀스 0, 장바구니할인금액 0
+			$("input[name='cartSq']").each(function(){
+				$(this).parent().find("input[name='cartCpnSq']").val("0");
+				$(this).parent().find("input[name='cartCpnDcAmt']").val("0");
+			});
+		}
+		// 배송비쿠폰적용
+		else if (cpnType == "delvCpn") {
+			// 장바구니쿠폰 시퀀스 0, 장바구니할인금액 0
+			$("input[name='cartSq']").each(function(){
+				$(this).parent().find("input[name='delvFeeCd']").val("0");
+			});
+		}
+		
+		obj.parent().parent().find("input[name='custCpnSq']").val("0");
+		obj.parent().parent().find("input[name='cpnDcAmt']").val("0");
+
+		obj.parent().parent().find(".select").text("선택없음");
+		obj.parent().parent().parent().parent().parent().find(".cp_discount").css("display", "none");
+		
+		// 쿠폰할인금액 SUM
+		custCpnSumAmtCal();
+		
+		// 최대할인혜택적용 체크해제
+		if ($("#chk-maxdisc").is(":checked")) {
+			$("#chk-maxdisc").attr("checked", false);
+		}
+	}
+	
+	// 쿠폰할인금액합계설정
+	var custCpnSumAmtCal = function() {
+		var cpnDcSumAmt = 0;
+		var cpnApplyCnt = 0;
+		
+		$("input[name='cpnDcAmt']").each(function(){
+			cpnDcSumAmt = cpnDcSumAmt + parseInt($(this).val());
+			
+			// 적용된 쿠폰 수량
+			if (parseInt($(this).val()) > 0) {
+				cpnApplyCnt++;
+			}
+		});
+		
+		// 쿠폰영역
+		$(".maxdisc_amount").text("(-" + cpnDcSumAmt.addComma() + "원)"); // 쿠폰할인금액합계
+		$("#cpnApplyCnt").text(cpnApplyCnt + "장");
+		
+		// 상품목록영역
+		$("#couponDcSumAmt").text("-" + cpnDcSumAmt.addComma() + "원"); // 쿠폰할인금액합계
+		$("input[name='couponDcSumAmt']").val(cpnDcSumAmt);
+		
+		// 배송비할인적용
+		$("input[name='cpnType']").each(function(){
+			if ($(this).val() == "delvCpn") {
+				sumDelvFee = parseInt(orgSumDelvFee) - parseInt($(this).parent().find("input[name='cpnDcAmt']").val());
+				
+				// 최종배송비
+				$("#delvSumAmt").text(sumDelvFee.addComma() + "원");
+				$("input[name='delvSumAmt']").val(sumDelvFee);
+			}
+		});
+		
+		var goodsSumAmt 		= parseInt($("input[name='goodsSumAmt']").val());
+		var delvSumAmt 			= parseInt($("input[name='delvSumAmt']").val());
+		var cpn1DcSumAmt 		= parseInt($("input[name='cpn1DcSumAmt']").val());
+		var tmtbDcSumAmt 		= parseInt($("input[name='tmtbDcSumAmt']").val());
+		var couponDcSumAmt 		= parseInt($("input[name='couponDcSumAmt']").val());
+		var prePntDcAmt 		= parseInt($("input[name='prePntDcAmt']").val());
+		var pntDcAmt 			= parseInt($("input[name='pntDcAmt']").val());
+		var gfcdUseAmt 			= parseInt($("input[name='gfcdUseAmt']").val());
+		
+		// 실결제금액(PG)
+		var realOrdAmt			= (goodsSumAmt + delvSumAmt) - (cpn1DcSumAmt + tmtbDcSumAmt + couponDcSumAmt + prePntDcAmt) - (pntDcAmt + gfcdUseAmt);
+		$("#realOrdAmt").text(realOrdAmt.addComma());
+		
+		// 적립예정포인트
+		var savePntSumAmt		= parseInt($("input[name='savePntSumAmt']").val());
+		var tempSavePnt			= savePntSumAmt - prePntDcAmt;
+		
+		$("#savePntSumAmt").text(tempSavePnt.addComma()+"P");
+	};
+</script>
+</th:block>
+</body>
+</html>

+ 51 - 0
src/main/webapp/WEB-INF/views/web/pg/kcpOrderWeb.html

@@ -0,0 +1,51 @@
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+	<!-- 선택, 상점이름(영문으로 작성권장) -->
+	<input type="hidden" name="site_name" th:value="${@environment.getProperty('pg.kcp.site.name')}" />
+	<!-- 필수, 상점코드 -->
+	<input type="hidden" name="site_cd" th:value="${@environment.getProperty('pg.kcp.site.cd')}" />
+
+	<input type="hidden" name="payco_redirect"	value="Y" />				<!-- 페이코 진행시 -->
+	<input type="hidden" name="pay_mthod"		value="100000000000" />		<!-- 페이코 진행시 -->
+	<input type="hidden" name="req_tx"			value="pay" />				<!-- 필수, 요청의 종류를 구분하는 변수 결제요청페이지의 경우 ‘pay’로 설정 -->
+	<input type="hidden" name="ordr_idxx"		value="100" />				<!-- 필수, 상점 관리 주문번호 (유니크한 값 설정 권장) -->
+	<input type="hidden" name="pay_method"		value="100000000000" />		<!-- 필수, 결제수단코드(신용카드 : 100000000000, 계좌이체 : 010000000000, 가상계좌 : 001000000000, 포인트 : 000100000000, 휴대폰 : 000010000000, 상품권 : 000000001000, ARS : 000000000010) -->
+	<input type="hidden" name="good_name"		value="TEST NAME" />		<!-- 필수, 상품명 -->
+	<input type="hidden" name="good_mny"		value="2000" />				<!-- 필수, 주문요청금액 (※ 화폐단위가 ‘USD’ 일 경우, Cent까지 설정 ex ) $10.55 일 경우 콤마를 뺀 1055, $100 일 경우 10000로 설정 -->
+	<input type="hidden" name="buyr_name"		value="LTY" />				<!-- 필수, 주문자 이름 -->
+	<input type="hidden" name="buyr_mail"		value="test@test.com" />	<!-- 선택, 주문자 이메일 -->
+	<input type="hidden" name="buyr_tel1"		value="" />					<!-- 선택, 주문자 전화번호 -->
+	<input type="hidden" name="buyr_tel2"		value="010-7111-4489" />	<!-- 필수, 주문자 휴대폰번호 -->
+	<input type="hidden" name="currency"		value="WON" />				<!-- 필수, 원화 : WON / 달러 : USD -->
+	<input type="hidden" name="shop_user_id"	value="xodud1202" />		<!-- 필수, 쇼핑몰회원ID 기관에 따라 RM 조치를 위해 쇼핑몰 관리 ID를 필수로 요청 -->
+
+	<input type="hidden" name="quotaopt"        value="12"/>				<!-- 최대 할부 개월 수(0 ~ 18까지 설정 가능) -->
+
+	<!--
+		  ※ 필 수
+			  필수 항목 : 표준웹에서 값을 설정하는 부분으로 반드시 포함되어야 합니다
+			  값을 설정하지 마십시오
+	-->
+	<input type="hidden" name="res_cd"          value=""/>
+	<input type="hidden" name="res_msg"         value=""/>
+	<input type="hidden" name="enc_info"        value=""/>
+	<input type="hidden" name="enc_data"        value=""/>
+	<input type="hidden" name="ret_pay_method"  value=""/>
+	<input type="hidden" name="tran_cd"         value=""/>
+	<input type="hidden" name="use_pay_method"  value=""/>
+
+	<!-- 주문정보 검증 관련 정보 : 표준웹 에서 설정하는 정보입니다 -->
+	<input type="hidden" name="ordr_chk"        value=""/>
+
+	<!--  현금영수증 관련 정보 : 표준웹 에서 설정하는 정보입니다 -->
+	<input type="hidden" name="cash_yn"         value=""/>
+	<input type="hidden" name="cash_tr_code"    value=""/>
+	<input type="hidden" name="cash_id_info"    value=""/>
+
+	<!-- 2012년 8월 18일 전자상거래법 개정 관련 설정 부분 -->
+	<!-- 제공 기간 설정 0:일회성 1:기간설정(ex 1:2012010120120131)  -->
+	<input type="hidden" name="good_expr" value="0">
+
+	<!-- 표준웹 설정 정보입니다(변경 불가) -->
+	<input type="hidden" name="module_type" th:value="${@environment.getProperty('pg.kcp.module.type')}" />
+
+</html>

+ 2 - 1
src/main/webapp/ux/pc/css/layout.css

@@ -2278,6 +2278,7 @@ body {min-width:1460px; overflow-x:auto;}
 
 	.container .wrap .content.wide.pd_clickother {margin-top:120px;}
 
+	
 	/* pd_popup */
 	.modal.pd_pop dl div,
 	.modal.pd_pop dl dt,
@@ -4383,4 +4384,4 @@ body {min-width:1460px; overflow-x:auto;}
 		#quick_menu .category .quick_cate_txt {border-top: 1px solid #ddd; padding:30px;}
 		#quick_menu .category .quick_cate_txt a {display: inline-block; position: relative; font-size: 14px; color: #888; margin-right: 20px;}
 		#quick_menu .category .quick_cate_txt a:after {content:''; position: absolute; top: 2px; right: -12px; width: 1px; height: 8px; background: #ddd;}
-		#quick_menu .category .quick_cate_txt a:last-child:after {display: none;}
+		#quick_menu .category .quick_cate_txt a:last-child:after {display: none;}

+ 41 - 15
src/main/webapp/ux/style24_link.js

@@ -38,9 +38,9 @@ const _PAGE_MYPAGE_ORDER_LIST = _frontUrl + "/mypage/order/list/form";			// 마
 const _PAGE_MYPAGE_ORDER_DETAIL = _frontUrl + "/mypage/order/detail/form/";		// 마이페이지 > 주문/배송 상세
 const _PAGE_MYPAGE_CRS_LIST = _frontUrl + "/mypage/crs/list/form";				// 마이페이지 > 취소/교환/반품 목록
 const _PAGE_MYPAGE_RESTOCK = _frontUrl + "/mypage/restock/form";				// 마이페이지 > 재입고 알림 내역
-const _PAGE_MYPAGE_COUPON = _frontUrl + "/mypage/coupon/form";					// 마이페이지 > 재입고 알림 내역
-const _PAGE_MYPAGE_POINT = _frontUrl + "/mypage/point/form";					// 마이페이지 > 재입고 알림 내역
-const _PAGE_MYPAGE_GIFTCARD = _frontUrl + "/mypage/gift/card/form";				// 마이페이지 > 재입고 알림 내역
+const _PAGE_MYPAGE_COUPON = _frontUrl + "/mypage/coupon/form";					// 마이페이지 > 쿠폰
+const _PAGE_MYPAGE_POINT = _frontUrl + "/mypage/point/form";					// 마이페이지 > 포인트
+const _PAGE_MYPAGE_GIFTCARD = _frontUrl + "/mypage/gift/card/form";				// 마이페이지 > 상품권
 const _PAGE_MYPAGE_REVIEW = _frontUrl + "/mypage/review/form";					// 마이페이지 > 리뷰
 const _PAGE_MYPAGE_DELIVERY_ADDR = _frontUrl + "/mypage/delivery/addr/form";	// 마이페이지 > 배송지 관리
 const _PAGE_MYPAGE_WISHLIST = _frontUrl + "/mypage/wish/list/form";				// 마이페이지 > 위시리스트
@@ -216,11 +216,11 @@ function cfnAddCart(cartList) {
  * @author : jsshin
  */
 var cfnLoginNaver = function (requestGb, chkRememberMe) {
-	var actionUrl = _frontUrl + '/signin/naverlogin?rememberMe=' + chkRememberMe;
-	var popupHeight = 800;
-	var popupWidth = 600;
-	var popupX = (window.screen.width / 2) - (popupWidth / 2);
-	var popupY = (window.screen.height / 3) - (popupHeight / 3);
+	let actionUrl = _frontUrl + '/signin/naverlogin?rememberMe=' + chkRememberMe;
+	let popupHeight = 800;
+	let popupWidth = 600;
+	let popupX = (window.screen.width / 2) - (popupWidth / 2);
+	let popupY = (window.screen.height / 3) - (popupHeight / 3);
 	if ('P' === _frontGb) {
 		window.open(actionUrl, 'naverLogin', 'top=' + popupY + ',left=' + popupX + ',height=' + popupHeight + ',width=' + popupWidth + ', fullscreen=no,menubar=no,status=no,toolbar=no,titlebar=yes,location=no,scrollbars=yes', '');
 	} else {
@@ -242,15 +242,41 @@ var cfnLoginNaver = function (requestGb, chkRememberMe) {
  * @author : jsshin
  */
 var cfnLoginKakao = function (requestGb, chkRememberMe) {
-	var actionUrl = _frontUrl + '/signin/kakologin?rememberMe=' + chkRememberMe;
-	var popupWidth = 450;
-	var popupHeight = 700;
-	var popupX = (window.screen.width / 2) - (popupWidth / 2);
-	var popupY = (window.screen.height / 3) - (popupHeight / 3);
+	let actionUrl = _frontUrl + '/signin/kakologin?rememberMe=' + chkRememberMe;
+	let popupWidth = 450;
+	let popupHeight = 700;
+	let popupX = (window.screen.width / 2) - (popupWidth / 2);
+	let popupY = (window.screen.height / 3) - (popupHeight / 3);
 	if ('P' === _frontGb) {
-		window.open(actionUrl, 'kakaoLogin', 'top=' + popupY + ',left=' + popupX + ',height=' + popupHeight + ',width=' + popupWidth + ', fullscreen=no,menubar=no,status=no,toolbar=no,titlebar=yes,location=no,scrollbars=yes', '');
+		//window.open(actionUrl, 'kakaoLogin', 'top=' + popupY + ',left=' + popupX + ',height=' + popupHeight + ',width=' + popupWidth + ', fullscreen=no,menubar=no,status=no,toolbar=no,titlebar=yes,location=no,scrollbars=yes', '');
 	} else {
-		document.location.href = actionUrl + '&requestGb=' + requestGb;
+		//document.location.href = actionUrl + '&requestGb=' + requestGb;
+	}
+};
+
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : Yes24 로그인
+ * <pre>
+ *     cfnLoginYes24();
+ *     호출된 페이지에서
+ *     PC: fnSnsSigninCallback(userInfo) 콜백 함수 생성 후 가지고 호출 처리
+ *     MO :
+ * </pre>
+ * @since  : 2021/02/23
+ * @author : jsshin
+ */
+var cfnLoginYes24 = function (requestGb, chkRememberMe) {
+	let actionUrl = _frontUrl + '/signin/yes24login?rememberMe=' + chkRememberMe;
+	let popupWidth = 484;
+	let popupHeight = 390;
+	let popupX = (window.screen.width / 2) - (popupWidth / 2);
+	let popupY = (window.screen.height / 3) - (popupHeight / 3);
+	if ('P' === _frontGb) {
+		//window.open(actionUrl, 'yes24Login', 'top=' + popupY + ',left=' + popupX + ',height=' + popupHeight + ',width=' + popupWidth + ', fullscreen=no,menubar=no,status=no,toolbar=no,titlebar=yes,location=no,scrollbars=yes', '');
+	} else {
+		//document.location.href = actionUrl + '&requestGb=' + requestGb;
 	}
 };