Преглед изворни кода

Merge branch 'develop' into jsshin

jsshin пре 5 година
родитељ
комит
910c31588d
38 измењених фајлова са 781 додато и 142 уклоњено
  1. 17 0
      src/main/java/com/style24/front/biz/dao/TsfCartDao.java
  2. 20 0
      src/main/java/com/style24/front/biz/service/TsfCartService.java
  3. 0 1
      src/main/java/com/style24/front/biz/service/TsfCouponService.java
  4. 3 0
      src/main/java/com/style24/front/biz/service/TsfOrderChangeService.java
  5. 1 2
      src/main/java/com/style24/front/biz/service/TsfOrderService.java
  6. 18 0
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  7. 13 1
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  8. 46 30
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  9. 160 0
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  10. 3 4
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  11. 37 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml
  12. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfGiftcard.xml
  13. 12 3
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml
  14. 23 3
      src/main/java/com/style24/persistence/mybatis/shop/TsfPoint.xml
  15. 1 1
      src/main/resources/config/application-locd.yml
  16. 0 2
      src/main/webapp/WEB-INF/views/mob/cart/CartChangeOptionPopupMob.html
  17. 1 4
      src/main/webapp/WEB-INF/views/mob/cart/CartListAjaxFormMob.html
  18. 21 3
      src/main/webapp/WEB-INF/views/mob/cart/CartListFormMob.html
  19. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  20. 17 5
      src/main/webapp/WEB-INF/views/mob/mypage/MypageGiftcardFormMob.html
  21. 2 0
      src/main/webapp/WEB-INF/views/web/cart/CartChangeOptionPopupWeb.html
  22. 3 3
      src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html
  23. 19 6
      src/main/webapp/WEB-INF/views/web/cart/CartListFormWeb.html
  24. 23 17
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  25. 13 7
      src/main/webapp/WEB-INF/views/web/display/LookbookDetailFormWeb.html
  26. 6 3
      src/main/webapp/WEB-INF/views/web/display/LookbookMainFormWeb.html
  27. 1 1
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  28. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  29. 2 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreCancelDetailFormWeb.html
  30. 14 3
      src/main/webapp/WEB-INF/views/web/mypage/MypageGiftcardFormWeb.html
  31. 1 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderDetailFormWeb.html
  32. 13 9
      src/main/webapp/WEB-INF/views/web/mypage/MypagePointForm2Web.html
  33. 92 0
      src/main/webapp/WEB-INF/views/web/order/OrderAddPaymentCompleteWeb.html
  34. 100 23
      src/main/webapp/WEB-INF/views/web/order/OrderAddPaymentFormWeb.html
  35. 1 3
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  36. 79 1
      src/main/webapp/biz/goods.js
  37. 8 1
      src/main/webapp/biz/mypage.js
  38. 8 3
      src/main/webapp/ux/style24_link.js

+ 17 - 0
src/main/java/com/style24/front/biz/dao/TsfCartDao.java

@@ -291,4 +291,21 @@ public interface TsfCartDao {
 	 * @since 2021. 04. 04
 	 */
 	int updateCartGoodsQty(Cart param);
+
+	/**
+	 * 최근 등록된 상품 100개를 제외한 장바구니 제거
+	 * @param Cart
+	 * @return void
+	 * @author xodud1202
+	 * @since 2021. 04. 16
+	 */
+	void deleteOldCart(Cart param);
+
+	/**
+	 * 장바구니에 없는 장바구니 상세 데이터 삭제
+	 * @return void
+	 * @author xodud1202
+	 * @since 2021. 04. 16
+	 */
+	void deleteCartDetailFromEmptyCart();
 }

+ 20 - 0
src/main/java/com/style24/front/biz/service/TsfCartService.java

@@ -214,6 +214,11 @@ public class TsfCartService {
 			}
 		}
 
+		// 100개 이상 저장된 장바구니 삭제
+		if("C".equals(cartGb) || cartGb.equals(TscConstants.CartGb.CART.value())) {
+			deleteOldCart();
+		}
+
 		result.put("cartSqList", cartSqList);
 		result.put("goodsType", goodsType);
 		result.put("cartGb", cartGb);
@@ -223,6 +228,21 @@ public class TsfCartService {
 		return result;
 	}
 
+	@Transactional("shopTxnManager")
+	public void deleteOldCart() {
+		Cart deleteCart = new Cart();
+		if(TsfSession.isLogin()) {
+			deleteCart.setCustNo(TsfSession.getInfo().getCustNo());
+		} else {
+			deleteCart.setCustNo(0);
+		}
+
+		deleteCart.setJsessionId(TsfSession.getSessionId());
+
+		cartDao.deleteOldCart(deleteCart);
+		cartDao.deleteCartDetailFromEmptyCart();
+	}
+
 	@Transactional("shopTxnManager")
 	public void saveSetTypeCartInfo(Collection<Cart> params, List<Integer> cartSqs) {
 		Cart cart = new Cart();

+ 0 - 1
src/main/java/com/style24/front/biz/service/TsfCouponService.java

@@ -682,7 +682,6 @@ public class TsfCouponService {
 
 		int count = 0;
 		for (Coupon tmpCoupon : goodsCouponList) {
-
 			for (int i = 0; i < downloadCnt; i++) {
 				CustCoupon custCoupon = new CustCoupon();
 				custCoupon.setCustNo(TsfSession.getInfo().getCustNo());

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

@@ -216,6 +216,9 @@ public class TsfOrderChangeService {
 		result.setString("allCanYn", allCanYn);									// 전체 취소 여부
 		result.setString("allLastCanYn", allLastCanYn);							// 전체 마지막 취소 여부
 		result.setString("allCanYnBeforePayment", allCanYnBeforePayment);		// 무통장입금전 전체 취소 여부
+		result.setString("pgTid", cnclRtn.getPgTid());							// PG거래ID
+		result.setString("payMeans", cnclRtn.getPayMeans());					// 결제수단
+		result.setString("pgGb", cnclRtn.getPgGb());							// PG구분
 		result.set("cnclReqList", cnclReqList);									// 취소신청목록
 
 		return result;

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

@@ -332,8 +332,7 @@ public class TsfOrderService {
 			// TB_PAYMENT 등록. 실패시 PG 환불.
 			if(coreOrderDao.insertPayment(result) < 1) {
 				if(TscConstants.PgGb.KCP.value().equals(param.getPgGb()) || TscConstants.PgGb.PAYCO.value().equals(param.getPgGb())) {
-					result.setIpAddress(request.getRemoteAddr());
-					coreKcpService.kcpPayRollBack(result);
+					coreKcpService.kcpCancel(result);
 				} else if (TscConstants.PgGb.KAKAO.value().equals(param.getPgGb())) {
 					coreKakaoPayService.kakaoPayRollBack(param);
 				} else if (TscConstants.PgGb.NAVER.value().equals(param.getPgGb())) {

+ 18 - 0
src/main/java/com/style24/front/biz/web/TsfDisplayController.java

@@ -415,6 +415,16 @@ public class TsfDisplayController extends TsfBaseController {
 	@GetMapping("/lookbook/main/form")
 	public ModelAndView lookbookMain(Lookbook lookbook) {
 		ModelAndView mav = new ModelAndView(super.getDeviceViewName("display/LookbookMainForm"));
+		// 브랜드그룹 정보 : 브랜드메인 링크에 설정된 기획전으로 들어올때 GNB 변경때문에 사용
+		if(lookbook.getBrandGroupNo() != null && !lookbook.getBrandGroupNo().equals("")){
+			lookbook.setBrandCd(lookbook.getBrandGroupNo().toString());
+			lookbook.setLookbookGb("BL");
+			mav.addObject("brandGroupInfo", displayService.getGnbBrandGroup(lookbook.getBrandGroupNo()));
+		}else{
+			lookbook.setLookbookGb("B");
+			mav.addObject("brandGroupInfo", null);
+		}
+
 		mav.addObject("lbInfo", lookbook);
 		return mav;
 	}
@@ -460,6 +470,8 @@ public class TsfDisplayController extends TsfBaseController {
 		mav.addObject("lookbookDetailList", lookbookList);
 		mav.addObject("otherLookbookList", coreLookbookService.getOtherLookbookList(lookbook));
 		mav.addObject("lookbookInfo", lookbook);
+		// 브랜드그룹 정보 : 브랜드메인 링크에 설정된 기획전으로 들어올때 GNB 변경때문에 사용
+		mav.addObject("brandGroupInfo", displayService.getGnbBrandGroup(lookbook.getBrandGroupNo()));
 
 		mav.setViewName(super.getDeviceViewName("display/LookbookDetailForm"));
 		return mav;
@@ -525,6 +537,12 @@ public class TsfDisplayController extends TsfBaseController {
 		mav.addObject("filterColorList", displayService.getCategoryFilter(cate4Srch, "COLOR"));
 		mav.addObject("filterBenefitList", displayService.getCategoryFilterBenefit(cate4Srch));
 		mav.addObject("sortGb", "new");
+		// 브랜드그룹 정보 : 브랜드메인 링크에 설정된 기획전으로 들어올때 GNB 변경때문에 사용
+		if(cate4Srch.getBrandGroupNo() != null && !cate4Srch.getBrandGroupNo().equals("") && !cate4Srch.getBrandGroupNo().equals(0)){
+			mav.addObject("brandGroupInfo", displayService.getGnbBrandGroup(cate4Srch.getBrandGroupNo()));
+		}else{
+			mav.addObject("brandGroupInfo", null);
+		}
 		mav.addObject("cateInfo", cate4Srch);
 
 		return mav;

+ 13 - 1
src/main/java/com/style24/front/biz/web/TsfGoodsController.java

@@ -3,6 +3,7 @@ package com.style24.front.biz.web;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.HashMap;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -13,6 +14,7 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
@@ -209,6 +211,7 @@ public class TsfGoodsController extends TsfBaseController {
 				// 상품 옵션1(색상) 정보
 				mav.addObject("goodsOption1List", goodsService.getGoodsOption1List(paramsGoods));
 				// 상품 옵션2(사이즈) 정보
+				if (StringUtils.isEmpty(paramsGoods.getMastrGoodsCd())) paramsGoods.setMastrGoodsCd(goods.getGoodsCd());
 				mav.addObject("goodsOption2List", goodsService.getGoodsOption2List(paramsGoods));
 //				} else {
 //					mav.addObject("goodsOptionList", goodsService.getGoodsOptionList(paramsGoods));
@@ -283,6 +286,8 @@ public class TsfGoodsController extends TsfBaseController {
 		setTodayGoodsCd(paramsGoods);
 		
 		mav.addObject("params", paramsGoods);
+		mav.addObject("afLinkCd", afLinkCd);	// 파라미터 제휴코드
+		
 
 		if (TscConstants.GoodsType.DEAL.value().equals(goods.getGoodsType())) {
 			if ("Y".equals(mobileYn)) {
@@ -661,6 +666,7 @@ public class TsfGoodsController extends TsfBaseController {
 
 		// 자사 일반상품- 옵션2(사이즈) 정보
 		paramsGoods.setOptCd1(colorCd);
+		if (StringUtils.isEmpty(paramsGoods.getMastrGoodsCd())) paramsGoods.setMastrGoodsCd(goods.getGoodsCd());
 		mav.addObject("goodsOption2List", goodsService.getGoodsOption2List(paramsGoods));
 
 		mav.setViewName(super.getDeviceViewName("goods/GoodsInstockAlarmForm"));
@@ -1285,9 +1291,15 @@ public class TsfGoodsController extends TsfBaseController {
 	 */
 	@GetMapping("/epCoupon/list")
 	@ResponseBody
-	public Collection<Coupon> getEpGouponList(Goods paramsGoods) {
+	public Collection<Coupon> getEpGouponList(@RequestParam HashMap<String, String> paramMap) {
 		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
+		Goods paramsGoods = new Goods();
 		setGoods(paramsGoods);
+		
+		// 순서중요 setGoods 이후에 설정
+		paramsGoods.setAfLinkCd(paramMap.get("afLinkCd"));
+		paramsGoods.setGoodsCd(paramMap.get("goodsCd"));
+		paramsGoods.setMaxRownum(Integer.parseInt(paramMap.get("maxRownum")));
 		return couponService.getGoodsEpCouponList(paramsGoods);
 	}
 

+ 46 - 30
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -725,6 +725,7 @@ public class TsfMypageController extends TsfBaseController {
 		// @ 결품취소로직 추가
 		// @ 주문취소시 상태값 체크
 		// @ 취소, 반품시 배송비 체크 로직 (선결제 로직)
+		GagaMap result = new GagaMap();
 
 		// 1. 세션회원조회
 		int custNo = TsfSession.getInfo().getCustNo();
@@ -737,36 +738,50 @@ public class TsfMypageController extends TsfBaseController {
 		String allLastCanYn = refundPreInfo.getString("allLastCanYn");
 		String allCanYnBeforePayment = refundPreInfo.getString("allCanYnBeforePayment");
 
-		// 3. 환불금액계산
-		// 2021.01.19 취소신청정보를 목록 (주문상세번호, 취소/반품수량) 으로 표현
-		GagaMap result = coreOrderRefundService.cnclRtnRefundAmt(cnclReqList);
-
-		// 4. 주문변경 기본정보 설정
-		result.set("ordNo", orderChange.getOrdNo());				// 주문번호
-		result.set("ordChgSq", orderChange.getOrdChgSq());			// 주문변경번호
-		result.set("chgReason", orderChange.getChgReason());		// 변경사유
-		result.set("chgMemo", orderChange.getChgMemo());			// 변경메모
-
-		result.set("accountNo", orderChange.getAccountNo());		// 환불계좌번호
-		result.set("accountNm", orderChange.getAccountNm());		// 환불계좌예금주명
-		result.set("bankCd", orderChange.getBankCd());				// 환불계좌은행코드
-
-		result.set("allCanYnBeforePayment", allCanYnBeforePayment);	// 무통장입금전 전체취소 여부
-		result.set("allCanYn", allCanYn);							// 전체취소 여부
-		result.set("allLastCanYn", allLastCanYn);					// 전체 마지막 취소 여부
-		result.set("isCustomer", orderChange.getIsCustomer());		// 변경사유 (고객, 회사)
-
-		// 5. 주문변경 회수지정보 추가
-		// result.set("chgerNm", orderChange.getChgerNm());				// 변경자명
-		// result.set("chgerEmail", orderChange.getChgerEmail());		// 변경자이메일주소
-		// result.set("chgerPhnno", orderChange.getChgerPhnno());		// 변경자핸드폰번호
-		// result.set("chgerTelno", orderChange.getChgerTelno());		// 변경자전화번호
-
-		result.set("reqGbn", orderChange.getReqGbn());				// 신청구분
-		result.set("ipAddress", TsfSession.getIpAddress());			// IP주소
-
-		// 6. 주문변경 DB 등록 (TB_ORDER_CHANGE, TB_ORDER_CHANGE_DETAIL)
-		coreOrderChangeService.cnclComplete(result, custNo);
+		// 전체취소, 부분취소 구분 처리 진행 
+		if ("Y".equals(allCanYn)) {
+			orderChange.setChgGb(TscConstants.OrderChangeGb.CANCEL.value());
+			orderChange.setIpAddress(TsfSession.getIpAddress());
+			orderChange.setRegNo(custNo);
+			orderChange.setUpdNo(custNo);
+			
+			coreOrderChangeService.allCnclComplete(orderChange);
+		} else {
+			// 3. 환불금액계산
+			// 2021.01.19 취소신청정보를 목록 (주문상세번호, 취소/반품수량) 으로 표현
+			result = coreOrderRefundService.cnclRtnRefundAmt(cnclReqList);
+
+			// 4. 주문변경 기본정보 설정
+			result.setInt("ordNo", orderChange.getOrdNo());						// 주문번호
+			result.setInt("ordChgSq", orderChange.getOrdChgSq());				// 주문변경번호
+			result.setString("chgReason", orderChange.getChgReason());			// 변경사유
+			result.setString("chgMemo", orderChange.getChgMemo());				// 변경메모
+
+			result.setString("accountNo", orderChange.getAccountNo());			// 환불계좌번호
+			result.setString("accountNm", orderChange.getAccountNm());			// 환불계좌예금주명
+			result.setString("bankCd", orderChange.getBankCd());				// 환불계좌은행코드
+
+			result.setString("allCanYnBeforePayment", allCanYnBeforePayment);	// 무통장입금전 전체취소 여부
+			result.setString("allCanYn", allCanYn);								// 전체취소 여부
+			result.setString("allLastCanYn", allLastCanYn);						// 전체 마지막 취소 여부
+			result.setString("isCustomer", orderChange.getIsCustomer());		// 변경사유 (고객, 회사)
+
+			// 5. 주문변경 회수지정보 추가
+			// result.setString("chgerNm", orderChange.getChgerNm());				// 변경자명
+			// result.setString("chgerEmail", orderChange.getChgerEmail());			// 변경자이메일주소
+			// result.setString("chgerPhnno", orderChange.getChgerPhnno());			// 변경자핸드폰번호
+			// result.setString("chgerTelno", orderChange.getChgerTelno());			// 변경자전화번호
+
+			result.setString("reqGbn", orderChange.getReqGbn());				// 신청구분
+			result.setString("ipAddress", TsfSession.getIpAddress());			// IP주소
+			result.setInt("custNo", custNo);									// 고객번호
+			result.setString("pgTid", refundPreInfo.getString("pgTid"));		// PG거래ID
+			result.setString("payMeans", refundPreInfo.getString("payMeans"));	// 결제수단
+			result.setString("pgGb", refundPreInfo.getString("pgGb"));			// PG구분
+
+			// 6. 주문변경 DB 등록 (TB_ORDER_CHANGE, TB_ORDER_CHANGE_DETAIL)
+			coreOrderChangeService.cnclComplete(result, custNo);
+		}
 
 		result.set("status", GagaResponseStatus.SUCCESS.getCode());
 		result.set("message", message.getMessage("CANCEL_0001"));
@@ -899,6 +914,7 @@ public class TsfMypageController extends TsfBaseController {
 		OrderChange oneData = (OrderChange) map.get("oneData");
 		mav.addObject("cancelDetailList", map);
 		mav.addObject("oneData", oneData);
+		mav.addObject("refundYn", map.getString("refundYn"));
 
 		// 주문 결제정보 조회
 		Order order = new Order();

+ 160 - 0
src/main/java/com/style24/front/biz/web/TsfOrderController.java

@@ -1138,4 +1138,164 @@ public class TsfOrderController extends TsfBaseController {
 		mav.setViewName("web/order/test");
 		return mav;
 	}
+	
+	/**
+	 * 취소,반품,교환 추가결제화면
+	 *
+	 * @param : ordChgSq
+	 * @return
+	 * @author jsh77b
+	 * @since 2021. 04. 16
+	 */
+	@ResponseBody
+	@RequestMapping(value = "/addPaymentForm")
+	public ModelAndView orderAddPaymentForm(Order order) {
+		
+		ModelAndView mav = new ModelAndView();
+		
+		// 1. 주문번호 체크
+		if (order.getOrdChgSq() == null) {
+			mav.setViewName("redirect:/");
+			return mav;
+		}
+				
+		// 2. 추가결제 상품목록
+		GagaMap resultMap = coreOrderService.getAddPayOrderListInfo(order);
+		
+		// 추가결제 목록이 없으면 메인으로 이동
+		@SuppressWarnings("unchecked")
+		Collection<Order> orderAddPayGoodsList = (Collection<Order>) resultMap.get("orderAddPayGoodsList");
+		
+		if (orderAddPayGoodsList.size() < 1) {
+			mav.setViewName("redirect:/");
+			return mav;
+		}
+		
+		// TODO 주문정보 알림톡전송
+		
+		// 3. 화면전송변수설정
+		mav.addObject("orderAddPayGoodsList"	, orderAddPayGoodsList);					// 주문목록정보
+		mav.addObject("refundAmt"				, resultMap.get("refundAmt"));				// 상품환불금액
+		mav.addObject("addPayCost"				, resultMap.get("addPayCost"));				// 추가결제금액
+		mav.addObject("ordChgSq"				, resultMap.get("ordChgSq"));				// 주문취소신청번호
+		
+		mav.addObject("chgGb"					, resultMap.get("chgGb"));					// 변경구분
+		mav.addObject("chgerNm"					, resultMap.get("chgerNm"));				// 변경신청인
+		mav.addObject("chgerPhnno"				, resultMap.get("chgerPhnno"));				// 변경신청핸드폰번호
+		mav.addObject("goodsNm"					, resultMap.get("goodsNm"));				// 상품명
+		mav.setViewName(super.getDeviceViewName("order/OrderAddPaymentForm"));
+		
+		return mav;
+	}
+	
+	/**
+	 * 추가결제실행
+	 *
+	 * @param
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 03. 04
+	 */
+	@PostMapping("/addPayment")
+	@ResponseBody
+	public ModelAndView orderAddPayment(@RequestBody Order order) {
+		ModelAndView mav = new ModelAndView();
+		
+		// 1. 로그인체크 후 custNo 설정
+		if (TsfSession.isLogin()) {
+			order.setCustNo(TsfSession.getInfo().getCustNo()); // 고객번호등록
+		} else {
+			order.setJsessionId(TsfSession.getSessionId());
+			order.setCustNo(0);
+		}
+		
+		log.info("order.getPgGb()              ::: {}", order.getPgGb());
+		log.info("order.getPayMeans()          ::: {}", order.getPayMeans());
+		log.info("order.getOrdChgSq()          ::: {}", order.getOrdChgSq());
+		log.info("order.getGoodsNm()           ::: {}", order.getGoodsNm());
+		log.info("order.getAddPayCost()        ::: {}", order.getAddPayCost());
+		log.info("order.getChgerNm()           ::: {}", order.getChgerNm());
+		log.info("order.getChgerPhnno()        ::: {}", order.getChgerPhnno());
+		
+		order.setOrdNo(order.getOrdChgSq());
+		order.setPayAmt(order.getAddPayCost());
+		order.setOrdNm(order.getChgerNm());
+		order.setOrdPhnno(order.getChgerPhnno());
+
+		// 필수 데이터
+		// pgGb = 결제타입, payMeans = 결제수단, ordNo = 주문번호, goodsNm = 상품명, payAmt = 실결제금액, ordNm = 주문자명, ordPhnno = 휴대폰번호, custNo = 고객번호
+		// 선택 데이터
+		// ordEmail = 주문자메일, ordTelno = 전화번호
+		
+		/* 
+		=== 카카오페이 & 네이버페이 파라메터 ===
+		ordNo = 주문번호
+		custNo = 고객번호
+		goodsNm = 상품명
+		ordGoodsQty = 주문상품수량
+		payAmt = 결제금액
+		======================
+		*/
+
+		Payment payment = orderService.setPgDataInfo(order);
+		mav.addObject("payment"	, payment);
+		mav.setViewName(super.getDeviceViewName("pg/kcpOrder"));
+
+		return mav;
+	}
+	
+	/**
+	 * 결제 PG 요청 완료
+	 *
+	 * @param
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 03. 05
+	 */
+	@ResponseBody
+	@RequestMapping(value = "/addPay/result/response")
+	public ModelAndView addPayResultResponse(Payment param, HttpServletRequest request, HttpServletResponse response) {
+		
+		ModelAndView mav = new ModelAndView();
+		
+		Order order = new Order();
+		
+		// 1. 로그인체크 후 custNo 설정
+		if (TsfSession.isLogin()) {
+			param.setCustNo(TsfSession.getInfo().getCustNo()); // 고객번호등록
+			order.setCustNo(TsfSession.getInfo().getCustNo());
+			order.setRegNo(TsfSession.getInfo().getCustNo());
+			order.setUpdNo(TsfSession.getInfo().getCustNo());
+		} else {
+			param.setCustNo(0);
+			order.setCustNo(0);
+			order.setRegNo(0);
+			order.setUpdNo(0);
+		}
+		
+		param.setUpdNo(param.getCustNo());
+		
+		// 2. 결재정보등록(TB_PAYMENT)
+		param = orderService.orderPgPayResult(param, request, response);
+		
+		order.setOrdChgSq(param.getOrdNo());
+		
+		// 3. 추가결제 상품목록
+		GagaMap resultMap = coreOrderService.getAddPayOrderListInfo(order);
+		
+		// 4. 화면전송변수설정
+		mav.addObject("refundAmt"				, resultMap.get("refundAmt"));				// 상품환불금액
+		mav.addObject("addPayCost"				, resultMap.get("addPayCost"));				// 추가결제금액
+		mav.addObject("ordChgSq"				, resultMap.get("ordChgSq"));				// 주문취소신청번호
+		mav.addObject("chgerNm"					, resultMap.get("chgerNm"));				// 변경신청인
+		mav.addObject("chgerPhnno"				, resultMap.get("chgerPhnno"));				// 변경신청핸드폰번호
+
+		// TODO 3. 주문정보 업데이트
+		coreOrderService.updateOrderChangeDetail(order);
+		
+		// 2021.03.16 주문완료화면이동처리
+		mav.setViewName(super.getDeviceViewName("order/OrderAddPaymentComplete"));
+		
+		return mav;
+	}
 }

+ 3 - 4
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -171,7 +171,9 @@ public class TsfPlanningController extends TsfBaseController {
 		mav.addObject("planInfo", planInfo);
 
 		mav.addObject("planCount", planningService.getPlanAllCount(plan));
-
+		// 템플릿 순서
+		mav.addObject("templateOrd", planningService.templateDispOrdInfo(plan));
+		
 		// 상단소스
 		plan.setFrontGb("T");
 		mav.addObject("fsrcInfoTop", planningService.getPlanFsrcInfo(plan));
@@ -180,9 +182,6 @@ public class TsfPlanningController extends TsfBaseController {
 		plan.setFrontGb("B");
 		mav.addObject("fsrcInfoBtm", planningService.getPlanFsrcInfo(plan));
 
-		// 템플릿 순서
-		mav.addObject("templateOrd", planningService.templateDispOrdInfo(plan));
-
 		// 리뷰
 		mav.addObject("reviewInfo", planningService.getPlanReviewInfo(review));
 

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

@@ -1136,4 +1136,41 @@
 		WHERE CART_SQ = #{cartSq}
 		AND   CUST_NO = #{custNo}
 	</update>
+
+	<!-- 최근 등록된 상품 100개를 제외한 장바구니 제거 -->
+	<delete id="deleteOldCart" parameterType="Cart">
+		/* TsfCart.deleteOldCart : 최근 등록된 상품 100개를 제외한 장바구니 제거 */
+		DELETE FROM TB_CART C
+		WHERE  C.CART_GB = 'G026_BC'
+		<if test="custNo != null and custNo > 0">
+		AND    C.CUST_NO = #{custNo}
+		</if>
+		<if test="custNo == null or custNo == 0">
+		AND    C.CUST_NO = 0
+		AND    C.JSESSION_ID = #{jsessionId}
+		</if>
+		AND    C.CART_SQ NOT IN (SELECT A.CART_SQ
+		                         FROM   (SELECT CART_SQ
+		                                      , ROW_NUMBER() OVER() AS RNUM
+										 FROM   TB_CART
+										 WHERE  CART_GB = 'G026_BC'
+										 <if test="custNo != null and custNo > 0">
+										 AND    CUST_NO = #{custNo}
+										 </if>
+										 <if test="custNo == null or custNo == 0">
+										 AND    CUST_NO = 0
+										 AND    JSESSION_ID = #{jsessionId}
+										 </if>
+										 ORDER  BY REG_DT DESC
+										 LIMIT  100 ) A
+		                         WHERE   A.RNUM BETWEEN 1 AND 100 )
+	</delete>
+
+	<!-- 장바구니에 없는 장바구니 상세 데이터 삭제 -->
+	<delete id="deleteCartDetailFromEmptyCart">
+		/* TsfCart.deleteCartDetailFromEmptyCart : 장바구니에 없는 장바구니 상세 데이터 삭제 */
+		DELETE FROM TB_CART_DETAIL CD
+		WHERE  CD.CART_SQ NOT IN (SELECT CART_SQ
+								  FROM   TB_CART CA)
+	</delete>
 </mapper>

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

@@ -14,7 +14,7 @@
 		      ,(SELECT SUM(CG3.RM_GFCD_AMT)
 				FROM TB_CUST_GIFTCARD CG3
 				WHERE DATE_FORMAT(NOW(), '%Y%m%d') BETWEEN CG3.USE_ST_DATE AND CG3.USE_EXP_DATE
-				  AND  DATE_FORMAT(NOW(), '%Y%m%d') BETWEEN DATE_ADD(CG3.USE_EXP_DATE, INTERVAL -1 MONTH) AND USE_EXP_DATE
+				  AND  NOW() BETWEEN DATE_ADD(DATE_FORMAT(CG3.USE_EXP_DATE,'%Y-%m-%d'), INTERVAL -30 DAY) AND USE_EXP_DATE
 				  AND CUST_NO = #{custNo}
 				  AND CG3.RM_GFCD_AMT > 0 ) AS EXPIRE_COUNT  /*한달 이내 소멸*/
 		FROM TB_CUST_GIFTCARD CG 

+ 12 - 3
src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml

@@ -330,6 +330,8 @@
 		     , DFP.DELV_FEE + DFP.RTN_DELV_FEE                    AS EXC_DELV_FEE
 		     , DFP.SUPPLY_COMP_CD
 		     , IF(G1.SELF_GOODS_YN = 'Y', 'WMS', DFP.DELV_FEE_CD) AS DELV_FEE_CD
+		     , P.PG_TID
+		     , P.PAY_MEANS
 		     , P.PAY_STAT
 		     , CASE WHEN NULLIF(OD.INVOICE_NO, '') IS NULL THEN 'N'
 		            ELSE 'Y'
@@ -798,6 +800,7 @@
 		     , Z.RF_CNCL_AMT
 		     , Z.RF_DELIVERY_FEE
 		     , Z.RF_REAL_CNCL_AMT
+		     , Z.PG_TID
 		     , Z.PG_GB
 		     , Z.PAY_MEANS
 		     , Z.PAY_MEANS_NM
@@ -832,8 +835,8 @@
 		             , ODI.ORD_DTL_ITEM_SQ
 		             , ODI.OPT_CD1
 		             , ODI.OPT_CD2
-		             , ((OD.ORD_AMT - OD.CNCL_RTN_AMT - OD.CPN1_DC_AMT) * (OCD.CHG_QTY / (OD.ORD_QTY - OD.CNCL_RTN_QTY))) AS PRICE_ORG
-		             , ((OD.REAL_ORD_AMT + OD.PNT_DC_AMT + OD.GFCD_USE_AMT) * (OCD.CHG_QTY / (OD.ORD_QTY - OD.CNCL_RTN_QTY))) AS PRICE_SALE
+		             , ((ODH.ORD_AMT - ODH.CPN1_DC_AMT) * (OCD.CHG_QTY / ODH.ORD_QTY)) AS PRICE_ORG
+		             , ((ODH.REAL_ORD_AMT + ODH.PNT_DC_AMT + ODH.GFCD_USE_AMT) * (OCD.CHG_QTY / OD.ORD_QTY)) AS PRICE_SALE
 		             , OC.ADD_PAY_COST
 		             , CASE WHEN G1.GOODS_TYPE != 'G056_S' AND G1.SELF_GOODS_YN = 'Y' THEN (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G1.GOODS_CD AND COLOR_CD = ODI.OPT_CD1 AND DEFAULT_IMG_YN = 'Y')
 		                    ELSE (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G1.GOODS_CD AND COLOR_CD = IFNULL(G1.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y') END AS SYS_IMG_NM
@@ -850,6 +853,7 @@
 		             , R.RF_CNCL_AMT
 		             , R.RF_DELIVERY_FEE
 		             , R.RF_REAL_CNCL_AMT
+		             , P.PG_TID
 		             , P.PG_GB
 		             , P.PAY_MEANS
 		             , FN_GET_CODE_NM('G014', P.PAY_MEANS)                              AS PAY_MEANS_NM
@@ -869,6 +873,9 @@
 		            ON OD.ORD_NO = ODI.ORD_NO
 		           AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
 		           AND OD.ORD_DTL_STAT NOT IN ('G013_00', 'G013_11', 'G013_25')
+		         INNER JOIN TB_ORDER_DETAIL_HST ODH
+		            ON OD.ORD_DTL_NO = ODH.ORD_DTL_NO
+		           AND ODH.ORD_DTL_STAT = 'G013_00'
 		         INNER JOIN TB_GOODS G1
 		            ON OD.GOODS_CD = G1.GOODS_CD
 		         INNER JOIN TB_GOODS G2
@@ -883,6 +890,7 @@
 		         INNER JOIN TB_PAYMENT P
 		            ON P.ORD_NO = O.ORD_NO
 		           AND P.PAY_GB = 'O'
+		           AND P.PAY_STAT = 'G016_30'
 		         WHERE OCD.DEL_YN = 'N'
 		           AND O.DISP_YN = 'Y'
 		<choose>
@@ -903,7 +911,7 @@
 				, Z.GFCD_USE_AMT, Z.ORD_DTL_NO, Z.GOODS_CD, Z.BRAND_NM, Z.SHOT_DELV_YN, Z.SELF_GOODS_YN, Z.GOODS_NM
 				, Z.GOODS_TYPE, Z.PRICE_ORG, Z.PRICE_SALE, Z.ADD_PAY_COST, Z.SYS_IMG_NM, Z.GIFT_PACK_YN, Z.REFUND_AMT, Z.RF_CPN1_AMT, Z.RF_TMTB1_AMT
 				, Z.RF_TMTB2_AMT, Z.RF_GOODS_CPN_AMT, Z.RF_CART_CPN_AMT, Z.RF_PNT_AMT, Z.RF_PRE_PNT_AMT, Z.RF_GFCD_USE_AMT, Z.RF_CNCL_AMT
-				, Z.RF_DELIVERY_FEE, Z.RF_REAL_CNCL_AMT, Z.PG_GB, Z.PAY_MEANS, Z.PAY_MEANS_NM
+				, Z.RF_DELIVERY_FEE, Z.RF_REAL_CNCL_AMT, Z.PG_TID, Z.PG_GB, Z.PAY_MEANS, Z.PAY_MEANS_NM
 		 ORDER BY Z.ORD_CHG_SQ DESC
 	</select>
 
@@ -1062,6 +1070,7 @@
 		         INNER JOIN TB_PAYMENT P
 		            ON P.ORD_NO = O.ORD_NO
 		           AND P.PAY_GB = 'O'
+		           AND P.PAY_STAT = 'G016_30'
 		         WHERE OCD.DEL_YN = 'N'
 		           AND O.DISP_YN = 'Y'
 		<choose>

+ 23 - 3
src/main/java/com/style24/persistence/mybatis/shop/TsfPoint.xml

@@ -65,12 +65,22 @@
 		            WHEN 'G069_12' THEN '상품구매'
 		            WHEN 'G069_20' THEN '리뷰'
 		            WHEN 'G069_30' THEN '이벤트'
+		            WHEN 'G069_31' THEN '회원가입'
+		            WHEN 'G069_32' THEN '생일축하'
+		            WHEN 'G069_35' THEN 'APP다운'
+		            WHEN 'G069_36' THEN '사은품구매'
+		            WHEN 'G069_37' THEN '출석체크'
 		            WHEN 'G069_90' THEN '관리자'
 		       END                                          AS OCCUR_GB
 		     , CASE TCHP.OCCUR_GB
 		            WHEN 'G069_12' THEN TG.GOODS_NM
 		            WHEN 'G069_20' THEN TG.GOODS_NM
 		            WHEN 'G069_30' THEN TCHP.OCCUR_DTL_DESC
+		            WHEN 'G069_31' THEN TCHP.OCCUR_DTL_DESC
+		            WHEN 'G069_32' THEN TCHP.OCCUR_DTL_DESC
+		            WHEN 'G069_35' THEN TCHP.OCCUR_DTL_DESC
+		            WHEN 'G069_36' THEN TCHP.OCCUR_DTL_DESC
+		            WHEN 'G069_37' THEN TCHP.OCCUR_DTL_DESC
 		            WHEN 'G069_90' THEN TCHP.OCCUR_DTL_DESC
 		       END                                          AS  OCCUR_DTL_DESC
 		      , TCHP.PNT_AMT                                AS PNT_AMT
@@ -96,7 +106,7 @@
 		AND CASE WHEN NULLIF(TCHP.REVIEW_SQ, 0) IS NULL THEN 1
 		         WHEN NULLIF(TCHP.REVIEW_SQ, 0) IS NOT NULL AND NULLIF(TR.REVIEW_SQ, 0) IS NOT NULL THEN 1 /* 상품평조건 */
 		    END > 0
-		AND TCHP.OCCUR_GB IN ('G069_12','G069_20','G069_30','G069_90')
+		AND TCHP.OCCUR_GB IN ('G069_12','G069_20','G069_30','G069_31','G069_32','G069_35','G069_36','G069_37','G069_90')
 		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'														/* 공통코드 : 반영완료 */
 		AND TCHP.PNT_AMT <![CDATA[>]]> 0
 		AND DATE_FORMAT(TCHP.UPD_DT,'%Y%m') = #{searchDt}
@@ -150,6 +160,11 @@
 		WHEN   'G069_13' THEN '구매 취소'
 		WHEN   'G069_20' THEN '리뷰'	
 		WHEN   'G069_30' THEN '이벤트'
+		WHEN   'G069_31' THEN '회원가입'
+		WHEN   'G069_32' THEN '생일축하'
+		WHEN   'G069_35' THEN 'APP다운'
+		WHEN   'G069_36' THEN '사은품구매'
+		WHEN   'G069_37' THEN '출석체크'
 		WHEN   'G069_40' THEN '구매 사용'
 		WHEN   'G069_42' THEN '사은품'
 		WHEN   'G069_90' THEN '관리자'
@@ -158,8 +173,13 @@
 		CASE   TCHP.OCCUR_GB
 		WHEN   'G069_12' THEN TG.GOODS_NM 
 		WHEN   'G069_13' THEN TG.GOODS_NM 
-		WHEN   'G069_20' THEN TG.GOODS_NM 
+		WHEN   'G069_20' THEN TG.GOODS_NM
 		WHEN   'G069_30' THEN TCHP.OCCUR_DTL_DESC
+		WHEN   'G069_31' THEN TCHP.OCCUR_DTL_DESC
+		WHEN   'G069_32' THEN TCHP.OCCUR_DTL_DESC
+		WHEN   'G069_35' THEN TCHP.OCCUR_DTL_DESC
+		WHEN   'G069_36' THEN TCHP.OCCUR_DTL_DESC
+		WHEN   'G069_37' THEN TCHP.OCCUR_DTL_DESC
 		WHEN   'G069_40' THEN TG.GOODS_NM 
 		WHEN   'G069_42' THEN TG.GOODS_NM
 		WHEN   'G069_90' THEN TCHP.OCCUR_DTL_DESC
@@ -191,7 +211,7 @@
 			WHEN NULLIF(TCHP.REVIEW_SQ, 0) IS NULL THEN 1
 			WHEN NULLIF(TCHP.REVIEW_SQ, 0) IS NOT NULL AND NULLIF(TR.REVIEW_SQ, 0) IS NOT NULL THEN 1
 		END <![CDATA[>]]> 0		
-		AND TCHP.OCCUR_GB IN ('G069_12','G069_13','G069_20','G069_30','G069_40','G069_42','G069_90','G069_99')
+		AND TCHP.OCCUR_GB IN  ('G069_12','G069_13','G069_20','G069_30','G069_31','G069_32','G069_35','G069_36','G069_37','G069_40','G069_42','G069_90','G069_99')
 		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'
 		AND DATE_FORMAT(TCHP.UPD_DT,'%Y%m') = #{searchDt}
 		GROUP BY TCHP.REVIEW_SQ, TCHP.OCCUR_GB, PNT_AMT, GOODS_NM, TCHP.OCCUR_DTL_DESC, TCHP.UPD_DT

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

@@ -66,7 +66,7 @@ pg:
         site:
             cd: T0000
             key: 3grptw1.zW0GSo4PQdaGvsF__
-            name: KCP TEST SHOP
+            name: ISTYLE TEST
         log.level: 3
         module.type: 01
         tx.mode: 0

+ 0 - 2
src/main/webapp/WEB-INF/views/mob/cart/CartChangeOptionPopupMob.html

@@ -137,8 +137,6 @@
 					<div class="opt_select">
 						<div class="opt_header">
 							<span class="title">옵션2</span>
-							<!--<span th:text="${size.optCd2}"></span>
-							<span th:if="${size.addPrice > 0}">(+<em th:text="${#numbers.formatInteger(size.addPrice, 1, 'COMMA')}"></em>)원</span>-->
 							<span class="info color" th:classappend="|chooseSizeNm_${comp.goodsCd}|" th:text="${comp.optCd2}"></span>
 						</div>
 						<form class="form_wrap">

+ 1 - 4
src/main/webapp/WEB-INF/views/mob/cart/CartListAjaxFormMob.html

@@ -18,6 +18,7 @@
 	<!-- 즉시구매 form -->
 	<form id="cartInfoForm" method="post" action="/order/noMember"></form>
 
+	<!-- 장바구니 화면 -->
 	<form id="cartListForm" method="post" action="/order/noMember" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
 		<div class="inner shotDelvSelect">
 			<div class="od_method">
@@ -668,10 +669,6 @@
 		</div>
 		<!-- //쿠폰사용안내 팝업 -->
 
-		<!-- 옵션변경 팝업 -->
-		<div id="optModifyPop01" class="popup_box optModifyPop optModifyPop01"></div>
-		<!-- //옵션변경 팝업 -->
-
 		<script th:inline="javascript">
 			var sumRealPayAmt = [[${order.sumRealPayAmt + order.totDelvFee}]];
 			var totDcAmt = [[${order.totDcAmt}]];

+ 21 - 3
src/main/webapp/WEB-INF/views/mob/cart/CartListFormMob.html

@@ -81,6 +81,10 @@
 			</div>
 		</div>
 		<!-- //배송비 SAVE_팝업 -->
+
+		<!-- 옵션변경 팝업 -->
+		<div id="optModifyPop01" class="popup_box optModifyPop optModifyPop01"></div>
+		<!-- //옵션변경 팝업 -->
 	</main>
 
 	<script src="/ux/mo/js/swiper.min.js"></script>
@@ -179,6 +183,7 @@
 			count = count > maxOrdQty ? maxOrdQty : count;
 			$input.val(count);
 			$input.change();
+
 			//주문 최대 수량 이상 증가버튼 비활성화
 			if ($input.val() == maxOrdQty) {
 				$('.optModifyPop01 .number_count .plus').addClass('min_val');
@@ -188,8 +193,21 @@
 
 			return false;
 		}).on('keyup','.optModifyPop01 .number_count input[type=text]',function(e){
-			//텍스트, 0 입력금지
-			$(this).val($(this).val().replace(/[^1-9]/g,""));
+			var minOrdQty = $(this).parent().parent().find(".minOrdQty").val();
+			var maxOrdQty = $(this).parent().parent().find(".maxOrdQty").val();
+
+			$(this).val($(this).val().replace(/[^0-9]/g,""));
+
+			if(Number($(this).val()) < Number(minOrdQty)) {
+				$(this).val(minOrdQty);
+				$('.optModifyPop01 .number_count .minus').addClass('min_val');
+				$('.optModifyPop01 .number_count .plus').removeClass('min_val');
+			}
+			if(Number($(this).val()) > Number(maxOrdQty)) {
+				$(this).val(maxOrdQty);
+				$('.optModifyPop01 .number_count .plus').addClass('min_val');
+				$('.optModifyPop01 .number_count .minus').removeClass('min_val');
+			}
 		});
 
 		//팝업 - 쿠폰사용안내
@@ -198,7 +216,7 @@
 			$("#couponInfoPop").modal("show");
 			return false;
 		});
-		$("#couponInfoPop_close").click(function() {
+		$("#couponInfoPop_close").on("click", function() {
 			$("#couponInfoPop").modal("hide");
 		});
 

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html

@@ -1871,7 +1871,7 @@
 		$("meta[property='eg:etc1']").attr('content', [[${goodsInfo.selfGoodsYn}]]);
 		
 		// ep 쿠폰확인
-		fnEpCouponDown([[${params.afLinkCd}]], [[${params.goodsCd}]], 1);
+		fnEpCouponDown([[${afLinkCd}]], [[${params.goodsCd}]], 1);
 	});
 	
 /*]]>*/

+ 17 - 5
src/main/webapp/WEB-INF/views/mob/mypage/MypageGiftcardFormMob.html

@@ -216,15 +216,27 @@ function useGiftcard(result) {
 		let useGiftcard = giftcardUseList[i];
 		tmtbHtml += '	<li>                                                               ';
 		tmtbHtml += '		<div>                                                          ';
-		tmtbHtml += '			<span class="tag deepgray">차감</span>                       ';
-		tmtbHtml += '			<span class="tag_name">상품구매</span>                         ';
+		if (useGiftcard.gfcdAmt<0) {
+			tmtbHtml += '			<span class="tag deepgray">차감</span>                       ';
+		}else{
+			tmtbHtml += '		    <span class="tag primary">적립</span>';
+		}
+		
+		tmtbHtml += '			<span class="tag_name">'+useGiftcard.occurDtlDesc+'</span>                         ';
 		tmtbHtml += '			<span class="txt_content">'	+ useGiftcard.goodsNm + '</span>   ';
 		tmtbHtml += '			<span class="txt_time">'+useGiftcard.regDt+'</span>          ';
 		tmtbHtml += '		</div>                                                         ';
 		tmtbHtml += '		<div>                                                          ';
-		tmtbHtml += '			<span class="amount_minus">                                ';
-		tmtbHtml += '				<em>'+useGiftcard.gfcdAmt.addComma()+'</em>원                                      ';
-		tmtbHtml += '			</span>                                                    ';
+		if (useGiftcard.gfcdAmt<0) {
+			tmtbHtml += '			<span class="amount_minus">                                ';
+			tmtbHtml += '				<em>'+useGiftcard.gfcdAmt.addComma()+'</em>원                                      ';
+			tmtbHtml += '			</span>                                                    ';
+		}else{
+			tmtbHtml += '			<span class="amount_plus">                                ';
+			tmtbHtml += '				<em>'+useGiftcard.gfcdAmt.addComma()+'</em>원                                      ';
+			tmtbHtml += '			</span>                                                    ';
+		}
+		
 		tmtbHtml += '		</div>                                                         ';
 		tmtbHtml += '	</li>                                                              ';
 	}

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

@@ -187,6 +187,8 @@
 						</th:block>
 					</th:block>
 					<div class="opt_count">
+						<input type="hidden" class="minOrdQty" th:value="${cart.minOrdQty}" />
+						<input type="hidden" class="maxOrdQty" th:value="${cart.maxOrdQty}" />
 						<div class="opt_header">
 							<span class="title">수량</span>
 						</div>

+ 3 - 3
src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html

@@ -572,19 +572,19 @@
 			temp.optCd 			= "13256848-2";
 			temp.goodsQty 		= 3;
 			temp.goodsType 		= "G056_N";
-			temp.cartGb 		= "G";
+			temp.cartGb 		= "C";
 			temp.afLinkCd 		= "afLinkCd";
 			temp.ithrCd 		= "G027_ZZZ";
 			temp.contentsLoc 	= "G028_YYY";
 			temp.planDtlSq 		= "123";
 			compsList.push(temp);
 
-			temp 			= new Object;
+			temp 				= new Object;
 			temp.goodsCd 		= "AOW13QDM76";
 			temp.optCd 			= "13256848-6";
 			temp.goodsQty 		= 3;
 			temp.goodsType 		= "G056_N";
-			temp.cartGb 		= "G";
+			temp.cartGb 		= "C";
 			temp.afLinkCd 		= "afLinkCd";
 			temp.ithrCd 		= "G027_ZZZ";
 			temp.contentsLoc 	= "G028_YYY";

+ 19 - 6
src/main/webapp/WEB-INF/views/web/cart/CartListFormWeb.html

@@ -301,24 +301,37 @@
 	$(document).on('click','.optModify_pop .number_count .minus',function(e){
 		var $input = $(this).parent().find('input');
 		var count = parseInt($input.val()) - 1;
-		count = count < 1 ? 1 : count;
+		var minOrdQty = $(this).parent().parent().find(".minOrdQty").val();
+
+		count = count < minOrdQty ? minOrdQty : count;
 		$input.val(count);
 		$input.change();
 		//수량1개 이하 감소버튼 비활성화
-		if ($input.val() == 1) {
+		if ($input.val() == minOrdQty) {
 			$('.optModify_pop .number_count .minus').addClass('min_val');
 		}
+
+		$('.optModify_pop .number_count .plus').removeClass('min_val');
+
 		return false;
 	}).on('click','.optModify_pop .number_count .plus',function(e){
 		var $input = $(this).parent().find('input');
-		$input.val(parseInt($input.val()) + 1);
+		var count = parseInt($input.val()) + 1;
+		var maxOrdQty = $(this).parent().parent().find(".maxOrdQty").val();
+
+		count = count > maxOrdQty ? maxOrdQty : count;
+		$input.val(count);
 		$input.change();
-		//수량2개 이상부터 감소버튼 활성화
+
+		//주문 최대 수량 이상 증가버튼 비활성화
+		if ($input.val() == maxOrdQty) {
+			$('.optModify_pop .number_count .plus').addClass('min_val');
+		}
+
 		$('.optModify_pop .number_count .minus').removeClass('min_val');
 		return false;
 	}).on('keyup','.optModify_pop .number_count input[type=text]',function(e){
-		//텍스트, 0 입력금지
-		$(this).val($(this).val().replace(/[^1-9]/g,""));
+		$(this).val($(this).val().replace(/[^0-9]/g,""));
 	});
 
     //상품옵션변경 팝업 > 컬러선택 표기

+ 23 - 17
src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html

@@ -2,7 +2,7 @@
 <html lang="ko"
 	  xmlns:th="http://www.thymeleaf.org"
 	  xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
-	  layout:decorator="web/common/layout/DefaultLayoutWeb">
+	  layout:decorator="web/common/layout/PlanningLayoutWeb">
 <!--
  *******************************************************************************
  * @source  : CategoryGoodsListFormWeb.html
@@ -21,8 +21,8 @@
 <th:block layout:fragment="content">
 	<div id="container" class="container dp">
 		<div class="breadcrumb">
-			<ul>
-				<li class="bread_home"><a href="index.html">홈</a></li>
+			<ul id="navArea">
+				<li class="bread_home"><a href="javascript:void(0);" id="navHome">홈</a></li>
 				<li class="bread_2depth" id="navNm">여성</li>
 			</ul>
 		</div>
@@ -293,7 +293,7 @@
 
 	<script src="/ux/plugins/gaga/gaga.infinite.scrollSession.js"></script>
 	<script src="/ux/plugins/jquery/jquery.history.min.js"></script>
-	<script th:src="@{'/biz/goodsSession.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/goodsSession.js"></script>
+	<script th:src="@{'/biz/goods.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/goods.js"></script>
 	<script th:inline="javascript">
 		/*<![CDATA[*/
 		var filterPriceList = [[${filterPriceList}]];
@@ -355,7 +355,6 @@
 
 		// 상품 검색
 		var fnGetInfiniteScrollDataList = function (pageNum){
-			console.log('pageNum:::'+pageNum);
 			$("#searchGoodsForm input[name=pageNo]").val(pageNum+1);
 			gagajf.ajaxFormSubmit("/display/category/goods/list", document.searchGoodsForm,  gagaInfiniteScroll.jsonToHtml);
 		}
@@ -417,6 +416,7 @@
 			var formTitle = "";
 
 			let tag = '';
+
 			if (cate1 != null) {
 				tag += '<li';
 					if(cate1.cate1No == cate1No){
@@ -424,12 +424,17 @@
 					}
 				tag += '>\n';
 				tag += '	<a href="javascript:javascript:void(0);"';
-				if(cate1.cate1No == cate1No){
+				if(cate1.cate1No == cate1No && cate2No == null){
 					tag += ' class="on"';
 					formTitle = cate1.cate1Nm;
-					navNm = cate1.cate1Nm;
-					$("#navNm").text(navNm);
 					$("#formTitle").text(formTitle);
+					if(brandGroupNo==0){
+						$("#navHome").attr('href', '/');
+						$("#navNm").text(cate1.cate1Nm);
+					}else{
+						$("#navHome").attr('onclick', 'cfnGoToBrandMain('+brandGroupNo+');');
+						$("#navNm").text(cate1.cate1Nm);
+					}
 				}
 				tag += '	onclick="cfnGoToGoodsList('+brandGroupNo+',\''+cateGb+'\','+cate1.cate1No+');" >' + cate1.cate1Nm + '</a>\n';
 				if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
@@ -441,15 +446,16 @@
 					tag += '	<ul>\n';
 					$.each(cate1.cate2List, function(idx2, cate2) {
 						tag += '		<li';
-						if(cate2.cate2No == cate2No){
+						if(cate2.cate2No == cate2No && cate3No == null){
 							tag += ' class="on"';
 						}
 						tag += '		>\n';
 						tag += '		<a href="javascript:javascript:void(0);" ';
-						if(cate2.cate2No == cate2No){
+						if(cate2.cate2No == cate2No && cate3No == null){
 							tag += ' class="on"';
-							navNm = navNm +' > ' + cate2.cate2Nm;
-							$("#navNm").text(navNm);
+							navNm = '<li class="bread_2depth" id="navNm2">'+cate2.cate2Nm+'</li>';
+							$("#navArea").append(navNm);
+							$("#formTitle").text(cate2.cate2Nm);
 						}
 						tag += '	onclick="cfnGoToGoodsList('+brandGroupNo+',\''+cateGb+'\','+cate1.cate1No+','+cate2.cate2No+');">' + cate2.cate2Nm + '</a>\n';
  						if (cate2.leafYn == 'N' && cate2.cate3List != null && cate2.cate3List.length > 0) {
@@ -461,15 +467,16 @@
 							tag += '	<ul>\n';
 							$.each(cate2.cate3List, function (idx3, cate3){
 								tag += '<li';
-								if(cate3.cate3No == cate3No){
+								if(cate3.cate3No == cate3No && cate4No == null){
 									tag += ' class="on"';
 								}
 								tag += '>';
 								tag += '		<a href="javascript:javascript:void(0);" ';
-								if(cate3.cate3No == cate3No){
+								if(cate3.cate3No == cate3No && cate4No == null){
 									tag += ' class="on"';
-									navNm = navNm +' > ' + cate3.cate3Nm;
-									$("#navNm").text(navNm);
+									navNm = '<li class="bread_2depth" id="navNm2">'+cate2.cate2Nm+'</li><li class="bread_2depth" id="navNm3">'+cate3.cate3Nm+'</li>';
+									$("#navArea").append(navNm);
+									$("#formTitle").text(cate3.cate3Nm);
 								}
 								tag += ' onclick="cfnGoToGoodsList('+brandGroupNo+',\''+cateGb+'\','+cate1.cate1No+','+cate2.cate2No+','+cate3.cate3No+');">' + cate3.cate3Nm + '</a>';
 								tag += '</li>\n';
@@ -484,7 +491,6 @@
 				}
 				tag += '</li>\n';
 			}
-
 			return tag;
 		}
 

+ 13 - 7
src/main/webapp/WEB-INF/views/web/display/LookbookDetailFormWeb.html

@@ -2,7 +2,7 @@
 <html lang="ko"
 	xmlns:th="http://www.thymeleaf.org"
 	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
-	layout:decorator="web/common/layout/DefaultLayoutWeb">
+	layout:decorator="web/common/layout/PlanningLayoutWeb">
 <!--
  *******************************************************************************
  * @source  : LookbookDetailFormWeb.html
@@ -22,7 +22,7 @@
 	<div id="container" class="container br">
 		<div class="breadcrumb">
 			<ul>
-				<li class="bread_home"><a href="index.html">홈</a></li>
+				<li class="bread_home"><a href="javascript:void(0);" id="navHome">홈</a></li>
 				<li class="bread_2depth" th:text="${lookbookInfo.brandNm}">TBJ</li>
 				<li class="bread_3depth">룩북</li>
 			</ul>
@@ -284,9 +284,9 @@
 
 	<script th:inline="javascript">
 /*<![CDATA[*/
-	var fnTest = function (){
-		console.log('18');
-	}
+	var lookbookGb = [[${lookbookInfo.lookbookGb}]];
+	var brandCd = [[${lookbookInfo.brandCd}]];
+
 	var goodsImgUrl = [[${@environment.getProperty('upload.goods.view')}]];
 	var fnLookbookGoodsPopup = function(obj1,obj2,obj3,obj4,obj5,obj6,obj7){
 	$("#lookbookItemPop").modal("show");
@@ -297,7 +297,7 @@
 	$("#lookbookItemPop").find(".itemPrice").text(obj5);
 	$("#lookbookItemPop").find(".itemPercent").text(obj6+'%');
 	$("#lookbookItemPop").find(".btn_default").attr('onclick','cfnGoToPage(_PAGE_GOODS_DETAIL+"'+obj7+'");');
-}
+	}
 	// 컨텐츠 호출
 	$(document).ready( function() {
 		/* 슬라이드 - 상단_LOOKBOOK */
@@ -318,7 +318,7 @@
 				el: '.br_lookbook_view.cont_visual .swiper-pagination',
 				clickable: true,
 			},
-		}, fnTest());
+		});
 
 		/* 슬라이드 - 룩북 속 상품 */
 		var togetherItemSwiper = new Swiper('.br_lookbook_view.cont_items .swiper-container', {
@@ -345,6 +345,12 @@
 			$("#lookbookItemPop").modal("show");
 			return false;
 		});
+
+		if(lookbookGb=='BL'){
+			$("#navHome").attr('onclick', 'cfnGoToBrandMain('+brandCd+');');
+		}else{
+			$("#navHome").attr('href', '/');
+		}
 	});
 
 /*]]>*/

+ 6 - 3
src/main/webapp/WEB-INF/views/web/display/LookbookMainFormWeb.html

@@ -2,7 +2,7 @@
 <html lang="ko"
 	xmlns:th="http://www.thymeleaf.org"
 	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
-	layout:decorator="web/common/layout/DefaultLayoutWeb">
+	layout:decorator="web/common/layout/PlanningLayoutWeb">
 <!--
  *******************************************************************************
  * @source  : LookbookMainFormWeb.html
@@ -22,7 +22,7 @@
 	<div id="container" class="container dp">
 		<div class="breadcrumb">
 			<ul>
-				<li class="bread_home"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);">홈</a></li>
+				<li class="bread_home"><a href="javascript:void(0);" id="navHome">홈</a></li>
 				<li class="bread_home" id="brandLi" style="display: none;"></li>
 				<li class="bread_2depth">룩북</li>
 			</ul>
@@ -115,7 +115,7 @@
 						tag2 += '<ul class="clear event_con" id="lookbookArea" style="display: block;">';
 						$.each(result, function(idx, item) {
 							tag2 += '<li>';
-							tag2 += '	<a href="javascript:void(0);" onclick="cfnGoToLookbookDetail('+item.lookbookSq+','+item.brandCd+')">';
+							tag2 += '	<a href="javascript:void(0);" onclick="cfnGoToLookbookDetail(\''+lookbookGb+'\','+item.lookbookSq+','+item.brandCd+')">';
 							tag2 += '		<div class="ev_img">';
 							tag2 += '			<img src="' + _imgUrl + item.orgTnfileNm + '" alt="" style="height:100%">';
 							tag2 += '		</div>';
@@ -161,6 +161,9 @@
 		if(lookbookGb=='BL'){
 			$("#brandBox").hide();
 			$("#brandLi").show();
+			$("#navHome").attr('onclick', 'cfnGoToBrandMain('+brandCd+');');
+		}else{
+			$("#navHome").attr('href', '/');
 		}
 	});
 

+ 1 - 1
src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html

@@ -165,11 +165,11 @@
 											<div class="swiper-slide">
 												<div class=" item_prod sUiXc "> <!-- item_prod ranker d_detail -->
 													<div class="item_state"> <!-- item_state AD soldout -->
+														<button type="button" class="itemLike" th:classappend="${bestItemData.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${bestItemData.goodsCd}, ithrCd='', contentsLoc='SMM004', planDtlSq=''">관심상품 추가</button>
 														<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${bestItemData.goodsCd}]], '', '', 'SMM004');">
 															<div class="shape ranker"><span th:text="${bestItemStat.count}"></span></div>
 															<div class="itemPic">
 																<img alt="BLACK-a" class=" vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + bestItemData.sysImgNm}" >
-																<button type="button" class="itemLike" th:classappend="${bestItemData.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${bestItemData.goodsCd}, ithrCd='', contentsLoc='SMM004', planDtlSq=''">관심상품 추가</button>
 															</div>
 															<p class=" itemBrand" th:text="${bestItemData.brandGroupNm}">BRAND NAME</p>
 															<div class=" itemName" th:text="${bestItemData.goodsFullNm}">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>

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

@@ -1514,7 +1514,7 @@
 		$("meta[property='eg:etc1']").attr('content', [[${goodsInfo.selfGoodsYn}]]);
 		
 		// ep 쿠폰확인
-		fnEpCouponDown([[${params.afLinkCd}]], [[${params.goodsCd}]], 1);
+		fnEpCouponDown([[${afLinkCd}]], [[${params.goodsCd}]], 1);
 	});
 	
 	// 상품평 레이어 호출후 콜백에서 호출하므로 여기에 있어야함

+ 2 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageCreCancelDetailFormWeb.html

@@ -206,6 +206,8 @@
 <script th:inline="javascript">
 	/*<![CDATA[*/
 	let oneData = [[${oneData}]];
+	let kcpReceiptUrl = [[${@environment.getProperty('pg.kcp.receipt.url')}]];
+	let refundYn = [[${refundYn}]];
 
 	$(document).ready(function() {
 		// 마이페이지 LNB 설정

+ 14 - 3
src/main/webapp/WEB-INF/views/web/mypage/MypageGiftcardFormWeb.html

@@ -202,15 +202,26 @@
 			for (let i = 0; i < giftcardUseList.length; i++) {
 				let useGiftcard = giftcardUseList[i];
 				tmtbHtml += '<tr>';
-				tmtbHtml += '<td><span class="tag deepgray">차감</span></td>';
+				if(useGiftcard.gfcdAmt > 0){
+					tmtbHtml += '		<td><span class="tag primary">적립</span></td>';
+				}else{
+					tmtbHtml += '		<td><span class="tag deepgray">차감</span></td>';
+				}
 				tmtbHtml += '<td>';
 				tmtbHtml += '<div class="txt_content">'	+ useGiftcard.goodsNm + '</div>';
 				tmtbHtml += '</td>';
-				tmtbHtml += '<td><span class="amount_minus"> <em>'
-						/* + '-' */
+				if(useGiftcard.gfcdAmt<0){
+					tmtbHtml += '<td><span class="amount_minus"> <em>'
 						+ ' '
 						+ useGiftcard.gfcdAmt.addComma()
 						+ '</em>원';
+				}else{
+					tmtbHtml += '<td><span class="amount_plus"> <em>'
+						+ ' '
+						+ useGiftcard.gfcdAmt.addComma()
+						+ '</em>원';
+				}
+				
 				tmtbHtml += '</span></td>';
 				tmtbHtml += '<td>' + useGiftcard.regDt
 						+ '</td>';

+ 1 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageOrderDetailFormWeb.html

@@ -569,6 +569,7 @@
 				let data = {};
 				data.ordNo = ordNo;
 				data.chgReason = 'G686_10';
+				data.chgReasonNm = '고객변심';
 				data.accountNo = accountNo;
 				data.accountNm = accountNm;
 				data.bankCd = bankCd;

+ 13 - 9
src/main/webapp/WEB-INF/views/web/mypage/MypagePointForm2Web.html

@@ -154,20 +154,23 @@
 		var jsonData = JSON.stringify(data);
 		
 		gagajf.ajaxJsonSubmit('/mypage/allpoint/list', jsonData, function(result){
+
 						accumulatePointList = result.accumulatePointList;
 						usePointList = result.usePointList;
 						allPointList = result.allPointList;
-						
 						// 클릭상태 확인
-						if($("#accumulatePointList").hasClass("on")){
+						if($("#accumulatePointList").hasClass("active")){
 							$("#accumulatePointList").click();
-						}else if($("#usePointList").hasClass("on")){
+							// 첫화면 전체내역 조회
+							fnGetPointTableInfo(result.accumulatePointList);
+						}else if($("#usePointList").hasClass("active")){
 							$("#usePointList").click();
-						}else if($("#allPointList").hasClass("on")) {
+							fnGetPointTableInfo(usePointList);
+						}else if($("#allPointList").hasClass("active")) {
 							$("#allPointList").click();
+							fnGetPointTableInfo(allPointList);
 						}
-						// 첫화면 전체내역 조회
-						fnGetPointTableInfo();
+						
 		});
 	}
 	
@@ -193,7 +196,7 @@
 				tag += '	<td>';
 				if(item.pntAmt > 0){
 					tag += '		<span class="amount_plus">';
-					tag += '			<em>'+item.pntAmt+'</em>P';
+					tag += '			<em>'+item.pntAmt.addComma()+'</em>P';
 					tag += '		</span>';
 				}else{
 					tag += '		<span class="c_primary">';
@@ -251,14 +254,15 @@
 	});
 	
 	$(document).ready(function() {
+		// 전체내역 표시
+ 		$("#allPointList").trigger("click");
 		// 마이페이지 LNB 설정
 		fnSetMypageLnbList(5);
 		
 		// 마이페이지 location 설정
 		fnSetMypageLocation('STYLE24 포인트', '_PAGE_MYPAGE_POINT');
 		
-		// 전체내역 표시
- 		$("#allPointList").trigger('click');
+		
 
 		// 셀렉트박스 활성화
 		$('.select_custom').each(function(index) {

+ 92 - 0
src/main/webapp/WEB-INF/views/web/order/OrderAddPaymentCompleteWeb.html

@@ -0,0 +1,92 @@
+<!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  : OrderAddPaymentWeb.html
+ * @desc    : 추가결제화면 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.13   jsh77b     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+
+<div id="container" class="container od">
+	<div class="wrap">
+		<div class="content completed">
+			<div class="cont_head">
+				<h2>결제완료</h2>
+			</div>
+			<div class="cont_body">
+				<!-- CONT-BODY -->
+				<div class="od_cont">
+					<div class="sec_head">
+						<div class="info_complete">
+							<p class="txt_box">감사합니다. <span th:text="${chgerNm}"></span> 고객님의 결제가 완료되었습니다.</p>
+						</div>
+					</div>
+					<div class="sec_body">
+						<div class="area_payinfo">
+							<h3>결제정보</h3>
+							<div class="tbl type6">
+								<table>
+									<colgroup>
+										<col width="50%">
+										<col width="50%">
+									</colgroup>   
+									<tr>
+										<td>
+											<dl>
+												<div>
+													<dt>반품/교환 배송비</dt>
+													<dd><em th:text="|${#numbers.formatInteger(addPayCost, 1, 'COMMA')}|"></em>원</dd>	
+												</div>
+											</dl>
+										</td>
+										<td>
+											<dl>
+												<div>
+													<dt>결제 금액</dt>
+													<dd>
+														<div class="price">
+															<span class="pay_total_price">
+																<em th:text="|${#numbers.formatInteger(addPayCost, 1, 'COMMA')}|">3,546,200</em>원
+															</span>
+														</div>
+													</dd>
+												</div>
+												<!-- 신용카드 일때 -->
+												<div>
+													<dt class="sr-only">결제방법</dt>
+													<dd>신용카드</dd>
+												</div>
+												<!-- //신용카드 일때 -->
+											</dl>
+										</td>
+									</tr>
+								</table>
+							</div>
+						</div>
+					</div>
+					<div class="sec_foot">
+						<div class="btn_group_md">
+							<button type="button" class="btn btn_dark btn_md"><span>쇼핑 계속하기</span></button>
+						</div>
+					</div>
+				</div>
+				<!-- //CONT-BODY -->
+			</div>
+		</div>
+	</div>
+</div>
+
+<script th:inline="javascript">
+</script>
+</th:block>
+</body>
+</html>

+ 100 - 23
src/main/webapp/WEB-INF/views/web/order/OrderAddPaymentWeb.html → src/main/webapp/WEB-INF/views/web/order/OrderAddPaymentFormWeb.html

@@ -15,10 +15,27 @@
  -->
 <body>
 <th:block layout:fragment="content">
-<form class="form_wrap">
 
-<!--  container -->
-<div id="container" class="container od">
+<!-- payment.js -->
+<script type="text/javascript" th:src="${@environment.getProperty('pg.kcp.js.url')}" src=""></script>
+<script type="text/javascript" src="/biz/payment.js"></script>
+
+<!-- 주문정보form -->
+<form id="order_info" name="order_info" method="post" action="/order/addPay/result/response" style="display:none"></form>
+<!-- //주문정보form -->
+
+<form class="form_wrap" name="addPayForm" id="addPayForm">
+	<input type="hidden" name="refundAmt" th:value="${refundAmt}">
+	<input type="hidden" name="addPayCost" th:value="${addPayCost}">
+	<input type="hidden" name="ordChgSq" th:value="${ordChgSq}">
+	
+	<input type="hidden" name="chgGb" th:value="${chgGb}">
+	<input type="hidden" name="chgerPhnno" th:value="${chgerPhnno}">
+	<input type="hidden" name="chgerNm" th:value="${chgerNm}">
+	<input type="hidden" name="goodsNm" th:value="${goodsNm}"> 
+	
+	<!--  container -->
+	<div id="container" class="container od">
 		<div class="wrap">
 			<div class="content odPayment"> <!-- 페이지특정 클래스 = odPayment 클래스 추가 -->
 				<div class="cont_head">
@@ -37,11 +54,11 @@
 											<div class="paymethod_box">
 												<ul class="sel_method">
 													<li>
-														<input type="radio" name="rdi-paynormal" id="payCreditCard" value="" checked="checked">
+														<input type="radio" name="rdi-paynormal" id="payCreditCard" class="KCP" value="KCP|G014_30" checked="checked">
 														<label for="payCreditCard"><span>신용카드</span></label>
 													</li>
 													<li>
-														<input type="radio" name="rdi-paynormal" id="payCellphone" value="">
+														<input type="radio" name="rdi-paynormal" id="payCellphone" class="KCP" value="KCP|G014_60">
 														<label for="payCellphone"><span>휴대폰 결제</span></label>
 													</li>
 												</ul>
@@ -52,13 +69,13 @@
 								<div class="area_paymentinfo">
 									<div class="paymentinfo">
 										<div class="payinfo_blk">
-											<a href="">개인정보 제공에 대한 동의<span>보기</span></a>
+											<a href="javascript:void(0);">개인정보 제공에 대한 동의<span>보기</span></a>
 											<div class="infotxt">
 												개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.
 											</div>
 										</div>
 										<div class="payinfo_blk">
-											<a href="">결제대행 서비스 약관 동의<span>보기</span></a>
+											<a href="javascript:void(0);">결제대행 서비스 약관 동의<span>보기</span></a>
 											<div class="infotxt">
 												결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.
 										</div>
@@ -70,7 +87,9 @@
 							</div>
 							<div class="area_paybtn">
 								<div class="form_field">
-									<button type="button" class="btn btn_primary btn_block"><span>동의 후 <em>123,456,789원</em> 결제하기</span></button>
+									<button type="button" class="btn btn_primary btn_block" id="btn_payment">
+										<span>동의 후 <em th:text="|${#numbers.formatInteger(addPayCost, 1, 'COMMA')}원|"></em> 결제하기</span>
+									</button>
 								</div>
 							</div>
 						</div>
@@ -81,46 +100,58 @@
 							<div class="od_item_box">
 								<!-- 반품상품 내역 -->
 								<div class="part_dlvr">
-									<h4 class="sr-only">반품상품</h4>
+									<th:block th:if="${chGb} == 'G680_20'">
+										<h4 class="sr-only">반품상품</h4>
+									</th:block>
+									<th:block th:if="${chGb} == 'G680_30'">
+										<h4 class="sr-only">반품상품</h4>
+									</th:block>
+									<th:block th:if="${chGb} == 'G680_40'">
+										<h4 class="sr-only">교환상품</h4>
+									</th:block>
 									<div class="gd_list">
+										<th:block th:each="goods, i : ${orderAddPayGoodsList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
 										<div class="item_gd">
 											<figure>
-												<span class="thumb"><img src="/images/pc/thumb/tmp_odSide1.jpg" alt=""></span>
+												<span class="thumb">
+													<img th:src="${imageUrl + '/' + goods.sysImgNm}" src="/" width="100%" alt="">
+												</span>
 												<figcaption>
-													<div class="brand">CURLYSUE 컬리수</div>
-													<div class="name">[★2020 겨울신상★] 리버시블 경량점퍼 CPW0XQJM51 [겨울] 리버시블 경량점퍼 CPW0XQJM51 [겨울]</div>
+													<div class="brand" th:text="${goods.brandEnm} + ' ' + ${goods.brandKnm}"></div>
+													<div class="name goodsNm" th:text="${goods.goodsNm}"></div>
+													<div class="option" th:each="colorNm, index : ${goods.colorNmArr}">
+														<span th:text="${colorNm}+'/'+${goods.optCd2Arr[index.index]}"></span> 
+													</div>
 													<div class="option">
-														<span>01_루돌프융기모상하복_D오렌지/110</span>
-														<span>울핸드메이드 벨티드재킷 SWHJKJ42010 / BROWN</span>
-														<span>BLACK / XXL</span>
-														<span>수량&nbsp;<em>99</em>개</span>
+														<span>수량:<em th:text="${goods.chgQty}"></em>개</span>
 													</div>
 													<div class="price">
-														<span class="selling_price">1,000,000</span>
+														<span class="selling_price" th:text="${#numbers.formatInteger((goods.currPrice + goods.optAddPrice) * goods.chgQty, 1, 'COMMA')}"></span>
 													</div>
 												</figcaption>
 											</figure>
 										</div>
-									</div>              
+										</th:block>
+									</div>
 								</div>
-								<!-- //반품상품 내역 -->                   
+								<!-- //반품상품 내역 -->
 							</div>
 							<div class="od_amount_box">
 								<dl>
 									<div>
 										<dt>환불 상품금액</dt>
-										<dd><em>1,590,000</em>원</dd>
+										<dd><em th:text="|${#numbers.formatInteger(refundAmt, 1, 'COMMA')}|"></em>원</dd>
 									</div>
 									<div>
 										<dt>반품/교환 배송비</dt>
-										<dd><em>0원</em></dd>
+										<dd><em th:text="|${#numbers.formatInteger(addPayCost, 1, 'COMMA')}|"></em></dd>
 									</div>
 								</dl>
 							</div>
 							<div class="totalprice_box">
 								<dl>
 									<dt>총 결제 예정 금액</dt>
-									<dd><span>3,546,200</span>원</dd>
+									<dd><span th:text="|${#numbers.formatInteger(addPayCost, 1, 'COMMA')}|"></span>원</dd>
 								</dl>
 								<p class="info_extra">
 									환불할 상품금액이 반품/교환 배송비보다 적을<br>
@@ -130,7 +161,7 @@
 							</div>
 						</div>
 					</div>
-					<!-- // CONT-BODY -->					
+					<!-- // CONT-BODY -->
 				</div>
 			</div>
 		</div>
@@ -139,6 +170,52 @@
 </form>
 
 <script th:inline="javascript">
+//결재하기
+$("#btn_payment").on("click", function(){
+	var paynormal			= $("input[name='rdi-paynormal']:checked").val();
+	var paynormalArr		= paynormal.split("|");
+	var pgGb				= paynormalArr[0];
+	var payMeans			= paynormalArr[1];
+	
+	// 주문데이타 생성
+	var orderData = {
+		"pgGb"					: pgGb
+		,"payMeans"				: payMeans // 네이버페이, 카카오페이
+		,"addPayCost"			: $("#addPayForm input[name=addPayCost]").val()
+		,"ordChgSq"				: $("#addPayForm input[name=ordChgSq]").val()
+		,"chgGb"				: $("#addPayForm input[name=chgGb]").val()
+		,"chgerPhnno"			: $("#addPayForm input[name=chgerPhnno]").val()
+		,"chgerNm"				: $("#addPayForm input[name=chgerNm]").val()
+		,"goodsNm"				: $("#addPayForm input[name=goodsNm]").val()
+	};
+	
+	$.ajax( {
+		type		: "POST",
+		url 		: '/order/addPayment',
+		data		: JSON.stringify(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);
+			
+			var pgGb = $("#order_info input[name=pgGb]").val();
+			
+			if (pgGb == "NAVER") {
+				fnNaverPaymentReady();
+			} else if (pgGb == "KAKAO") {
+				fnKakaoPaymentReady();
+			} else if (pgGb == "KCP" || pgGb == "PAYCO") {
+				jsf__pay(document.order_info);
+			}
+		}
+	});
+});
 
 </script>
 </th:block>

+ 1 - 3
src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html

@@ -98,9 +98,6 @@
 				<th:block th:if="${a.tmplType == 'G082_30'}">
 						<div class="content dp_mid_banner" th:id="${a.tmplType}"></div> <!-- //이미지-->
 					</th:block>
-				<th:block th:if="${a.tmplType == 'G082_40'}">
-						<div class="coner_item01" th:id="${a.tmplType}"></div>
-					</th:block>
 				<th:block th:if="${a.tmplType == 'G082_50'}">
 						<div class="content dp_special" th:id="${a.tmplType + a.planContSq}"></div>
 				</th:block>
@@ -111,6 +108,7 @@
 						<div class="content dp_special" th:id="${a.tmplType + a.planContSq}"></div>
 				</th:block>
 			</th:block>
+			<div class="coner_item01" th:utext="${#strings.replace(#strings.replace(fsrcInfoBtm.fsrcPc,'&amplt;','<'),'&ampgt;','>')}"></div>
 			
 			 <!-- 댓글리스트 -->
 			<th:block th:if="${planInfo.replyYn == 'Y'}">

+ 79 - 1
src/main/webapp/biz/goods.js

@@ -77,6 +77,10 @@ var fnViewStock = function(obj, goodsCd, optCd, optCd1, optCd2,  minOrdQty, maxO
 
 // EP 쿠폰조회
 var fnEpCouponDown = function(afLinkCd, goodsCd, maxRownum){
+	if (typeof (afLinkCd) == 'undefined' || gagajf.isNull(afLinkCd)){
+		return false;
+	}
+	
 	let data = {afLinkCd : afLinkCd
 				, goodsCd : goodsCd
 				, maxRownum : maxRownum
@@ -86,7 +90,7 @@ var fnEpCouponDown = function(afLinkCd, goodsCd, maxRownum){
 			if(result.length>0){
 				let coupon = result[0];
 				let tag = '';
-				tag += '<div class="modal fade pd_pop epcoupon_pop" id="epCouponPop" tabindex="-1" role="dialog" aria-labelledby="epCouponLabel" aria-hidden="true" style="display:block;">\n';
+				tag += '<div class="modal fade pd_pop epcoupon_pop" id="epCouponPop" tabindex="-1" role="dialog" aria-labelledby="epCouponLabel" aria-hidden="true">\n';
 				tag += '	<div class="modal-dialog" role="document">\n';
 				tag += '	  <div class="modal-content">\n';
 				tag += '		<div class="modal-header">\n';
@@ -147,4 +151,78 @@ var fnEpCouponDownCallBack = function(){
 	//cfCloseLayer('epCouponPop');  //dim 이 안없어져요
 }
 
+var categoryGoodsList = [];
+var cnt = 1;
+var email = '';
+var fnCreateGoodsList = function(result, ithrCd, contentLoc, goodsUrl, lastPage, endRow) {
+	var tag = '';
+	var rank = 0;
+	if(lastPage!='1'){
+		rank = endRow;
+	}
+	$.each(result.dataList, function(idx, item) {
+		if (idx < 4) {
+			categoryGoodsList.push(item.goodsCd);
+		}
+
+		tag += '<div class="item_prod">';
+		tag += '	<div class="item_state">';
+		tag += '		<button type="button" class="itemLike">관심상품 추가</button>';
+		tag += '		<a href="#none" class="itemLink">';
+		// tag += '			<div class="rank ranker"><span>'+(rank+(idx+1))+'</span></div>';
+		tag += '			<div class="itemPic">';
+		tag += '				<img alt="BLUE-a" class=" vLHTC pd_img" src="'+goodsUrl+'/'+item.sysImgNm+'">';
+		tag += '			</div>';
+		tag += '			<p class="itemBrand">'+item.brandGroupNm+'</p>';
+		tag += '			<div class="itemName">'+item.goodsFullNm+'</div>';
+		tag += '			<p class="itemPrice">'+item.currPrice.addComma();
+		tag += '				<span class="itemPrice_original">'+item.listPrice.addComma()+'</span>';
+		if(item.currPrice != item.listPrice){
+			if(item.listPrice != 0){
+				tag += '				<span class="itemPercent">'+ Math.round((item.listPrice - item.currPrice) / (item.listPrice * 1.0) * 100) +'%</span>';
+			}
+		}
+		tag += '			</p>';
+		tag += '			<div class="itemcolorchip">';
+		tag += '				<span class="chip_color35" value="ABM">BEIGE</span>';
+		tag += '				<span class="chip_color54" value="BDS">BLACK</span>';
+		tag += '				<span class="chip_color40" value="YBR">WHITE</span>';
+		tag += '			</div>';
+		tag += '			<p class="itemBadge">';
+		tag += '				<span class="badge13">베스트 </span>';
+		tag += '			</p>';
+		if(item.goodsTnm != null){
+			tag += '			<div class="itemComment">'+item.goodsTnm+'</div>';
+		}
+		tag += '		</a>';
+		tag += '	</div>';
+		tag += '</div>';
+	});
+
+	if (cnt == 1) {
+		// <!-- Criteo 카테고리/리스팅 태그 -->
+		window.criteo_q = window.criteo_q || [];
+		var deviceType = /iPad/.test(navigator.userAgent) ? "t" : /Mobile|iP(hone|od)|Android|BlackBerry|IEMobile|Silk/.test(navigator.userAgent) ? "m" : "d";
+		window.criteo_q.push(
+			{event: "setAccount", account: 26073}, // 이 라인은 업데이트하면 안됩니다
+			{event: "setEmail", email: email}, // 유저가 로그인이 안되 있는 경우 빈 문자열을 전달
+			{event: "setSiteType", type: deviceType},
+			{event: "viewList", item: categoryGoodsList} // 가장 위에있는 3개의 상품 ID를 전달
+		);
+		// <!-- END 카테고리/리스팅 태그 -->
+		cnt++;
+	}
+
+	return tag;
+}
+
+
+// 인피니트 스크롤 초기화
+var fnCategoryGoodsInfiniteScrollInit = function(){
+	sessionStorage.removeItem(document.location.href);
+	//History 초기화
+	$("#listBox").html("");
+}
+
+
 //****************상품상세  end **********************************

+ 8 - 1
src/main/webapp/biz/mypage.js

@@ -290,13 +290,20 @@ var fnReceipt = function(param) {
 		// 팝업 크기 설정
 		option = 'width=370, height=625';
 	} else if (param == 'cancel') {
-		if (param.refunYn == 'Y') {
+		if (refundYn == 'Y') {
 			// TODO
 			// 취소전표 확인 처리
+			//receiptWin += '?cmd=card_bill';
+			//receiptWin += '&tno=' + oneData.pgTid;
+			//receiptWin += '&order_no=' + oneData.ordNo;
+			//receiptWin += '&trade_mony=' + oneData.refundAmt;
 		} else {
 			mcxDialog.alert('아직 전표생성이 되지 않았습니다.');
 			return false;
 		}
+		
+		// 팝업 크기 설정
+		option = 'width=455, height=815';
 	} else if (param == 'delivery') {
 		// URL 설정
 		receiptWin += '?cmd=card_bill';

+ 8 - 3
src/main/webapp/ux/style24_link.js

@@ -1013,8 +1013,9 @@ function cfnPutWishList(a) {
  * @since  : 2021/03/22
  * @author : gagamel
  */
-var cfnGoToCategoryMain = function(cateGb, cate1No) {
+var cfnGoToCategoryMain = function(cateGb, cate1No, brandGroupNo) {
 	var params = '?cateGb=' + cateGb + '&cate1No=' + cate1No;
+	if (typeof (brandGroupNo) != 'undefined') params += '&brandGroupNo=' + brandGroupNo;
 	cfnGoToPage(_PAGE_CATE_MAIN + params);
 }
 
@@ -1109,8 +1110,12 @@ var cfnGoToLookbookList = function (lookbookGb, brandGroupNo) {
  * @author : bin2107
  */
 var cfnGoToLookbookDetail = function (lookbookGb, lookbookSq, brandGroupNo) {
-	var params = '?lookbookGb='+lookbookGb+'lookbookSq=' + lookbookSq;
-	if (typeof (brandGroupNo) != 'undefined') params += '&brandCd=' + brandGroupNo;
+	var params = '?lookbookGb='+lookbookGb+'&lookbookSq=' + lookbookSq;
+	if(lookbookGb=='BL'){
+		if (typeof (brandGroupNo) != 'undefined') params += '&brandCd=' + brandGroupNo + '&brandGroupNo=' + brandGroupNo;
+	}else {
+		if (typeof (brandGroupNo) != 'undefined') params += '&brandCd=' + brandGroupNo;
+	}
 
 	cfnGoToPage(_PAGE_LOOKBOOK_DETAIL + params);
 }