Sfoglia il codice sorgente

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

jsh77b 5 anni fa
parent
commit
a3c6352e71
49 ha cambiato i file con 2284 aggiunte e 541 eliminazioni
  1. 14 1
      pom.xml
  2. 2 3
      src/main/java/com/style24/front/biz/dao/TsfCommonDao.java
  3. 9 0
      src/main/java/com/style24/front/biz/dao/TsfCustomerDao.java
  4. 6 5
      src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java
  5. 20 0
      src/main/java/com/style24/front/biz/dao/TsfGiftcardDao.java
  6. 7 7
      src/main/java/com/style24/front/biz/service/TsfCartService.java
  7. 3 4
      src/main/java/com/style24/front/biz/service/TsfCommonService.java
  8. 58 31
      src/main/java/com/style24/front/biz/service/TsfCustomerService.java
  9. 115 31
      src/main/java/com/style24/front/biz/service/TsfDisplayService.java
  10. 73 13
      src/main/java/com/style24/front/biz/service/TsfGiftcardService.java
  11. 34 24
      src/main/java/com/style24/front/biz/service/TsfOrderService.java
  12. 2 3
      src/main/java/com/style24/front/biz/thirdparty/KaKaoLogin.java
  13. 7 10
      src/main/java/com/style24/front/biz/thirdparty/NaverLogin.java
  14. 5 4
      src/main/java/com/style24/front/biz/thirdparty/NiceCertify.java
  15. 104 0
      src/main/java/com/style24/front/biz/thirdparty/Yes24Giftcard.java
  16. 7 5
      src/main/java/com/style24/front/biz/web/TsfCartController.java
  17. 17 10
      src/main/java/com/style24/front/biz/web/TsfCustomerController.java
  18. 32 26
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  19. 148 18
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  20. 43 2
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  21. 53 1
      src/main/java/com/style24/front/biz/web/TsfPgController.java
  22. 1 1
      src/main/java/com/style24/front/support/interceptor/TsfAflinkInterceptor.java
  23. 1 4
      src/main/java/com/style24/persistence/domain/GnbTab.java
  24. 25 11
      src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml
  25. 3 3
      src/main/java/com/style24/persistence/mybatis/shop/TsfCommon.xml
  26. 16 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfCustomer.xml
  27. 35 10
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  28. 28 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfGiftcard.xml
  29. 5 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml
  30. 0 1
      src/main/resources/config/application-locd.yml
  31. 17 0
      src/main/resources/config/application-tsit.yml
  32. 66 0
      src/main/webapp/WEB-INF/views/mob/cart/CartListFormMob.html
  33. 0 42
      src/main/webapp/WEB-INF/views/mob/order/OrderNoMemberMob.html
  34. 9 8
      src/main/webapp/WEB-INF/views/mob/pg/kcpOrderMob.html
  35. 0 0
      src/main/webapp/WEB-INF/views/web/cart/CartChangeOptionPopupWeb.html
  36. 26 10
      src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html
  37. 0 0
      src/main/webapp/WEB-INF/views/web/cart/CartListFormWeb.html
  38. 96 98
      src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html
  39. 9 1
      src/main/webapp/WEB-INF/views/web/customer/JoinFormWeb.html
  40. 132 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustConfirmFormWeb.html
  41. 290 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustModifyFormWeb.html
  42. 180 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustSecedeFormWeb.html
  43. 93 12
      src/main/webapp/WEB-INF/views/web/mypage/MypageGiftcardFormWeb.html
  44. 171 8
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListFormWeb.html
  45. 136 129
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListWeb.html
  46. 167 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListWeb_20210315.html
  47. 14 3
      src/main/webapp/ux/mo/js/payment.js
  48. 1 1
      src/main/webapp/ux/pc/css/common.css
  49. 4 1
      src/main/webapp/ux/style24_link.js

+ 14 - 1
pom.xml

@@ -137,6 +137,19 @@
 			<scope>system</scope>
 			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/CtCli-1.0.6.jar</systemPath>
 		</dependency>
+		<!-- 상품권 인증  -->
+		<dependency>
+			<groupId>org.apache.cxf</groupId>
+			<artifactId>cxf-rt-frontend-jaxws</artifactId>
+			<version>2.7.11</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.cxf</groupId>
+			<artifactId>cxf-rt-transports-http</artifactId>
+			<version>2.7.11</version>
+		</dependency>
+
+		<!--//NICE 본인인증-->
 		<!-- \\\ WEB-INF lib -->
 	</dependencies>
 	
@@ -157,4 +170,4 @@
 			</resource>
 		</resources>
 	</build>
-</project>
+</project>

+ 2 - 3
src/main/java/com/style24/front/biz/dao/TsfCommonDao.java

@@ -26,13 +26,12 @@ public interface TsfCommonDao {
 //	String getSiteName(String siteCd);
 
 	/**
-	 * 제휴링크 이력 생성
-	 *
+	 * 웹제휴채널이력 생성
 	 * @param inflow - 유입경로 정보
 	 * @author eskim
 	 * @date 2021. 02. 09
 	 */
-	void createInflowHst(InflowHst inflow);
+	void createInflowHistory(InflowHst inflow);
 
 //	/**
 //	 * 기본답변문구내용 조회

+ 9 - 0
src/main/java/com/style24/front/biz/dao/TsfCustomerDao.java

@@ -124,4 +124,13 @@ public interface TsfCustomerDao {
 	 * @since 2021. 03. 11
 	 */
 	int updatePasswordDate(Customer customer);
+
+	/**
+	 * 본인인증을 통한 정보수정
+	 * @param customer - 고객정보
+	 * @return int - 결과
+	 * @author jsshin
+	 * @since 2021. 03. 15
+	 */
+	int updateCustomerAuth(Customer customer);
 }

+ 6 - 5
src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java

@@ -1,6 +1,7 @@
 package com.style24.front.biz.dao;
 
 import java.util.Collection;
+import java.util.List;
 
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.BrandGroup;
@@ -56,7 +57,7 @@ public interface TsfDisplayDao {
 	 * @author gagamel
 	 * @since 2021. 3. 11
 	 */
-	Collection<Cate1> getCategory1List(Cate4Srch cate);
+	List<Cate1> getCategory1List(Cate4Srch cate);
 
 	/**
 	 * 카테고리2 목록
@@ -65,7 +66,7 @@ public interface TsfDisplayDao {
 	 * @author gagamel
 	 * @since 2021. 3. 11
 	 */
-	Collection<Cate2> getCategory2List(Cate4Srch cate);
+	List<Cate2> getCategory2List(Cate4Srch cate);
 
 	/**
 	 * 카테고리3 목록
@@ -74,7 +75,7 @@ public interface TsfDisplayDao {
 	 * @author gagamel
 	 * @since 2021. 3. 11
 	 */
-	Collection<Cate3> getCategory3List(Cate4Srch cate);
+	List<Cate3> getCategory3List(Cate4Srch cate);
 
 	/**
 	 * 카테고리4 목록
@@ -83,7 +84,7 @@ public interface TsfDisplayDao {
 	 * @author gagamel
 	 * @since 2021. 3. 11
 	 */
-	Collection<Cate4> getCategory4List(Cate4Srch cate);
+	List<Cate4> getCategory4List(Cate4Srch cate);
 
 	/**
 	 * 카테고리5 목록
@@ -92,6 +93,6 @@ public interface TsfDisplayDao {
 	 * @author gagamel
 	 * @since 2021. 3. 11
 	 */
-	Collection<Cate5> getCategory5List(Cate4Srch cate);
+	List<Cate5> getCategory5List(Cate4Srch cate);
 
 }

+ 20 - 0
src/main/java/com/style24/front/biz/dao/TsfGiftcardDao.java

@@ -40,4 +40,24 @@ public interface TsfGiftcardDao {
 	 * @since 2021. 3. 12
 	 */	
 	Collection<GiftCard> getGiftcardOwnList(GiftCard giftcard);
+	
+	/**
+	 * 상품권정보 저장
+	 *
+	 * @param GiftCard
+	 * @author sowon
+	 * @since 2021. 3. 15
+	 */	
+	 void getGiftcardUseConfirm(GiftCard giftcard);
+	 
+	 /**
+	 * 상품권 api 저장
+	 *
+	 * @param GiftCard
+	 * @author sowon
+	 * @since 2021. 3. 15
+	 */
+	 void saveGiftcardApi(GiftCard giftcard);
+	 
+	 
 }

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

@@ -331,16 +331,16 @@ public class TsfCartService {
 					cart.setTmtbDcAmt(cart.getCurrPrice());
 				}
 			}
+		}
 
-			// 장바구니 업체별 배송비 계산
-			setCartListDelvFeeInfo(cartGoodsList);
+		// 장바구니 업체별 배송비 계산
+		setCartListDelvFeeInfo(cartGoodsList);
 
-			// 자사 / 입점업체 리스트 분리
-			order = getCartDelvGoodsCntList(cartGoodsList);
+		// 자사 / 입점업체 리스트 분리
+		order = getCartDelvGoodsCntList(cartGoodsList);
 
-			// 총계 금액 계산
-			setCartListTotAmtInfo(cartGoodsList, order);
-		}
+		// 총계 금액 계산
+		setCartListTotAmtInfo(cartGoodsList, order);
 
 		return order;
 	}

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

@@ -42,14 +42,13 @@ public class TsfCommonService {
 //	}
 
 	/**
-	 * 유입경로 이력 생성
-	 *
+	 * 유입경로이력(웹제휴채널) 생성
 	 * @param afLinkCd - 제휴링크코드
 	 * @author eskim
 	 * @date 2021. 02. 09
 	 */
 	@Transactional("shopTxnManager")
-	public void createInflowHst(InflowHst inflow) {
+	public void createInflowHistory(InflowHst inflow) {
 		inflow.setSiteCd(TscConstants.Site.STYLE24.value());
 		inflow.setInflowRefer(TsfSession.getHttpServletRequest().getHeader("referer"));
 		inflow.setIpAddr(TsfSession.getIpAddress());
@@ -70,7 +69,7 @@ public class TsfCommonService {
 			}
 		}
 
-		commonDao.createInflowHst(inflow);
+		commonDao.createInflowHistory(inflow);
 	}
 
 //	/**

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

@@ -1,20 +1,8 @@
 package com.style24.front.biz.service;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-import com.style24.core.biz.service.TscEnvsetService;
-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 org.springframework.transaction.annotation.Transactional;
-
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.gagaframework.web.parameter.GagaMap;
+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;
@@ -27,11 +15,18 @@ import com.style24.persistence.domain.CustSnsInfo;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.Login;
 import com.style24.persistence.domain.WishList;
-
 import lombok.extern.slf4j.Slf4j;
+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 org.springframework.transaction.annotation.Transactional;
 
-import com.gagaframework.web.parameter.GagaMap;
-import com.gagaframework.web.security.GagaPasswordEncoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
 
 /**
  * 고객(회원) Service
@@ -283,8 +278,6 @@ public class TsfCustomerService {
 		boolean isJoin = true;
 		customer.setEncodedPasswd(" ");
 		customer.setCustId(customer.getSnsType()+"_"+customer.getSnsId());
-		String gender = "G007_"+customer.getSexGb();
-		customer.setSexGb(gender);
 		customer.encryptData();
 
 		customer.setSiteCd(TscConstants.Site.STYLE24.value());
@@ -654,6 +647,7 @@ public class TsfCustomerService {
 	 * @author jsshin
 	 * @since 2021. 03. 08
 	 */
+	@Transactional("shopTxnManager")
 	public GagaMap releaseDormantCustomer(Customer customer) {
 		GagaMap result = new GagaMap();
 
@@ -680,6 +674,7 @@ public class TsfCustomerService {
 	 * @author jsshin
 	 * @since 2021. 03. 11
 	 */
+	@Transactional("shopTxnManager")
 	public GagaMap saveCertification(Customer customer) {
 		GagaMap resultMap = new GagaMap();
 		customer.setRegNo(customer.getCustNo());
@@ -713,6 +708,7 @@ public class TsfCustomerService {
 	 * @author jsshin
 	 * @since 2021. 03. 11
 	 */
+	@Transactional("shopTxnManager")
 	public GagaMap updatePasswordDate(Customer customer) {
 		GagaMap resultMap = new GagaMap();
 		boolean isSuccess = false;
@@ -733,20 +729,51 @@ public class TsfCustomerService {
 
 		return resultMap;
 	}
-	
+
 	/**
-	 * 해당 고객번호로 가입된 정보 확인
-	 * @param custNo - 연계정보
-	 * @return Customer
-	 * @author eskim
-	 * @since 2021. 03. 12
+	 * 비밀번호 맞는지 확인
+	 * @param customer - 고객정보
+	 * @return boolean
+	 * @author jsshin
+	 * @since 2021. 03. 15
 	 */
-	public Customer getCustomerFindByCustNo(int custNo) {
-		TscSession.setAttribute("maskingYn","Y");
-		Customer customer = new Customer();
-		customer.setCustNo(custNo);
-		customer.setSiteCd(TscConstants.Site.STYLE24.value());
+	public boolean customerPasswordConfirm(Customer customer) {
+		boolean isMatch = false;
+		Login login = new Login();
+		login.setCustNo(TsfSession.getInfo().getCustNo());
+		Login loginCheckInfo = loginService.getLoginCheckInfo(login);
+
+		if (loginCheckInfo != null) {
+			isMatch = passwordEncoder.matchesSha256(customer.getPasswd(), loginCheckInfo.getPasswd());
+		}
+
+		return isMatch;
+	}
+
+	/**
+	 * 본인인증을 통한 이름, 휴대전화번호 수정
+	 * @param customer - 고객정보
+	 * @return GagaMap
+	 * @author jsshin
+	 * @since 2021. 03. 15
+	 */
+	@Transactional("shopTxnManager")
+	public GagaMap updateCustomerAuth(Customer customer) {
+		GagaMap result = new GagaMap();
+		customer.setRegNo(customer.getCustNo());
+		customer.setUpdNo(customer.getCustNo());
+		customer.setHypenCellPhone();
 		customer.encryptData();
-		return customerDao.getCustomerInfo(customer);
+		// 1. 이력쌓고
+		coreCustomerService.createCustomerHistory(customer);
+
+		// 2. 이름, 휴대전화 번호 저장
+		int updateCnt = customerDao.updateCustomerAuth(customer);
+
+		boolean iSsuccess = updateCnt > 0; // 변경 성공시 true
+
+		result.setBoolean("iSsuccess", iSsuccess);
+
+		return result;
 	}
 }

+ 115 - 31
src/main/java/com/style24/front/biz/service/TsfDisplayService.java

@@ -1,16 +1,25 @@
 package com.style24.front.biz.service;
 
-import com.style24.core.support.env.TscConstants;
-import com.style24.front.biz.dao.TsfDisplayDao;
-import com.style24.front.support.env.TsfConstants;
-import com.style24.persistence.domain.*;
-import lombok.extern.slf4j.Slf4j;
+import java.util.Collection;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.Collection;
+import com.style24.core.biz.service.TscEnvsetService;
+import com.style24.core.support.env.TscConstants;
+import com.style24.front.biz.dao.TsfDisplayDao;
+import com.style24.front.support.env.TsfConstants;
+import com.style24.persistence.domain.BrandGroup;
+import com.style24.persistence.domain.Cate1;
+import com.style24.persistence.domain.Cate2;
+import com.style24.persistence.domain.Cate3;
+import com.style24.persistence.domain.Cate4;
+import com.style24.persistence.domain.Cate4Srch;
+import com.style24.persistence.domain.Contents;
+import com.style24.persistence.domain.GnbTab;
+
+import lombok.extern.slf4j.Slf4j;
 
 /**
  * 전시 Service
@@ -25,6 +34,9 @@ public class TsfDisplayService {
 	@Autowired
 	private TsfDisplayDao displayDao;
 
+	@Autowired
+	private TscEnvsetService envsetService;
+
 	/**
 	 * GNB 브랜드그룹 목록
 	 * @param contents - 컨텐츠 정보
@@ -32,6 +44,7 @@ public class TsfDisplayService {
 	 * @author gagamel
 	 * @since 2021. 3. 11
 	 */
+	@Cacheable(value = "commonGnb", key = "'brandGroup'")
 	public Collection<BrandGroup> getGnbBrandGroupList(Contents contents) {
 		return displayDao.getGnbBrandGroupList(contents);
 	}
@@ -43,19 +56,9 @@ public class TsfDisplayService {
 	 * @author gagamel
 	 * @date 2021. 3. 11
 	 */
-	public Collection<GnbTab> getGnbTapList(GnbTab gnbTab) {
-		// GNB 탭 목록
-		Collection<GnbTab> tapList = displayDao.getGnbTabList(gnbTab);
-
-		if (tapList != null && !tapList.isEmpty()) {
-			for (GnbTab tab : tapList) {
-				if (tab.getContentsType().equals("C") || tab.getContentsType().equals("O")) { // 컨텐츠유형:카테고리, 아울렛
-					gnbTab.setCateList(this.getCategoryList(TsfConstants.CateGb.BYITEM.value(), tab.getCate1No()));
-				}
-			}
-		}
-
-		return tapList;
+	@Cacheable(value = "commonGnb", key = "'gnbTab-'.concat(#gnbTab.gtabGb)")
+	public Collection<GnbTab> getGnbTabList(GnbTab gnbTab) {
+		return displayDao.getGnbTabList(gnbTab);
 	}
 
 	/**
@@ -69,22 +72,105 @@ public class TsfDisplayService {
 		return displayDao.getContentsList(contents);
 	}
 
+//	/**
+//	 * FULL 카테고리1 정보
+//	 * @param cateGb - 카테고리구분
+//	 * @param cate1No - 카테고리1번호
+//	 * @return
+//	 * @author gagamel
+//	 * @since 2021. 3. 11
+//	 */
+//	@Cacheable(value = "cate", key = "'cateList-'.concat(#cateGb).concat(#cate1No)")
+//	public Cate1 getFullCategory1(String cateGb, Integer cate1No) {
+//		Cate4Srch cate = new Cate4Srch();
+//		cate.setSiteCd(TscConstants.Site.STYLE24.value()); // 사이트코드
+//		cate.setCateGb(cateGb); // 카테고리구분
+//		cate.setCateType(TsfConstants.CateType.GOODS.value()); // 상품분류카테고리
+//		cate.setCate1No(cate1No);
+//		return this.getFullCategory1(cate);
+//	}
+//
+//	/**
+//	 * FULL 카테고리1 정보
+//	 * @param cate - 카테고리 정보
+//	 * @return
+//	 * @author gagamel
+//	 * @since 2021. 3. 11
+//	 */
+//	public Cate1 getFullCategory1(Cate4Srch cate) {
+//		// 카테고리1 정보
+//		Cate1 cate1 = displayDao.getCategory1List(cate).get(0);
+//
+//		if (cate1 != null) {
+//			if (cate1.getLeafYn().equals("N")) {
+//				cate.setCate1No(cate1.getCate1No());
+//
+//				// 카테고리2 목록
+//				Collection<Cate2> cate2List = displayDao.getCategory2List(cate);
+//
+//				if (cate2List != null && !cate2List.isEmpty()) {
+//					for (Cate2 cate2 : cate2List) {
+//						if (cate2.getLeafYn().equals("N")) {
+//							cate.setCate2No(cate2.getCate2No());
+//
+//							// 카테고리3 목록
+//							Collection<Cate3> cate3List = displayDao.getCategory3List(cate);
+//
+//							if (cate3List != null && !cate3List.isEmpty()) {
+//								for (Cate3 cate3 : cate3List) {
+//									if (cate3.getLeafYn().equals("N")) {
+//										cate.setCate3No(cate3.getCate3No());
+//
+//										// 카테고리4 목록
+//										Collection<Cate4> cate4List = displayDao.getCategory4List(cate);
+//
+//										if (cate4List != null && !cate4List.isEmpty()) {
+//											for (Cate4 cate4 : cate4List) {
+//												if (cate4.getLeafYn().equals("N")) {
+//													cate.setCate4No(cate4.getCate4No());
+//
+//													// 카테고리5 목록 담기
+//													cate4.setCate5List(displayDao.getCategory5List(cate));
+//												}
+//											}
+//
+//											log.info("cate4List: {}", cate4List);
+//
+//											// 카테고리4 목록 담기
+//											cate3.setCate4List(cate4List);
+//										}
+//									}
+//								}
+//
+//								// 카테고리3 목록 담기
+//								cate2.setCate3List(cate3List);
+//							}
+//						}
+//					}
+//
+//					// 카테고리2 목록 담기
+//					cate1.setCate2List(cate2List);
+//				}
+//			}
+//		}
+//
+//		return cate1;
+//	}
+
 	/**
-	 * 카테고리 목록
+	 * 전체 카테고리 목록
 	 * @param cateGb - 카테고리구분
-	 * @param cate1No - 카테고리1번호
 	 * @return
 	 * @author gagamel
 	 * @since 2021. 3. 11
 	 */
-	@Cacheable(value = "cate", key = "'cateList-'.concat(#cateGb).concat(#cate1No)")
-	public Collection<Cate1> getCategoryList(String cateGb, Integer cate1No) {
+	@Cacheable(value = "cate", key = "'allCate-'.concat(#cateGb)")
+	public Collection<Cate1> getAllCategoryList(String cateGb) {
 		Cate4Srch cate = new Cate4Srch();
 		cate.setSiteCd(TscConstants.Site.STYLE24.value()); // 사이트코드
 		cate.setCateGb(cateGb); // 카테고리구분
 		cate.setCateType(TsfConstants.CateType.GOODS.value()); // 상품분류카테고리
-		cate.setCate1No(cate1No);
-
+		cate.setSoldoutGoodsDispYn(envsetService.getSoldoutGoodsDisplayYn(TscConstants.Site.STYLE24.value()));
 		return this.getAllCategoryList(cate);
 	}
 
@@ -96,8 +182,6 @@ public class TsfDisplayService {
 	 * @since 2021. 3. 11
 	 */
 	public Collection<Cate1> getAllCategoryList(Cate4Srch cate) {
-		Collection<Cate1> fullCateList = new ArrayList<>();
-
 		// 카테고리1 목록
 		Collection<Cate1> cate1List = displayDao.getCategory1List(cate);
 
@@ -135,6 +219,8 @@ public class TsfDisplayService {
 													}
 												}
 
+												log.info("cate4List: {}", cate4List);
+
 												// 카테고리4 목록 담기
 												cate3.setCate4List(cate4List);
 											}
@@ -151,12 +237,10 @@ public class TsfDisplayService {
 						cate1.setCate2List(cate2List);
 					}
 				}
-
-				fullCateList.add(cate1);
 			}
 		}
 
-		return fullCateList;
+		return cate1List;
 	}
 
 }

+ 73 - 13
src/main/java/com/style24/front/biz/service/TsfGiftcardService.java

@@ -1,11 +1,13 @@
 package com.style24.front.biz.service;
 
 import java.util.Collection;
+import java.util.Map;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.style24.front.biz.dao.TsfGiftcardDao;
+import com.style24.front.biz.thirdparty.Yes24Giftcard;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.GiftCard;
 
@@ -23,51 +25,109 @@ public class TsfGiftcardService {
 
 	@Autowired
 	private TsfGiftcardDao giftcardDao;
-	
+
+	@Autowired
+	private Yes24Giftcard yes24Gift;
+
 	/**
 	 * 상품권정보 조회
 	 *
 	 * @param GiftCard
 	 * @author sowon
 	 * @since 2021. 3. 12
-	 */	
+	 */
 	public GiftCard getGiftcardInfo(GiftCard giftcard) {
-		
+
 		// 고객번호 설정
 		int custNo = TsfSession.getInfo().getCustNo();
 		giftcard.setCustNo(custNo);
-		
-		return giftcardDao.getGiftcardInfo(giftcard);		
+
+		return giftcardDao.getGiftcardInfo(giftcard);
 	}
-	
+
 	/**
 	 * 상품권 사용 정보 조회
 	 *
 	 * @param GiftCard
 	 * @author sowon
 	 * @since 2021. 3. 12
-	 */	
-	public Collection<GiftCard> getGiftcardUseList(GiftCard giftcard){
+	 */
+	public Collection<GiftCard> getGiftcardUseList(GiftCard giftcard) {
 		// 고객번호 설정
 		int custNo = TsfSession.getInfo().getCustNo();
 		giftcard.setCustNo(custNo);
-		
+		giftcard.setMonthLength(giftcard.getMonth().length());
+
 		return giftcardDao.getGiftcardUseList(giftcard);
 	}
-	
+
 	/**
 	 * 상품권 보유 조회
 	 *
 	 * @param GiftCard
 	 * @author sowon
 	 * @since 2021. 3. 12
-	 */	
-	public Collection<GiftCard> getGiftcardOwnList(GiftCard giftcard){
+	 */
+	public Collection<GiftCard> getGiftcardOwnList(GiftCard giftcard) {
 		// 고객번호 설정
 		int custNo = TsfSession.getInfo().getCustNo();
 		giftcard.setCustNo(custNo);
-		
+
 		return giftcardDao.getGiftcardOwnList(giftcard);
 	}
 
+	/**
+	 * 상품권 저장
+	 * 
+	 * @param GiftCard
+	 * @author sowon
+	 * @throws Exception
+	 * @since 2021. 3. 15
+	 */
+	public void getGiftcardUseConfirm(GiftCard giftcard) throws Exception {
+		// 고객번호 설정
+		int custNo = TsfSession.getInfo().getCustNo();
+		String ip = TsfSession.getIpAddress();
+		giftcard.setCustNo(custNo);
+		giftcard.setIpAddr(ip);  // 아이피주소
+		
+		
+		String pubNo = giftcard.getGfcdNo();
+		String result =yes24Gift.soapDataTransfer(pubNo,ip,custNo);
+
+		if (result.equals("01")) {
+			giftcard.setResultVal(result);  //승인금액
+			giftcardDao.saveGiftcardApi(giftcard);
+			throw new IllegalArgumentException("존재하지 않는 상품권입니다.");
+		} else if (result.equals("02")) {
+			giftcard.setResultVal(result);  //승인금액
+			giftcardDao.saveGiftcardApi(giftcard);
+			throw new IllegalArgumentException("이미 등록된 상품권입니다.");
+		} else if (result.equals("03")) {
+			giftcard.setResultVal(result);  //승인금액
+			giftcardDao.saveGiftcardApi(giftcard);
+			throw new IllegalArgumentException("삭제된 상품권입니다.");
+		} else if (result.equals("04")) {
+			giftcard.setResultVal(result);  //승인금액
+			giftcardDao.saveGiftcardApi(giftcard);
+			throw new IllegalArgumentException("기간이 만료된 상품권입니다.");
+		} else if (result.equals("99")) {
+			giftcard.setResultVal(result);  //승인금액
+			giftcardDao.saveGiftcardApi(giftcard);
+			throw new IllegalArgumentException("시스템 오류입니다.");
+		} else {
+			String[] param = result.split("[|]");
+			//System.out.println(param[0]); -- 승인번호 00
+			giftcard.setResultVal(result);  //승인금액
+			giftcardDao.saveGiftcardApi(giftcard);
+			
+			// tb_cust_giftcard에 등록
+			giftcard.setChgGfcdAmt(Integer.parseInt(param[1])); // 승인금액
+			
+			giftcard.setUseStDate(param[2]);
+			giftcard.setUseExpDate(param[3]);
+		}
+
+	}
+
 }

+ 34 - 24
src/main/java/com/style24/front/biz/service/TsfOrderService.java

@@ -1,11 +1,7 @@
 package com.style24.front.biz.service;
 
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
 import java.util.ArrayList;
-import java.util.Calendar;
 import java.util.Collection;
-import java.util.Date;
 import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
@@ -23,6 +19,7 @@ import com.style24.core.biz.service.TscKcpService;
 import com.style24.core.biz.service.TscNaverPayService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.front.biz.dao.TsfOrderDao;
+import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.GoodsStock;
 import com.style24.persistence.domain.KakaoPay;
@@ -61,35 +58,47 @@ public class TsfOrderService {
 	private TsfGoodsService goodsService;
 
 	/**
-	 * 마이페이지 검색 기간 영역 설정
+	 * 마이페이지 주문 정보 조회
 	 *
-	 * @return int[]
+	 * @param Order
 	 * @author card007
-	 * @since 2021. 02. 08
+	 * @since 2021. 02. 04
 	 */
-	public String[] getSearchPeriod() {
-		String[] period = new String[6];
+	public Collection<GagaMap> getOrderListForMypage(Order order) {
+		int ordNo = 0;
+		int index = 0;
+		Collection<GagaMap> orderList = new ArrayList<>();
+		Collection<Order> ordDtlList = new ArrayList<>();
+
+		for (Order tmpOrder : orderDao.getOrderListForMypage(order)) {
+			if (index > 0 && ordNo != tmpOrder.getOrdNo()) {
+				orderList.add(setOrderMap(ordDtlList));
 
-		Calendar cal = Calendar.getInstance();
-		cal.setTime(new Date());
-		DateFormat df = new SimpleDateFormat("MM");
+				ordDtlList = new ArrayList<>();
+			} else {
+				ordDtlList.add(tmpOrder);
+			}
 
-		for (int i = 5; i > -1; i--) {
-			period[i] = df.format(cal.getTime()) + "월";
-			cal.add(Calendar.MONTH, -1);
+			ordNo = tmpOrder.getOrdNo();
+			index++;
 		}
+
+		orderList.add(setOrderMap(ordDtlList));
 		
-		return period; 
+		return orderList;
+	}
+	
+	private GagaMap setOrderMap(Collection<Order> ordDtlList) {
+		GagaMap map = new GagaMap();
+		map.set("giftPackYn", ordDtlList.iterator().next().getGiftPackYn());
+		map.set("ordNo", ordDtlList.iterator().next().getOrdNo());
+		map.set("ordDt", ordDtlList.iterator().next().getOrdDt());
+		map.set("ordDtlList", ordDtlList);
+
+		return map;
 	}
 
-	/**
-	 * 마이페이지 주문 정보 조회
-	 *
-	 * @param Order
-	 * @author card007
-	 * @since 2021. 02. 04
-	 */
-	public Collection<GagaMap> getOrderListForMypage(Order order) {
+	public Collection<GagaMap> getOrderListForMypageBak(Order order) {
 		Collection<GagaMap> mapList = new ArrayList<>();
 		Collection<GagaMap> orderList = new ArrayList<>();
 		List<Order> ordDtlList = new ArrayList<>();
@@ -356,6 +365,7 @@ public class TsfOrderService {
 
 	public Payment setPgDataInfo(Order order) {
 		Payment payment;
+		order.setFrontGb(TsfSession.getFrontGb());
 		if(TscConstants.PgGb.KAKAO.value().equals(order.getPgGb())) {			// 카카오페이
 			KakaoPay kakaoPay = coreKakaoPayService.kakaoPaymentReady(order);
 			payment = coreKakaoPayService.setKakaoOrderData(kakaoPay, order);

+ 2 - 3
src/main/java/com/style24/front/biz/thirdparty/KaKaoLogin.java

@@ -5,9 +5,9 @@ import com.gagaframework.web.util.GagaFileUtil;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.google.gson.JsonObject;
-import com.google.i18n.phonenumbers.NumberParseException;
 import com.google.i18n.phonenumbers.PhoneNumberUtil;
 import com.google.i18n.phonenumbers.Phonenumber;
+import com.style24.core.support.env.TscConstants;
 import com.style24.front.support.security.session.TsfSession;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -25,7 +25,6 @@ import org.springframework.web.client.RestTemplate;
 import javax.annotation.PostConstruct;
 import java.net.URI;
 import java.util.Locale;
-import java.util.UUID;
 
 
 /**
@@ -190,7 +189,7 @@ public class KaKaoLogin {
 
 			String sexGb = "";
 			if (StringUtils.isNotBlank(kakaoAccount.getString("gender"))) {
-				sexGb = kakaoAccount.getString("gender").equals("male") ? "M" : "F";
+				sexGb = kakaoAccount.getString("gender").equals("male") ? TscConstants.Gender.MALE.value() : TscConstants.Gender.FEMALE.value();
 			}
 
 			String birthSm = "";

+ 7 - 10
src/main/java/com/style24/front/biz/thirdparty/NaverLogin.java

@@ -1,14 +1,13 @@
 package com.style24.front.biz.thirdparty;
 
-import java.net.URI;
-
-import javax.annotation.PostConstruct;
-
+import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.util.GagaFileUtil;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
+import com.style24.core.support.env.TscConstants;
 import com.style24.front.support.security.session.TsfSession;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
@@ -21,10 +20,8 @@ import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
 import org.springframework.web.client.RestTemplate;
 
-import lombok.extern.slf4j.Slf4j;
-
-import com.gagaframework.web.parameter.GagaMap;
-import com.gagaframework.web.util.GagaFileUtil;
+import javax.annotation.PostConstruct;
+import java.net.URI;
 
 
 /**
@@ -162,7 +159,7 @@ public class NaverLogin {
 			String email = response.getString("email");
 			String cellphnno = response.getString("mobile");
 			String birthYmd = response.getString("birthyear") + response.getString("birthday").replaceAll("-","");
-			String sexGb = response.getString("gender");
+			String sexGb = response.getString("gender").equals("M")? TscConstants.Gender.MALE.value() : TscConstants.Gender.FEMALE.value();
 			String ci = this.requestReplace(response.getString("ci"),"encodeData");
 
 			resultMap.setString("snsId", snsId);

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

@@ -5,6 +5,7 @@ import NiceID.Check.CPClient;
 import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.util.GagaDateUtil;
 import com.gagaframework.web.util.GagaFileUtil;
+import com.style24.core.support.env.TscConstants;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Customer;
 import lombok.extern.slf4j.Slf4j;
@@ -194,9 +195,9 @@ public class NiceCertify {
 		String sforeignerYn = ""; // 외국인여부(외국인:Y)
 
 		if ("0".equals(sGender)) {
-			sGender = "F";
+			sGender = TscConstants.Gender.FEMALE.value();
 		} else if ("1".equals(sGender)) {
-			sGender = "M";
+			sGender = TscConstants.Gender.MALE.value();
 		}
 
 		if (StringUtils.isNotBlank(sBirthDate)) {
@@ -330,9 +331,9 @@ public class NiceCertify {
 			sAdult = "Y";//성인
 		}
 		if ("0".equals(sGenderCode)) {
-			sGender = "F";
+			sGender = TscConstants.Gender.FEMALE.value();
 		} else if ("1".equals(sGenderCode)) {
-			sGender = "M";
+			sGender = TscConstants.Gender.MALE.value();
 		}
 
 		if ("0".equals(sForeigner)) {

+ 104 - 0
src/main/java/com/style24/front/biz/thirdparty/Yes24Giftcard.java

@@ -0,0 +1,104 @@
+package com.style24.front.biz.thirdparty;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.StringReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.soap.MessageFactory;
+import javax.xml.soap.Node;
+import javax.xml.soap.SOAPBody;
+import javax.xml.soap.SOAPConnection;
+import javax.xml.soap.SOAPConnectionFactory;
+
+import javax.xml.soap.SOAPMessage;
+import javax.xml.soap.SOAPPart;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpression;
+import javax.xml.xpath.XPathFactory;
+
+import org.springframework.stereotype.Component;
+import org.w3c.dom.Document;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Component
+@Slf4j
+public class Yes24Giftcard {
+
+	public String soapDataTransfer(String pubNo, String ip, Integer userId) throws Exception {
+		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+		Document doc = null;
+
+		// request SOAP message DOMSource create
+		String message = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+				+ "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
+				+ "<soap:Body>" + "<Approval xmlns=\"http://tempuri.org/\">" + "<ticPubNo>" + pubNo + "</ticPubNo>"
+				+ "<ipAddress>" + ip + "</ipAddress>" + "<iStyle24UserID>" + userId + "</iStyle24UserID>"
+				+ "</Approval>" + "</soap:Body>" + "</soap:Envelope>";
+
+		OutputStreamWriter wr = null;
+		BufferedReader in = null;
+
+		String strURL = "http://api.yes24.com/Yes24GiftTicketAPI/Yes24GiftTicketService.asmx";
+
+		URL url = new URL(strURL); // 보낼 주소
+		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+
+		conn.setDoOutput(true);
+		conn.setRequestMethod("POST");
+		conn.addRequestProperty("Content-Type", "text/xml");
+		wr = new OutputStreamWriter(conn.getOutputStream());
+		wr.write(message);
+		wr.flush();
+		int code = conn.getResponseCode();
+
+		String inputLine = null;
+		StringBuffer buffer = new StringBuffer();
+		in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
+		while ((inputLine = in.readLine()) != null) {
+			buffer.append(inputLine);
+		}
+		System.out.println(buffer.toString()); // 결과 값
+
+		// xml 파싱하기
+		InputSource is = new InputSource(new StringReader(buffer.toString()));
+
+		Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is);
+
+		NodeList nodeList = null;
+		ArrayList<Map<String, String>> xmlList = new ArrayList<Map<String, String>>();
+		String getNodeName = "";
+		String childnodevalue = "";
+		if (document.getFirstChild().getChildNodes().getLength() > 0) {
+			getNodeName = document.getFirstChild().getFirstChild().getNodeName();
+
+			nodeList = document.getElementsByTagName(getNodeName);
+			
+			for (int i = 0; i < nodeList.getLength(); i++) {
+				NodeList childList = nodeList.item(i).getChildNodes();
+
+				for (int j = 0; j < childList.getLength(); j++) {
+					String childnodename = childList.item(j).getNodeName();
+					childnodevalue = childList.item(j).getTextContent();
+				}
+			}
+		} 
+
+		return childnodevalue;
+	}
+
+}

+ 7 - 5
src/main/java/com/style24/front/biz/web/TsfCartController.java

@@ -70,7 +70,7 @@ public class TsfCartController extends TsfBaseController {
 	@GetMapping("/list/form")
 	public ModelAndView cartListForm() {
 		ModelAndView mav = new ModelAndView();
-		mav.setViewName(super.getDeviceViewName("cart/cartListForm"));
+		mav.setViewName(super.getDeviceViewName("cart/CartListForm"));
 		return mav;
 	}
 
@@ -123,6 +123,10 @@ public class TsfCartController extends TsfBaseController {
 			order.setShotCanYn("Y");
 			order.setShotDelvDt(format.format(time));
 		} else {
+			SimpleDateFormat format = new SimpleDateFormat ( "MM/dd");
+			Date time = new Date();
+			order.setShotDelvDt(format.format(time));
+
 			order.setShotCanYn("N");
 			order.setShotDelvYn("N");
 		}
@@ -133,9 +137,7 @@ public class TsfCartController extends TsfBaseController {
 		model.addAttribute("delvCartList", order.getDelvCartList());
 		model.addAttribute("IMG_PATH", env.getProperty("upload.goods.view"));
 
-		log.info("CHECK SESSION CARTSQARR INFO ::: {}", TsfSession.getAttribute("cartSqArr"));
-
-		return super.getDeviceViewName("cart/cartListAjaxForm");
+		return super.getDeviceViewName("cart/CartListAjaxForm");
 	}
 
 	@ResponseBody
@@ -196,7 +198,7 @@ public class TsfCartController extends TsfBaseController {
 
 		model.addAttribute("cart", cart);
 		model.addAttribute("setType", TscConstants.GoodsType.SET.value());
-		return super.getDeviceViewName("cart/cartChangeOptionPopup");
+		return super.getDeviceViewName("cart/CartChangeOptionPopup");
 	}
 
 	/**

+ 17 - 10
src/main/java/com/style24/front/biz/web/TsfCustomerController.java

@@ -3,28 +3,24 @@ package com.style24.front.biz.web;
 import com.gagaframework.web.parameter.GagaMap;
 import com.style24.core.biz.service.TscClauseService;
 import com.style24.core.support.env.TscConstants;
+import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.core.support.session.TscSession;
+import com.style24.front.biz.service.TsfCustomerService;
 import com.style24.front.biz.service.TsfKakaoService;
 import com.style24.front.biz.thirdparty.NiceCertify;
+import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Customer;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.ibatis.mapping.ResultMap;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
-
-import com.style24.core.support.message.TscMessageByLocale;
-import com.style24.front.biz.service.TsfCustomerService;
-import com.style24.front.support.controller.TsfBaseController;
-
-import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.support.SessionStatus;
 import org.springframework.web.servlet.ModelAndView;
 
 import javax.servlet.http.HttpServletRequest;
@@ -568,6 +564,8 @@ public class TsfCustomerController extends TsfBaseController {
 		custInfo = customerService.getCustomerFindByCi(customer.getCi());	// CI 중복체크
 		if (custInfo != null) {
 			result.setString("maskingCustId", custInfo.getMaskingCustId());
+			result.setString("custStat", custInfo.getCustStat());
+			result.setString("cellPhnno", customer.getCellPhnno());
 			result.setBoolean("isFind", true);
 			return result;
 		}
@@ -575,6 +573,8 @@ public class TsfCustomerController extends TsfBaseController {
 		custInfo = customerService.getCustomerFindByCellPhnno(customer.getCellPhnno());	// 휴대전화 중복체크
 		if (custInfo != null) {
 			result.setString("maskingCustId", custInfo.getMaskingCustId());
+			result.setString("custStat", custInfo.getCustStat());
+			result.setString("cellPhnno", customer.getCellPhnno());
 			result.setBoolean("isFind", true);
 			return result;
 		}
@@ -610,8 +610,7 @@ public class TsfCustomerController extends TsfBaseController {
 		GagaMap authInfo = niceCertify.getCertifyCellPhoneResultInfo(customer);
 
 		// 2.인증통해 받은 데이터 매핑
-		String gender = "G007_"+authInfo.getString("sGender");
-		customer.setSexGb(gender);
+		customer.setSexGb(authInfo.getString("sGender"));
 		customer.setCustNm(authInfo.getString("sName"));
 		customer.setBirthYmd(authInfo.getString("sBirthDate"));
 		customer.setForeignerYn(authInfo.getString("sforeignerYn"));
@@ -790,6 +789,14 @@ public class TsfCustomerController extends TsfBaseController {
 		return mav;
 	}
 
+	/**
+	 * 비밀번호 변경 일시 변경
+	 *
+	 * @return GagaMap - 결과
+	 * @param customer - 고객정보
+	 * @author jsshin
+	 * @since 2021. 03. 11
+	 */
 	@PostMapping("/password/date/update")
 	@ResponseBody
 	public GagaMap updatePasswordDate(@RequestBody Customer customer) {

+ 32 - 26
src/main/java/com/style24/front/biz/web/TsfDisplayController.java

@@ -1,12 +1,8 @@
 package com.style24.front.biz.web;
 
-import com.style24.core.support.message.TscMessageByLocale;
-import com.style24.front.biz.service.TsfDisplayService;
-import com.style24.front.support.controller.TsfBaseController;
-import com.style24.persistence.domain.BrandGroup;
-import com.style24.persistence.domain.Contents;
-import com.style24.persistence.domain.GnbTab;
-import lombok.extern.slf4j.Slf4j;
+import java.util.Collection;
+import java.util.HashMap;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.mobile.device.Device;
 import org.springframework.stereotype.Controller;
@@ -16,8 +12,17 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
-import java.util.Collection;
-import java.util.HashMap;
+import com.style24.core.biz.service.TscEnvsetService;
+import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.front.biz.service.TsfDisplayService;
+import com.style24.front.support.controller.TsfBaseController;
+import com.style24.front.support.env.TsfConstants;
+import com.style24.persistence.domain.BrandGroup;
+import com.style24.persistence.domain.Cate1;
+import com.style24.persistence.domain.Contents;
+import com.style24.persistence.domain.GnbTab;
+
+import lombok.extern.slf4j.Slf4j;
 
 /**
  * 전시 Controller
@@ -36,6 +41,9 @@ public class TsfDisplayController extends TsfBaseController {
 	@Autowired
 	private TsfDisplayService displayService;
 
+	@Autowired
+	private TscEnvsetService envsetService;
+
 	/**
 	 * 몰 메인
 	 * @return
@@ -66,6 +74,18 @@ public class TsfDisplayController extends TsfBaseController {
 		return displayService.getGnbBrandGroupList(contents);
 	}
 
+	/**
+	 * 전체 카테고리 목록
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 3. 15
+	 */
+	@GetMapping("/all/cate/list")
+	@ResponseBody
+	public Collection<Cate1> getAllCategoryList() {
+		return displayService.getAllCategoryList(TsfConstants.CateGb.BYITEM.value());
+	}
+
 	/**
 	 * GNB 탭 목록
 	 * @param gnbTab - GNB탭 정보
@@ -74,25 +94,11 @@ public class TsfDisplayController extends TsfBaseController {
 	 * @author gagamel
 	 * @since 2020. 3. 11
 	 */
-	@GetMapping("/gnb/tap/list")
+	@GetMapping("/gnb/tab/list")
 	@ResponseBody
-	public Collection<GnbTab> getGnbTapList(GnbTab gnbTab) {
+	public Collection<GnbTab> getGnbTabList(GnbTab gnbTab) {
 		gnbTab.setGtabGb("C"); // 공통GNB
-		return displayService.getGnbTapList(gnbTab);
+		return displayService.getGnbTabList(gnbTab);
 	}
 
-//	/**
-//	 * 전체 카테고리 목록
-//	 * @return
-//	 * @throws Exception
-//	 * @author gagamel
-//	 * @since 2020. 2. 7
-//	 */
-//	@GetMapping("/all/cate/list")
-//	@ResponseBody
-//	public Collection<Cate4Srch> getAllCategoryList() {
-//		String soldoutGoodsDisplayYn = policyService.getSoldoutGoodsDisplayYn(WfoConstants.SITE_CD);
-//		return displayService.getAllCategoryList(WfoConstants.CATE_GB.BYITEM.value(), soldoutGoodsDisplayYn);
-//	}
-
 }

+ 148 - 18
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -1,21 +1,7 @@
 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.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.ResponseBody;
-import org.springframework.web.servlet.ModelAndView;
-
 import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.rest.server.GagaResponse;
 import com.gagaframework.web.rest.server.GagaResponseStatus;
 import com.style24.core.biz.service.TscCustomerService;
 import com.style24.core.biz.service.TscKakaoPayService;
@@ -33,6 +19,7 @@ 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.biz.thirdparty.NiceCertify;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.TscPageRequest;
@@ -42,8 +29,22 @@ import com.style24.persistence.domain.GiftCard;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.Point;
 import com.style24.persistence.domain.WishList;
-
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+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;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
 
 /**
  * 마이페이지 Controller
@@ -101,6 +102,9 @@ public class TsfMypageController extends TsfBaseController {
 	@Autowired
 	private TscKakaoPayService kakaoPayService;
 
+	@Autowired
+	private NiceCertify niceCertify;
+
 	/**
 	 * 마이페이지 메인 화면
 	 *
@@ -142,8 +146,8 @@ public class TsfMypageController extends TsfBaseController {
 		// 주문 상태 별 수량 조회
 		mav.addObject("orderCount", orderService.getOrderStatCount(order));
 
-		// 검색기간 설정
-		mav.addObject("searchPeriod", orderService.getSearchPeriod());
+		// 주문상세상태코드 설정
+		mav.addObject("ordDtlStatList", rendererService.getCommonCodeList("G059", "Y", new String[] {"G013_25", "G013_35", "G013_55", "G013_97", "G013_98", "G013_99"}));
 
 		mav.setViewName(super.getDeviceViewName("mypage/MypageOrderListForm"));
 
@@ -687,4 +691,130 @@ public class TsfMypageController extends TsfBaseController {
 		result.set("giftcardOwnList",giftcardService.getGiftcardOwnList(giftcard));
 		return result;
 	}
+
+	/**
+	 * 마이페이지 상품권 저장
+	 *
+	 * @return
+	 * @author sowon
+	 * @throws Exception
+	 * @since 2021. 03. 15
+	 */
+	@PostMapping("/gift/use/confirm")
+	@ResponseBody
+	public GagaResponse getGiftcardUseConfirm(@RequestBody GiftCard giftcard) throws Exception {
+
+
+		giftcardService.getGiftcardUseConfirm(giftcard);
+
+		return super.ok(message.getMessage("SUCC_0001"));
+
+
+	}
+
+
+
+
+	/*신주승 시작*/
+
+	/**
+	 * 마이페이지 - 회원정보확인 화면
+	 *
+	 * @return ModelAndView
+	 * @author jsshin
+	 * @since 2021. 03. 15
+	*/
+	@GetMapping("/customer/confirm/form")
+	public ModelAndView getCustomerConfirmForm() {
+		ModelAndView mav = new ModelAndView();
+		mav.addObject("custId", TsfSession.getInfo().getCustId());
+		mav.setViewName(super.getDeviceViewName("mypage/MypageCustConfirmForm"));
+		return mav;
+	}
+
+	/**
+	 * 마이페이지 - 회원정보확인처리
+	 *
+	 * @return ModelAndView
+	 * @author jsshin
+	 * @since 2021. 03. 15
+	 */
+	@PostMapping("/customer/password/confirm")
+	@ResponseBody
+	public GagaMap customerPasswordConfirm(@RequestBody Customer customer) {
+		GagaMap result = new GagaMap();
+		boolean isMatch = customerService.customerPasswordConfirm(customer);
+		result.setBoolean("isMatch", isMatch);
+		return result;
+	}
+
+
+	/**
+	 * 마이페이지 - 회원정보수정 화면
+	 *
+	 * @param confirmYn - 정보확인여부
+	 * @return ModelAndView
+	 * @author jsshin
+	 * @since 2021. 03. 15
+	 */
+	@GetMapping("/customer/modify/form")
+	public ModelAndView getCustomerModifyForm(@RequestParam(required = false)String confirmYn) {
+		ModelAndView mav = new ModelAndView();
+		String referer = StringUtils.defaultIfBlank(TsfSession.getHttpServletRequest().getHeader("referer"),"");
+		boolean redirect = false;
+
+		if(StringUtils.isBlank(referer)) {
+			redirect = true;
+		} else if(!referer.contains("/mypage/customer/confirm/form")) {
+			redirect = true;
+		} else if(!"Y".equals(confirmYn)) {
+			redirect = true;
+		}
+
+		if (redirect) {
+			mav.setViewName("redirect:/mypage/customer/confirm/form");
+			return mav;
+		}
+
+		mav.addObject("bankList", rendererService.getCommonCodeList("G050", "Y"));
+		mav.addObject("genderGbList", rendererService.getCommonCodeList("G007", "Y"));
+
+		mav.setViewName(super.getDeviceViewName("/mypage/MypageCustModifyForm"));
+		return mav;
+	}
+
+	/**
+	 * 마이페이지 - 회원정보조회
+	 *
+	 * @return Customer - 고객정보
+	 * @author jsshin
+	 * @since 2021. 03. 15
+	 */
+	@PostMapping("/customer/info")
+	@ResponseBody
+	public Customer getCustomerInfo() {
+		Integer custNo = TsfSession.getInfo().getCustNo();
+		return customerService.getCustomerFindByCustNo(custNo);
+	}
+
+	/**
+	 * 마이페이지 - 개명본인인증, 휴대폰 변경
+	 *
+	 * @return GagaMap - 결과
+	 * @param customer - 본인인증 값
+	 * @author jsshin
+	 * @since 2021. 03. 15
+	 */
+	@PostMapping("/customer/auth/update")
+	@ResponseBody
+	public GagaMap updateCustomerAuth(@RequestBody Customer customer) {
+		GagaMap authInfo = niceCertify.getCertifyCellPhoneResultInfo(customer);
+		customer.setSexGb(authInfo.getString("sGender"));
+		customer.setCustNo(TsfSession.getInfo().getCustNo());
+		customer.setCellPhnno(authInfo.getString("sMobileNo"));
+		customer.setCustNm(authInfo.getString("sName"));
+		customer.setBirthYmd(authInfo.getString("sBirthDate"));
+		return customerService.updateCustomerAuth(customer);
+	}
+	/*신주승 끝*/
 }

+ 43 - 2
src/main/java/com/style24/front/biz/web/TsfOrderController.java

@@ -83,8 +83,8 @@ public class TsfOrderController extends TsfBaseController {
 		order.setCartSqArr(arr);		// 장바구니시퀀스
 		order.setShotDelvUseYn("Y");	// 장바구니총알배송사용여부
 		
-		mav.addObject("order" 	, order);										// 주문정보
-		mav.addObject("isLogin"	, TsfSession.isLogin());						// 로그인여부
+		mav.addObject("order" 	, order);						// 주문정보
+		mav.addObject("isLogin"	, TsfSession.isLogin());		// 로그인여부
 		mav.setViewName(super.getDeviceViewName("order/OrderNoMember"));		// 비회원주문서화면
 
 		return mav;
@@ -577,6 +577,47 @@ public class TsfOrderController extends TsfBaseController {
 		mav.setViewName("redirect:/order/complete?ordNo=" + order.getOrdNo());
 		return mav;
 	}
+
+	/**
+	 * PG 결과 처리 메서드
+	 *
+	 * @param
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 03. 05
+	 */
+	@RequestMapping(value = "/pay/result/test")
+	public ModelAndView payResultTest(Payment param, HttpServletRequest request, HttpServletResponse response) {
+
+		ModelAndView mav = new ModelAndView();
+
+		// 1. 로그인체크 후 custNo 설정
+		if (TsfSession.isLogin()) {
+			param.setCustNo(TsfSession.getInfo().getCustNo()); // 고객번호등록
+		} else {
+			param.setCustNo(0);
+		}
+
+		param.setUpdNo(param.getCustNo());
+
+		// 7. 결재정보등록(TB_PAYMENT)
+		param = orderService.orderPgPayResult(param, request, response);
+
+		log.info("param.getOrdNo() ::: {}", param.getOrdNo());
+
+		// TODO 주문정보 업데이트
+		// 1. 주문상태업데이트
+		// 2. 재고처리
+		// 3. 포인트사용처리
+		// 4. 예정포인트적립처리
+		// 5. 쿠폰사용처리
+		// 6. 상품권사용처리
+
+		mav.addObject("payment", param);
+
+		mav.setViewName(super.getDeviceViewName("pg/kcpOrder"));
+		return mav;
+	}
 	
 	/**
 	 * 주문완료페이지

+ 53 - 1
src/main/java/com/style24/front/biz/web/TsfPgController.java

@@ -6,6 +6,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -15,6 +16,10 @@ import com.style24.core.biz.service.TscOrderService;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.Payment;
 
+import kr.co.kcp.net.connection.ConnectionKCP;
+import kr.co.kcp.net.connection.dto.ParamData;
+import kr.co.kcp.net.connection.util.HttpJsonXml;
+import kr.co.kcp.net.connection.util.OpenHash;
 import lombok.extern.slf4j.Slf4j;
 
 @Controller
@@ -25,8 +30,11 @@ public class TsfPgController {
 	@Autowired
 	private TscOrderService coreOrderService;
 
+	@Autowired
+	private Environment env;
+
 	/**
-	 * 주문페이지
+	 * 무통장입금 입금통보
 	 *
 	 * @param
 	 * @return
@@ -35,6 +43,7 @@ public class TsfPgController {
 	 */
 	@RequestMapping(value = "/kcp/vBankEnd")
 	public ModelAndView vBankEnd(Payment param, HttpServletRequest request, HttpServletResponse response, Model model) throws Exception{
+		try {	request.setCharacterEncoding("euc-kr");	} catch(Exception e) {	}
 		PrintWriter out = response.getWriter();
 		String result = "0000";
 
@@ -68,4 +77,47 @@ public class TsfPgController {
 		out.print("<html><body><form><input type='hidden' name='result' value='" + result + "'></form></body></html>");
 		return null;
 	}
+
+	/**
+	 * KCP 모바일 appoval 페이지
+	 *
+	 * @param
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 03. 05
+	 */
+	@RequestMapping(value = "/kcp/approval")
+	public ModelAndView kcpApproval(Payment param, HttpServletRequest request, HttpServletResponse response, Model model) throws Exception{
+		try {	request.setCharacterEncoding("euc-kr");	} catch(Exception e) {	}
+		response.setContentType("text/html;charset=euc-kr");
+		response.setHeader("Cache-Control","no-store");
+		response.setHeader("Pragma","no-cache");
+		response.setDateHeader("Expires",0);
+
+		PrintWriter out = response.getWriter();
+
+		ConnectionKCP suc = new ConnectionKCP();		// KCP 인증 정보를 저장하기 위한 Object                     ( 통신의 기본이 되는 객체 ) - 필수
+		OpenHash oh  = new OpenHash();					// KCP 와 통신시 데이터 위변조를 확인 하기 위한 Hash Object ( 업체와 KCP 간의 통신시 데이터 위변조를 확인 하기 위해 필요. 미설정시 통신 구간만 라이브러리에서 자체적으로 hash 처리 )
+		HttpJsonXml   hjx = new HttpJsonXml();			// 응답값 get value 형식으로 가져올수 있는 Object           ( Java 또는 JSP 내에서 데이터를 파싱할때 필요 - XML 또는 JSON )
+		ParamData pd  = new ParamData();				// 파라메타 값을 세팅할수 있는 bean Object                  ( String, HashMap 등으로 대체 가능 )
+
+		pd.setGood_mny(request.getParameter("good_mny"));
+		pd.setGood_name(request.getParameter("good_name"));
+		pd.setOrdr_idxx(request.getParameter("ordr_idxx"));
+		pd.setPay_method(request.getParameter("pay_method"));
+		pd.setRet_URL(request.getParameter("Ret_URL"));
+		pd.setSite_cd(request.getParameter("site_cd"));
+		pd.setEscw_used(request.getParameter("escw_used") == null ? "" : request.getParameter("escw_used"));
+
+		log.info("CHECK GOOD_NAME ::: {}", pd.getGood_name());
+
+		String responseType = request.getParameter("response_type");
+		if("JSON".equals(responseType) || "XML".equals(responseType)) {
+			pd.setResponse_type(responseType);
+		}
+
+		out.println( suc.kcpPaymentSmartPhone(request, Boolean.parseBoolean(env.getProperty("pg.kcp.server")), pd, env.getProperty("pg.kcp.log.dir"))); // 이클립스 상에서 메서드를 클릭 후 F2를 누르면 상세 내용이 나옵니다.
+
+		return null;
+	}
 }

+ 1 - 1
src/main/java/com/style24/front/support/interceptor/TsfAflinkInterceptor.java

@@ -57,7 +57,7 @@ public class TsfAflinkInterceptor extends HandlerInterceptorAdapter {
 		InflowHst inflow = new InflowHst();
 		inflow.setAfLinkCd(afLinkCd);
 		inflow.setPageUrl(request.getRequestURL() + queryString);
-		commonService.createInflowHst(inflow);
+		commonService.createInflowHistory(inflow);
 
 		return super.preHandle(request, response, handler);
 	}

+ 1 - 4
src/main/java/com/style24/persistence/domain/GnbTab.java

@@ -1,9 +1,8 @@
 package com.style24.persistence.domain;
 
 import com.style24.persistence.TscBaseDomain;
-import lombok.Data;
 
-import java.util.Collection;
+import lombok.Data;
 
 /**
  * 컨텐츠 Domain
@@ -30,6 +29,4 @@ public class GnbTab extends TscBaseDomain {
 	private String viewDt;			// 미리보기일시
 	private String preview;			// 미리보기여부
 
-	private Collection<Cate1> cateList;	// 카테고리목록
-
 }

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

@@ -26,6 +26,8 @@
 		AND    OD.ORD_EXCH_GB = 'O'
 		AND    DATE(ORD_DT) = CURRENT_DATE
 		AND    OD.ORD_DTL_STAT <![CDATA[ <> ]]> 'G013_00'
+		AND    OD.ORD_DTL_STAT <![CDATA[ <> ]]> 'G013_98'
+		AND    OD.ORD_DTL_STAT <![CDATA[ <> ]]> 'G013_99'
 		AND    OD.GOODS_CD = #{goodsCd}
 		AND    O.CUST_NO = #{custNo}
 	</select>
@@ -510,7 +512,7 @@
 			 , Z.SUPPLY_COMP_CD
 			 , Z.DELV_FEE_CD
 			 , (Z.CURR_PRICE + Z.OPT_ADD_PRICE) * Z.GOODS_QTY AS CURR_PRICE
-			 , Z.SOLDOUT_YN
+			 , CASE WHEN Z.SOLDOUT_YN = 'N' AND Z.CUST_TODAY_ORD = 0 AND Z.NOCUST_TODAY_ORD = 0 THEN 'N' ELSE 'Y' END AS SOLDOUT_YN
 			 , CASE WHEN #{frontGb} = 'P' THEN (Z.CURR_PRICE * Z.GOODS_QTY) * (Z.PNT_PRATE/100)
 					ELSE (Z.CURR_PRICE * Z.GOODS_QTY) * (Z.PNT_MRATE/100) END AS SAVE_PNT_AMT
 			 , SYS_IMG_NM
@@ -533,8 +535,8 @@
 					 , FN_GET_APPLY_CPN1_PRICE(C.GOODS_CD, #{frontGb}) AS CURR_PRICE
 					 , IFNULL(O.ADD_PRICE, 0) AS OPT_ADD_PRICE
 					 , BR.BRAND_ENM
-		             , BR.BRAND_KNM
-		             , CT.CUST_GRADE
+					 , BR.BRAND_KNM
+					 , CT.CUST_GRADE
 					 , CASE WHEN GOG.CUST_GRADE IS NOT NULL AND GOG.CUST_GRADE = IFNULL(CT.CUST_GRADE, '') THEN GOG.CUST_GRADE
 							WHEN GOG.CUST_GRADE IS NOT NULL THEN 'NO'
 							ELSE CT.CUST_GRADE END AS ORDER_GRADE
@@ -542,22 +544,34 @@
 					 , (SELECT GOODS_NM FROM TB_GOODS WHERE GOODS_CD = CD.ITEM_CD) AS ITEM_NM
 					 , CASE WHEN G.SELF_GOODS_YN = 'Y' THEN 'WMS'
 							ELSE DFP.DELV_FEE_CD END AS DELV_FEE_CD
+					 , CASE WHEN C.CUST_NO > 0 AND (SELECT IFNULL(SUM(OD.ORD_QTY), 0)
+													FROM   TB_ORDER_DETAIL OD
+													INNER  JOIN TB_ORDER O
+													ON     OD.ORD_NO = O.ORD_NO
+													WHERE  O.CUST_NO = C.CUST_NO
+													AND    OD.ORD_EXCH_GB = 'O'
+													AND    OD.ORD_DTL_STAT <![CDATA[ <> ]]> 'G013_00'
+													AND    OD.ORD_DTL_STAT <![CDATA[ <> ]]> 'G013_98'
+													AND    OD.ORD_DTL_STAT <![CDATA[ <> ]]> 'G013_99'
+													AND    OD.GOODS_CD = C.GOODS_CD
+													AND    DATE(ORD_DT) = CURRENT_DATE) + C.GOODS_QTY > G.DAY_MAX_ORD_QTY THEN 1 ELSE 0 END CUST_TODAY_ORD
+					 , CASE WHEN C.CUST_NO = 0 AND C.GOODS_QTY > G.DAY_MAX_ORD_QTY THEN 1 ELSE 0 END AS NOCUST_TODAY_ORD
 					 , CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = CD.OPT_CD1 AND DEFAULT_IMG_YN = 'Y' LIMIT 1)
 							ELSE (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = G.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' LIMIT 1) END AS SYS_IMG_NM
 				FROM   TB_CART C
 				INNER  JOIN TB_CART_DETAIL CD
-				ON	 C.CART_SQ = CD.CART_SQ
+				ON     C.CART_SQ = CD.CART_SQ
 				INNER  JOIN TB_GOODS G
-				ON	 C.GOODS_CD = G.GOODS_CD
+				ON     C.GOODS_CD = G.GOODS_CD
 				INNER  JOIN TB_BRAND BR 
-				ON	 G.BRAND_CD = BR.BRAND_CD
+				ON     G.BRAND_CD = BR.BRAND_CD
 				INNER  JOIN TB_DELV_FEE_POLICY DFP
-				ON	 G.DELV_FEE_CD = DFP.DELV_FEE_CD
+				ON     G.DELV_FEE_CD = DFP.DELV_FEE_CD
 				INNER  JOIN TB_OPTION O
-				ON	 CD.ITEM_CD = O.GOODS_CD
-				AND	CD.OPT_CD = O.OPT_CD
+				ON     CD.ITEM_CD = O.GOODS_CD
+				AND    CD.OPT_CD = O.OPT_CD
 				INNER  JOIN (   SELECT A.CART_SQ
-									 , MIN(A.SOLDOUT_YN) AS SOLDOUT_YN
+									 , MAX(A.SOLDOUT_YN) AS SOLDOUT_YN
 								FROM   (SELECT C.CART_SQ
 											 , CASE WHEN VS.SOLDOUT_YN = 'N' AND VS.CURR_STOCK_QTY >= C.GOODS_QTY * GC.QTY THEN 'N'
 													ELSE 'Y' END AS SOLDOUT_YN
@@ -609,7 +623,7 @@
 									   ) A
 								GROUP  BY  A.CART_SQ
 					   ) STOCK
-				ON	   C.CART_SQ = STOCK.CART_SQ
+				ON     C.CART_SQ = STOCK.CART_SQ
 				LEFT   OUTER JOIN TB_CUSTOMER CT
 				ON     C.CUST_NO = CT.CUST_NO
 				LEFT   OUTER JOIN TB_GOODS_ORDER_GRADE GOG

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

@@ -14,9 +14,9 @@
 		WHERE  NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
 	</sql>
 	
-	<!-- 제휴링크 이력 추가 -->
-	<insert id="createInflowHst" parameterType="InflowHst">
-		/* TsfCommon.createInflowHst */
+	<!-- 웹제휴채널이력 생성 -->
+	<insert id="createInflowHistory" parameterType="InflowHst">
+		/* TsfCommon.createInflowHistory */
 		INSERT INTO TB_INFLOW_HST (
 		       INFLOW_DT
 		     , SITE_CD

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

@@ -197,6 +197,7 @@
 		     , LOGIN_LDT
 		     , CI
 		     , AUTH_DT
+		     , SNS_TYPE
 		     , MANAGED_RSN
 		     , MANAGED_DTL_RSN
 		     , MANAGED_DT
@@ -249,6 +250,7 @@
 		            NOW()
 		       ELSE NULL
 		       END                                 AS AUTH_DT
+		     , #{snsType}                          AS SNS_TYPE
 		     , #{managedRsn}                       AS MANAGED_RSN
 		     , #{managedDtlRsn}                    AS MANAGED_DTL_RSN
 		     , #{managedDt}                        AS MANAGED_DT
@@ -522,6 +524,7 @@
 
 	<!--비밀번호 변경 날짜 업데이트-->
 	<update id="updatePasswordDate" parameterType="Customer">
+		/* TsfCustomer.updatePasswordDate */
 		UPDATE TB_CUSTOMER
 		SET    PASSWD_CHG_DT = DATE_ADD(NOW(), INTERVAL -#{pwdChangeDay} DAY )
 		     , UPD_NO = #{updNo}
@@ -529,4 +532,17 @@
 		WHERE  CUST_NO = #{custNo}
 	</update>
 
+	<!--이름 휴대전화 번호 변경-->
+	<update id="updateCustomerAuth" parameterType="Customer">
+		/* TsfCustomer.updateCustomerAuth */
+		UPDATE TB_CUSTOMER
+		SET    CUST_NM = #{encodedCustNm}
+		     , CELL_PHNNO = #{encodedCellPhnno}
+		     , SEX_GB = #{encodedSexGb}
+		     , BIRTH_YMD = #{encodedBirthYmd}
+		     , UPD_DT = NOW()
+		     , UPD_NO = #{updNo}
+		WHERE  CUST_NO = #{custNo}
+	</update>
+
 </mapper>

+ 35 - 10
src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml

@@ -251,9 +251,14 @@
 		AND    USE_YN = 'Y'
 		AND    EXISTS (SELECT 1
 		               FROM   TB_CATE_STOCK
-		               WHERE  CATE_GB = A.CATE_GB
-		               AND    BRAND_GROUP_NO = CASE WHEN A.CATE_GB = 'G032_102' THEN #{brandGroupNo} ELSE 0 END
+		               WHERE  SITE_CD = A.SITE_CD
 		               AND    CATE_NO = A.CATE1_NO
+		               <if test='brandGroupNo != null'>
+		               AND    BRAND_GROUP_NO = #{brandGroupNo}
+		               </if>
+		               <if test='formalGb != null'>
+		               AND    FORMAL_GB = #{formalGb}
+		               </if>
 		               <if test='soldoutGoodsDispYn != null and soldoutGoodsDispYn =="N"'>
 		               AND    STOCK_QTY > 0 /*품절상품전시여부:N일 때 재고가 있는 카테고리만*/
 		               </if>
@@ -279,9 +284,14 @@
 		AND    USE_YN = 'Y'
 		AND    EXISTS (SELECT 1
 		               FROM   TB_CATE_STOCK
-		               WHERE  CATE_GB = A.CATE_GB
-		               AND    BRAND_GROUP_NO = CASE WHEN A.CATE_GB = 'G032_102' THEN #{brandGroupNo} ELSE 0 END
+		               WHERE  SITE_CD = A.SITE_CD
 		               AND    CATE_NO = A.CATE2_NO
+		               <if test='brandGroupNo != null'>
+		               AND    BRAND_GROUP_NO = #{brandGroupNo}
+		               </if>
+		               <if test='formalGb != null'>
+		               AND    FORMAL_GB = #{formalGb}
+		               </if>
 		               <if test='soldoutGoodsDispYn != null and soldoutGoodsDispYn =="N"'>
 		               AND    STOCK_QTY > 0 /*품절상품전시여부:N일 때 재고가 있는 카테고리만*/
 		               </if>
@@ -309,9 +319,14 @@
 		AND    USE_YN = 'Y'
 		AND    EXISTS (SELECT 1
 		               FROM   TB_CATE_STOCK
-		               WHERE  CATE_GB = A.CATE_GB
-		               AND    BRAND_GROUP_NO = CASE WHEN A.CATE_GB = 'G032_102' THEN #{brandGroupNo} ELSE 0 END
+		               WHERE  SITE_CD = A.SITE_CD
 		               AND    CATE_NO = A.CATE3_NO
+		               <if test='brandGroupNo != null'>
+		               AND    BRAND_GROUP_NO = #{brandGroupNo}
+		               </if>
+		               <if test='formalGb != null'>
+		               AND    FORMAL_GB = #{formalGb}
+		               </if>
 		               <if test='soldoutGoodsDispYn != null and soldoutGoodsDispYn =="N"'>
 		               AND    STOCK_QTY > 0 /*품절상품전시여부:N일 때 재고가 있는 카테고리만*/
 		               </if>
@@ -341,9 +356,14 @@
 		AND    USE_YN = 'Y'
 		AND    EXISTS (SELECT 1
 		               FROM   TB_CATE_STOCK
-		               WHERE  CATE_GB = A.CATE_GB
-		               AND    BRAND_GROUP_NO = CASE WHEN A.CATE_GB = 'G032_102' THEN #{brandGroupNo} ELSE 0 END
+		               WHERE  SITE_CD = A.SITE_CD
 		               AND    CATE_NO = A.CATE4_NO
+		               <if test='brandGroupNo != null'>
+		               AND    BRAND_GROUP_NO = #{brandGroupNo}
+		               </if>
+		               <if test='formalGb != null'>
+		               AND    FORMAL_GB = #{formalGb}
+		               </if>
 		               <if test='soldoutGoodsDispYn != null and soldoutGoodsDispYn =="N"'>
 		               AND    STOCK_QTY > 0 /*품절상품전시여부:N일 때 재고가 있는 카테고리만*/
 		               </if>
@@ -375,9 +395,14 @@
 		AND    USE_YN = 'Y'
 		AND    EXISTS (SELECT 1
 		               FROM   TB_CATE_STOCK
-		               WHERE  CATE_GB = A.CATE_GB
-		               AND    BRAND_GROUP_NO = CASE WHEN A.CATE_GB = 'G032_102' THEN #{brandGroupNo} ELSE 0 END
+		               WHERE  SITE_CD = A.SITE_CD
 		               AND    CATE_NO = A.CATE5_NO
+		               <if test='brandGroupNo != null'>
+		               AND    BRAND_GROUP_NO = #{brandGroupNo}
+		               </if>
+		               <if test='formalGb != null'>
+		               AND    FORMAL_GB = #{formalGb}
+		               </if>
 		               <if test='soldoutGoodsDispYn != null and soldoutGoodsDispYn =="N"'>
 		               AND    STOCK_QTY > 0 /*품절상품전시여부:N일 때 재고가 있는 카테고리만*/
 		               </if>

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

@@ -51,6 +51,14 @@
 									LEFT JOIN TB_GOODS D ON B.GOODS_CD = D.GOODS_CD 
 		WHERE 1=1
 		 AND A.CUST_NO = #{custNo}
+		 <choose>
+		 	<when test="monthLength > 1">
+		 		AND DATE_FORMAT(A.REG_DT,'%Y%m') = #{searchDt}
+		 	</when>
+		 	<otherwise>
+		 		 AND DATE_FORMAT(A.REG_DT,'%Y%c') = #{searchDt}
+		 	</otherwise>
+		 </choose> 
 		ORDER BY A.REG_DT DESC
 	</select>
 	
@@ -74,6 +82,26 @@
 		  AND CUST_NO = #{custNo}
 	</select>
 	
+	<insert id="saveGiftcardApi" parameterType="GiftCard">
+		INSERT INTO TB_GIFTCARD_API_HST
+		(
+		   GFCD_NO
+		 , IP_ADDR
+		 , CUST_NO
+		 , RESULT_VAL
+		 , REG_NO
+		 , REG_DT
+		)
+	VALUES(
+			#{gfcdNo}
+	      , #{ipAddr}
+	      , #{custNo}
+	      , #{resultVal}
+	      , 0
+	      , CURRENT_TIMESTAMP
+	     )
+	</insert>
+	
 	
 	<!-- 페이징을 위한 select절 상단 -->
 	<sql id="selectForPagingHeader">

+ 5 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml

@@ -31,6 +31,7 @@
 		     , OD.ORD_EXCH_GB
 		     , OD.GOODS_CD
 		     , G.GOODS_NM
+		     , G.LIST_PRICE
 		     , ODI.OPT_CD
 		     , ODI.OPT_CD1
 		     , ODI.OPT_CD2
@@ -38,6 +39,7 @@
 		     , OD.ORD_DTL_STAT
 		     , OD.ORD_QTY
 		     , OD.ORD_AMT
+		     , OD.REAL_ORD_AMT
 		     , OD.SAVE_PNT_AMT
 		     , OD.SHIP_COMP_CD
 		     , OD.GIFT_PACK_YN
@@ -48,10 +50,13 @@
 		     , OD.SUPPLY_COMP_CD
 		     , OD.DELV_FEE_CD
 		     , OD.SHOT_DELV_YN
+		     , OD.CHANGABLE_YN
+		     , OD.RETURNABLE_YN
 		     , G.SELF_GOODS_YN
 		     , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)						AS BRAND_NM
 		     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT)						AS ORD_DTL_STAT_NM
 		     , R.REVIEW_SQ
+		     , IF(NOW() <![CDATA[<]]> O.ORD_DT + INTERVAL 90 DAY, 'Y', 'N')	AS REVIEWABLE_YN
 		     , TIMESTAMPDIFF(DAY, NOW(), OD.DELV_EDDT + INTERVAL 2 WEEK)	AS PURCHASE_CONFIRM_DAY
 		     , DA.RECIP_NM
 		     , DA.RECIP_TELNO

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

@@ -57,7 +57,6 @@ download.path: /WIDE/workspace/files/data
 # PG
 pg:
     kcp:
-#        log.dir: D:\\WIDE\\workspace\\files\\data\\style24\\logs\\front
         log.dir: /WIDE/workspace/files/data/style24/logs/front
         gw:
             url: testpaygw.kcp.co.kr

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

@@ -55,6 +55,23 @@ upload:
 
 download.path: /TSIT/servers/files/data
 
+# PG
+pg:
+    kcp:
+        log.dir: D:/TSIT/servers/bin/apache-tomcat/startup/style24/style24.front/kcpLogs/front
+        gw:
+            url: http://testpaygw.kcp.co.kr
+            port: 8090
+        js.url: http://testpay.kcp.co.kr/plugin/payplus_web.jsp
+        server: false
+        site:
+            cd: T0000
+            key: 3grptw1.zW0GSo4PQdaGvsF__
+            name: KCP TEST SHOP
+        log.level: 3
+        module.type: 01
+        tx.mode: 0
+
 # 네이버페이 API
 naverPay:
     apiUrl: https://dev.apis.naver.com/

+ 66 - 0
src/main/webapp/WEB-INF/views/mob/cart/CartListFormMob.html

@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="mob/common/layout/DefaultLayoutMob">
+
+
+<body>
+
+<th:block layout:fragment="content">
+
+<script type="text/javascript" th:src="${@environment.getProperty('pg.kcp.js.url')}" src=""></script>
+<script type="text/javascript" src="/ux/mo/js/payment.js"></script>
+<script type="text/javascript">
+	$(document).on("click", "#buyBtn", function() {
+		let orderData = {
+			pgGb		: "KCP"
+			, payMeans	: "G014_30"
+			, ordNo		: "5"
+			, goodsNm	: "상품 테스트"
+			, payAmt	: "1233"
+			, ordNm		: "이태영"
+			, ordEmail	: "xodud1202@naver.com"
+			, ordTelno	: "02-0000-0000"
+			, ordPhnno	: "010-7111-0000"
+		};
+
+		let jsonData = JSON.stringify(orderData);
+
+		$.ajax( {
+			type		: "POST",
+			url			: '/order/create/preOrder',
+			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);
+			},
+			error : function(e) {
+				alert(3);
+			},
+			success 	: function(result) {
+				// 결재정보로드
+				$("#orderInfo").html(result);
+				kcp_AJAX();
+				//jsf__pay(document.order_info);
+				//fnKakaoPaymentReady();
+				//fnNaverPaymentReady();
+			}
+		});
+	});
+</script>
+
+
+
+
+<div id="orderInfo" name="orderInfo"></div>
+<input type="button" id="buyBtn" value="KCP TEST" style="width:100px;height:200px;" />
+
+</th:block>
+
+</body>
+
+</html>

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

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

+ 9 - 8
src/main/webapp/WEB-INF/views/mob/pg/kcpOrderMob.html

@@ -3,6 +3,8 @@
 <meta http-equiv="X-UA-Compatible" content="IE=edge" />
 <meta http-equiv="Pragma" content="no-cache">
 <meta http-equiv="Expires" content="-1">
+
+<form id="order_info" name="order_info" method="post" action="/order/pay/result/response" >
 	<!-- 페이코 송부 정보 -->
 	<th:block th:if="${!#strings.isEmpty(payment.paycoDirect)}">
 		<input type="hidden" name="payco_direct"	th:value="${payment.paycoDirect}" />
@@ -20,16 +22,17 @@
 	<input type="hidden" name="shop_name"		th:value="${payment.siteName}" />	<!-- 상점이름(영문으로 작성권장) -->
 	<input type="hidden" name="site_cd"			th:value="${payment.siteCd}" />		<!-- 필수, 상점코드 -->
 	<input type="hidden" name="currency"		th:value="${payment.currency}" />	<!-- 필수, 원화 : WON / 달러 : USD -->
-	<input type="hidden" name="approval_key"	th:value="${pament.approvalKey}" id="approval" />	<!-- 결제등록 키 -->
-	<input type="hidden" name="escw_used"		value="N">	<!-- 인증시 필요한 파라미터(변경불가)-->
-	<input type="hidden" name="pay_method"		th:value="${payment.payMethod}" />	<!-- 필수, 결제수단코드(신용카드 : 100000000000, 계좌이체 : 010000000000, 가상계좌 : 001000000000, 포인트 : 000100000000, 휴대폰 : 000010000000, 상품권 : 000000001000, ARS : 000000000010) -->
+	<input type="hidden" name="approval_key"	th:value="${payment.approvalKey}" id="approval" />	<!-- 결제등록 키 -->
+	<input type="hidden" name="escw_used"		value="N">							<!-- 인증시 필요한 파라미터(변경불가)-->
+	<input type="hidden" name="pay_method"		th:value="${payment.payMethod}" />	<!-- 필수, 결제수단코드(신용카드 : CARD, 계좌이체 : BANK, 가상계좌 : VCNT, 휴대폰 : MOBX) -->
+	<input type="hidden" name="ActionResult"	th:value="${payment.actionResult}" /><!-- 필수, 인증수단(신용카드 : card, 계좌이체 : acnt, 가상계좌 : bcnt, 휴대폰 : mobx) -->
 	<input type="hidden" name="van_code"		value="">							<!-- 인증시 필요한 파라미터(변경불가)-->
 	<input type="hidden" name="quotaopt"		th:value="${payment.quotaopt}"/>	<!-- 최대 할부 개월 수(0 ~ 18까지 설정 가능) -->
 	<input type="hidden" name="ipgm_date"		value=""/>							<!-- 가상계좌설정 -->
-	<input type="hidden" name="Ret_URL"			value="/order/form">				<!-- 리턴 URL (kcp와 통신후 결제를 요청할 수 있는 암호화 데이터를 전송 받을 가맹점의 주문페이지 URL) -->
+	<input type="hidden" name="Ret_URL"			value="http://ldfront.style24.com/order/pay/result/test">	<!-- 리턴 URL (kcp와 통신후 결제를 요청할 수 있는 암호화 데이터를 전송 받을 가맹점의 주문페이지 URL) -->
 	<input type="hidden" name="tablet_size"		value="1.0">						<!-- 화면 크기 조정 -->
 	<input type="hidden" name="response_type"	value="TEXT"/>						<!-- 결제 정보 등록시 응답 타입 ( 필드가 없거나 값이 '' 일경우 TEXT, 값이 XML 또는 JSON 지원 -->
-	<input type="hidden" name="PayUrl"			value="" id="PayUrl"/>				<!-- 결제 정보 등록시 응답 타입 ( 필드가 없거나 값이 '' 일경우 TEXT, 값이 XML 또는 JSON 지원 -->
+	<input type="hidden" name="PayUrl"			value="http://ldfront.style24.com/order/create/preOrder" id="PayUrl"/>	<!-- 결제 정보 등록시 응답 타입 ( 필드가 없거나 값이 '' 일경우 TEXT, 값이 XML 또는 JSON 지원 -->
 	<input type="hidden" name="traceNo"			value="" id="traceNo"/>				<!-- 결제 정보 등록시 응답 타입 ( 필드가 없거나 값이 '' 일경우 TEXT, 값이 XML 또는 JSON 지원 -->
 	<input type="hidden" name="res_cd"			value=""/>							<!-- 결과코드 -->
 	<input type="hidden" name="res_msg"			value=""/>							<!-- 결과메세지 -->
@@ -61,8 +64,6 @@
 	<!-- 가상계좌 설정 -->
 
 
-	<!-- 리턴 URL (kcp와 통신후 결제를 요청할 수 있는 암호화 데이터를 전송 받을 가맹점의 주문페이지 URL) -->
-	<input type="hidden" name="Ret_URL"         value="<%=url%>">
 	<!-- 화면 크기조정 -->
 	<input type="hidden" name="tablet_size"     value="<%=tablet_size%>">
 
@@ -109,5 +110,5 @@
 	<!-- 네이버페이 관련 정보 -->
 	<input type="hidden" name="reserveId" th:value="${payment.reserveId}"/>
 	<input type="hidden" name="paymentId" value=""/>
-
+</form>
 </html>

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


+ 26 - 10
src/main/webapp/WEB-INF/views/web/cart/cartListAjaxFormWeb.html → src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html

@@ -1,11 +1,11 @@
 <html lang="ko"
 	  xmlns:th="http://www.thymeleaf.org">
 <form id="cartListForm" method="post" action="/order/noMember">
-	<input type="hidden" name="cartCpnDcAmt" id="cartCpnDcAmt" th:value="${param.cartCpnDcAmt}" />
+	<!--<input type="hidden" name="cartCpnDcAmt" id="cartCpnDcAmt" th:value="${param.cartCpnDcAmt}" />-->
 
 	<!-- CONT-BODY -->
 	<div class="od_cont">
-		<div class="sec_head" th:if="${order.shotCanYn.equals('Y')}">
+		<div class="sec_head shotDelvSelect">
 			<div class="tbl type4">
 				<table>
 					<colgroup>
@@ -20,11 +20,11 @@
 						<td>
 							<div class="form_field">
 								<div>
-									<input type="radio" name="shotDelvYn" id="blt_ship1" value="">
+									<input type="radio" name="shotDelvUseYn" id="blt_ship1" value="Y" th:checked="${order.shotCanYn.equals('Y')}">
 									<label for="blt_ship1"><span><em class="tag">총알배송</em><span th:text="|${order.shotDelvDt}일 24:00 까지 도착|"></span></span></label>
 								</div>
 								<div>
-									<input type="radio" name="shotDelvYn" id="blt_ship2" value="" checked="">
+									<input type="radio" name="shotDelvUseYn" id="blt_ship2" value="N" th:checked="${!order.shotCanYn.equals('Y')}">
 									<label for="blt_ship2"><span>총알 배송 안함</span></label>
 								</div>
 							</div>
@@ -139,7 +139,7 @@
 											<p class="point"><span th:text="${#numbers.formatInteger(cart.savePntAmt, 1, 'COMMA')}"></span>p 적립예정</p>
 											<p>
 												<button th:if="${cart.soldoutYn.equals('Y')}" type="button" class="btn btn_sm" disabled><span>구매불가</span></button>
-												<button th:if="${cart.soldoutYn.equals('N')}" type="button" class="btn btn_primary btn_sm"><span>즉시구매</span></button>
+												<button th:if="${cart.soldoutYn.equals('N')}" type="button" class="btn btn_primary btn_sm" th:onclick="|submitNoMember(${cart.cartSq})|"><span>즉시구매</span></button>
 											</p>
 											<p class="util">
 										<span>
@@ -274,7 +274,7 @@
 											<p class="point"><span th:text="${#numbers.formatInteger(cart.savePntAmt, 1, 'COMMA')}"></span>p 적립예정</p>
 											<p>
 												<button th:if="${cart.soldoutYn.equals('Y')}" type="button" class="btn btn_sm" disabled><span>구매불가</span></button>
-												<button th:if="${cart.soldoutYn.equals('N')}" type="button" class="btn btn_primary btn_sm"><span>즉시구매</span></button>
+												<button th:if="${cart.soldoutYn.equals('N')}" type="button" class="btn btn_primary btn_sm" th:onclick="|submitNoMember(${cart.cartSq})|"><span>즉시구매</span></button>
 											</p>
 											<p class="util">
 										<span>
@@ -394,7 +394,8 @@
 <div class="modal fade od_pop opt_modify_pop" id="optModifyPop" tabindex="-1" role="dialog" aria-labelledby="optModifyLabel" aria-hidden="true"></div>
 <!-- //옵션변경 팝업 -->
 
-
+<!-- 즉시구매 form -->
+<form id="cartInfoForm" method="post" action="/order/noMember"></form>
 <!-- KCP PG TEST -->
 <form name="order_info" method="post" action="pp_cli_hub.jsp" >
 </form>
@@ -415,8 +416,12 @@
 	}
 
 	$(document).ready(function() {
+		if([[${!order.shotCanYn.equals('Y')}]]) {
+			// $(".shotDelvSelect").hide();
+		}
+
 		$("#cartListForm .area_salecoupon .coupon_box").hide();
-		/* TODO 로그인 안했으면 .area_salecoupon (할인코드 입력 부 및 쿠폰정보영역) hide 시킬것 */
+
 		let loginInfo = [[${loginInfo}]];
 		if(!loginInfo || loginInfo.custNo == null || loginInfo.custNo == 0) {
 			$("#cartListForm .area_salecoupon").hide();
@@ -466,7 +471,7 @@
 
 		cfnAddCart(compsList);*/
 
-		let compsList = [];
+		/*let compsList = [];
 		let temp = new Object;
 		temp.goodsCd = "14373686";
 		temp.optCd = "챠콜그레이150";
@@ -493,7 +498,7 @@
 		temp.planDtlSq = "123";
 		compsList.push(temp);
 
-		cfnAddCart(compsList);
+		cfnAddCart(compsList);*/
 	});
 
 	function notApplyTmtbAreaList() {
@@ -979,5 +984,16 @@
 			}
 		});
 	}
+
+	function submitNoMember(cartSq) {
+		if(cartSq == "all") {
+			$("#cartListForm").submit();
+		} else {
+			let html	 = "<input type='hidden' name='cartSqArr' value='" + cartSq + "' />";
+			html		+= "<input type='hidden' name='shotDelvUseYn' value='" + $("input[name=shotDelvUseYn]:checked").val() + "' />";
+			$("#cartInfoForm").html(html);
+			$("#cartInfoForm").submit();
+		}
+	}
 </script>
 </html>

+ 0 - 0
src/main/webapp/WEB-INF/views/web/cart/cartListFormWeb.html → src/main/webapp/WEB-INF/views/web/cart/CartListFormWeb.html


+ 96 - 98
src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html

@@ -168,113 +168,116 @@
 
 	<script th:inline="javascript">
 		/*<![CDATA[*/
+		// 전체카테고리 조회
+		let allCate;
+		let fnGetAllCategory = function() {
+			$.getJSON('/display/all/cate/list'
+				, function(result, status) {
+					if (status == 'success') {
+						allCate = result;
+						
+						// GNB탭 > 브랜드 생성
+						fnCreateGnbBrandGroup();
+					}
+			});
+		}
+		
 		// GNB탭 > 카테고리
-		let fnGetGnbCategory = function(cateList) {
+		let fnGetGnbCategory = function(cate1) {
 			let tag = '';
-
-			if (cateList.length > 0) {
-				$.each(cateList, function(idx1, cate1) {
-					tag += '<li class="has_depth">\n'; //depth_menu 있을 시 has_depth 클래스 추가
-					tag += '	<a href="javascript:void(0);" onclick="cfnGoToCategory(' + cate1.cate1Nm + ');">' + cate1.cate1Nm + '</a>\n';
-					tag += '	<div class="depth_menu category">\n';
-					tag += '		<div class="head_category">\n';
-					tag += '			<div class="tit">\n';
-					tag += '				<p>' + cate1.cate1Nm + '</p>\n';
-					tag += '				<a href="javascript:void(0);" onclick="cfnGoToCategory(' + cate1.cate1No + ');" class="more">전체보기</a>\n';
+			if (cate1 != null) {
+				tag += '<li class="has_depth">\n'; //depth_menu 있을 시 has_depth 클래스 추가
+				tag += '	<a href="javascript:void(0);" onclick="cfnGoToCategory(' + cate1.cate1Nm + ');">' + cate1.cate1Nm + '</a>\n';
+				tag += '	<div class="depth_menu category">\n';
+				tag += '		<div class="head_category">\n';
+				tag += '			<div class="tit">\n';
+				tag += '				<p>' + cate1.cate1Nm + '</p>\n';
+				tag += '				<a href="javascript:void(0);" onclick="cfnGoToCategory(' + cate1.cate1No + ');" class="more">전체보기</a>\n';
+				tag += '			</div>\n';
+				if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
+					tag += '			<div class="menu">\n';
+					tag += '				<ul class="maintabs">\n';
+					$.each(cate1.cate2List, function(idx2, cate2) {
+						tag += '					<li>\n';
+						tag += '						<a href="javascript:void(0);" onclick="cfnGoToCategoryMain(\'' + cate2.cateGb + '\',\'' + cate2.cate1No + '\',\'' + cate2.cate2No + '\');">' + cate2.cate2Nm + '</a>\n';
+						if (cate2.leafYn == 'N' && cate2.cate3List.length > 0) {
+							tag += '						<ul class="box_depth2">\n';
+							$.each(cate2.cate3List, function(idx3, cate3) {
+								tag += '							<li>\n';
+								tag += '								<a href="javascript:void(0);" onclick="cfnGoToCategoryMain(\'' + cate3.cateGb + '\',\'' + cate3.cate1No + '\',\'' + cate3.cate2No + '\',\'' + cate3.cate3No + '\');">' + cate3.cate3Nm + '</a>\n';
+								if (cate3.leafYn == 'N' && cate3.cate4List.length > 0) {
+									tag += '								<ul class="box_depth3">\n';
+									$.each(cate3.cate4List, function(idx4, cate4) {
+										tag += '									<li><a href="javascript:void(0);" onclick="cfnGoToCategoryMain(\'' + cate4.cateGb + '\',\'' + cate4.cate1No + '\',\'' + cate4.cate2No + '\',\'' + cate4.cate3No + '\',\'' + cate4.cate4No + '\');">' + cate4.cate4Nm + '</a></li>\n';
+									});
+									tag += '								</ul>\n';
+								}
+								tag += '							</li>\n';
+							});
+							tag += '						</ul>\n';
+						}
+						tag += '					</li>\n';
+					});
+					tag += '				</ul>\n';
 					tag += '			</div>\n';
+					tag += '		</div>\n';
+					tag += '	</div>\n';
+				}
 
-					if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
-						tag += '			<div class="menu">\n';
-						tag += '				<ul class="maintabs">\n';
-
-						$.each(cate1.cate2List, function(idx2, cate2) {
-							tag += '					<li>\n';
-							tag += '						<a href="javascript:void(0);" onclick="cfnGoToCategoryMain(\'' + cate2.cateGb + '\',\'' + cate2.cate1No + '\',\'' + cate2.cate2No + '\');">' + cate2.cate2Nm + '</a>\n';
-
-							if (cate2.leafYn == 'N' && cate2.cate3List.length > 0) {
-								tag += '						<ul class="box_depth2">\n';
-
-								$.each(cate2.cate3List, function(idx3, cate3) {
-									tag += '							<li>\n';
-									tag += '								<a href="javascript:void(0);" onclick="cfnGoToCategoryMain(\'' + cate3.cateGb + '\',\'' + cate3.cate1No + '\',\'' + cate3.cate2No + '\',\'' + cate3.cate3No + '\');">' + cate3.cate3Nm + '</a>\n';
-
-									if (cate3.leafYn == 'N' && cate3.cate4List.length > 0) {
-										tag += '								<ul class="box_depth3">\n';
-
-										$.each(cate3.cate4List, function(idx4, cate4) {
-											tag += '									<li><a href="javascript:void(0);" onclick="cfnGoToCategoryMain(\'' + cate4.cateGb + '\',\'' + cate4.cate1No + '\',\'' + cate4.cate2No + '\',\'' + cate4.cate3No + '\',\'' + cate4.cate4No + '\');">' + cate4.cate4Nm + '</a></li>\n';
-										});
-
-										tag += '								</ul>\n';
-									}
-
-									tag += '							</li>\n';
-								});
-
-								tag += '						</ul>\n';
-							}
-
-							tag += '					</li>\n';
-						});
-
-						tag += '				</ul>\n';
-						tag += '			</div>\n';
-						tag += '		</div>\n';
-						tag += '	</div>\n';
-					}
-
-					// if (cate1.bannerList.length > 0) {
-					// 	tag += '	<div class="head_banner">\n';
-					// 	tag += '		<div class="tit">\n';
-					// 	tag += '			<p>가을의 신상 만나기</p>\n';
-					// 	tag += '		</div>\n';
-					// 	tag += '		<div class="list">\n';
-					// 	tag += '			<ul class="clear event_con">\n';
-					// 	tag += '				<li>\n';
-					// 	tag += '					<a href="">\n';
-					// 	tag += '						<div class="ev_img"><img src="/images/pc/thumb/ev_list_img01.jpg" alt="ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션"></div>\n';
-					// 	tag += '						<div class="txt">\n';
-					// 	tag += '							<p class="tit">2020 FALL COLLECTION 가을에는 이 컬러 2020 FALL COLLECTION 가을에는 이 컬러</p>\n';
-					// 	tag += '						</div>\n';
-					// 	tag += '					</a>\n';
-					// 	tag += '				</li>\n';
-					// 	tag += '				<li>\n';
-					// 	tag += '					<a href="">\n';
-					// 	tag += '						<div class="ev_img"><img src="/images/pc/thumb/ev_list_img02.jpg" alt="단 48시간, 퓨어캐시미어 최대 80%세일 PURE CASHMERE 48H POP-UP"></div>\n';
-					// 	tag += '						<div class="txt">\n';
-					// 	tag += '							<p class="tit">FALL NEW ARRIVAL</p>\n';
-					// 	tag += '						</div>\n';
-					// 	tag += '					</a>\n';
-					// 	tag += '				</li>\n';
-					// 	tag += '			</ul>\n';
-					// 	tag += '		</div>\n';
-					// 	tag += '	</div>\n';
-					// }
-
-					tag += '</li>\n';
-				});
+				// if (cate1.bannerList.length > 0) {
+				// 	tag += '	<div class="head_banner">\n';
+				// 	tag += '		<div class="tit">\n';
+				// 	tag += '			<p>가을의 신상 만나기</p>\n';
+				// 	tag += '		</div>\n';
+				// 	tag += '		<div class="list">\n';
+				// 	tag += '			<ul class="clear event_con">\n';
+				// 	tag += '				<li>\n';
+				// 	tag += '					<a href="">\n';
+				// 	tag += '						<div class="ev_img"><img src="/images/pc/thumb/ev_list_img01.jpg" alt="ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션"></div>\n';
+				// 	tag += '						<div class="txt">\n';
+				// 	tag += '							<p class="tit">2020 FALL COLLECTION 가을에는 이 컬러 2020 FALL COLLECTION 가을에는 이 컬러</p>\n';
+				// 	tag += '						</div>\n';
+				// 	tag += '					</a>\n';
+				// 	tag += '				</li>\n';
+				// 	tag += '				<li>\n';
+				// 	tag += '					<a href="">\n';
+				// 	tag += '						<div class="ev_img"><img src="/images/pc/thumb/ev_list_img02.jpg" alt="단 48시간, 퓨어캐시미어 최대 80%세일 PURE CASHMERE 48H POP-UP"></div>\n';
+				// 	tag += '						<div class="txt">\n';
+				// 	tag += '							<p class="tit">FALL NEW ARRIVAL</p>\n';
+				// 	tag += '						</div>\n';
+				// 	tag += '					</a>\n';
+				// 	tag += '				</li>\n';
+				// 	tag += '			</ul>\n';
+				// 	tag += '		</div>\n';
+				// 	tag += '	</div>\n';
+				// }
+				tag += '</li>\n';
 			}
-
 			return tag;
 		}
 
 		// GNB탭 생성
-		let fnCreateGnbTap = function() {
-			$.getJSON('/display/gnb/tap/list'
+		let fnCreateGnbTab = function() {
+			$.getJSON('/display/gnb/tab/list'
 				, function(result, status) {
 					if (status == 'success') {
 						if (result.length > 0) {
 							$('#divGnbTab').html('');
 							$('#ulGnbTab').html('');
-
 							$.each(result, function(idx, item) {
+								console.log(item);
+								
 								if (item.contentsType == 'C' || item.contentsType == 'O') { // 컨텐츠유형:카테고리, 아울렛
-									let gnbCate = fnGetGnbCategory(item.cateList);
-									$('#divGnbTab').append(gnbCate);
-									$('#ulGnbTab').append(gnbCate);
+									$.each(allCate, function(allCateIdx, allCateItem) {
+										if (item.cate1No == allCateItem.cate1No) {
+											let gnbCate = fnGetGnbCategory(allCateItem);
+											$('#divGnbTab').append(gnbCate);
+											$('#ulGnbTab').append(gnbCate);
+										}
+									});
 								} else if (item.contentsType == 'L') { // 컨텐츠유형:링크
-									$('#divGnbTab').append('<li><a href="' + item.linkUrl + '">' + item.title + '</a></li>');
-									$('#ulGnbTab').append('<li><a href="' + item.linkUrl + '">' + item.title + '</a></li>');
+									$('#divGnbTab').append('<li><a href="' + item.linkUrl + '">' + item.gtabNm + '</a></li>');
+									$('#ulGnbTab').append('<li><a href="' + item.linkUrl + '">' + item.gtabNm + '</a></li>');
 								}
 							});
 						}
@@ -291,7 +294,6 @@
 							$('#divGnbBrandGrp').html('');
 							let tag = '';
 							let prevTitle = '';
-
 							$.each(result, function (idx, item) {
 								if (prevTitle != item.title) {
 									if (idx > 0) {
@@ -299,7 +301,6 @@
 										tag += '	</div>\n';
 										tag += '</div>\n';
 									}
-
 									tag += '<div class="row">\n';
 									tag += '	<p>' + item.title + '</p>\n';
 									tag += '	<div class="brand_list swiper-container">\n';
@@ -312,18 +313,14 @@
 									tag += '				</a>\n';
 									tag += '			</li>\n';
 								}
-
 								prevTitle = item.title;
 							});
-
 							tag += '		</ul>\n';
 							tag += '	</div>\n';
 							tag += '</div>\n';
-
 							$('#divGnbBrandGrp').html(tag);
 						}
-
-						fnCreateGnbTap();
+						fnCreateGnbTab();
 					}
 			});
 		}
@@ -393,7 +390,8 @@
 				},
 			});
 
-			fnCreateGnbBrandGroup();
+			// 전체 카테고리 조회
+			fnGetAllCategory();
 		});
 		/*]]>*/
 	</script>

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

@@ -396,9 +396,17 @@
 		$cellPhnno.val(result.cellPhnno);
 
 		if (result.isFind) { // 가입된 고객 정보가 있으면
-			$dupPhnno.text(result.maskingCustId+'로 가입된 이력이 있습니다.');
+			let msg = result.maskingCustId+"로 가입된 이력이 있습니다.";
+			if (result.custStat === 'G104_30') {
+				msg += "<br/> 탈퇴한 회원입니다. 탈퇴 후 60일 동안 재가입이 불가능합니다.";
+			}
+			if (result.custStat === 'G104_20') {
+				msg += "<br/> 휴면회원입니다. 해당 아이디로 휴면해제하시면 되겠습니다.";
+			}
+			$dupPhnno.html(msg);
 			$dupPhnno.show();
 			$dupPhnnoDiv.show();
+			$btnCellPhoneCertify.hide();
 			$btnCellPhoneCertify.text('휴대폰 인증');
 			$btnCellPhoneCertify.attr('disabled', false);
 			authCheck = false;

+ 132 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageCustConfirmFormWeb.html

@@ -0,0 +1,132 @@
+<!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  : MypageCustConfirmFormWeb.html
+ * @desc    : 마이페이지 > 회원정보 확인 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.03.15   jsshin      최초 작성
+ *******************************************************************************
+ -->
+
+<body>
+<th:block layout:fragment="content">
+	<div class="my_cont">
+		<div class="sec_head">
+			<h3>내정보 관리</h3>
+			<p class="sec_desc">
+				정보를 안전하게 보호하기 위하여 비밀번호를 다시 확인 합니다.
+			</p>
+		</div>
+		<div class="sec_body mypage_body">
+			<form id="confirmForm" class="form_wrap" role="form" method="post">
+				<div class="order_list">
+					<section class="order_row">
+						<div class="order_tit">
+							<h3 class="subH3">회원정보 확인</h3>
+						</div>
+						<div class="tbl type1 info_tbl">
+							<table>
+								<colgroup>
+									<col width="200">
+									<col width="*">
+								</colgroup>
+								<tbody>
+									<tr>
+										<th>아이디</th>
+										<td>
+											<input type="text" id="custId" name="custId" class="form_control" th:value="${custId}" readonly="readonly"/>
+										</td>
+									</tr>
+									<tr>
+										<th>비밀번호</th>
+										<td>
+											<input type="password" id="passwd" name="passwd" class="form_control" placeholder="비밀번호를 입력해주세요."/>
+										</td>
+									</tr>
+								</tbody>
+							</table>
+						</div>
+					</section>
+					<div class="btn_wrap half mt60">
+						<button type="button" class="btn btn_default cancle_btn" onclick="cfnGoToPage(_PAGE_MAIN);">
+							<span>취소</span>
+						</button>
+						<button type="button" id="btnConfirm" class="btn btn_dark submit_btn">
+							<span>확인</span>
+						</button>
+					</div>
+				</div>
+			</form>
+		</div>
+	</div>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	$(document).ready(function() {
+		// 마이페이지 LNB 설정
+		fnSetMypageLnbList(10);
+
+		// 마이페이지 location 설정
+		fnSetMypageLocation('내정보 관리');
+
+	});
+
+	//엔터키 확인
+	$('#confirmForm input[name=passwd]').keypress(function (event) {
+		if (event.which === 13) {
+			event.preventDefault();
+			fnValidConfirm();
+		}
+	});
+
+	// 확인버튼
+	$('#btnConfirm').on('click', function () {
+		fnValidConfirm();
+	});
+
+	// 확인
+	var fnValidConfirm = function () {
+		var $passwd = $('#confirmForm input[name=passwd]');
+		if (gagajf.isNull($passwd.val())) {
+			$passwd.blur();
+			mcxDialog.alertC("비밀번호를 입력해 주세요.", {
+				sureBtnText: "확인",
+				sureBtnClick: function () {
+					$passwd.focus();
+				}
+			});
+			return;
+		}
+		gagajf.ajaxFormSubmit("/mypage/customer/password/confirm", '#confirmForm', fnConfirmCallback);
+	};
+
+	var fnConfirmCallback = function (result) {
+		let confirmYn = 'Y';
+		let $passwd = $('#confirmForm input[name=passwd]');
+		if (result.isMatch) {
+			confirmYn = 'Y';
+			cfnGoToPage(_PAGE_MYPAGE_CUSTOMER_MODIFY+'?confirmYn='+ confirmYn);
+		} else {
+			mcxDialog.alert('비밀번호가 일치하지 않습니다.');
+			$passwd.val('');
+			$passwd.focus();
+			return;
+		}
+	};
+	/*]]>*/
+</script>
+
+</th:block>
+
+</body>
+</html>
+
+

+ 290 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageCustModifyFormWeb.html

@@ -0,0 +1,290 @@
+<!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  : MypageCustModifyForm.html
+ * @desc    : 마이페이지 > 회원정보 수정 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.03.15   jsshin      최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+	<div class="my_cont">
+		<div class="sec_head">
+			<h3>회원정보 수정</h3>
+		</div>
+		<div class="sec_body mypage_body">
+			<form id="custModiFyForm" class="form_wrap" role="form" method="post">
+				<div class="order_list">
+					<section class="order_row">
+						<div class="order_tit">
+							<h3 class="subH3">회원정보</h3>
+							<button type="button" class="btn_popup" onclick="cfnOpenCellphoneCertify();">개명 본인인증</button>
+						</div>
+						<div class="tbl type1 info_tbl">
+							<!-- 인증회원 -->
+							<table>
+								<colgroup>
+									<col width="200">
+									<col width="*">
+								</colgroup>
+								<tr>
+									<th>이름(성별)</th>
+									<td id="custNm" name="custNm"></td>
+								</tr>
+								<tr>
+									<th>생년월일</th>
+									<td id="birthYmd" name="birthYmd"></td>
+								</tr>
+							</table>
+							<!-- //인증회원 -->
+						</div>
+						<p class="alert_t">본인인증을 통해 자동으로 수집되는 정보 입니다.</p>
+					</section>
+					<section class="order_row">
+						<div class="tbl type1 info_tbl ">
+							<table>
+								<colgroup>
+									<col width="200">
+									<col width="*">
+								</colgroup>
+								<tbody>
+									<tr>
+										<th>아이디</th>
+										<td>
+											<input type="text" id="custId" name="custId" class="form_control" placeholder="" readonly="readonly"/>
+										</td>
+									</tr>
+									<tr>
+										<th>비밀번호</th>
+										<td>
+											<div class="password_btn">
+												<button type="button" class="btn btn_dark"><span>변경하기</span></button>
+											</div>
+										</td>
+									</tr>
+									<tr>
+										<th>이메일</th>
+										<td>
+											<input type="text" id="email" name="email" class="form_control" placeholder="" readonly="readonly"/>
+										</td>
+									</tr>
+									<tr>
+										<th>휴대폰 번호</th>
+										<td>
+											<input type="text" id="cellPhnno" name="cellPhnno" class="form_control" placeholder="" readonly="readonly"/>
+											<button type="button" class="btn btn_default btn_sm" onclick="cfnOpenCellphoneCertify();">
+												<span>휴대폰 인증</span>
+											</button>
+										</td>
+									</tr>
+								</tbody>
+							</table>
+						</div>
+					</section>
+					<section class="order_row">
+						<div class="order_tit">
+							<h3 class="subH3">환불계좌 정보</h3>
+						</div>
+						<div class="tbl type1 info_tbl ">
+							<table>
+								<colgroup>
+									<col width="200">
+									<col width="*">
+								</colgroup>
+								<tbody>
+									<tr>
+										<th class="ver_top">예금주</th>
+										<td>
+											<input type="text" id="accountHolder" name="accountHolder" class="form_control" placeholder="" readonly="readonly"/>
+											<p class="alert_t02">회원명 본인이 예금주인 통장으로만 환불이 가능합니다.</p>
+										</td>
+									</tr>
+									<tr>
+										<th>은행명</th>
+										<td>
+											<div class="form_field">
+												<select id="bankList">
+													<option value="">선택</option>
+													<option th:if="${bankList}" th:each="oneData, status : ${bankList}" th:value="${oneData.cd}" th:text="${oneData.cdNm}"></option>
+												</select>
+											</div>
+										</td>
+									</tr>
+									<tr>
+										<th>계좌번호</th>
+										<td>
+											<input type="text" id="accountNumber" name="accountNumber" class="form_control" value="" placeholder=""/>
+										</td>
+									</tr>
+								</tbody>
+							</table>
+						</div>
+					</section>
+					<section class="order_row">
+						<div class="order_tit">
+							<h3 class="subH3">마케팅 정보 수신설정</h3>
+							<span class="desc">특가상품, 할인쿠폰, 이벤트 소식 수신 동의</span>
+						</div>
+						<div class="tbl type1 info_tbl">
+							<table>
+								<colgroup>
+									<col width="200">
+									<col width="*">
+								</colgroup>
+								<tbody>
+									<tr>
+										<th>수신설정</th>
+										<td>
+											<div class="form_field review_radio">
+												<div class="radio_li">
+													<input type="checkbox" id="emailAgreeYn" name="emailAgreeYn" value="Y"/><label for="emailAgreeYn"><span>이메일</span></label>
+												</div>
+												<div class="radio_li">
+													<input type="checkbox" id="smsAgreeYn" name="smsAgreeYn" value="Y"/><label for="smsAgreeYn"><span>SMS</span></label>
+												</div>
+											</div>
+										</td>
+									</tr>
+								</tbody>
+							</table>
+						</div>
+						<p class="alert_t"> 회원정보, 구매정보 및 서비스 주요 정책 관련 내용은 수신동의 여부와 관계없이 발송됩니다.</p>
+					</section>
+					<div class="btn_wrap half mt60">
+						<button type="button" id="btnConfirm" class="btn btn_dark submit_btn">
+							<span>확인</span>
+						</button>
+					</div>
+				</div>
+			</form>
+		</div>
+	</div>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+
+	var fnConvertToArray = function(data, isCodeDisplay) {
+		if (data.length == 0)
+			return [];
+
+		if (typeof(isCodeDisplay) == 'undefined')
+			isCodeDisplay = false;
+
+		var arrValue = {};
+
+		$.each(data, function(idx, item) {
+			arrValue[item.cd] = (isCodeDisplay ? '[' + item.cd + '] ' : '') + item.cdNm;
+		});
+
+		return arrValue;
+	};
+
+	var fnLookupValue = function(mappings, key) {
+		return mappings[key];
+	};
+
+	const genderGbList = fnConvertToArray([[${genderGbList}]]);				//성별
+
+
+	// 고객정보
+	var fnGetCustInfo = function () {
+		let jsonData = JSON.stringify({});
+		gagajf.ajaxJsonSubmit("/mypage/customer/info", jsonData , fnGetCustInfoCallback);
+	}
+
+	// 고객정보 데이터
+	var fnGetCustInfoCallback = function (custInfo) {
+		let genderGb = fnLookupValue(genderGbList, custInfo.sexGb);
+		let gender = '';
+		if (!gagajf.isNull(genderGb)) {
+			gender = custInfo.custNm + '('+ genderGb +')';
+		} else {
+			gender = genderGb;
+		}
+		$('#custModiFyForm td[name=custNm]').text(gender);
+		$('#custModiFyForm td[name=birthYmd]').text(custInfo.birthYmd);
+		$('#custModiFyForm input[name=custId]').val(custInfo.custId);
+		$('#custModiFyForm input[name=email]').val(custInfo.email);
+		$('#custModiFyForm input[name=cellPhnno]').val(custInfo.cellPhnno);
+		$('#custModiFyForm input[name=accountHolder]').val(custInfo.custNm);
+
+		fnDisplayEmailAgree(custInfo.emailAgreeYn);
+		fnDisplaySmsAgree(custInfo.smsAgreeYn);
+	}
+
+	// 이메일 수신동의
+	var fnDisplayEmailAgree = function (emailAgreeYn) {
+		const $emailAgreeYn = $('#custModiFyForm input[name=emailAgreeYn]');
+		if (emailAgreeYn === 'Y') {
+			$emailAgreeYn.prop('checked', true);
+		} else {
+			$emailAgreeYn.prop('checked', false);
+		}
+
+	};
+
+	// SMS 수신동의
+	var fnDisplaySmsAgree = function (smsAgreeYn) {
+		const $smsAgreeYn = $('#custModiFyForm input[name=smsAgreeYn]');
+		if (smsAgreeYn === 'Y') {
+			$smsAgreeYn.prop('checked', true);
+		} else {
+			$smsAgreeYn.prop('checked', false);
+		}
+
+	};
+
+	// 나이스 본인인증 후 콜백
+	var fnNiceCallBack = function(encData) {
+		if (!gagajf.isNull(encData)) {
+			let custInfo = {};
+			custInfo.encData = encData;
+			let jsonData = JSON.stringify(custInfo);
+			gagajf.ajaxJsonSubmit('/mypage/customer/auth/update', jsonData, fnInfoConfirmCallBack);
+		}
+	};
+
+	var fnInfoConfirmCallBack = function (result) {
+		if (result.iSsuccess) {
+			fnGetCustInfo();
+			mcxDialog.alert("본인인증을 통해 정보가 변경 되었습니다.");
+			return;
+		} else {
+			mcxDialog.alert("실패하였습니다.<br/>고객센터에 문의하시 바랍니다.");
+			return;
+		}
+
+	}
+
+	$('#btnConfirm').on('click', function () {
+		let jsonData = JSON.stringify($('#custModiFyForm').serializeObject());
+		console.log('jsonData', jsonData);
+	});
+
+	$(document).ready(function() {
+		// 마이페이지 LNB 설정
+		fnSetMypageLnbList(10);
+
+		// 마이페이지 location 설정
+		fnSetMypageLocation('회원정보 수정');
+
+		// 회원정보 조회
+		fnGetCustInfo();
+
+	});
+	/*]]>*/
+</script>
+</th:block>
+</body>
+</html>
+
+

+ 180 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageCustSecedeFormWeb.html

@@ -0,0 +1,180 @@
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<title>STYLE24 | 회원탈퇴 | Publishing</title>
+<meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> 
+<meta name="Title" th:content="" content=""/>
+<meta name="description" th:content="" content=""/>
+<meta name="keywords" th:content="" content=""/>
+<meta property="og:type" content="website"/>
+<meta property="og:image" th:content="" content=""/>
+<meta property="og:url" th:content="" content=""/>
+<meta property="og:title" th:content="" content=""/>
+<meta property="og:description" th:content="" content=""/>
+<meta property="og:locale" content="ko_KR"/>
+<meta property="og:site_name" th:content="" content=""/>
+
+<link rel="icon" href="favicon.ico" type="image/x-icon">
+<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
+<link rel="apple-touch-icon" href="/images/pc/apple-touch-icon.png" sizes="180x180">
+<link rel="icon" href="/images/pc/favicon-32x32.png" sizes="32x32" type="image/png">
+<link rel="icon" href="/images/pc/favicon-16x16.png" sizes="16x16" type="image/png">
+
+<!-- <link rel="stylesheet" type="text/css" href="css/test-common.css" /> -->
+<link rel="stylesheet" type="text/css" href="css/common.css" />
+<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
+<script src="js/jquery.ellipsis.js"></script>
+<script src="js/jquery-ui.js"></script>
+<script src="js/common-ui.js"></script>
+</head>
+
+<body>
+
+	
+	<div class="skipComment">
+		<a href="#content">본문 바로가기</a>
+		<a href="#gnb">주메뉴 바로가기</a>
+		<a href="#footer">하단메뉴 바로가기</a>
+	</div>
+
+	<header id="header"></header>
+	<!--  container -->
+	<div id="container" class="container my">
+		<div class="breadcrumb">
+			<ul>
+				<li class="bread_home"><a href="index.html">홈</a></li>
+				<li class="bread_2depth">마이페이지</li>
+				<li class="bread_3depth">회원탈퇴</li>
+			</ul>
+		</div>
+		<div class="wrap">
+			<div class="content">
+				<div class="cont_head" style="display: none;">
+					CONT-HEAD
+					<div class="tit">my_center</div>
+					<div class="tit my_tit">my_tit</div>
+				</div>
+				<div class="cont_body mypage">
+					<!-- CONT-BODY -->
+					<div class="my_lnb">
+						<div class="lnb_tit">
+							<h2>마이페이지</h2>
+						</div>
+						<div class="lnb_list">
+							<ul>
+								<li><a href="/ux/pc/my_order_1.html">주문확인/배송조회</a></li>
+								<li><a href="/ux/pc/my_return_1.html">취소/반품/환불내역</a></li>
+								<li><a href="/ux/pc/my_restock_1.html">재입고 알림 내역</a></li>
+								<li><a href="/ux/pc/my_coupon_1.html">쿠폰</a></li>
+								<li><a href="/ux/pc/my_point_1.html">STYLE24 포인트</a></li>
+								<li><a href="/ux/pc/my_gift_1.html">상품권</a></li>
+								<li><a href="/ux/pc/my_review_1.html">리뷰</a></li>
+								<li><a href="/ux/pc/my_delivery_1.html">배송지 관리</a></li>
+								<li><a href="/ux/pc/my_wishlist_1.html">위시리스트</a></li>
+								<li><a href="/ux/pc/my_mypage_1.html">내정보 관리</a></li>
+								<li><a href="/ux/pc/my_leave_1.html" class="on">회원 탈퇴</a></li>
+							</ul>
+						</div>
+					</div>
+					<div class="my_cont">
+						<div class="sec_head">
+							<h3>회원탈퇴</h3>
+						</div>
+						<div class="sec_body mypage_body">
+							<div class="com_info_txt">
+								<p class="tit">회원 탈퇴 안내</p>
+								<ul>
+									<li>탈퇴시 소유하고 있는 포인트, 쿠폰등은 모두 소멸 됩니다.</li>
+									<li>거래정보가 있는 경우, 전자상거래 등에서의 소비자 보호에 관한 법류에 따라 계약 또는 청약철회에 관한 기록,<br>대금결제 및 재화 등의 공급에 관한 기록은 5년동안 보존됩니다.</li>
+									<li>보유하셨던 상품권 금액은 탈퇴와 함께 삭제되며 환불되지 않습니다.</li>
+									<li>회원 탈퇴 후 STYLE24에 입력하신 상품문의 및 후기,댓글은 삭제되지 않으며,회원정보 삭제로 인해 작성자 본인을 확인 할 수 없어<br>편집 및 삭제처리가 원천적으로 불가능 합니다.</li>
+									<li>상품권은 현금성 결제 수단에 포함되어 주문시 포인트 적립이 가능합니다.</li>
+								</ul>
+								<div class="chk_box">
+									<div class="form_field">
+										<div class="">
+											<input id="chk-1" type="checkbox"><label for="chk-1"><span>상기 STYLE24 회원탈퇴 시 처리사항 안내를 확인하였음에 동의합니다.</span></label>
+										</div>
+									</div>
+								</div>
+							</div>
+							<form class="form_wrap" role="form">
+								<div class="order_list">
+									<section class="order_row">
+										<div class="tbl track_tbl type2">
+											<table>
+												<colgroup>
+													<col width="25%">
+													<col width="25%">
+													<col width="25%">
+													<col width="25%">
+												</colgroup>   
+												<thead>
+													<tr>
+														<th>진행중(주문/취소/반품/교환)</th>
+														<th>마일리지(보유/적립예정)</th>
+														<th>상품권 잔여금액</th>
+														<th>쿠폰</th>
+													</tr>
+												</thead>
+												<tbody>
+													<tr>
+														<td>0 / 0 / 0 / 0</td>
+														<td class="c_primary">500P / 60P</td>
+														<td class="c_primary">20,000원</td>
+														<td class="c_primary">20장</td>
+													</tr>
+												</tbody>
+											</table>
+										</div>
+									</section>
+									<section class="order_row">
+										<div class="order_tit"> 
+											<h3 class="subH3">보안을 위해 회원님의 아이디 및 비밀번호를 다시 확인합니다.</h3>
+										</div>
+										<div class="tbl type1 info_tbl">
+											<table>
+												<colgroup>
+													<col width="200">
+													<col width="*">
+												</colgroup>   
+												<tbody>
+													<tr>
+														<th>아이디</th>
+														<td><input type="text" class="form_control" value="gunuid" placeholder="" readonly></td>
+													</tr>
+													<tr>
+														<th>비밀번호</th>
+														<td><input type="password" class="form_control" placeholder="비밀번호를 입력해주세요."></td>
+													</tr>
+												</tbody>
+											</table>
+										</div>
+									</section>
+									<div class="btn_wrap half mt60">
+										<button tyep="submit" class="btn btn_dark submit_btn"><span>회원탈퇴</span></button>
+									</div>
+								</div>
+							</form>
+						</div>
+					</div>
+					<!-- // CONT-BODY -->					
+				</div>
+			</div>
+		</div>
+	</div>
+	<!-- // container -->	
+	<footer id="footer"></footer>
+
+	<script type="text/javascript">
+	// 컨텐츠 호출
+	$(document).ready( function() {
+		$("#header").load("head.html");
+		$("#footer").load("foot.html");
+	});
+	</script>
+</body>
+</html>
+
+

+ 93 - 12
src/main/webapp/WEB-INF/views/web/mypage/MypageGiftcardFormWeb.html

@@ -36,7 +36,7 @@
 				<div class="gift_sea_wrap clear">
 					<label for="gift_input">상품권 등록</label>
 					<input type="text" id="gift_input" placeholder="상품권 번호를 입력해주세요.">
-					<button type="button" class="btn btn_dark">등록</button>
+					<button type="button" class="btn btn_dark" onclick="giftcardSave()">등록</button>
 				</div>
 			</div>
 			<div class="com_info_txt">
@@ -55,10 +55,20 @@
 					<li><a href="javascript:void(0);" id="SearchUseGiftcard">사용내역</a></li>
 					<li><a href="javascript:void(0);" id="SearchOwnGiftcard">보유 상품권</a></li>
 				</ul>
-				<div class="form_field" id="dateField">
-					<select id="searchDt">
+				<!-- <div class="form_field" id="dateField">
+					<select id="searchDt" onchange="fnChangeDate(this)">
 						
 					</select> 
+				</div> -->
+					<div class="form_field" id="dateField">
+						<div class="select_custom type1">
+							<div class="combo">
+								<div class="select"></div> <!-- 셀렉박스 -->
+									<ul id="searchDt" class="list" style="width:200px; margin:0 auto">
+									</ul>
+							</div>
+						</div>
+					</div>
 				</div>
 			</div>
 			<div id="giftcardList">
@@ -67,19 +77,19 @@
 	</div>
 <!-- // CONT-BODY -->					
 <script th:inline="javascript">
+var date = new Date();
+var year = date.getFullYear();
+var month = date.getMonth()+1;
+
 //동적으로 날짜 년도 append
 function appendYear(){
  
-    var date = new Date();
-    var year = date.getFullYear();
-    var month = date.getMonth()+1;
-  
     for(var i=year; i<=year; i++){
        	for (var j= 1; j <=month; j++) {
-       		$("#searchDt").prepend("<option value='"+year+"-"+j+"'>"+i+"년"+ j +"월 </option>");
+       		$("#searchDt").prepend("<li onclick='fnChangeDate(this.value)' value='"+year+""+j+"'>"+i+"년"+j +"월 </li>");
 		}
     }
-	$("#searchDt").find("option:eq(0)").prop("selected", true); // 현재년도 선택
+    $(".select").append("<li class='selected' value='"+year+""+month+"'>"+year+"년"+ month +"월 </li>"); // 현재년도 선택 */
 }
  
 appendYear($("#searchDt"));
@@ -94,8 +104,9 @@ $("#SearchUseGiftcard").click(function(){
 	// 날짜 필드 
 	$("#dateField").css("display","block");
 	
-	let data = {};
-	
+	let data = {searchDt : year+""+month,
+				month : month};
+
 	var jsonData = JSON.stringify(data);
 	
 	$.ajax(
@@ -221,7 +232,73 @@ function ownGiftcard(result) {
 }
 
 function fnChangeDate(obj) {
-	console.log(obj);
+
+	var seletedDate = obj.toString();
+	var splitMonth = seletedDate.substr(4);
+	
+	data = {month : splitMonth,
+			searchDt : seletedDate};
+
+ 	var jsonData = JSON.stringify(data);
+	
+	$.ajax(
+			{
+				type 	 : "POST",
+				data	 : jsonData,
+				url 	 : '/mypage/gift/use/list',
+				contentType: 'application/json',
+					dataType : 'json',
+				success  : function(result){
+					useGiftcard(result);
+				}
+			}
+		)  
+}
+
+// 상품권 등록 버튼 누를 시 
+function giftcardSave() {
+	if($("#gift_input").val() == "" || $("#gift_input").val() == null){
+		mcxDialog.alert("상품권 번호를 입력해주세요.");
+		return;
+	}
+	
+ 	data = {gfcdNo : $("#gift_input").val()};
+
+ 	var jsonData = JSON.stringify(data);
+ 	
+/*  	mcxDialog.confirm('저장 하시겠습니까?', {
+		cancelBtnText: "취소",
+		sureBtnText: "확인",
+		sureBtnClick: function() {
+			var jsonData = JSON.stringify(changeData);
+			gagajf.ajaxJsonSubmit('/mypage/gift/use/confirm', jsonData, fnCornerSearch);
+		}
+	}); */
+	
+	/* $.ajax(
+			{
+				type 	 : "POST",
+				data	 : jsonData,
+				url 	 : '/mypage/gift/use/confirm',
+				contentType: 'application/json',
+					dataType : 'json',
+				success  : function(result){
+					alert(result.message);
+				}
+			}
+		)    */
+		
+ 	mcxDialog.confirm("상품권을 등록 하시겠습니까?", {
+		cancelBtnText: "취소",
+		sureBtnText: "확인",
+		sureBtnClick: function() {
+			
+			gagajf.ajaxJsonSubmit('/mypage/gift/use/confirm', jsonData, function() {
+				cfnGoToPage(_PAGE_MYPAGE_GIFTCARD);
+			});
+		}
+	});
+	
 }
 
 $(document).ready(function() {
@@ -235,6 +312,10 @@ $(document).ready(function() {
 	// 전체내역 표시
 	$("#SearchUseGiftcard").trigger('click');
 
+	// 셀렉트박스 활성화
+	$('.select_custom.type1').each(function(index) {
+		var selecter01 = new sCombo($(this));
+	});
 });
 </script>
 </th:block>

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

@@ -31,9 +31,46 @@
 		<input type="hidden" name="ordNo"/>
 		<input type="hidden" name="ordDtlNoArr"/>
 	</form>
-	<div class="my_cont">
+	<div class="cont">
 		<div class="sec_head">
-			<h3 class="mem_name"><strong th:text="${customerInfo.custNm}"></strong>님 반갑습니다.</h3>
+			<div class="my_information">
+				<div class="name_box">
+					<strong th:text="${customerInfo.custNm}"></strong>님 반갑습니다.
+				</div>
+				<div class="property_box">
+					<div class="level lv_vip"> <!-- 레벨별 클래스명 : VIP (lv_vip) / GOLD (lv_gold) / SILVER (lv_silver) / BRONZE (lv_bronze) / WELCOME (lv_welcome) -->
+					<div th:class="|level lv_${#strings.toLowerCase(customerInfo.custGradeNm)}|"></div>
+						<span class="txt" th:text="${customerInfo.custGradeNm}"></span>
+						<div class="btn_level">
+							<a href="javascript:void(0);" onclick="fnGoToCustomerBenefit();">등급혜택 보기</a>
+							<button type="button" id="btn_lv_coupon" onclick="fnDownloadCoupon();"><span>등급쿠폰 받기</span></button>
+						</div>
+					</div>
+					<div class="property">
+						<ul>
+							<li>
+								<div>
+									<p class="txt">보유쿠폰 / 만료예정</p>
+									<p class="count"><span id="couponCnt" th:text="${couponCnt}"></span>장 / <span id="expiredSoonCouponCnt" th:text="|${expiredSoonCouponCnt}|"></span>장</p>
+								</div>
+							</li>
+							<li>
+								<div>
+									<p class="txt">STYLE24 포인트</p>
+									<p class="count"><span th:text="${#numbers.formatInteger(rmPntAmt, 1, 'COMMA')}"></span>P</p>
+								</div>
+							</li>
+							<li>
+								<div>
+									<p class="txt">상품권</p>
+									<p class="count"><span th:text="${#numbers.formatInteger(rmGfcdAmt, 1, 'COMMA')}"></span>원</p>
+								</div>
+							</li>
+						</ul>
+					</div>
+				</div>
+			</div>
+			<!--<h3 class="mem_name"><strong th:text="${customerInfo.custNm}"></strong>님 반갑습니다.</h3>
 			<div class="mem_info clear">
 				<div class="mem_rank">
 					<div th:class="|rank_icon ${#strings.toLowerCase(customerInfo.custGradeNm)}|" th:text="${#strings.substring(customerInfo.custGradeNm, 0, 1)}"></div>
@@ -57,10 +94,123 @@
 						<a href="#pop"><span class="big_txt" th:text="${#numbers.formatInteger(rmGfcdAmt, 1, 'COMMA')}"></span>원</a>
 					</div>
 				</div>
+			</div>-->
+		</div>
+		<div class="my_order_progress">
+			<div class="progress">
+				<ul>
+					<li>
+						<div>
+							<p class="txt">주문접수</p>
+							<p class="count"><span id="orderReceiptCount" th:text="${orderCount.orderReceiptCount}">0</span></p>
+						</div>
+					</li>
+					<li>
+						<div>
+							<p class="txt">결제완료</p>
+							<p class="count"><span id="paymentCompleteCount" th:text="${orderCount.paymentCompleteCount}">0</span></p>
+						</div>
+					</li>
+					<li>
+						<div>
+							<p class="txt">상품 준비 중</p>
+							<p class="count"><span id="goodsPrepareCount" th:text="${orderCount.goodsPrepareCount}">0</span></p>
+						</div>
+					</li>
+					<li>
+						<div>
+							<p class="txt">배송 준비 중</p>
+							<p class="count"><span id="shipPrepareCount" th:text="${orderCount.shipPrepareCount}">0</span></p>
+						</div>
+					</li>
+					<li>
+						<div>
+							<p class="txt">배송 중</p>
+							<p class="count"><span id="shippingCount" th:text="${orderCount.shippingCount}">0</span></p>
+						</div>
+					</li>
+					<li>
+						<div>
+							<p class="txt">배송 완료</p>
+							<p class="count"><span id="shipCompleteCount" th:text="${orderCount.shipCompleteCount}">0</span></p>
+						</div>
+					</li>
+				</ul>
+			</div>
+			<div class="invalid">
+				<p class="txt">취소/교환/반품</p>
+				<p class="count"><span id="orderCrsCount" th:text="${orderCount.cancelCount + orderCount.returnCount + orderCount.exchangeCount}">0</span></p>
+			</div>
+		</div>
+		<div class="sec_body">
+			<h3 class="subH2 mb40">주문확인/배송조회</h3>
+			<!-- 주문조회 검색 -->
+			<div class="area_filter">
+				<div class="select_month_box">
+					<div class="form_field">
+						<div>
+							<input type="radio" name="rdi-month" id="rdi-month1" onclick="fnSetSearchPeriod(1);">
+							<label for="rdi-month1"><span>최근 1개월</span></label>
+						</div>
+						<div>
+							<input type="radio" name="rdi-month" id="rdi-month2" onclick="fnSetSearchPeriod(3);">
+							<label for="rdi-month2"><span>최근 3개월</span></label>
+						</div>
+						<div>
+							<input type="radio" name="rdi-month" id="rdi-month3" onclick="fnSetSearchPeriod(6);">
+							<label for="rdi-month3"><span>최근 6개월</span></label>
+						</div>
+					</div>
+				</div>
+				<div class="select_period_box">
+					<form class="form_wrap">
+						<div class="form_field">
+							<label class="input_label sr-only">선택기간 시작</label>
+							<div class="input_wrap">
+								<input type="text" class="form_control period_datepicker hasDatepicker" name="stDate" value="" id="stDate" onchange="fnCheckPeriod(this);">
+							</div>
+						</div>
+						<div class="form_field">
+							<label class="input_label sr-only">선택기간 끝</label>
+							<div class="input_wrap">
+								<input type="text" class="form_control period_datepicker hasDatepicker" name="edDate" value="" id="edDate" onchange="fnCheckPeriod(this);">
+							</div>
+						</div>
+						<button type="button" class="btn btn_dark btn_sm" onclick="fnSearchOrderList();"><span>조회</span></button>
+					</form>
+				</div>
+				<div class="select_status_box">
+					<form class="form_wrap">
+						<div class="form_field">
+							<div class="select_custom order_status">
+								<div class="combo">
+									<input type="hidden" name="ordDtlStat" value=""/>
+									<div class="select">전체상태</div>
+									<ul class="list">
+										<li class="selected" value="" onclick="fnChangeOrdDtlStat(this);">전체상태</li>
+										<li th:if="${ordDtlStatList}" th:each="oneData, status : ${ordDtlStatList}" th:value="${oneData.cd}" th:text="${oneData.cdNm}" onclick="fnChangeOrdDtlStat(this);"></li>
+										<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" 추가  -->
+										<!--<li class="selected">전체상태</li>
+										<li>주문접수</li>
+										<li>결제완료</li>
+										<li>상품준비중</li>
+										<li>배송준비중</li>
+										<li>배송중</li>
+										<li>배송완료</li>
+										<li>구매확정</li>-->
+									</ul>
+								</div>
+							</div>
+						</div>
+					</form>
+				</div>
+			</div>
+			<!-- //주문조회 검색 -->
+			<div class="area_list" id="orderList">
 			</div>
 		</div>
-		<div class="sec_body mypage_body">
-			<!-- 주문 경로 -->
+		<!--<div class="sec_body mypage_body">
+			&lt;!&ndash; 주문 경로 &ndash;&gt;
 			<div class="order_info clear">
 				<ul class="clear">
 					<li>
@@ -93,9 +243,9 @@
 					<p class="count"><span id="orderCrsCount" th:text="${orderCount.cancelCount + orderCount.returnCount + orderCount.exchangeCount}">0</span></p>
 				</div>
 			</div>
-			<!-- //주문 경로 -->
+			&lt;!&ndash; //주문 경로 &ndash;&gt;
 			<h2 class="subH2 my_subtit">주문확인/배송조회</h2>
-			<!-- 주문조회 검색 -->
+			&lt;!&ndash; 주문조회 검색 &ndash;&gt;
 			<div class="order_sch_filter clear">
 				<div class="sch_radio_tab">
 					<input type="checkbox" name="month" value="최근 1개월" id="chk01" onclick="fnSetSearchPeriod(1);">
@@ -115,10 +265,10 @@
 					<button type="button" class="btn btn_dark" onclick="fnSearchOrderList();">조회</button>
 				</div>
 			</div>
-			<!-- //주문조회 검색 -->
+			&lt;!&ndash; //주문조회 검색 &ndash;&gt;
 			<div class="order_list" id="orderList">
 			</div>
-		</div>
+		</div>-->
 	</div>
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
@@ -274,6 +424,19 @@
 			$('#orderCrsCount').text(result.orderCount.cancelCount + result.orderCount.returnCount + result.orderCount.exchangeCount);
 		});
 	}
+
+	// 주문상세상태코드 셀렉트박스 변경 이벤트
+	var fnChangeOrdDtlStat = function(param) {
+		console.log('before >>> ' + $('input[name=ordDtlStat]').val())
+		$(param).parent().parent().find('input[name=ordDtlStat]').val($(param).val());
+		console.log('after >>> ' + $('input[name=ordDtlStat]').val())
+	}
+
+	// 배송조회 버튼 클릭 이벤트
+	var fnGoToDelivery = function(param) {
+		// TODO
+		// 배송조회 페이지 이동
+	}
 /*]]>*/
 </script>
 

+ 136 - 129
src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListWeb.html

@@ -11,144 +11,151 @@
  * VER  DATE         AUTHOR      DESCRIPTION
  * ===  ===========  ==========  =============================================
  * 1.0  2021.02.18   card007     최초 작성
+ * 1.1  2021.03.15   card007     퍼블 수정
  *******************************************************************************
  -->
+<input type="hidden" th:value="${orderInfo.pageNo}" id="pageNo"/>
 <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.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 class="part_goods">
+		<div class="goods_head">
+			<p th:unless="${oneData.giftPackYn == 'Y'}">주문일 <span th:text="${oneData.ordDt}"></span></p>
+			<p th:if="${oneData.giftPackYn == 'Y'}">선물일 <span th:text="${oneData.ordDt}"></span></p>
+			<a href="javascript:void(0)" class="btn_detail_view" 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')}">
-						<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">
-									<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" 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)}">
-								<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" 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)}">
-								<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>
+		<div class="goods_cont">
+			<th:block th:if="${oneData.ordDtlList}" th:each="ordDtl, status : ${oneData.ordDtlList}">
+			<!-- 주문상품 -->
+			<div class="goods_info">
+				<div class="oder_desc">
+					<div class="goods_box">
+						<div class="gd_item">
+							<a href="">
+								<span class="thumb">
+									<img th:src="${imageUrl + '/' + ordDtl.sysImgNm}" width="100%" alt="">
+								</span>
+								<p>
+									<span class="brand" th:text="${ordDtl.brandNm}"></span>
+									<span class="tag primary" th:if="${ordDtl.shotDelvYn == 'Y'}">총알배송</span>
+									<span class="tag" th:if="${ordDtl.shotDelvYn == 'N' and ordDtl.selfGoodsYn == 'Y'}">STYLE24 일반배송</span>
+									<span class="tag" th:if="${ordDtl.selfGoodsYn == 'N'}">업체직배송</span>
+								</p>
+								<p>
+									<span class="name" th:text="${ordDtl.goodsNm}"></span>
+								</p>
+							</a>
+						</div>
+						<div class="gd_opt">
+							<div class="option_wrap">
+								<span class="title sr-only">주문 옵션</span>
+								<span class="option" th:text="|${ordDtl.optCd1} / ${ordDtl.optCd2}|"></span>
+							</div>
+						</div>
+						<div class="gd_calc">
+							<p>
+								<span class="count"><em th:text="${ordDtl.ordQty}"></em>개</span>
+							</p>
+							<p>
+								<span class="price_org"><em th:text="${#numbers.formatInteger(ordDtl.listPrice, 1, 'COMMA')}"></em>원</span>
+								<span class="price_sale"><em th:text="${#numbers.formatInteger(ordDtl.ordAmt, 1, 'COMMA')}"></em>원</span>
+							</p>
+						</div>
+					</div>
+					<div class="status_box">
+						<!-- 주문 -->
+						<th:block th:unless="${ordDtl.gifyPackYn == 'Y'}">
+							<p th:text="${ordDtl.ordDtlStatNm}"></p>
 						</th:block>
-					</tbody>
-				</table>
-			</div>
-			<!-- 주문 -->
-			<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>
+						
+						<!-- 선물 -->
+						<th:block th:if="${ordDtl.gifyPackYn == 'Y'}">
+							<!-- <p th:if="${ordDtl.ordDtlStatNm}">선물 결제</p> -->
+							<!-- 주소 입력 대기중 -->
+							<p th:if="${ordDtl.ordDtlStat == 'G013_20' and #strings.isEmpty(order.recipBaseAddr) and order.giftLimitDay >= 0}">주소 입력 대기중</p>
+							<!-- 선물 완료 -->
+							<p th:if="${ordDtl.ordDtlStat == 'G013_30' or ordDtl.ordDtlStat == 'G013_35' or ordDtl.ordDtlStat == 'G013_40' or ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55' or ordDtl.ordDtlStat == 'G013_60' or ordDtl.ordDtlStat == 'G013_70'}">선물 완료</p>
+							<!-- 선물 취소 -->
+							<p th:if="${ordDtl.ordDtlStat == 'G013_98' or ordDtl.ordDtlStat == 'G013_99'}">선물 취소</p>
+						</th:block>
+					</div>
+					<div class="button_box">
+						<!-- 주문 -->
+						<th:block th:unless="${ordDtl.gifyPackYn == 'Y'}">
+							<!-- 주문취소 버튼(입금대기, 결제완료, 상품준비중, 출고처지정, 배송준비중) -->
+							<th:block th:if="${ordDtl.ordDtlStat == 'G013_10' or ordDtl.ordDtlStat == 'G013_20' or ordDtl.ordDtlStat == 'G013_30' or ordDtl.ordDtlStat == 'G013_35'} or ordDtl.ordDtlStat == 'G013_40'">
+								<p><button type="button" class="btn btn_default btn_sm"  th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateChange(this, 'cancel');"><span>주문 취소</span></button></p>
+							</th:block>
+							<!-- 교환신청 버튼(배송중, 출고완료, 배송완료)  -->
+							<th:block th:if="${ordDtl.changableYn == 'Y' and (ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55' or ordDtl.ordDtlStat == 'G013_60')}">
+								<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateChange(this, 'exchange');"><span>교환 신청</span></button></p>
+							</th:block>
+							<!-- 반품신청 버튼(배송중, 출고완료, 배송완료)  -->
+							<th:block th:if="${ordDtl.returnableYn == 'Y' and (ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55' or ordDtl.ordDtlStat == 'G013_60')}">
+								<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateChange(this, 'return');"><span>반품 신청</span></button></p>
+							</th:block>
+							<!-- 배송조회 버튼(배송중) -->
+							<th:block th:if="${ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55' or ordDtl.ordDtlStat == 'G013_60'}">
+								<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnGoToDelivery(this);"><span>배송 조회</span></button></p>
+							</th:block>
+							<!-- 구매확정 버튼(배송완료) -->
+							<th:block th:if="${ordDtl.ordDtlStat == 'G013_60'}">
+								<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnGoToDelivery(this);"><span>배송 조회</span></button></p>
+							</th:block>
+							<!-- 쇼핑백담기 버튼(구매확정) -->
+							<th:block th:if="${ordDtl.ordDtlStat == 'G013_70'}">
+								<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></p>
+							</th:block>
+							<!-- 리뷰작성 버튼 -->
+							<th:block th:if="${ordDtl.ordDtlStat == 'G013_70' and ordDtl.reviewableYn == 'Y' and ordDtl.reviewSq == 0}">
+								<p><button type="button" class="btn btn_primary_line btn_sm" th:attr="ordNo=${oneData.ordNo}" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></p>
+							</th:block>
+							<!-- 1:1문의 버튼 -->
+							<th:block th:if="${ordDtl.ordDtlStat == 'G013_70' and (ordDtl.reviewableYn == 'N' or ordDtl.reviewSq > 0)}">
+								<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA);"><span>1:1 문의</span></button></p>
+							</th:block>
+						</th:block>
+						
+						<!-- 선물 -->
+						<th:block th:if="${ordDtl.gifyPackYn == 'Y'}">
+							<!-- 주소 입력 대기중 -->
+							<th:block th:if="${ordDtl.ordDtlStat == 'G013_20' and #strings.isEmpty(order.recipBaseAddr) and order.giftLimitDay >= 0}">
+								<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${oneData.ordNo}" onclick="fnReSendSms(this);"><span>SMS 재발송</span></button></p>
+							</th:block>
+							<!-- 선물 완료 -->
+							<th:block th:if="${ordDtl.ordDtlStat == 'G013_30' or ordDtl.ordDtlStat == 'G013_35' or ordDtl.ordDtlStat == 'G013_40' or ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55' or ordDtl.ordDtlStat == 'G013_60' or ordDtl.ordDtlStat == 'G013_70'}">
+								<p><button type="button" class="btn btn_primary_line btn_sm" th:attr="ordNo=${oneData.ordNo}" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></p>
+							</th:block>
+						</th:block>
+					</div>
 				</div>
-			</th:block>
+				<div class="oder_text">
+					<!-- 주문 -->
+					<th:block th:unless="${ordDtl.gifyPackYn == 'Y'}">
+						<!-- 주문접수 -->
+						<p th:if="${ordDtl.ordDtlStat == 'G013_10'}">주문이 완료되어 결제를 기다리고 있습니다.</p>
+						<!-- 상품준비중 -->
+						<p th:if="${ordDtl.ordDtlStat == 'G013_30' or ordDtl.ordDtlStat == 'G013_40'}">상품 준비가 완료되어 곧 배송될 예정입니다.</p>
+						<!-- 예약상품 상품준비중 -->
+						<!-- <p th:if="${ordDtl.ordDtlStat == 'G013_30' or ordDtl.ordDtlStat == 'G013_35' or ordDtl.ordDtlStat == 'G013_40'}">예약판매 상품으로 YYYY.MM.DD 출고 예정입니다.</p> -->
+						<!-- 배송완료 -->
+						<p th:if="${ordDtl.ordDtlStat == 'G013_60'}">15일 후 자동으로 구매확정됩니다.</p>
+						<!-- 구매확정 -->
+						<p th:if="${ordDtl.ordDtlStat == 'G013_70' and ordDtl.reviewableYn == 'Y' and ordDtl.reviewSq == 0}">리뷰를 작성하면 다른 구매자에게 도움이 될 수 있습니다.</p>
+					</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>
+					<!-- 선물 -->
+					<th:block th:if="${ordDtl.gifyPackYn == 'Y'}">
+						<!-- 주소 입력 대기중 -->
+						<p th:if="${ordDtl.ordDtlStat == 'G013_20' and #strings.isEmpty(order.recipBaseAddr) and order.giftLimitDay >= 0}" th:text="|${order.recipNm}님이 주소를 입력하기 전입니다. (입력기한 ${order.giftLimitDt})|"></p>
+						<!-- 선물 완료 -->
+						<p th:if="${ordDtl.ordDtlStat == 'G013_30' or ordDtl.ordDtlStat == 'G013_35' or ordDtl.ordDtlStat == 'G013_40' or ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55' or ordDtl.ordDtlStat == 'G013_60' or ordDtl.ordDtlStat == 'G013_70'}" th:text="|${order.recipNm}님께 선물이 발송되었습니다.|"></p>
+						<!-- 선물 취소 -->
+						<p th:if="${ordDtl.ordDtlStat == 'G013_98' or ordDtl.ordDtlStat == 'G013_99'}">주소 입력 기한이 경과되어 선물이 취소 되었습니다.</p>
+					</th:block>
 				</div>
+			</div>
+			<!-- //주문상품 -->
 			</th:block>
-		</th:block>
+		</div>
 	</div>
 </th:block>
 

+ 167 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListWeb_20210315.html

@@ -0,0 +1,167 @@
+<!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.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>
+					<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 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" 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)}">
+								<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" 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)}">
+								<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: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>
+</th:block>
+
+<!-- 주문 없을 때 -->
+<th:block th:unless="${orderList}" th:each="oneData, status : ${orderList}">
+
+</th:block>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	$(document).ready(function() {
+	});
+/*]]>*/
+</script>
+
+</html>

+ 14 - 3
src/main/webapp/ux/mo/js/payment.js

@@ -28,7 +28,7 @@ function kcp_AJAX() {
 	// javascript를 통한 ajax 통신을 할 필요 없이 소스내에 order_approval.jsp를 연동해서 사용 하셔도 관계 없으며
 	// 제공되는 jar 파일에 직접 전달된 데이터를 사용할수 있도록 method가 구현 되어 있습니다.
 	if(ajax_flag) {
-		var url    = "order_approval.jsp";
+		var url    = "/pg/kcp/approval";
 		var form = document.order_info;
 		var params = "?site_cd=" + form.site_cd.value
 			+ "&ordr_idxx=" + form.ordr_idxx.value
@@ -205,6 +205,17 @@ var isMobile = {
 	}
 };
 
-if( isMobile.any() )
-	document.getElementById("cssLink").setAttribute("href", controlCss);
+/*if( isMobile.any() )
+	document.getElementById("cssLink").setAttribute("href", controlCss);*/
 
+function jsf__chk_type() {
+	if ( document.order_info.ActionResult.value == "card" ) {
+		document.order_info.pay_method.value = "CARD";
+	} else if ( document.order_info.ActionResult.value == "acnt" ) {
+		document.order_info.pay_method.value = "BANK";
+	} else if ( document.order_info.ActionResult.value == "vcnt" ) {
+		document.order_info.pay_method.value = "VCNT";
+	} else if ( document.order_info.ActionResult.value == "mobx" ) {
+		document.order_info.pay_method.value = "MOBX";
+	}
+}

+ 1 - 1
src/main/webapp/ux/pc/css/common.css

@@ -1202,7 +1202,7 @@ input[type="file"] {
 .quick_menu_group .area > div:first-child span:first-child a{margin-left:0}
 .quick_menu_group .area > div:first-child span:first-child a:after{display:none}
 .quick_menu_group .area > div:first-child span a:after{position:absolute;top:13px;left:0;width:1px;height:13px;background:#959596;content:''}
-.quick_menu_group .inr a{margin-left:16px;color:#eeeeee;}*/
+.quick_menu_group .inr a{margin-left:16px;color:#eeeeee;}
 
 
 

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

@@ -21,6 +21,7 @@ const _PAGE_CUSTOMER_DORMANT = _frontUrl + "/customer/dormant/certify/form";
 const _PAGE_CUSTOMER_DORMANT_COMPLETE = _frontUrl + "/customer/dormant/certify/complete/form";		// 고객 > 휴면회원 > 완료페이지
 const _PAGE_CUSTOMER_CERTIFICATION = "/customer/certification/form"									// 고객 > 본인인증화면
 
+
 //== 상품상세 ==/
 const _PAGE_GOODS_DETAIL = _frontUrl + "/goods/detail/form?goodsCd=";								// 상품 상세
 const _PAGE_GOODS_COUPON_LAYER = _frontUrl + "/goods/coupon/layer/";								// 쿠폰레이어
@@ -53,12 +54,14 @@ 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_CUSTOMER = _frontUrl + "/mypage/customer/confirm/form";		// 마이페이지 > 내정보 관리 > 회원정보 확인
+const _PAGE_MYPAGE_CUSTOMER_MODIFY = _frontUrl + "/mypage/customer/modify/form";// 마이페이지 > 내정보 관리 > 회원정보 수정
 const _PAGE_MYPAGE_SECEDE = _frontUrl + "/mypage/customer/secede/form";			// 마이페이지 > 회원탈퇴
 const _PAGE_WISHLIST = _frontUrl + "/mypage/wish/list/form";					// 마이페이지 > 위시리스트
 const _PAGE_WISHLIST_PUT = _frontUrl + "/mypage/wish/list/put";					// 위시리스트 담기
 const _PAGE_WISHLIST_DEL = _frontUrl + "/mypage/wish/list/delete";				// 위시리스트 삭제
 
+
 //== 검색 ==/
 
 //== 기획전 ==/