Просмотр исходного кода

Merge branch 'card007' into order2

# Conflicts:
#	src/main/java/com/style24/front/biz/service/TsfOrderService.java
#	src/main/java/com/style24/front/biz/web/TsfMypageController.java
card007 5 лет назад
Родитель
Сommit
e055d955c1
23 измененных файлов с 2797 добавлено и 574 удалено
  1. 14 1
      pom.xml
  2. 18 6
      src/main/java/com/style24/front/biz/service/TsfCartService.java
  3. 4 8
      src/main/java/com/style24/front/biz/service/TsfOrderChangeService.java
  4. 8 2
      src/main/java/com/style24/front/biz/service/TsfOrderService.java
  5. 12 3
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  6. 94 178
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  7. 2 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml
  8. 2 6
      src/main/resources/config/application-locd.yml
  9. 1 1
      src/main/resources/config/application-tsit.yml
  10. BIN
      src/main/webapp/WEB-INF/lib/CtCli-1.0.6.jar
  11. 42 0
      src/main/webapp/WEB-INF/views/mob/order/OrderNoMemberMob.html
  12. 113 0
      src/main/webapp/WEB-INF/views/mob/pg/kcpOrderMob.html
  13. 34 17
      src/main/webapp/WEB-INF/views/web/cart/cartChangeOptionPopupWeb.html
  14. 2 2
      src/main/webapp/WEB-INF/views/web/cart/cartListAjaxFormWeb.html
  15. 1 1
      src/main/webapp/WEB-INF/views/web/common/layout/MypageLayoutWeb.html
  16. 78 56
      src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb.html
  17. 2032 0
      src/main/webapp/WEB-INF/views/web/order/OrderCompleteWeb.html
  18. 1 1
      src/main/webapp/WEB-INF/views/web/order/OrderDeliveryAddrInfoWeb.html
  19. 80 290
      src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html
  20. 18 2
      src/main/webapp/WEB-INF/views/web/order/OrderFreegiftInfoWeb.html
  21. 31 0
      src/main/webapp/WEB-INF/views/web/order/test.html
  22. 210 0
      src/main/webapp/ux/mo/js/payment.js
  23. 0 0
      src/main/webapp/ux/pc/js/mypage.js

+ 14 - 1
pom.xml

@@ -123,7 +123,20 @@
 			<scope>system</scope>
 			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/jPpcliE.jar</systemPath>
 		</dependency>
-		<!--//NICE 본인인증-->
+		<dependency>
+			<groupId>com.kcp</groupId>
+			<artifactId>ConnectionKCP</artifactId>
+			<version>1.0</version>
+			<scope>system</scope>
+			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/ConnectionKCP.jar</systemPath>
+		</dependency>
+		<dependency>
+			<groupId>kr.co.kcp.CT_CLI</groupId>
+			<artifactId>CT_CLI</artifactId>
+			<version>1.0</version>
+			<scope>system</scope>
+			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/CtCli-1.0.6.jar</systemPath>
+		</dependency>
 		<!-- \\\ WEB-INF lib -->
 	</dependencies>
 	

+ 18 - 6
src/main/java/com/style24/front/biz/service/TsfCartService.java

@@ -888,20 +888,32 @@ public class TsfCartService {
 			}
 		} else {
 			param.setCartGb(TscConstants.CartGb.CART.value());
+			param.setNotCartSq(param.getCartSq());						// 수정 장바구니 번호 제외
 			Collection<Integer> cartSqList = cartDao.selectHasNormalDealItemCartList(param);
 			if (cartSqList != null && cartSqList.size() > 0) {			// 장바구니 기존재
 				if (cartSqList.size() > 1) {							// 장바구니 조회 결과 이상시 insert or select 수정 필요
 					throw new IllegalArgumentException("장바구니 조회에 실패하였습니다. 관리자에게 문의해주세요.");
 				} else {
 					param.setCartSq(cartSqList.iterator().next());
-					cartDao.updateCartInfo(param);
-					cartDao.insertCartHst(param);                // 장바구니 수정 이력 저장
+					cartDao.updateCartInfo(param);				// 장바구니 기존 데이터에 UPDATE(수량증가)
+					cartDao.insertCartHst(param);				// 장바구니 수정 이력 저장
+
+					// 이전 장바구니에 수정되었으므로 현재 수정된 장바구니 데이터 삭제
+					int[] delCartSq = {param.getNotCartSq()};
+					param.setCartSqArr(delCartSq);
+					cartDao.deleteCart(param);					// 현재 장바구니 삭제
+					cartDao.deleteCartDetail(param);			// 현재 장바구니 삭제
 				}
 			} else {
-				/*cartDao.insertCartInfo(param);					// 장바구니 마스터 정보 저장
-				cartDao.insertCartHst(param);                   // 장바구니 수정 이력 저장
-				cartDao.insertCartDetailInfo(param);			// 장바구니 상세 저장
-				cartDao.insertCartDetailHst(param);             // 장바구니 수정 이력 저장*/
+				cartDao.updateCart(param);						// 장바구니 마스터 정보 저장
+				cartDao.insertCartHst(param);					// 장바구니 수정 이력 저장
+
+				param.setItemCd(param.getItemCds()[0]);
+				param.setCartDtlSq(param.getCartDtlSqArr()[0]);
+				param.setOptCd(param.getOptCds()[0]);
+
+				cartDao.updateCartDetail(param);                // 장바구니 상세 저장
+				cartDao.insertCartDetailHst(param);                // 장바구니 수정 이력 저장
 			}
 		}
 	}

+ 4 - 8
src/main/java/com/style24/front/biz/service/TsfOrderChangeService.java

@@ -1,20 +1,13 @@
 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.core.biz.service.TscOrderChangeService;
 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;
@@ -34,6 +27,9 @@ public class TsfOrderChangeService {
 	@Autowired
 	private TsfOrderChangeDao orderChangeDao;
 
+	@Autowired
+	private TscOrderChangeService coreOrderChangeService;
+
 	/**
 	 * 마이페이지 취소/반품 목록 조회
 	 *

+ 8 - 2
src/main/java/com/style24/front/biz/service/TsfOrderService.java

@@ -16,6 +16,8 @@ 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.TscOrderDao;
 import com.style24.core.biz.service.TscKakaoPayService;
 import com.style24.core.biz.service.TscKcpService;
 import com.style24.core.biz.service.TscNaverPayService;
@@ -46,6 +48,9 @@ public class TsfOrderService {
 
 	@Autowired
 	private TscKcpService coreKcpService;
+
+	@Autowired
+	private TscOrderDao coreOrderDao;
 	
 	@Autowired
 	private TscKakaoPayService coreKakaoPayService;
@@ -257,8 +262,9 @@ public class TsfOrderService {
 			result.setPaySq(param.getPaySq());
 			result.setUpdNo(param.getCustNo());
 			result.setRegNo(param.getCustNo());
+			result.setPayGb("O");
 
-			if(updatePaymentForOrderFinished(result) < 1) {
+			if(coreOrderDao.insertPayment(result) < 1) {
 				// TODO 전체 취소 로직 추가
 				if(TscConstants.PgGb.KCP.value().equals(param.getPgGb()) || TscConstants.PgGb.PAYCO.value().equals(param.getPgGb())) {
 					coreKcpService.kcpPayRollBack(result, request);
@@ -347,7 +353,7 @@ public class TsfOrderService {
 	public int updateOrderDisplayYn(Order order) { return orderDao.updateOrderDisplayYn(order); }
 
 	public Payment setPgDataInfo(Order order) {
-		Payment payment = new Payment();
+		Payment payment;
 		if(TscConstants.PgGb.KAKAO.value().equals(order.getPgGb())) {			// 카카오페이
 			KakaoPay kakaoPay = coreKakaoPayService.kakaoPaymentReady(order);
 			payment = coreKakaoPayService.setKakaoOrderData(kakaoPay, order);

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

@@ -4,6 +4,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -14,6 +15,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 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;
@@ -42,9 +45,6 @@ import com.style24.persistence.domain.WishList;
 
 import lombok.extern.slf4j.Slf4j;
 
-import com.gagaframework.web.parameter.GagaMap;
-import com.gagaframework.web.rest.server.GagaResponseStatus;
-
 /**
  * 마이페이지 Controller
  * 
@@ -501,6 +501,15 @@ public class TsfMypageController extends TsfBaseController {
 	@GetMapping("/point/form")
 	public ModelAndView stylePointForm(Point point) {
 		ModelAndView mav = new ModelAndView();
+
+		// 테스트용 (삭제예정)
+		GagaMap map = new GagaMap();
+		map.setString("custIp", TsfSession.getIpAddress());
+		map.setString("bankNm", "김지철");
+		map.setString("accountNo", "110500288201");
+		map.setString("bankCd", "88");
+		coreOrderService.checkAccount(map);
+		// 테스트용 (삭제예정)
 		
 		int custNo = TsfSession.getInfo().getCustNo();
 		point.setCustNo(custNo);

+ 94 - 178
src/main/java/com/style24/front/biz/web/TsfOrderController.java

@@ -18,12 +18,10 @@ import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
 import com.gagaframework.web.parameter.GagaMap;
-import com.gagaframework.web.rest.server.GagaResponseStatus;
 import com.style24.core.biz.service.TscFreegiftService;
 import com.style24.core.biz.service.TscKakaoPayService;
 import com.style24.core.biz.service.TscNaverPayService;
 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.TsfOrderService;
@@ -339,9 +337,10 @@ public class TsfOrderController extends TsfBaseController {
 		} 
 		
 		ModelAndView mav = new ModelAndView();
-		mav.addObject("freegiftGoodsList"	, resultMap.get("freegiftGoodsList"));		// 사은품상품정보 목록
-		mav.addObject("freegiftList"		, resultMap.get("freegiftList"));			// 사은품정보 목록
-		mav.addObject("order"				, order);									// 파라미터
+		mav.addObject("freegiftApplyAmtList"	, resultMap.get("freegiftApplyAmtList"));	// 사은품장바구니목록
+		mav.addObject("freegiftGoodsList"		, resultMap.get("freegiftGoodsList"));		// 사은품상품정보 목록
+		mav.addObject("freegiftList"			, resultMap.get("freegiftList"));			// 사은품정보 목록
+		mav.addObject("order"					, order);									// 파라미터
 		
 		mav.setViewName(super.getDeviceViewName("order/OrderFreegiftInfo"));
 		
@@ -480,21 +479,67 @@ public class TsfOrderController extends TsfBaseController {
 	@ResponseBody
 	@RequestMapping(value = "/pay/result/response")
 	public ModelAndView payResultResponse(Payment param, HttpServletRequest request, HttpServletResponse response) {
+		
 		ModelAndView mav = new ModelAndView();
-
-
-		// 테스트용 데이터 세팅
-		param.setPaySq(3);
-		param.setCustNo(TsfSession.getInfo().getCustNo() == null ? 0 : TsfSession.getInfo().getCustNo());
+		
+		// 1. 로그인체크 후 custNo 설정
+		if (TsfSession.isLogin()) {
+			param.setCustNo(TsfSession.getInfo().getCustNo()); // 고객번호등록
+		} else {
+			param.setCustNo(0);
+		}
+		
 		param.setUpdNo(param.getCustNo());
-
+		
+		// 7. 결재정보등록(TB_PAYMENT)
 		param = orderService.orderPgPayResult(param, request, response);
+		
+		log.info("param.getOrdNo() ::: {}", param.getOrdNo());
+		
+		// TODO 주문정보 업데이트
+		// 1. 주문상태업데이트
+		// 2. 재고처리
+		// 3. 포인트사용처리
+		// 4. 예정포인트적립처리
+		// 5. 쿠폰사용처리
+		// 6. 상품권사용처리
 
 		mav.addObject("payment", param);
 
 		mav.setViewName(super.getDeviceViewName("pg/kcpOrder"));
 		return mav;
 	}
+	
+	/**
+	 * 주문완료페이지
+	 *
+	 * @param
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 03. 05
+	 */
+	@ResponseBody
+	@RequestMapping(value = "/order/complete")
+	public ModelAndView orderComplete(Order order) {
+		
+		ModelAndView mav = new ModelAndView();
+		
+		// 1. 로그인체크 후 custNo 설정
+		if (TsfSession.isLogin()) {
+			order.setCustNo(TsfSession.getInfo().getCustNo()); // 고객번호등록
+		} else {
+			order.setCustNo(0);
+		}
+		
+		log.info("order.getOrdNo() ::: {}", order.getOrdNo());
+		
+		// TODO 주문정보조회
+
+		//mav.addObject("payment", order);
+
+		mav.setViewName(super.getDeviceViewName("pg/kcpOrder"));
+		return mav;
+	}
 
 	/**
 	 * 총알배송 가능 지역 체크
@@ -790,12 +835,32 @@ public class TsfOrderController extends TsfBaseController {
 		
 		order.setFrontGb(TsfSession.getFrontGb());
 		
-		// 2. 주문기본정보등록
+		// TODO
+		// 2. 주문정보 유효성체크 (
+		// 2.1 보유쿠폰체크
+		// 2.2 보유포인트체크
+		// 2.3 상품재고체크
+		// 2.4 보유상품권체크
+		// 2.5 사은품채고체크
+		
+		// 3. 주문기본정보등록
 		coreOrderService.createPreOrder(order);
 		
-		
-
-
+		log.info("order.getPgGb()              ::: {}", order.getPgGb());
+		log.info("order.getPayMeans()          ::: {}", order.getPayMeans());
+		log.info("order.getOrdNo()             ::: {}", order.getOrdNo());
+		log.info("order.getGoodsNm()           ::: {}", order.getGoodsNm());
+		log.info("order.getOrdGoodsQty()       ::: {}", order.getOrdGoodsQty());
+		log.info("order.getPayAmt()            ::: {}", order.getPayAmt());
+		log.info("order.getOrdNm()             ::: {}", order.getOrdNm());
+		log.info("order.getOrdPhnno()          ::: {}", order.getOrdPhnno());
+		log.info("order.getCustNo()            ::: {}", order.getCustNo());
+		log.info("order.getFreegiftValArr()    ::: {}", order.getFreegiftValArr());
+		log.info("order.getFreegiftValArr()    ::: {}", order.getFreegiftValArr());
+		log.info("order.getFreegiftSqArr()     ::: {}", order.getFreegiftSqArr());
+		for(int i = 0 ; i < order.getFreegiftGoodsArr().length ; i++) {
+			log.info("order.getFreegiftGoodsArr()  ::: {}", order.getFreegiftGoodsArr()[i]);
+		}
 
 		// TODO PG 데이터 세팅 처리 (order)
 		// 필수 데이터
@@ -812,6 +877,7 @@ public class TsfOrderController extends TsfBaseController {
 		payAmt = 결제금액
 		======================
 		*/
+
 		Payment payment = orderService.setPgDataInfo(order);
 
 		mav.addObject("payment", payment);
@@ -823,36 +889,11 @@ public class TsfOrderController extends TsfBaseController {
 		//return super.getDeviceViewName("pg/kcpOrder");
 	}
 
-	/**
-	 * 카카오페이 결제준비 처리
-	 *
-	 * @param Order
-	 * @return KakaoPay
-	 * @author card007
-	 * @since 2021. 03. 03
-	 */
-	@RequestMapping(value = "/kakao/payment/ready")
-	@ResponseBody
-	public GagaMap kakaoPaymentReady(@RequestBody Order order) {
-		GagaMap result = new GagaMap();
-
-		if (TsfSession.getInfo().getCustNo() == null) {
-			order.setCustNo(0);
-		} else {
-			order.setCustNo(TsfSession.getInfo().getCustNo());
-		}
-
-		result.set("kakaoPay", kakaoPayService.kakaoPaymentReady(order));
-		result.set("status", GagaResponseStatus.SUCCESS.getCode());
-
-		return result;
-	}
-
 	/**
 	 * 카카오페이 결제 요청 처리
 	 *
-	 * @param Order
-	 * @return GagaMap
+	 * @param String
+	 * @return ModelAndView
 	 * @author card007
 	 * @since 2021. 03. 04
 	 */
@@ -868,68 +909,11 @@ public class TsfOrderController extends TsfBaseController {
 		return mav;
 	}
 
-	/**
-	 * 카카오페이 결제 승인 처리
-	 *
-	 * @param Order
-	 * @return GagaMap
-	 * @author card007
-	 * @since 2021. 03. 04
-	 */
-	@RequestMapping(value = "/kakao/payment/approve")
-	@ResponseBody
-	public GagaMap approveKakaoPayment(@RequestBody Payment payment) {
-		GagaMap result = new GagaMap();
-
-		result.set("payment", kakaoPayService.approveKakaoPayment(payment));
-		result.set("status", GagaResponseStatus.SUCCESS.getCode());
-
-		return result;
-	}
-
-	/**
-	 * 카카오페이 결제 조회
-	 *
-	 * @param Order
-	 * @return GagaMap
-	 * @author card007
-	 * @since 2021. 03. 04
-	 */
-	@RequestMapping(value = "/kakao/payment/order")
-	@ResponseBody
-	public GagaMap kakaoPaymentOrder(@RequestBody Payment payment) {
-		GagaMap result = new GagaMap();
-
-		result.set("kakaoPay", kakaoPayService.getKakaoPaymentOrder(payment));
-		result.set("status", GagaResponseStatus.SUCCESS.getCode());
-
-		return result;
-	}
-
-	/**
-	 * 카카오페이 결제 취소
-	 *
-	 * @param Order
-	 * @return GagaMap
-	 * @author card007
-	 * @since 2021. 03. 04
-	 */
-	@RequestMapping(value = "/kakao/payment/cancel")
-	@ResponseBody
-	public GagaMap cancelKakaoPayment(@RequestBody Payment payment) {
-		GagaMap result = new GagaMap();
-
-		result.set("kakaoPay", kakaoPayService.cancelKakaoPayment(payment));
-		result.set("status", GagaResponseStatus.SUCCESS.getCode());
-
-		return result;
-	}
-
 	/**
 	 * 네이버페이 결제 요청 처리
 	 *
-	 * @param Order
-	 * @return GagaMap
+	 * @param String
+	 * @return ModelAndView
 	 * @author card007
 	 * @since 2021. 03. 04
 	 */
@@ -946,85 +930,17 @@ public class TsfOrderController extends TsfBaseController {
 	}
 
 	/**
-	 * 네이버페이 결제준비 처리
-	 *
-	 * @param Order
-	 * @return NaverPay
-	 * @author card007
-	 * @since 2021. 03. 07
-	 */
-	@RequestMapping(value = "/naver/payment/ready")
-	@ResponseBody
-	public GagaMap naverPaymentReady(@RequestBody Order order) {
-		GagaMap result = new GagaMap();
-
-		if (TsfSession.getInfo().getCustNo() == null) {
-			order.setCustNo(0);
-		} else {
-			order.setCustNo(TsfSession.getInfo().getCustNo());
-		}
-
-		result.set("naverPay", naverPayService.naverPaymentReady(order));
-		result.set("status", GagaResponseStatus.SUCCESS.getCode());
-
-		return result;
-	}
-
-	/**
-	 * 네이버페이 결제 승인 처리
+	 * 주문 데이터 생성
 	 *
-	 * @param Order
-	 * @return GagaMap
-	 * @author card007
+	 * @param
+	 * @return
+	 * @author xodud1202
 	 * @since 2021. 03. 04
 	 */
-	@RequestMapping(value = "/naver/payment/approve")
-	@ResponseBody
-	public GagaMap approveNaverPayment(@RequestBody Payment payment) {
-		GagaMap result = new GagaMap();
-
-		result.set("payment", naverPayService.approveNaverPayment(payment));
-		result.set("status", GagaResponseStatus.SUCCESS.getCode());
-
-		return result;
-	}
-
-	/**
-	 * 네이버페이 결제 조회
-	 *
-	 * @param Order
-	 * @return GagaMap
-	 * @author card007
-	 * @since 2021. 03. 09
-	 */
-	@RequestMapping(value = "/naver/payment/order")
-	@ResponseBody
-	public GagaMap naverPaymentOrder(@RequestBody Payment payment) {
-		GagaMap result = new GagaMap();
-
-		result.set("naverPay", naverPayService.getNaverPaymentOrder(payment));
-		result.set("status", GagaResponseStatus.SUCCESS.getCode());
-
-		return result;
-	}
-
-	/**
-	 * 네이버페이 결제 취소
-	 *
-	 * @param Order
-	 * @return GagaMap
-	 * @author card007
-	 * @since 2021. 03. 09
-	 */
-	@RequestMapping(value = "/naver/payment/cancel")
-	@ResponseBody
-	public GagaMap cancelNaverPayment(@RequestBody Payment payment) {
-		GagaMap result = new GagaMap();
-
-		result.set("naverPay", naverPayService.cancelNaverPayment(payment));
-		result.set("status", GagaResponseStatus.SUCCESS.getCode());
-
-		return result;
+	@RequestMapping(value = "/test")
+	public ModelAndView test() {
+		ModelAndView mav = new ModelAndView();
+		mav.setViewName("web/order/test");
+		return mav;
 	}
-
 }

+ 2 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml

@@ -79,6 +79,7 @@
 		AND    C.GOODS_CD = #{goodsCd}
 		AND    C.CART_GB = #{cartGb}
 		AND    CD.OPT_CD = #{optCd}
+		AND    C.CART_SQ <![CDATA[ <> ]]> #{notCartSq}
 	</select>
 
 	<!-- 장바구니 신규 등록 -->
@@ -923,6 +924,7 @@
 			 , ST.CURR_STOCK_QTY
 			 , ST.SOLDOUT_YN
 			 , CD.OPT_CD AS CART_OPT_CD
+			 , CD.CART_DTL_SQ
 		FROM   TB_GOODS G
 		INNER  JOIN VW_STOCK ST
 		ON     G.GOODS_CD = ST.GOODS_CD

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

@@ -57,18 +57,14 @@ download.path: /WIDE/workspace/files/data
 # PG
 pg:
     kcp:
-        log.dir: D:\\WIDE\\workspace\\files\\data\\style24\\logs\\front
-        user.type: PGNW
+#        log.dir: D:\\WIDE\\workspace\\files\\data\\style24\\logs\\front
+        log.dir: /WIDE/workspace/files/data/style24/logs/front
         gw:
             url: testpaygw.kcp.co.kr
             port: 8090
-        pa:
-            url: testpaygw.kcp.co.kr
-            port: 8090
         js.url: https://testpay.kcp.co.kr/plugin/payplus_web.jsp
         server: false
         site:
-            id: T0000
             cd: T0000
             key: 3grptw1.zW0GSo4PQdaGvsF__
             name: KCP TEST SHOP

+ 1 - 1
src/main/resources/config/application-tsit.yml

@@ -20,7 +20,7 @@ logging:
 
 domain:
     admin: //tdadmin.style24.com
-    front: //http://ts5000.ipdisk.co.kr/
+    front: //ts5000.ipdisk.co.kr
     style24: //tdfront.style24.com
     image: //tdimage.style24.com
     cdnimage: //tdimage.style24.com

BIN
src/main/webapp/WEB-INF/lib/CtCli-1.0.6.jar


+ 42 - 0
src/main/webapp/WEB-INF/views/mob/order/OrderNoMemberMob.html

@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org"
+	  xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	  layout:decorator="mob/common/layout/DefaultLayoutMob">
+
+<script type="text/javascript" th:src="${@environment.getProperty('pg.kcp.js.url')}" src=""></script>
+<script type="text/javascript" src="/ux/pc/js/payment.js"></script>
+<script type="text/javascript">
+	$(document).on("click", "#buyBtn", function() {
+		$.ajax({
+			type: "POST",
+			url : '/order/create/preOrder',
+			dataType : 'html',
+			data : {
+				pgGb		: "KCP"
+				, payMeans	: "G014_30"
+				, ordNo		: "5"
+				, goodsNm	: "상품 테스트"
+				, payAmt	: "1233"
+				, ordNm		: "이태영"
+				, ordEmail	: "xodud1202@naver.com"
+				, ordTelno	: "02-0000-0000"
+				, ordPhnno	: "010-7111-0000"
+			},
+			error : function(e) {
+				alert(3);
+			},
+			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" ></form>
+
+
+
+</html>

+ 113 - 0
src/main/webapp/WEB-INF/views/mob/pg/kcpOrderMob.html

@@ -0,0 +1,113 @@
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
+<meta http-equiv="X-UA-Compatible" content="IE=edge" />
+<meta http-equiv="Pragma" content="no-cache">
+<meta http-equiv="Expires" content="-1">
+	<!-- 페이코 송부 정보 -->
+	<th:block th:if="${!#strings.isEmpty(payment.paycoDirect)}">
+		<input type="hidden" name="payco_direct"	th:value="${payment.paycoDirect}" />
+		<input type="hidden" name="pay_mthod"		th:value="${payment.payMthod}" />
+	</th:block>
+
+	<!-- 주문 데이터 -->
+	<input type="hidden" name="pgGb"			th:value="${payment.pgGb}" />
+	<input type="hidden" name="payMeans"		th:value="${payment.payMeans}" />
+
+	<input type="hidden" name="encoding_trans"	value="UTF 8" />	<!-- 추가 인코딩 네임은 대문자 -->
+	<input type="hidden" name="PayUrl"			value="" />			<!-- 주문페이지 소스에 이미 PayUrl 이 input 값에 있다면 추가하지 않습니다 -->
+
+	<input type="hidden" name="req_tx"			th:value="${payment.reqTx}" />		<!-- 요청의 종류를 구분하는 변수 결제요청페이지의 경우 ‘pay’로 설정 -->
+	<input type="hidden" name="shop_name"		th:value="${payment.siteName}" />	<!-- 상점이름(영문으로 작성권장) -->
+	<input type="hidden" name="site_cd"			th:value="${payment.siteCd}" />		<!-- 필수, 상점코드 -->
+	<input type="hidden" name="currency"		th:value="${payment.currency}" />	<!-- 필수, 원화 : WON / 달러 : USD -->
+	<input type="hidden" name="approval_key"	th:value="${pament.approvalKey}" id="approval" />	<!-- 결제등록 키 -->
+	<input type="hidden" name="escw_used"		value="N">	<!-- 인증시 필요한 파라미터(변경불가)-->
+	<input type="hidden" name="pay_method"		th:value="${payment.payMethod}" />	<!-- 필수, 결제수단코드(신용카드 : 100000000000, 계좌이체 : 010000000000, 가상계좌 : 001000000000, 포인트 : 000100000000, 휴대폰 : 000010000000, 상품권 : 000000001000, ARS : 000000000010) -->
+	<input type="hidden" name="van_code"		value="">							<!-- 인증시 필요한 파라미터(변경불가)-->
+	<input type="hidden" name="quotaopt"		th:value="${payment.quotaopt}"/>	<!-- 최대 할부 개월 수(0 ~ 18까지 설정 가능) -->
+	<input type="hidden" name="ipgm_date"		value=""/>							<!-- 가상계좌설정 -->
+	<input type="hidden" name="Ret_URL"			value="/order/form">				<!-- 리턴 URL (kcp와 통신후 결제를 요청할 수 있는 암호화 데이터를 전송 받을 가맹점의 주문페이지 URL) -->
+	<input type="hidden" name="tablet_size"		value="1.0">						<!-- 화면 크기 조정 -->
+	<input type="hidden" name="response_type"	value="TEXT"/>						<!-- 결제 정보 등록시 응답 타입 ( 필드가 없거나 값이 '' 일경우 TEXT, 값이 XML 또는 JSON 지원 -->
+	<input type="hidden" name="PayUrl"			value="" id="PayUrl"/>				<!-- 결제 정보 등록시 응답 타입 ( 필드가 없거나 값이 '' 일경우 TEXT, 값이 XML 또는 JSON 지원 -->
+	<input type="hidden" name="traceNo"			value="" id="traceNo"/>				<!-- 결제 정보 등록시 응답 타입 ( 필드가 없거나 값이 '' 일경우 TEXT, 값이 XML 또는 JSON 지원 -->
+	<input type="hidden" name="res_cd"			value=""/>							<!-- 결과코드 -->
+	<input type="hidden" name="res_msg"			value=""/>							<!-- 결과메세지 -->
+	<input type="hidden" name="ordr_idxx"		th:value="${payment.ordrIdxx}" />	<!-- 필수, 상점 관리 주문번호 (유니크한 값 설정 권장) -->
+	<input type="hidden" name="good_mny"		th:value="${payment.goodMny}" />	<!-- 필수, 주문요청금액 (※ 화폐단위가 ‘USD’ 일 경우, Cent까지 설정 ex ) $10.55 일 경우 콤마를 뺀 1055, $100 일 경우 10000로 설정 -->
+	<input type="hidden" name="good_name"		th:value="${payment.goodName}" />	<!-- 필수, 상품명 -->
+	<input type="hidden" name="buyr_name"		th:value="${payment.buyrName}" />	<!-- 필수, 주문자 이름 -->
+	<input type="hidden" name="buyr_mail"		th:value="${payment.buyrMail}" />	<!-- 선택, 주문자 이메일 -->
+	<input type="hidden" name="buyr_tel1"		th:value="${payment.buyrTel1}" />	<!-- 선택, 주문자 전화번호 -->
+	<input type="hidden" name="buyr_tel2"		th:value="${payment.buyrTel2}" />	<!-- 필수, 주문자 휴대폰번호 -->
+	<input type="hidden" name="enc_info"		value=""/>
+	<input type="hidden" name="enc_data"		value=""/>
+	<input type="hidden" name="use_pay_method"	value=""/>
+	<input type="hidden" name="cash_yn"         value=""/>
+	<input type="hidden" name="cash_tr_code"	value=""/>
+
+
+
+
+	<input type="hidden" name="shop_user_id"	th:value="${payment.shopUserId}" />	<!-- 필수, 쇼핑몰회원ID 기관에 따라 RM 조치를 위해 쇼핑몰 관리 ID를 필수로 요청 -->
+
+
+
+
+
+	<!-- 신용카드 정보 -->
+
+
+	<!-- 가상계좌 설정 -->
+
+
+	<!-- 리턴 URL (kcp와 통신후 결제를 요청할 수 있는 암호화 데이터를 전송 받을 가맹점의 주문페이지 URL) -->
+	<input type="hidden" name="Ret_URL"         value="<%=url%>">
+	<!-- 화면 크기조정 -->
+	<input type="hidden" name="tablet_size"     value="<%=tablet_size%>">
+
+	<!-- 무통장입금 정보 -->
+	<!-- <input type="hidden" name="vcnt_expire_term"	th:value="${payment.vcntExpireTerm}"/> -->	<!-- 무통장입금 유효기간 설정 (3 = 3일) -->
+
+	<!-- 2012년 8월 18일 전자상거래법 개정 관련 설정 부분 -->
+	<!-- 제공 기간 설정 0:일회성 1:기간설정(ex 1:2012010120120131)  -->
+	<input type="hidden" name="good_expr"		th:value="${payment.goodExpr}" />
+
+	<!-- 표준웹 설정 정보입니다(변경 불가) -->
+	<input type="hidden" name="module_type"		th:value="${payment.moduleType}" />
+
+	<!--
+			※ 필 수
+			필수 항목 : 표준웹에서 값을 설정하는 부분으로 반드시 포함되어야 합니다
+			값을 설정하지 마십시오
+	-->
+
+
+	<input type="hidden" name="ret_pay_method"  value=""/>
+	<input type="hidden" name="tran_cd"         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=""/>
+
+	<!-- 카카오페이 관련 정보 -->
+	<input type="hidden" name="pgTid" th:value="${payment.pgTid}"/>
+	<input type="hidden" name="partnerOrderId" th:value="${payment.partnerOrderId}"/>
+	<input type="hidden" name="partnerUserId" th:value="${payment.partnerUserId}"/>
+	<input type="hidden" name="pgToken" value=""/>
+	<input type="hidden" name="nextRedirectAppUrl" th:value="${payment.nextRedirectAppUrl}"/>
+	<input type="hidden" name="nextRedirectMobileUrl" th:value="${payment.nextRedirectMobileUrl}"/>
+	<input type="hidden" name="nextRedirectPcUrl" th:value="${payment.nextRedirectPcUrl}"/>
+	<input type="hidden" name="androidAppScheme" th:value="${payment.androidAppScheme}"/>
+	<input type="hidden" name="iosAppScheme" th:value="${payment.iosAppScheme}"/>
+
+	<!-- 네이버페이 관련 정보 -->
+	<input type="hidden" name="reserveId" th:value="${payment.reserveId}"/>
+	<input type="hidden" name="paymentId" value=""/>
+
+</html>

+ 34 - 17
src/main/webapp/WEB-INF/views/web/cart/cartChangeOptionPopupWeb.html

@@ -59,7 +59,6 @@
 
 										<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>
@@ -92,7 +91,7 @@
 										</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}">
+												<a href="" th:cartDtlSq="${color.cartDtlSq}" 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>
@@ -125,9 +124,9 @@
 											<span class="title">옵션선택</span>
 										</div>
 										<div class="form_field">
-											<select id="">
+											<select class="selfGoodsColor">
 												<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>
+												<option th:data="${color.cartDtlSq}" th:value="${color.optCd}" th:text="${color.optCd1 + '/' + color.optCd2}" th:selected="${color.cartOptCd != null}"></option>
 												</th:block>
 											</select>
 										</div>
@@ -158,10 +157,6 @@
 
 
 <script th:inline="javascript">
-	$(document).ready(function() {
-
-	})
-
 	// 세트상품 컬러 변경시
 	$(".setColorSelect").on("change", function(e) {
 		let goodsCd = $(this).find("option:checked").attr("data");
@@ -182,7 +177,7 @@
 				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) {
+					if(size[j].soldoutYn == "Y" || cart.goodsQty > size[j].currStockQty) {
 						html += "disabled = 'disabled'";
 					}
 					html += " />\n";
@@ -217,18 +212,44 @@
 				, goodsQty : $("input[name=goodsQty]").val()
 			}
 		} else if(cart.goodsType != "G056_S" && cart.selfGoodsYn == "Y") {
+			optCds.push($(".selfGoodsSize").find("input[name=rdi-optsize]:checked").val());
+			itemCds.push(cart.goodsCd);
+			$(".selfGoodsColorSelect").each(function() {
+				if($(this).attr("cartDtlSq") > 0) {
+					cartDtlSqArr.push($(this).attr("cartDtlSq"));
+				}
+			});
+
 			data = {
 				  cartSq : cart.cartSq
 				, goodsCd : cart.goodsCd
 				, goodsType : cart.goodsType
-				, optCd : $(".selfGoodsSize").find("input[name=rdi-optsize]:checked").val()
+				, cartDtlSqArr : cartDtlSqArr
+				, itemCds : itemCds
+				, optCds : optCds
 				, goodsQty : $("input[name=goodsQty]").val()
 			}
 		} else {
-			alert("입점업체");
+			optCds.push($(".selfGoodsColor").val());
+			itemCds.push(cart.goodsCd);
+			$(".selfGoodsColor option").each(function() {
+				if($(this).attr("data") > 0) {
+					cartDtlSqArr.push($(this).attr("data"));
+				}
+			});
+
+			data = {
+				cartSq : cart.cartSq
+				, goodsCd : cart.goodsCd
+				, goodsType : cart.goodsType
+				, cartDtlSqArr : cartDtlSqArr
+				, itemCds : itemCds
+				, optCds : optCds
+				, goodsQty : $("input[name=goodsQty]").val()
+			}
 		}
 
-		/*$.ajax( {
+		$.ajax( {
 			type: "POST",
 			url : '/cart/change/option',
 			contentType: 'application/json',
@@ -239,12 +260,8 @@
 				$(".closeCartOptionModal").trigger("click");
 				getCartList();
 			}
-		});*/
+		});
 	}
-
-	$(".closeCartOptionModal").on("click", function() {
-		$(".cartOptionModal").html("");
-	});
 </script>
 
 </div>

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

@@ -473,7 +473,7 @@
 		temp.goodsQty = 2;
 		temp.goodsType = "G056_D";
 		temp.dealGoodsCd = "STYD000000025"
-		temp.cartGb = "O";
+		temp.cartGb = "C";
 		temp.afLinkCd = "afLinkCd";
 		temp.ithrCd = "G027_ZZZ";
 		temp.contentsLoc = "G028_YYY";
@@ -486,7 +486,7 @@
 		temp.goodsQty = 3;
 		temp.goodsType = "G056_D";
 		temp.dealGoodsCd = "STYD000000025"
-		temp.cartGb = "O";
+		temp.cartGb = "C";
 		temp.afLinkCd = "afLinkCd";
 		temp.ithrCd = "G027_ZZZ";
 		temp.contentsLoc = "G028_YYY";

+ 1 - 1
src/main/webapp/WEB-INF/views/web/common/layout/MypageLayoutWeb.html

@@ -65,7 +65,7 @@
 <th:block th:replace="~{web/common/fragments/ScriptsWeb :: scripts}"></th:block>
 <!-- <th:block th:replace="~{web/common/fragments/MarketingScripts :: mscripts}"></th:block> -->
 
-<script th:src="@{'/ux/pc/js/cart.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/ux/pc/js/cart.js"></script>
+<script th:src="@{'/ux/pc/js/mypage.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/ux/pc/js/mypage.js"></script>
 
 <script th:inline="javascript">
 /*<![CDATA[*/

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

@@ -87,7 +87,7 @@
 												<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}"/>-->
+															<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>
@@ -126,7 +126,8 @@
 										<div class="form_field">
 											<div class="select_custom type1">
 												<div class="combo">
-													<div class="select" name="chgReason">반품 사유를 선택하세요</div>
+													<input type="hidden" name="chgReason"/>
+													<div class="select">반품 사유를 선택하세요</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>
@@ -146,7 +147,7 @@
 							</table>
 						</div>
 					</section>
-					<section class="order_row">
+					<section class="order_row" id="wdGb">
 						<div class="order_tit">
 							<h3 class="subH3">반품 방식 선택</h3>
 						</div>
@@ -160,11 +161,11 @@
 									<td>
 										<div class="form_field radio_field">
 											<div class="">
-												<input type="radio" name="wdGb" id="withdraw" value="W" onclick="fnChangeWdGb();" checked>
+												<input type="radio" name="wdGb" id="withdraw" value="W" checked>
 												<label for="withdraw"><span>방문회수 <b class="c_primary">택배사에서 방문하여 회수</b></span></label>
 											</div>
 											<div class="">
-												<input type="radio" name="wdGb" id="direct" value="D" onclick="fnChangeWdGb();">
+												<input type="radio" name="wdGb" id="direct" value="D">
 												<label for="direct"><span>직접반송 <b class="c_primary">고객이 직접 반송처리</b></span></label>
 											</div>
 										</div>
@@ -316,6 +317,7 @@
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
 	let returnList = [[${returnList.returnList}]];
+	let oneData = [[${returnList.oneData}]];
 	let usedGiftCardInfo = [[${usedGiftCardInfo}]];
 	let usedPointInfo = [[${usedPointInfo}]];
 	let refundPoint = 0;
@@ -332,6 +334,12 @@
 		$('.select_custom.type1').each(function(index) {
 			var selecter01 = new sCombo($(this));
 		});
+
+		// 입점업체의 경우 회수방식 직접배송 처리
+		if (oneData.selfGoodsYn == 'Y') {
+			$('#direct').click();
+			$('#wdGb').css('display','none');
+		}
 	});
 	
 	// 반품 처리
@@ -343,10 +351,14 @@
 	// 반품 수량 변경 이벤트 처리
 	var fnChangeQty = function(param) {
 		let url = '/mypage/cancel/refund/amt/calculate';
-		$(param).parent().parent().find('input[name=chgQty]').val($(param).val());
-		$(param).val();
-		let chgReason = $('div[name=chgReason]').parent().find('li.selected').attr('value');
-		
+
+		if (param != null) {
+			$(param).parent().parent().find('input[name=chgQty]').val($(param).val());
+		}
+
+		let chgReason = $('input[name=chgReason]').val();
+
+		console.log(chgReason);
 		if (!gagajf.isNull(chgReason)) {
 			let returnRequestList = [];
 
@@ -354,71 +366,81 @@
 			let chgQtyArr = [];
 			let ordDtlNoArr = [];
 			let ordCanChgQtyArr = [];
+			let chgQtyChk = 0;
 			$.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));
+				
+				chgQtyChk += Number(chgQty);
 			});
-			
-			// 환불포인트, 환불상품권 금액 계산
-			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);
+			if (chgQtyChk > 0) {
+				// 환불포인트, 환불상품권 금액 계산
+				let refundPoint = fnCalculatePoint(chgQtyArr, ordDtlNoArr, ordCanChgQtyArr);
+				let refundGiftCard = fnCalculateGiftCard(chgQtyArr, ordDtlNoArr, ordCanChgQtyArr);
 				
-				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);
-			})
+				$.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);
+				});
+			}
 		}
 	}
+
+	// 반품 방식 변경 이벤트
+	$('input[name=wdGb]').on('change', function() {
+		let wdGb = $('input[name=wdGb]:radio:checked').val();
+
+		if (wdGb == 'W') {
+			$('#chgerLocation').css('display', '');
+			$('#returnLocation').css('display', 'none');
+		} else {
+			$('#chgerLocation').css('display', 'none');
+			$('#returnLocation').css('display', '');
+		}
+	});
 	
 	// 반품 사유 변경 이벤트
 	var fnChangeReason = function(param) {
 		// TODO
 		// 반품 사유 변경 처리
-	}
-	
-	// 반품 방식 선택 이벤트
-	var fnChangeWdGb = function() {
-		let wdGb = $('input[name=wdGb]:radio:checked').val();
-		console.log(wdGb);
+		$(param).parent().parent().find('input[name=chgReason]').val($(param).val());
+		fnChangeQty();
 	}
 
 	// 환불 포인트 계산

+ 2032 - 0
src/main/webapp/WEB-INF/views/web/order/OrderCompleteWeb.html

@@ -0,0 +1,2032 @@
+<!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>
+
+<!-- payment.js -->
+<script type="text/javascript" th:src="${@environment.getProperty('pg.kcp.js.url')}" src=""></script>
+<script type="text/javascript" src="/ux/pc/js/payment.js"></script>
+	<script type="text/javascript">
+		$(document).on("click", "#buyBtn", function() {
+			$.ajax({
+				type: "POST",
+				url : '/order/create/preOrder',
+				dataType : 'html',
+				data : {
+					  pgGb		: "KCP"
+					, payMeans	: "G014_30"
+					, ordNo		: "5"
+					, goodsNm	: "상품 테스트"
+					, payAmt	: "1233"
+					, ordNm		: "이태영"
+					, ordEmail	: "xodud1202@naver.com"
+					, ordTelno	: "02-0000-0000"
+					, ordPhnno	: "010-7111-0000"
+				},
+				error : function(e) {
+					alert(3);
+				},
+				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" ></form>
+	
+	<div style="margin:20px;">
+		<input type="button" id="buyBtn" value="KCP테스트버튼" style="width:200px; height:70px; background-color: #fd4801; color: white; border: unset;"/>
+		<input type="button" id="kakaoBtn" value="카카오테스트버튼" style="width:200px; height:70px; background-color: #fffa00; color: black; border: unset;"/>
+		<input type="button" id="naverBtn" value="네이버테스트버튼" style="width:200px; height:70px; background-color: lawngreen; color: black; border: unset;"/>
+	</div>
+<!-- // xodud1202 -->
+
+
+<!-- card007 -->
+	<script th:inline="javascript">
+		$(document).on("click", "#kakaoBtn", function() {
+			$.ajax({
+				type: "POST",
+				url : '/order/create/preOrder',
+				dataType : 'html',
+				data : {
+					pgGb			: "KAKAO"
+					, custNo		: [[${sessionInfo.custNo}]]
+					, ordNo			: 1000
+					, goodsNm		: "상품 테스트"
+					, payAmt		: 30000
+					, ordGoodsQty	: [[${goodsTotCnt}]]
+				},
+				error : function(e) {
+					console.log(e.responseText);
+				},
+				success : function(result) {
+					$("#order_info").html(result);
+					fnKakaoPaymentReady();
+				}
+			});
+			//let url = '/order/create/preOrder';
+			//let data = {};
+			//data.pgGb = 'KAKAO';
+			//data.ordNo = 1000;
+			//data.custNo = [[${sessionInfo.custNo}]];
+			//data.goodsNm = '상품 테스트';
+			//data.ordGoodsQty = [[${goodsTotCnt}]];
+			//data.payAmt = 30000;
+			//
+			//let jsonData = JSON.stringify(data);
+			//
+			//gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+			//	$("#order_info").html(result);
+			//	console.log(result);
+			//	fnKakaoPaymentReady();
+			//});
+		});
+
+		// 카카오페이 결제준비 처리
+		var fnKakaoPaymentReady = function() {
+			let nextRedirectUrl = $('#order_info input[name=nextRedirectPcUrl]').val();
+			let option = 'width=420, height=520';
+
+			window.open(nextRedirectUrl, 'kakaoPaymentPopup', option);
+		}
+
+		// 카카오페이 결제 승인 요청
+		var fnKakaoPaymentRequest = function(pgToken) {
+			$('#order_info input[name=pgToken]').val(pgToken);
+
+			// TODO
+			// formSubmit
+
+			// 테스트용 호출
+			let url = '/order/kakao/payment/approve';
+			let data = {};
+			data.pgTid = $('#order_info input[name=pgTid]').val();
+			data.partnerOrderId = $('#order_info input[name=partnerOrderId]').val();
+			data.partnerUserId = $('#order_info input[name=partnerUserId]').val();
+			data.pgToken = $('#order_info input[name=pgToken]').val();
+
+			let jsonData = JSON.stringify(data);
+
+			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+				console.log('====== kakaoPaymentRequest ======');
+				console.log(result.payment);
+				console.log(' ');
+				fnKakaoPaymentOrder();
+			});
+
+			return true;
+		}
+
+		// 카카오페이 결제 정보 조회 (테스트용 호출)
+		var fnKakaoPaymentOrder = function() {
+			let url = '/order/kakao/payment/order';
+			let data = {};
+			data.pgTid = $('#order_info input[name=pgTid]').val();
+
+			let jsonData = JSON.stringify(data);
+
+			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+				console.log('====== kakaoPaymentOrder ======');
+				console.log(result.kakaoPay);
+				console.log(' ');
+				fnCancelKakaoPayment();
+			});
+
+			return true;
+		}
+
+		// 카카오페이 결제 취소 (테스트용 호출)
+		var fnCancelKakaoPayment = function() {
+			let url = '/order/kakao/payment/cancel';
+			let data = {};
+			data.pgTid = $('#order_info input[name=pgTid]').val();
+			data.payAmt = 1000;
+
+			let jsonData = JSON.stringify(data);
+
+			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+				console.log('====== kakaoPaymentCancel ======');
+				console.log(result.kakaoPay);
+				console.log(' ');
+
+			});
+		}
+
+	</script>
+
+	<!-- =========== 네이버페이 ============= -->
+	<script th:inline="javascript">
+		$(document).on("click", "#naverBtn", function() {
+			$.ajax({
+				type: "POST",
+				url : '/order/create/preOrder',
+				dataType : 'html',
+				data : {
+					pgGb			: "NAVER"
+					, custNo		: [[${sessionInfo.custNo}]]
+					, ordNo			: 1000
+					, goodsNm		: "상품 테스트"
+					, payAmt		: 1000
+					, ordGoodsQty	: [[${goodsTotCnt}]]
+				},
+				error : function(e) {
+					mcxDialog.alert(e.responseText);
+				},
+				success : function(result) {
+					$("#order_info").html(result);
+					fnNaverPaymentReady();
+				}
+			});
+			//let url = '/order/create/preOrder';
+			//let data = {};
+			//data.pgGb = 'NAVER';
+			//data.ordNo = 1000;
+			//data.custNo = [[${sessionInfo.custNo}]];
+			//data.goodsNm = "상품 테스트";
+			//data.ordGoodsQty = [[${goodsTotCnt}]];
+			//data.payAmt = 30000;
+			//
+			//let jsonData = JSON.stringify(data);
+			//
+			//gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+			//	$("#order_info").html(result);
+			//	fnNaverPaymentReady();
+			//});
+		});
+		
+		// 네이버페이 결제준비 처리
+		var fnNaverPaymentReady = function() {
+			let naverPayUrl = 'https://' + [[${@environment.getProperty('naverPay.payUrl.web')}]];
+			let reserveId = $('#order_info input[name=reserveId]').val();
+			let url = naverPayUrl + '/payments/' + reserveId;
+			console.log(url);
+			let option = 'width=750, height=' + $(window).height();
+			
+			window.open(url, 'naverPaymentPopup', option);
+		}
+
+		// 네이버페이 결제 승인 요청
+		var fnNaverPaymentRequest = function(paymentId) {
+			$('#order_info input[name=pgTid]').val(paymentId);
+			
+			// TODO
+			// formSubmit
+			
+			// 테스트용 호출
+			let url = '/order/naver/payment/approve';
+			let data = {};
+			data.pgTid = $('#order_info input[name=pgTid]').val();
+			data.paySq = 1234;
+			data.custNo = [[${sessionInfo.custNo}]];
+			data.updNo = [[${sessionInfo.custNo}]];
+
+			let jsonData = JSON.stringify(data);
+
+			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+				console.log('====== naverPaymentRequest ======');
+				console.log(result.payment);
+				console.log(' ');
+				fnNaverPaymentOrder();
+			});
+
+			return true;
+		}
+		
+		// 네이버페이 결제 정보 조회 (테스트용 호출)
+		var fnNaverPaymentOrder = function() {
+			let url = '/order/naver/payment/order';
+			let data = {};
+			data.pgTid = $('#order_info input[name=pgTid]').val();
+			
+			let jsonData = JSON.stringify(data);
+			
+			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+				console.log('====== naverPaymentOrder ======');
+				console.log(result.naverPay);
+				console.log(' ');
+				fnCancelNaverPayment();
+			});
+			
+			return true;
+		}
+
+		// 네이버페이 결제 취소 (테스트용 호출)
+		var fnCancelNaverPayment = function() {
+			let url = '/order/naver/payment/cancel';
+			let data = {};
+			data.pgTid = $('#order_info input[name=pgTid]').val();
+			data.cancelRequester = '1';
+			data.chgReasonNm = '고객변심';
+			data.payAmt = 1000;
+			data.paySq = 1234;
+			data.custNo = [[${sessionInfo.custNo}]];
+			data.updNo = [[${sessionInfo.custNo}]];
+
+			let jsonData = JSON.stringify(data);
+
+			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+				console.log('====== naverPaymentCancel ======');
+				console.log(result.naverPay);
+				console.log(' ');
+			});
+		}
+
+	</script>
+<!-- // card007 -->
+
+
+
+
+
+
+
+
+
+<!--  container -->
+<form id="payForm" name="payForm">
+
+	<!-- 주문고객정보 -->
+	<table border="1" style="font-size:10px; text-align:center; margin-top:20px; display:none;" name="orderInfo">
+		<tbody>
+			<tr style="height:30px;">
+				<th>custNm</th>
+				<th>email</th>
+				<th>cellPhnno</th>
+				<th>recipZipcode</th>
+				<th>recipBaseAddr</th>
+				<th>recipDtlAddr</th>
+				<th>delvMemo</th>
+				<th>foreignBuyYn</th>
+				<th>orderMadeYn</th>
+			</tr>
+			<tr style="height:30px;">
+				<td class="custNm"></td>
+				<td class="email"></td>
+				<td class="cellPhnno"></td>
+				<td class="recipZipcode"></td>
+				<td class="recipBaseAddr"></td>
+				<td class="recipDtlAddr"></td>
+				<td class="delvMemo"></td>
+				<td class="foreignBuyYn"></td>
+				<td class="orderMadeYn"></td>
+			</tr>
+		</tbody>
+	</table>
+
+	<!-- 사은품정보 -->
+	<table border="1" style="font-size:10px; text-align:center; margin-top:20px; display:none;" name="freegiftInfo">
+		<tr style="height:30px;">
+			<th>freegiftValArr</th>
+			<th>freegiftUsePointArr</th>
+		</tr>
+		<tr style="height:30px;">
+			<td class="freegiftValArr"></td>
+			<td class="freegiftUsePointArr"></td>
+		</tr>
+	</table>
+
+	<!-- 주문상세금액 -->
+	<table border="1" style="font-size:10px; text-align:center; margin-top:20px; display:none;" name="orderDetailInfo">
+		<tr style="height:30px;">
+			<th>cartSq</th>
+			<th style="display:none">goodsNm</th>
+			<th>orgCurrPrice</th>
+			<th>cpn1DcSq</th>
+			<th>cpn1DcAmt</th>
+			<th>optAddPrice</th>
+			<th>goodsQty</th>
+			<th>ordAmt</th>
+			<th>tmtb1Sq</th>
+			<th>tmtb1DcAmt</th>
+			<th>tmtb2Sq</th>
+			<th>tmtb2DcAmt</th>
+			<th>goodsCpnSq</th>
+			<th>goodsCpnDcAmt</th>
+			<th>cartCpnSq</th>
+			<th>cartCpnDcAmt</th>
+			<th>prePntDcAmt1</th>
+			<th>dcSumAmt</th>
+			<th>pntDcAmt1</th>
+			<th>gfcdUseAmt1</th>
+			<th>realOrdAmt1</th>
+			<th>savePntAmt1</th>
+			<th>shotDelvYn</th>
+			<th>foreignYn</th>
+			<th>orderMadeYn</th>
+			<th>delvFeeCd</th>
+		</tr>
+		<th:block th:each="delvAllCart, index : ${delvAllCartList}">
+			<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
+				<th:block th:each="goods, i : ${delvAllCart}">
+					<tr style="height:30px;">
+						<td class="cartSq" 			th:text="${goods.cartSq}"></td>
+						<td class="goodsNm" 		th:text="${goods.goodsNm}" style="display:none"></td>
+						<td class="orgCurrPrice" 	th:text="${goods.orgCurrPrice}"></td>
+						<td class="cpn1CpnSq" 		th:text="${goods.cpn1CpnSq}"></td>
+						<td class="cpn1DcAmt" 		th:text="${goods.orgCurrPrice} - ${goods.currPrice}"></td>
+						<td class="optAddPrice" 	th:text="${goods.optAddPrice}"></td>
+						<td class="goodsQty" 		th:text="${goods.goodsQty}"></td>
+						<td class="ordAmt">0</td>
+						<th:block th:if="${goods.applyQtySectionYn} == 'Y' and ${goods.qtyTmtbSq} > 0">
+							<td class="tmtb1Sq" 	th:text="${goods.qtyTmtbSq}"></td>
+							<td class="tmtb1DcAmt" 	th:text="${goods.tmtb1DcAmt}"></td>
+						</th:block>
+						<th:block th:if="${goods.applyQtySectionYn} != 'Y'">
+							<td class="tmtb1Sq">0</td>
+							<td class="tmtb1DcAmt">0</td>
+						</th:block>
+						<th:block th:if="${goods.applyAmtSectionYn} == 'Y' and ${goods.amtTmtbSq} > 0">
+							<td class="tmtb2Sq" 	th:text="${goods.amtTmtbSq}"></td>
+							<td class="tmtb2DcAmt" 	th:text="${goods.tmtb2DcAmt}"></td>
+						</th:block>
+						<th:block th:if="${goods.applyAmtSectionYn} != 'Y'">
+							<td class="tmtb2Sq" >0</td>
+							<td class="tmtb2DcAmt" >0</td>
+						</th:block>
+						<td class="goodsCpnSq">0</td>
+						<td class="goodsCpnDcAmt">0</td>
+						<td class="cartCpnSq">0</td>
+						<td class="cartCpnDcAmt">0</td>
+						<td class="prePntDcAmt1" 	th:text="${goods.prePntDcAmt}"></td>
+						<td class="dcSumAmt">0</td>
+						<td class="pntDcAmt1">0</td>
+						<td class="gfcdUseAmt1">0</td>
+						<td class="realOrdAmt1">0</td>
+						<td class="savePntAmt1" 	th:text="${goods.savePntAmt}"></td>
+						<td class="shotDelvYn" 		th:text="${goods.shotDelvYn}"></td>
+						<td class="foreignBuyYn" 	th:text="${goods.foreignBuyYn}"></td>
+						<td class="orderMadeYn" 	th:text="${goods.orderMadeYn}"></td>
+						<td class="delvFeeCd" 		th:text="${goods.delvFeeCd}"></td>
+					</tr>
+				</th:block>
+			</th:block>
+		</th:block>
+	</table>
+
+	<!-- 배송단위목록 -->
+	<table border="1" style="font-size:10px; text-align:center;  margin-top:20px; display:none;" name="delvFeeCdInfo">
+		<tr style="height:30px;">
+			<th>supplyCompCd</th>
+			<th>delvFeeCd</th>
+			<th>delvFee</th>
+			<th>delvCpnSq</th>
+			<th>delvCpnDcAmt</th>
+		</tr>
+		<th:block th:each="delvFeeCd, index : ${delvFeeCdList}">
+			<tr style="height:30px;">
+				<td class="supplyCompCd" th:text="${delvFeeCd.supplyCompCd}"></td>
+				<td class="delvFeeCd" th:text="${delvFeeCd.delvFeeCd}"></td>
+				<td class="delvFee" th:text="${delvFeeCd.delvFee}"></td>
+				<td class="delvCpnSq">0</td>
+				<td class="delvCpnDcAmt">0</td>
+			</tr>
+		</th:block>
+	</table>
+
+	<!-- 주문금액합계 -->
+	<table border="1" style="font-size:10px; text-align:center;  margin-top:20px; display:none;" name="orderSumAmtInfo">
+		<tr style="height:30px;">
+			<th>orgGoodsSumAmt</th>
+			<th>delvSumAmt</th>
+			<th>freegiftUsePnt</th>
+			<th>cpn1DcSumAmt</th>
+			<th>ordSumAmt</th>
+			<th>tmtb1DcSumAmt</th>
+			<th>tmtb2DcSumAmt</th>
+			<th>tmtbDcSumAmt</th>
+			<th>goodsCpnDcSumAmt</th>
+			<th>cartCpnDcSumAmt</th>
+			<th>delvCpnDcSumAmt</th>
+			<th>cpnDcSumAmt</th>
+			<th>prePntDcAmt</th>
+			<th>pntDcSumAmt</th>
+			<th>gfcdUseSumAmt</th>
+			<th>realOrdSumAmt</th>
+			<th>savePntSumAmt</th>
+		</tr>
+		<tr style="height:30px;">
+			<td class="orgGoodsSumAmt">0</td>
+			<td class="delvSumAmt" th:text="${sumDelvFee}"></td>
+			<td class="freegiftUsePnt">0</td>
+			<td class="cpn1DcSumAmt">0</td>
+			<td class="ordSumAmt">0</td>
+			<td class="tmtb1DcSumAmt">0</td>
+			<td class="tmtb2DcSumAmt">0</td>
+			<td class="tmtbDcSumAmt">0</td>
+			<td class="goodsCpnDcSumAmt">0</td>
+			<td class="cartCpnDcSumAmt">0</td>
+			<td class="delvCpnDcSumAmt">0</td>
+			<td class="cpnDcSumAmt">0</td>
+			<td class="prePntDcSumAmt">0</td>
+			<td class="pntDcSumAmt">0</td>
+			<td class="gfcdUseSumAmt">0</td>
+			<td class="realOrdSumAmt">0</td>
+			<td class="savePntSumAmt">0</td>
+		</tr>
+	</table>
+
+	<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="${delvFeeCdCnt}"></span> 건으로 나뉘어 배송 예정</th>
+												<td class="t_l">
+													<span>총알배송<em class="c_primary bold" th:text="${shotCnt}" id="shotCnt"></em>건</span>
+													<span>STYLE24<em class="c_primary bold" th:text="${wmsCnt}" id="wmsCnt"></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" style="display:none"></li>
+										<!-- //주문고객정보 -->
+										
+										<!-- 배송지정보 -->
+										<li class="fold_mbinfo" id="deliveryAddrInfo" style="display:none"></li>
+										<!-- //배송지정보 -->
+										
+										<!-- 사은품선택 -->
+										<li id="freegiftInfo" style="display:none"></li>
+										<!-- //사은품선택 -->
+										
+										<!-- 할인/혜택 사용 -->
+										<li id="dcAmtInfo" style="display:none"></li>
+										<!-- //할인/혜택 사용 -->
+										
+										<!-- 결제수단 선택 -->
+										<li class="fold_paymethod" id="paymentInfo" style="display:none"></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="${goodsTotCnt}"></em>개의 상품</span>
+								</div>
+								
+								<div id="orderListInfo" style="display:none">
+								</div>
+								
+								<div class="od_amount_box">
+									<dl>
+										<div>
+											<dt>상품금액</dt>
+											<dd id="orgGoodsSumAmt" th:text="|${#numbers.formatInteger(orgGoodsSumAmt, 1, 'COMMA')}원|"></dd>
+										</div>
+										<div>
+											<dt>배송비</dt>
+											<dd id="delvSumAmt" th:text="|${#numbers.formatInteger(sumDelvFee, 1, 'COMMA')}원|"></dd>
+										</div>
+										<div>
+											<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>
+											<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>
+											<dt>쿠폰할인금액</dt>
+											<dd><span class="disc_amount" id="couponDcSumAmt"></span></dd>
+										</div>
+										<div>
+											<dt>선포인트 사용</dt>
+											<th:block th:if="${prePntDcAmt} > 0">
+												<dd><span class="disc_amount" id="prePntDcAmt" th:text="|-${#numbers.formatInteger(prePntDcAmt, 1, 'COMMA')}원|"></span></dd>
+											</th:block>
+											<th:block th:if="${prePntDcAmt} < 1">
+												<dd><span class="disc_amount" id="prePntDcAmt" th:text="|${#numbers.formatInteger(prePntDcAmt, 1, 'COMMA')}원|"></span></dd>
+											</th:block>
+										</div>
+										<div>
+											
+											<dt>포인트 사용</dt>
+											<dd><span class="disc_amount" id="pntDcAmt">0원</span></dd>
+										</div>
+										<div>
+											
+											<dt>상품권 사용</dt>
+											<dd><span class="disc_amount" id="gfcdUseAmt">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">스타일 포인트 
+										<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">
+// 배송관련정보 변수선언
+var cartGoodsList		= [[${cartGoodsList}]]			// 배송목록
+var shotCnt 			= [[${shotCnt}]];				// 자사 총알 배송건수
+var wmsCnt 				= [[${wmsCnt}]];				// 자사 일반 배송건수
+var shotWmsCnt 			= [[${shotWmsCnt}]];			// 자사 총알,일반 배송건수
+var resCnt 				= [[${resCnt}]];				// 자사 예약 배송건수
+var delvCnt 			= [[${delvCnt}]];				// 입점 일반 배송건수
+var orgSumDelvFee		= [[${sumDelvFee}]];			// 최초배송비합계
+var prePntDcAmt			= [[${prePntDcAmt}]];			// 선포인트사용가능금액
+
+var custNm				= [[${order.custNm}]];			// 주문자명
+var cellPhnno			= [[${order.cellPhnno}]];		// 핸드폰번호
+var email				= [[${order.email}]];			// 이메일
+var recipZipcode		= [[${order.recipZipcode}]];	// 우편번호
+var recipBaseAddr		= [[${order.recipBaseAddr}]];	// 기본주소
+var recipDtlAddr		= [[${order.recipDtlAddr}]];	// 상세주소
+var cartSqArr			= [[${order.cartSqArr}]];		// 장바구니시퀀스 목록
+var shotDelvUseYn		= [[${order.shotDelvUseYn}]];	// 총알배송사용여부(장바구니)
+var shotDelvYn			= [[${order.shotDelvUseYn}]];	// 총알배송사용여부(장바구니)
+
+var foreignBuyYn		= [[${foreignBuyYn}]];			// 해외구매대행여부
+var orderMadeYn			= [[${orderMadeYn}]];			// 주문제작상품여부
+
+var custCpnSq 			= 0;
+var cpnIndex			= 0;
+var cpnApplyTemp		= false;
+
+//AJAX 로드를 위한 변수 설정
+var jsonObj 			= {};
+var jsonData			= null;
+
+// 컨텐츠 호출
+$(document).ready( function() {
+	
+	// 장바구니시퀀스 배열 변환
+	cartSqArr = String(cartSqArr).split(",");
+	
+	// AJAX 로드를 위한 변수 설정
+	jsonObj = {
+		"custNm" 			: custNm
+		, "cellPhnno" 		: cellPhnno
+		, "email" 			: email
+		, "recipZipcode" 	: recipZipcode
+		, "recipBaseAddr" 	: recipBaseAddr
+		, "recipDtlAddr" 	: recipDtlAddr
+		, "cartSqArr"		: cartSqArr
+		, "dispYn"			: "N"
+		, "shotDelvYn"		: shotDelvUseYn
+		, "foreignBuyYn"	: foreignBuyYn
+		, "orderMadeYn"		: orderMadeYn
+	}
+	
+	jsonData = JSON.stringify(jsonObj);
+
+	// 1. AJAX 정보(회원정보로드)
+	custemerInfoSet(jsonData);
+	
+	// 999. 개발화면정보설정
+	var devTemp = false;
+	var arr = []
+	arr[0] = "orderInfo";
+	arr[1] = "freegiftInfo";
+	arr[2] = "orderDetailInfo";
+	arr[3] = "delvFeeCdInfo";
+	arr[4] = "orderSumAmtInfo";
+	
+	if (devTemp) {
+		$("table").each(function(){
+			var name = $(this).attr("name");
+			for (i=0 ; i<arr.length ; i++) {
+				if (name == arr[i]) {
+					$(this).show();
+				}
+			}
+		});
+	}
+	
+});
+
+// 1. 함수기능 정의
+// 1.1 고객정보로드
+var custemerInfoSet = function(jsonData) {
+	$.ajax( {
+		type		: "POST",
+		url 		: '/order/custemerInfo',
+		data		: jsonData,
+		dataType 	: 'html',
+		beforeSend : function(xhr, settings) {
+			xhr.setRequestHeader("AJAX"			, "true");
+			xhr.setRequestHeader('Accept'		, 'application/json');
+			xhr.setRequestHeader('Content-Type'	, 'application/json');
+			gagajf.showProgressbar(true);
+		},
+		success 	: function(result) {
+			if (result != null) {
+				$("#custemerInfo").css("display", "block");
+				$("#custemerInfo").html(result);
+
+				// 고객정보설정
+				$(".custNm").text($("input[name='custNm'").val());
+				$(".email").text($("input[name='email'").val());
+				$(".cellPhnno").text($("input[name='cellPhnno'").val());
+			}
+			// 1.2 배송정보로드
+			deliveryAddrInfoSet(jsonData);
+		}
+	});
+}
+
+// 1.2 배송정보로드
+var deliveryAddrInfoSet = function(jsonData) {
+	$.ajax( {
+		type		: "POST",
+		url 		: '/order/deliveryAddrInfo',
+		data		: jsonData,
+		dataType 	: 'html',
+		beforeSend : function(xhr, settings) {
+			xhr.setRequestHeader("AJAX"			, "true");
+			xhr.setRequestHeader('Accept'		, 'application/json');
+			xhr.setRequestHeader('Content-Type'	, 'application/json');
+			gagajf.showProgressbar(true);
+		},
+		success 	: function(result) {
+			if (result != null) {
+				$("#deliveryAddrInfo").css("display", "block");
+				$("#deliveryAddrInfo").html(result);
+				
+				// 배송정보설정
+				$(".recipZipcode").text($("input[name='recipZipcode'").val());
+				$(".recipBaseAddr").text($("input[name='recipBaseAddr'").val());
+				$(".recipDtlAddr").text($("input[name='recipDtlAddr'").val());
+				$(".delvMemo").text($("input[name='delvMemo'").val());
+				$(".foreignBuyYn").text($("input[name='foreignBuyYn'").val());
+				$(".orderMadeYn").text($("input[name='orderMadeYn'").val());
+			}
+			
+			// 1.3 총알배송가능 지역, 총알배송 가능 시간 체크(초기로드정보)
+			fnGetDailyDeliveryCheck(true);
+		}
+	});
+}
+
+// 1.3 총알배송가능 지역, 총알배송 가능 시간 체크
+var fnGetDailyDeliveryCheck = function (temp) {
+	
+	// 장바구니 총알배송 사용여부 체크 N
+	if (shotDelvUseYn == "N") {
+		// 초기에 한번 데이타 로드
+		if (temp) {
+			// 1.4 주문상품목록로드
+			orderListInfoSet(jsonData, temp);
+		}
+	} else {
+		// 배송지 우편번호 체크
+		var zipcode		= $("input[name='recipZipcode']").val();
+	
+		// 총알배송여부 체크 배송지정보 존재여부 체크
+		if (zipcode == null || zipcode == '') {
+			//alert("배송지정보가 없습니다. 기본 총알배송 가능지역으로 설정 합니다.");
+			zipcode = "04320"; // 기본 서울역 우편번호로 설정
+		}
+		
+		// TODO
+		var shotDelvObj 	= {"zipNo" : zipcode};
+	
+		gagajf.ajaxJsonSubmit(
+			"/order/getDailyDeliveryCheck"
+			, JSON.stringify(shotDelvObj)
+			, function (result) {
+				// 총알배송여부체크
+				var tempShotDelvYn = "N";
+				
+				if (parseInt(result) > 0) {
+					tempShotDelvYn = "Y";
+				}
+				
+				// json 값 설정
+				var orderListObj 		= {"cartSqArr":cartSqArr, "shotDelvYn":tempShotDelvYn};
+				var orderListJsonData 	= JSON.stringify(orderListObj);
+				
+				if (temp) {
+					// 1.3 주문상품목록로드
+					orderListInfoSet(orderListJsonData, temp);
+				} else {
+					if (tempShotDelvYn != shotDelvYn) {
+						orderListInfoSet(orderListJsonData, temp);
+					}
+				}
+				
+				shotDelvYn = tempShotDelvYn;
+			}
+		)
+	}
+}
+
+// 1.4 주문상품목록로드
+var orderListInfoSet = function(orderListJsonData, temp) {
+	$.ajax( {
+		type		: "POST",
+		url 		: '/order/orderListInfo',
+		data		: orderListJsonData,
+		dataType 	: 'html',
+		beforeSend : function(xhr, settings) {
+			xhr.setRequestHeader("AJAX"			, "true");
+			xhr.setRequestHeader('Accept'		, 'application/json');
+			xhr.setRequestHeader('Content-Type'	, 'application/json');
+			gagajf.showProgressbar(true);
+		},
+		success 	: function(result) {
+			if (result != null) {
+				$("#orderListInfo").css("display", "block");
+				$("#orderListInfo").html(result);
+			}
+			
+			// 1.5 사은품정보로드
+			if (temp) {
+				freegiftInfoSet(jsonData);
+			}
+		}
+	});
+}
+
+// 1.5 사은품정보로드
+var freegiftInfoSet = function(jsonData) {
+	
+	$.ajax( {
+		type		: "POST",
+		url 		: '/order/freegiftInfo',
+		data		: jsonData,
+		dataType 	: 'html',
+		beforeSend : function(xhr, settings) {
+			xhr.setRequestHeader("AJAX"			, "true");
+			xhr.setRequestHeader('Accept'		, 'application/json');
+			xhr.setRequestHeader('Content-Type'	, 'application/json');
+			gagajf.showProgressbar(true);
+		},
+		success 	: function(result) {
+			if (result != null) {
+				$("#freegiftInfo").html(result);
+				
+				var total_gift 		= 0;
+				var total_deduct 	= 0;
+				
+				// 2.2 사은품선택 라디오 버튼 기능
+				$(".freegiftRdo").on("click", function() {
+					total_gift 		= 0;
+					total_deduct 	= 0;
+					
+					$(".freegiftRdo").each(function(){
+						if ($(this).attr("allYn") == "Y" ) {
+							total_gift 		+= 1;
+						}
+						
+						// 라디오버튼 사은품 체크
+						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.addComma());			// 사은품총사용포인트
+					$(".freegiftUsePnt").text(total_deduct);
+					
+					// 포인트초기화기능
+					pntDcAmtReset();
+				});
+				
+				// 사은품테이블 그리기
+				$(".gift_box").each(function(){
+					$(this).find(".freegiftRdo").each(function(){
+						if ($(this).attr("allYn") == "Y" ) {
+							total_gift += 1;
+						}
+						$(".total_gift").text(total_gift);							// 사은품총선택개수
+					});
+				});
+			}
+			
+			// 1.6 결제타입로드
+			paymentInfoSet(jsonData);
+		}
+	});
+}
+
+// 1.6 결제타입로드 (결제버튼기능구현)
+var paymentInfoSet = function(jsonData) {
+	$.ajax( {
+		type		: "POST",
+		url 		: '/order/paymentInfo',
+		data		: jsonData,
+		dataType 	: 'html',
+		beforeSend : function(xhr, settings) {
+			xhr.setRequestHeader("AJAX"			, "true");
+			xhr.setRequestHeader('Accept'		, 'application/json');
+			xhr.setRequestHeader('Content-Type'	, 'application/json');
+			gagajf.showProgressbar(true);
+		},
+		success 	: function(result) {
+			if (result != null) {
+				$("#paymentInfo").css("display", "block");
+				$("#paymentInfo").html(result);
+				
+				// 결재하기
+				$("#btn_payment").on("click", function(){
+					// 사은품정보
+					var freegiftValArr 		= $(".freegiftValArr").text().split(",");
+					var prePntDcAmtYn		= $("input[name='rdi-beforpoint']:checked").val();
+					var orderDetailList		= [];
+					var delvFeeCdList		= [];
+					var ordGoodsQty			= 0;
+					var goodsNm				= "";
+
+					// 주문상세데이타 생성
+					$(".cartSq").each(function(){
+						var orderDetailData = {
+							"cartSq"			: $(this).text()
+							,"currPrice"		: $(this).parent().find(".orgCurrPrice").text()
+							,"optAddPrice"		: $(this).parent().find(".optAddPrice").text()
+							,"ordAmt"			: $(this).parent().find(".ordAmt").text()
+							,"cpn1DcSq"			: $(this).parent().find(".cpn1DcSq").text()
+							,"cpn1DcAmt"		: $(this).parent().find(".cpn1DcAmt").text()
+							,"goodsQty"			: $(this).parent().find(".goodsQty").text()
+							,"tmtb1Sq"			: $(this).parent().find(".tmtb1Sq").text()
+							,"tmtb1DcAmt"		: $(this).parent().find(".tmtb1DcAmt").text()
+							,"tmtb2Sq"			: $(this).parent().find(".tmtb2Sq").text()
+							,"tmtb2DcAmt"		: $(this).parent().find(".tmtb2DcAmt").text()
+							,"goodsCpnSq"		: $(this).parent().find(".goodsCpnSq").text()
+							,"goodsCpnDcAmt"	: $(this).parent().find(".goodsCpnDcAmt").text()
+							,"cartCpnSq"		: $(this).parent().find(".cartCpnSq").text()
+							,"cartCpnDcAmt"		: $(this).parent().find(".cartCpnDcAmt").text()
+							,"prePntDcAmt"		: $(this).parent().find(".prePntDcAmt1").text()
+							,"pntDcAmt"			: $(this).parent().find(".pntDcAmt1").text()
+							,"gfcdUseAmt"		: $(this).parent().find(".gfcdUseAmt1").text()
+							,"realOrdAmt"		: $(this).parent().find(".realOrdAmt1").text()
+							,"savePntAmt"		: $(this).parent().find(".savePntAmt1").text()
+							,"shotDelvYn"		: $(this).parent().find(".shotDelvYn").text()
+							,"foreignBuyYn"		: $(this).parent().find(".foreignYn").text()
+							,"makeGoodsYn"		: $(this).parent().find(".orderMadeYn").text()
+							,"delvFeeCd"		: $(this).parent().find(".delvFeeCd").text()
+						}
+						
+						// 상품수
+						ordGoodsQty++;
+						
+						orderDetailList.push(orderDetailData);
+					});
+					
+					// 주문배송업체정보 생성
+					$(".delvFeeCd").each(function(){
+						var delvFeeCdData = {
+							"delvFeeCd"			: $(this).text()
+							,"supplyCompCd"		: $(this).parent().find(".supplyCompCd").text()
+							,"delvFee"			: $(this).parent().find(".delvFee").text()
+							,"delvCpnSq"		: $(this).parent().find(".delvCpnSq").text()
+							,"delvCpnDcAmt"		: $(this).parent().find(".delvCpnDcAmt").text()
+						}
+						
+						delvFeeCdList.push(delvFeeCdData);
+					});
+					
+					// 주문데이타 생성
+					var orderData = {
+						"custNm"				: $(".custNm").text()
+						,"email"				: $(".email").text()
+						,"recipPhnno"			: $(".cellPhnno").text()
+						,"recipZipcode"			: $(".recipZipcode").text()
+						,"recipBaseAddr"		: $(".recipBaseAddr").text()
+						,"recipDtlAddr"			: $(".recipDtlAddr").text()
+						,"delvMemo"				: $(".delvMemo").text()
+						,"freegiftValArr"		: freegiftValArr
+						,"prePntDcAmtYn"		: prePntDcAmtYn
+						,"orderDetailList"		: orderDetailList
+						,"delvFeeCdList"		: delvFeeCdList
+						,"shotDelvYn"			: shotDelvYn
+						,"entryNo"				: $("input[name='entryNo']").val()
+						,"pgGb"					: "KCP"
+						,"payMeans"				: "G014_30"
+						,"payAmt"				: $(".realOrdSumAmt").text()
+						,"ordNm"				: $(".custNm").text()
+						,"ordPhnno"				: $(".cellPhnno").text()
+						,"goodsNm"				: $(".goodsNm").eq(0).text()
+						,"ordGoodsQty"			: ordGoodsQty
+					};
+					
+					var orderData = JSON.stringify(orderData);
+					
+					$.ajax( {
+						type		: "POST",
+						url 		: '/order/create/preOrder',
+						data		: orderData,
+						dataType 	: 'html',
+						beforeSend : function(xhr, settings) {
+							xhr.setRequestHeader("AJAX"			, "true");
+							xhr.setRequestHeader('Accept'		, 'application/json');
+							xhr.setRequestHeader('Content-Type'	, 'application/json');
+							gagajf.showProgressbar(true);
+						},
+						success 	: function(result) {
+							// 결재정보로드
+							$("#order_info").html(result);
+							jsf__pay(document.order_info);
+						}
+					});
+				});
+
+				// 1.8 할인영역 설정
+				dcAmtInfoSet(jsonData);
+			}
+		}
+	});
+}
+
+// 1.7 프로모션 쿠폰 적용 함수
+var serialCpnApply = function(){
+	let data = {
+		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) {
+			var jsonObj 	= {"cartSqArr" : cartSqArr,"dispYn" : "Y"};
+			var jsonData 	= JSON.stringify(jsonObj);
+
+			// 성공일때는 쿠폰정보 및 포인트 정보 reset
+			if (result.serialCpnInfo.result == "SUCCESS") {
+				// 1.8 할인영역 재로드
+				dcAmtInfoSet(jsonData);
+			} else {
+				alert(result.serialCpnInfo.result);
+			}
+		}
+	});
+}
+
+// 1.8 할인영역 설정 (쿠폰, 선포인트, 포인트, 상품권)
+var dcAmtInfoSet = function(jsonData) {
+	// 1.8.1 할인정보로드
+	$.ajax( {
+		type		: "POST",
+		url 		: '/order/dcAmtInfo',
+		data		: jsonData,
+		dataType 	: 'html',
+		beforeSend : function(xhr, settings) {
+			xhr.setRequestHeader("AJAX"			, "true");
+			xhr.setRequestHeader('Accept'		, 'application/json');
+			xhr.setRequestHeader('Content-Type'	, 'application/json');
+			gagajf.showProgressbar(true);
+		},
+		success 	: function(result) {
+			if (result != null) {
+				$("#dcAmtInfo").css("display", "block");
+				$("#dcAmtInfo").html(result);
+				
+				// 1.8.2 쿠폰적용초기화(할인율최고)
+				custCpnInit();
+				
+				// 1.8.3 쿠폰 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);
+								}
+							}
+						});
+					});
+				});
+				
+				// 1.8.4 쿠폰 최대할인금액 초기화 버튼 설정
+				$("#chk-maxdisc").on("click", function(){
+					if ($(this).is(":checked")) {
+						custCpnInit();
+					}
+				});
+
+				// 1.8.5 쿠폰할인적용 삭제 버튼
+				$(".btn_del_coupon").on("click", function(){
+					//선택없음선택
+					$(this).parent().parent().find("ul li").each(function(i){
+						if (i == 0) {
+							cpnApplyDel($(this)); // 쿠폰 선택없음
+						}
+					});
+				});
+				
+				// 1.8.6 선포인트 적용 버튼 기능
+				$("input[name='rdi-beforpoint']").each(function(){
+					// 선포인트 초기 설정 사용함
+					if ($(this).val() == "Y") {
+						$(this).attr("checked", true);
+					}
+					
+					// 버튼기능 구현
+					$(this).on("click", function(){
+						var rmPrePntAmt 		= parseInt($("input[name='rmPrePntAmt']").val());
+						
+						// 선포인트적용
+						if ($(this).val() == "Y") {
+							$("#prePntDcAmt").text("-"+rmPrePntAmt.addComma()+"원");
+						} else {
+							$("#prePntDcAmt").text("0원");
+						}
+						
+						// 쿠폰할인금액 SUM
+						custCpnSumAmtCal();
+					});
+				});
+				
+				// 1.8.7 포인트 적용버튼 기능
+				$("#btn_point_apply").on("click", function(){
+					var rmPntAmt 			= parseInt($("input[name='rmPntAmt']").val());
+					var freegiftUsePnt 		= parseInt($(".freegiftUsePnt").text());
+					var pntDcAmt 			= parseInt($("input[name='pntDcAmtStr']").val());
+					var realOrdAmt 			= parseInt($(".realOrdSumAmt").text());
+					var applyPntDcAmt 		= (realOrdAmt * 40) / 100;
+					
+					rmPntAmt				= rmPntAmt - freegiftUsePnt;
+					
+					// 입력여부체크
+					if (pntDcAmt < 1) {
+						alert("사용할 포인트를 입력해주세요");
+						// 포인트리셋기능
+						pntDcAmtReset();
+						return false;
+					}
+					
+					// 보유포인트보다 초과 사용 불가
+					if (pntDcAmt > rmPntAmt) {
+						alert("보유포인트 보다 초과 사용 할 수 없습니다.");
+						// 포인트리셋기능
+						pntDcAmtReset();
+						return false;
+					}
+
+					// TODO 포인트 사용금액 1000P 이상 사용
+					if (pntDcAmt < 1000) {
+						alert("포인트는 최소 1,000P이상 사용해야 합니다.");
+						// 포인트리셋기능
+						pntDcAmtReset();
+						return false;
+					}
+					
+					// 실결제금액보다 크게 적용 되었을때 적용 불가능
+					if (pntDcAmt > applyPntDcAmt) {
+						alert("결제금액의 최대 40%를 초과 사용 할 수 없습니다.");
+						// 포인트리셋기능
+						pntDcAmtReset();
+						return false;
+					}
+					
+					// 포인트 적용
+					$(".pntDcSumAmt").text(pntDcAmt);
+					$("#pntDcAmt").text("-"+pntDcAmt.addComma()+"원");
+					
+					// 상품권리렛기능
+					gfcdUseAmtReset();
+				});
+				
+				// 1.8.8 상품권 적용버튼 기능
+				$("#btn_gfcd_apply").on("click", function(){
+					var rmGfcdAmt 		= parseInt($("input[name='rmGfcdAmt']").val());
+					var gfcdUseAmt 		= parseInt($("input[name='gfcdUseAmtStr']").val());
+					
+					// 입력여부체크
+					if (gfcdUseAmt < 1 || $("input[name='gfcdUseAmtStr']").val() == "") {
+						alert("사용할 금액을 입력해주세요");
+						// 상품권리셋기능
+						gfcdUseAmtReset();
+						return false;
+					}
+					
+					// 보유금액보다 초과 사용 불가
+					if (gfcdUseAmt > rmGfcdAmt) {
+						alert("보유금액 보다 초과 사용 할 수 없습니다.");
+						// 상품권리셋기능
+						gfcdUseAmtReset();
+						return false;
+					}
+
+					// TODO 포인트 사용금액 1000원 이상 사용
+					if (gfcdUseAmt < 1000) {
+						alert("상품권 사용금액은 최소 1,000원 이상 사용해야 합니다.");
+						// 상품권리셋기능
+						gfcdUseAmtReset();
+						return false;
+					}
+					
+					// 상품권 적용
+					$(".gfcdUseSumAmt").text(gfcdUseAmt);
+					$("#gfcdUseAmt").text("-"+gfcdUseAmt.addComma()+"원");
+					
+					// 금액전체계산
+					custCpnSumAmtCal();
+				});
+				
+				// 금액계산초기화
+				custCpnSumAmtCal();
+			}
+		}
+	});
+}
+
+// 1.9 쿠폰 최대할인율 쿠폰적용
+var custCpnInit = function() {
+	
+	// 쿠폰적용없음적용
+	$(".select_custom.type1").each(function(index){
+		// select box 쿠폰 적용
+		var cpnCartSq = $(this).find("input[name='cpnCartSq']").val();
+		
+		// 장바구니시퀀스 체크
+		$(".cartSq").each(function(){
+			if (cpnCartSq == $(this).text()) {
+				$(this).parent().find(".goodsCpnSq").text("0");			// 상품쿠폰시퀀스
+				$(this).parent().find(".goodsCpnDcAmt").text("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;
+					}
+				}
+			}
+		});
+	});
+	
+	// 포인트기능 리렛
+	pntDcAmtReset();
+}
+
+// 1.10 쿠폰중복사용체크
+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;
+	}
+}
+
+// 1.11 쿠폰중복체크 후 적용가능
+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();
+		
+		// 장바구니시퀀스 체크
+		$(".cartSq").each(function(){
+			if (cpnCartSq == $(this).text()) {
+				$(this).parent().find(".goodsCpnSq").text(obj.prop("value"));			// 상품쿠폰시퀀스
+				$(this).parent().find(".goodsCpnDcAmt").text(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 cartSqLen			= $(".cartSq").length;
+		var leftAmt				= 0;
+		var index				= 1;
+		
+		// 장바구니쿠폰 해당 장바구니상품들 할인가 적용
+		obj.find("input[name='cartCpnCartSq']").each(function(){
+			var cartCpnCartSq 		= $(this).val();
+			var cartCpnDcAmt		= 0;
+			
+			// 장바구니시퀀스 체크
+			$(".cartSq").each(function(){
+				if (cartCpnCartSq == $(this).text()) {
+					var orgCurrPrice 	= parseInt($(this).parent().find(".orgCurrPrice").text());
+					var tmtb1DcAmt 		= parseInt($(this).parent().find(".tmtb1DcAmt").text());
+					var tmtb2DcAmt 		= parseInt($(this).parent().find(".tmtb2DcAmt").text());
+					var goodsCpnDcAmt 	= parseInt($(this).parent().find(".goodsCpnDcAmt").text());
+					
+					var tempAmt 		= orgCurrPrice - tmtb1DcAmt - tmtb2DcAmt - goodsCpnDcAmt;
+					tempSumAmt			= tempSumAmt + tempAmt; 
+					
+					// 할인율일때 할인금액 
+					if (dcWay == "G240_20") {
+						cartCpnDcAmt = (tempAmt * dcVal) / 100;
+						cartCpnDcSumAmt = cartCpnDcSumAmt + cartCpnDcAmt;
+						
+						$(this).parent().find(".cartCpnSq").val(obj.prop("value"));
+						$(this).parent().find(".cartCpnDcAmt").val(cartCpnDcAmt);
+					}
+				}
+			});
+		});
+		
+		// 금액일때 할인금액 적용
+		if (dcWay == "G240_10") {
+			cartCpnDcSumAmt = dcVal;
+			leftAmt			= dcVal;
+			index = 1;
+			
+			// 장바구니쿠폰 해당 장바구니상품들 할인가 적용
+			obj.find("input[name='cartCpnCartSq']").each(function(){
+				var cartCpnCartSq 		= $(this).val();
+				var cartCpnDcAmt		= 0;
+									
+				// 장바구니시퀀스 체크
+				$(".cartSq").each(function(){
+					if (cartCpnCartSq == $(this).text()) {
+						var orgCurrPrice 	= parseInt($(this).parent().find(".orgCurrPrice").text());
+						var tmtb1DcAmt 		= parseInt($(this).parent().find(".tmtb1DcAmt").text());
+						var tmtb2DcAmt 		= parseInt($(this).parent().find(".tmtb2DcAmt").text());
+						var goodsCpnDcAmt 	= parseInt($(this).parent().find(".goodsCpnDcAmt").text());
+						
+						var tempAmt 		= orgCurrPrice - tmtb1DcAmt - tmtb2DcAmt - goodsCpnDcAmt;
+						var tempDiv 		= parseInt((tempAmt / tempSumAmt) * 100);
+						var cartCpnDcAmt	= 0;
+				
+						if (index == cartSqLen) {
+							cartCpnDcAmt 	= leftAmt;
+						} else {
+							cartCpnDcAmt	= parseInt((cartCpnDcSumAmt * tempDiv) / 100);
+							leftAmt 		= leftAmt - cartCpnDcAmt;
+						}
+						
+						$(this).parent().find(".cartCpnSq").text(obj.prop("value"));
+						$(this).parent().find(".cartCpnDcAmt").text(cartCpnDcAmt);
+						
+						index++;
+					}
+				});
+			});
+		} 
+		
+		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") {
+		var delvFee 		= parseInt(obj.attr("delvfee"));
+		var delvCpnDcAmt 	= parseInt(obj.attr("data"));
+		var delvFeeCd 		= obj.attr("delvfeecd");
+		
+		// 배송비가 배송비쿠폰할인금액보다 클경우 배송비 - 배송비쿠폰할인금액을 적용
+		if (delvFee > delvCpnDcAmt) {
+			cpnDcAmt = delvFee - delvCpnDcAmt;
+		} else {
+			cpnDcAmt = delvFee;
+		}
+		
+		// 적용된 할인금액 text 설정 
+		var dcAmtStr = "- " + cpnDcAmt.addComma() + " 원 할인적용";
+		
+		obj.parent().parent().parent().parent().parent().find(".cp_amount").text(dcAmtStr);
+		
+		obj.parent().parent().find("input[name='cpnDcAmt']").val(cpnDcAmt);
+		obj.parent().parent().find("input[name='delvFeeCd']").val(obj.attr("delvfeecd"));
+		
+		$(".delvCpnDcSumAmt").text(obj.attr("data"));
+				
+		// 배송비쿠폰 테이블 적용
+		
+		$(".delvFeeCd").each(function(){
+			if ($(this).text() == delvFeeCd) {
+				$(this).parent().find(".delvCpnSq").text(obj.prop("value"));
+				$(this).parent().find(".delvCpnDcAmt").text(obj.attr("data"));
+			}
+		});
+	}
+	
+	// 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");
+	
+	// 포인트기능 리렛
+	pntDcAmtReset();
+}
+
+// 1.12 쿠폰중복체크 후 적용불가
+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");
+			}
+		}
+	});
+	
+	// 포인트기능 리렛
+	pntDcAmtReset();
+}
+
+// 1.13 쿠폰 선택없음 기능 구현
+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();
+		
+		// 장바구니시퀀스 체크
+		$(".cartSq").each(function(){
+			if (cpnCartSq == $(this).text()) {
+				$(this).parent().find(".goodsCpnSq").text("0");			// 상품쿠폰시퀀스
+				$(this).parent().find(".goodsCpnDcAmt").text("0");		// 상품쿠폰할인금액
+			}
+		});
+	}
+	// 장바구니쿠폰적용
+	else if (cpnType == "cartCpn") {
+		// 장바구니쿠폰 시퀀스 0, 장바구니할인금액 0
+		$(".cartSq").each(function(){
+			$(this).parent().find(".cartCpnSq").text("0");
+			$(this).parent().find(".cartCpnDcAmt").text("0");
+		});
+	}
+	// 배송비쿠폰적용
+	else if (cpnType == "delvCpn") {
+		// 장바구니쿠폰 시퀀스 0, 장바구니할인금액 0
+		//$("input[name='custCpnSq']").each(function(){
+			//$(this).parent().find("input[name='delvFeeCd']").val("0");
+		//});
+		
+		obj.parent().parent().find("input[name='delvFeeCd']").val("0");
+		$(".delvCpnSq").text("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");
+	
+	// 포인트기능 리렛
+	pntDcAmtReset();
+	
+	// 최대할인혜택적용 체크해제
+	if ($("#chk-maxdisc").is(":checked")) {
+		$("#chk-maxdisc").attr("checked", false);
+	}
+}
+
+// 1.14 선포인트리셋기능 (사용안함)
+var prePntDcAmtReset = function() {
+	var rmPrePntAmt = parseInt($("input[name='rmPrePntAmt']").val());
+	$("input[name='prePntDcAmt']").val(rmPrePntAmt);
+	
+	// 선포인트사용여부 체크 후 적용
+	$("input[name='rdi-beforpoint']").each(function(){
+		// 선포인트 초기 설정 사용함
+		if ($(this).val() == "Y") {
+			$(this).attr("checked", true);
+		}
+	});
+
+	$("#prePntDcAmt").text("-"+rmPrePntAmt.addComma()+"원");
+	
+	// 포인트기능 리렛
+	pntDcAmtReset();
+}
+
+// 1.15 포인트리셋기능
+var pntDcAmtReset = function() {
+	$(".pntDcSumAmt").text("0");
+	$("input[name='pntDcAmtStr']").val("");
+	$("#pntDcAmt").text("0원");
+	
+	// 상품권리셋기능
+	gfcdUseAmtReset();
+}
+
+// 1.16 상품권리셋기능
+var gfcdUseAmtReset = function() {
+	$(".gfcdUseSumAmt").text("0");
+	$("input[name='gfcdUseAmtStr']").val("");
+	$("#gfcdUseAmt").text("0원");
+	
+	// 금액전체계산
+	custCpnSumAmtCal();
+}
+
+// 1.17 쿠폰할인금액합계설정(금액전체계산)
+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() + "원"); // 쿠폰할인금액합계
+	$(".cpnDcSumAmt").text(cpnDcSumAmt);
+	
+	// 배송비할인적용
+	$("input[name='cpnType']").each(function(){
+		if ($(this).val() == "delvCpn") {
+			var delvSumAmt = parseInt(orgSumDelvFee) - parseInt($(this).parent().find("input[name='cpnDcAmt']").val());
+			
+			// 최종배송비
+			$("#delvSumAmt").text(delvSumAmt.addComma() + "원");
+			$(".delvSumAmt").text(delvSumAmt);
+		}
+	});
+	
+	// 2021.03.06 주문상세 테이블 적용
+	// 포인트금액 상품상세에 포인트금액 분배 작업
+	var prePntDcAmtYn 		= $("input[name='rdi-beforpoint']:checked").val();
+	var leftPntAmt			= parseInt($(".pntDcSumAmt").text());
+	var leftGfcdAmt			= parseInt($(".gfcdUseSumAmt").text());
+	var cartSqLenght		= $(".cartSq").length; 
+	var index				= 1;
+	
+	var orgGoodsSumAmt		= 0;
+	var cpn1DcSumAmt		= 0;
+	var ordSumAmt			= 0;
+	var tmtb1DcSumAmt		= 0;
+	var tmtb2DcSumAmt		= 0;
+	var tmtbDcSumAmt		= 0;
+	var goodsCpnDcSumAmt	= 0;
+	var cartCpnDcSumAmt		= 0;
+	var delvCpnDcSumAmt		= 0;
+	var cpnDcSumAmt			= 0;
+	var prePntDcSumAmt		= 0;
+	var pntDcSumAmt 		= parseInt($(".pntDcSumAmt").text());
+	var gfcdUseSumAmt 		= parseInt($(".gfcdUseSumAmt").text());
+	var realOrdSumAmt		= 0;
+	var savePntSumAmt		= 0;
+	
+	$(".cartSq").each(function(){
+		var orgCurrPrice 	= parseInt($(this).parent().find(".orgCurrPrice").text());
+		var cpn1DcAmt		= parseInt($(this).parent().find(".cpn1DcAmt").text());
+		var optAddPrice 	= parseInt($(this).parent().find(".optAddPrice").text());
+		var goodsQty 		= parseInt($(this).parent().find(".goodsQty").text());
+		var tmtb1DcAmt		= parseInt($(this).parent().find(".tmtb1DcAmt").text());
+		var tmtb2DcAmt		= parseInt($(this).parent().find(".tmtb2DcAmt").text());
+		var goodsCpnDcAmt	= parseInt($(this).parent().find(".goodsCpnDcAmt").text());
+		var cartCpnDcAmt	= parseInt($(this).parent().find(".cartCpnDcAmt").text());
+		var prePntDcAmt1	= parseInt($(this).parent().find(".prePntDcAmt1").text());
+		var dcSumAmt		= 0;
+		var savePntAmt1		= parseInt($(this).parent().find(".savePntAmt1").text());
+		
+		// 주문금액 = ((판매가 - 즉시할인가) + 옵션추가금액) * 장바구니수량
+		orgGoodsSumAmt		= orgGoodsSumAmt + (orgCurrPrice + optAddPrice) * goodsQty;
+		cpn1DcSumAmt		= cpn1DcSumAmt + cpn1DcAmt;
+		tmtb1DcSumAmt		= tmtb1DcSumAmt + tmtb1DcAmt;
+		tmtb2DcSumAmt		= tmtb2DcSumAmt + tmtb2DcAmt;
+		tmtbDcSumAmt		= tmtbDcSumAmt + (tmtb1DcAmt + tmtb2DcAmt);
+		goodsCpnDcSumAmt	= goodsCpnDcSumAmt + goodsCpnDcAmt;
+		cartCpnDcSumAmt		= cartCpnDcSumAmt + cartCpnDcAmt;
+		cpnDcSumAmt			= cpnDcSumAmt + (goodsCpnDcAmt + cartCpnDcAmt);
+		prePntDcSumAmt		= prePntDcSumAmt + prePntDcAmt1;
+		
+		var ordAmt			= ((orgCurrPrice +  - cpn1DcAmt) + optAddPrice) * goodsQty;
+		ordSumAmt			= ordSumAmt + ordAmt;
+		
+		// 선포인트사용여부
+		// 할인금액합계 = 다다익선수량금액 + 다다익선금액금액 + 상품쿠폰금액 + 장바구니금액 + 선포인트금액
+		if (prePntDcAmtYn == "Y") {
+			dcSumAmt		= tmtb1DcAmt + tmtb2DcAmt + goodsCpnDcAmt + cartCpnDcAmt + prePntDcAmt1;
+		} else {
+			dcSumAmt		= tmtb1DcAmt + tmtb2DcAmt + goodsCpnDcAmt + cartCpnDcAmt;
+		}
+		
+		// 주문금액설정
+		$(this).parent().find(".ordAmt").text(ordAmt);
+		$(this).parent().find(".dcSumAmt").text(dcSumAmt);
+		
+		savePntSumAmt		= savePntSumAmt + savePntAmt1;
+	});
+	
+	// 포인트, 상품권 금액 분배
+	$(".cartSq").each(function(){
+		var ordAmt 			= parseInt($(this).parent().find(".ordAmt").text());
+		var dcSumAmt		= parseInt($(this).parent().find(".dcSumAmt").text()); 
+		var tempDiv 		= parseInt((ordAmt / ordSumAmt) * 100);
+		var pntDcAmt1 		= 0;
+		var gfcdUseAmt1		= 0;
+		
+		if (index == cartSqLenght) {
+			pntDcAmt1 		= leftPntAmt;
+			gfcdUseAmt1		= leftGfcdAmt;
+		} else {
+			pntDcAmt1 		= parseInt((pntDcSumAmt * tempDiv) / 100);
+			gfcdUseAmt1		= parseInt((gfcdUseSumAmt * tempDiv) / 100);
+			leftPntAmt		= leftPntAmt - pntDcAmt1;
+			leftGfcdAmt		= leftGfcdAmt - gfcdUseAmt1;
+		}
+		
+		var realOrdAmt1		= ordAmt - dcSumAmt - (pntDcAmt1 - gfcdUseAmt1);
+		realOrdSumAmt		= realOrdSumAmt + realOrdAmt1;
+		
+		$(this).parent().find(".pntDcAmt1").text(pntDcAmt1);
+		$(this).parent().find(".gfcdUseAmt1").text(gfcdUseAmt1);
+		$(this).parent().find(".realOrdAmt1").text(realOrdAmt1);
+		
+		index++;
+	});
+	
+	$(".orgGoodsSumAmt").text(orgGoodsSumAmt);
+	$(".cpn1DcSumAmt").text(cpn1DcSumAmt);
+	$(".ordSumAmt").text(ordSumAmt);
+	$(".tmtb1DcSumAmt").text(tmtb1DcSumAmt);
+	$(".tmtb2DcSumAmt").text(tmtb2DcSumAmt);
+	$(".tmtbDcSumAmt").text(tmtbDcSumAmt);
+	$(".goodsCpnDcSumAmt").text(goodsCpnDcSumAmt);
+	$(".cartCpnDcSumAmt").text(cartCpnDcSumAmt);
+	$(".cpnDcSumAmt").text(cpnDcSumAmt);
+	$(".prePntDcSumAmt").text(prePntDcSumAmt);
+	$(".realOrdSumAmt").text(realOrdSumAmt);
+	$(".savePntSumAmt").text(savePntSumAmt);
+	
+	$("#realOrdAmt").text(realOrdSumAmt.addComma() + "원"); // 총 결제 예정 금액
+	
+	var tempSavePnt			= savePntSumAmt - prePntDcAmt;
+	
+	// 사은품사용 후 보유포인트	
+	var rmPntAmt 			= parseInt($("input[name='rmPntAmt']").val());
+	var freegiftUsePnt 		= parseInt($(".freegiftUsePnt").text());
+	rmPntAmt 				= rmPntAmt - freegiftUsePnt; 
+	$(".rmPntAmt").text("보유 : " + rmPntAmt.addComma() + "P");
+	
+	// 걸제영역
+	$("#btn_payment").text("동의 후 "+realOrdSumAmt.addComma()+"원 결제하기");
+	
+	// 적립포인트
+	$("#savePntSumAmt").text(savePntSumAmt.addComma()+"P");
+	
+	// 사은품정보 설정
+	var freegiftValArr 			= [];
+	var freegiftUsePointArr 	= [];
+		
+	$(".gift_box").each(function(){
+		$(this).find(".freegiftRdo").each(function(){
+			// 사은품필수
+			if ($(this).attr("allYn") == "Y" ) {
+				freegiftValArr.push($(this).val());
+				freegiftUsePointArr.push($(this).attr("usepoint"));
+			}
+			
+			// 라디오버튼 선택 사은품 체크
+			if ($(this).is(":checked")) {
+				// 수령거부가 아닐때 체크
+				if ($(this).val() != "noSel") {
+					freegiftValArr.push($(this).val());
+					freegiftUsePointArr.push($(this).attr("usepoint"));
+				}
+			}
+		});
+	});
+	
+	$(".freegiftValArr").text(freegiftValArr);				// 사은품시퀀스배열
+	$(".freegiftUsePointArr").text(freegiftUsePointArr);	// 사은품사용포인트배열
+};
+
+
+</script>
+
+<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>
+
+</th:block>
+</body>
+</html>

+ 1 - 1
src/main/webapp/WEB-INF/views/web/order/OrderDeliveryAddrInfoWeb.html

@@ -98,7 +98,7 @@
 							</div>
 							<div class="info_box overs1">
 								<div class="input_wrap">
-									<input type="text" class="form_control err" maxlength="13" placeholder="P로 시작하는 13자리">
+									<input type="text" name="entryNo" class="form_control err" maxlength="13" placeholder="P로 시작하는 13자리" value="abcde12345qwe">
 									<!-- 유효하지 않은 개인통관고유부호 일때 class명 'err' 추가 -->
 								</div>
 								<div class="t_err">개인통관고유부호가 유효하지 않습니다.</div>

+ 80 - 290
src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html

@@ -26,286 +26,9 @@
 <!-- payment.js -->
 <script type="text/javascript" th:src="${@environment.getProperty('pg.kcp.js.url')}" src=""></script>
 <script type="text/javascript" src="/ux/pc/js/payment.js"></script>
-	<script type="text/javascript">
-		$(document).on("click", "#buyBtn", function() {
-			$.ajax({
-				type: "POST",
-				url : '/order/create/preOrder',
-				dataType : 'html',
-				data : {
-					  pgGb		: "KCP"
-					, payMeans	: "G014_30"
-					, ordNo		: "5"
-					, goodsNm	: "상품 테스트"
-					, payAmt	: "1233"
-					, ordNm		: "이태영"
-					, ordEmail	: "xodud1202@naver.com"
-					, ordTelno	: "02-0000-0000"
-					, ordPhnno	: "010-7111-0000"
-				},
-				error : function(e) {
-					alert(3);
-				},
-				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" ></form>
-	
-	<div style="margin:20px;">
-		<input type="button" id="buyBtn" value="KCP테스트버튼" style="width:200px; height:70px; background-color: #fd4801; color: white; border: unset;"/>
-		<input type="button" id="kakaoBtn" value="카카오테스트버튼" style="width:200px; height:70px; background-color: #fffa00; color: black; border: unset;"/>
-		<input type="button" id="naverBtn" value="네이버테스트버튼" style="width:200px; height:70px; background-color: lawngreen; color: black; border: unset;"/>
-	</div>
-<!-- // xodud1202 -->
-
-
-<!-- card007 -->
-	<script th:inline="javascript">
-		$(document).on("click", "#kakaoBtn", function() {
-			$.ajax({
-				type: "POST",
-				url : '/order/create/preOrder',
-				dataType : 'html',
-				data : {
-					pgGb			: "KAKAO"
-					, custNo		: [[${sessionInfo.custNo}]]
-					, ordNo			: 1000
-					, goodsNm		: "상품 테스트"
-					, payAmt		: 30000
-					, ordGoodsQty	: [[${goodsTotCnt}]]
-				},
-				error : function(e) {
-					console.log(e.responseText);
-				},
-				success : function(result) {
-					$("#order_info").html(result);
-					fnKakaoPaymentReady();
-				}
-			});
-			//let url = '/order/create/preOrder';
-			//let data = {};
-			//data.pgGb = 'KAKAO';
-			//data.ordNo = 1000;
-			//data.custNo = [[${sessionInfo.custNo}]];
-			//data.goodsNm = '상품 테스트';
-			//data.ordGoodsQty = [[${goodsTotCnt}]];
-			//data.payAmt = 30000;
-			//
-			//let jsonData = JSON.stringify(data);
-			//
-			//gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-			//	$("#order_info").html(result);
-			//	console.log(result);
-			//	fnKakaoPaymentReady();
-			//});
-		});
-
-		// 카카오페이 결제준비 처리
-		var fnKakaoPaymentReady = function() {
-			let nextRedirectUrl = $('#order_info input[name=nextRedirectPcUrl]').val();
-			let option = 'width=420, height=520';
-
-			window.open(nextRedirectUrl, 'kakaoPaymentPopup', option);
-		}
-
-		// 카카오페이 결제 승인 요청
-		var fnKakaoPaymentRequest = function(pgToken) {
-			$('#order_info input[name=pgToken]').val(pgToken);
-
-			// TODO
-			// formSubmit
-
-			// 테스트용 호출
-			let url = '/order/kakao/payment/approve';
-			let data = {};
-			data.pgTid = $('#order_info input[name=pgTid]').val();
-			data.partnerOrderId = $('#order_info input[name=partnerOrderId]').val();
-			data.partnerUserId = $('#order_info input[name=partnerUserId]').val();
-			data.pgToken = $('#order_info input[name=pgToken]').val();
-
-			let jsonData = JSON.stringify(data);
-
-			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-				console.log('====== kakaoPaymentRequest ======');
-				console.log(result.payment);
-				console.log(' ');
-				fnKakaoPaymentOrder();
-			});
-
-			return true;
-		}
-
-		// 카카오페이 결제 정보 조회 (테스트용 호출)
-		var fnKakaoPaymentOrder = function() {
-			let url = '/order/kakao/payment/order';
-			let data = {};
-			data.pgTid = $('#order_info input[name=pgTid]').val();
-
-			let jsonData = JSON.stringify(data);
-
-			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-				console.log('====== kakaoPaymentOrder ======');
-				console.log(result.kakaoPay);
-				console.log(' ');
-				fnCancelKakaoPayment();
-			});
-
-			return true;
-		}
-
-		// 카카오페이 결제 취소 (테스트용 호출)
-		var fnCancelKakaoPayment = function() {
-			let url = '/order/kakao/payment/cancel';
-			let data = {};
-			data.pgTid = $('#order_info input[name=pgTid]').val();
-			data.payAmt = 1000;
-
-			let jsonData = JSON.stringify(data);
-
-			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-				console.log('====== kakaoPaymentCancel ======');
-				console.log(result.kakaoPay);
-				console.log(' ');
-
-			});
-		}
-
-	</script>
-
-	<!-- =========== 네이버페이 ============= -->
-	<script th:inline="javascript">
-		$(document).on("click", "#naverBtn", function() {
-			$.ajax({
-				type: "POST",
-				url : '/order/create/preOrder',
-				dataType : 'html',
-				data : {
-					pgGb			: "NAVER"
-					, custNo		: [[${sessionInfo.custNo}]]
-					, ordNo			: 1000
-					, goodsNm		: "상품 테스트"
-					, payAmt		: 1000
-					, ordGoodsQty	: [[${goodsTotCnt}]]
-				},
-				error : function(e) {
-					mcxDialog.alert(e.responseText);
-				},
-				success : function(result) {
-					$("#order_info").html(result);
-					fnNaverPaymentReady();
-				}
-			});
-			//let url = '/order/create/preOrder';
-			//let data = {};
-			//data.pgGb = 'NAVER';
-			//data.ordNo = 1000;
-			//data.custNo = [[${sessionInfo.custNo}]];
-			//data.goodsNm = "상품 테스트";
-			//data.ordGoodsQty = [[${goodsTotCnt}]];
-			//data.payAmt = 30000;
-			//
-			//let jsonData = JSON.stringify(data);
-			//
-			//gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-			//	$("#order_info").html(result);
-			//	fnNaverPaymentReady();
-			//});
-		});
-		
-		// 네이버페이 결제준비 처리
-		var fnNaverPaymentReady = function() {
-			let naverPayUrl = 'https://' + [[${@environment.getProperty('naverPay.payUrl.web')}]];
-			let reserveId = $('#order_info input[name=reserveId]').val();
-			let url = naverPayUrl + '/payments/' + reserveId;
-			console.log(url);
-			let option = 'width=750, height=' + $(window).height();
-			
-			window.open(url, 'naverPaymentPopup', option);
-		}
-
-		// 네이버페이 결제 승인 요청
-		var fnNaverPaymentRequest = function(paymentId) {
-			$('#order_info input[name=pgTid]').val(paymentId);
-			
-			// TODO
-			// formSubmit
-			
-			// 테스트용 호출
-			let url = '/order/naver/payment/approve';
-			let data = {};
-			data.pgTid = $('#order_info input[name=pgTid]').val();
-			data.paySq = 1234;
-			data.custNo = [[${sessionInfo.custNo}]];
-			data.updNo = [[${sessionInfo.custNo}]];
-
-			let jsonData = JSON.stringify(data);
-
-			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-				console.log('====== naverPaymentRequest ======');
-				console.log(result.payment);
-				console.log(' ');
-				fnNaverPaymentOrder();
-			});
-
-			return true;
-		}
-		
-		// 네이버페이 결제 정보 조회 (테스트용 호출)
-		var fnNaverPaymentOrder = function() {
-			let url = '/order/naver/payment/order';
-			let data = {};
-			data.pgTid = $('#order_info input[name=pgTid]').val();
-			
-			let jsonData = JSON.stringify(data);
-			
-			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-				console.log('====== naverPaymentOrder ======');
-				console.log(result.naverPay);
-				console.log(' ');
-				fnCancelNaverPayment();
-			});
-			
-			return true;
-		}
-
-		// 네이버페이 결제 취소 (테스트용 호출)
-		var fnCancelNaverPayment = function() {
-			let url = '/order/naver/payment/cancel';
-			let data = {};
-			data.pgTid = $('#order_info input[name=pgTid]').val();
-			data.cancelRequester = '1';
-			data.chgReasonNm = '고객변심';
-			data.payAmt = 1000;
-			data.paySq = 1234;
-			data.custNo = [[${sessionInfo.custNo}]];
-			data.updNo = [[${sessionInfo.custNo}]];
-
-			let jsonData = JSON.stringify(data);
-
-			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-				console.log('====== naverPaymentCancel ======');
-				console.log(result.naverPay);
-				console.log(' ');
-			});
-		}
-
-	</script>
-<!-- // card007 -->
-
-
-
-
-
-
 
 
+<form id="order_info" name="order_info" method="post" action="/order/pay/result/response" ></form>
 
 <!--  container -->
 <form id="payForm" name="payForm">
@@ -343,10 +66,14 @@
 		<tr style="height:30px;">
 			<th>freegiftValArr</th>
 			<th>freegiftUsePointArr</th>
+			<th>freegiftSqArr</th>
+			<th>freegiftGoodsArr</th>
 		</tr>
 		<tr style="height:30px;">
 			<td class="freegiftValArr"></td>
 			<td class="freegiftUsePointArr"></td>
+			<td class="freegiftSqArr"></td>
+			<td class="freegiftGoodsArr"></td>
 		</tr>
 	</table>
 
@@ -354,6 +81,7 @@
 	<table border="1" style="font-size:10px; text-align:center; margin-top:20px; display:none;" name="orderDetailInfo">
 		<tr style="height:30px;">
 			<th>cartSq</th>
+			<th style="display:none">goodsNm</th>
 			<th>orgCurrPrice</th>
 			<th>cpn1DcSq</th>
 			<th>cpn1DcAmt</th>
@@ -384,6 +112,7 @@
 				<th:block th:each="goods, i : ${delvAllCart}">
 					<tr style="height:30px;">
 						<td class="cartSq" 			th:text="${goods.cartSq}"></td>
+						<td class="goodsNm" 		th:text="${goods.goodsNm}" style="display:none"></td>
 						<td class="orgCurrPrice" 	th:text="${goods.orgCurrPrice}"></td>
 						<td class="cpn1CpnSq" 		th:text="${goods.cpn1CpnSq}"></td>
 						<td class="cpn1DcAmt" 		th:text="${goods.orgCurrPrice} - ${goods.currPrice}"></td>
@@ -938,7 +667,7 @@ var freegiftInfoSet = function(jsonData) {
 						if ($(this).attr("allYn") == "Y" ) {
 							total_gift += 1;
 						}
-						$(".total_gift").text(total_gift);							// 사은품총선택개수
+						$(".total_gift").text(total_gift);						// 사은품총선택개수
 					});
 				});
 			}
@@ -974,6 +703,8 @@ var paymentInfoSet = function(jsonData) {
 					var prePntDcAmtYn		= $("input[name='rdi-beforpoint']:checked").val();
 					var orderDetailList		= [];
 					var delvFeeCdList		= [];
+					var ordGoodsQty			= 0;
+					var goodsNm				= "";
 
 					// 주문상세데이타 생성
 					$(".cartSq").each(function(){
@@ -990,19 +721,23 @@ var paymentInfoSet = function(jsonData) {
 							,"tmtb2Sq"			: $(this).parent().find(".tmtb2Sq").text()
 							,"tmtb2DcAmt"		: $(this).parent().find(".tmtb2DcAmt").text()
 							,"goodsCpnSq"		: $(this).parent().find(".goodsCpnSq").text()
-							,"goodsCpnDCAmt"	: $(this).parent().find(".goodsCpnDCAmt").text()
+							,"goodsCpnDcAmt"	: $(this).parent().find(".goodsCpnDcAmt").text()
 							,"cartCpnSq"		: $(this).parent().find(".cartCpnSq").text()
-							,"carrtCpnDCAmt"	: $(this).parent().find(".cartCpnDCAmt").text()
+							,"cartCpnDcAmt"		: $(this).parent().find(".cartCpnDcAmt").text()
 							,"prePntDcAmt"		: $(this).parent().find(".prePntDcAmt1").text()
 							,"pntDcAmt"			: $(this).parent().find(".pntDcAmt1").text()
 							,"gfcdUseAmt"		: $(this).parent().find(".gfcdUseAmt1").text()
+							,"realOrdAmt"		: $(this).parent().find(".realOrdAmt1").text()
 							,"savePntAmt"		: $(this).parent().find(".savePntAmt1").text()
 							,"shotDelvYn"		: $(this).parent().find(".shotDelvYn").text()
 							,"foreignBuyYn"		: $(this).parent().find(".foreignYn").text()
-							,"orderMadeYn"		: $(this).parent().find(".orderMadeYn").text()
+							,"makeGoodsYn"		: $(this).parent().find(".orderMadeYn").text()
 							,"delvFeeCd"		: $(this).parent().find(".delvFeeCd").text()
 						}
 						
+						// 상품수
+						ordGoodsQty++;
+						
 						orderDetailList.push(orderDetailData);
 					});
 					
@@ -1032,6 +767,18 @@ var paymentInfoSet = function(jsonData) {
 						,"prePntDcAmtYn"		: prePntDcAmtYn
 						,"orderDetailList"		: orderDetailList
 						,"delvFeeCdList"		: delvFeeCdList
+						,"shotDelvYn"			: shotDelvYn
+						,"entryNo"				: $("input[name='entryNo']").val()
+						,"pgGb"					: "KCP"
+						,"payMeans"				: "G014_30"
+						,"payAmt"				: $(".realOrdSumAmt").text()
+						,"ordNm"				: $(".custNm").text()
+						,"ordPhnno"				: $(".cellPhnno").text()
+						,"goodsNm"				: $(".goodsNm").eq(0).text()
+						,"ordGoodsQty"			: ordGoodsQty
+						,"freegiftValArr"		: $(".freegiftValArr").text().split(",")
+						,"freegiftSqArr"		: $(".freegiftSqArr").text().split(",")
+						,"freegiftGoodsArr"		: $(".freegiftGoodsArr").text().split(",")
 					};
 					
 					var orderData = JSON.stringify(orderData);
@@ -1049,14 +796,14 @@ var paymentInfoSet = function(jsonData) {
 						},
 						success 	: function(result) {
 							// 결재정보로드
-							//$("#order_info").html(result);
-							//jsf__pay(document.order_info);
+							$("#order_info").html(result);
+							jsf__pay(document.order_info);
+							//fnKakaoPaymentReady();
+							//fnNaverPaymentReady();
 						}
 					});
 				});
-				
-				
-				
+
 				// 1.8 할인영역 설정
 				dcAmtInfoSet(jsonData);
 			}
@@ -1280,6 +1027,9 @@ var dcAmtInfoSet = function(jsonData) {
 					// 금액전체계산
 					custCpnSumAmtCal();
 				});
+				
+				// 금액계산초기화
+				custCpnSumAmtCal();
 			}
 		}
 	});
@@ -1703,13 +1453,13 @@ var custCpnSumAmtCal = function() {
 		cpnDcSumAmt			= cpnDcSumAmt + (goodsCpnDcAmt + cartCpnDcAmt);
 		prePntDcSumAmt		= prePntDcSumAmt + prePntDcAmt1;
 		
-		var ordAmt			= ((orgCurrPrice - cpn1DcAmt) + optAddPrice) * goodsQty;
+		var ordAmt			= ((orgCurrPrice +  - cpn1DcAmt) + optAddPrice) * goodsQty;
 		ordSumAmt			= ordSumAmt + ordAmt;
 		
 		// 선포인트사용여부
 		// 할인금액합계 = 다다익선수량금액 + 다다익선금액금액 + 상품쿠폰금액 + 장바구니금액 + 선포인트금액
 		if (prePntDcAmtYn == "Y") {
-			dcSumAmt		= tmtb1DcAmt + tmtb2DcAmt + goodsCpnDcAmt + cartCpnDcAmt + prePntDcAmt1;			
+			dcSumAmt		= tmtb1DcAmt + tmtb2DcAmt + goodsCpnDcAmt + cartCpnDcAmt + prePntDcAmt1;
 		} else {
 			dcSumAmt		= tmtb1DcAmt + tmtb2DcAmt + goodsCpnDcAmt + cartCpnDcAmt;
 		}
@@ -1762,7 +1512,7 @@ var custCpnSumAmtCal = function() {
 	$(".realOrdSumAmt").text(realOrdSumAmt);
 	$(".savePntSumAmt").text(savePntSumAmt);
 	
-	$("#realOrdAmt").text(realOrdSumAmt.addComma() + "원"); // 총 결제 예정 금액
+	$("#realOrdAmt").text(realOrdSumAmt.addComma()); // 총 결제 예정 금액
 	
 	var tempSavePnt			= savePntSumAmt - prePntDcAmt;
 	
@@ -2006,6 +1756,46 @@ $(document).ready( function() {
 		$("#qPayidConfirm_pop").modal("show");
 		return false;
 	});
+
+	// 카카오페이 결제준비 처리
+	var fnKakaoPaymentReady = function() {
+		let nextRedirectUrl = $('#order_info input[name=nextRedirectPcUrl]').val();
+		let option = 'width=420, height=520';
+		
+		window.open(nextRedirectUrl, 'kakaoPaymentPopup', option);
+	}
+
+	// 카카오페이 결제 승인 요청
+	var fnKakaoPaymentRequest = function(pgToken) {
+		// Token 값 설정
+		$('#order_info input[name=pgToken]').val(pgToken);
+		
+		// Form Submit
+		document.order_info.submit();
+		
+		return true;
+	}
+	
+	// 네이버페이 결제준비 처리
+	var fnNaverPaymentReady = function() {
+		let naverPayUrl = 'https://' + [[${@environment.getProperty('naverPay.payUrl.web')}]];
+		let reserveId = $('#order_info input[name=reserveId]').val();
+		let url = naverPayUrl + '/payments/' + reserveId;
+		let option = 'width=750, height=' + $(window).height();
+		
+		window.open(url, 'naverPaymentPopup', option);
+	}
+	
+	// 네이버페이 결제 승인 요청
+	var fnNaverPaymentRequest = function(paymentId) {
+		// TID 설정
+		$('#order_info input[name=pgTid]').val(paymentId);
+
+		// Form Submit
+		document.order_info.submit();
+
+		return true;
+	}
 });
 </script>
 

+ 18 - 2
src/main/webapp/WEB-INF/views/web/order/OrderFreegiftInfoWeb.html

@@ -103,8 +103,9 @@
 
 <script th:inline="javascript">
 //할인관련정보 변수선언
-var freegiftList		= [[${freegiftList}]];			// 사은품 프로모션 목록
-var freegiftGoodsList	= [[${freegiftGoodsList}]];		// 사은품 프로모션 상품 목록
+var freegiftApplyAmtList	= [[${freegiftApplyAmtList}]];		// 사은품장바구니목록
+var freegiftList			= [[${freegiftList}]];				// 사은품 프로모션 목록
+var freegiftGoodsList		= [[${freegiftGoodsList}]];			// 사은품 프로모션 상품 목록
 
 //컨텐츠 호출
 $(document).ready( function() {
@@ -114,6 +115,21 @@ $(document).ready( function() {
 	} else {
 		$("#freegiftInfo").css("display", "block");
 	}
+	
+	// 사은품시퀀스배열, 
+	var freegiftSqArr 		= [];
+	var freegiftGoodsArr 	= [];
+	
+	// 사은품 장바구니 상품 뿌리기
+	for (i=0 ; i<freegiftApplyAmtList.length ; i++) {
+		var obj = freegiftApplyAmtList[i];
+		freegiftSqArr.push(obj.freegiftSq);
+		freegiftGoodsArr.push(obj.goodsCd);
+	}
+	
+	$(".freegiftSqArr").text(freegiftSqArr);
+	$(".freegiftGoodsArr").text(freegiftGoodsArr);
+	
 });
 </script>
 </th:block>

+ 31 - 0
src/main/webapp/WEB-INF/views/web/order/test.html

@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderFormWeb.html
+ * @desc    : 주문/결제 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.01   jsh77b     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<form action="https://dev-tracking-api.sweettracker.net/add_invoice" method="post">
+<input name="num" value="1234567890">
+<input name="code" value="04">
+<input name="fid" value="100000123">
+<input name="callback_url" value="http://www.naver.com">
+<input name="tier" value="istyle24">
+<input name="key" value="0C48PI6KnOVVKGHWXyggMA">
+<input name="type" value="json">
+<button>Send</button>
+</form>
+
+<script>
+</script>
+</body>
+</html>

+ 210 - 0
src/main/webapp/ux/mo/js/payment.js

@@ -0,0 +1,210 @@
+var ajax_flag = true;
+var req01_AJAX;
+var PayUrl="";
+
+function initRequest() {
+	if ( window.XMLHttpRequest ) {
+		return new XMLHttpRequest();
+	} else if ( window.ActiveXObject ) {
+		return new ActiveXObject( "Microsoft.XMLHTTP" );
+	}
+}
+
+function sendRequest( url ) {
+	req01_AJAX = null;
+	req01_AJAX = initRequest();
+	
+	if ( req01_AJAX ) {
+		req01_AJAX.onreadystatechange = process_AJAX;
+		req01_AJAX.open( "POST", url, true );
+		req01_AJAX.send( null );
+	}
+}
+
+function kcp_AJAX() {
+	// 해당 소스는 jQuery를 사용 하지 않는 업체에서도 작동 할수 있도록 구현되었습니다.
+	// 이 부분은 javascript로 구현시 jQuery를 이용하면 더욱 쉽게 구현 할수 있습니다.
+	// 또는
+	// javascript를 통한 ajax 통신을 할 필요 없이 소스내에 order_approval.jsp를 연동해서 사용 하셔도 관계 없으며
+	// 제공되는 jar 파일에 직접 전달된 데이터를 사용할수 있도록 method가 구현 되어 있습니다.
+	if(ajax_flag) {
+		var url    = "order_approval.jsp";
+		var form = document.order_info;
+		var params = "?site_cd=" + form.site_cd.value
+			+ "&ordr_idxx=" + form.ordr_idxx.value
+			+ "&good_mny=" + form.good_mny.value
+			+ "&pay_method=" + form.pay_method.value
+			+ "&escw_used=" + form.escw_used.value
+			+ "&good_name=" + form.good_name.value
+			+ "&response_type=" + form.response_type.value
+			+ "&Ret_URL=" + form.Ret_URL.value;
+		sendRequest( url + params );
+		
+		ajax_flag = false;
+	} else {
+		alert("통신 중입니다. 잠시만 기다려 주세요.");
+	}
+	
+}
+
+function process_AJAX() {
+	if ( req01_AJAX.readyState == 4 ) {		//READY_STATE_COMPLETE = 4
+		if ( req01_AJAX.status == 200 ) {
+			if ( req01_AJAX.responseText != null ) {
+				// 해당 소스는 jQuery를 사용 하지 않는 업체에서도 작동 할수 있도록 구현되었습니다.
+				// 이 부분은 javascript로 구현시 jQuery를 이용하면 더욱 쉽게 구현 할수 있습니다.
+				// 또는
+				// javascript를 통한 ajax 통신을 할 필요 없이 소스내에 order_approval.jsp를 연동해서 사용 하셔도 관계 없으며
+				// 제공되는 jar 파일에 직접 전달된 데이터를 사용할수 있도록 method가 구현 되어 있습니다.
+				try {
+					var form = document.order_info;
+					
+					if( form.response_type.value == "JSON" ) {
+						StateChangeForJSON( req01_AJAX ); // JSON 방식일 경우
+					} else if( form.response_type.value == "XML" ) {
+						StateChangeForXML( req01_AJAX ); // XML 방식일 경우
+					} else if( form.response_type.value == "TEXT" || form.response_type.value == "" ) {
+						StateChangeForText( req01_AJAX ); // TEXT 방식일 경우
+					}
+				} catch( e ) {
+					StateChangeForText( req01_AJAX ); // TEXT 방식일 경우
+				}
+			}
+		} else {
+			ajax_flag=true;
+			alert( req01_AJAX.responseJSON );
+		}
+	}
+}
+
+function StateChangeForText( req ) {
+	var txt = req01_AJAX.responseText.split( ":" );
+	
+	if( txt[0].replace(/^\s*/,'').replace(/\s*$/,'') == '0000' ) {
+		document.getElementById( "approval" ).value = txt[1].replace(/^\s*/,'').replace(/\s*$/,'');
+		// 아래 alert는 삭제 해도됨
+		alert("성공적으로 거래가 등록 되었습니다.");
+		PayUrl = decodeURIComponent( txt[2].replace(/^\s*/,'').replace(/\s*$/,'') );
+		
+		document.getElementById( "traceNo" ).value = txt[3].replace(/^\s*/,'').replace(/\s*$/,'');
+		
+		if( txt.length == 6 )
+			document.getElementById( "PayUrl"  ).value = txt[5].replace(/^\s*/,'').replace(/\s*$/,'');
+		
+		call_pay_form();
+	} else {
+		var res_msg = txt[2].replace(/^\s*/,'').replace(/\s*$/,'');
+		
+		ajax_flag=true;
+		alert("실패 되었습니다.[" + res_msg + "]");
+	}
+}
+
+function StateChangeForXML( req ) {
+	var xmlDoc = ( new DOMParser() ).parseFromString( req.responseText.replace(/^\s*/,'').replace(/\s*$/,''), "text/xml" ).documentElement;
+	
+	var x = xmlDoc.getElementsByTagName( "data" );
+	
+	if( x[0].getElementsByTagName( "Code" )[0].childNodes[0].nodeValue == '0000' ) {
+		document.getElementById( "approval" ).value = x[0].getElementsByTagName( "approvalKey" )[0].childNodes[0].nodeValue;
+		// 아래 alert는 삭제 해도됨
+		alert("성공적으로 거래가 등록 되었습니다.");
+		PayUrl = x[0].getElementsByTagName( "PayUrl" )[0].childNodes[0].nodeValue;
+		
+		document.getElementById( "traceNo" ).value = x[0].getElementsByTagName( "traceNo"     )[0].childNodes[0].nodeValue;
+		
+		try{
+			document.getElementById( "PayUrl"  ).value = x[0].getElementsByTagName( "request_URI" )[0].childNodes[0].nodeValue;
+		}catch(e){}
+		
+		call_pay_form();
+	} else {
+		ajax_flag=true;
+		
+		alert("실패 되었습니다.[" + x[0].getElementsByTagName( "Message" )[0].childNodes[0].nodeValue + "]");
+	}
+}
+
+
+function StateChangeForJSON( xmlHttpRequest ) {
+	var json = eval('('+ xmlHttpRequest.responseText +')');
+	
+	if( json.Code == '0000' ) {
+		document.getElementById( "approval" ).value = json.approvalKey;
+		// 아래 alert는 삭제 해도됨
+		alert("성공적으로 거래가 등록 되었습니다.");
+		PayUrl = json.PayUrl;
+		
+		document.getElementById( "PayUrl"  ).value = json.request_URI;
+		document.getElementById( "traceNo" ).value = json.traceNo;
+		
+		call_pay_form();
+	} else {
+		ajax_flag=true;
+		
+		alert("실패 되었습니다.[" + json.Message + "]");
+	}
+}
+
+/* kcp web 결제창 호츨 (변경불가) */
+function call_pay_form() {
+	var v_frm = document.order_info;
+	
+	if(v_frm.encoding_trans == undefined) {
+		v_frm.action = PayUrl;
+	} else {
+		if(v_frm.encoding_trans.value == "UTF-8") {
+			v_frm.action = PayUrl.substring(0, PayUrl.lastIndexOf("/")) + "/jsp/encodingFilter/encodingFilter.jsp";
+			v_frm.payUrl.value = PayUrl;
+		} else {
+			v_frm.action = PayUrl;
+		}
+	}
+	
+	if (v_frm.Ret_URL.value == "") {
+		/* Ret_URL값은 현 페이지의 URL 입니다. */
+		alert("연동시 Ret_URL을 반드시 설정하셔야 됩니다.");
+		return false;
+	} else {
+		v_frm.submit();
+	}
+}
+
+/* kcp 통신을 통해 받은 암호화 정보 체크 후 결제 요청 (변경불가) */
+function chk_pay() {
+	self.name = "tar_opener";
+	var pay_form = document.pay_form;
+	
+	if (pay_form.res_cd.value == "3001" ) {
+		alert("사용자가 취소하였습니다.");
+		pay_form.res_cd.value = "";
+	}
+	
+	if (pay_form.enc_info.value)
+		pay_form.submit();
+}
+
+var isMobile = {
+	Android: function() {
+		return navigator.userAgent.match(/Android/i);
+	},
+	BlackBerry: function() {
+		return navigator.userAgent.match(/BlackBerry/i);
+	},
+	iOS: function() {
+		return navigator.userAgent.match(/iPhone|iPad|iPod/i);
+	},
+	Opera: function() {
+		return navigator.userAgent.match(/Opera Mini/i);
+	},
+	Windows: function() {
+		return navigator.userAgent.match(/IEMobile/i);
+	},
+	any: function() {
+		return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
+	}
+};
+
+if( isMobile.any() )
+	document.getElementById("cssLink").setAttribute("href", controlCss);
+

+ 0 - 0
src/main/webapp/ux/pc/js/cart.js → src/main/webapp/ux/pc/js/mypage.js