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

Merge remote-tracking branch 'origin/order' into jsh77b

Conflicts:
	src/main/java/com/style24/front/biz/service/TsfCartService.java
jsh77b 5 лет назад
Родитель
Сommit
64e8a2f85c

+ 175 - 118
src/main/java/com/style24/front/biz/dao/TsfCartDao.java

@@ -15,122 +15,179 @@ import com.style24.persistence.domain.Order;
  */
 @ShopDs
 public interface TsfCartDao {
-    /**
-     * 장바구니 대상 상품 수량 조회
-     * @param Cart
-     * @return
-     * @author xodud1202
-     * @since 2021. 02. 01
-     */
-   int getHasGoodsCartCnt(Cart cart);
-
-    /**
-     * 장바구니 등록 상품 확인
-     * @param Cart
-     * @return
-     * @author xodud1202
-     * @since 2021. 02. 01
-     */
-    Collection<Integer> selectHasSetItemCartList(Cart param);
-
-    /**
-     * 장바구니 등록 상품 확인
-     * @param Cart
-     * @return
-     * @author xodud1202
-     * @since 2021. 02. 01
-     */
-    Collection<Integer> selectHasNormalDealItemCartList(Cart param);
-
-    /**
-     * 장바구니 신규 등록
-     * @param Cart
-     * @return void
-     * @author xodud1202
-     * @since 2021. 02. 01
-     */
-    void insertCartInfo(Cart param);
-
-    /**
-     * 장바구니 상세 신규 등록
-     * @param Cart
-     * @return void
-     * @author xodud1202
-     * @since 2021. 02. 01
-     */
-    void insertCartDetailInfo(Cart param);
-
-    /**
-     * 장바구니 상세 신규 등록
-     * @param Cart
-     * @return void
-     * @author xodud1202
-     * @since 2021. 02. 01
-     */
-    void updateCartInfo(Cart param);
-
-    /**
-     * 장바구니 이력 정보 저장
-     * @param Cart
-     * @return void
-     * @author xodud1202
-     * @since 2021. 02. 02
-     */
-    void insertCartHst(Cart param);
-
-    /**
-     * 장바구니 상세 이력 정보 저장
-     * @param Cart
-     * @return void
-     * @author xodud1202
-     * @since 2021. 02. 02
-     */
-    void insertCartDetailHst(Cart param);
-
-    /**
-     * 다다익선 기본 상품 조회
-     * @param Cart
-     * @return void
-     * @author xodud1202
-     * @since 2021. 02. 04
-     */
-    Collection<Order> selectMoreBetterApplyCartList(Order param);
-
-   /**
-    * 다다익선 적용 상품 SUM DATA 조회
-    * @param Cart
-    * @return void
-    * @author xodud1202
-    * @since 2021. 02. 04
-    */
-   Collection<Order> selectApplyMoreBetterCartInfoList(Order param);
-
-    /**
-     * 다다익선 SECTION 적용 조건 조회
-     * @param List<Integer>
-     * @return Collection<Order>
-     * @author xodud1202
-     * @since 2021. 02. 04
-     */
-    Collection<Order> selectTmtbSectionValList(List<Integer> param);
-
-    /**
-     * 장바구니 상품 조회
-     * @param Order
-     * @return Order
-     * @author xodud1202
-     * @since 2021. 02. 08
-     */
-    Collection<Order> getCartGoodsList(Order param);
-
-    /**
-     * 장바구니 상품 조회
-     * @param Order
-     * @return Order
-     * @author xodud1202
-     * @since 2021. 02. 08
-     */
-    Collection<Order> getCartListDelvFeeInfoList(Order param);
-
-    void deleteCart(Cart param);
+
+	/**
+	 * 장바구니 대상 상품 수량 조회
+	 * @param Cart
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 02. 01
+	 */
+	int getHasGoodsCartCnt(Cart cart);
+
+	/**
+	 * 장바구니 등록 상품 확인
+	 * @param Cart
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 02. 01
+	 */
+	Collection<Integer> selectHasSetItemCartList(Cart param);
+
+	/**
+	 * 장바구니 등록 상품 확인
+	 * @param Cart
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 02. 01
+	 */
+	Collection<Integer> selectHasNormalDealItemCartList(Cart param);
+
+	/**
+	 * 장바구니 신규 등록
+	 * @param Cart
+	 * @return void
+	 * @author xodud1202
+	 * @since 2021. 02. 01
+	 */
+	void insertCartInfo(Cart param);
+
+	/**
+	 * 장바구니 상세 신규 등록
+	 * @param Cart
+	 * @return void
+	 * @author xodud1202
+	 * @since 2021. 02. 01
+	 */
+	void insertCartDetailInfo(Cart param);
+
+	/**
+	 * 장바구니 상세 신규 등록
+	 * @param Cart
+	 * @return void
+	 * @author xodud1202
+	 * @since 2021. 02. 01
+	 */
+	void updateCartInfo(Cart param);
+
+	/**
+	 * 장바구니 이력 정보 저장
+	 * @param Cart
+	 * @return void
+	 * @author xodud1202
+	 * @since 2021. 02. 02
+	 */
+	void insertCartHst(Cart param);
+
+	/**
+	 * 장바구니 상세 이력 정보 저장
+	 * @param Cart
+	 * @return void
+	 * @author xodud1202
+	 * @since 2021. 02. 02
+	 */
+	void insertCartDetailHst(Cart param);
+
+	/**
+	 * 다다익선 기본 상품 조회
+	 * @param Cart
+	 * @return void
+	 * @author xodud1202
+	 * @since 2021. 02. 04
+	 */
+	Collection<Order> selectMoreBetterApplyCartList(Order param);
+
+	/**
+	 * 다다익선 적용 상품 SUM DATA 조회
+	 * @param Cart
+	 * @return void
+	 * @author xodud1202
+	 * @since 2021. 02. 04
+	 */
+	Collection<Order> selectApplyMoreBetterCartInfoList(Order param);
+
+	/**
+	 * 다다익선 SECTION 적용 조건 조회
+	 * @param List<Integer>
+	 * @return Collection<Order>
+	 * @author xodud1202
+	 * @since 2021. 02. 04
+	 */
+	Collection<Order> selectTmtbSectionValList(List<Integer> param);
+
+	/**
+	 * 장바구니 상품 조회
+	 * @param Order
+	 * @return Order
+	 * @author xodud1202
+	 * @since 2021. 02. 08
+	 */
+	Collection<Order> getCartGoodsList(Order param);
+
+	/**
+	 * 장바구니 상품 조회
+	 * @param Order
+	 * @return Order
+	 * @author xodud1202
+	 * @since 2021. 02. 08
+	 */
+	Collection<Order> getCartListDelvFeeInfoList(Order param);
+
+	/**
+	 * 장바구니담긴상품 고객번호 Update
+	 * @param cart - 장바구니 정보
+	 * @return 처리건수
+	 * @author gagamel
+	 * @date 2021. 2. 24
+	 */
+	int updateCartOfCustNo(Cart cart);
+
+	/**
+	 * 로그인 후 처리할 장바구니 목록 조회
+	 * @param cart - 장바구니 정보
+	 * @return
+	 * @author gagamel
+	 * @date 2021. 2. 24
+	 */
+	Collection<Cart> getCartListAfterLogin(Cart cart);
+
+	/**
+	 * 로그인 후 장바구니 수정
+	 * @param cart - 장바구니 정보
+	 * @author gagamel
+	 * @date 2021. 2. 24
+	 */
+	void updateCartAfterLogin(Cart cart);
+
+	/**
+	 * 로그인 후 장바구니단품 삭제
+	 * @param cart - 장바구니 정보
+	 * @author gagamel
+	 * @date 2021. 2. 24
+	 */
+	void deleteCartItemAfterLogin(Cart cart);
+
+	/**
+	 * 로그인 후 장바구니 삭제
+	 * @param cart - 장바구니 정보
+	 * @author gagamel
+	 * @date 2021. 2. 24
+	 */
+	void deleteCartAfterLogin(Cart cart);
+
+	/**
+	 * 로그인 후 장바구니이력 생성
+	 * @param cart - 장바구니 정보
+	 * @author gagamel
+	 * @date 2021. 2. 24
+	 */
+	void createCartHistoryAfterLogin(Cart cart);
+
+	/**
+	 * 장바구니 삭제
+	 * @param param - 장바구니 정보
+	 * @author xodud1202
+	 * @date 2021. 2. 24
+	 */
+	void deleteCart(Cart param);
 }

+ 87 - 45
src/main/java/com/style24/front/biz/service/TsfCartService.java

@@ -6,21 +6,17 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.thymeleaf.util.StringUtils;
 
-import com.gagaframework.web.parameter.GagaMap;
 import com.style24.core.biz.service.TscOrderService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.session.TscSession;
 import com.style24.front.biz.dao.TsfCartDao;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Cart;
-import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsStock;
 import com.style24.persistence.domain.Login;
@@ -28,6 +24,8 @@ import com.style24.persistence.domain.Order;
 
 import lombok.extern.slf4j.Slf4j;
 
+import com.gagaframework.web.parameter.GagaMap;
+
 /**
  * 장바구니 Service
  *
@@ -65,7 +63,7 @@ public class TsfCartService {
 		}
 
 		// 장바구니 상품 및 재고 가능 여부 체크
-		for(Cart param : params) {
+		for (Cart param : params) {
 			cart.setJsessionId(TscSession.getSessionId());
 			cart.setRegNo(login.getCustNo());
 			cart.setUpdNo(login.getCustNo());
@@ -78,7 +76,7 @@ public class TsfCartService {
 			if (goods == null) {
 				throw new IllegalArgumentException("상품 정보가 존재하지 않습니다.");
 			}
-			if(TscConstants.GoodsStat.SOLDOUT.value().equals(goods.getGoodsStat())) {
+			if (TscConstants.GoodsStat.SOLDOUT.value().equals(goods.getGoodsStat())) {
 				throw new IllegalArgumentException("품절입니다.");
 			}
 
@@ -91,13 +89,13 @@ public class TsfCartService {
 			checkParam.setGoodsType(param.getGoodsType());
 			String stockResult = goodsService.getCheckStock(checkParam);
 
-			if(!"SUCCESS".equals(stockResult)) {
+			if (!"SUCCESS".equals(stockResult)) {
 				throw new IllegalArgumentException(stockResult);
 			}
 
 			cart.setGoodsCd(param.getGoodsCd());
 			int goodsCartCnt = cartDao.getHasGoodsCartCnt(param);
-			if(param.getGoodsQty() + goodsCartCnt > goods.getDayMaxOrdQty()) {
+			if (param.getGoodsQty() + goodsCartCnt > goods.getDayMaxOrdQty()) {
 				throw new IllegalArgumentException("1일 구매한도 수량이 초과되었습니다.");
 			}
 
@@ -105,7 +103,7 @@ public class TsfCartService {
 		}
 
 		// 장바구니 정보 수정
-		if(cart.getGoodsType().equals(TscConstants.GoodsType.SET.value())) {
+		if (cart.getGoodsType().equals(TscConstants.GoodsType.SET.value())) {
 			// 세트상품일 경우
 			saveSetTypeCartInfo(params);
 		} else {
@@ -137,16 +135,16 @@ public class TsfCartService {
 
 		// 장바구니 보유 CART_SQ 쿼리
 		int i = 1;
-		for(Cart param : params) {
+		for (Cart param : params) {
 			sb.append("SELECT CD.CART_SQ \n FROM TB_CART_DETAIL CD \n INNER JOIN TB_CART C \n ON CD.CART_SQ = C.CART_SQ \n WHERE C.CUST_NO = ");
 			// TODO 로그인 정보 확인
-			if(cart.getCustNo() == 0) {
+			if (cart.getCustNo() == 0) {
 				sb.append(cart.getCustNo()).append("\n AND JSESSION_ID = '").append(cart.getJsessionId()).append("'");
 			} else {
 				sb.append(cart.getCustNo());
 			}
 			sb.append("\n AND CD.ITEM_CD = '").append(param.getItemCd()).append("' \n AND CD.OPT_CD = '").append(param.getOptCd()).append("'");
-			if(i < params.size()) {
+			if (i < params.size()) {
 				i++;
 				sb.append("\n UNION ALL \n");
 			}
@@ -162,10 +160,10 @@ public class TsfCartService {
 		cart.setGoodsType(params.iterator().next().getGoodsType());
 		cart.setItemCdSql(sb.toString());
 
-		if("C".equals(params.iterator().next().getCartGb())) {
+		if ("C".equals(params.iterator().next().getCartGb())) {
 			cart.setCartGb(TscConstants.CartGb.CART.value());
-		} else if("O".equals(params.iterator().next().getCartGb())) {
-			if("P".equals(TsfSession.getFrontGb())) {
+		} else if ("O".equals(params.iterator().next().getCartGb())) {
+			if ("P".equals(TsfSession.getFrontGb())) {
 				cart.setCartGb(TscConstants.CartGb.PC_ORDER.value());
 			} else {
 				cart.setCartGb(TscConstants.CartGb.MOB_ORDER.value());
@@ -177,8 +175,8 @@ public class TsfCartService {
 		// 같은 장바구니 상품 확인
 		Collection<Integer> cartSqList = cartDao.selectHasSetItemCartList(cart);
 
-		if(cartSqList != null && cartSqList.size() > 0) {		// 장바구니 기존재
-			if(cartSqList.size() > 1) {							// 장바구니 조회 결과 이상시 insert or select 수정 필요
+		if (cartSqList != null && cartSqList.size() > 0) {		// 장바구니 기존재
+			if (cartSqList.size() > 1) {							// 장바구니 조회 결과 이상시 insert or select 수정 필요
 				throw new IllegalArgumentException("장바구니 조회에 실패하였습니다. 관리자에게 문의해주세요.");
 			} else {
 				cart.setCartSq(cartSqList.iterator().next());
@@ -188,7 +186,7 @@ public class TsfCartService {
 		} else {
 			cartDao.insertCartInfo(cart);					// 장바구니 마스터 정보 저장
 			cartDao.insertCartHst(cart);                    // 장바구니 이력 정보 저장
-			for(Cart param : params) {
+			for (Cart param : params) {
 				param.setCartSq(cart.getCartSq());
 				param.setRegNo(cart.getRegNo());
 				param.setCustNo(cart.getCustNo());
@@ -216,10 +214,10 @@ public class TsfCartService {
 		param.setJsessionId(TscSession.getSessionId());
 
 
-		if("C".equals(param.getCartGb())) {
+		if ("C".equals(param.getCartGb())) {
 			param.setCartGb(TscConstants.CartGb.CART.value());
-		} else if("O".equals(param.getCartGb())) {
-			if("P".equals(TsfSession.getFrontGb())) {
+		} else if ("O".equals(param.getCartGb())) {
+			if ("P".equals(TsfSession.getFrontGb())) {
 				param.setCartGb(TscConstants.CartGb.PC_ORDER.value());
 			} else {
 				param.setCartGb(TscConstants.CartGb.MOB_ORDER.value());
@@ -231,8 +229,8 @@ public class TsfCartService {
 		// 같은 장바구니 상품 확인
 		Collection<Integer> cartSqList = cartDao.selectHasNormalDealItemCartList(param);
 
-		if(cartSqList != null && cartSqList.size() > 0) {		// 장바구니 기존재
-			if(cartSqList.size() > 1) {							// 장바구니 조회 결과 이상시 insert or select 수정 필요
+		if (cartSqList != null && cartSqList.size() > 0) {		// 장바구니 기존재
+			if (cartSqList.size() > 1) {							// 장바구니 조회 결과 이상시 insert or select 수정 필요
 				throw new IllegalArgumentException("장바구니 조회에 실패하였습니다. 관리자에게 문의해주세요.");
 			} else {
 				param.setCartSq(cartSqList.iterator().next());
@@ -265,8 +263,8 @@ public class TsfCartService {
 		Collection<Order> cartGoodsList = cartDao.getCartGoodsList(order);
 
 		// 품절 아닌 상품만 체크
-		for(Order goods : cartGoodsList) {
-			if("N".equals(goods.getSoldoutYn())) {
+		for (Order goods : cartGoodsList) {
+			if ("N".equals(goods.getSoldoutYn())) {
 				cartSqs.add(goods.getCartSq());
 			}
 		}
@@ -366,7 +364,7 @@ public class TsfCartService {
 					}
 				}
 
-				if(applyInfo.getAmtTmtbSq() == section.getTmtbSq()) {
+				if (applyInfo.getAmtTmtbSq() == section.getTmtbSq()) {
 					// 금액 적용 다다익선
 					if(section.getSectionVal() <= applyInfo.getAmtTmtbSumAmt()) {			// 장바구니 수량 할인 기준 달성시
 						if(applyInfo.getAmtSectionVal() <= section.getSectionVal()) {			// 기존 달성된 기준치보다 할인폭이 클 경우 기준할인 수정
@@ -483,12 +481,13 @@ public class TsfCartService {
 		}
 
 		// 장바구니 정보에 수량 다다익선 정보 입력
-		for(Order cart : cartGoodsList) {
-			for(Order apply : tmtbApplyList) {
-				if(cart.getCartSq() == apply.getCartSq()) {
+		for (Order cart : cartGoodsList) {
+			for (Order apply : tmtbApplyList) {
+				if (cart.getCartSq() == apply.getCartSq()) {
 					// 2021.02.24 jsh77b
 					cart.setTmtb1DcAmt(apply.getTmtb1DcAmt());
 					cart.setTmtb2DcAmt(apply.getTmtb2DcAmt());
+					
 					cart.setTmtbDcAmt(apply.getTmtbDcAmt());
 					cart.setApplyQtySectionYn(apply.getApplyQtySectionYn());
 					cart.setQtyTmtbNm(apply.getQtyTmtbNm());
@@ -516,8 +515,8 @@ public class TsfCartService {
 		// 1. 장바구니 상품 배송단위별 건수 체크 로직 (자사:총알배송, 자사:일반배송, 입점업체, 예약배송)
 		Order delvOrder = new Order();
 
-		Collection<Order> wmsCartList 	= new ArrayList<Order>();
-		Collection<Order> delvCartList 	= new ArrayList<Order>();
+		Collection<Order> wmsCartList = new ArrayList<Order>();
+		Collection<Order> delvCartList = new ArrayList<Order>();
 
 		for (Order order : cartGoodsList) {
 			// 1.1 세트상품 옵션별 배열로 담기
@@ -551,7 +550,7 @@ public class TsfCartService {
 		List<Integer> cartSqArr = new ArrayList<Integer>();
 
 		// 장바구니 일련번호 세팅
-		for(Order param : params) {
+		for (Order param : params) {
 			cartSqArr.add(param.getCartSq());
 		}
 		delvInfo.setCartSqArr(cartSqArr.stream().mapToInt(Integer::intValue).toArray());
@@ -561,16 +560,16 @@ public class TsfCartService {
 
 		// 업체별 상품 합계 금액 저장
 		int compCnt = 0;
-		for(Order delv : delvFeeInfo) {
+		for (Order delv : delvFeeInfo) {
 			compCnt = 0;
-			for(Order param : params) {
-				if(param.getDelvFeeCd().equals(delv.getDelvFeeCd())) {
+			for (Order param : params) {
+				if (param.getDelvFeeCd().equals(delv.getDelvFeeCd())) {
 					compCnt++;
 					if("N".equals(param.getSoldoutYn())) {
 						delv.setCompSumPrice(delv.getCompSumPrice() + param.getCurrPrice());
 					}
 
-					if(compCnt == 1) {
+					if (compCnt == 1) {
 						param.setFirstCompYn("Y");
 					}
 					/* else {
@@ -581,13 +580,13 @@ public class TsfCartService {
 		}
 
 		// 장바구니 업체별 합계 금액으로 무료배송 여부 저장
-		for(Order delv : delvFeeInfo) {
-			for(Order param : params) {
-				if(param.getDelvFeeCd().equals(delv.getDelvFeeCd())) {		// TODO 자사 배송비는 어떤 금액으로 처리하는지 확인 후 조건 수정 필요 (WMS는 DELV_FEE_CD 동일한거 없음)
+		for (Order delv : delvFeeInfo) {
+			for (Order param : params) {
+				if (param.getDelvFeeCd().equals(delv.getDelvFeeCd())) {		// TODO 자사 배송비는 어떤 금액으로 처리하는지 확인 후 조건 수정 필요 (WMS는 DELV_FEE_CD 동일한거 없음)
 					param.setCompCnt(delv.getCompCnt());
-					if(TscConstants.DelvFeeCrite.FREE.value().equals(delv.getDelvFeeCrite())) {
+					if (TscConstants.DelvFeeCrite.FREE.value().equals(delv.getDelvFeeCrite())) {
 						param.setDelvFee(0);
-					} else if(TscConstants.DelvFeeCrite.NORMAL.value().equals(delv.getDelvFeeCrite()) && delv.getCompSumPrice() > delv.getMinOrdAmt()) {
+					} else if (TscConstants.DelvFeeCrite.NORMAL.value().equals(delv.getDelvFeeCrite()) && delv.getCompSumPrice() > delv.getMinOrdAmt()) {
 						param.setDelvFee(0);
 					} else {
 						param.setDelvFee(delv.getDelvFee());
@@ -610,9 +609,9 @@ public class TsfCartService {
 		}
 
 		// TODO 자사 배송비는 어떤 금액으로 처리하는지 확인 후 수정 필요
-		for(Order param : params) {
-			if("WMS".equals(param.getDelvFeeCd())) {
-				if(wmsSumPrice > 40000) {
+		for (Order param : params) {
+			if ("WMS".equals(param.getDelvFeeCd())) {
+				if (wmsSumPrice > 40000) {
 					param.setDelvFee(0);
 				} else {
 					param.setDelvFee(2500);
@@ -633,7 +632,7 @@ public class TsfCartService {
 				order.setSumRealPayAmt(order.getSumRealPayAmt() + cart.getTmtbDcAmt());
 
 				// 배송비 합계
-				if("Y".equals(cart.getFirstCompYn())) {
+				if ("Y".equals(cart.getFirstCompYn())) {
 					order.setTotDelvFee(order.getTotDelvFee() + cart.getDelvFee());
 				}
 			}
@@ -649,4 +648,47 @@ public class TsfCartService {
 	public void deleteCart(Cart param) {
 		cartDao.deleteCart(param);
 	}
+	/**
+	 * 로그인 후 장바구니 Update
+	 * 		회원 로그인 후 호출됨으로 세션 정보 있음
+	 * @param custNo - 고객번호
+	 * @author gagamel
+	 * @since 2021. 2. 24
+	 */
+	@Transactional("shopTxnManager")
+	public void updateCartToAfterLogin(Integer custNo) {
+		Cart cart = new Cart();
+		cart.setJsessionId(TsfSession.getSessionId());
+		cart.setCustNo(custNo);
+		cart.setUpdNo(custNo);
+		log.info("cart: {}", cart);
+
+		// 로그인 후 고객번호 Update
+		int procCnt = cartDao.updateCartOfCustNo(cart);
+
+		if (procCnt > 0) {
+			// 로그인 후 처리할 장바구니 목록
+			Collection<Cart> cartList = cartDao.getCartListAfterLogin(cart);
+
+			for (Cart updCart : cartList) {
+				updCart.setCustNo(custNo);
+				updCart.setRegNo(custNo);
+
+				// 로그인 후 장바구니 수정
+				cartDao.updateCartAfterLogin(updCart);
+
+				// 로그인 후 장바구니단품 삭제
+				cartDao.deleteCartItemAfterLogin(updCart);
+
+				// 로그인 후 장바구니 삭제
+				cartDao.deleteCartAfterLogin(updCart);
+
+				// 로그인 후 장바구니 이력 생성(삭제할 장바구니번호가 있을 때만)
+				if (updCart.getDelCartSq() > 0) {
+					cartDao.createCartHistoryAfterLogin(updCart);
+				}
+			}
+		}
+	}
+
 }

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

@@ -5,11 +5,14 @@ import com.gagaframework.web.security.GagaPasswordEncoder;
 import com.style24.core.biz.service.TscCustomerService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.session.TscSession;
+import com.style24.front.support.security.TsfLoginDetails;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Customer;
+import com.style24.persistence.domain.Login;
 import com.style24.persistence.domain.Point;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.stereotype.Service;
 
 import com.style24.front.biz.dao.TsfCustomerDao;
@@ -17,6 +20,11 @@ import com.style24.front.biz.dao.TsfCustomerDao;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * 고객(회원) Service
  *
@@ -36,6 +44,10 @@ public class TsfCustomerService {
 	@Autowired
 	private GagaPasswordEncoder passwordEncoder;
 
+	@Autowired
+	private TsfLoginService loginService;
+
+
 	/**
 	 * 고객아이디 찾기
 	 *
@@ -45,9 +57,9 @@ public class TsfCustomerService {
 	 * @since 2021. 02. 08
 	 */
 	public Customer getCustomerFindId(Customer customer) {
+		TscSession.setAttribute("maskingYn","Y");
 		customer.setSiteCd(TscConstants.Site.STYLE24.value());
 		customer.encryptData(); // 데이터 암호하
-		TscSession.setAttribute("maskingYn","Y");
 		return coreCustomerService.getCustomerInfo(customer);
 	}
 
@@ -118,11 +130,11 @@ public class TsfCustomerService {
 	 * @since 2021. 02. 15
 	 */
 	public Customer getCustomerFindByCi(String ci) {
+		TscSession.setAttribute("maskingYn","Y");
 		Customer customer = new Customer();
 		customer.setCi(ci);
 		customer.setSiteCd(TscConstants.Site.STYLE24.value());
 		customer.encryptData();
-
 		return customerDao.getCustomerInfo(customer);
 	}
 
@@ -134,12 +146,12 @@ public class TsfCustomerService {
 	 * @since 2021. 02. 15
 	 */
 	public Customer getCustomerFindByCellPhnno(String cellPhnno) {
+		TscSession.setAttribute("maskingYn","Y");
 		Customer customer = new Customer();
 		customer.setCellPhnno(cellPhnno);
 		customer.setHypenCellPhone(); // 010-0000-0000
 		customer.setSiteCd(TscConstants.Site.STYLE24.value());
 		customer.encryptData();
-
 		return customerDao.getCustomerInfo(customer);
 	}
 
@@ -195,16 +207,28 @@ public class TsfCustomerService {
 	 * @since 2021. 02. 19
 	 */
 	@Transactional("shopTxnManager")
-	public void saveJoinCustomer(Customer customer) {
-		boolean isSnsJoin = isSnsJoin(customer);
-		if (isSnsJoin) {
+	public boolean saveJoinCustomer(Customer customer) {
+		boolean isJoin = true;
+		// 1. validation
+		customer.encryptData();
+		if (StringUtils.isNotBlank(customer.getSnsId())) {
 			customer.setEncodedPasswd(" ");
+			customer.setCustId(customer.getSnsType()+"_"+customer.getSnsId());
 		} else {
 			customer.setEncodedPasswd(passwordEncoder.encode(customer.getPasswd()));
 		}
-		customer.encryptData();
-		customerDao.createCustomer(customer);
-		saveJoinPostProcessing(customer);
+		customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
+		customer.setCustGb(TscConstants.CustGb.NORMAL.value());
+		customer.setCustGrade(TscConstants.CustGrade.WELCOME.value());
+		int custCnt = customerDao.createCustomer(customer);
+
+		if (custCnt > 0) {
+			saveJoinPostProcessing(customer);
+		} else {
+			isJoin = false;
+		}
+
+		return isJoin;
 	}
 
 	/**
@@ -224,27 +248,48 @@ public class TsfCustomerService {
 
 
 	}
+
 	/**
-	 * SNS 가입인지 확인
-	 * @param customer - 일반가입, SNS 가입
-	 * @return boolean - sns 가입이면 true 아니면 false
+	 * 로그인 처리
+	 * @param custNo - 고객번호
+	 * @param request - 요청
 	 * @author jsshin
-	 * @since 2021. 02. 19
+	 * @since 2021. 02. 18
 	 */
-	public boolean isSnsJoin(Customer customer) {
-		boolean result = false;
-
-		if (StringUtils.isNotBlank(customer.getKkJoinId())) {
-			result = true;
-		}
-		if (StringUtils.isNotBlank(customer.getNvJoinId())) {
-			result = true;
-		}
-		if (StringUtils.isNotBlank(customer.getYsJoinId())) {
-			result = true;
+	public void getLogin(String custId, HttpServletRequest request) {
+		if (StringUtils.isBlank(custId)) {
+			throw new IllegalStateException("고객 아이디가 없습니다. 로그인 다시 해보시기 바랍니다.");
 		}
 
-		return result;
+		Login loginParam = new Login();
+		loginParam.setCustId(custId);
+		Login loginInfo = loginService.getLoginCheckInfo(loginParam);
+
+		// 권한 설정
+		List<SimpleGrantedAuthority> authorities = new ArrayList<>();
+		authorities.add(new SimpleGrantedAuthority(loginInfo.getCustGb()));
+
+		TsfLoginDetails loginDetails = new TsfLoginDetails(loginInfo, authorities);
+
+		// 최종로그인일시 Update
+		loginService.updateLastLoginDate(loginInfo.getCustNo());
+
+		// 로그인이력 생성
+		loginService.createLoginHistory(loginInfo.getCustNo());
+
+		// 세션 생성
+		this.createSession(request,  loginDetails);
+	}
+
+	/**
+	 * Session 생성
+	 * @param request - HttpServletRequest
+	 * @param loginDetails - 로그인 상세 정보
+	 */
+	private void createSession(HttpServletRequest request, TsfLoginDetails loginDetails) {
+		HttpSession session = request.getSession(true);
+		session.setMaxInactiveInterval(1800);
+		session.setAttribute("session", loginDetails);
 	}
 
 }

+ 55 - 41
src/main/java/com/style24/front/biz/service/TsfOrderService.java

@@ -66,47 +66,43 @@ public class TsfOrderService {
 		List<Order> ordDtlList = new ArrayList<>();
 		int ordNo = 0;
 		String ordDt = "";
-		String delvFeeCd = "";
-		String ordDtlStat = "";
-		String shotDelvYn = "";
 		String selfGoodsYn = "";
+		String supplyCompCd = "";
 		String shipCompNm = "";
+		String shipCompCd = "";
 		String invoiceNo = "";
 		String giftPackYn = "";
-		String reviewYn = "";
-		int reviewSq = 0;
 		int index = 0;
-
+		Boolean shotDelv = false;
+		Boolean selfMall = false;
+		Boolean supplyMall = false;
+		Boolean review = true;
+		
 		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()) {
 				if (index > 0) {
 					// 주문상세내역 목록 설정
 					GagaMap ordDtlMap = new GagaMap();
 					ordDtlMap.set("ordDtlList", ordDtlList);
 					ordDtlMap.set("ordDtlStat", ordDtlList.iterator().next().getOrdDtlStat());
+					ordDtlMap.set("shipCompCd", shipCompCd);
 					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");
+					ordDtlMap.set("review", review);
 					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("shotDelv", shotDelv);				// 총알배송 아이콘
+					map.set("selfMall", selfMall);				// STYLE24 일반배송 아이콘
+					map.set("supplyMall", supplyMall);			// 업체직배송 아이콘
 					map.set("giftPackYn", giftPackYn);			// 선물하기여부
 					map.set("orderList", orderList);			// 주문내역
 					mapList.add(map);
@@ -115,50 +111,67 @@ public class TsfOrderService {
 				// 데이터 설정 후 초기화 진행
 				ordNo = tmpOrder.getOrdNo();
 				ordDt = tmpOrder.getOrdDt();
-				delvFeeCd = tmpOrder.getDelvFeeCd();
-				ordDtlStat = tmpOrder.getOrdDtlStat();
-				shotDelvYn = tmpOrder.getShotDelvYn();
 				selfGoodsYn = tmpOrder.getSelfGoodsYn();
-				shipCompNm = tmpOrder.getShipCompNm();
+				supplyCompCd = tmpOrder.getSupplyCompCd();
 				giftPackYn = tmpOrder.getGiftPackYn();
+				shotDelv = false;
+				selfMall = false;
+				supplyMall = false;
 				ordDtlList = new ArrayList<>();
 				orderList = new ArrayList<>();
-			} else if (index > 0 
-				&& (!ordDtlStat.equals(tmpOrder.getOrdDtlStat())						// 주문상세상태값 변경
-					|| ("G013_70".equals(tmpOrder.getOrdDtlStat())
-						&& !reviewYn.equals(tmpOrder.getReviewSq() > 0 ? "Y" : "N"))	// 리뷰작성 변경
-					|| (!invoiceNo.equals(tmpOrder.getInvoiceNo())))) {					// 송장번호 변경
-
+			} else if (!selfGoodsYn.equals(tmpOrder.getSelfGoodsYn())
+					|| ("N".equals(tmpOrder.getSelfGoodsYn()) && !supplyCompCd.equals(tmpOrder.getSupplyCompCd()))) {
 				// 주문내역 목록 설정
 				GagaMap ordDtlMap = new GagaMap();
 				ordDtlMap.set("ordDtlList", ordDtlList);
 				ordDtlMap.set("ordDtlStat", ordDtlList.iterator().next().getOrdDtlStat());
+				ordDtlMap.set("shipCompCd", shipCompCd);
 				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");
+				ordDtlMap.set("review", review);
 				orderList.add(ordDtlMap);
 
 				// 상태 별 배너 설정 후 초기화 진행
 				ordDtlList = new ArrayList<>();
-				ordDtlStat = tmpOrder.getOrdDtlStat();
+				selfGoodsYn = tmpOrder.getSelfGoodsYn();
+				supplyCompCd = tmpOrder.getSupplyCompCd();
 			}
 
 			// 주문내역 설정
 			ordDtlList.add(tmpOrder);
+			
+			// 총알배송 아이콘 설정
+			if (!shotDelv && "Y".equals(tmpOrder.getShotDelvYn())) {
+				shotDelv = true;
+			}
 
-			// 인덱스 처리
-			index++;
+			// STYLE24 일반배송 아이콘 설정
+			if (!selfMall && "Y".equals(tmpOrder.getSelfGoodsYn())) {
+				selfMall = true;
+			}
+
+			// 업체직배송 아이콘 설정
+			if (!supplyMall && "N".equals(tmpOrder.getSelfGoodsYn())) {
+				supplyMall = true;
+			}
+			
+			// 리뷰 작성 여부 설정
+			if (review && tmpOrder.getReviewSq() == 0) {
+				review = false;
+			}
 			
-			// 초기화 진행
+			// 배송정보 설정
+			shipCompCd = tmpOrder.getShipCompCd();
+			shipCompNm = tmpOrder.getShipCompNm();
 			invoiceNo = tmpOrder.getInvoiceNo();
-			reviewSq = tmpOrder.getReviewSq();
-			reviewYn = tmpOrder.getReviewSq() > 0 ? "Y" : "N";
+
+			// 인덱스 처리
+			index++;
 		}
 
 		// 마지막 데이터 설정
@@ -167,28 +180,29 @@ public class TsfOrderService {
 			GagaMap ordDtlMap = new GagaMap();
 			ordDtlMap.set("ordDtlList", ordDtlList);
 			ordDtlMap.set("ordDtlStat", ordDtlList.iterator().next().getOrdDtlStat());
+			ordDtlMap.set("shipCompCd", shipCompCd);
 			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");
+			ordDtlMap.set("review", review);
 			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("shotDelv", shotDelv);
+			map.set("selfMall", selfMall);
+			map.set("supplyMall", supplyMall);
 			map.set("giftPackYn", giftPackYn);
 			map.set("orderList", orderList);
 			mapList.add(map);
 		}
-
+		
 		return mapList;
 	}
 

+ 62 - 14
src/main/java/com/style24/front/biz/web/TsfCustomerController.java

@@ -6,11 +6,17 @@ import com.style24.core.biz.service.TscClauseService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.session.TscSession;
 import com.style24.front.biz.service.TsfKakaoService;
+import com.style24.front.biz.service.TsfLoginService;
 import com.style24.front.biz.thirdparty.NiceCertify;
+import com.style24.front.support.env.TsfConstants;
+import com.style24.front.support.security.TsfLoginDetails;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Customer;
+import com.style24.persistence.domain.Login;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -26,6 +32,11 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * 고객(회원) Controller
  * 
@@ -44,14 +55,16 @@ public class TsfCustomerController extends TsfBaseController {
 	private TsfCustomerService customerService;
 
 	@Autowired
-	TscClauseService clauseService;
+	private TscClauseService clauseService;
 
 	@Autowired
-	TsfKakaoService kakaoService;
+	private TsfKakaoService kakaoService;
 
 	@Autowired
 	private NiceCertify niceCertify;
 
+
+
 	/**
 	 * 아이디 찾기 화면
 	 *
@@ -517,12 +530,13 @@ public class TsfCustomerController extends TsfBaseController {
 		GagaMap result = new GagaMap();
 
 		if (StringUtils.isBlank(customer.getCellPhnno())) {
-			throw new IllegalStateException("확인 할 이메일이 없습니다.");
+			throw new IllegalStateException("확인 할 휴대폰번호가 없습니다.");
 		}
 
 		Customer custInfo = customerService.getCustomerFindByCellPhnno(customer.getCellPhnno());
 
 		if (custInfo != null) {
+			result.setString("maskingCustId", custInfo.getMaskingCustId());
 			result.setBoolean("isFind", true);
 		} else {
 			result.setBoolean("isFind", false);
@@ -556,6 +570,7 @@ public class TsfCustomerController extends TsfBaseController {
 
 		Customer custInfo = customerService.getCustomerFindByCi(customer.getCi());
 		if (custInfo != null) {
+			result.setString("maskingCustId", custInfo.getMaskingCustId());
 			result.setBoolean("isFind", true);
 		} else {
 			result.setBoolean("isFind", false);
@@ -575,35 +590,68 @@ public class TsfCustomerController extends TsfBaseController {
 	 */
 	@PostMapping("/join/save")
 	@ResponseBody
-	public GagaMap saveJoinCustomer(@RequestBody Customer customer) {
+	public GagaMap saveJoinCustomer(@RequestBody Customer customer, HttpServletRequest request) {
 		GagaMap result = new GagaMap();
+
+		// 1.세션에 인코딩된 데이터를 가져온다.
 		String encData = TscSession.getAttribute("encData");
 		customer.setEncData(encData);
 		GagaMap authInfo = niceCertify.getCertifyCellPhoneResultInfo(customer);
+
+		// 2.인증통해 받은 데이터 매핑
+		String gender = "G007_"+authInfo.getString("sGender");
+		customer.setSexGb(gender);
 		customer.setCustNm(authInfo.getString("sName"));
 		customer.setBirthYmd(authInfo.getString("sBirthDate"));
 		customer.setForeignerYn(authInfo.getString("sforeignerYn"));
 		customer.setCi(authInfo.getString("sCi"));
-		String gender = "G007_"+authInfo.getString("sGender");
-		customer.setSexGb(gender);
+
 		customer.setSiteCd(TscConstants.Site.STYLE24.value());
 		customer.setFrontGb(TsfSession.getFrontGb());
 		customer.setAfLinkCd(TsfSession.getAttribute("afLinkCd"));
 
-		// 1.입력 받은 데이터 검증
-
-		// 2.고객정보 생성 및 혜택 처리
-		customerService.saveJoinCustomer(customer);
-
-		// 3.알림톡 및 메일 발송
+		// 3.고객정보 생성 및 혜택 처리
+		boolean isJoin = customerService.saveJoinCustomer(customer);
+		// 4.알림톡 및 메일 발송
 		try {
-			kakaoService.sendJoinCongrat(customer);
+			if(StringUtils.isNotBlank(customer.getCellPhnno())) {
+				kakaoService.sendJoinCongrat(customer);
+			}
 		} catch (Exception e) {
 			log.error("error", e);
 		}
-		result.setBoolean("isJoin", true);
+
+		if (isJoin) {
+			customerService.getLogin(customer.getCustId(),request);
+		} else {
+			TsfSession.setAttribute("maskingCustId",customer.getMaskingCustId());
+		}
+
+		result.setBoolean("isJoin", isJoin);
 
 		return result;
 	}
 
+	/**
+	 * 가입완료 페이지
+	 *
+	 * @return GagaMap - 결과정보
+	 * @author jsshin
+	 * @since 2021. 02. 18
+	 */
+	@GetMapping("/join/complete/form")
+	public ModelAndView getJoinCompleteForm() {
+		ModelAndView mav = new ModelAndView();
+
+		String maskingCustId = TsfSession.getAttribute("maskingCustId");
+
+		mav.addObject("maskingCustId", maskingCustId);
+
+		mav.setViewName(super.getDeviceViewName("customer/JoinCompleteForm"));
+
+		return mav;
+	}
+
+
+
 }

+ 72 - 16
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -28,6 +28,7 @@ import com.style24.front.biz.service.TsfCustomerService;
 import com.style24.front.biz.service.TsfGiftcardService;
 import com.style24.front.biz.service.TsfOrderService;
 import com.style24.front.biz.service.TsfPointService;
+import com.style24.front.biz.service.TsfRendererService;
 import com.style24.front.biz.service.TsfReviewService;
 import com.style24.front.biz.service.TsfWishlistService;
 import com.style24.front.support.controller.TsfBaseController;
@@ -78,6 +79,9 @@ public class TsfMypageController extends TsfBaseController {
 
 	@Autowired
 	private TsfCouponService couponService;
+	
+	@Autowired
+	private TsfRendererService rendererService;
 
 	/**
 	 * 마이페이지 메인 화면
@@ -94,8 +98,9 @@ public class TsfMypageController extends TsfBaseController {
 			order = new Order();
 		}
 		
-		// int custNo = TsfSession.getInfo().getCustNo();
-		int custNo = 1000007;
+		// 고객번호 설정
+		int custNo = TsfSession.getInfo().getCustNo();
+		order.setCustNo(custNo);
 
 		// 고객정보 조회
 		Customer customer = new Customer();
@@ -104,11 +109,6 @@ public class TsfMypageController extends TsfBaseController {
 		customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
 		mav.addObject("customerInfo", coreCustomerService.getCustomerInfo(customer));
 
-		// 주문정보 조회
-		// Order order = new Order();
-		
-		order.setCustNo(custNo);
-
 		// 쿠폰정보 조회
 		mav.addObject("couponCnt", coreOrderService.getCouponInfo(order));
 		
@@ -143,8 +143,9 @@ public class TsfMypageController extends TsfBaseController {
 	public ModelAndView mypageOrderDetailForm(@PathVariable(value = "ordNo") int ordNo) {
 		ModelAndView mav = new ModelAndView();
 
-		// int custNo = TsfSession.getInfo().getCustNo();
-		int custNo = 1000007;
+		// 고객번호 설정
+		int custNo = TsfSession.getInfo().getCustNo();
+		mav.addObject("custNo", custNo);
 
 		// 고객정보 조회
 		Customer customer = new Customer();
@@ -167,7 +168,8 @@ public class TsfMypageController extends TsfBaseController {
 		Collection<GagaMap> orderList = orderService.getOrderListForMypage(order);
 
 		if (orderList.size() == 0) {
-			throw new IllegalStateException(message.getMessage("ORDER_0001"));
+			mav.setViewName("redirect:/mypage/order/list/form");
+			return mav;
 		}
 
 		mav.addObject("orderList", orderList);
@@ -236,11 +238,11 @@ public class TsfMypageController extends TsfBaseController {
 	public GagaMap deleteOrder(@RequestBody Order order) {
 		GagaMap result = new GagaMap();
 
-		// int custNo = TsfSession.getInfo().getCustNo();
-		int custNo = 1000007;
-		
+		// 고객번호 설정
+		int custNo = TsfSession.getInfo().getCustNo();
 		order.setUpdNo(custNo);
 		
+		// 주문내역 삭제 처리
 		int chk = orderService.updateOrderDisplayYn(order);
 
 		if (chk > 0) {
@@ -272,16 +274,70 @@ public class TsfMypageController extends TsfBaseController {
 			return result;
 		}
 
-		// int custNo = TsfSession.getInfo().getCustNo();
-		int custNo = 1000007;
-
+		// 고객번호 설정
+		int custNo = TsfSession.getInfo().getCustNo();
 		order.setCustNo(custNo);
 		order.setRegNo(custNo);
 		order.setUpdNo(custNo);
 		
+		// 구매확정 처리
 		result = coreOrderService.decideOrder(order);
 		
 		return result;
 	}
 
+	/**
+	 * 마이페이지 교환신청 화면
+	 *
+	 * @param Order
+	 * @return ModelAndView
+	 * @author card007
+	 * @since 2021. 02. 22
+	 */
+	@PostMapping("/exchange/form")
+	@ResponseBody
+	public ModelAndView exchangeForm(Order order) {
+		ModelAndView mav = new ModelAndView();
+		
+		log.info("order >>> {}", order);
+		
+		// 주문번호 설정
+		mav.addObject("ordNo", order.getOrdNo());
+
+		// 고객번호 설정
+		int custNo = TsfSession.getInfo().getCustNo();
+		order.setCustNo(custNo);
+		mav.addObject("custNo", custNo);
+
+		// 고객정보 조회
+		Customer customer = new Customer();
+		customer.setSiteCd(TscConstants.Site.STYLE24.value());
+		customer.setCustNo(custNo);
+		customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
+		customer = coreCustomerService.getCustomerInfo(customer);
+
+		mav.addObject("customerInfo", customer);
+
+
+		// 주문목록 조회
+		Collection<GagaMap> orderList = orderService.getOrderListForMypage(order);
+
+		if (orderList.size() == 0) {
+			mav.setViewName("redirect:/mypage/order/list/form");
+			return mav;
+		}
+
+		mav.addObject("orderList", orderList);
+
+		// 주문 배송지 정보 조회
+		mav.addObject("deliveryAddrInfo", orderService.getOrderDeliveryAddrInfo(order));
+		
+		// 교환 사유 목록 조회
+		mav.addObject("exchangeReason", rendererService.getCommonCodeList("G689", "Y"));
+		
+		mav.setViewName(super.getDeviceViewName("/mypage/MypageExchangeForm"));
+		
+		return mav;
+	}
+
 }

+ 7 - 0
src/main/java/com/style24/front/support/security/handler/TsfLoginSuccessHandler.java

@@ -14,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
 
+import com.style24.front.biz.service.TsfCartService;
 import com.style24.front.biz.service.TsfLoginService;
 import com.style24.front.support.env.TsfConstants;
 import com.style24.front.support.security.TsfLoginDetails;
@@ -50,6 +51,9 @@ public class TsfLoginSuccessHandler implements AuthenticationSuccessHandler {
 	@Autowired
 	private TsfLoginService loginService;
 
+	@Autowired
+	private TsfCartService cartService;
+
 	@Override
 	public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
 		// 로그인 상세 정보
@@ -105,6 +109,9 @@ public class TsfLoginSuccessHandler implements AuthenticationSuccessHandler {
 			returnUrl = "/";
 		}
 
+		// 로그인 후 장바구니 Update
+		cartService.updateCartToAfterLogin(custNo);
+
 		GagaMap result = new GagaMap();
 		result.setString("status", "OK");
 		result.setString("returnUrl", returnUrl);

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

@@ -630,4 +630,126 @@
 			#{item}
 		</foreach>
 	</delete>
+	
+	<!-- 장바구니담긴상품 고객번호 Update -->
+	<update id="updateCartOfCustNo" parameterType="Cart">
+		/* TsfCart.updateCartOfCustNo */
+		UPDATE TB_CART
+		SET    CUST_NO = #{custNo}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+		WHERE  JSESSION_ID = #{jsessionId}
+	</update>
+	
+	<!-- 로그인 후 처리할 장바구니 목록 조회 -->
+	<select id="getCartListAfterLogin" parameterType="Cart" resultType="Cart">
+		/* TsfCart.getCartListAfterLogin */
+		SELECT A.CART_GB
+		     , A.GOODS_CD
+		     , A.ITEM_OPTS
+		     , IFNULL(B.CART_SQ,A.CART_SQ) AS UPD_CART_SQ /*업데이트할 장바구니번호*/
+		     , CASE WHEN B.CART_SQ IS NOT NULL THEN
+		                A.CART_SQ
+		            ELSE
+		                0
+		       END                         AS DEL_CART_SQ /*삭제할 장바구니번호(0이면 삭제할 장바구니번호 없음)*/
+		FROM   (
+		        /*장바구니에 담을 상품 목록*/
+		        SELECT C.CART_SQ
+		             , C.CART_GB
+		             , C.GOODS_CD
+		             , GROUP_CONCAT(CONCAT(CD.ITEM_CD,':',CD.OPT_CD1,':',CD.OPT_CD2) ORDER BY CD.ITEM_CD, CD.OPT_CD1, CD.OPT_CD2 SEPARATOR ';') AS ITEM_OPTS
+		        FROM   TB_CART C
+		             , TB_CART_DETAIL CD
+		        WHERE  C.CART_SQ = CD.CART_SQ
+		        AND    C.CUST_NO = #{custNo}
+		        AND    C.JSESSION_ID = #{jsessionId}
+		        GROUP  BY C.CART_SQ, C.CART_GB, C.GOODS_CD
+		       ) A
+		LEFT OUTER JOIN (
+		        /*장바구니에 담긴 기존 상품 목록*/
+		        SELECT C.CART_SQ
+		             , C.CART_GB
+		             , C.GOODS_CD
+		             , GROUP_CONCAT(CONCAT(CD.ITEM_CD,':',CD.OPT_CD1,':',CD.OPT_CD2) ORDER BY CD.ITEM_CD, CD.OPT_CD1, CD.OPT_CD2 SEPARATOR ';') AS ITEM_OPTS
+		        FROM   TB_CART C
+		             , TB_CART_DETAIL CD
+		        WHERE  C.CART_SQ = CD.CART_SQ
+		        AND    C.CUST_NO = #{custNo}
+		        AND    C.JSESSION_ID <![CDATA[<>]]> #{jsessionId}
+		        GROUP  BY C.CART_SQ, C.CART_GB, C.GOODS_CD
+		       ) B
+		ON     A.CART_GB = B.CART_GB
+		AND    A.GOODS_CD = B.GOODS_CD
+		AND    A.ITEM_OPTS = B.ITEM_OPTS
+	</select>
+
+	<!-- 로그인 후 장바구니 수정 -->
+	<update id="updateCartAfterLogin" parameterType="Cart">
+		/* TsfCart.updateCartAfterLogin */
+		UPDATE TB_CART
+		SET    GOODS_QTY = GOODS_QTY + IFNULL((SELECT A.GOODS_QTY
+		    									 FROM ( SELECT GOODS_QTY
+														  FROM TB_CART
+														 WHERE CART_SQ = #{delCartSq}
+														   AND CUST_NO = #{custNo} ) A
+		                                        ),0)
+		WHERE  CART_SQ = #{updCartSq}
+		AND    CUST_NO = #{custNo}
+	</update>
+
+	<!-- 로그인 후 장바구니단품 삭제 -->
+	<delete id="deleteCartItemAfterLogin" parameterType="Cart">
+		/* TsfCart.deleteCartItemAfterLogin */
+		DELETE FROM TB_CART_DETAIL
+		WHERE  CART_SQ IN (SELECT CART_SQ
+		                   FROM   TB_CART
+		                   WHERE  CART_SQ = #{delCartSq}
+		                   AND    CUST_NO = #{custNo}
+		                  )
+	</delete>
+
+	<!-- 로그인 후 장바구니 삭제 -->
+	<delete id="deleteCartAfterLogin" parameterType="Cart">
+		/* TsfCart.deleteCartAfterLogin */
+		DELETE FROM TB_CART
+		WHERE  CART_SQ = #{delCartSq}
+		AND    CUST_NO = #{custNo}
+	</delete>
+	
+	<!-- 로그인 후 장바구니이력 생성 -->
+	<update id="createCartHistoryAfterLogin" parameterType="Cart">
+		/* TsfCart.createCartHistoryAfterLogin */
+		INSERT INTO TB_CART_HST (
+		       CART_SQ
+		     , CART_GB
+		     , GOODS_CD
+		     , GOODS_QTY
+		     , DEAL_GOODS_CD
+		     , ORD_NO
+		     , CUST_NO
+		     , AF_LINK_CD
+		     , ITHR_CD
+		     , CONTENTS_LOC
+		     , PLAN_DTL_SQ
+		     , REG_NO
+		     , REG_DT
+		)
+		SELECT CART_SQ
+		     , CART_GB
+		     , GOODS_CD
+		     , GOODS_QTY
+		     , DEAL_GOODS_CD
+		     , 0
+		     , CUST_NO
+		     , AF_LINK_CD
+		     , ITHR_CD
+		     , CONTENTS_LOC
+		     , PLAN_DTL_SQ
+		     , #{regNo}
+		     , NOW()
+		FROM   TB_CART C
+		WHERE  CART_SQ = #{updCartSq}
+	</update>
+	
 </mapper>

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

@@ -151,8 +151,7 @@
 	<insert id="createCustomer" parameterType="Customer" keyProperty="custNo">
 		/* TsfCustomer.createCustomer */
 		INSERT INTO TB_CUSTOMER (
-		       CUST_NO
-		     , CUST_ID
+		       CUST_ID
 		     , CUST_NM
 		     , PASSWD
 		     , BIRTH_YMD
@@ -193,21 +192,29 @@
 		     , UPD_NO
 		     , UPD_DT
 		)
-		SELECT #{custNo}                           AS CUST_NO
-		     , #{custId}                           AS CUST_ID
+		SELECT #{custId}                           AS CUST_ID
 		     , #{encodedCustNm}                    AS CUST_NM
 		     , #{encodedPasswd}                    AS PASSWD
 		     , #{encodedBirthYmd}                  AS BIRTH_YMD
 		     , #{birthSm}                          AS BIRTH_SM
 		     , #{encodedSexGb}                     AS SEX_GB
 		     , #{encodedCellPhnno}                 AS CELL_PHNNO
-		     , #{appAgreeYn}                       AS APP_AGREE_YN
-		     , #{appAgreeDt}                       AS APP_AGREE_DT
-		     , #{smsAgreeYn}                       AS SMS_AGREE_YN
-		     , #{smsAgreeDt}                       AS SMS_AGREE_DT
+		     , IFNULL(#{appAgreeYn}, 'N')          AS APP_AGREE_YN
+		     , CASE WHEN #{appAgreeYn} = 'Y' THEN
+		            NOW()
+		       ELSE NULL
+		       END                                 AS APP_AGREE_DT
+		     , IFNULL(#{smsAgreeYn}, 'N')          AS SMS_AGREE_YN
+		     , CASE WHEN #{smsAgreeYn} = 'Y' THEN
+		            NOW()
+		       ELSE NULL
+		       END                                 AS SMS_AGREE_DT
 		     , #{encodedEmail}                     AS EMAIL
-		     , #{emailAgreeYn}                     AS EMAIL_AGREE_YN
-		     , #{emailAgreeDt}                     AS EMAIL_AGREE_DT
+		     , IFNULL(#{emailAgreeYn}, 'N')        AS EMAIL_AGREE_YN
+		     , CASE WHEN #{emailAgreeYn} = 'Y' THEN
+		            NOW()
+		       ELSE NULL
+		       END                                 AS EMAIL_AGREE_DT
 		     , #{homeZipcode}                      AS HOME_ZIPCODE
 		     , #{encodedHomeBaseAddr}              AS HOME_BASE_ADDR
 		     , #{encodedHomeDtlAddr}               AS HOME_DTL_ADDR
@@ -223,16 +230,19 @@
 		     , 'N'                                 AS TEMP_PASSWD_YN
 		     , NOW()                               AS LOGIN_LDT
 		     , #{ci}                               AS CI
-		     , NOW()                               AS AUTH_DT
+		     , CASE WHEN #{ci} != '' THEN
+		            NOW()
+		       ELSE NULL
+		       END                                 AS AUTH_DT
 		     , #{managedRsn}                       AS MANAGED_RSN
 		     , #{managedDtlRsn}                    AS MANAGED_DTL_RSN
 		     , #{managedDt}                        AS MANAGED_DT
 		     , #{secedeRsn}                        AS SECEDE_RSN
 		     , #{secedeDtlRsn}                     AS SECEDE_DTL_RSN
 		     , #{secedeDt}                         AS SECEDE_DT
-		     , #{custNo}                           AS REG_NO
+		     , 0                                   AS REG_NO
 		     , NOW()                               AS REG_DT
-		     , #{custNo}                           AS UPD_NO
+		     , 0                                   AS UPD_NO
 		     , NOW()                               AS UPD_DT
 	</insert>
 

+ 12 - 8
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -82,14 +82,14 @@
 		SELECT G.GOODS_CD
 		     , G.GOODS_NM
 		     , G.GOODS_TNM
-		     , CONCAT(IF(IFNULL(G.GOODS_GB,'') IN ('G073_11','G073_15', ''), '',CONCAT('[',FN_GET_CODE_NM('G073',G.GOODS_GB),']') )
+		     , CONCAT(IF(IFNULL(G.GOODS_GB,'') IN ('G073_11','G073_15', ''), '',IFNULL(CONCAT('[',FN_GET_CODE_NM('G073',G.GOODS_GB),']'),'') )
 		             ,IF(G.FOREIGN_BUY_YN='N','[해외구매대행]','' )
 		             ,IF(G.PARALLEL_IMPORT_YN = 'Y','[병행수입]','')
 		             ,IF(G.ORDER_MADE_YN='Y','[주문제작]','')
 		             ,G.GOODS_NM ) AS GOODS_FULL_NM
 		     , G.BRAND_CD
-		     , (CASE WHEN B.DISP_NM_LANG = 'EN' THEN B.BRAND_ENM ELSE B.BRAND_KNM END) AS BRAND_NM
-		     , B.BRAND_GRP_NM
+		     , (CASE WHEN D.DISP_NM_LANG = 'EN' THEN D.BRAND_GROUP_ENM ELSE D.BRAND_GROUP_KNM END) AS BRAND_GROUP_NM
+		     , D.BRAND_GROUP_NO
 		     , B.LOGO_FILE_NM
 		     , G.ITEMKIND_CD
 		     , G.FORMAL_GB
@@ -105,8 +105,8 @@
 		     , G.DAY_MAX_ORD_QTY
 		     , G.SEX_GB
 		     , FN_GET_CODE_NM('G007',G.SEX_GB) AS SEX_NM
-		     , G.DELV_FEE
-		     , G.MIN_ORD_AMT
+		     , E.DELV_FEE
+		     , E.MIN_ORD_AMT
 		     , G.GOODS_GB
 		     , (SELECT NI_CLSF_CD
 		        FROM TB_ITEMKIND
@@ -144,10 +144,14 @@
 		FROM TB_GOODS G
 		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 		                      AND B.USE_YN = 'Y'
+		INNER JOIN TB_BRAND_GROUP D ON B.BRAND_GROUP_NO = D.BRAND_GROUP_NO
+		                            AND D.USE_YN = 'Y'
 		INNER JOIN (SELECT GOODS_CD, 
 		            FN_GET_BENEFIT_PRICE(#{frontGb},GOODS_CD, CURR_PRICE,#{custGb}) AS CURR_PRICE 
 		            FROM TB_GOODS
 		            WHERE GOODS_CD = #{goodsCd}) BP ON G.GOODS_CD = BP.GOODS_CD
+		INNER JOIN TB_DELV_FEE_POLICY E ON G.SUPPLY_COMP_CD = E.SUPPLY_COMP_CD
+		                                     AND G.DELV_FEE_CD =  E.DELV_FEE_CD
 		LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
 		                              AND IFNULL(#{custNo}, 0) = W.CUST_NO
 		WHERE G.GOODS_CD = #{goodsCd}
@@ -531,7 +535,7 @@
 		           , RANK() OVER(PARTITION BY A.LOOKBOOK_SQ, B.LOOKBOOKB_SQ  ORDER BY C.DISP_ORD ) RNUM 
 		           , C.DISP_ORD 
 		           , G.GOODS_NM
-		           , CONCAT(IF(IFNULL(G.GOODS_GB,'') IN ('G073_11','G073_15', ''), '',CONCAT('[',FN_GET_CODE_NM('G073',G.GOODS_GB),']') )
+		           , CONCAT(IF(IFNULL(G.GOODS_GB,'') IN ('G073_11','G073_15', ''), '',IFNULL(CONCAT('[',FN_GET_CODE_NM('G073',G.GOODS_GB),']'),'') )
 		                   ,IF(G.FOREIGN_BUY_YN='N','[해외구매대행]','' )
 		                   ,IF(G.PARALLEL_IMPORT_YN = 'Y','[병행수입]','')
 		                   ,IF(G.ORDER_MADE_YN='Y','[주문제작]','')
@@ -578,8 +582,8 @@
 		                                  , B.VIDEO_VAL 
 		                                  , A.REG_DT 
 		                                  , RANK() OVER(PARTITION BY A.DISPLOC_VAL ORDER BY A.REG_DT ) RNUM 
-		                             FROM tb_video_disploc  A
-		                             INNER JOIN  tb_video B ON A.VIDEO_SQ = B.VIDEO_SQ 
+		                             FROM TB_VIDEO_DISPLOC  A
+		                             INNER JOIN  TB_VIDEO B ON A.VIDEO_SQ = B.VIDEO_SQ 
 		                                                    AND B.DISP_YN ='Y'
 		                             WHERE A.DISPLOC_GB ='G'
 		                             AND A.DISP_YN = 'Y'

+ 22 - 3
src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml

@@ -99,6 +99,12 @@
 					#{item}
 				</foreach>
 			</if>
+			<if test="ordDtlNoArr != null">
+		   AND OD.ORD_DTL_NO IN
+				<foreach collection="ordDtlNoArr" item="item" index="index"  open="(" close=")" separator=",">
+					#{item}
+				</foreach>
+			</if>
 		   AND O.DISP_YN = 'Y'
 		</where>
 		 ORDER BY OD.SUPPLY_COMP_CD
@@ -282,14 +288,27 @@
 			 , DA.RECIP_BASE_ADDR
 			 , DA.RECIP_DTL_ADDR
 			 , DA.DELV_MEMO
+			 , DL.RTN_LOC_NM
+			 , DL.RTN_LOC_TELNO
+			 , DL.RTN_LOC_ZIPCODE
+			 , DL.RTN_LOC_BASE_ADDR
+			 , DL.RTN_LOC_DTL_ADDR
 			 , DA.REG_NO
 			 , DA.REG_DT
 			 , DA.UPD_NO
 			 , DA.UPD_DT
 		  FROM TB_DELIVERY_ADDR DA
-		  INNER JOIN TB_ORDER_DETAIL OD
-		  ON OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ
-			  AND OD.ORD_NO = #{ordNo}
+		 INNER JOIN TB_ORDER_DETAIL OD
+		    ON OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ
+		   AND OD.ORD_NO = #{ordNo}
+		<if test="ordDtlNoArr != null">
+		   AND OD.ORD_DTL_NO IN
+			<foreach collection="ordDtlNoArr" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+		  LEFT OUTER JOIN TB_DELIVERY_LOC DL
+		    ON OD.DELV_LOC_CD = DL.DELV_LOC_CD
 		 LIMIT 1
 	</select>
 

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

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

+ 84 - 0
src/main/webapp/WEB-INF/views/web/customer/JoinCompleteFormWeb.html

@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org"
+	  xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	  layout:decorator="web/common/layout/DefaultLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : JoinCompleteFormWeb.html
+ * @desc    : 회원 가입완료 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.22   jsshin     최초 작성
+ *******************************************************************************
+ -->
+
+<body>
+<th:block layout:fragment="content">
+<!--  container -->
+<div id="container" class="container mb">
+	<div class="wrap">
+		<div class="content join3">
+			<div class="cont_head">
+				<h3>style24</h3>
+			</div>
+			<div class="cont_body">
+				<div th:if="${maskingCustId != ''}" class="form_wrap form_col_c" role="form" >
+					<div class="form_head">
+						<h4>회원가입</h4>
+					</div>
+					<div class="form_info">
+						<span class="ico_content_find"></span>
+						<p>이미 가입된 아이디가 있습니다.</p>
+						<p class="t_info mt15">
+							아래의 아이디로 로그인 하시거나<br>
+							잊으신 경우 다시 찾기를 통해 이용 가능합니다.
+						</p>
+					</div>
+					<div class="print_bar mt30">
+						<p class="c_primary bold" data-font="lato">ID***24</p>
+					</div>
+					<div class="btn_group_block btn_group_md ui_row">
+						<div class="ui_col_6">
+							<button type="button" class="btn btn_dark btn_block"><span>로그인</span></button>
+						</div>
+						<div class="ui_col_6">
+							<button type="button" class="btn btn_default btn_block"><span>아이디 찾기</span></button>
+						</div>
+					</div>
+				</div>
+				<div th:unless="${maskingCustId != ''}"  class="form_wrap form_col_c" role="form">
+					<div class="form_head">
+						<h3>신규회원 혜택 안내</h3>
+					</div>
+					<div class="form_info">
+						오픈 콘텐츠 확정시 다시안내
+					</div>
+					<div class="mt40">
+						<button type="button"  class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_MAIN);">
+							<span>쇼핑하러 가기</span>
+						</button>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+
+<script th:inline="javascript">
+	/*<![CDATA[*/
+
+	$(document).ready(function() {
+
+	});
+	/*]]>*/
+</script>
+</th:block>
+</body>
+</html>
+
+

+ 291 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageExchangeFormWeb.html

@@ -0,0 +1,291 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="web/common/layout/MypageLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : MypageExchangeFormWeb.html
+ * @desc    : 마이페이지 > 교환신청 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.22   card007     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<div class="my_cont">
+		<div class="sec_head">
+			<h3>교환 신청</h3>
+			<div class="od_detail">
+				(주문번호 : <span class="num" th:text="${ordNo}"></span>)
+			</div>
+		</div>
+		<div class="sec_body mypage_body">
+			<div class="order_list return_list">
+				<section class="order_row">
+					<th:block th:if="${orderList}" th:each="oneData, status : ${orderList}">
+						<div class="part_deliver">
+							<div class="tbl_tit">
+								<!-- 주문일/선물일 설정 -->
+								<span class="start_t" th:unless="${oneData.giftPackYn == 'Y'}">주문일</span>
+								<span class="gift_t" th:if="${oneData.giftPackYn == 'Y'}">선물일</span>
+								<!-- //주문일/선물일 설정 -->
+
+								<span class="order_date" th:text="${oneData.ordDt}"></span>
+
+								<!-- 배송구분 설정 -->
+								<span class="order_label02" th:if="${oneData.shotDelv}">총알배송</span>
+								<span class="order_label01" th:if="${oneData.selfMall}">STYLE24 일반배송</span>
+								<span class="order_label01" th:if="${oneData.supplyMall}">업체직배송</span>
+								<!-- //배송구분 설정 -->
+								<a href="javascript:void(0)" class="detail_btn" th:attr="ordNo=${oneData.ordNo}" onclick="fnGoToOrderDetail(this)">주문상세보기</a>
+							</div>
+							<th:block th:if="${oneData.orderList}" th:each="order, status : ${oneData.orderList}">
+								<div class="tbl type2">
+									<table id="exchangeList">
+										<colgroup>
+											<col width="1020">
+											<col width="180">
+										</colgroup>
+										<tbody>
+										<th:block th:if="${order.ordDtlList}" th:each="ordDtl, status : ${order.ordDtlList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+											<input type="hidden" name="ordDtlNo" th:value="${ordDtl.ordDtlNo}"/>
+											<input type="hidden" name="ordDtlStat" th:value="${ordDtl.ordDtlStat}"/>
+											<input type="hidden" name="reviewSq" th:value="${ordDtl.reviewSq}"/>
+											<tr>
+												<td>
+													<div class="info_item">
+														<div class="thumb_box">
+															<a href="">
+																<img th:src="${imageUrl + '/' + ordDtl.sysImgNm}" width="100%" alt="">
+															</a>
+														</div>
+														<div class="info_box">
+															<p class="od_name">
+																<a href="">
+																	<span class="brand" th:text="${ordDtl.brandNm}"></span>
+																	<span class="name" th:text="${ordDtl.goodsNm}"></span>
+																</a>
+															</p>
+															<p class="od_opt">
+																<span class="option"><em th:text="${ordDtl.optCd1}"></em><em th:text="${ordDtl.optCd2}"></em></span>
+																<span class="count">수량 <em th:text="${ordDtl.ordQty}"></em>개</span>
+															</p>
+														</div>
+														<div class="info_calc">
+															<p class="price">
+																<span class="selling_price" th:text="|${#numbers.formatInteger(ordDtl.ordAmt, 1, 'COMMA')}원|"></span>
+															</p>
+															<p class="point"><span th:text="${#numbers.formatInteger(ordDtl.savePntAmt, 1, 'COMMA')}"></span>p</p>
+														</div>
+													</div>
+												</td>
+												<td class="cnt_sel">
+													<span class="cnt_t">수량</span>
+													<select class="select_dress" name="chgQty">
+														<option value="">선택</option>
+														<option th:if="${ordDtl.ordQty > 0}" th:each="num : ${#numbers.sequence(1,ordDtl.ordQty)}" th:value="${num}" th:text="${num}"></option>
+													</select>
+													<button class="btn btn_dark btn_sm" th:attr="ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnChangeOption(this);">옵션 변경</button>
+												</td>
+											</tr>
+										</th:block>
+										</tbody>
+									</table>
+								</div>
+							</th:block>
+							<div class="order_confirm">
+								<p class="cf_txt cf_desc c_primary">교환하실 상품의 수량 및 옵션을 선택하신 후 교환 신청을 하실 수 있습니다.</p>
+							</div>
+						</div>
+					</th:block>
+				</section>
+				<section class="order_row">
+					<div class="tbl_tit">
+						<h3 class="subH3">교환 사유</h3>
+					</div>
+					<div class="tbl type1">
+						<table>
+							<colgroup>
+								<col width="*">
+							</colgroup>
+							<tbody>
+							<tr>
+								<td>
+									<select id="mounth" name="chgReason" onchange="fnChangeReason(this);">
+										<option value="">교환 사유를 선택하세요</option>
+										<option th:if="${exchangeReason}" th:each="oneData, status : ${exchangeReason}" th:value="${oneData.cd}" th:text="${oneData.cdNm}"></option>
+									</select>
+								</td>
+							</tr>
+							<tr>
+								<td>
+									<textarea class="doc_exchange" name="chgMemo" id="chgMemo" placeholder="자세한 사유를 입력해주세요." onkeyup="cfnGetTextLength(this, 500, $('#exchange_cnt'));"></textarea>
+									<p class="txt_cnt"><span id="exchange_cnt" class="c_primary">0</span>/500</p>
+								</td>
+							</tr>
+							</tbody>
+						</table>
+					</div>
+				</section>
+				<section class="order_row" id="chgerLocation">
+					<div class="order_tit">
+						<h3 class="subH3">상품 회수지</h3>
+						<span class="del_t">교환받을 상품을 수령할 장소 선택</span>
+						<button type="button" class="btn_popup" onclick="fnChangeDeliveryAddr('chger');"><span>회수지 선택</span></button>
+					</div>
+					<div class="tbl type1">
+						<table>
+							<colgroup>
+								<col width="200">
+								<col width="*">
+							</colgroup>
+							<tbody>
+							<tr>
+								<th>성명</th>
+								<td id="chgerNm" th:text="${deliveryAddrInfo.recipNm}"></td>
+								<input type="hidden" name="chgerNm" th:value="${deliveryAddrInfo.recipNm}">
+							</tr>
+							<tr>
+								<th>연락처</th>
+								<td id="chgerPhnno" th:text="${deliveryAddrInfo.recipPhnno}"></td>
+								<input type="hidden" name="chgerPhnno" th:value="${deliveryAddrInfo.recipPhnno}">
+							</tr>
+							<tr>
+								<th>주소</th>
+								<td id="chgerAddr" th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|"></td>
+								<input type="hidden" name="chgerBaseAddr" th:value="${deliveryAddrInfo.recipBaseAddr}">
+								<input type="hidden" name="chgerDtlAddr" th:value="${deliveryAddrInfo.recipDtlAddr}">
+							</tr>
+							</tbody>
+						</table>
+					</div>
+				</section>
+				<section class="order_row" id="returnLocation">
+					<div class="order_tit">
+						<h3 class="subH3">반품하실 배송지</h3>
+					</div>
+					<div class="tbl type1">
+						<table>
+							<colgroup>
+								<col width="200">
+								<col width="*">
+							</colgroup>
+							<tbody>
+							<tr>
+								<th>성명</th>
+								<td th:text="${deliveryAddrInfo.rtnLocNm}"></td>
+								<input type="hidden" name="rtnLocNm" th:value="${deliveryAddrInfo.rtnLocNm}">
+							</tr>
+							<tr>
+								<th>연락처</th>
+								<td th:text="${deliveryAddrInfo.rtnLocTelno}"></td>
+								<input type="hidden" name="rtnLocTelno" th:value="${deliveryAddrInfo.rtnLocTelno}">
+							</tr>
+							<tr>
+								<th>주소</th>
+								<td th:text="|${deliveryAddrInfo.rtnLocBaseAddr} ${deliveryAddrInfo.rtnLocDtlAddr}|"></td>
+								<input type="hidden" name="rtnLocBaseAddr" th:value="${deliveryAddrInfo.rtnLocBaseAddr}">
+								<input type="hidden" name="rtnLocDtlAddr" th:value="${deliveryAddrInfo.rtnLocDtlAddr}">
+							</tr>
+							</tbody>
+						</table>
+					</div>
+				</section>
+				<section class="order_row">
+					<div class="order_tit">
+						<h3 class="subH3">교환 상품 받으실 주소</h3>
+						<span class="del_t">택배사에서 반품 상품을 직접 회수할 장소 선택</span>
+						<button type="button" class="btn_popup" onclick="fnChangeDeliveryAddr('recip');"><span>회수지 선택</span></button>
+					</div>
+					<div class="tbl type1">
+						<table>
+							<colgroup>
+								<col width="200">
+								<col width="*">
+							</colgroup>
+							<tbody>
+							<tr>
+								<th>성명</th>
+								<td id="recipNm" th:text="${deliveryAddrInfo.recipNm}"></td>
+								<input type="hidden" name="recipNm" th:value="${deliveryAddrInfo.recipNm}">
+							</tr>
+							<tr>
+								<th>연락처</th>
+								<td id="recipPhnno" th:text="${deliveryAddrInfo.recipPhnno}"></td>
+								<input type="hidden" name="recipPhnno" th:value="${deliveryAddrInfo.recipPhnno}">
+							</tr>
+							<tr>
+								<th>주소</th>
+								<td id="recipAddr" th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|"></td>
+								<input type="hidden" name="recipBaseAddr" th:value="${deliveryAddrInfo.recipBaseAddr}">
+								<input type="hidden" name="recipDtlAddr" th:value="${deliveryAddrInfo.recipDtlAddr}">
+							</tr>
+							</tbody>
+						</table>
+					</div>
+				</section>
+				<section class="order_row" id="addDeliveryFee" style="display:none">
+					<div class="ship_fee">
+						<p><span class="c_primary" id="addPayCost">2,500원</span> 배송비 추가 결제가 필요합니다.</p>
+						<input type="hidden" name="addPayCost"/>
+					</div>
+				</section>
+				<div class="btn_wrap">
+					<button type="button" class="btn btn_default cancle_btn" onclick="cfnGoToPage(_PAGE_MYPAGE_CRS_LIST)"><span>교환 취소</span></button>
+					<button tyep="submit" class="btn btn_primary submit_btn" onclick="fnExchange()"><span id="exchangeButton">교환 신청</span></button>
+				</div>
+			</div>
+		</div>
+	</div>
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+	$(document).ready(function() {
+		// 마이페이지 LNB 설정
+		fnSetMypageLnbList(2);
+		
+		// 마이페이지 location 설정
+		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRS_LIST', '교환 신청');
+	});
+	
+	// 교환 옵션 변경 팝업
+	var fnChangeOption = function(param) {
+		// TODO
+		// 옵션변경 처리
+	}
+	
+	// 회수지, 교환지 설정 팝업
+	var fnChangeDeliveryAddr = function(param) {
+		// TODO
+		// 회수지, 교환지 설정
+	}
+	
+	// 교환 처리
+	var fnExchange = function() {
+		// TODO
+		// 교환신청 처리
+	}
+	
+	// 교환 사유 변경 이벤트
+	var fnChangeReason = function(param) {
+		let chgReason = $(param).val();
+		// TODO
+		// 사유 변경 처리
+		alert('a');
+		console.log($('#exchangeList tr'));
+		$.each($('#exchangeList tr'), function(idx, item) {
+			console.log(item);
+		})
+	}
+</script>
+
+</th:block>
+
+</body>
+</html>

+ 51 - 108
src/main/webapp/WEB-INF/views/web/mypage/MypageOrderDetailFormWeb.html

@@ -41,9 +41,9 @@
 								<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>
+								<span class="order_label02" th:if="${oneData.shotDelv}">총알배송</span>
+								<span class="order_label01" th:if="${oneData.selfMall}">STYLE24 일반배송</span>
+								<span class="order_label01" th:if="${oneData.supplyMall}">업체직배송</span>
 								<!-- //배송구분 설정 -->
 <!--								<a href="javascript:void(0)" class="detail_btn" th:attr="ordNo=${oneData.ordNo}" onclick="fnGoToOrderDetail(this)">주문상세보기</a>-->
 							</div>
@@ -58,6 +58,7 @@
 										<th:block th:if="${order.ordDtlList}" th:each="ordDtl, status : ${order.ordDtlList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
 											<input type="hidden" name="ordDtlNo" th:value="${ordDtl.ordDtlNo}"/>
 											<input type="hidden" name="ordDtlStat" th:value="${ordDtl.ordDtlStat}"/>
+											<input type="hidden" name="reviewSq" th:value="${ordDtl.reviewSq}"/>
 											<tr class="bundle_row">
 												<td>
 													<div class="info_item">
@@ -77,7 +78,7 @@
 																<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>
+															<button type="button" class="btn btn_dark cart_btn" onclick="fnCreateCart(this);">쇼핑백 담기</button>
 														</div>
 														<div class="info_calc">
 															<p class="price">
@@ -94,9 +95,10 @@
 														<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="${ordDtl.reviewSq == 0}"><span>리뷰작성</span></button>
+														<button type="button" class="btn btn_default btn_sm" onclick="fnCreateExchange(this, 'exchange');"><span>교환</span></button>
+														<button type="button" class="btn btn_default btn_sm" onclick="fnCreateCancel(this, 'cancel');"><span>반품/취소</span></button>
+<!--														<button type="button" class="btn btn_default btn_sm" th:if="${ordDtl.reviewSq == 0}" th:attr="ordNo=${oneData.ordNo}" onclick="fnCreateReview(this);"><span>리뷰작성</span></button>-->
+														<button type="button" class="btn btn_default btn_sm" th:if="${!order.review}" th:attr="ordNo=${oneData.ordNo}" onclick="fnCreateReview(this);"><span>리뷰작성</span></button>
 													</div>
 												</td>
 												<td class="merge_row" th:if="${oneData.giftPackYn == 'Y' and #strings.isEmpty(ordDtl.recipBaseAddr)}">
@@ -106,7 +108,7 @@
 														<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>
+														<button type="button" class="btn btn_dark btn_sm" onclick="fnReSendSms(this);"><span>SMS 재전송</span></button>
 													</div>
 												</td>
 												<td class="merge_row" th:if="${oneData.giftPackYn == 'Y' and !#strings.isEmpty(ordDtl.recipBaseAddr)}">
@@ -122,48 +124,46 @@
 										</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" 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: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" th:attr="ordNo=${oneData.ordNo}, invoiceNo=${order.invoiceNo}, shipCompCd=${order.shipCompCd}" onclick="fnGetDeliveryInfo(this)">배송조회</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" banner="banner" onclick="fnCreateReview(this, 'Y');">리뷰작성</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" onclick="fnCreateCart(this, 'Y');">장바구니 담기</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: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>
 						</div>
@@ -238,10 +238,10 @@
 								<col width="*">
 							</colgroup>
 							<tbody>
-							<tr>
+							<tr th:if="${deliveryAddrInfo.recipNm}">
 								<td th:text="${deliveryAddrInfo.recipNm}"><span class="sr-only">배송지명</span></td>
 							</tr>
-							<tr>
+							<tr th:if="${${deliveryAddrInfo.recipBaseAddr}}">
 								<td th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|"><span class="sr-only">배송 주소</span></td>
 							</tr>
 							<tr>
@@ -406,63 +406,6 @@
 <script th:inline="javascript">
 	let ordNo = [[${ordNo}]];
 	
-	// 주문 내역 삭제 처리
-	var fnDeleteOrder = function() {
-		mcxDialog.confirm('주문 내역을 삭제하시겠습니까?', {
-			cancelBtnText: "취소",
-			sureBtnText: "확인",
-			sureBtnClick: function(){
-				let data = {};
-				
-				data.ordNo = ordNo;
-				
-				var jsonData = JSON.stringify(data);
-				gagajf.ajaxJsonSubmit('/mypage/order/delete'
-					, jsonData
-					, function() {
-						cfnGoToPage(_PAGE_MYPAGE);
-					});
-			}
-		});
-	};
-	
-	// 구매확정 처리
-	var fnDecideOrder = function(param) {
-		let ordDtlNoArr = $(param).parent().parent().find('input[name=ordDtlNo]');
-		let ordDtlStatArr = $(param).parent().parent().find('input[name=ordDtlStat]');
-		
-		console.log($(param).parent().parent().find('input[name=ordDtlNo]'));
-		let orderDecisionArr = [];
-		$.each(ordDtlNoArr, function(idx, item) {
-			if (ordDtlStatArr[idx].value == 'G013_60') {
-				orderDecisionArr.push(item.value);
-			}
-		});
-
-		if (orderDecisionArr.length == 0) {
-			mcxDialog.alert('구매확정 가능한 상품이 없습니다.');
-			return false;
-		}
-
-		mcxDialog.confirm('구매확정 처리를 하시겠습니까?', {
-			cancelBtnText: "취소",
-			sureBtnText: "확인",
-			sureBtnClick: function(){
-				let data = {};
-				
-				data.ordNo = ordNo;
-				data.ordDtlNoArr = orderDecisionArr;
-				
-				var jsonData = JSON.stringify(data);
-				gagajf.ajaxJsonSubmit('/mypage/order/decision'
-					, jsonData
-					, function() {
-						cfnGoToPage(_PAGE_MYPAGE_ORDER_DETAIL + ordNo);
-					});
-			}
-		});
-	}
-	
 	// 배송메모 변경 버튼 클릭 이벤트
 	var fnChangeDelvMemo = function() {
 		// TODO

+ 37 - 8
src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListFormWeb.html

@@ -19,6 +19,18 @@
 <body>
 
 <th:block layout:fragment="content">
+	<form id="exchangeForm" name="exchangeForm" action="#" th:action="@{'/mypage/exchange/form'}" th:method="post">
+		<input type="hidden" name="ordNo"/>
+		<input type="hidden" name="ordDtlNoArr"/>
+	</form>
+	<form id="cancelForm" name="cancelForm" th:action="@{'/mypage/cancel/form'}" th:method="post">
+		<input type="hidden" name="ordNo"/>
+		<input type="hidden" name="ordDtlNoArr"/>
+	</form>
+	<form id="reviewForm" name="reviewForm" th:action="@{'/mypage/review/form'}" th:method="post">
+		<input type="hidden" name="ordNo"/>
+		<input type="hidden" name="ordDtlNoArr"/>
+	</form>
 	<div class="my_cont">
 		<div class="sec_head">
 			<h3 class="mem_name"><strong th:text="${customerInfo.custNm}"></strong>님 반갑습니다.</h3>
@@ -95,10 +107,10 @@
 				</div>
 				<div class="sch_right">
 					<div class="sch_datepicker sb">
-						<input type="text" class="n_input my_datepicker" name="stDate" value="" id="stDate">
+						<input type="text" class="n_input my_datepicker" name="stDate" value="" id="stDate" onchange="fnCheckPeriod(this);">
 					</div>
 					<div class="sch_datepicker">
-						<input type="text" class="n_input my_datepicker" name="edDate" value="" id="edDate">
+						<input type="text" class="n_input my_datepicker" name="edDate" value="" id="edDate" onchange="fnCheckPeriod(this);">
 					</div>
 					<button type="button" class="btn btn_dark" onclick="fnSearchOrderList();">조회</button>
 				</div>
@@ -110,6 +122,7 @@
 	</div>
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
+	let ordNo = [[${ordNo}]];
 	let customerInfo = [[${customerInfo}]];
 /*<![CDATA[*/
 	$(document).ready(function() {
@@ -129,12 +142,6 @@
 		fnSearchOrderList(1);
 	});
 	
-	// 주문상세보기 버튼 클릭 이벤트 처리
-	var fnGoToOrderDetail = function(param) {
-		let ordNo = $(param).attr('ordNo');
-		cfnGoToPage(_PAGE_MYPAGE_ORDER_DETAIL + ordNo);
-	}
-	
 	// 검색기간 버튼 클릭 이벤트 처리
 	var fnSetSearchPeriod = function(period) {
 		let date = new Date();
@@ -190,6 +197,28 @@
 			}
 		});
 	}
+	
+	// 검색기간 설정 체크
+	var fnCheckPeriod = function(param) {
+		let stDate = $('#stDate').val();
+		let edDate = $('#edDate').val();
+
+		let sdt = new Date(stDate);
+		let edt = new Date(edDate);
+		let dateDiff = Math.ceil((edt.getTime() - sdt.getTime()) / (1000 * 3600 * 24));
+
+		if (dateDiff > 366) {
+			let id = $(param).attr('id');
+			mcxDialog.alert('조회기간은 최대 1년을 넘을 수 없습니다.');
+			if (id == 'stDate') {
+				sdt.setFullYear(sdt.getFullYear() + 1);
+				$('#edDate').val(sdt.getFullYear() + '-' + ('0' + (sdt.getMonth() + 1)).slice(-2) + '-' + ('0' + (sdt.getDate())).slice(-2));
+			} else {
+				edt.setFullYear(edt.getFullYear() - 1);
+				$('#stDate').val(edt.getFullYear() + '-' + ('0' + (edt.getMonth() + 1)).slice(-2) + '-' + ('0' + (edt.getDate())).slice(-2));
+			}
+		}
+	}
 /*]]>*/
 </script>
 

+ 51 - 49
src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListWeb.html

@@ -25,9 +25,9 @@
 			<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>
+			<span class="order_label02" th:if="${oneData.shotDelv}">총알배송</span>
+			<span class="order_label01" th:if="${oneData.selfMall}">STYLE24 일반배송</span>
+			<span class="order_label01" th:if="${oneData.supplyMall}">업체직배송</span>
 			<!-- //배송구분 설정 -->
 			<a href="javascript:void(0)" class="detail_btn" th:attr="ordNo=${oneData.ordNo}" onclick="fnGoToOrderDetail(this)">주문상세보기</a>
 		</div>
@@ -40,6 +40,9 @@
 					</colgroup>
 					<tbody>
 						<th:block th:if="${order.ordDtlList}" th:each="ordDtl, status : ${order.ordDtlList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+						<input type="hidden" name="ordDtlNo" th:value="${ordDtl.ordDtlNo}"/>
+						<input type="hidden" name="ordDtlStat" th:value="${ordDtl.ordDtlStat}"/>
+						<input type="hidden" name="reviewSq" th:value="${ordDtl.reviewSq}"/>
 						<tr class="bundle_row">
 							<td>
 								<div class="info_item">
@@ -75,9 +78,10 @@
 									<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>
+									<button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${oneData.ordNo}" onclick="fnCreateChange(this, 'exchange');"><span>교환</span></button>
+									<button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${oneData.ordNo}" onclick="fnCreateChange(this, 'cancel');"><span>반품/취소</span></button>
+<!--									<button type="button" class="btn btn_default btn_sm" th:if="${ordDtl.reviewSq == 0}" th:attr="ordNo=${oneData.ordNo}" onclick="fnCreateReview(this);"><span>리뷰작성</span></button>-->
+									<button type="button" class="btn btn_default btn_sm" th:if="${!order.review}" th:attr="ordNo=${oneData.ordNo}" onclick="fnCreateReview(this);"><span>리뷰작성</span></button>
 								</div>
 							</td>
 							<td class="merge_row" th:if="${oneData.giftPackYn == 'Y' and #strings.isEmpty(ordDtl.recipBaseAddr)}">
@@ -87,7 +91,7 @@
 									<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>
+									<button type="button" class="btn btn_dark btn_sm" th:attr="ordNo=${oneData.ordNo}" onclick="fnReSendSms(this);"><span>SMS 재전송</span></button>
 								</div>
 							</td>
 							<td class="merge_row" th:if="${oneData.giftPackYn == 'Y' and !#strings.isEmpty(ordDtl.recipBaseAddr)}">
@@ -103,48 +107,46 @@
 					</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: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" th:attr="ordNo=${oneData.ordNo}, invoiceNo=${order.invoiceNo}, shipCompCd=${order.shipCompCd}" onclick="fnGetDeliveryInfo(this)">배송조회</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.review}">
+					<span class="cf_txt">리뷰를 작성하면 다른 구매자에게 도움이 될 수 있습니다.</span>
+					<button type="button" class="btn btn_primary" onclick="fnCreateReview(this, 'Y');">리뷰작성</button>
+				</div>
+				<div class="order_confirm" th:if="${order.ordDtlStat == 'G013_70' and order.review}">
+					<span class="cf_txt">주문내역 다시 구매하기 위해</span>
+					<button type="button" class="btn btn_primary" onclick="fnCreateCart(this, 'Y');">장바구니 담기</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>
 	</div>

+ 1 - 1
src/main/webapp/ux/style24_link.js

@@ -103,7 +103,7 @@ var cfnOpenCellphoneCertify = function (redirectUrl, custparams) {
 			document.location.href = actionUrl;
 		}
 	}
-};
+}
 
 /**
  * @type   : function