Pārlūkot izejas kodu

Merge branch 'order' into develop

card007 5 gadi atpakaļ
vecāks
revīzija
15d6f73248

+ 7 - 7
src/main/java/com/style24/front/biz/dao/TsfOrderDao.java

@@ -25,24 +25,24 @@ public interface TsfOrderDao {
 	Collection<Order> getOrderListForMypage(Order order);
 
 	/**
-	 * 마이페이지 주문상태 별 주문수량 조회
+	 * 주문 상태 별 수량 조회
 	 *
 	 * @param Order
-	 * @return int
+	 * @return Order
 	 * @author card007
 	 * @since 2021. 02. 08
 	 */
-	int getOrderStatCount(Order order);
+	Order getOrderStatCount(Order order);
 
 	/**
-	 * 마이페이지 주문변경상태 별 주문수량 조회
+	 * 마이페이지 주문목록 페이징 처리 주문번호 조회
 	 *
 	 * @param Order
-	 * @return int
+	 * @return Collection<Order>
 	 * @author card007
-	 * @since 2021. 02. 08
+	 * @since 2021. 02. 18
 	 */
-	int getOrderChangeStatCount(Order order);
+	Collection<Order> getPagingOrdNoList(Order order);
 
 	/**
 	 * 마이페이지 주문상세 금액정보 조회

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

@@ -311,6 +311,9 @@ public class TsfCartService {
 					cart.setAmtTmtbSq(info.getAmtTmtbSq());
 				}
 			}
+			if(cart.getTmtbDcAmt() == 0) {
+				cart.setTmtbDcAmt(cart.getCurrPrice());
+			}
 		}
 
 		// 장바구니 업체별 배송비 계산

+ 13 - 50
src/main/java/com/style24/front/biz/service/TsfCouponService.java

@@ -64,8 +64,7 @@ public class TsfCouponService {
 		param.setFrontGb(TsfSession.getFrontGb());
 
 		// 시리얼키의 쿠폰이 다운로드 가능한지 확인
-		Coupon cpn = couponDao.getSearchSerialCpnInfo(param);   // >> 여기서 쿠폰 정보 다 빼내야함.
-
+		Coupon cpn = couponDao.getSearchSerialCpnInfo(param);
 
 		// 다운로드 받을 수 있는 쿠폰이 있으면
 		if(cpn != null && cpn.getCpnId() > 0) {
@@ -78,12 +77,13 @@ public class TsfCouponService {
 				// 이미 다운 받았고, 사용 한 쿠폰이 있을 경우 종료
 				if(!StringUtils.isEmpty(myCpn.getUsedDt())) {
 					cpn.setResult("해당 쿠폰은 이미 사용하신 쿠폰입니다.");
-				} else {
-					cpn.setResult("지급 받으신 쿠폰 사용 기한이 지났습니다.");
+					return cpn;
+				} else if("N".equals(myCpn.getAvailYn())) {
+					cpn.setResult("지급 받으신 쿠폰의 유효기간이 아닙니다.");
+					return cpn;
 				}
-				return cpn;
 			} else {
-				/* 다운받지 않은 경우 (tb_cust_coupon insert) */
+				/* 다운받은 쿠폰이 아닐 경우 (tb_cust_coupon insert) */
 				// 랜덤쿠폰 할당 및 쿠폰 지급
 				cpn.setRegNo(param.getRegNo());
 				cpn.setUpdNo(param.getUpdNo());
@@ -95,53 +95,16 @@ public class TsfCouponService {
 			return cpn;
 		}
 
+		Coupon dtData = couponDao.getSerialCpnUseInfo(cpn);
+		cpn.setAvailStdt(dtData.getAvailStdt());
+		cpn.setAvailEddt(dtData.getAvailEddt());
+
 		// 장바구니쿠폰 토탈 할인 금액 계산
+		param.setCpnId(cpn.getCpnId());
 		cpn.setDcAmt(getCartCpnApplyTotalAmt(param));
 		cpn.setResult("SUCCESS");
 
-		log.info("CHECK INFO >> {} / {}", cpn.getDcAmt(), cpn.getResult());
-
 		return cpn;
-
-
-
-/*
-		// 시리얼 쿠폰 지급 및 사용 내역 조회
-		Coupon useSerial = getSerialCpnUseInfo(param);
-		if(useSerial == null) {	useSerial = new Coupon();	}
-
-		useSerial.setRdCpnNm(param.getRdCpnNm());
-		useSerial.setCartSqArr(param.getCartSqArr());
-		useSerial.setCustNo(param.getCustNo());
-		useSerial.setRegNo(param.getRegNo());
-		useSerial.setUpdNo(param.getUpdNo());
-
-		Coupon coupon = new Coupon();
-
-		// 시리얼 쿠폰 다운로드하지 않았다면
-		if(useSerial != null && useSerial.getCpnId() > 0) {
-			// 해당 시리얼쿠폰을 사용한적이 있는 경우나, 받은것이 있는경우에 대한 처리
-			if(!StringUtils.isEmpty(useSerial.getUsedDt())) {
-				useSerial.setResult("해당 쿠폰은 이미 사용완료된 쿠폰입니다.");
-				return useSerial;
-			}
-		} else {
-			// 쿠폰 저장 및 할인 가격 적용
-			coupon = couponDao.getSearchSerialCpnInfo(useSerial);
-			if(coupon == null) {
-				useSerial.setResult("해당 쿠폰은 존재하지 않습니다.");
-				return useSerial;
-			} *//*else if (!"Y".equals(coupon.getDownCanGb())) {
-				useSerial.setResult("해당 쿠폰은 사용 할 수 없습니다.");
-				return useSerial;
-			}*//* else {
-				// 랜덤쿠폰 할당 및 쿠폰 지급
-				coupon.setCustNo(useSerial.getCustNo());
-				coupon.setRegNo(useSerial.getRegNo());
-				coupon.setUpdNo(useSerial.getUpdNo());
-				updateGiveRandomCpnInfo(coupon);
-			}
-		}*/
 	}
 
 	// 장바구니쿠폰 토탈 할인 금액 계산
@@ -179,8 +142,8 @@ public class TsfCouponService {
 			totDcAmt = maxDcAmt;
 		}
 
-		// 주문 최소 금액 요건 확인 (0은 제한 없음. 최소 주문 금액보다 총 상품 금액이 적으면 0원으로 세팅)
-		if(buyLimitAmt > 0 && buyLimitAmt > totCurrPrice) {
+		// 주문 최소 금액 요건 확인 (최소 주문 금액보다 총 상품 금액이 적으면 0원으로 세팅)
+		if(buyLimitAmt > totCurrPrice) {
 			totDcAmt = 0;
 		}
 

+ 83 - 64
src/main/java/com/style24/front/biz/service/TsfOrderService.java

@@ -12,6 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.gagaframework.web.parameter.GagaMap;
+import com.style24.core.support.env.TscConstants;
 import com.style24.front.biz.dao.TsfOrderDao;
 import com.style24.persistence.domain.Order;
 
@@ -61,7 +62,8 @@ public class TsfOrderService {
 	 */
 	public Collection<GagaMap> getOrderListForMypage(Order order) {
 		Collection<GagaMap> mapList = new ArrayList<>();
-		List<Order> orderList = new ArrayList<>();
+		Collection<GagaMap> orderList = new ArrayList<>();
+		List<Order> ordDtlList = new ArrayList<>();
 		int ordNo = 0;
 		String ordDt = "";
 		String delvFeeCd = "";
@@ -71,27 +73,42 @@ public class TsfOrderService {
 		String shipCompNm = "";
 		String invoiceNo = "";
 		String giftPackYn = "";
+		String reviewYn = "";
 		int reviewSq = 0;
 		int index = 0;
-		int ordDtlStatCnt = 0;
-		int rowspan = 0;
 
 		for (Order tmpOrder : orderDao.getOrderListForMypage(order)) {
-			// 주문번호, 배송구분(총알배송, 일반배송, 업체직배송), 배송정책 변경
-			if (ordNo != tmpOrder.getOrdNo() || !selfGoodsYn.equals(tmpOrder.getSelfGoodsYn()) || ("N".equals(tmpOrder.getSelfGoodsYn()) && !delvFeeCd.equals(tmpOrder.getDelvFeeCd())) || !shotDelvYn.equals(tmpOrder.getShotDelvYn())) {
+			if (ordNo != tmpOrder.getOrdNo()							// 주문번호 변경
+				|| !selfGoodsYn.equals(tmpOrder.getSelfGoodsYn())		// 자사여부 변경
+				|| ("N".equals(tmpOrder.getSelfGoodsYn())
+					&& !delvFeeCd.equals(tmpOrder.getDelvFeeCd()))		// 입점업체 배송정책코드 변경
+				|| !shotDelvYn.equals(tmpOrder.getShotDelvYn())) {		// 총알배송여부 변경
+
 				// 데이터 설정
 				if (index > 0) {
+					// 주문상세내역 목록 설정
+					GagaMap ordDtlMap = new GagaMap();
+					ordDtlMap.set("ordDtlList", ordDtlList);
+					ordDtlMap.set("ordDtlStat", ordDtlList.iterator().next().getOrdDtlStat());
+					ordDtlMap.set("shipCompNm", shipCompNm);
+					ordDtlMap.set("invoiceNo", invoiceNo);
+					ordDtlMap.set("reviewSq", reviewSq);
+					ordDtlMap.set("recipBaseAddr", ordDtlList.iterator().next().getRecipBaseAddr());
+					ordDtlMap.set("giftLimitDay", ordDtlList.iterator().next().getGiftLimitDay());
+					ordDtlMap.set("recipNm", ordDtlList.iterator().next().getRecipNm());
+					ordDtlMap.set("giftLimitDt", ordDtlList.iterator().next().getGiftLimitDt());
+					ordDtlMap.set("purchaseConfirmDay", ordDtlList.iterator().next().getPurchaseConfirmDay());
+					ordDtlMap.set("ordDtlStatBanner", "Y");
+					orderList.add(ordDtlMap);
+					
+					// 주문내역 목록 설정
 					GagaMap map = new GagaMap();
 					map.set("ordNo", ordNo);					// 주문번호
 					map.set("ordDt", ordDt);					// 주문일시
 					map.set("shotDelvYn", shotDelvYn);			// 총알배송여부
 					map.set("selfGoodsYn", selfGoodsYn);		// 자사여부
-					map.set("ordDtlStat", ordDtlStat);			// 주문상태코드
-					map.set("shipCompNm", shipCompNm);			// 배송업체명
-					map.set("invoiceNo", invoiceNo);			// 송장번호
 					map.set("giftPackYn", giftPackYn);			// 선물하기여부
-					map.set("reviewSq", reviewSq);				// 리뷰일련번호
-					map.set("orderList", setOrderListParameter(orderList, rowspan, ordDtlStatCnt, "Y"));			// 주문내역
+					map.set("orderList", orderList);			// 주문내역
 					mapList.add(map);
 				}
 
@@ -103,43 +120,72 @@ public class TsfOrderService {
 				shotDelvYn = tmpOrder.getShotDelvYn();
 				selfGoodsYn = tmpOrder.getSelfGoodsYn();
 				shipCompNm = tmpOrder.getShipCompNm();
-				invoiceNo = tmpOrder.getInvoiceNo();
-				reviewSq = tmpOrder.getReviewSq();
 				giftPackYn = tmpOrder.getGiftPackYn();
+				ordDtlList = new ArrayList<>();
 				orderList = new ArrayList<>();
-				ordDtlStatCnt = 0;
-				rowspan = 0;
-			} else if (index > 0 && !ordDtlStat.equals(tmpOrder.getOrdDtlStat())) {
-				// 주문내역 데이터 추가
-				orderList = setOrderListParameter(orderList, rowspan, ordDtlStatCnt, "N");
+			} else if (index > 0 
+				&& (!ordDtlStat.equals(tmpOrder.getOrdDtlStat())						// 주문상세상태값 변경
+					|| ("G013_70".equals(tmpOrder.getOrdDtlStat())
+						&& !reviewYn.equals(tmpOrder.getReviewSq() > 0 ? "Y" : "N"))	// 리뷰작성 변경
+					|| (!invoiceNo.equals(tmpOrder.getInvoiceNo())))) {					// 송장번호 변경
+
+				// 주문내역 목록 설정
+				GagaMap ordDtlMap = new GagaMap();
+				ordDtlMap.set("ordDtlList", ordDtlList);
+				ordDtlMap.set("ordDtlStat", ordDtlList.iterator().next().getOrdDtlStat());
+				ordDtlMap.set("shipCompNm", shipCompNm);
+				ordDtlMap.set("invoiceNo", invoiceNo);
+				ordDtlMap.set("reviewSq", reviewSq);
+				ordDtlMap.set("purchaseConfirmDay", ordDtlList.iterator().next().getPurchaseConfirmDay());
+				ordDtlMap.set("recipBaseAddr", ordDtlList.iterator().next().getRecipBaseAddr());
+				ordDtlMap.set("giftLimitDay", ordDtlList.iterator().next().getGiftLimitDay());
+				ordDtlMap.set("recipNm", ordDtlList.iterator().next().getRecipNm());
+				ordDtlMap.set("giftLimitDt", ordDtlList.iterator().next().getGiftLimitDt());
+				ordDtlMap.set("ordDtlStatBanner", "Y");
+				orderList.add(ordDtlMap);
 
 				// 상태 별 배너 설정 후 초기화 진행
+				ordDtlList = new ArrayList<>();
 				ordDtlStat = tmpOrder.getOrdDtlStat();
-				rowspan = 0;
 			}
 
 			// 주문내역 설정
-			orderList.add(tmpOrder);
+			ordDtlList.add(tmpOrder);
 
 			// 인덱스 처리
 			index++;
-			ordDtlStatCnt++;
-			rowspan++;
+			
+			// 초기화 진행
+			invoiceNo = tmpOrder.getInvoiceNo();
+			reviewSq = tmpOrder.getReviewSq();
+			reviewYn = tmpOrder.getReviewSq() > 0 ? "Y" : "N";
 		}
 
 		// 마지막 데이터 설정
 		if (ordNo > 0) {
+			// 주문상세내역 목록 설정
+			GagaMap ordDtlMap = new GagaMap();
+			ordDtlMap.set("ordDtlList", ordDtlList);
+			ordDtlMap.set("ordDtlStat", ordDtlList.iterator().next().getOrdDtlStat());
+			ordDtlMap.set("shipCompNm", shipCompNm);
+			ordDtlMap.set("invoiceNo", invoiceNo);
+			ordDtlMap.set("reviewSq", reviewSq);
+			ordDtlMap.set("purchaseConfirmDay", ordDtlList.iterator().next().getPurchaseConfirmDay());
+			ordDtlMap.set("recipBaseAddr", ordDtlList.iterator().next().getRecipBaseAddr());
+			ordDtlMap.set("giftLimitDay", ordDtlList.iterator().next().getGiftLimitDay());
+			ordDtlMap.set("recipNm", ordDtlList.iterator().next().getRecipNm());
+			ordDtlMap.set("giftLimitDt", ordDtlList.iterator().next().getGiftLimitDt());
+			ordDtlMap.set("ordDtlStatBanner", "Y");
+			orderList.add(ordDtlMap);
+
+			// 주문내역 목록 설정
 			GagaMap map = new GagaMap();
 			map.set("ordNo", ordNo);
 			map.set("ordDt", ordDt);
 			map.set("shotDelvYn", shotDelvYn);
 			map.set("selfGoodsYn", selfGoodsYn);
-			map.set("ordDtlStat", ordDtlStat);
-			map.set("shipCompNm", shipCompNm);
-			map.set("invoiceNo", invoiceNo);
 			map.set("giftPackYn", giftPackYn);
-			map.set("reviewSq", reviewSq);
-			map.set("orderList", setOrderListParameter(orderList, rowspan, ordDtlStatCnt, "Y"));
+			map.set("orderList", orderList);
 			mapList.add(map);
 		}
 
@@ -147,54 +193,24 @@ public class TsfOrderService {
 	}
 
 	/**
-	 * 마이페이지 주문내역 데이터 추가
-	 *
-	 * @param List<Order>
-	 * @return List<Order>
-	 * @author card007
-	 * @since 2021. 02. 08
-	 */
-	private List<Order> setOrderListParameter(List<Order> orderList, int rowspan, int ordDtlStatCnt, String setLastBanner) {
-		// rowspan 설정
-		for (int i = 0;i <= rowspan;i++) {
-			if (i == rowspan) {
-				orderList.get(ordDtlStatCnt - rowspan).setRowspan(rowspan);
-			} else if (rowspan == 1){
-				orderList.get(ordDtlStatCnt - rowspan).setRowspan(1);
-			} else {
-				orderList.get(ordDtlStatCnt - rowspan).setRowspan(0);
-			}
-		}
-
-		// 주문상세상태값 별 배너 설정
-		if ("Y".equals(setLastBanner)) {
-			orderList.get(orderList.size() - 1).setOrdDtlStatBanner("Y");
-		} else {
-			orderList.get(ordDtlStatCnt - 1).setOrdDtlStatBanner("Y");
-		}
-
-		return orderList;
-	}
-
-	/**
-	 * 마이페이지 주문상태 별 주문수량 조회
+	 * 주문 상태 별 수량 조회
 	 *
 	 * @param Order
-	 * @return int
+	 * @return Order
 	 * @author card007
 	 * @since 2021. 02. 08
 	 */
-	public int getOrderStatCount(Order order) { return orderDao.getOrderStatCount(order); }
+	public Order getOrderStatCount(Order order) { return orderDao.getOrderStatCount(order); }
 
 	/**
-	 * 마이페이지 주문변경상태 별 주문수량 조회
+	 * 마이페이지 주문목록 페이징 처리 주문번호 조회
 	 *
 	 * @param Order
-	 * @return int
+	 * @return Collection<Order>
 	 * @author card007
-	 * @since 2021. 02. 08
+	 * @since 2021. 02. 18
 	 */
-	public int getOrderChangeStatCount(Order order) { return orderDao.getOrderChangeStatCount(order); }
+	public Collection<Order> getPagingOrdNoList(Order order) { return orderDao.getPagingOrdNoList(order); }
 
 	/**
 	 * 마이페이지 주문상세 금액정보 조회
@@ -214,7 +230,10 @@ public class TsfOrderService {
 	 * @author card007
 	 * @since 2021. 02. 16
 	 */
-	public Order getPaymentInfoForMypage(Order order) { return orderDao.getPaymentInfoForMypage(order); }
+	public Order getPaymentInfoForMypage(Order order) {
+		order.setPayStat(TscConstants.PaymentStat.PAYMENT_COMPLETE.value());
+		return orderDao.getPaymentInfoForMypage(order);
+	}
 
 	/**
 	 * 마이페이지 주문상세 배송지 정보 조회

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

@@ -1,8 +1,10 @@
 package com.style24.front.biz.web;
 
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
+import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
@@ -142,9 +144,6 @@ public class TsfCartController extends TsfBaseController {
 	public GagaMap serialCpnApply(@RequestBody Coupon param) {
 		GagaMap result = new GagaMap();
 
-		log.info("CHECK IN >> {}", param.getRdCpnNm());
-		log.info("CHECK IN >> {}", param.getCartSqArr());
-
 		// 시리얼 쿠폰 정보 조회 및 쿠폰 지급 미대상인 경우 쿠폰 지급
 		Coupon useSerial = couponService.serialCpnApplyInfo(param);
 

+ 50 - 38
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -1,14 +1,19 @@
 package com.style24.front.biz.web;
 
+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.lang.Nullable;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 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;
 
@@ -27,6 +32,7 @@ import com.style24.front.biz.service.TsfReviewService;
 import com.style24.front.biz.service.TsfWishlistService;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
+import com.style24.persistence.TscPageRequest;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.Order;
 
@@ -81,8 +87,12 @@ public class TsfMypageController extends TsfBaseController {
 	 * @since 2021. 02. 04
 	 */
 	@GetMapping({"/main/form", "/order/list/form"})
-	public ModelAndView mypageOrderListForm() {
+	public ModelAndView mypageOrderListForm(@RequestBody(required = false) Order order) {
 		ModelAndView mav = new ModelAndView();
+
+		if (order == null) {
+			order = new Order();
+		}
 		
 		// int custNo = TsfSession.getInfo().getCustNo();
 		int custNo = 1000007;
@@ -95,9 +105,9 @@ public class TsfMypageController extends TsfBaseController {
 		mav.addObject("customerInfo", coreCustomerService.getCustomerInfo(customer));
 
 		// 주문정보 조회
-		Order order = new Order();
+		// Order order = new Order();
+		
 		order.setCustNo(custNo);
-		mav.addObject("orderInfo", orderService.getOrderListForMypage(order));
 
 		// 쿠폰정보 조회
 		mav.addObject("couponCnt", coreOrderService.getCouponInfo(order));
@@ -111,42 +121,9 @@ public class TsfMypageController extends TsfBaseController {
 		// 상품권 정보 조회
 		mav.addObject("rmGfcdAmt", coreOrderService.getGiftcardInfo(order));
 
-		// 주문접수
-		order.setOrdDtlStat(TscConstants.OrderDetailStat.ORDER_RECEIPT.value());
-		mav.addObject("orderReceiptCount", orderService.getOrderStatCount(order));
-
-		// 결제완료
-		order.setOrdDtlStat(TscConstants.OrderDetailStat.PAYMENT_COMPLETE.value());
-		mav.addObject("paymentCompleteCount", orderService.getOrderStatCount(order));
-
-		// 상품준비중
-		order.setOrdDtlStat(TscConstants.OrderDetailStat.GOODS_PREPARE.value());
-		mav.addObject("goodsPrepareCount", orderService.getOrderStatCount(order));
-
-		// 배송중
-		order.setOrdDtlStat(TscConstants.OrderDetailStat.DELIVERY_PREPARE.value());
-		mav.addObject("shipPrepareCount", orderService.getOrderStatCount(order));
-
-		// 배송중
-		order.setOrdDtlStat(TscConstants.OrderDetailStat.SHIPPING.value());
-		mav.addObject("shippingCount", orderService.getOrderStatCount(order));
+		// 주문 상태 별 수량 조회
+		mav.addObject("orderCount", orderService.getOrderStatCount(order));
 
-		// 배송완료
-		order.setOrdDtlStat(TscConstants.OrderDetailStat.DELIVERY_COMPLETE.value());
-		mav.addObject("shipCompleteCount", orderService.getOrderStatCount(order));
-
-		// 취소내역
-		order.setChgStat(TscConstants.OrderChangeStat.CANCEL.value());
-		mav.addObject("cancelCount", orderService.getOrderChangeStatCount(order));
-
-		// 반품내역
-		order.setChgStat(TscConstants.OrderChangeStat.RETURN.value());
-		mav.addObject("returnCount", orderService.getOrderChangeStatCount(order));
-
-		// 교환내역
-		order.setChgStat(TscConstants.OrderChangeStat.EXCHANGE.value());
-		mav.addObject("exchangeCount", orderService.getOrderChangeStatCount(order));
-		
 		// 검색기간 설정
 		mav.addObject("searchPeriod", orderService.getSearchPeriod());
 
@@ -212,6 +189,41 @@ public class TsfMypageController extends TsfBaseController {
 		return mav;
 	}
 
+	/**
+	 * 마이페이지 주문목록 조회
+	 * 
+	 * @param Order
+	 * @return ModelAndView
+	 * @author card007
+	 * @since 2021. 02. 18
+	 */
+	@PostMapping("/order/list")
+	@ResponseBody
+	public ModelAndView getOrderList(@RequestBody Order order) {
+		ModelAndView mav = new ModelAndView();
+
+		// 페이징 처리 설정
+		order.setPageable(new TscPageRequest(order.getPageNo() - 1, 5));
+
+		// 페이징 처리 및 주문정보 조회
+		List<Integer> ordNoList = new ArrayList<>();
+
+		for (Order tmpOrder : orderService.getPagingOrdNoList(order)) {
+			ordNoList.add(tmpOrder.getOrdNo());
+		}
+
+		if (ordNoList.size() > 0) {
+			order.setOrdNoList(ordNoList.stream().mapToInt(Integer::intValue).toArray());
+		}
+
+		mav.addObject("orderList", orderService.getOrderListForMypage(order));
+		mav.addObject("orderInfo", order);
+		
+		mav.setViewName(super.getDeviceViewName("mypage/MypageOrderList"));
+		
+		return mav;
+	}
+
 	/**
 	 * 마이페이지 주문상세 주문내역 삭제
 	 *

+ 6 - 3
src/main/java/com/style24/front/biz/web/TsfOrderController.java

@@ -168,13 +168,13 @@ public class TsfOrderController extends TsfBaseController {
 		GagaMap delvOrderMap = coreOrderService.getCartDelvGoodsCntList(tmtbGoodsApplyList);
 
 		// 3. 할인구간정보조회
-		// 3.2 장바구니상품 상품쿠폰, 장바구니쿠폰 정보 조회
+		// 3.2 상품쿠폰, 장바구니쿠폰 목록 조회
 		GagaMap goodsCartCpnMap = coreOrderService.getGoodsCartCpnApplyGoodsList(order);
 		
 		Collection<Order> goodsCpnList 	= (Collection<Order>) goodsCartCpnMap.get("goodsCpnList");
 		Collection<Order> cartCpnList 	= (Collection<Order>) goodsCartCpnMap.get("cartCpnList");
 		
-		// 3.2.1 상품쿠폰, 장바구니쿠폰 적용된 상품 목록
+		// 3.2.1 상품기준 ---> 상품쿠폰 적용된 상품 목록
 		Collection<Order> goodsApplyCpnList = coreOrderService.getGoodsCpnApplyList(tmtbGoodsApplyList, goodsCpnList);
 		
 		// 3.3 배송비쿠폰목록 조회
@@ -209,7 +209,6 @@ public class TsfOrderController extends TsfBaseController {
 		// 103. 할인정보
 		mav.addObject("tmtbGoodsApplyList"				, tmtbGoodsApplyList);					// 다다익선상품 적용목록
 		mav.addObject("goodsApplyCpnList"				, goodsApplyCpnList);					// 상품적용쿠폰
-		mav.addObject("goodsCpnList"					, goodsCpnList);						// 상품쿠폰목록
 		mav.addObject("cartCpnList"						, cartCpnList);							// 장바구니쿠폰목록
 		mav.addObject("delvCpnList"						, delvCpnList);							// 배송비쿠폰목록
 		mav.addObject("prePntDcAmt"						, prePntDcAmt);							// 선포인트정보
@@ -328,6 +327,10 @@ public class TsfOrderController extends TsfBaseController {
 	public ModelAndView freegiftInfoPop(Order order) {
 		
 		ModelAndView mav = new ModelAndView();
+		
+		
+		
+		
 		mav.setViewName(super.getDeviceViewName("order/OrderFreegiftInfoPop"));
 		
 		return mav;

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

@@ -21,7 +21,8 @@ public class Coupon extends TscBaseDomain {
 	private int custNo;				// 회원번호
 	private int availDays;			// 쿠폰 다운로드 후 유효기간일
 	private int rdCpnId;			// 랜덤쿠폰번호
-	private int dcAmt;				// 할인금액
+	private int dcAmt;				// 할인적용금액
+	private int dcVal;				// 할인금액/율
 	private String useYn;			// 쿠폰 사용 여부
 	private String cpnNm;			// 쿠폰명
 	private String rdCpnNm;			// 시리얼쿠폰 키
@@ -32,4 +33,7 @@ public class Coupon extends TscBaseDomain {
 	private String availEddt;		// 쿠폰 유효일
 	private String endAlimYn;		// 쿠폰 종료 알림 여부
 	private String frontGb;			// 화면 구분
+	private String availYn;			// 지급 받은 쿠폰 사용 가능 유무
+	private String dcWay;			// 할인금액/율 구분
+	private String cpnDesc;			// 쿠폰설명
 }

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

@@ -261,7 +261,7 @@
 					 ON     TAG.GOODS_CD = C.GOODS_CD
 					 WHERE  TAG.DEL_YN = 'N'
 					<if test="cartSqArr != null and cartSqArr.length > 0">
-					AND     C.CART_SQ IN
+					 AND    C.CART_SQ IN
 						<foreach collection="cartSqArr" item="item" index="index"  open="(" close=")" separator=",">
 								#{item}
 						</foreach>

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

@@ -19,6 +19,10 @@
 		/* TsfCoupon.getSerialCpnUseInfo */
 		SELECT CC.CPN_ID
 			 , DATE_FORMAT(CC.USED_DT, '%Y-%m-%d') AS USED_DT
+			 , CASE WHEN NOW() BETWEEN CC.AVAIL_STDT AND CC.AVAIL_EDDT THEN 'Y'
+					ELSE 'N' END AS AVAIL_YN
+			 , DATE_FORMAT(CC.AVAIL_STDT, '%Y.%m.%d') AS AVAIL_STDT
+			 , DATE_FORMAT(CC.AVAIL_EDDT, '%Y.%m.%d') AS AVAIL_EDDT
 		FROM   TB_CUST_COUPON CC
 		WHERE  1=1
 		AND    CC.CPN_ID = #{cpnId}
@@ -30,6 +34,7 @@
 		/* TsfCoupon.getSearchSerialCpnInfo : 입력된 시리얼 쿠폰 정보 조회 */
 		SELECT CP.CPN_ID
 			 , CP.CPN_NM
+		     , CP.CPN_DESC
 		     , CP.DC_WAY
 			 , CASE WHEN #{frontGb} = 'P' THEN CP.DC_PVAL
 					WHEN #{frontGb} = 'M' THEN CP.DC_MVAL
@@ -40,8 +45,6 @@
 			     	ELSE DATE_FORMAT(CP.AVAIL_STDT, '%Y%m%d%H%i%S') END AS AVAIL_STDT
 			 , CASE WHEN CP.PD_GB = 'D' THEN DATE_FORMAT(DATE_ADD(NOW(), INTERVAL CP.AVAIL_DAYS DAY), '%Y%m%d%H%i%S')
 			     	ELSE  DATE_FORMAT(CP.AVAIL_EDDT, '%Y%m%d%H%i%S') END AS AVAIL_EDDT
-			 , CASE WHEN NOW() BETWEEN CP.DOWN_STDT AND CP.DOWN_EDDT THEN 'Y'
-					ELSE 'N' END AS downCanGb
 		FROM   TB_COUPON CP
 		INNER  JOIN TB_RANDOM_COUPON RC
 		ON     CP.CPN_ID = RC.CPN_ID

+ 54 - 57
src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml

@@ -66,6 +66,7 @@
 		 INNER JOIN TB_ORDER_DETAIL_ITEM ODI
 		    ON OD.ORD_NO = ODI.ORD_NO
 		   AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+		   AND ODI.ORD_DTL_STAT NOT IN ('G013_11', 'G013_25', 'G013_97')
 		 INNER JOIN TB_GOODS G
 		    ON OD.GOODS_CD = G.GOODS_CD
 		 INNER JOIN TB_BRAND B
@@ -92,17 +93,9 @@
 			<if test="ordNo != null and ordNo != ''">
 		   AND O.ORD_NO = #{ordNo}
 			</if>
-			<choose>
-				<when test="stDate != null and stDate != '' and edDate != null and edDate != ''">
-		   AND O.ORD_DT BETWEEN DATE_FORMAT(CONCAT(#{stDate}, ' 000000'), '%Y-%m-%d %H%i%S') AND DATE_FORMAT(CONCAT(#{edDate}, ' 235959'), '%Y-%m-%d %H%i%S')
-				</when>
-				<otherwise>
-		   AND O.ORD_DT >= DATE_FORMAT(LAST_DAY(NOW() - INTERVAL 3 MONTH) + INTERVAL 1 DAY, '%Y-%m-%d')
-				</otherwise>
-			</choose>
-			<if test="ordDtlNoArr != null">
-		   AND OD.ORD_DTL_NO IN
-				<foreach collection="ordDtlNoArr" item="item" index="index"  open="(" close=")" separator=",">
+			<if test="ordNoList != null">
+		   AND O.ORD_NO IN
+				<foreach collection="ordNoList" item="item" index="index"  open="(" close=")" separator=",">
 					#{item}
 				</foreach>
 			</if>
@@ -111,65 +104,64 @@
 		 ORDER BY OD.SUPPLY_COMP_CD
 				, OD.DELV_FEE_CD
 				, OD.ORD_NO DESC
+		        , OD.GIFT_PACK_YN DESC
 				, G.SELF_GOODS_YN DESC
 				, OD.SHOT_DELV_YN DESC
 				, OD.ORD_DTL_STAT
+				, R.REVIEW_SQ
 	</select>
 
-	<!-- 마이페이지 주문상태 별 주문수량 조회 -->
-	<select id="getOrderStatCount" parameterType="Order" resultType="int">
+	<!-- 마이페이지 주문 상태 별 수량 조회 -->
+	<select id="getOrderStatCount" parameterType="Order" resultType="Order">
 		/* TscOrder.getOrderStatCount */
-		SELECT COUNT(*) CNT
-		  FROM TB_ORDER O
-		 INNER JOIN TB_ORDER_DETAIL OD
-		    ON O.ORD_NO = OD.ORD_NO
-		<where>
-			<choose>
-				<when test='custNo != null and custNo != ""'>
-		   AND O.CUST_NO  =  #{custNo}
-				</when>
-				<otherwise>
-		   AND O.ORD_NO = #{ordNo}
-		   AND O.ORD_NM = #{orderNm}
-				</otherwise>
-			</choose>
-		</where>
-		<if test="ordDtlStat == 'G013_60'">
-		   AND O.ORD_DT >= DATE_FORMAT(CURRENT_DATE - INTERVAL 1 WEEK, '%Y-%m-%d')
-		</if>
-		   AND OD.ORD_DTL_STAT = #{ordDtlStat}
-		   AND O.DISP_YN = 'Y'
-	</select>
-
-	<!-- 마이페이지 주문변경상태 별 주문수량 조회 -->
-	<select id="getOrderChangeStatCount" parameterType="Order" resultType="int">
-		/* TscOrder.getOrderChangeStatCount */
-		SELECT COUNT(*) CNT
-		  FROM TB_ORDER_CHANGE_DETAIL OCD
-		 INNER JOIN TB_ORDER_DETAIL OD
-		    ON OCD.ORD_DTL_NO = OD.ORD_DTL_NO
-		 INNER JOIN TB_ORDER O
-		    ON O.ORD_NO = OD.ORD_NO
+		SELECT SUM(Z.ORDER_RECEIPT)                          AS ORDER_RECEIPT_COUNT
+		     , SUM(Z.PAYMENT_COMPLETE)                       AS PAYMENT_COMPLETE_COUNT
+		     , SUM(Z.GOODS_PREPARE)                          AS GOODS_PREPARE_COUNT
+		     , SUM(Z.SHIP_PREPARE)                           AS SHIP_PREPARE_COUNT
+		     , SUM(Z.SHIPPING)                               AS SHIPPING_COUNT
+		     , SUM(Z.SHIP_COMPLETE)                          AS SHIP_COMPLETE_COUNT
+		     , SUM(Z.CANCEL_COUNT)                           AS CANCEL_COUNT
+		     , SUM(Z.EXCHANGE_COUNT + Z.EXCHANGE_WAIT_COUNT) AS EXCHANGE_COUNT
+		     , SUM(Z.RETURN_COUNT)                           AS RETURN_COUNT
+		  FROM (SELECT IFNULL(CASE OD.ORD_DTL_STAT WHEN 'G013_00' THEN 1
+							   END, 0) AS ORDER_RECEIPT
+					 , IFNULL(CASE OD.ORD_DTL_STAT WHEN 'G013_20' THEN 1
+							   END, 0) AS PAYMENT_COMPLETE
+					 , IFNULL(CASE OD.ORD_DTL_STAT WHEN 'G013_30' THEN 1
+							   END, 0) AS GOODS_PREPARE
+					 , IFNULL(CASE OD.ORD_DTL_STAT WHEN 'G013_40' THEN 1
+							   END, 0) AS SHIP_PREPARE
+					 , IFNULL(CASE OD.ORD_DTL_STAT WHEN 'G013_50' THEN 1
+							   END, 0) AS SHIPPING
+					 , IFNULL(CASE WHEN OD.ORD_DTL_STAT = 'G013_60'
+								    AND O.ORD_DT >= DATE_FORMAT(CURRENT_DATE - INTERVAL 1 WEEK, '%Y-%m-%d') THEN 1
+							   END, 0) AS SHIP_COMPLETE
+					 , IFNULL(CASE OCD.CHG_STAT WHEN 'G685_20' THEN 1
+							   END, 0) AS CANCEL_COUNT
+					 , IFNULL(CASE OCD.CHG_STAT WHEN 'G685_30' THEN 1
+							   END, 0) AS EXCHANGE_COUNT
+					 , IFNULL(CASE OCD.CHG_STAT WHEN 'G685_33' THEN 1
+							   END, 0) AS EXCHANGE_WAIT_COUNT
+					 , IFNULL(CASE OCD.CHG_STAT WHEN 'G685_40' THEN 1
+							   END, 0) AS RETURN_COUNT
+				  FROM TB_ORDER O
+				 INNER JOIN TB_ORDER_DETAIL OD
+					ON O.ORD_NO = OD.ORD_NO
+				  LEFT OUTER JOIN TB_ORDER_CHANGE_DETAIL OCD
+					ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
 		<where>
 			<choose>
 				<when test='custNo != null and custNo != ""'>
-		   AND O.CUST_NO  =  #{custNo}
+				   AND O.CUST_NO  =  #{custNo}
 				</when>
 				<otherwise>
-		   AND O.ORD_NO = #{ordNo}
-		   AND O.ORD_NM = #{orderNm}
+				   AND O.ORD_NO = #{ordNo}
+				   AND O.ORD_NM = #{orderNm}
 				</otherwise>
 			</choose>
 		</where>
-		<choose>
-			<when test="chgStat == 'G685_30'">
-		   AND OCD.CHG_STAT IN (#{chgStat}, 'G685_33')
-			</when>
-			<otherwise>
-		   AND OCD.CHG_STAT = #{chgStat}
-			</otherwise>
-		</choose>
-		   AND O.DISP_YN = 'Y'
+				   AND O.DISP_YN = 'Y'
+		) AS Z
 	</select>
 
 	<!-- 마이페이지 주문목록 페이징 처리 주문번호 조회 -->
@@ -181,6 +173,9 @@
 		  FROM TB_ORDER
 		 WHERE CUST_NO = #{custNo}
 		   AND DISP_YN = 'Y'
+		<if test="stDate != null and stDate != '' and edDate != null and edDate != ''">
+		   AND ORD_DT BETWEEN CONCAT(#{stDate}, ' 00:00:00') AND CONCAT(#{edDate}, ' 23:59:59')
+		</if>
 		<include refid="selectForPagingFooter"/>
 	</select>
 
@@ -233,7 +228,9 @@
 		     , CARD_KIND
 		     , CARD_BANK
 		     , CARD_NM
-		     , CARD_MIPS
+		     , CASE CARD_MIPS WHEN 0 THEN '일시불'
+							  ELSE CONCAT(CARD_MIPS, '개월')
+				END									AS CARD_MIPS
 		     , CARD_PCABLE_YN
 		     , VA_NO
 		     , VA_NM

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

@@ -53,7 +53,15 @@
                     <tbody>
                     <th:block th:each="cart, status : ${wmsCartList}">
                     <tr>
-                        <td>
+                        <input type="hidden" name="applyQtySectionYn" th:value="${cart.applyQtySectionYn}" />
+                        <input type="hidden" name="applyAmtSectionYn" th:value="${cart.applyAmtSectionYn}" />
+                        <input type="hidden" name="qtyTmtbSq" th:value="${cart.qtyTmtbSq}" />
+                        <input type="hidden" name="qtyTmtbNm" th:value="${cart.qtyTmtbNm}" />
+                        <input type="hidden" name="amtTmtbSq" th:value="${cart.amtTmtbSq}" />
+                        <input type="hidden" name="amtTmtbNm" th:value="${cart.amtTmtbNm}" />
+                        <input type="hidden" name="currPrice" th:value="${cart.currPrice}" />
+
+                        <td style="border-left:none;">
                             <!-- 주문가능 상품 -->
                             <div class="info_item" th:classappend="${cart.soldoutYn.equals('Y')} ? unable"> <!-- 주문불가시 class="unable" 추가 / 인풋, 버튼 disable 처리 -->
                                 <div class="form_box">
@@ -82,7 +90,7 @@
                                         <span class="count">수량:<em th:text="${cart.itemQtyArr[index.index]} * ${cart.goodsQty}"></em>개</span>
                                     </p>
                                     <p class="od_modify">
-                                        <button type="button"><span>옵션/수량변경</span></button>
+                                        <button type="button" class="btn_opt_pop"><span>옵션/수량변경</span></button>
                                     </p>
                                     <!-- 다다익선 적용 -->
                                     <div class="od_moresale" th:if="${cart.applyQtySectionYn == 'Y' or cart.applyAmtSectionYn == 'Y'}">
@@ -103,8 +111,8 @@
                                         </a>
                                         <div class="li_moresale">
                                             <ul>
-                                                <li th:if="${cart.applyQtySectionYn == 'N'}" th:text="${cart.qtyTmtbNm}"><a href="">대상 상품 보기</a></li>
-                                                <li th:if="${cart.applyAmtSectionYn == 'N'}" th:text="${cart.amtTmtbNm}"><a href="">대상 상품 보기</a></li>
+                                                <li th:if="${cart.applyQtySectionYn == 'N'}" th:inline="text">[[${cart.qtyTmtbNm}]]<a href=''>대상 상품 보기</a></li>
+                                                <li th:if="${cart.applyAmtSectionYn == 'N'}" th:inline="text">[[${cart.amtTmtbNm}]]<a href=''>대상 상품 보기</a></li>
                                             </ul>
                                         </div>
                                     </div>
@@ -172,7 +180,14 @@
                     <tbody>
                     <th:block th:each="cart, status : ${delvCartList}">
                     <tr>
-                        <td>
+                        <input type="hidden" name="applyQtySectionYn" th:value="${cart.applyQtySectionYn}" />
+                        <input type="hidden" name="applyAmtSectionYn" th:value="${cart.applyAmtSectionYn}" />
+                        <input type="hidden" name="qtyTmtbSq" th:value="${cart.qtyTmtbSq}" />
+                        <input type="hidden" name="qtyTmtbNm" th:value="${cart.qtyTmtbNm}" />
+                        <input type="hidden" name="amtTmtbSq" th:value="${cart.amtTmtbSq}" />
+                        <input type="hidden" name="amtTmtbNm" th:value="${cart.amtTmtbNm}" />
+                        <input type="hidden" name="currPrice" th:value="${cart.currPrice}" />
+                        <td style="border-left:none;">
                             <div class="info_item">
                                 <div class="form_box">
                                     <p class="form_field">
@@ -199,7 +214,7 @@
                                         <span class="count">수량:<em th:text="${cart.itemQtyArr[index.index]} * ${cart.goodsQty}"></em>개</span>
                                     </p>
                                     <p class="od_modify">
-                                        <button type="button" id="btn_opt_pop"><span>옵션/수량변경</span></button>
+                                        <button type="button" class="btn_opt_pop"><span>옵션/수량변경</span></button>
                                     </p>
                                     <!-- 다다익선 적용 -->
                                     <div class="od_moresale" th:if="${cart.applyQtySectionYn == 'Y' or cart.applyAmtSectionYn == 'Y'}">
@@ -322,22 +337,21 @@
         <div class="coupon_box">
             <div class="coupon">
                 <div>
-                    <p class="cp_name">
-                        TBJ 시즌오프 20% 할인쿠폰
-                    </p>
+                    <p class="cp_name"></p>
                     <p class="cp_cont">
-                        <span><em>12,399,900</em>원</span>
-                        <span><em>40%</em></span>
+                        <!--<span><em>12,399,900</em>원</span>
+                        <span><em>40%</em></span>-->
+                        <span class="cp_dc_val"></span>
                     </p>
                     <p class="cp_condition">
-                        500,000원 이상 구매 시 최대 50,000원 할인
-                        <span><em class="tag">99장 보유</em></span>
+                        <!--500,000원 이상 구매 시 최대 50,000원 할인
+                        <span><em class="tag">99장 보유</em></span>-->
                     </p>
                 </div>
                 <p class="cp_date">
-                    <span>2021.01.01</span>&nbsp;~&nbsp;<span>2021.12.30</span>
+                    <span class="availStdt"></span>&nbsp;~&nbsp;<span class="availEddt"></span>
                 </p>
-                <button type="button" class="btn_close_code">
+                <button type="button" class="btn_close_code" onClick="cancelCartCpn()">
                     <span>
                         <i class="ico ico_close1"></i>
                         <em class="sr-only">닫기</em>
@@ -352,83 +366,183 @@
         </div>
     </div>
     <div class="area_saleitem">
-        <h4>다다익선 할인 대상이 있습니다.</h4>
-        <div class="more_sale">
-            <div class="item_gd">
-                <figure>
-                    <a href="">
-                        <span class="thumb"><img src="/images/pc/thumb/tmp_odSide2.jpg" alt=""></span>
-                    </a>
-                    <figcaption>
-                        <a href="">
-                            <div class="brand">CURLYSUE 컬리수</div>
-                            <div class="name">[★2020 겨울신상★] 리버시블 경량점퍼 CPW0XQJM51 [겨울] 리버시블 경량점퍼 CPW0XQJM51 [겨울]</div>
-                            <div class="price">
-                                <del>7,000,000</del>
-                                <span class="selling_price">1,000,000</span>
-                                <span class="discount">30%</span>
-                            </div>
-                        </a>
-                    </figcaption>
-                </figure>
-            </div>
-            <div class="item_gd">
-                <figure>
-                    <a href="">
-                        <span class="thumb"><img src="/images/pc/thumb/tmp_odSide2.jpg" alt=""></span>
-                    </a>
-                    <figcaption>
-                        <a href="">
-                            <div class="brand">CURLYSUE 컬리수</div>
-                            <div class="name">[★2020 겨울신상★] 리버시블 경량점퍼 CPW0XQJM51 [겨울] 리버시블 경량점퍼 CPW0XQJM51 [겨울]</div>
-                            <div class="price">
-                                <span class="selling_price">1,000,000</span>
-                            </div>
-                        </a>
-                    </figcaption>
-                </figure>
-            </div>
-            <div class="txt">
-                <a href="">
-                    <i class="ico ico_saletag"></i>
-                    <span>TBJ 브랜드 구매시 30,000원 할인</span>
-                </a>
-            </div>
-        </div>
-        <div class="more_sale">
-            <div class="txt">
-                <a href="">
-                    <i class="ico ico_saletag"></i>
-                    <span>300,000이상 구매시 30% 할인</span>
-                    <span>500,000이상 구매시 추가 10% 할인</span>
-                </a>
-            </div>
-        </div>
+
     </div>
 </div>
 <div class="clear"></div>
 <!-- // CONT-BODY -->
 </form>
 
-<script type="text/javascript">
+<script th:inline="javascript">
     let sumRealPayAmt = [[${order.sumRealPayAmt}]];
     let totDcAmt = [[${order.totDcAmt}]];
 
+    function NotApplyTmtbCartList() {
+        let tmtbSq = 0;
+        let tmtbNm = "";
+        let goodsList = {
+            brandNm : "",
+            goodsNm : "",
+            currPrice : 0,
+            imgPath : ""
+        }
+    }
+
     $(document).ready(function() {
-        $("#sumRealPayAmt").text(Number(sumRealPayAmt).toLocaleString());
-        $("#totDcAmt").text(Number(totDcAmt).toLocaleString());
-        //$("#cartListForm").submit();
-       /* $.ajax( {
-            type: "POST",
-            url : '/cart/goods/list',
-            dataType : 'html',
-            success : function(result) {
-                if (result != null) {
-                    $("#cartAjaxList").html(result);
+        $(".area_salecoupon .coupon_box").hide();
+        /* TODO 로그인 안했으면 .area_salecoupon (할인코드 입력 부 및 쿠폰정보영역) hide 시킬것 */
+
+        // 다다익선 할인 대상(미적용) 리스트
+        notApplyTmtbAreaList();
+
+        /*$("#sumRealPayAmt").text(Number(sumRealPayAmt).toLocaleString());
+        $("#totDcAmt").text(Number(totDcAmt).toLocaleString());*/
+
+    });
+
+    function notApplyTmtbAreaList() {
+        let notApplyQtyTmtbList = new Array();
+        let notApplyAmtTmtbList = new Array();
+
+        // 수량 다다익선 조회
+        $("#cartListForm input[name=qtyTmtbSq]").each(function (index) {
+            if($(this).val() != "0" && $(this).parent().find("input[name=applyQtySectionYn]").val() != "Y") {
+                let obj = new Object();
+                obj.tmtbSq = $(this).val();
+                obj.tmtbNm = $(this).parent().find("input[name=qtyTmtbNm]").val();
+                obj.currPrice = $(this).parent().find("input[name=currPrice]").val();
+                obj.goodsNm = $(this).parent().find(".info_box").find(".name").text();
+                obj.brandNm = $(this).parent().find(".info_box").find(".brand").text();
+                obj.imgPath = $(this).parent().find(".info_item").find(".thumb_box img").attr("src");
+
+                notApplyQtyTmtbList.push(obj);
+            }
+
+            if($(this).parent().find("input[name=applyAmtSectionYn]").val() == "N") {       // 다다익선 금액은 기본상품만 가져오면됨 (N은 기본상품에 걸려있음)
+                let obj = new Object();
+                obj.tmtbSq = $(this).parent().find("input[name=amtTmtbSq]").val();
+                obj.tmtbNm = $(this).parent().find("input[name=amtTmtbNm]").val();
+
+                notApplyAmtTmtbList.push(obj);
+            }
+        });
+
+        // 수량 다다익선 정렬
+        var t = new Object();
+        for (let i = 0; i < notApplyQtyTmtbList.length; i++) {
+            for (let j = 0; j < notApplyQtyTmtbList.length - i - 1; j++) {
+                if (notApplyQtyTmtbList[j].tmtbSq > notApplyQtyTmtbList[j + 1].tmtbSq) {
+                    t = notApplyQtyTmtbList[j];
+                    notApplyQtyTmtbList[j] = notApplyQtyTmtbList[j + 1];
+                    notApplyQtyTmtbList[j + 1] = t;
                 }
             }
-        });*/
-    });
+        }
+
+        // 정렬 후 같은 다다익선 상품은 한 배열로 묶음
+        let tmtbQtyList = new Array();
+        for (let i = 0; i < notApplyQtyTmtbList.length; i++) {
+            let goods = notApplyQtyTmtbList[i];
+            let tmtbInfo = new Object();
+            let chk = false;
+            for (let j = 0; j < tmtbQtyList.length; j++) {
+                let tmtb = tmtbQtyList[j];
+                if (goods.tmtbSq == tmtb.tmtbSq) {
+                    tmtbInfo = tmtbQtyList[j];
+                    chk = true;
+                }
+            }
+
+            // 현재 상품 정보
+            let goodsInfo = new Object();
+            goodsInfo.brandNm = goods.brandNm;
+            goodsInfo.goodsNm = goods.goodsNm;
+            goodsInfo.imgPath = goods.imgPath;
+            goodsInfo.currPrice = goods.currPrice;
+
+            // 현재 상품 정보 다다익선 정보에 세팅
+            if (chk) {
+                tmtbInfo.goodsList.push(goodsInfo);
+            } else {
+                let obj = new Object();
+                obj.tmtbSq = goods.tmtbSq;
+                obj.tmtbNm = goods.tmtbNm;
+                obj.goodsList = new Array();
+                obj.goodsList.push(goodsInfo);
+                tmtbQtyList.push(obj);
+            }
+        }
+
+        // 수량 다다익선 HTML 작성
+        let tmtbHtml = "<h4>다다익선 할인 대상이 있습니다.</h4>";
+        for(let i = 0 ; i < tmtbQtyList.length ; i++) {
+            let tmtb = tmtbQtyList[i];
+            tmtbHtml += '<div class="more_sale qtyNotApplyTmtbList">';
+            for(let j = 0 ; j < tmtb.goodsList.length ; j++) {
+                let goods = tmtb.goodsList[j];
+                tmtbHtml += '<div class="item_gd">\n' +
+                        '                <figure>\n' +
+                        '                    <a href="">\n' +
+                        '                        <span class="thumb"><img src="';
+                tmtbHtml += goods.imgPath;
+                tmtbHtml += '" alt=""></span>\n' +
+                        '                    </a>\n' +
+                        '                    <figcaption>\n' +
+                        '                        <a href="">\n' +
+                        '                            <div class="brand">';
+                tmtbHtml += goods.brandNm;
+                tmtbHtml += '</div>\n' +
+                        '                            <div class="name">';
+                tmtbHtml += goods.goodsNm;
+                tmtbHtml += '</div>\n' +
+                        '                            <div class="price">\n' +
+                        '                                <span class="selling_price">';
+                tmtbHtml += Number(goods.currPrice).toLocaleString();
+                tmtbHtml += '</span>\n' +
+                        '                            </div>\n' +
+                        '                        </a>\n' +
+                        '                    </figcaption>\n' +
+                        '                </figure>\n' +
+                        '            </div>';
+            }
+
+            tmtbHtml += '<div class="txt">\n' +
+                    '                <a href="">\n' +
+                    '                    <i class="ico ico_saletag"></i>\n' +
+                    '                    <input type="hidden" name="tmtbSq" value="' + tmtb.tmtbSq + '" />' +
+                    '                    <span>\n';
+            tmtbHtml += tmtb.tmtbNm;
+            tmtbHtml += '</span>\n' +
+                    '                </a>\n' +
+                    '            </div>\n' +
+                    '        </div>';
+        }
+
+        // 금액 다다익선 정보 HTML 작성
+        for(let i = 0 ; i < notApplyAmtTmtbList.length ; i++) {
+            let tmtb = notApplyAmtTmtbList[i];
+            tmtbHtml += '<div class="more_sale amtNotApplyTmtbList">\n' +
+                    '            <div class="txt">\n' +
+                    '                <a href="">\n' +
+                    '                    <i class="ico ico_saletag"></i>\n' +
+                    '                    <input type="hidden" name="tmtbSq" value="' + tmtb.tmtbSq + '" />' +
+                    '                    <span>';
+            tmtbHtml += tmtb.tmtbNm;
+            tmtbHtml += '</span>\n' +
+                    '                </a>\n' +
+                    '            </div>\n' +
+                    '        </div>';
+        }
+
+        $(".area_saleitem").html(tmtbHtml);
+
+    }
+
+    function cancelCartCpn() {
+        $("#sumRealPayAmt").text(Number(sumRealPayAmt).toLocaleString());
+        $("#totDcAmt").text(Number(totDcAmt).toLocaleString());
+        $(".area_salecoupon .coupon_box").hide();
+    }
 
     function serialCpnApply() {
         let testArr = [];
@@ -450,11 +564,73 @@
             dataType : 'json',
             data : jsonData,
             success : function(result) {
-                alert(result.serialCpnInfo.result + " / " + result.serialCpnInfo.dcAmt);
+                $(".area_salecoupon .coupon_box").show();
+
+                // 합계 금액
                 $("#sumRealPayAmt").text(Number(sumRealPayAmt - result.serialCpnInfo.dcAmt).toLocaleString());
                 $("#totDcAmt").text(Number(totDcAmt - result.serialCpnInfo.dcAmt).toLocaleString());
+
+                // 쿠폰 정보
+                $(".area_salecoupon .cp_name").text(result.serialCpnInfo.cpnNm);
+                $(".area_salecoupon .cp_condition").html(result.serialCpnInfo.cpnDesc + "<span><em class='tag'>1장 보유</em></span>");
+                $(".area_salecoupon .availStdt").text(result.serialCpnInfo.availStdt);
+                $(".area_salecoupon .availEddt").text(result.serialCpnInfo.availEddt);
+                if(result.serialCpnInfo.dcWay == "G240_10") {
+                    $(".area_salecoupon .cp_dc_val").html( "<em>" + Number(result.serialCpnInfo.dcVal).toLocaleString() + "</em> 원");
+                } else if (result.serialCpnInfo.dcWay == "G240_11") {
+                    $(".area_salecoupon .cp_dc_val").html( "<em>" + result.serialCpnInfo.dcVal + "%</em>");
+                }
             }
         });
     };
+
+    //다다익선 적용내역 보기
+    $(document).on('click','.shopping_bag .part_deliver .btn_moresale',function(e){
+        $(this).toggleClass('active');
+        $(this).parents('.od_moresale').find('.li_moresale').toggle();
+        return false;
+    });
+
+    //관심상품 등록
+    $(document).on('click','.shopping_bag .part_deliver .btn_favorite',function(e){
+        $(this).toggleClass('active');
+        return false;
+    });
+
+    //쿠폰사용안내 팝업열기
+    $(document).on('click','#btn_cpinfo_pop',function(e){
+        $("#cpinfoPop").modal("show");
+        return false;
+    });
+
+    //옵션변경 팝업열기
+    $(document).on('click','.btn_opt_pop',function(e){
+        $("#optModifyPop").modal("show");
+        return false;
+    });
+
+    //상품옵션변경 팝업 > 수량조절
+    $(document).on('click','.opt_modify_pop .number_count .minus',function(e){
+        var $input = $(this).parent().find('input');
+        var count = parseInt($input.val()) - 1;
+        count = count < 1 ? 1 : count;
+        $input.val(count);
+        $input.change();
+        return false;
+    }).on('click','.opt_modify_pop .number_count .plus',function(e){
+        var $input = $(this).parent().find('input');
+        $input.val(parseInt($input.val()) + 1);
+        $input.change();
+        return false;
+    });
+
+    //상품옵션변경 팝업 > 컬러선택 표기
+    $(document).on('click','.opt_modify_pop .opt_color ul li a',function(e){
+        $(this).parents('.opt_color').find('li a').removeClass('on');
+        $(this).addClass('on');
+        var optColor = $('.opt_modify_pop .opt_color ul li a.on img').attr('alt');
+        $('.opt_modify_pop .opt_color .opt_header .color').text(optColor);
+        return false;
+    });
 </script>
 </html>

+ 15 - 19
src/main/webapp/WEB-INF/views/web/cart/cartListFormWeb.html

@@ -409,6 +409,9 @@
 </div>
 <!-- //쿠폰사용안내 팝업 -->
 
+<script src="/ux/pc/js/swiper.min.js"></script>
+<link rel="stylesheet" type="text/css" href="/ux/pc/css/swiper.min.css" />
+
 <script type="text/javascript">
     /* xodud1202 수정 */
 
@@ -437,25 +440,18 @@
 
 
     $(function(){
-        // 추천상품 슬라이드
-        $('.od_recommend .item_slide').slick({
-            dots: true,
-            infinite: true,
-            speed: 300,
-            slidesToShow: 5,
-            slidesToScroll: 5,
-            adaptiveHeight: true
-        });
-
-        $('.part_dlvr').on('click','.btn_moresale',function(e){
-            //다다익선 적용내역 보기
-            e.preventDefault();
-            $(this).toggleClass('active');
-            $(this).parents('.od_moresale').find('.li_moresale').toggle();
-        }).on('click','.btn_favorite',function(e){
-            //관심상품 등록
-            e.preventDefault();
-            $(this).toggleClass('active');
+        //추천상품 슬라이드
+        var rcmdItemSwiper = new Swiper('.od_recommend .swiper-container', {
+            slidesPerView: 5,
+            spaceBetween: 0,
+            navigation: {
+                nextEl: '.od_recommend .swiper-button-next',
+                prevEl: '.od_recommend .swiper-button-prev',
+            },
+            pagination: {
+                el: '.od_recommend .swiper-pagination',
+                clickable: true,
+            },
         });
     });
 </script>

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

@@ -45,14 +45,6 @@
 					</div>
 					<div class="lnb_list">
 						<ul id="mypageLnbList">
-							<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_ORDER_LIST);">주문확인/배송조회</a></li>
-							<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_CRS_LIST);">취소/반품/환불내역</a></li>
-							<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_RESTOCK);">재입고 알림 내역</a></li>
-							<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_REVIEW);">리뷰</a></li>
-							<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_DELIVERY_ADDR);">배송지 관리</a></li>
-							<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_WISHLIST);">위시리스트</a></li>
-							<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_CUSTOMER);">내정보 관리</a></li>
-							<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_SECEDE);">회원 탈퇴</a></li>
 						</ul>
 					</div>
 				</div>
@@ -77,14 +69,17 @@
 /*<![CDATA[*/
 	var fnSetMypageLnbList = function(lnbLvl) {
 		let tag = '';
-		tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_ORDER_LIST);"' + (lnbLvl == 1 ? ' class="on"' : '') + '>주문확인/배송조회</a></li>\n';
-		tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_CRS_LIST);"' + (lnbLvl == 2 ? ' class="on"' : '') + '>취소/반품/환불내역</a></li>\n';
-		tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_RESTOCK);"' + (lnbLvl == 3 ? ' class="on"' : '') + '>재입고 알림 내역</a></li>\n';
-		tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_REVIEW);"' + (lnbLvl == 4 ? ' class="on"' : '') + '>리뷰</a></li>\n';
-		tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_DELIVERY_ADDR);"' + (lnbLvl == 5 ? ' class="on"' : '') + '>배송지 관리</a></li>\n';
-		tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_WISHLIST);"' + (lnbLvl == 6 ? ' class="on"' : '') + '>위시리스트</a></li>\n';
-		tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_CUSTOMER);"' + (lnbLvl == 7 ? ' class="on"' : '') + '>내정보 관리</a></li>\n';
-		tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_SECEDE);"' + (lnbLvl == 8 ? ' class="on"' : '') + '>회원 탈퇴</a></li>\n';
+		tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);"' + (lnbLvl == 1 ? ' class="on"' : '') + '>주문확인/배송조회</a></li>\n';
+		tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_CRS_LIST);"' + (lnbLvl == 2 ? ' class="on"' : '') + '>취소/반품/환불내역</a></li>\n';
+		tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_RESTOCK);"' + (lnbLvl == 3 ? ' class="on"' : '') + '>재입고 알림 내역</a></li>\n';
+		tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_COUPON);"' + (lnbLvl == 4 ? ' class="on"' : '') + '>쿠폰</a></li>\n';
+		tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_POINT);"' + (lnbLvl == 5 ? ' class="on"' : '') + '>STYLE24 포인트</a></li>\n';
+		tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_GIFTCARD);"' + (lnbLvl == 6 ? ' class="on"' : '') + '>상품권</a></li>\n';
+		tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_REVIEW);"' + (lnbLvl == 7 ? ' class="on"' : '') + '>리뷰</a></li>\n';
+		tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_DELIVERY_ADDR);"' + (lnbLvl == 8 ? ' class="on"' : '') + '>배송지 관리</a></li>\n';
+		tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_WISHLIST);"' + (lnbLvl == 9 ? ' class="on"' : '') + '>위시리스트</a></li>\n';
+		tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_CUSTOMER);"' + (lnbLvl == 10 ? ' class="on"' : '') + '>내정보 관리</a></li>\n';
+		tag += '<li><a href="javascript:void(0);" onClick="cfnGoToPage(_PAGE_MYPAGE_SECEDE);"' + (lnbLvl == 11 ? ' class="on"' : '') + '>회원 탈퇴</a></li>\n';
 		tag += '</ul>';
 		$('#mypageLnbList').html(tag);
 	}

+ 141 - 48
src/main/webapp/WEB-INF/views/web/mypage/MypageOrderDetailFormWeb.html

@@ -28,25 +28,26 @@
 			<button type="button" class="btn btn_default od_del_btn" onclick="fnDeleteOrder()"><span>주문 내역 삭제</span></button>
 		</div>
 		<div class="sec_body">
-			<div class="order_list">
+			<div class="order_list" id="orderList">
 				<section class="order_row">
 					<th:block th:if="${orderList}" th:each="oneData, status : ${orderList}">
 						<div class="part_deliver">
-							
 							<div class="tbl_tit">
 								<!-- 주문일/선물일 설정 -->
 								<span class="start_t" th:unless="${oneData.giftPackYn == 'Y'}">주문일</span>
 								<span class="gift_t" th:if="${oneData.giftPackYn == 'Y'}">선물일</span>
 								<!-- //주문일/선물일 설정 -->
+
 								<span class="order_date" th:text="${oneData.ordDt}"></span>
-								<span class="order_label01" th:if="${oneData.selfGoodsYn == 'N'}">업체직배송</span>
-								<span class="order_label01" th:if="${oneData.shotDelvYn == 'N' and oneData.selfGoodsYn == 'Y'}">STYLE24 일반배송</span>
+
+								<!-- 배송구분 설정 -->
 								<span class="order_label02" th:if="${oneData.shotDelvYn == 'Y'}">총알배송</span>
-								<a href="" class="detail_btn">주문상세보기</a>
+								<span class="order_label01" th:if="${oneData.shotDelvYn == 'N' and oneData.selfGoodsYn == 'Y'}">STYLE24 일반배송</span>
+								<span class="order_label01" th:if="${oneData.selfGoodsYn == 'N'}">업체직배송</span>
+								<!-- //배송구분 설정 -->
+<!--								<a href="javascript:void(0)" class="detail_btn" th:attr="ordNo=${oneData.ordNo}" onclick="fnGoToOrderDetail(this)">주문상세보기</a>-->
 							</div>
-							<th:block th:if="${oneData.orderList}" th:each="order, status : ${oneData.orderList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
-								<input type="hidden" name="ordDtlNo" th:value="${order.ordDtlNo}"/>
-								<input type="hidden" name="ordDtlStat" th:value="${order.ordDtlStat}"/>
+							<th:block th:if="${oneData.orderList}" th:each="order, status : ${oneData.orderList}">
 								<div class="tbl type2">
 									<table>
 										<colgroup>
@@ -54,66 +55,124 @@
 											<col width="180">
 										</colgroup>
 										<tbody>
+										<th:block th:if="${order.ordDtlList}" th:each="ordDtl, status : ${order.ordDtlList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+											<input type="hidden" name="ordDtlNo" th:value="${ordDtl.ordDtlNo}"/>
+											<input type="hidden" name="ordDtlStat" th:value="${ordDtl.ordDtlStat}"/>
 											<tr class="bundle_row">
 												<td>
 													<div class="info_item">
 														<div class="thumb_box">
 															<a href="">
-																<img th:src="${imageUrl + '/' + order.sysImgNm}" width="100%" alt="">
+																<img th:src="${imageUrl + '/' + ordDtl.sysImgNm}" width="100%" alt="">
 															</a>
 														</div>
 														<div class="info_box">
 															<p class="od_name">
 																<a href="">
-																	<span class="brand" th:text="${order.brandNm}"></span>
-																	<span class="name" th:text="${order.goodsNm}"></span>
+																	<span class="brand" th:text="${ordDtl.brandNm}"></span>
+																	<span class="name" th:text="${ordDtl.goodsNm}"></span>
 																</a>
 															</p>
 															<p class="od_opt">
-																<span class="option"><em th:text="${order.optCd1}"></em><em th:text="${order.optCd2}"></em></span>
-																<span class="count">수량 <em th:text="${order.ordQty}"></em>개</span>
+																<span class="option"><em th:text="${ordDtl.optCd1}"></em><em th:text="${ordDtl.optCd2}"></em></span>
+																<span class="count">수량 <em th:text="${ordDtl.ordQty}"></em>개</span>
 															</p>
 															<button type="button" class="btn btn_dark cart_btn">쇼핑백 담기</button>
 														</div>
 														<div class="info_calc">
 															<p class="price">
-																<span class="selling_price" th:text="|${#numbers.formatInteger(order.ordAmt, 1, 'COMMA')}원|"></span>
+																<span class="selling_price" th:text="|${#numbers.formatInteger(ordDtl.ordAmt, 1, 'COMMA')}원|"></span>
 															</p>
-															<p class="point"><span th:text="${#numbers.formatInteger(order.savePntAmt, 1, 'COMMA')}"></span>p</p>
+															<p class="point"><span th:text="${#numbers.formatInteger(ordDtl.savePntAmt, 1, 'COMMA')}"></span>p</p>
 														</div>
 													</div>
 												</td>
-												<td class="merge_row"> <!-- 같은 데이터 노출시 동일 영역끼리 병합 : 클래스명 merge_row 추가 -->
+												<!-- 주문 -->
+												<td class="merge_row" th:unless="${oneData.giftPackYn == 'Y'}">
 													<div class="delivery">
-														<p class="dlvr_staus" th:text="${order.ordDtlStatNm}"></p>
-														<p class="dlvr_desc" th:if="${order.delvEddt}" th:text="|${order.delvEddt}일 도착|"></p>
+														<p class="dlvr_staus" th:text="${ordDtl.ordDtlStatNm}"></p>
+														<p class="dlvr_desc" th:if="${ordDtl.delvEddt}" th:text="|${ordDtl.delvEddt}일 도착|"></p>
 													</div>
 													<div class="tbl_btn_wrap case02">
 														<button type="button" class="btn btn_default btn_sm"><span>교환</span></button>
 														<button type="button" class="btn btn_default btn_sm"><span>반품/취소</span></button>
-														<button type="button" class="btn btn_default btn_sm" th:if="${order.reviewSq == 0}"><span>리뷰작성</span></button>
+														<button type="button" class="btn btn_default btn_sm" th:if="${ordDtl.reviewSq == 0}"><span>리뷰작성</span></button>
+													</div>
+												</td>
+												<td class="merge_row" th:if="${oneData.giftPackYn == 'Y' and #strings.isEmpty(ordDtl.recipBaseAddr)}">
+													<div class="delivery">
+														<p class="dlvr_staus c_primary">주소 입력 대기</p>
+														<p class="dlvr_desc" th:text="|남은 기간 ${ordDtl.giftLimitDay}일|"></p>
+														<p class="dlvr_desc" th:text="|(${ordDtl.giftLimitDt}까지)|"></p>
+													</div>
+													<div class="tbl_btn_wrap case02">
+														<button type="button" class="btn btn_dark btn_sm"><span>SMS 재전송</span></button>
+													</div>
+												</td>
+												<td class="merge_row" th:if="${oneData.giftPackYn == 'Y' and !#strings.isEmpty(ordDtl.recipBaseAddr)}">
+													<div class="delivery">
+														<p class="dlvr_staus c_primary">선물 완료</p>
+														<p class="dlvr_desc" th:text="|(${ordDtl.giftCompleteDt})|"></p>
+													</div>
+													<div class="tbl_btn_wrap case02">
 													</div>
 												</td>
 											</tr>
+										</th:block>
 										</tbody>
 									</table>
 								</div>
-								<div class="order_confirm" th:if="${order.ordDtlStatBanner == 'Y'}">
-									<p class="cf_txt cf_desc c_primary" th:if="${order.ordDtlStat == 'G013_00' or order.ordDtlStat == 'G013_10' or order.ordDtlStat == 'G013_11'}">주문 완료 / 결제를 기다리고 있습니다.</p> <!-- button 없이 텍스트만 있을 경우 cf_desc c_primary class 추가 -->
-									<p class="cf_txt cf_desc c_primary" th:if="${order.ordDtlStat == 'G013_20' or order.ordDtlStat == 'G013_30' or order.ordDtlStat == 'G013_35'}">배송할 상품을 준비 중입니다.</p>
-									<p class="cf_txt cf_desc c_primary" th:if="${order.ordDtlStat == 'G013_40'}">상품준비가 완료되어 곧 배송될 예정입니다.</p>
-									<p class="cf_txt cf_desc c_primary" th:if="${order.ordDtlStat == 'G013_50' or order.ordDtlStat == 'G013_55'}" th:text="|${order.shipCompNm} / ${order.invoiceNo}|"></p>
-									<button type="button" class="btn btn_primary" th:if="${order.ordDtlStat == 'G013_50' or order.ordDtlStat == 'G013_55'}">배송조회</button>
-									<p class="cf_txt cf_desc c_primary" th:if="${order.ordDtlStat == 'G013_60'}" th:text="|${order.purchaseConfirmDay}일 후 자동으로 구매확정|"></p>
-									<button type="button" class="btn btn_primary" th:if="${order.ordDtlStat == 'G013_60'}" onclick="fnDecideOrder(this);">구매확정 하기</button>
-									<p class="cf_txt cf_desc c_primary" th:if="${order.ordDtlStat == 'G013_70' and order.reviewSq == 0}">리뷰를 작성하면 다른 구매자에게 도움이 될 수 있습니다.</p>
-									<button type="button" class="btn btn_primary" th:if="${order.ordDtlStat == 'G013_70' and order.reviewSq == 0}">리뷰작성</button>
-									<p class="cf_txt cf_desc c_primary" th:if="${order.ordDtlStat == 'G013_70' and order.reviewSq > 0}">주문내역 다시 구매하기 위해</p>
-									<button type="button" class="btn btn_primary" th:if="${order.ordDtlStat == 'G013_70' and order.reviewSq > 0}">장바구니 담기</button>
-								</div>
+								<th:block th:if="${order.ordDtlStatBanner == 'Y'}">
+									<!-- 주문 -->
+									<th:block th:unless="${oneData.giftPackYn == 'Y'}">
+										<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_00' or order.ordDtlStat == 'G013_10' or order.ordDtlStat == 'G013_11'}">
+											<span class="cf_txt">주문 완료 / 결제를 기다리고 있습니다.</span>
+										</div>
+										<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_20' or order.ordDtlStat == 'G013_30' or order.ordDtlStat == 'G013_35'}">
+											<span class="cf_txt">배송할 상품을 준비 중입니다.</span>
+										</div>
+										<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_40'}">
+											<span class="cf_txt">상품준비가 완료되어 곧 배송될 예정입니다.</span>
+										</div>
+										<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_50' or order.ordDtlStat == 'G013_55'}">
+											<span class="cf_txt" th:text="|${order.shipCompNm} / ${order.invoiceNo}|"></span>
+											<button type="button" class="btn btn_primary">배송조회</button>
+										</div>
+										<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_60'}">
+											<span class="cf_txt" th:text="|${order.purchaseConfirmDay}일 후 자동으로 구매확정|"></span>
+											<button type="button" class="btn btn_primary" onclick="fnDecideOrder(this);">구매확정 하기</button>
+										</div>
+										<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_70' and order.reviewSq == 0}">
+											<span class="cf_txt">리뷰를 작성하면 다른 구매자에게 도움이 될 수 있습니다.</span>
+											<button type="button" class="btn btn_primary">리뷰작성</button>
+										</div>
+										<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_70' and order.reviewSq > 0}">
+											<span class="cf_txt">주문내역 다시 구매하기 위해</span>
+											<button type="button" class="btn btn_primary">장바구니 담기</button>
+										</div>
+									</th:block>
+
+									<!-- 선물 -->
+									<th:block th:if="${oneData.giftPackYn == 'Y'}">
+										<div class="order_confirm" th:if="${#strings.isEmpty(order.recipBaseAddr) and order.giftLimitDay >= 0}">
+											<span class="cf_txt" th:text="|${order.recipNm}님이 주소를 입력하기 전입니다. (입력기한 ${order.giftLimitDt})|"></span>
+										</div>
+										<div class="order_confirm" th:unless="${#strings.isEmpty(order.recipBaseAddr)}">
+											<span class="cf_txt" th:text="|${order.recipNm}님께 선물이 발송되었습니다.|"></span>
+										</div>
+										<div class="order_confirm" th:if="${#strings.isEmpty(order.recipBaseAddr) and order.giftLimitDay < 0}">
+											<span class="cf_txt">주소입력 기한이 경과되어 선물이 취소 되었습니다.</span>
+										</div>
+									</th:block>
+								</th:block>
 							</th:block>
 						</div>
 					</th:block>
+
+					<!-- 주문 없을 때 -->
+					<th:block th:unless="${orderList}" th:each="oneData, status : ${orderList}">
+
+					</th:block>
 				</section>
 				<section class="order_row" th:if="${paymentInfo.payMeans == 'G014_20'}">
 					<div class="order_tit">
@@ -189,9 +248,10 @@
 								<td th:text="${deliveryAddrInfo.recipPhnno}"><span class="sr-only">휴대폰 번호</span></td>
 							</tr>
 							<tr>
-								<td th:text="${deliveryAddrInfo.delvMemo}">
+								<td>
 									<span class="tit c_primary">배송요청 사항</span>
-									<button type="button" class="btn_popup" id="btn_rqstModify_pop"><span>변경하기</span></button>
+									<th:block th:text="${deliveryAddrInfo.delvMemo}"></th:block>
+									<button type="button" class="btn_popup" id="btn_rqstModify_pop" onclick="fnChangeDelvMemo();"><span>변경하기</span></button>
 								</td>
 							</tr>
 							</tbody>
@@ -297,17 +357,40 @@
 											<div>
 												<dt>결제방법</dt>
 												<dd>
-													<span class="paymethod">현대카드/무이자6개월</span>
-												</dd>
-											</div>
-											<!-- 무통장 결제시 -->
-											<div th:if="${paymentInfo.payMeans == 'G014_20'}">
-												<dt>&nbsp;</dt>
-												<dd>
-													<button type="button" class="btn btn_default"><span>신용카드 전표 (현금 영수증)</span></button>
+													<!-- TODO -->
+													<!-- Style24 간편결제 처리 (STYLE24 간편결제 : STYLE24 간편결제명 / 카드사명 / 할부개월(일시불)) -->
+													<!-- 실시간계좌이체, 무통장입금 현금영수증 신청여부 추가 -->
+													<!-- 네이버페이 처리 (네이버 페이 : 네이버 페이) -->
+													<!-- 카카오페이 처리 (카카오 페이 : 카카오 페이) -->
+													<!-- PAYCO 처리 (PAYCO : PAYCO) -->
+													<span class="paymethod" th:if="${paymentInfo.payMeans == 'G014_10'}" th:text="|실시간계좌이체|"></span>
+													<span class="paymethod" th:if="${paymentInfo.payMeans == 'G014_20'}" th:text="|무통장입금|"></span>
+													<span class="paymethod" th:if="${paymentInfo.payMeans == 'G014_30'}" th:text="|${paymentInfo.cardNm}/${paymentInfo.cardMips}|"></span>
+													<span class="paymethod" th:if="${paymentInfo.payMeans == 'G014_60'}">휴대폰결제</span>
 												</dd>
 											</div>
-											<!-- //무통장 결제시 -->
+											<th:block th:if="${paymentInfo.pgGb == 'KCP'}">
+												<!-- 신용카드 결제시 -->
+												<div th:if="${paymentInfo.payMeans == 'G014_30'}">
+													<dt>&nbsp;</dt>
+													<dd>
+														<button type="button" class="btn btn_default" onclick="fnReceipt('card');"><span>신용카드 전표</span></button>
+													</dd>
+												</div>
+												<!-- //무통장 결제시 -->
+												<!-- 무통장 결제시 -->
+												<div th:if="${paymentInfo.payMeans == 'G014_10' or paymentInfo.payMeans == 'G014_20'}">
+													<dt>&nbsp;</dt>
+													<dd>
+														<button type="button" class="btn btn_default" onclick="fnReceipt('cash');"><span>현금영수증</span></button>
+													</dd>
+												</div>
+												<!-- //무통장 결제시 -->
+											</th:block>
+											<th:block th:unless="${paymentInfo.pgGb == 'KCP'}">
+												<dt></dt>
+												<dd>NPAY등의 대체결제수단으로 결제시 해당 결제 플롯폼에서 영수증 확인이 가능합니다.</dd>
+											</th:block>
 										</dl>
 									</td>
 								</tr>
@@ -348,16 +431,14 @@
 		let ordDtlNoArr = $(param).parent().parent().find('input[name=ordDtlNo]');
 		let ordDtlStatArr = $(param).parent().parent().find('input[name=ordDtlStat]');
 		
-		console.log(ordDtlNoArr);
+		console.log($(param).parent().parent().find('input[name=ordDtlNo]'));
 		let orderDecisionArr = [];
 		$.each(ordDtlNoArr, function(idx, item) {
-			console.log(item.value);
 			if (ordDtlStatArr[idx].value == 'G013_60') {
 				orderDecisionArr.push(item.value);
 			}
 		});
 
-		console.log(orderDecisionArr);
 		if (orderDecisionArr.length == 0) {
 			mcxDialog.alert('구매확정 가능한 상품이 없습니다.');
 			return false;
@@ -376,18 +457,30 @@
 				gagajf.ajaxJsonSubmit('/mypage/order/decision'
 					, jsonData
 					, function() {
-						cfnGoToPage(_PAGE_ORDER_DETAIL + ordNo);
+						cfnGoToPage(_PAGE_MYPAGE_ORDER_DETAIL + ordNo);
 					});
 			}
 		});
 	}
+	
+	// 배송메모 변경 버튼 클릭 이벤트
+	var fnChangeDelvMemo = function() {
+		// TODO
+		// 배송메모 정보 변경 처리
+	}
+	
+	// 신용카드 전표 및 현금영수증 버튼 클릭 이벤트
+	var fnReceipt = function(param) {
+		// TODO
+		// 전표 링크 팝업 처리
+	}
 
 	$(document).ready(function() {
 		// 마이페이지 LNB 설정
 		fnSetMypageLnbList(1);
 		
 		// 마이페이지 location 설정
-		fnSetMypageLocation('주문확인/배송조회', '_PAGE_ORDER_LIST', '주문상세');
+		fnSetMypageLocation('주문확인/배송조회', '_PAGE_MYPAGE_ORDER_LIST', '주문상세');
 	});
 	
 </script>

+ 70 - 176
src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListFormWeb.html

@@ -53,32 +53,32 @@
 				<ul class="clear">
 					<li>
 						<p class="or_p">주문접수</p>
-						<p class="count"><span th:text="${orderReceiptCount}">0</span></p>
+						<p class="count"><span th:text="${orderCount.orderReceiptCount}">0</span></p>
 					</li>
 					<li>
 						<p class="or_p">결제완료</p>
-						<p class="count"><span th:text="${paymentCompleteCount}">0</span></p>
+						<p class="count"><span th:text="${orderCount.paymentCompleteCount}">0</span></p>
 					</li>
 					<li>
 						<p class="or_p">상품 준비 중</p>
-						<p class="count"><span th:text="${goodsPrepareCount}">0</span></p>
+						<p class="count"><span th:text="${orderCount.goodsPrepareCount}">0</span></p>
 					</li>
 					<li>
 						<p class="or_p">배송 준비 중</p>
-						<p class="count"><span th:text="${shipPrepareCount}">0</span></p>
+						<p class="count"><span th:text="${orderCount.shipPrepareCount}">0</span></p>
 					</li>
 					<li>
 						<p class="or_p">배송 중</p>
-						<p class="count"><span th:text="${shippingCount}">0</span></p>
+						<p class="count"><span th:text="${orderCount.shippingCount}">0</span></p>
 					</li>
 					<li>
 						<p class="or_p">배송 완료</p>
-						<p class="count"><span th:text="${shipCompleteCount}">0</span></p>
+						<p class="count"><span th:text="${orderCount.shipCompleteCount}">0</span></p>
 					</li>
 				</ul>
 				<div class="order_right">
 					<p class="or_p">취소/교환/반품</p>
-					<p class="count"><span th:text="${cancelCount + returnCount + exchangeCount}">0</span></p>
+					<p class="count"><span th:text="${orderCount.cancelCount + orderCount.returnCount + orderCount.exchangeCount}">0</span></p>
 				</div>
 			</div>
 			<!-- //주문 경로 -->
@@ -89,189 +89,28 @@
 					<input type="checkbox" name="month" value="최근 1개월" id="chk01" onclick="fnSetSearchPeriod(1);">
 					<label for="chk01">최근 1개월</label>
 					<input type="checkbox" name="month" value="최근 3개월" id="chk02" onclick="fnSetSearchPeriod(3);">
-					<label for="chk02">최근 2개월</label>
+					<label for="chk02">최근 3개월</label>
 					<input type="checkbox" name="month" value="최근 6개월" id="chk03" onclick="fnSetSearchPeriod(6);">
-					<label for="chk03">최근 3개월</label>
+					<label for="chk03">최근 6개월</label>
 				</div>
 				<div class="sch_right">
 					<div class="sch_datepicker sb">
-						<input type="text" class="n_input my_datepicker" name="stDate" value="" th:placeholder="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}" id="stDate">
+						<input type="text" class="n_input my_datepicker" name="stDate" value="" id="stDate">
 					</div>
 					<div class="sch_datepicker">
-						<input type="text" class="n_input my_datepicker" name="edDate" value="" th:placeholder="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}" id="edDate">
+						<input type="text" class="n_input my_datepicker" name="edDate" value="" id="edDate">
 					</div>
-					<button type="button" class="btn btn_dark">조회</button>
+					<button type="button" class="btn btn_dark" onclick="fnSearchOrderList();">조회</button>
 				</div>
 			</div>
 			<!-- //주문조회 검색 -->
-			<div class="order_list">
-				<th:block th:if="${orderInfo}" th:each="oneData, status : ${orderInfo}">
-					<div class="part_deliver">
-						<div class="tbl_tit">
-							<!-- 주문일/선물일 설정 -->
-							<span class="start_t" th:unless="${oneData.giftPackYn == 'Y'}">주문일</span>
-							<span class="gift_t" th:if="${oneData.giftPackYn == 'Y'}">선물일</span>
-							<!-- //주문일/선물일 설정 -->
-
-							<span class="order_date" th:text="${oneData.ordDt}"></span>
-
-							<!-- 배송구분 설정 -->
-							<span class="order_method" th:if="${oneData.shotDelvYn == 'Y'}">총알배송</span>
-							<span class="order_method" th:if="${oneData.shotDelvYn == 'N' and oneData.selfGoodsYn == 'Y'}">일반배송</span>
-							<span class="order_method" th:if="${oneData.selfGoodsYn == 'N'}">업체직배송</span>
-							<!-- //배송구분 설정 -->
-							<a href="javascript:void(0)" class="detail_btn" th:attr="ordNo=${oneData.ordNo}" onclick="fnGoToOrderDetail(this)">주문상세보기</a>
-						</div>
-						<div class="tbl type2">
-							<table>
-								<colgroup>
-									<col width="840">
-									<col width="180">
-									<col width="*">
-								</colgroup>
-								<tbody>
-									<th:block th:if="${oneData.orderList}" th:each="order, status : ${oneData.orderList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
-										<tr>
-											<td class="">
-												<div class="info_item">
-													<div class="thumb_box">
-														<a href="">
-															<img th:src="${imageUrl + '/' + order.sysImgNm}" width="100%" alt="">
-														</a>
-													</div>
-													<div class="info_box">
-														<p class="od_name">
-															<a href="">
-																<span class="brand" th:text="${order.brandNm}"></span>
-																<span class="name" th:text="${order.goodsNm}"></span>
-															</a>
-														</p>
-														<p class="od_opt">
-															<span class="option">옵션:<em th:text="${order.optCd}"></em></span>
-															<span class="count">수량:<em th:text="${order.ordQty}"></em>개</span>
-														</p>
-													</div>
-													<div class="info_calc">
-														<p class="price">
-															<span class="selling_price" th:text="|${#numbers.formatInteger(order.ordAmt, 1, 'COMMA')}원|"></span>
-														</p>
-														<p class="point"><span th:text="${#numbers.formatInteger(order.savePntAmt, 1, 'COMMA')}"></span>p</p>
-													</div>
-												</div>
-											</td>
-											<td class="" th:if="${order.rowspan > 0}" th:rowspan="${order.rowspan}">
-												<div class="delivery">
-													<!-- 주문 -->
-													<th:block th:unless="${oneData.giftPackYn == 'Y'}">
-														<p class="dlvr_staus" th:text="${order.ordDtlStatNm}"></p>
-														<p class="dlvr_desc" th:if="${order.delvEddt}" th:text="|${order.delvEddt}일 도착|"></p>
-													</th:block>
-													<!-- //주문 -->
-
-													<!-- 선물 -->
-													<th:block th:if="${oneData.giftPackYn == 'Y'}">
-														<!-- 주소 입력 전 -->
-														<th:block th:if="${#strings.isEmpty(order.recipBaseAddr)}">
-															<p class="dlvr_staus c_primary">주소 입력 대기</p>
-															<p class="dlvr_desc" th:text="|남은 기간 ${order.giftLimitDay}일|"></p>
-															<p class="dlvr_desc" th:text="|(${order.giftLimitDt}까지)|"></p>
-														</th:block>
-														<!-- 주소 입력 후 -->
-														<th:block th:unless="${#strings.isEmpty(order.recipBaseAddr)}">
-															<p class="dlvr_staus c_primary">선물 완료</p>
-															<p class="dlvr_desc" th:text="|(${order.giftCompleteDt})|"></p>
-														</th:block>
-													</th:block>
-													<!-- //선물 -->
-												</div>
-											</td>
-											<td class="" th:if="${order.rowspan > 0}" th:rowspan="${order.rowspan}">
-												<div class="tbl_btn_wrap case02">
-													<ul>
-														<!-- 주문 -->
-														<th:block th:unless="${oneData.giftPackYn == 'Y'}">
-															<li><button type="button" class="btn btn_default btn_sm"><span>교환</span></button></li>
-															<li><button type="button" class="btn btn_default btn_sm"><span>반품/취소</span></button></li>
-															<li th:if="${order.reviewSq == 0}"><button type="button" class="btn btn_dark btn_sm"><span>리뷰작성</span></button></li>
-														</th:block>
-														<!-- //주문 -->
-														
-														<!-- 선물 -->
-														<th:block th:if="${oneData.giftPackYn == 'Y'}">
-															<li><button type="button" class="btn btn_dark btn_sm" th:if="${#strings.isEmpty(order.recipBaseAddr)}"><span>SMS 재전송</span></button></li>
-														</th:block>
-														<!-- //선물 -->
-													</ul>
-												</div>
-											</td>
-										</tr>
-										<th:block th:if="${order.ordDtlStatBanner == 'Y'}">
-											<!-- 주문 -->
-											<th:block th:unless="${oneData.giftPackYn == 'Y'}">
-												<tr>
-													<td colspan="4">
-														<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_00' or order.ordDtlStat == 'G013_10' or order.ordDtlStat == 'G013_11'}">
-															<span class="cf_txt">주문 완료 / 결제를 기다리고 있습니다.</span>
-														</div>
-														<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_20' or order.ordDtlStat == 'G013_30' or order.ordDtlStat == 'G013_35'}">
-															<span class="cf_txt">배송할 상품을 준비 중입니다.</span>
-														</div>
-														<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_40'}">
-															<span class="cf_txt">상품준비가 완료되어 곧 배송될 예정입니다.</span>
-														</div>
-														<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_50' or order.ordDtlStat == 'G013_55'}">
-															<span class="cf_txt" th:text="|${order.shipCompNm} / ${order.invoiceNo}|"></span>
-															<button type="button" class="btn btn_primary">배송조회</button>
-														</div>
-														<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_60'}">
-															<span class="cf_txt" th:text="|${order.purchaseConfirmDay}일 후 자동으로 구매확정|"></span>
-															<button type="button" class="btn btn_primary">구매확정 하기</button>
-														</div>
-														<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_70' and order.reviewSq == 0}">
-															<span class="cf_txt">리뷰를 작성하면 다른 구매자에게 도움이 될 수 있습니다.</span>
-															<button type="button" class="btn btn_primary">리뷰작성</button>
-														</div>
-														<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_70' and order.reviewSq > 0}">
-															<span class="cf_txt">주문내역 다시 구매하기 위해</span>
-															<button type="button" class="btn btn_primary">장바구니 담기</button>
-														</div>
-													</td>
-												</tr>
-											</th:block>
-
-											<!-- 선물 -->
-											<th:block th:if="${oneData.giftPackYn == 'Y'}">
-												<tr>
-													<td colspan="4">
-														<div class="order_confirm" th:if="${#strings.isEmpty(order.recipBaseAddr) and order.giftLimitDay >= 0}">
-															<span class="cf_txt" th:text="|${order.recipNm}님이 주소를 입력하기 전입니다. (입력기한 ${order.giftLimitDt})|"></span>
-														</div>
-														<div class="order_confirm" th:unless="${#strings.isEmpty(order.recipBaseAddr)}">
-															<span class="cf_txt" th:text="|${order.recipNm}님께 선물이 발송되었습니다.|"></span>
-														</div>
-														<div class="order_confirm" th:if="${#strings.isEmpty(order.recipBaseAddr) and order.giftLimitDay < 0}">
-															<span class="cf_txt">주소입력 기한이 경과되어 선물이 취소 되었습니다.</span>
-														</div>
-													</td>
-												</tr>
-											</th:block>
-										</th:block>
-									</th:block>
-								</tbody>
-							</table>
-						</div>
-					</div>
-				</th:block>
-
-				<!-- 주문 없을 때 -->
-				<th:block th:unless="${orderInfo}" th:each="oneData, status : ${orderInfo}">
-
-				</th:block>
+			<div class="order_list" id="orderList">
 			</div>
 		</div>
 	</div>
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
+	let customerInfo = [[${customerInfo}]];
 /*<![CDATA[*/
 	$(document).ready(function() {
 		// 마이페이지 LNB 설정
@@ -282,13 +121,21 @@
 		
 		// datepicker 설정
 		$(".my_datepicker").datepicker();
+		
+		// 주문 검색 기간 설정
+		fnSetSearchPeriod(3);
+		
+		// 주문 리스트 조회
+		fnSearchOrderList(1);
 	});
 	
+	// 주문상세보기 버튼 클릭 이벤트 처리
 	var fnGoToOrderDetail = function(param) {
 		let ordNo = $(param).attr('ordNo');
-		cfnGoToPage(_PAGE_ORDER_DETAIL + ordNo);
+		cfnGoToPage(_PAGE_MYPAGE_ORDER_DETAIL + ordNo);
 	}
 	
+	// 검색기간 버튼 클릭 이벤트 처리
 	var fnSetSearchPeriod = function(period) {
 		let date = new Date();
 		$('#edDate').val(date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + (date.getDate() + 1)).slice(-2));
@@ -296,6 +143,53 @@
 		$('#stDate').val(date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + (date.getDate() + 1)).slice(-2));
 	}
 	
+	// 주문 목록 조회
+	var fnSearchOrderList = function(pageNo) {
+		if (pageNo == null) {
+			pageNo = $('#pageNo').val();
+		}
+		let stDate = $('#stDate').val();
+		let edDate = $('#edDate').val();
+		//let ordDtlStat = $('#ordDtlStat').val();
+		
+		let data = {};
+		data.pageNo = pageNo;
+		data.stDate = stDate;
+		data.edDate = edDate;
+		data.custNo = customerInfo.custNo;
+		//data.ordDtlStat = ordDtlStat;
+		
+		let jsonData = JSON.stringify(data)
+		
+		$.ajax( {
+			type		: "POST",
+			url 		: '/mypage/order/list',
+			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) {
+				$('#orderList').html(result);
+				fnMergeRow();
+			}
+		});
+	}
+	
+	// rowspan 처리
+	var fnMergeRow = function() {
+		$(".merge_row").each(function() {
+			var txt = $(this).text();
+			var rows = $(this).parents("table").find(".merge_row:contains('" + txt + "')");
+			if (rows.length > 1) {
+				rows.eq(0).attr("rowspan", rows.length);
+				rows.not(":eq(0)").remove();
+			}
+		});
+	}
 /*]]>*/
 </script>
 

+ 165 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListWeb.html

@@ -0,0 +1,165 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : MypageOrderListWeb.html
+ * @desc    : 마이페이지 > 주문확인/배송조회 주문리스트 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.18   card007     최초 작성
+ *******************************************************************************
+ -->
+<th:block th:if="${orderList}" th:each="oneData, status : ${orderList}">
+	<input type="hidden" th:value="${orderInfo.pageNo}" id="pageNo"/>
+	<div class="part_deliver">
+		<div class="tbl_tit">
+			<!-- 주문일/선물일 설정 -->
+			<span class="start_t" th:unless="${oneData.giftPackYn == 'Y'}">주문일</span>
+			<span class="gift_t" th:if="${oneData.giftPackYn == 'Y'}">선물일</span>
+			<!-- //주문일/선물일 설정 -->
+
+			<span class="order_date" th:text="${oneData.ordDt}"></span>
+
+			<!-- 배송구분 설정 -->
+			<span class="order_label02" th:if="${oneData.shotDelvYn == 'Y'}">총알배송</span>
+			<span class="order_label01" th:if="${oneData.shotDelvYn == 'N' and oneData.selfGoodsYn == 'Y'}">STYLE24 일반배송</span>
+			<span class="order_label01" th:if="${oneData.selfGoodsYn == 'N'}">업체직배송</span>
+			<!-- //배송구분 설정 -->
+			<a href="javascript:void(0)" class="detail_btn" th:attr="ordNo=${oneData.ordNo}" onclick="fnGoToOrderDetail(this)">주문상세보기</a>
+		</div>
+		<th:block th:if="${oneData.orderList}" th:each="order, status : ${oneData.orderList}">
+			<div class="tbl type2">
+				<table>
+					<colgroup>
+						<col width="1020">
+						<col width="180">
+					</colgroup>
+					<tbody>
+						<th:block th:if="${order.ordDtlList}" th:each="ordDtl, status : ${order.ordDtlList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+						<tr class="bundle_row">
+							<td>
+								<div class="info_item">
+									<div class="thumb_box">
+										<a href="">
+											<img th:src="${imageUrl + '/' + ordDtl.sysImgNm}" width="100%" alt="">
+										</a>
+									</div>
+									<div class="info_box">
+										<p class="od_name">
+											<a href="">
+												<span class="brand" th:text="${ordDtl.brandNm}"></span>
+												<span class="name" th:text="${ordDtl.goodsNm}"></span>
+											</a>
+										</p>
+										<p class="od_opt">
+											<span class="option"><em th:text="${ordDtl.optCd1}"></em><em th:text="${ordDtl.optCd2}"></em></span>
+											<span class="count">수량 <em th:text="${ordDtl.ordQty}"></em>개</span>
+										</p>
+									</div>
+									<div class="info_calc">
+										<p class="price">
+											<span class="selling_price" th:text="|${#numbers.formatInteger(ordDtl.ordAmt, 1, 'COMMA')}원|"></span>
+										</p>
+										<p class="point"><span th:text="${#numbers.formatInteger(ordDtl.savePntAmt, 1, 'COMMA')}"></span>p</p>
+									</div>
+								</div>
+							</td>
+							<!-- 주문 -->
+							<td class="merge_row" th:unless="${oneData.giftPackYn == 'Y'}">
+								<div class="delivery">
+									<p class="dlvr_staus" th:text="${ordDtl.ordDtlStatNm}"></p>
+									<p class="dlvr_desc" th:if="${ordDtl.delvEddt}" th:text="|${ordDtl.delvEddt}일 도착|"></p>
+								</div>
+								<div class="tbl_btn_wrap case02">
+									<button type="button" class="btn btn_default btn_sm"><span>교환</span></button>
+									<button type="button" class="btn btn_default btn_sm"><span>반품/취소</span></button>
+									<button type="button" class="btn btn_default btn_sm"><span>리뷰작성</span></button>
+								</div>
+							</td>
+							<td class="merge_row" th:if="${oneData.giftPackYn == 'Y' and #strings.isEmpty(ordDtl.recipBaseAddr)}">
+								<div class="delivery">
+									<p class="dlvr_staus c_primary">주소 입력 대기</p>
+									<p class="dlvr_desc" th:text="|남은 기간 ${ordDtl.giftLimitDay}일|"></p>
+									<p class="dlvr_desc" th:text="|(${ordDtl.giftLimitDt}까지)|"></p>
+								</div>
+								<div class="tbl_btn_wrap case02">
+									<button type="button" class="btn btn_dark btn_sm"><span>SMS 재전송</span></button>
+								</div>
+							</td>
+							<td class="merge_row" th:if="${oneData.giftPackYn == 'Y' and !#strings.isEmpty(ordDtl.recipBaseAddr)}">
+								<div class="delivery">
+									<p class="dlvr_staus c_primary">선물 완료</p>
+									<p class="dlvr_desc" th:text="|(${ordDtl.giftCompleteDt})|"></p>
+								</div>
+								<div class="tbl_btn_wrap case02">
+								</div>
+							</td>
+						</tr>
+						</th:block>
+					</tbody>
+				</table>
+			</div>
+			<th:block th:if="${order.ordDtlStatBanner == 'Y'}">
+				<!-- 주문 -->
+				<th:block th:unless="${oneData.giftPackYn == 'Y'}">
+					<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_00' or order.ordDtlStat == 'G013_10' or order.ordDtlStat == 'G013_11'}">
+						<span class="cf_txt">주문 완료 / 결제를 기다리고 있습니다.</span>
+					</div>
+					<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_20' or order.ordDtlStat == 'G013_30' or order.ordDtlStat == 'G013_35'}">
+						<span class="cf_txt">배송할 상품을 준비 중입니다.</span>
+					</div>
+					<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_40'}">
+						<span class="cf_txt">상품준비가 완료되어 곧 배송될 예정입니다.</span>
+					</div>
+					<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_50' or order.ordDtlStat == 'G013_55'}">
+						<span class="cf_txt" th:text="|${order.shipCompNm} / ${order.invoiceNo}|"></span>
+						<button type="button" class="btn btn_primary">배송조회</button>
+					</div>
+					<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_60'}">
+						<span class="cf_txt" th:text="|${order.purchaseConfirmDay}일 후 자동으로 구매확정|"></span>
+						<button type="button" class="btn btn_primary">구매확정 하기</button>
+					</div>
+					<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_70' and order.reviewSq == 0}">
+						<span class="cf_txt">리뷰를 작성하면 다른 구매자에게 도움이 될 수 있습니다.</span>
+						<button type="button" class="btn btn_primary">리뷰작성</button>
+					</div>
+					<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_70' and order.reviewSq > 0}">
+						<span class="cf_txt">주문내역 다시 구매하기 위해</span>
+						<button type="button" class="btn btn_primary">장바구니 담기</button>
+					</div>
+				</th:block>
+	
+				<!-- 선물 -->
+				<th:block th:if="${oneData.giftPackYn == 'Y'}">
+					<div class="order_confirm" th:if="${#strings.isEmpty(order.recipBaseAddr) and order.giftLimitDay >= 0}">
+						<span class="cf_txt" th:text="|${order.recipNm}님이 주소를 입력하기 전입니다. (입력기한 ${order.giftLimitDt})|"></span>
+					</div>
+					<div class="order_confirm" th:unless="${#strings.isEmpty(order.recipBaseAddr)}">
+						<span class="cf_txt" th:text="|${order.recipNm}님께 선물이 발송되었습니다.|"></span>
+					</div>
+					<div class="order_confirm" th:if="${#strings.isEmpty(order.recipBaseAddr) and order.giftLimitDay < 0}">
+						<span class="cf_txt">주소입력 기한이 경과되어 선물이 취소 되었습니다.</span>
+					</div>
+				</th:block>
+			</th:block>
+		</th:block>
+	</div>
+</th:block>
+
+<!-- 주문 없을 때 -->
+<th:block th:unless="${orderList}" th:each="oneData, status : ${orderList}">
+
+</th:block>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	$(document).ready(function() {
+	});
+/*]]>*/
+</script>
+
+</html>

+ 49 - 19
src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html

@@ -358,8 +358,8 @@
 																<div class="coupon_list">
 																	<ul>
 																		<!--  상품쿠폰 -->
-																		<th:block th:if="${goodsApplyCpnList.size() > 0}">
-																			<th:block th:each="goods, i : ${goodsApplyCpnList}">
+																		<th:block th:each="goods, i : ${goodsApplyCpnList}">
+																			<th:block th:if="${goods.goodsCpnList.size() > 0}">
 																				<li>
 																					<div class="coupon">
 																						<div class="item_gd">
@@ -369,18 +369,27 @@
 																									<div class="brand" th:text="${goods.brandEnm}+' '+${goods.brandKnm}"></div>
 																									<div class="name" th:text="${goods.goodsNm}"></div>
 																									<div class="price">
-																										<span class="selling_price"  th:text="${#numbers.formatInteger(goods.currPrice, 1, 'COMMA')}"></span>
+																										<span th:text="${goods.goodsCd}"></span>
+																										<th:block th:if="${goods.tmtbDcAmt} > 0">
+																											<span class="selling_price"  th:text="${#numbers.formatInteger(goods.tmtbDcAmt, 1, 'COMMA')}"></span>
+																										</th:block>
+																										<th:block th:if="${goods.tmtbDcAmt} < 1">
+																											<span class="selling_price"  th:text="${#numbers.formatInteger(goods.currPrice, 1, 'COMMA')}"></span>
+																										</th:block>
 																									</div>
 																								</figcaption>
 																							</figure>
 																						</div>
+																						
 																						<div class="form_field">
-																							<select id="" class="select_hidden">
-																								<th:block th:eath="goodsCpn, k : ${goodsCpnList}">
-																									<option th:value="${goodsCpn.cpnId}" th:text="${goodsCpn.cpnNm}"></option>
+																							<select id="" class="select_hidden cpnSelect">
+																								<option value="">선택안함</option>
+																								<th:block th:each="goodsCpn, k : ${goods.goodsCpnList}">
+																									<option th:value="${goodsCpn.cpnId}" th:text="${goodsCpn.cpnId}+'|'+${goodsCpn.cpnNm}+'|'+${goodsCpn.cpnDcAmt}"></option>
 																								</th:block>
 																							</select>
 																						</div>
+	
 																						<div class="cp_discount">
 																							<span class="cp_amount">-10,000원 할인적용</span>
 																							<button type="button" class="btn_del_coupon" id="">
@@ -392,7 +401,7 @@
 																			</th:block>
 																		</th:block>
 																		<!--  상품쿠폰 -->
-																		
+
 																		<!--  장바구니쿠폰 -->
 																		<th:block th:if="${cartCpnList.size() > 0}">
 																			<li>
@@ -400,8 +409,9 @@
 																					<div class="form_field">
 																						<label for="">장바구니 할인쿠폰</label> 
 																						<select id="" class="select_hidden">
+																							<option value="">선택안함</option>
 																							<th:block th:each="cartCpn, k : ${cartCpnList}">
-																								<option th:value="${cartCpn.cpnId}" th:text="${cartCpn.cpnNm}"></option>
+																								<option th:value="${cartCpn.cpnId}" th:text="${cartCpn.cpnId}+'|'+${cartCpn.cpnNm}"></option>
 																							</th:block>
 																						</select>
 																					</div>
@@ -790,14 +800,19 @@
 														<figure>
 															<span class="thumb"><img src="/images/pc/thumb/tmp_odSide1.jpg" alt=""></span>
 															<figcaption>
-																<div class="brand" th:text="${goods.brandEnm} + ${goods.brandKnm}"></div>
+																<div class="brand" th:text="${goods.brandEnm} + ' ' + ${goods.brandKnm}"></div>
 																<div class="name" th:text="${goods.goodsNm}"></div>
 																<div class="option" th:each="opt, index : ${goods.itemNmArr}">
 																	<span th:text="${goods.optCdArr[index.index]}"></span> 
 																	<span>수량:<em th:text="${goods.goodsQty}"></em>개</span>
 																</div>
 																<div class="price">
-																	<span class="selling_price" th:text="|${#numbers.formatInteger(goods.currPrice, 1, 'COMMA')} 원|"></span>
+																	<th:block th:if="${goods.tmtbDcAmt} > 0">
+																		<span class="selling_price"  th:text="${#numbers.formatInteger(goods.tmtbDcAmt, 1, 'COMMA')}"></span>
+																	</th:block>
+																	<th:block th:if="${goods.tmtbDcAmt} < 1">
+																		<span class="selling_price"  th:text="${#numbers.formatInteger(goods.currPrice, 1, 'COMMA')}"></span>
+																	</th:block>
 																</div>
 															</figcaption>
 														</figure>
@@ -816,17 +831,21 @@
 												<th:block th:each="goods, i : ${delvCartList}">
 													<div class="item_gd">
 														<figure>
-															<span class="thumb"><img
-																src="/images/pc/thumb/tmp_odSide1.jpg" alt=""></span>
+															<span class="thumb"><img src="/images/pc/thumb/tmp_odSide1.jpg" alt=""></span>
 															<figcaption>
-																<div class="brand" th:text="${goods.brandEnm} + ${goods.brandKnm}"></div>
+																<div class="brand" th:text="${goods.brandEnm} + ' ' + ${goods.brandKnm}"></div>
 																<div class="name" th:text="${goods.goodsNm}"></div>
 																<div class="option">
 																	<span th:text="${goods.optCd}"></span> 
 																	<span>수량:<em th:text="${goods.goodsQty}"></em>개</span>
 																</div>
 																<div class="price">
-																	<span class="selling_price" th:text="|${#numbers.formatInteger(goods.currPrice, 1, 'COMMA')} 원|"></span>
+																	<th:block th:if="${goods.tmtbDcAmt} > 0">
+																		<span class="selling_price"  th:text="${#numbers.formatInteger(goods.tmtbDcAmt, 1, 'COMMA')}"></span>
+																	</th:block>
+																	<th:block th:if="${goods.tmtbDcAmt} < 1">
+																		<span class="selling_price"  th:text="${#numbers.formatInteger(goods.currPrice, 1, 'COMMA')}"></span>
+																	</th:block>
 																</div>
 															</figcaption>
 														</figure>
@@ -847,19 +866,24 @@
 														<figure>
 															<span class="thumb"><img src="/images/pc/thumb/tmp_odSide1.jpg" alt=""></span>
 															<figcaption>
-																<div class="brand" th:text="${goods.brandEnm}"></div>
+																<div class="brand" th:text="${goods.brandEnm} + ' ' + ${goods.brandKnm}"></div>
 																<div class="name" th:text="${goods.goodsNm}"></div>
 																<div class="option">
 																	<span th:text="${goods.optCd}"></span>
 																	<span>수량:<em th:text="${goods.goodsQty}"></em>개</span>
 																</div>
 																<div class="price">
-																	<span class="selling_price" th:text="${goods.currPrice}"></span>
+																	<th:block th:if="${goods.tmtbDcAmt} > 0">
+																		<span class="selling_price"  th:text="${#numbers.formatInteger(goods.tmtbDcAmt, 1, 'COMMA')}"></span>
+																	</th:block>
+																	<th:block th:if="${goods.tmtbDcAmt} < 1">
+																		<span class="selling_price"  th:text="${#numbers.formatInteger(goods.currPrice, 1, 'COMMA')}"></span>
+																	</th:block>
 																</div>
 															</figcaption>
 														</figure>
 														<p class="info_reserv">
-															<i class="ico ico_calender"></i><span>2021.01.15</span>
+															<i class="ico ico_calender"></i><span th:text="${goods.delvResDt}"></span>
 															배송예정상품
 														</p>
 													</div>
@@ -945,7 +969,7 @@
 <!-- 사은품지급안내 팝업 -->
 <div class="modal fade od_pop infoGift_pop" id="infoGiftPop" tabindex="-1" role="dialog" aria-labelledby="infoGiftLabel" aria-hidden="true"></div>
 
-<script type="text/javascript">
+<script th:inline="javascript">
 
 $(document).ready( function() {
 	
@@ -1192,7 +1216,7 @@ $(document).ready( function() {
 	}
 </script>
 
-<script type="text/javascript">
+<script th:inline="javascript">
 	// 컨텐츠 호출
 	$(document).ready( function() {
 		// 1. 총알배송가능 지역, 총알배송 가능 시간 체크
@@ -1213,6 +1237,12 @@ $(document).ready( function() {
 		if (resCnt > 0) {
 			$("#resDelvArea").css("display", "block");
 		}
+		
+		// 3. 최적의 할인으로 쿠폰 설정
+		//$(".cpnSelect option:eq(1)").attr("selected", "selected");
+		$(".cpnSelect").each(function(i){
+			$(this).find("option:eq(1)").attr("selected", "selected");
+		});
 	});
 	
 	// 사은품선택 라디오 버튼 기능

+ 12 - 9
src/main/webapp/ux/style24_link.js

@@ -25,15 +25,18 @@ const _PAGE_CUSTOMER_DORMANT = _frontUrl + "/customer/dormant/certify/form";
 
 //== 마이페이지 ==/
 const _PAGE_MYPAGE = _frontUrl + "/mypage/main/form";							// 마이페이지 > 메인
-const _PAGE_ORDER_LIST = _frontUrl + "/mypage/order/list/form";					// 마이페이지 > 주문확인/배송조회
-const _PAGE_ORDER_DETAIL = _frontUrl + "/mypage/order/detail/form/";			// 마이페이지 > 주문/배송 상세
-const _PAGE_CRS_LIST = _frontUrl + "/mypage/crs/list/form";						// 마이페이지 > 취소/교환/반품 목록
-const _PAGE_RESTOCK = _frontUrl + "/mypage/restock/form";						// 마이페이지 > 재입고 알림 내역
-const _PAGE_REVIEW = _frontUrl + "/mypage/review/form";							// 마이페이지 > 리뷰
-const _PAGE_DELIVERY_ADDR = _frontUrl + "/mypage/delivery/addr/form";			// 마이페이지 > 배송지 관리
-const _PAGE_WISHLIST = _frontUrl + "/mypage/wish/list/form";					// 마이페이지 > 위시리스트
-const _PAGE_CUSTOMER = _frontUrl + "/mypage/customer/form";						// 마이페이지 > 내정보 관리
-const _PAGE_SECEDE = _frontUrl + "/mypage/customer/secede/form";				// 마이페이지 > 회원탈퇴
+const _PAGE_MYPAGE_ORDER_LIST = _frontUrl + "/mypage/order/list/form";			// 마이페이지 > 주문확인/배송조회
+const _PAGE_MYPAGE_ORDER_DETAIL = _frontUrl + "/mypage/order/detail/form/";		// 마이페이지 > 주문/배송 상세
+const _PAGE_MYPAGE_CRS_LIST = _frontUrl + "/mypage/crs/list/form";				// 마이페이지 > 취소/교환/반품 목록
+const _PAGE_MYPAGE_RESTOCK = _frontUrl + "/mypage/restock/form";				// 마이페이지 > 재입고 알림 내역
+const _PAGE_MYPAGE_COUPON = _frontUrl + "/mypage/coupon/form";					// 마이페이지 > 재입고 알림 내역
+const _PAGE_MYPAGE_POINT = _frontUrl + "/mypage/point/form";					// 마이페이지 > 재입고 알림 내역
+const _PAGE_MYPAGE_GIFTCARD = _frontUrl + "/mypage/gift/card/form";				// 마이페이지 > 재입고 알림 내역
+const _PAGE_MYPAGE_REVIEW = _frontUrl + "/mypage/review/form";					// 마이페이지 > 리뷰
+const _PAGE_MYPAGE_DELIVERY_ADDR = _frontUrl + "/mypage/delivery/addr/form";	// 마이페이지 > 배송지 관리
+const _PAGE_MYPAGE_WISHLIST = _frontUrl + "/mypage/wish/list/form";				// 마이페이지 > 위시리스트
+const _PAGE_MYPAGE_CUSTOMER = _frontUrl + "/mypage/customer/form";				// 마이페이지 > 내정보 관리
+const _PAGE_MYPAGE_SECEDE = _frontUrl + "/mypage/customer/secede/form";			// 마이페이지 > 회원탈퇴
 
 //== 검색 ==/