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

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

card007 5 лет назад
Родитель
Сommit
50f76181e9
100 измененных файлов с 2604 добавлено и 3336 удалено
  1. 0 9
      src/main/java/com/style24/front/biz/dao/TsfCustomerDao.java
  2. 65 53
      src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java
  3. 23 1
      src/main/java/com/style24/front/biz/dao/TsfWishlistDao.java
  4. 32 4
      src/main/java/com/style24/front/biz/service/TsfCartService.java
  5. 1 1
      src/main/java/com/style24/front/biz/service/TsfCustomerService.java
  6. 2 1
      src/main/java/com/style24/front/biz/service/TsfGoodsService.java
  7. 5 4
      src/main/java/com/style24/front/biz/service/TsfOrderService.java
  8. 76 71
      src/main/java/com/style24/front/biz/service/TsfPlanningService.java
  9. 8 0
      src/main/java/com/style24/front/biz/service/TsfSocialService.java
  10. 34 1
      src/main/java/com/style24/front/biz/service/TsfWishlistService.java
  11. 1 1
      src/main/java/com/style24/front/biz/thirdparty/Yes24Login.java
  12. 43 39
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  13. 29 33
      src/main/java/com/style24/front/biz/web/TsfIndexController.java
  14. 38 3
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  15. 2 2
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  16. 92 66
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  17. 1 0
      src/main/java/com/style24/persistence/domain/MainLayout.java
  18. 286 282
      src/main/java/com/style24/persistence/domain/Plan.java
  19. 5 1
      src/main/java/com/style24/persistence/domain/Social.java
  20. 1 1
      src/main/java/com/style24/persistence/domain/WishList.java
  21. 2 2
      src/main/java/com/style24/persistence/mybatis/shop/TsfCounsel.xml
  22. 0 35
      src/main/java/com/style24/persistence/mybatis/shop/TsfCustomer.xml
  23. 0 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  24. 17 20
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  25. 244 247
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  26. 71 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfWishlist.xml
  27. 6 0
      src/main/resources/config/application-locd.yml
  28. 5 0
      src/main/resources/config/application.yml
  29. 39 0
      src/main/webapp/WEB-INF/views/mob/error/500Mob.html
  30. 3 3
      src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html
  31. 0 40
      src/main/webapp/WEB-INF/views/web/common/error/500Web.html
  32. 5 4
      src/main/webapp/WEB-INF/views/web/common/fragments/HeadWeb.html
  33. 0 27
      src/main/webapp/WEB-INF/views/web/common/layout/ErrorLayoutWeb.html
  34. 63 0
      src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html
  35. 163 1892
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  36. 35 4
      src/main/webapp/WEB-INF/views/web/error/500Web.html
  37. 135 76
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html
  38. 24 19
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  39. 7 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailQnaFormWeb.html
  40. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailReviewFormWeb.html
  41. 55 35
      src/main/webapp/WEB-INF/views/web/goods/GoodsIncludeFormWeb.html
  42. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsReviewDetailFormWeb.html
  43. 0 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageCouponFormWeb.html
  44. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustModifyFormWeb.html
  45. 298 0
      src/main/webapp/WEB-INF/views/web/mypage/MypagePointForm2Web.html
  46. 156 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageWishListFormWeb.html
  47. 57 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageWishListWeb.html
  48. 9 9
      src/main/webapp/WEB-INF/views/web/order/OrderCouponApplyPopWeb.html
  49. 84 90
      src/main/webapp/WEB-INF/views/web/order/OrderDelvAddrAddPopWeb.html
  50. 53 60
      src/main/webapp/WEB-INF/views/web/order/OrderDelvAddrChangePopWeb.html
  51. 61 14
      src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html
  52. 50 53
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  53. 54 26
      src/main/webapp/WEB-INF/views/web/planning/PlanningEventMainFormWeb.html
  54. 160 100
      src/main/webapp/WEB-INF/views/web/planning/PlanningMainFormWeb.html
  55. 1 1
      src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html
  56. BIN
      src/main/webapp/images/ico_inspect_err.png
  57. BIN
      src/main/webapp/images/ico_logo_err.png
  58. BIN
      src/main/webapp/images/ico_page_err.png
  59. BIN
      src/main/webapp/images/mo/arrow_npay.png
  60. BIN
      src/main/webapp/images/mo/btn_npay_txt.png
  61. BIN
      src/main/webapp/images/mo/goApp.png
  62. BIN
      src/main/webapp/images/mo/ico_admin.png
  63. BIN
      src/main/webapp/images/mo/ico_besttag.png
  64. BIN
      src/main/webapp/images/mo/ico_besttag2.png
  65. BIN
      src/main/webapp/images/mo/ico_big_check.png
  66. BIN
      src/main/webapp/images/mo/ico_branb_home.png
  67. BIN
      src/main/webapp/images/mo/ico_brandhome_arrow.png
  68. BIN
      src/main/webapp/images/mo/ico_btn_dealopen.png
  69. BIN
      src/main/webapp/images/mo/ico_complete_check.png
  70. BIN
      src/main/webapp/images/mo/ico_count.png
  71. BIN
      src/main/webapp/images/mo/ico_cp_down.png
  72. BIN
      src/main/webapp/images/mo/ico_itemdelete_btn.png
  73. BIN
      src/main/webapp/images/mo/ico_mb_arrow2.png
  74. BIN
      src/main/webapp/images/mo/ico_plus_white.png
  75. BIN
      src/main/webapp/images/mo/ico_point3.png
  76. BIN
      src/main/webapp/images/mo/ico_point3_black.png
  77. BIN
      src/main/webapp/images/mo/ico_point4.png
  78. BIN
      src/main/webapp/images/mo/ico_point4_black.png
  79. BIN
      src/main/webapp/images/mo/ico_secret.png
  80. BIN
      src/main/webapp/images/mo/ico_share.png
  81. BIN
      src/main/webapp/images/mo/ico_timer2.png
  82. BIN
      src/main/webapp/images/mo/img_mb_join_done.jpg
  83. BIN
      src/main/webapp/images/mo/img_npay_txt.png
  84. BIN
      src/main/webapp/images/mo/logo_STYLE24_white.png
  85. BIN
      src/main/webapp/images/mo/star_empty.png
  86. BIN
      src/main/webapp/images/mo/star_empty_big.png
  87. BIN
      src/main/webapp/images/mo/star_empty_big_only.png
  88. BIN
      src/main/webapp/images/mo/thumb/bnn_1stage.jpg
  89. BIN
      src/main/webapp/images/mo/thumb/bnn_1stage02.jpg
  90. BIN
      src/main/webapp/images/mo/thumb/bnn_2stage1.jpg
  91. BIN
      src/main/webapp/images/mo/thumb/bnn_2stage2.jpg
  92. BIN
      src/main/webapp/images/mo/thumb/br_main03.png
  93. BIN
      src/main/webapp/images/mo/thumb/dp_slide_Item01.png
  94. BIN
      src/main/webapp/images/mo/thumb/main_itItems01.jpg
  95. BIN
      src/main/webapp/images/mo/thumb/main_itItems02.jpg
  96. BIN
      src/main/webapp/images/mo/thumb/main_itItems03.jpg
  97. BIN
      src/main/webapp/images/mo/thumb/main_itItems04.jpg
  98. BIN
      src/main/webapp/images/mo/thumb/main_pickImg01.jpg
  99. BIN
      src/main/webapp/images/mo/thumb/main_pickImg02.jpg
  100. BIN
      src/main/webapp/images/mo/thumb/main_pickImg03.jpg

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

@@ -134,15 +134,6 @@ public interface TsfCustomerDao {
 	 */
 	int updateCustomerAuth(Customer customer);
 
-	/**
-	 * 이메일 유효성 확인
-	 * @param customer - 고객정보
-	 * @return int - 결과
-	 * @author jsshin
-	 * @since 2021. 03. 15
-	 */
-	int getCustomerByEmail(Customer customer);
-
 	/**
 	 * 고객정보- 마케팅 정보 수정
 	 * @param customer - 고객정보

+ 65 - 53
src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java

@@ -1,10 +1,8 @@
 package com.style24.front.biz.dao;
 
-import java.util.ArrayList;
 import java.util.Collection;
 
 import com.style24.core.support.annotation.ShopDs;
-import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Plan;
 import com.style24.persistence.domain.Review;
@@ -17,17 +15,16 @@ import com.style24.persistence.domain.Review;
  */
 @ShopDs
 public interface TsfPlanningDao {
-	
+
 	/**
-	 * 기획전 카테고리 1deth 조회
-	 * 
-	 * @param Cate4Srch
-	 * @return Collection<Cate4Srch>
-	 * @author sowon
-	 * @since 2021.03.05
+	 * 기획전 카테고리 목록
+	 * @param plan - 기획전 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 3. 29
 	 */
-	Collection<Cate4Srch> getPlanCate1(Cate4Srch Cate);
-	
+	Collection<Plan> getPlanningCategoryList(Plan plan);
+
 	/**
 	 * 기획전 갯수 조회
 	 * 
@@ -37,27 +34,64 @@ public interface TsfPlanningDao {
 	 * @since 2021.03.05
 	 */
 	int getPlanAllCount(Plan plan);
-	
+
 	/**
 	 * 기획전 목록
-	 *
-	 * @param
+	 * @param plan - 기획전 정보
 	 * @return
-	 * @author sowon
-	 * @date 2021. 3. 8
+	 * @author gagamel
+	 * @date 2021. 3. 29
 	 */
-	Collection<Plan> getPlanList(Plan plan);
-	
+	Collection<Plan> getPlanningList(Plan plan);
+
 	/**
 	 * 기획전 상품 목록
-	 *
 	 * @param
 	 * @return
-	 * @author sowon
-	 * @date 2021. 3. 8
+	 * @author gagamel
+	 * @since 2021. 3. 29
 	 */
-	Collection<Plan> getPlanGoodsList(Plan plan);
-	
+	Collection<Plan> getPlanningGoodsList(Plan plan);
+
+//	/**
+//	 * 기획전 목록 + 상품
+//	 *
+//	 * @param
+//	 * @return
+//	 * @author bin2107
+//	 * @since 2021. 3. 26
+//	 */
+//	Collection<Plan> getPlanningList(Plan plan);
+//
+//	/**
+//	 * 기획전 목록 + 상품
+//	 *
+//	 * @param
+//	 * @return
+//	 * @author bin2107
+//	 * @since 2021. 3. 26
+//	 */
+//	Collection<Plan> getPlanningGoodsList(Plan plan);
+
+//	/**
+//	 * 기획전 목록
+//	 * @param
+//	 * @return
+//	 * @author sowon
+//	 * @date 2021. 3. 8
+//	 */
+//	Collection<Plan> getPlanList(Plan plan);
+//
+//	/**
+//	 * 기획전 상품 목록
+//	 *
+//	 * @param
+//	 * @return
+//	 * @author sowon
+//	 * @date 2021. 3. 8
+//	 */
+//	Collection<Plan> getPlanGoodsList(Plan plan);
+
 	/**
 	 * 기획전 접근 가능 등급 고객
 	 *
@@ -67,8 +101,7 @@ public interface TsfPlanningDao {
 	 * @date 2021. 3. 19
 	 */
 	Collection<Plan> accessCustGrade(Plan plan);
-	
-	
+
 	/**
 	 * 기획전 상세정보
 	 *
@@ -78,7 +111,6 @@ public interface TsfPlanningDao {
 	 * @date 2021. 3. 19
 	 */
 	Plan getPlanDetailInfo(Plan plan);
-	
 
 	/**
 	 * 기획전 상세 프론트 소스 
@@ -89,7 +121,7 @@ public interface TsfPlanningDao {
 	 * @date 2021. 3. 22
 	 */
 	Plan getPlanFsrcInfo(Plan plan);
-	
+
 	/**
 	 * 기획전 템플릿 순서
 	 *
@@ -99,7 +131,7 @@ public interface TsfPlanningDao {
 	 * @date 2021. 3. 22
 	 */
 	Collection<Plan> templateDispOrdInfo(Plan plan);
-	
+
 	/**
 	 * 기획전 템플릿 리뷰
 	 *
@@ -109,7 +141,7 @@ public interface TsfPlanningDao {
 	 * @date 2021. 3. 22
 	 */
 	Collection<Plan> getPlanReviewInfo(Review review);
-	
+
 	/**
 	 * 기획전 템플릿 쿠폰
 	 *
@@ -119,7 +151,7 @@ public interface TsfPlanningDao {
 	 * @date 2021. 3. 22
 	 */
 	Collection<Plan> getPlanCouponInfo(Coupon coupon);
-	
+
 	/**
 	 * 기획전 템플릿 이미지
 	 *
@@ -129,7 +161,7 @@ public interface TsfPlanningDao {
 	 * @date 2021. 3. 22
 	 */
 	Collection<Plan> getPlanImageInfo(Plan plan);
-	
+
 	/**
 	 * 기획전 템플릿 상품 1열
 	 *
@@ -139,7 +171,7 @@ public interface TsfPlanningDao {
 	 * @date 2021. 3. 23
 	 */
 	Collection<Plan> getPlanGoods1Info(Plan plan);
-	
+
 	/**
 	 * 이벤트 갯수 조회
 	 * 
@@ -149,7 +181,7 @@ public interface TsfPlanningDao {
 	 * @since 2021.03.08
 	 */
 	int getEventAllCount(Plan plan);
-	
+
 	/**
 	 * 이벤트 목록
 	 *
@@ -160,24 +192,4 @@ public interface TsfPlanningDao {
 	 */
 	Collection<Plan> getPlanEventList(Plan plan);
 
-	/**
-	 * 기획전 목록 + 상품
-	 *
-	 * @param
-	 * @return
-	 * @author bin2107
-	 * @since 2021. 3. 26
-	 */
-	Collection<Plan> getPlanningList(Plan plan);
-
-	/**
-	 * 기획전 목록 + 상품
-	 *
-	 * @param
-	 * @return
-	 * @author bin2107
-	 * @since 2021. 3. 26
-	 */
-	Collection<Plan> getPlanningGoodsList(Plan plan);
-
 }

+ 23 - 1
src/main/java/com/style24/front/biz/dao/TsfWishlistDao.java

@@ -1,6 +1,10 @@
 package com.style24.front.biz.dao;
 
+import java.util.Collection;
+
 import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.WishList;
 
 /**
  * 위시리스트 Dao
@@ -10,5 +14,23 @@ import com.style24.core.support.annotation.ShopDs;
  */
 @ShopDs
 public interface TsfWishlistDao {
-
+	/**
+	 * 위시리스트 달
+	 *
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @date 2021. 3. 29
+	 */
+	Collection<WishList> getWishListMonth(WishList wishList);
+	
+	/**
+	 * 위시리스트 상품목록
+	 *
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @date 2021. 3. 29
+	 */
+	Collection<Goods> getWishListGoodsList(WishList wishList);
 }

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

@@ -314,6 +314,7 @@ public class TsfCartService {
 		if(cartSqs.size() > 0) {
 			// 다다익선 할인 상품 조회 (품절 상품 제외)
 			Collection<Order> moreBetterAmtList = new ArrayList<Order>();
+			log.info("CHECK CUST_NO :::: {}", order.getCustNo());
 			if(order.getCustNo() > 0) {
 				moreBetterAmtList = getMoreBetterAmtList(order);
 			}
@@ -321,7 +322,7 @@ public class TsfCartService {
 			// 다다익선 할인 정보 및 상품 정보 장바구니에 등록
 			for (Order cart : cartGoodsList) {
 				for (Order info : moreBetterAmtList) {
-					if (cart.getCartSq() == info.getCartSq()) {
+					if (cart.getCartSq().equals(info.getCartSq())) {
 						cart.setTmtbDcAmt(info.getTmtbDcAmt());
 						cart.setApplyAmtSectionYn(info.getApplyAmtSectionYn());
 						cart.setApplyQtySectionYn(info.getApplyQtySectionYn());
@@ -335,6 +336,9 @@ public class TsfCartService {
 				if (cart.getTmtbDcAmt() == 0) {
 					cart.setTmtbDcAmt(cart.getCurrPrice());
 				}
+
+				log.info("CHECK TMTB_DC_AMT :::: {} / {}", cart.getCartSq(), cart.getTmtbDcAmt());
+				log.info("CHECK TMTB_INFO   :::: {} / {}", cart.getApplyQtySectionYn(), cart.getApplyAmtSectionYn());
 			}
 		}
 
@@ -396,10 +400,14 @@ public class TsfCartService {
 							applyInfo.setQtyDcWay(section.getDcWay());
 							applyInfo.setQtyDcVal(section.getDcVal());
 						}
+
+						log.info("CHECK getQtyTmtbSq, getApplyQtySectionYn ::::: 1 / {} / {}", applyInfo.getQtyTmtbSq(), applyInfo.getApplyQtySectionYn());
 					} else {
 						if (applyInfo.getQtySectionVal() < 1 && applyInfo.getQtyGoodsGb().equals(TscConstants.GoodsGb.BASE.value())) {
 							applyInfo.setApplyQtySectionYn("N");
 						}
+
+						log.info("CHECK getQtyTmtbSq, getApplyQtySectionYn ::::: 2 / {} / {}", applyInfo.getQtyTmtbSq(), applyInfo.getApplyQtySectionYn());
 					}
 				}
 
@@ -412,10 +420,14 @@ public class TsfCartService {
 							applyInfo.setAmtDcWay(section.getDcWay());
 							applyInfo.setAmtDcVal(section.getDcVal());
 						}
+
+						log.info("CHECK getAmtTmtbSq, getApplyAmtSectionYn ::::: 1 / {} / {}", applyInfo.getAmtTmtbSq(), applyInfo.getApplyAmtSectionYn());
 					} else {
 						if(applyInfo.getAmtSectionVal() < 1 && applyInfo.getAmtGoodsGb().equals(TscConstants.GoodsGb.BASE.value())) {
 							applyInfo.setApplyAmtSectionYn("N");
 						}
+
+						log.info("CHECK getAmtTmtbSq, getApplyAmtSectionYn ::::: 2 / {} / {}", applyInfo.getAmtTmtbSq(), applyInfo.getApplyAmtSectionYn());
 					}
 				}
 			}
@@ -457,6 +469,8 @@ public class TsfCartService {
 						
 						resultAmt.setTmtb1DcAmt(tempAmt - resultAmt.getTmtbDcAmt()); // tmtb1 할인금액
 					}
+
+					log.info("CHECK !!!!!!!!!!!!!!!!!! ::::: 1 {} / {}", resultAmt.getCartSq(), resultAmt.getTmtbDcAmt());
 				} else {                                                                // 할인 방식 할인율일 경우
 					tempAmt = resultAmt.getCurrPrice();
 					
@@ -464,6 +478,8 @@ public class TsfCartService {
 					resultAmt.setTmtbDcAmt(tempAmt);
 					
 					resultAmt.setTmtb1DcAmt((int) (tempAmt * (resultAmt.getQtyDcVal() / 100.0))); // tmtb1 할인금액
+
+					log.info("CHECK !!!!!!!!!!!!!!!!!! ::::: 2 {} / {}", resultAmt.getCartSq(), resultAmt.getTmtbDcAmt());
 				}
 			}
 
@@ -507,12 +523,16 @@ public class TsfCartService {
 						
 						resultAmt.setTmtb2DcAmt(tempAmt - resultAmt.getTmtbDcAmt()); // tmtb1 할인금액
 					}
+
+					log.info("CHECK !!!!!!!!!!!!!!!!!! ::::: 3 {} / {}", resultAmt.getCartSq(), resultAmt.getTmtbDcAmt());
 				} else {                                                                // 할인 방식 할인율일 경우
 					tempAmt = resultAmt.getCurrPrice();
 					tempAmt = (int) (tempAmt - (tempAmt * (resultAmt.getAmtDcVal() / 100.0)));
 					resultAmt.setTmtbDcAmt(tempAmt);
 					
 					resultAmt.setTmtb2DcAmt((int) (resultAmt.getCurrPrice() * (resultAmt.getAmtDcVal() / 100.0))); // tmtb1 할인금액
+
+					log.info("CHECK !!!!!!!!!!!!!!!!!! ::::: 4 {} / {}", resultAmt.getCartSq(), resultAmt.getTmtbDcAmt());
 				}
 			}
 		}
@@ -520,7 +540,7 @@ public class TsfCartService {
 		// 장바구니 정보에 수량 다다익선 정보 입력
 		for (Order cart : cartGoodsList) {
 			for (Order apply : tmtbApplyList) {
-				if (cart.getCartSq() == apply.getCartSq()) {
+				if (cart.getCartSq().equals(apply.getCartSq())) {
 					// 2021.02.24 jsh77b
 					cart.setTmtb1DcAmt(apply.getTmtb1DcAmt());
 					cart.setTmtb2DcAmt(apply.getTmtb2DcAmt());
@@ -534,6 +554,8 @@ public class TsfCartService {
 					cart.setAmtTmtbSq(apply.getAmtTmtbSq());
 				}
 			}
+
+			log.info("FINAL AMT CHECK :::: {} / {} / {} / {}", cart.getCartSq(), cart.getApplyQtySectionYn(), cart.getApplyAmtSectionYn(), cart.getTmtbDcAmt());
 		}
 
 		//return result;
@@ -627,7 +649,8 @@ public class TsfCartService {
 				if (param.getDelvFeeCd().equals(delv.getDelvFeeCd())) {
 					compCnt++;
 					if("N".equals(param.getSoldoutYn())) {
-						delv.setCompSumPrice(delv.getCompSumPrice() + param.getTmtbDcAmt());
+						delv.setCompSumPrice(delv.getCompSumPrice() + param.getCurrPrice());
+						log.info("CHECK CURR_PRICE :::: {} / {}", param.getCartSq(), param.getCurrPrice());
 					}
 					if (compCnt == 1) {
 						param.setFirstCompYn("Y");
@@ -648,10 +671,13 @@ public class TsfCartService {
 					param.setCompCnt(delv.getCompCnt());
 					if (TscConstants.DelvFeeCrite.FREE.value().equals(delv.getDelvFeeCrite())) {
 						param.setDelvFee(0);
+						delv.setFormalGb("TEST1");
 					} else if (TscConstants.DelvFeeCrite.NORMAL.value().equals(delv.getDelvFeeCrite()) && delv.getCompSumPrice() > delv.getMinOrdAmt()) {
 						param.setDelvFee(0);
+						delv.setFormalGb("TEST2");
 					} else {
 						param.setDelvFee(delv.getDelvFee());
+						delv.setFormalGb("TEST3");
 					}
 				}
 			}
@@ -700,6 +726,7 @@ public class TsfCartService {
 				// 상품 금액 합계
 				order.setSumOrdAmt(order.getSumOrdAmt() + cart.getCurrPrice());
 				order.setSumRealPayAmt(order.getSumRealPayAmt() + cart.getTmtbDcAmt());
+				order.setSumListPrice(order.getSumListPrice() + cart.getListPrice());
 
 				// 배송비 합계
 				if ("Y".equals(cart.getFirstCompYn())) {
@@ -712,7 +739,8 @@ public class TsfCartService {
 		order.setTotDelvFee(order.getTotDelvFee() + order.getWmsDelvFee());
 
 		// 상품 할인금액 총계
-		order.setTotDcAmt(order.getSumRealPayAmt() - order.getSumOrdAmt());
+		// order.setTotDcAmt(order.getSumRealPayAmt() - order.getSumOrdAmt());		/* 다다익선 금액이 상품금액일 경우 해당 주석 제거 */
+		order.setTotDcAmt(order.getSumRealPayAmt() - order.getSumListPrice());
 
 		// 장바구니 총액 계산 상품 총 수량
 		order.setTotCartCnt(notSoldoutCnt);

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

@@ -874,7 +874,7 @@ public class TsfCustomerService {
 	 */
 	public boolean getCustomerByEmail(Customer customer) {
 		customer.encryptData();
-		int resultCnt = customerDao.getCustomerByEmail(customer);
+		int resultCnt = coreCustomerService.getCustomerByEmail(customer);
 		return resultCnt > 0;
 	}
 

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

@@ -698,7 +698,8 @@ public class TsfGoodsService {
 
 		Collection<Goods> goodsList = new ArrayList<>();
 
-		if (cate.getContentsLoc().equals("SCM002") || cate.getContentsLoc().equals("SBM007") || cate.getContentsLoc().equals("SBM013")) { // 신상품인 경우
+		if (cate.getContentsLoc().equals("SCM002") || cate.getContentsLoc().equals("SBM007") || cate.getContentsLoc().equals("SBM013")
+				|| cate.getContentsLoc().equals("SMM003")) { // 신상품인 경우
 			goodsList = goodsDao.getContentsCategoryGoodsList(cate);
 
 			// 조회된 데이터가 없거나 건수가 20개 미만이면 신규상품(=정상상품) 조회

+ 5 - 4
src/main/java/com/style24/front/biz/service/TsfOrderService.java

@@ -484,11 +484,12 @@ public class TsfOrderService {
 				checkParam.setOptCd(optCd); 
 				checkParam.setGoodsQty(goodsQty);
 				checkParam.setGoodsType(goodsType);
-				String stockResult = goodsService.getCheckStock(checkParam);
 				
-				if (!"SUCCESS".equals(stockResult)) {
-					throw new IllegalArgumentException(stockResult);
-				}
+				// TODO 2021.03.29 재고체크 
+				//String stockResult = goodsService.getCheckStock(checkParam);
+				//if (!"SUCCESS".equals(stockResult)) {
+					//throw new IllegalArgumentException(stockResult);
+				//}
 			}
 			
 			// 2.2 보유 상품쿠폰체크

+ 76 - 71
src/main/java/com/style24/front/biz/service/TsfPlanningService.java

@@ -1,25 +1,15 @@
 package com.style24.front.biz.service;
 
-import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.style24.core.support.env.TscConstants;
 import com.style24.front.biz.dao.TsfPlanningDao;
-import com.style24.front.support.env.TsfConstants;
 import com.style24.front.support.security.session.TsfSession;
-import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Coupon;
-import com.style24.persistence.domain.Goods;
-import com.style24.persistence.domain.Login;
 import com.style24.persistence.domain.Plan;
-import com.style24.persistence.domain.Point;
 import com.style24.persistence.domain.Review;
 
 import lombok.extern.slf4j.Slf4j;
@@ -36,21 +26,42 @@ public class TsfPlanningService {
 
 	@Autowired
 	private TsfPlanningDao planningDao;
-	
+
 	@Autowired
 	private TsfCouponService couponService;
-	
+
 	/**
-	 * 기획전 카테고리 1deth 조회
-	 *
-	 * @param Cate4Srch
-	 * @author sowon
-	 * @since 2021. 03. 05
-	 */	
-	public Collection<Cate4Srch> getPlanCate1(Cate4Srch cate) {
-		return planningDao.getPlanCate1(cate);
+	 * 기획전 카테고리 목록
+	 * @param plan - 기획전 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 3. 29
+	 */
+	public Collection<Plan> getPlanningCategoryList(Plan plan) {
+		return planningDao.getPlanningCategoryList(plan);
+	}
+
+	/**
+	 * 기획전 메인 목록
+	 * @param plan - 기획전 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 3. 29
+	 */
+	public Collection<Plan> getPlanningMainList(Plan plan) {
+		// 기획전 목록
+		Collection<Plan> planningList = planningDao.getPlanningList(plan);
+
+		for (Plan tPlan : planningList) {
+			plan.setPlanSq(tPlan.getPlanSq());
+
+			// 기획전 상품 목록
+			tPlan.setPlanningGoodsList(planningDao.getPlanningGoodsList(plan));
+		}
+
+		return planningList;
 	}
-	
+
 	/**
 	 * 기획전 갯수 조회
 	 * 
@@ -61,33 +72,44 @@ public class TsfPlanningService {
 	public int getPlanAllCount(Plan plan) {
 		return planningDao.getPlanAllCount(plan);
 	}
-	
+
 	/**
 	 * 기획전 목록
-	 *
-	 * @param
-	 * @return
-	 * @author sowon
-	 * @since 2021. 3. 8
-	 */
-	public Collection<Plan> getPlanList(Plan plan) {
-		//plan.setSiteCd(TsfConstants.SITE_CD);
-		return planningDao.getPlanList(plan);
-	}
-	
-	/**
-	 * 기획전 상품 목록
-	 *
-	 * @param
+	 * @param plan - 기획전 정보
 	 * @return
-	 * @author sowon
-	 * @since 2021. 3. 8
+	 * @author gagamel
+	 * @since 2021. 3. 29
 	 */
-	public Collection<Plan> getPlanGoodsList(Plan plan) {
-		//plan.setSiteCd(TsfConstants.SITE_CD);
-		return planningDao.getPlanGoodsList(plan);
+	public Collection<Plan> getPlanningList(Plan plan) {
+		return planningDao.getPlanningList(plan);
 	}
-	
+
+//	/**
+//	 * 기획전 목록
+//	 *
+//	 * @param
+//	 * @return
+//	 * @author sowon
+//	 * @since 2021. 3. 8
+//	 */
+//	public Collection<Plan> getPlanList(Plan plan) {
+//		//plan.setSiteCd(TsfConstants.SITE_CD);
+//		return planningDao.getPlanList(plan);
+//	}
+//
+//	/**
+//	 * 기획전 상품 목록
+//	 *
+//	 * @param
+//	 * @return
+//	 * @author sowon
+//	 * @since 2021. 3. 8
+//	 */
+//	public Collection<Plan> getPlanGoodsList(Plan plan) {
+//		//plan.setSiteCd(TsfConstants.SITE_CD);
+//		return planningDao.getPlanGoodsList(plan);
+//	}
+
 	/**
 	 * 기획전 고객등급 목록
 	 *
@@ -96,13 +118,13 @@ public class TsfPlanningService {
 	 * @author sowon
 	 * @since 2021. 3. 9
 	 */
-	public void accessCustGrade(Plan plan){
+	public void accessCustGrade(Plan plan) {
 		if (!TsfSession.isLogin()) {
 			throw new IllegalArgumentException("로그인 후 접근이 가능합니다.");
 		}
-		
+
 	}
-	
+
 	/**
 	 * 기획전 상세 정보
 	 *
@@ -114,7 +136,7 @@ public class TsfPlanningService {
 	public Plan getPlanDetailInfo(Plan plan) {
 		return planningDao.getPlanDetailInfo(plan);
 	}
-	
+
 	/**
 	 * 기획전 상세 프론트소스
 	 *
@@ -126,7 +148,7 @@ public class TsfPlanningService {
 	public Plan getPlanFsrcInfo(Plan plan) {
 		return planningDao.getPlanFsrcInfo(plan);
 	}
-	
+
 	/**
 	 * 기획전 템플릿 순서
 	 *
@@ -138,7 +160,7 @@ public class TsfPlanningService {
 	public Collection<Plan> templateDispOrdInfo(Plan plan) {
 		return planningDao.templateDispOrdInfo(plan);
 	}
-	
+
 	/**
 	 * 기획전 템플릿 리뷰
 	 *
@@ -150,7 +172,7 @@ public class TsfPlanningService {
 	public Collection<Plan> getPlanReviewInfo(Review review) {
 		return planningDao.getPlanReviewInfo(review);
 	}
-	
+
 	/**
 	 * 기획전 템플릿 쿠폰
 	 *
@@ -163,7 +185,7 @@ public class TsfPlanningService {
 		coupon.setCustNo(TsfSession.getInfo().getCustNo());
 		return planningDao.getPlanCouponInfo(coupon);
 	}
-	
+
 	/**
 	 * 기획전 템플릿 이미지
 	 *
@@ -175,7 +197,7 @@ public class TsfPlanningService {
 	public Collection<Plan> getPlanImageInfo(Plan plan) {
 		return planningDao.getPlanImageInfo(plan);
 	}
-	
+
 	/**
 	 * 기획전 템플릿 상품1열
 	 *
@@ -187,7 +209,7 @@ public class TsfPlanningService {
 	public Collection<Plan> getPlanGoods1Info(Plan plan) {
 		return planningDao.getPlanGoods1Info(plan);
 	}
-	
+
 	/**
 	 * 상품 쿠폰 다운 처리
 	 *
@@ -201,8 +223,6 @@ public class TsfPlanningService {
 		return couponService.getPlanCouponInfo(coupon);
 	}
 
-
-
 	/**
 	 * 이벤트 갯수 조회
 	 * 
@@ -213,7 +233,7 @@ public class TsfPlanningService {
 	public int getEvnetAllCount(Plan plan) {
 		return planningDao.getEventAllCount(plan);
 	}
-	
+
 	/**
 	 * 이벤트 목록
 	 *
@@ -226,19 +246,4 @@ public class TsfPlanningService {
 		return planningDao.getPlanEventList(plan);
 	}
 
-	/**
-	 * 기획전 목록 + 상품
-	 *
-	 * @param
-	 * @return
-	 * @author bin2107
-	 * @since 2021. 3. 26
-	 */
-	public Collection<Plan> getPlanningListForGoods(Plan plan){
-		Collection<Plan> planningList = planningDao.getPlanningList(plan);
-		for(Plan tempPlan : planningList){
-			tempPlan.setPlanningGoodsList(planningDao.getPlanningGoodsList(tempPlan));
-		}
-		return null;
-	}
 }

+ 8 - 0
src/main/java/com/style24/front/biz/service/TsfSocialService.java

@@ -58,4 +58,12 @@ public class TsfSocialService {
 		return socialDao.getSocialGoodsList(social);
 	}
 
+	public Social getSocialForGoods(Social social){
+		Social socialInfo = socialDao.getSocialInfo(social);
+
+		social.setSocialSq(socialInfo.getSocialSq());
+		socialInfo.setSocialGoodsList(socialDao.getSocialGoodsList(social));
+
+		return socialInfo;
+	}
 }

+ 34 - 1
src/main/java/com/style24/front/biz/service/TsfWishlistService.java

@@ -1,9 +1,15 @@
 package com.style24.front.biz.service;
 
+import java.util.Collection;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.style24.front.biz.dao.TsfWishlistDao;
+import com.style24.front.support.security.session.TsfSession;
+import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.Login;
+import com.style24.persistence.domain.WishList;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -18,6 +24,33 @@ import lombok.extern.slf4j.Slf4j;
 public class TsfWishlistService {
 
 	@Autowired
-	private TsfWishlistDao wishlistDao;
+	private TsfWishlistDao wishListDao;
 
+	/**
+	 * 위시리스트 달
+	 *
+	 * @param
+	 * @return
+	 * @author sowon	
+	 * @since 2021. 3. 29
+	 */
+	public Collection<WishList> getWishListMonth(WishList wishList) {
+		Login login = TsfSession.getInfo();
+		wishList.setCustNo(login.getCustNo());
+		return wishListDao.getWishListMonth(wishList);
+	}
+	
+	/**
+	 * 위시리스트 상품목록
+	 *
+	 * @param
+	 * @return
+	 * @author sowon	
+	 * @since 2021. 3. 29
+	 */
+	public Collection<Goods> getWishListGoodsList(WishList wishList) {
+		Login login = TsfSession.getInfo();
+		wishList.setCustNo(login.getCustNo());
+		return wishListDao.getWishListGoodsList(wishList);
+	}
 }

+ 1 - 1
src/main/java/com/style24/front/biz/thirdparty/Yes24Login.java

@@ -172,7 +172,7 @@ public class Yes24Login {
 		String snsId = nodeMap.getString("str_MEM_ID");
 		String custNm = nodeMap.getString("str_MEM_NM");
 		String email = nodeMap.getString("str_MEM_EML");
-		String cellphnno = nodeMap.getString("str_ADDR_MOB_NO").replaceAll("-","");
+		String cellphnno = nodeMap.getString("str_ADDR_MOB_NO");
 		String birthYmd = nodeMap.getString("str_BIRTH_DM").replaceAll("-","");
 		String sexGb = nodeMap.getString("str_SEX").equals("M")? TscConstants.Gender.MALE.value() : TscConstants.Gender.FEMALE.value();
 		String ci = nodeMap.getString("str_IPIN_CI");

+ 43 - 39
src/main/java/com/style24/front/biz/web/TsfDisplayController.java

@@ -7,17 +7,15 @@ import java.util.HashMap;
 
 import javax.servlet.http.HttpServletResponse;
 
-import com.style24.core.biz.service.TscLookbookService;
-import com.style24.front.biz.service.TsfPlanningService;
-import com.style24.persistence.domain.Lookbook;
-import com.style24.persistence.domain.MainLayout;
+import com.style24.persistence.domain.BrandGroup;
+import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Contents;
 import com.style24.persistence.domain.GnbTab;
-import com.style24.persistence.domain.Cate4Srch;
-import com.style24.persistence.domain.GoodsSearch;
-import com.style24.persistence.domain.BrandGroup;
 import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.Lookbook;
+import com.style24.persistence.domain.MainLayout;
 import com.style24.persistence.domain.Plan;
+import com.style24.persistence.domain.Social;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.mobile.device.Device;
@@ -28,12 +26,14 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
+import com.style24.front.biz.service.TsfSocialService;
 import com.style24.core.biz.service.TscEnvsetService;
+import com.style24.core.biz.service.TscLookbookService;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.front.biz.service.TsfDisplayService;
 import com.style24.front.biz.service.TsfGoodsService;
+import com.style24.front.biz.service.TsfPlanningService;
 import com.style24.front.support.controller.TsfBaseController;
-import com.style24.front.support.security.session.TsfSession;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -66,6 +66,9 @@ public class TsfDisplayController extends TsfBaseController {
 	@Autowired
 	private TsfPlanningService planningService;
 
+	@Autowired
+	private TsfSocialService socialService;
+
 	/**
 	 * 몰 메인
 	 * @return
@@ -107,32 +110,30 @@ public class TsfDisplayController extends TsfBaseController {
 				mainLayout.setContentsList(displayService.getContentsList(contents));
 			} else {
 				log.info("nullpoint contentsLoc::::{}", contentsLoc);
-				GoodsSearch goodsSearch = new GoodsSearch();
-				goodsSearch.setCateType("G031_20");
-				goodsSearch.setSoldoutGoodsDisplayYn("N");
-				//goodsSearch.setSoldoutGoodsDisplayYn(envsetService.getSoldoutGoodsDisplayYn(TscConstants.Site.STYLE24.value()));
-				goodsSearch.setCateNo(cate4Srch.getLeafCateNo());
-				goodsSearch.setFrontGb(getSession().getFrontGb());
-				//int floorUnit = envsetService.getPayUnit(TscConstants.Site.STYLE24.value()); // 가격 원단위 관리
-				//goodsSearch.setFloorUnit(floorUnit);
-				if (TsfSession.getInfo() != null) {
-					goodsSearch.setCustGb(TsfSession.getInfo().getCustGb());
-					goodsSearch.setCustNo(TsfSession.getInfo().getCustNo());
-					goodsSearch.setCustGrade(TsfSession.getInfo().getCustGrade());
+				if ("SMM001".equals(contentsLoc)) {
+					cate4Srch.setMaxRow(3);
 				} else {
-					goodsSearch.setCustGb("00");
+					cate4Srch.setMaxRow(20);
 				}
 
-				/*if("SMM001".equals(contentsLoc)){
-					goodsSearch.setMaxRownum(3);
-				}else{
-					goodsSearch.setMaxRownum(24);
-				}*/
-				//mainLayout.setGoodsList(displayService.getCategoryGoodsList(goodsSearch));
+				Collection<Goods> goodsList = goodsService.getContentsCategoryGoodsList(cate4Srch);
+				mainLayout.setGoodsList(goodsList);
+
+				if ("A".equals(mainLayout.getContentsYn())) {
+					mainLayout.setContentsList(displayService.getContentsList(contents));
+				}
+			}
+
+			if(contentsLoc.equals("SMM006")){
+				Social social = new Social();
+				social.setSiteCd("G000_10");
+				social.setFrontGb("P");
+				mainLayout.setSocialInfo(socialService.getSocialForGoods(social));
 			}
+
 			mainLayoutList.add(mainLayout);
 		}
-		log.info("mainLayoutList::{}", mainLayoutList);
+		//log.info("mainLayoutList::{}", mainLayoutList);
 		mav.addObject("mainLayoutList", mainLayoutList);
 		mav.setViewName(super.getDeviceViewName("display/MallMainForm"));
 
@@ -232,39 +233,42 @@ public class TsfDisplayController extends TsfBaseController {
 			brandMain.setCate4Srch(cate4Srch);
 
 			if ("C".equals(brandMain.getContentsYn())) {
-				if(contentsLoc.equals("SBM013")){
+				if (contentsLoc.equals("SBM013")) {
 					cate4Srch.setBrandGroupNo(brandMain.getBrandGroupNo());
 					cate4Srch.setMaxRow(5);
 					Collection<Goods> goodsList = goodsService.getContentsCategoryGoodsList(cate4Srch);
 					brandMain.setGoodsList(goodsList);
 				}
 				brandMain.setContentsList(displayService.getContentsList(contents));
-			}else{
+			} else {
 				cate4Srch.setBrandGroupNo(brandMain.getBrandGroupNo());
-				if(cate4Srch.getContentsLoc().equals("SBM008")){
+				if (cate4Srch.getContentsLoc().equals("SBM008")) {
 					cate4Srch.setMaxRow(10);
-				}else if(cate4Srch.getContentsLoc().equals("SBM013")){
+				} else if (cate4Srch.getContentsLoc().equals("SBM013")) {
 					cate4Srch.setMaxRow(50);
-				}else{	// SBM007, SBM009
+				} else {	// SBM007, SBM009
 					cate4Srch.setMaxRow(20);
 				}
 				Collection<Goods> goodsList = goodsService.getContentsCategoryGoodsList(cate4Srch);
 				brandMain.setGoodsList(goodsList);
 
-				if("A".equals(brandMain.getContentsYn())){
+				if ("A".equals(brandMain.getContentsYn())) {
 					brandMain.setContentsList(displayService.getContentsList(contents));
 				}
 			}
 
 			// 기획전 컨텐츠일때
-			if("SBM011".equals(brandMain.getContentsLoc())){
+			if ("SBM011".equals(brandMain.getContentsLoc())) {
 				Plan plan = new Plan();
-				plan.setBrandGroupNo(paramMap.get("brandGroupNo"));
-				planningService.getPlanningListForGoods(plan);
+				plan.setBrandGroupNo(Integer.parseInt(paramMap.get("brandGroupNo")));
+				plan.setMaxRow(6);
+				plan.setFrontGb("P");
+				plan.setSiteCd("G000_10");
+				brandMain.setPlanningList(planningService.getPlanningMainList(plan));
 			}
 
 			// 룩북일때
-			if("SBM010".equals(brandMain.getContentsLoc()) || "SBMM010".equals(brandMain.getContentsLoc())){
+			if ("SBM010".equals(brandMain.getContentsLoc()) || "SBMM010".equals(brandMain.getContentsLoc())) {
 				Lookbook lookbook = new Lookbook();
 				lookbook.setBrandCd(paramMap.get("brandGroupNo"));
 				lookbook.setMainDispYn("Y");
@@ -309,7 +313,7 @@ public class TsfDisplayController extends TsfBaseController {
 		// 기획전
 		Contents contents = new Contents();
 		contents.setContentsLoc("SCM001");
-		mav.addObject("planningList",displayService.getContentsList(contents));
+		mav.addObject("planningList", displayService.getContentsList(contents));
 
 		// 신상품
 		cate.setContentsLoc("SCM002");

+ 29 - 33
src/main/java/com/style24/front/biz/web/TsfIndexController.java

@@ -1,8 +1,25 @@
 package com.style24.front.biz.web;
 
+import java.io.IOException;
+import java.math.BigInteger;
+import java.security.SecureRandom;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.HttpRequestMethodNotSupportedException;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.servlet.ModelAndView;
+
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.gagaframework.web.parameter.GagaMap;
-import com.gagaframework.web.rest.server.GagaResponseStatus;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.front.biz.service.TsfCustomerService;
@@ -13,24 +30,11 @@ import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.CustSnsInfo;
 import com.style24.persistence.domain.Customer;
+
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.env.Environment;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.HttpRequestMethodNotSupportedException;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.servlet.ModelAndView;
 
-import javax.servlet.RequestDispatcher;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.SecureRandom;
+import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.rest.server.GagaResponseStatus;
 
 /**
  * Index Controller
@@ -72,7 +76,7 @@ public class TsfIndexController extends TsfBaseController {
 	 */
 	@GetMapping("/error")
 	public ModelAndView error(HttpServletRequest request, HttpServletResponse response) throws HttpRequestMethodNotSupportedException, IOException {
-		ModelAndView mav = new ModelAndView(super.getDeviceViewName("common/error/500"));
+		ModelAndView mav = new ModelAndView(super.getDeviceViewName("error/500"));
 
 		Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
 
@@ -162,8 +166,7 @@ public class TsfIndexController extends TsfBaseController {
 	 * @since 2021. 02. 23
 	 */
 	@GetMapping("/signin/kakologin")
-	public String signinKaKaoLogin(@RequestParam(value = "rememberMe", required = false) String rememberMe
-			, @RequestParam(value = "requestGb", required = false) String requestGb) {
+	public String signinKaKaoLogin(@RequestParam(value = "rememberMe", required = false) String rememberMe, @RequestParam(value = "requestGb", required = false) String requestGb) {
 
 		if (StringUtils.isNotBlank(rememberMe)) {
 			// RememberMe 세션 저장
@@ -188,8 +191,7 @@ public class TsfIndexController extends TsfBaseController {
 	 * @since 2021. 02. 23
 	 */
 	@GetMapping("/signin/naverlogin")
-	public String signinNaverLogin(@RequestParam(value = "rememberMe", required = false) String rememberMe
-			, @RequestParam(value = "requestGb", required = false) String requestGb) {
+	public String signinNaverLogin(@RequestParam(value = "rememberMe", required = false) String rememberMe, @RequestParam(value = "requestGb", required = false) String requestGb) {
 
 		if (StringUtils.isNotBlank(rememberMe)) {
 			// RememberMe 세션 저장
@@ -214,8 +216,7 @@ public class TsfIndexController extends TsfBaseController {
 	 * @since 2021. 02. 23
 	 */
 	@GetMapping("/signin/yes24login")
-	public String signinYes24Login(@RequestParam(value = "rememberMe", required = false) String rememberMe
-			, @RequestParam(value = "requestGb", required = false) String requestGb) {
+	public String signinYes24Login(@RequestParam(value = "rememberMe", required = false) String rememberMe, @RequestParam(value = "requestGb", required = false) String requestGb) {
 
 		if (StringUtils.isNotBlank(rememberMe)) {
 			// RememberMe 세션 저장
@@ -232,7 +233,6 @@ public class TsfIndexController extends TsfBaseController {
 		return "redirect:" + redirectUrl;
 	}
 
-
 	/**
 	 * SNS 로그인
 	 *
@@ -243,9 +243,7 @@ public class TsfIndexController extends TsfBaseController {
 	 * @since 2021. 02. 23
 	 */
 	@RequestMapping("/signin/snsLoginCallback")
-	public ModelAndView signinSnsLoginCallback(@RequestParam(value = "snsType", required = false) String snsType, HttpSession session
-			, @RequestParam(value = "code", required = false) String code, @RequestParam(value = "state", required = false) String state
-			, @RequestParam(value = "error", required = false) boolean isError, HttpServletRequest request) {
+	public ModelAndView signinSnsLoginCallback(@RequestParam(value = "snsType", required = false) String snsType, HttpSession session, @RequestParam(value = "code", required = false) String code, @RequestParam(value = "state", required = false) String state, @RequestParam(value = "error", required = false) boolean isError, HttpServletRequest request) {
 
 		ModelAndView mav = new ModelAndView();
 
@@ -321,9 +319,8 @@ public class TsfIndexController extends TsfBaseController {
 		return mav;
 	}
 
-
 	@RequestMapping("/signin/yes24LoginCallback")
-	public ModelAndView yes24LoginCallback(@RequestParam("ipin")String ipin, HttpSession session, HttpServletRequest request) {
+	public ModelAndView yes24LoginCallback(@RequestParam("ipin") String ipin, HttpSession session, HttpServletRequest request) {
 		ModelAndView mav = new ModelAndView();
 		boolean isSnsLoing = false;
 		GagaMap userInfo = new GagaMap();
@@ -334,7 +331,6 @@ public class TsfIndexController extends TsfBaseController {
 			isSnsLoing = true;
 		}
 
-
 		GagaMap resultMap = new GagaMap();
 
 		// SNS 로그인 성공시 정보 세션 저장
@@ -364,7 +360,7 @@ public class TsfIndexController extends TsfBaseController {
 		mav.addObject("resultMap", resultMap);
 		mav.setViewName(super.getDeviceViewName("SnsCallBackForm"));
 
-		return  mav;
+		return mav;
 	}
 
 }

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

@@ -96,7 +96,7 @@ public class TsfMypageController extends TsfBaseController {
 	private TsfReviewService reviewService;
 
 	@Autowired
-	private TsfWishlistService wishlistService;
+	private TsfWishlistService wishListService;
 
 	@Autowired
 	private TsfPointService pointService;
@@ -661,7 +661,7 @@ public class TsfMypageController extends TsfBaseController {
 		// 사용내역 조회
 		mav.addObject("usePointList", pointService.getUsePointList(point));
 
-		mav.setViewName(super.getDeviceViewName("mypage/MypagePointForm"));
+		mav.setViewName(super.getDeviceViewName("mypage/MypagePointForm2"));
 		return mav;
 	}
 
@@ -757,7 +757,7 @@ public class TsfMypageController extends TsfBaseController {
 		return result;
 	}
 
-	/* 김소원 상품권 쿠폰 리뷰 시작 */
+	/* 김소원 상품권 쿠폰 리뷰 위시리스트 시작 */
 	/**
 	 * 마이페이지 상품권화면
 	 *
@@ -1029,6 +1029,41 @@ public class TsfMypageController extends TsfBaseController {
 
 		return result;
 	}
+	
+	/**
+	 * 마이페이지 위시리스트화면
+	 *
+	 * @return
+	 * @author sowon	
+	 * @since 2021. 03. 29
+	 */
+	@GetMapping("/wish/list/form")
+	public ModelAndView mypageWishListForm(WishList wishList) {
+		ModelAndView mav = new ModelAndView(super.getDeviceViewName("mypage/MypageWishListForm"));
+		// 위시리스트 달
+		mav.addObject("wishMonth", wishListService.getWishListMonth(wishList));
+		// 위시리스트 상품목록
+		mav.addObject("wishGoods", wishListService.getWishListGoodsList(wishList));
+		return mav;
+	}
+	
+	/**
+	 * 마이페이지 상품목록 가져오기
+	 *
+	 * @return
+	 * @author sowon	
+	 * @since 2021. 03. 29
+	 */
+	@GetMapping("/wish/list")
+	public ModelAndView mypageWishGoodsList(WishList wishList) {
+		ModelAndView mav = new ModelAndView();
+		// 위시리스트 달
+		mav.addObject("wishMonth", wishListService.getWishListMonth(wishList));
+		// 위시리스트 상품목록
+		mav.addObject("wishGoods", wishListService.getWishListGoodsList(wishList));
+		mav.setViewName(super.getDeviceViewName("mypage/MypageWishList"));
+		return mav;
+	}
 
 	/*신주승 시작*/
 

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

@@ -509,10 +509,10 @@ public class TsfOrderController extends TsfBaseController {
 		
 		// TODO
 		// 2. 주문정보유효성체크
-		//orderService.orderValidationCheck(order);
+		orderService.orderValidationCheck(order);
 		
 		// 3. 주문기본정보등록(주문접수)
-		//coreOrderService.createPreOrder(order);
+		coreOrderService.createPreOrder(order);
 		
 		log.info("order.getPgGb()              ::: {}", order.getPgGb());
 		log.info("order.getPayMeans()          ::: {}", order.getPayMeans());

+ 92 - 66
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -1,11 +1,7 @@
 package com.style24.front.biz.web;
 
-import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Iterator;
-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;
@@ -16,24 +12,22 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
-import com.gagaframework.web.parameter.GagaMap;
-import com.gagaframework.web.rest.server.GagaResponseStatus;
 import com.style24.core.biz.service.TscCustomerService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
-import com.style24.front.biz.service.TsfCouponService;
 import com.style24.front.biz.service.TsfPlanningService;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
-import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Customer;
-import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.Plan;
 import com.style24.persistence.domain.Review;
 
 import lombok.extern.slf4j.Slf4j;
 
+import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.rest.server.GagaResponseStatus;
+
 /**
  * 기획전 Controller
  * 
@@ -50,38 +44,52 @@ public class TsfPlanningController extends TsfBaseController {
 
 	@Autowired
 	private TsfPlanningService planningService;
-	
+
 	@Autowired
 	private TscCustomerService coreCustomerService;
-	
+
 	/**
 	 * 기획전 메인 화면
-	 * 
+	 * @param cateNo - 카테고리번호
 	 * @return
 	 * @author sowon
 	 * @since 2021. 3. 5
 	 */
 	@GetMapping("/main/form")
-	public ModelAndView PlanningMainForm(Plan plan) throws Exception {
-		ModelAndView mav = new ModelAndView();
-		Cate4Srch cate = new Cate4Srch();
-			
-		// 카테고리 
-		mav.addObject("categoryList", planningService.getPlanCate1(cate));
-		mav.addObject("cateNo", plan.getCateNo());		
-		
-		// 각 카테고리 기획전 갯수
-		mav.addObject("planCount",planningService.getPlanAllCount(plan));
-		
-		cate.setCate1No(plan.getCateNo());
-		mav.addObject("cateNm", planningService.getPlanCate1(cate).iterator().next().getCate1Nm());			
-				
-		mav.addObject("planList", planningService.getPlanList(plan));
-		mav.addObject("goodsList", planningService.getPlanGoodsList(plan));
-		mav.setViewName(super.getDeviceViewName("planning/PlanningMainForm"));
+	public ModelAndView planningMainForm(@RequestParam(value = "cateNo", required = false) Integer cateNo) {
+		ModelAndView mav = new ModelAndView(super.getDeviceViewName("planning/PlanningMainForm"));
+
+		Plan plan = new Plan();
+		plan.setSiteCd(TscConstants.Site.STYLE24.value());
+		plan.setFrontGb(TsfSession.getFrontGb());
+
+		// 기획전 카테고리 목록
+		mav.addObject("cateList", planningService.getPlanningCategoryList(plan));
+
+		mav.addObject("cateNo", cateNo);
+
 		return mav;
 	}
-	
+
+	/**
+	 * 기획전 메인 목록
+	 * @param plan - 기획전 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 3. 29
+	 */
+	@GetMapping("/main/list")
+	@ResponseBody
+	public Collection<Plan> getPlanningMainList(Plan plan) {
+		plan.setSiteCd(TscConstants.Site.STYLE24.value());
+		plan.setFrontGb(TsfSession.getFrontGb());
+		plan.setCustGb(TsfSession.getCustGb());
+		plan.setCustNo(TsfSession.isLogin() ? TsfSession.getInfo().getCustNo() : 0);
+		plan.setMaxRow(2);
+
+		return planningService.getPlanningMainList(plan);
+	}
+
 	/**
 	 * 기획전 접근확인
 	 * 
@@ -99,7 +107,7 @@ public class TsfPlanningController extends TsfBaseController {
 
 		return result;
 	}
-	
+
 	/**
 	 * 기획전 상세화면
 	 *
@@ -109,62 +117,67 @@ public class TsfPlanningController extends TsfBaseController {
 	 */
 	@GetMapping("/detail/form")
 	@ResponseBody
-	public ModelAndView PlanningDetailForm(@RequestParam(value="planSq") int planSq) throws Exception {
-		
+	public ModelAndView PlanningDetailForm(@RequestParam(value = "planSq") int planSq) throws Exception {
+
 		ModelAndView mav = new ModelAndView();
 		Plan plan = new Plan();
 		Review review = new Review();
 		Coupon coupon = new Coupon();
+
+		plan.setSiteCd(TscConstants.Site.STYLE24.value());
+		plan.setFrontGb(TsfSession.getFrontGb());
+		plan.setCustGb(TsfSession.getCustGb());
+		plan.setCustNo(TsfSession.isLogin() ? TsfSession.getInfo().getCustNo() : 0);
 		
 		// 기본 set
 		plan.setPlanSq(planSq);
 		review.setPlanSq(planSq);
 		coupon.setPlanSq(planSq);
-		
+
 		planningService.accessCustGrade(plan);
 		// 이거 access로 옮겨야 하나..?
 		//plan.setSiteCd(TscConstants.Site.STYLE24.value());
 		plan.setFrontGb(TsfSession.getFrontGb());
-		
+
 		Plan planInfo = planningService.getPlanDetailInfo(plan);
 		mav.addObject("planInfo", planInfo);
 
-		mav.addObject("planCount",planningService.getPlanAllCount(plan));
-		
+		mav.addObject("planCount", planningService.getPlanAllCount(plan));
+
 		// 상단소스
 		plan.setFrontGb("T");
 		mav.addObject("fsrcInfoTop", planningService.getPlanFsrcInfo(plan));
-		
+
 		// 하단소스
 		plan.setFrontGb("B");
 		mav.addObject("fsrcInfoBtm", planningService.getPlanFsrcInfo(plan));
-		
+
 		// 템플릿 순서
-		mav.addObject("templateOrd",planningService.templateDispOrdInfo(plan));
-		
+		mav.addObject("templateOrd", planningService.templateDispOrdInfo(plan));
+
 		// 리뷰
-		mav.addObject("reviewInfo",planningService.getPlanReviewInfo(review));
-		
+		mav.addObject("reviewInfo", planningService.getPlanReviewInfo(review));
+
 		// 쿠폰
-		mav.addObject("couponInfo",planningService.getPlanCouponInfo(coupon));
-		
+		mav.addObject("couponInfo", planningService.getPlanCouponInfo(coupon));
+
 		// 이미지
-		mav.addObject("imageInfo",planningService.getPlanImageInfo(plan));
-		
+		mav.addObject("imageInfo", planningService.getPlanImageInfo(plan));
+
 		// 상품1열 전시
 		plan.setTmplType("G082_50");
-		mav.addObject("goods1Info",planningService.getPlanGoods1Info(plan));
-		
+		mav.addObject("goods1Info", planningService.getPlanGoods1Info(plan));
+
 		// 상품2열 전시
 		plan.setTmplType("G082_51");
-		mav.addObject("goods2Info",planningService.getPlanGoods1Info(plan));
-		
+		mav.addObject("goods2Info", planningService.getPlanGoods1Info(plan));
+
 		//상품4열 전시
 		plan.setTmplType("G082_52");
-		mav.addObject("goods4Info",planningService.getPlanGoods1Info(plan));
-				
+		mav.addObject("goods4Info", planningService.getPlanGoods1Info(plan));
+
 		// 다른기획전 보기 
-		mav.addObject("planList", planningService.getPlanList(plan));
+		mav.addObject("planList", planningService.getPlanningList(plan));
 //
 //		mav.addObject("couponList", planningService.getPlusCouponList(plan));
 //
@@ -189,7 +202,7 @@ public class TsfPlanningController extends TsfBaseController {
 		mav.setViewName(super.getDeviceViewName("planning/PlanningDetailForm"));
 		return mav;
 	}
-	
+
 	/**
 	 * 기획전 쿠폰 다운로드. 고객이 상품쿠폰 다운로드 시 발급됨.
 	 *
@@ -230,7 +243,6 @@ public class TsfPlanningController extends TsfBaseController {
 		return result;
 	}
 
-	
 	/**
 	 * 이벤트 메인 화면
 	 * 
@@ -241,17 +253,31 @@ public class TsfPlanningController extends TsfBaseController {
 	@GetMapping("/event/main/form")
 	public ModelAndView PlanningEventMainForm(Plan plan) throws Exception {
 		ModelAndView mav = new ModelAndView();
-		
-		// 디바이스 set
-		//plan.setFrontGb(TsfSession.getFrontGb());
-		
-		// 이벤트 갯수
-		mav.addObject("cnt",planningService.getEvnetAllCount(plan));
-		
-		// 이벤트 목록
-		mav.addObject("evnetList",planningService.getPlanEventList(plan));		
-		
+
+		plan.setSiteCd(TscConstants.Site.STYLE24.value());
+		plan.setFrontGb(TsfSession.getFrontGb());
+
+
 		mav.setViewName(super.getDeviceViewName("planning/PlanningEventMainForm"));
 		return mav;
 	}
+	
+	/**
+	 * 이벤트 메인 목록
+	 * @param plan - 이벤트 정보
+	 * @return
+	 * @author sowon
+	 * @since 2021. 3. 29
+	 */
+	@GetMapping("/event/main/list")
+	@ResponseBody
+	public Collection<Plan> getPlanningEventMainList(Plan plan) {
+		plan.setSiteCd(TscConstants.Site.STYLE24.value());
+		plan.setFrontGb(TsfSession.getFrontGb());
+		plan.setCustGb(TsfSession.getCustGb());
+		plan.setCustNo(TsfSession.isLogin() ? TsfSession.getInfo().getCustNo() : 0);
+
+		return planningService.getPlanEventList(plan);
+	}
+
 }

+ 1 - 0
src/main/java/com/style24/persistence/domain/MainLayout.java

@@ -31,5 +31,6 @@ public class MainLayout extends TscBaseDomain {
     private Collection<Goods> goodsList;
     private Collection<Lookbook> lookbookList;
     private Collection<Plan> planningList;
+    private Social socialInfo;
 
 }

+ 286 - 282
src/main/java/com/style24/persistence/domain/Plan.java

@@ -1,6 +1,5 @@
 package com.style24.persistence.domain;
 
-
 import java.util.Collection;
 import java.util.List;
 
@@ -19,286 +18,291 @@ import lombok.Data;
 
 @SuppressWarnings("serial")
 @Data
-public class Plan extends TscBaseDomain{
+public class Plan extends TscBaseDomain {
+
 	// 기획전
-		private Integer planSq;				//기획전일련번호(SeqPlan sequence)
-		private String planNm;				//기획전명
-		private String planGb;				//기획전구분(P:기획전private String  E:이벤트)
-		private String custGb;				//고객구분
-		private String custGrade;			//회원등급
-		private String planSnm;				//검색어
-		private String templateType;		//템플릿유형(H:Htmlprivate String  T:텍스트)
-		private String siteCd;				//사이트코드(공통코드g000)
-		private String frontGb;				//프론트구분(A:All, P:웹, M:모바일)
-		private String dispStdt;			//기획전 시작일시
-		private String dispEddt;			//기획전 종료일시
-		private String mainPimg;			//메인이미지(Pc)
-		private String mainMimg;			//메인이미지(모바일)
-		private String dtlPimg;				//상세이미지(Pc)
-		private String dtlMimg;				//상세이미지(모바일)
-		private String orgMainPimg;			//원본메인이미지(Pc)
-		private String orgMainMimg;			//원본메인이미지(모바일)
-		private String orgDtlPimg;			//원본상세이미지(Pc)
-		private String orgDtlMimg;			//원본상세이미지(모바일)
-		private String orgMainPimgDelYn;	//원본메인이미지(Pc) 삭제여부
-		private String orgMainMimgDelYn;	//원본메인이미지(모바일) 삭제여부
-		private String orgDtlPimgDelYn;		//원본상세이미지(Pc) 삭제여부
-		private String orgDtlMimgDelYn;		//원본상세이미지(모바일) 삭제여부
-		private String dtlTitle1;			//상세제목1
-		private String dtlTitle2;			//상세제목2
-		private String cateCd;				//카테고리코드(대/중/소/세카테고리)
-		private String cateDispYn;			//카테고리전시여부(Y:전시)
-		private String replyYn;				//댓글여부(Y:댓글)
-		private String replyLoc;			//댓글위치(U:상품리스트상단 D:상품리스트하단)
-		private String replyImg;			//댓글이미지
-		private String orgReplyImg;			//원본댓글이미지
-		private String replyTitle1;			//댓글제목1
-		private String replyTitle2;			//댓글제목2
-		private String devUrl;				//호출 URL
-		private String orgReplyImgDelYn;	//원본댓글이미지 삭제여부
-		private String cornerNmDispYn;		//코너명노출여부(Y:노출)
-		private String goodsLimitYn;		//상품등록제한여부(Y:상품등록제한)
-		private String goodsLimitQty;		//상품등록제한수(상품등록제한여부가 "Y"일 떄)
-		private String delYn;				//삭제여부(Y:삭제)
-		private String openYn;				//오픈여부(Y:오픈)
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		private long[] dispOrdArr;			// 표시순서 배열
-		private long dispOrd;				//표시순서
-		private long readCnt;				//조회수
-		private Integer pollSq;				//투표일련번호
-		private String badgeNm;				//뱃지이름
-		private String badgeFcolor;			//뱃지글자컬러
-		private String badgeBcolor;			//뱃지배경컬러
-		private String privacyPolicy;		//개인정보수집동의정책
-
-		// 기획전 소스
-		private Integer seq;					//일련번호
-		private String fsrcPc;				//프론트소스(pc)	/ 화면용
-		private String fsrcMob;			//프론트소스(모바일)	/ 화면용
-		private String locGb;			//위치구분(T:상단 / B:하단)
-
-		// 기획전 상세
-		private Integer planDtlSq;				//기획전상세일련번호(SEQ_PLAN_DTL sequence)
-		private Integer copyPlanDtlSq;			//복사할 상세 일련번호
-		private Integer copyPlanSq;			//복사할 일련번호
-		private String copyMode;			//복사 선택(CORNER:코너복사, PLAN:기획전복사)
-		private String cornerDispType;		//코너노출유형(공통코드G045) (2:2컷 , 3:3컷, 4:4컷)
-		private String cornerNm;			//코너 명
-		private String planDtlStat;			//기획전상세상태(공통코드G044)
-		private String copyBrandCd;	        //복사할 브랜드코드
-		private String adminPreview;	// 어드민미리보기 여부 (Y:미리보기)
-		// 기획전 브랜드
-		private String brandGroupNo;	//기획전브랜드그룹번호
-		private String DispYn;      	//표시여부           
-		private String brandGroupKnm; 	// 브랜드 그룹명(한글)
-		private String brandGroupEnm; 	// 브랜드 그룹명(영어)
-		/* Multi CheckBox 항목*/
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		private String[] multiBrand;
-		private String[] multiCate;
-		
-		// 코너
-		private String cateGb;		// 카테고리구분
-		private String cateNm;		// 카테고리명
-		private Integer cateNo;		// 카테고리번호
-		
-		// 고객등급
-		private String custGradeName;	// 접근가능고객 등급 네임
-		
-		
-		// 기획전 응모
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		private String[] planQtitle;
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		private String[] attachYn;
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		private String[] planAnswerSq;
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		private String[] answer;
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		private String[] sysFileNm;
-
-		//private Collection<TsaPlanQuestAnswer> planQuestAnswerList; // 고시항목
-
-		// 검색
-		private String startSearchDate;		// 진행기간 시작일
-		private String startSearchTime;		// 진행기간 시작시간
-		private String endSearchDate;		// 진행기간 종료일
-		private String endSearchTime;		// 진행기간 종료시간
-		private String excelFileNm;			// 엑셀 파일 명
-		//private int startRow;				// 페이징 시작
-		//private int endRow;					// 피이징 종료
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		private String[] siteCds;			// 사이트
-
-		// 코너 상품
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		private String[] goodsCdArr;		// 상품 코드 배열
-		private String goodsCd;				// 상품 코드
-		private String goodsNm;				// 상품 명
-		private String goodsStat;			// 제품상태
-		private String imgType;				// 이미지 타입
-		private String imgPath1;			// 이미지 경로1
-		private String imgPath2;			// 이미지 경로2
-		private String imgPath4;			// 이미지 경로4
-		private String imgPath5;			// 이미지 경로5
-		private String imgPath6;			// 이미지 경로6
-		private String dcRate;				// 할인율
-		private String listPrice;			// 최소 소비자가
-		private String tagPrice;			// tag 가
-		private String currPrice;			// 판매가
-		private String supplyCompCd;		// 업체코드
-		private String supplyCompNm;		// 업체명
-		private String formalGb;			// 정상/이월 여부
-		private String currStockQty;		// 재고
-		private String pageYn;				// 페이징 사용 여부
-		private String changeGb;			// 순서변경 updown 구분
-		private int stockQtySum;			// 재고
-		private String afLinkCd;			// 제휴채널
-		private String afChannel;			// 제휴채널 공통코드
-		private String afLinkNm;			// 제휴채널 명
-
-		// 기획전 팝업
-		private String callBackFun;			// 콜백함수명
-		private String popupDispStdt;		//기획전 시작일시
-		private String popupDispEddt;		//기획전 종료일시
-		
-		//기획전 템플릿
-		private Integer planContSq;			// 기획전 컨텐츠 일련번호
-		private String tmplType;			//템플릿 유형(공통코드 G082)
-		private String title;				//타이틀
-		private String linkUrl;				//링크url
-		private String dispYn;				//표시여부
-		private Integer planContItemSq;		//기획전 컨텐프 아이템 일련번호
-		private String itemVal;				//아이템값(상품코드, 이미지파일명 등)
-		private String reviewDispStdt;		//리뷰노출시작일시
-		private String reviewDispEddt;		//리뷰노툴종료일시
-		
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		private String[] multiPlanReview;		//리뷰상품목록
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		private String[] multiPlanReviewStartD;		//리뷰시작날짜
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		private String[] multiPlanReviewStartT;		//리뷰시작시간
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		private String[] multiPlanReviewEndD;		//리뷰종료날짜
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		private String[] multiPlanReviewEndT;		//리뷰종료시간
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		private String[] multiPlanCoupon;		//쿠폰목록
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		private String[] multiPlanFile;			//이미지목록
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		private String[] multiChannel;			//제휴채널목록
-		
-
-		
-		// 템플릿 저장하기 위한 임시 변수
-		private String reTitle;				//리뷰타이틀
-		private String mode;				//모드
-		private long reDispOrd;				//리뷰전시순서
-		private String reItemVal;			//리뷰아이템
-		private String reDispYn;			//리뷰전시여부
-		private String reItemNm;			//리뷰상품이름
-		private Integer rePlanContSq;		//리뷰 컨텐츠일련번호
-		
-		private String cuTitle;				//쿠폰타이틀
-		private long cuDispOrd;				//쿠폰전시순서
-		private String cuDispYn;			//쿠폰전시여부
-		private String cuItemVal;			//쿠폰 아이템
-		private String cuItemNm;			//쿠폰 아이템 이름
-		private Integer cuPlanContSq;		//쿠폰 컨텐츠일련번호
-		
-		private String fileItemVal;			//파일아이템
-		private String fileDispYn;			//파일전시여부
-		private long fileDispOrd;			//파일전시순서
-		private Integer filePlanContSq;		//파일 컨텐츠일련번호
-		
-		private String topFsrcDispYn;		//html상단 전시여부
-		private String BtmFsrcDispYn;		//html하단 전시여부
-		private long   topFsrcDispOrd;		//html상단 전시순서
-		private long   btmFsrcDispOrd;		//html하단 전시순서
-		private String fsrcPcTop;			//html상단 내용(pc)
-		private String fsrcMobileTop;	    //html상단 내용(mobile)
-		private String fsrcPcBtm;			//html하단 내용(pc)
-		private String fsrcMobileBtm;		//html하단 내용(pc)
-		
-		private String goodsTitle;			//상품타이틀
-		private String goodsUrl;			//상품 url
-		private String goodsDispYn;			//상품전시여부
-		private long goodsDispOrd;			//상품 전시순서
-		private String goodsType;			//상품노출순서
-		private String goodsItemVal;		//상품아이템
-		private String brandEnm;			//브랜드명
-		private Integer goodsPlanContSq;	//상품 컨텐츠일련번호
-		
-		private String brand;				// 기획전 리스트 (브랜드 명 외)
-		private String newPlan;				// 기획전 new 확인
-		private int cnt;					// 기획전 브랜드 카운트;
-		private String brandKnm;
-		
-		private String sysImgNm;			// 상품 이미지
-		// Pagination
-		private TscPageRequest pageable;
-		private int pageNo = 1;
-		private int pageSize = 50;
-		private int pageUnit = 10;
-		
-		private String condition; // 키워드 종류
-		private String search; // 검색어
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		private String[] conditionList;
-		
-		 // 사용가능고객등급
-	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	    private String[] usableCustGradeArr;
-		
-	    // 사용가능고객구분
-	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	    private String[] usableCustGbArr;
-	    
-	    
-	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		List<Plan> multiPlanGoodsContent1; 
-	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		List<Plan> multiPlanGoodsContent2; 
-	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		List<Plan> multiPlanGoodsContent3; 
-	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		List<Plan> multiPlanGoodsContent4; 
-	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		List<Plan> multiPlanGoodsContent5; 
-	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		List<Plan> multiPlanGoodsContent6; 
-	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		List<Plan> multiPlanGoodsContent7; 
-	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		List<Plan> multiPlanGoodsContent8; 
-	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		List<Plan> multiPlanGoodsContent9; 
-	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		List<Plan> multiPlanGoodsContent10; 
-	    
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		List<Plan> multiPlanGoodsContentVal1; 
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		List<Plan> multiPlanGoodsContentVal2; 
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		List<Plan> multiPlanGoodsContentVal3; 
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		List<Plan> multiPlanGoodsContentVal4; 
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		List<Plan> multiPlanGoodsContentVal5; 
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		List<Plan> multiPlanGoodsContentVal6; 
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		List<Plan> multiPlanGoodsContentVal7; 
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		List<Plan> multiPlanGoodsContentVal8; 
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		List<Plan> multiPlanGoodsContentVal9; 
-		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-		List<Plan> multiPlanGoodsContentVal10;
-
-		Collection<Plan> planningGoodsList;	//베너별 상품목록
+	private Integer planSq;			//기획전일련번호(SeqPlan sequence)
+	private String planNm;			//기획전명
+	private String planGb;			//기획전구분(P:기획전, E:이벤트)
+	private Integer custNo;			//고객번호
+	private String custGb;			//고객구분
+	private String custGrade;		//회원등급
+	private String planSnm;			//검색어
+	private String templateType;	//템플릿유형(H:Html, T:텍스트)
+	private String siteCd;			//사이트코드(공통코드g000)
+	private String frontGb;			//프론트구분(A:All, P:웹, M:모바일)
+	private String dispStdt;		//기획전 시작일시
+	private String dispEddt;		//기획전 종료일시
+	private String mainImg;			//메인이미지
+	private String mainPimg;		//메인이미지(Pc)
+	private String mainMimg;		//메인이미지(모바일)
+	private String dtlPimg;			//상세이미지(Pc)
+	private String dtlMimg;			//상세이미지(모바일)
+	private String orgMainPimg;		//원본메인이미지(Pc)
+	private String orgMainMimg;		//원본메인이미지(모바일)
+	private String orgDtlPimg;		//원본상세이미지(Pc)
+	private String orgDtlMimg;		//원본상세이미지(모바일)
+	private String orgMainPimgDelYn;//원본메인이미지(Pc) 삭제여부
+	private String orgMainMimgDelYn;//원본메인이미지(모바일) 삭제여부
+	private String orgDtlPimgDelYn;	//원본상세이미지(Pc) 삭제여부
+	private String orgDtlMimgDelYn;	//원본상세이미지(모바일) 삭제여부
+	private String dtlTitle1;		//상세제목1
+	private String dtlTitle2;		//상세제목2
+	private String cateCd;			//카테고리코드(대/중/소/세카테고리)
+	private String cateDispYn;		//카테고리전시여부(Y:전시)
+	private String replyYn;			//댓글여부(Y:댓글)
+	private String replyLoc;		//댓글위치(U:상품리스트상단 D:상품리스트하단)
+	private String replyImg;		//댓글이미지
+	private String orgReplyImg;		//원본댓글이미지
+	private String replyTitle1;		//댓글제목1
+	private String replyTitle2;		//댓글제목2
+	private String devUrl;			//호출 URL
+	private String orgReplyImgDelYn;//원본댓글이미지 삭제여부
+	private String cornerNmDispYn;	//코너명노출여부(Y:노출)
+	private String goodsLimitYn;	//상품등록제한여부(Y:상품등록제한)
+	private String goodsLimitQty;	//상품등록제한수(상품등록제한여부가 "Y"일 떄)
+	private String delYn;			//삭제여부(Y:삭제)
+	private String openYn;			//오픈여부(Y:오픈)
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private long[] dispOrdArr;		//표시순서 배열
+	private long dispOrd;			//표시순서
+	private long readCnt;			//조회수
+	private Integer pollSq;			//투표일련번호
+	private String badgeNm;			//뱃지이름
+	private String badgeFcolor;		//뱃지글자컬러
+	private String badgeBcolor;		//뱃지배경컬러
+	private String privacyPolicy;	//개인정보수집동의정책
+
+	// 기획전 소스
+	private Integer seq;			//일련번호
+	private String fsrcPc;			//프론트소스(pc)	/ 화면용
+	private String fsrcMob;			//프론트소스(모바일)	/ 화면용
+	private String locGb;			//위치구분(T:상단 / B:하단)
+
+	// 기획전 상세
+	private Integer planDtlSq;		//기획전상세일련번호(SEQ_PLAN_DTL sequence)
+	private Integer copyPlanDtlSq;	//복사할 상세 일련번호
+	private Integer copyPlanSq;		//복사할 일련번호
+	private String copyMode;		//복사 선택(CORNER:코너복사, PLAN:기획전복사)
+	private String cornerDispType;	//코너노출유형(공통코드G045) (2:2컷 , 3:3컷, 4:4컷)
+	private String cornerNm;		//코너 명
+	private String planDtlStat;		//기획전상세상태(공통코드G044)
+	private String copyBrandCd;		//복사할 브랜드코드
+	private String adminPreview;	// 어드민미리보기 여부 (Y:미리보기)
+
+	// 기획전 브랜드
+	private Integer brandGroupNo;	//기획전브랜드그룹번호
+	private String DispYn;      	//표시여부           
+	private String brandGroupKnm; 	//브랜드 그룹명(한글)
+	private String brandGroupEnm; 	//브랜드 그룹명(영어)
+	/* Multi CheckBox 항목*/
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiBrand;
+	private String[] multiCate;
+
+	// 코너
+	private String cateGb;			// 카테고리구분
+	private String cateNm;			// 카테고리명
+	private Integer cateNo;			// 카테고리번호
+
+	// 고객등급
+	private String custGradeName;	// 접근가능고객 등급 네임
+
+	// 기획전 응모
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] planQtitle;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] attachYn;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] planAnswerSq;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] answer;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] sysFileNm;
+
+	//private Collection<TsaPlanQuestAnswer> planQuestAnswerList; // 고시항목
+
+	// 검색
+	private String startSearchDate;		// 진행기간 시작일
+	private String startSearchTime;		// 진행기간 시작시간
+	private String endSearchDate;		// 진행기간 종료일
+	private String endSearchTime;		// 진행기간 종료시간
+	private String excelFileNm;			// 엑셀 파일 명
+	//private int startRow;				// 페이징 시작
+	//private int endRow;					// 피이징 종료
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] siteCds;			// 사이트
+
+	// 코너 상품
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] goodsCdArr;		// 상품 코드 배열
+	private String goodsCd;				// 상품 코드
+	private String goodsNm;				// 상품 명
+	private String goodsStat;			// 제품상태
+	private String imgType;				// 이미지 타입
+	private String imgPath1;			// 이미지 경로1
+	private String imgPath2;			// 이미지 경로2
+	private String imgPath4;			// 이미지 경로4
+	private String imgPath5;			// 이미지 경로5
+	private String imgPath6;			// 이미지 경로6
+	private String dcRate;				// 할인율
+	private String listPrice;			// 최소 소비자가
+	private String tagPrice;			// tag 가
+	private String currPrice;			// 판매가
+	private String supplyCompCd;		// 업체코드
+	private String supplyCompNm;		// 업체명
+	private String formalGb;			// 정상/이월 여부
+	private String currStockQty;		// 재고
+	private String pageYn;				// 페이징 사용 여부
+	private String changeGb;			// 순서변경 updown 구분
+	private int stockQtySum;			// 재고
+	private String afLinkCd;			// 제휴채널
+	private String afChannel;			// 제휴채널 공통코드
+	private String afLinkNm;			// 제휴채널 명
+
+	// 기획전 팝업
+	private String callBackFun;			// 콜백함수명
+	private String popupDispStdt;		//기획전 시작일시
+	private String popupDispEddt;		//기획전 종료일시
+
+	//기획전 템플릿
+	private Integer planContSq;			// 기획전 컨텐츠 일련번호
+	private String tmplType;			//템플릿 유형(공통코드 G082)
+	private String title;				//타이틀
+	private String linkUrl;				//링크url
+	private String dispYn;				//표시여부
+	private Integer planContItemSq;		//기획전 컨텐프 아이템 일련번호
+	private String itemVal;				//아이템값(상품코드, 이미지파일명 등)
+	private String reviewDispStdt;		//리뷰노출시작일시
+	private String reviewDispEddt;		//리뷰노툴종료일시
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiPlanReview;		//리뷰상품목록
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiPlanReviewStartD;		//리뷰시작날짜
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiPlanReviewStartT;		//리뷰시작시간
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiPlanReviewEndD;		//리뷰종료날짜
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiPlanReviewEndT;		//리뷰종료시간
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiPlanCoupon;		//쿠폰목록
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiPlanFile;			//이미지목록
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiChannel;			//제휴채널목록
+
+	// 템플릿 저장하기 위한 임시 변수
+	private String reTitle;				//리뷰타이틀
+	private String mode;				//모드
+	private long reDispOrd;				//리뷰전시순서
+	private String reItemVal;			//리뷰아이템
+	private String reDispYn;			//리뷰전시여부
+	private String reItemNm;			//리뷰상품이름
+	private Integer rePlanContSq;		//리뷰 컨텐츠일련번호
+
+	private String cuTitle;				//쿠폰타이틀
+	private long cuDispOrd;				//쿠폰전시순서
+	private String cuDispYn;			//쿠폰전시여부
+	private String cuItemVal;			//쿠폰 아이템
+	private String cuItemNm;			//쿠폰 아이템 이름
+	private Integer cuPlanContSq;		//쿠폰 컨텐츠일련번호
+
+	private String fileItemVal;			//파일아이템
+	private String fileDispYn;			//파일전시여부
+	private long fileDispOrd;			//파일전시순서
+	private Integer filePlanContSq;		//파일 컨텐츠일련번호
+
+	private String topFsrcDispYn;		//html상단 전시여부
+	private String BtmFsrcDispYn;		//html하단 전시여부
+	private long topFsrcDispOrd;		//html상단 전시순서
+	private long btmFsrcDispOrd;		//html하단 전시순서
+	private String fsrcPcTop;			//html상단 내용(pc)
+	private String fsrcMobileTop;	    //html상단 내용(mobile)
+	private String fsrcPcBtm;			//html하단 내용(pc)
+	private String fsrcMobileBtm;		//html하단 내용(pc)
+
+	private String goodsTitle;			//상품타이틀
+	private String goodsUrl;			//상품 url
+	private String goodsDispYn;			//상품전시여부
+	private long goodsDispOrd;			//상품 전시순서
+	private String goodsType;			//상품노출순서
+	private String goodsItemVal;		//상품아이템
+	private String brandEnm;			//브랜드명
+	private Integer goodsPlanContSq;	//상품 컨텐츠일련번호
+
+	private String brand;				// 기획전 리스트 (브랜드 명 외)
+	private String newYn;				// 기획전 신규여부
+	private int endDays;				// 종료임박일수
+	private int cnt;					// 기획전 브랜드 카운트;
+	private String brandKnm;
+
+	private String sysImgNm;			// 상품 이미지
+	// Pagination
+	private TscPageRequest pageable;
+	private int pageNo = 1;
+	private int pageSize = 50;
+	private int pageUnit = 10;
+
+	private String condition; // 키워드 종류
+	private String search; // 검색어
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] conditionList;
+
+	// 사용가능고객등급
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] usableCustGradeArr;
+
+	// 사용가능고객구분
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] usableCustGbArr;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	List<Plan> multiPlanGoodsContent1;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	List<Plan> multiPlanGoodsContent2;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	List<Plan> multiPlanGoodsContent3;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	List<Plan> multiPlanGoodsContent4;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	List<Plan> multiPlanGoodsContent5;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	List<Plan> multiPlanGoodsContent6;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	List<Plan> multiPlanGoodsContent7;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	List<Plan> multiPlanGoodsContent8;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	List<Plan> multiPlanGoodsContent9;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	List<Plan> multiPlanGoodsContent10;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	List<Plan> multiPlanGoodsContentVal1;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	List<Plan> multiPlanGoodsContentVal2;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	List<Plan> multiPlanGoodsContentVal3;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	List<Plan> multiPlanGoodsContentVal4;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	List<Plan> multiPlanGoodsContentVal5;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	List<Plan> multiPlanGoodsContentVal6;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	List<Plan> multiPlanGoodsContentVal7;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	List<Plan> multiPlanGoodsContentVal8;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	List<Plan> multiPlanGoodsContentVal9;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	List<Plan> multiPlanGoodsContentVal10;
+
+	Collection<Plan> planningGoodsList;	//베너별 상품목록
+
+	private String likeIt;	// 위시리스트담은상품
+	private int maxRow;		// 최대ROW수
+
 }

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

@@ -6,6 +6,8 @@ import com.style24.persistence.TscPageRequest;
 
 import lombok.Data;
 
+import java.util.Collection;
+
 /**
  * 소셜관리 Domain
  *
@@ -75,7 +77,9 @@ public class Social extends TscBaseDomain{
 		
 		// wish
 		private String wishYn;	// 위시리스트 등록 여부
-		
+
+		// 몰메인
+		Collection<Social> socialGoodsList;
 		
 		// Pagination
 		private TscPageRequest pageable;

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

@@ -21,7 +21,7 @@ public class WishList extends TscBaseDomain {
 	private String ithrCd;
 	private String contentsLoc;
 	private Integer planDtlSq;
-	
+	private String regDt;
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] arrGoodsCd;
 

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

@@ -271,12 +271,12 @@
 		SELECT COUNT(*) AS CNT
 		FROM   TB_COUNSEL A
 		     , TB_GOODS G
-		<if test="goodsType != null and goodsType = 'G056_D'">
+		<if test="goodsType != null and goodsType == 'G056_D'">
 		     , TB_GOODS_COMPOSE C
 		</if>
 		WHERE  1 = 1
 		<choose>
-		    <when test="goodsType != null and goodsType = 'G056_D'">
+		    <when test="goodsType != null and goodsType == 'G056_D'">
 		AND    A.REL_GOODS_CD = G.GOODS_CD
 		AND    G.GOODS_CD = C.COMPS_GOODS_CD
 		AND    C.GOODS_CD = #{relGoodsCd}

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

@@ -552,41 +552,6 @@
 		WHERE  CUST_NO = #{custNo}
 	</update>
 
-	<!--이메일 유효성 체크-->
-	<select id="getCustomerByEmail" parameterType="Customer">
-		/* TsfCustomer.getCustomerByEmail */
-		SELECT B.CNT
-		FROM (
-		       SELECT A.CNT
-		       , ROW_NUMBER() OVER (ORDER BY A.CNT DESC) AS NUMB
-		       FROM (
-		       SELECT COUNT(*) AS CNT
-		       FROM   TB_CUSTOMER
-		       WHERE  CUST_STAT = 'G104_10'   /* 활동회원*/
-		       AND    SITE_CD = #{siteCd}
-		       AND    CUST_NO != #{custNo}
-		       AND    EMAIL = #{encodedEmail}
-
-		       UNION ALL
-
-		       SELECT COUNT(*) AS CNT
-		       FROM   TB_SECEDE_CUST
-		       WHERE  SITE_CD = #{siteCd}
-		       AND    CUST_NO != #{custNo}
-		       AND    EMAIL = #{encodedEmail}
-
-		       UNION ALL
-
-		       SELECT COUNT(*) AS CNT
-		       FROM   TB_DORMANT_CUST
-		       WHERE  SITE_CD = #{siteCd}
-		       AND    CUST_NO != #{custNo}
-		       AND    EMAIL = #{encodedEmail}
-		       ) A
-		) B
-		WHERE NUMB = 1
-	</select>
-
 	<!--고객정보 수정-->
 	<update id="updateCustomerInfo" parameterType="Customer">
 		/* TsfCustomer.updateCustomerInfo */

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

@@ -448,7 +448,6 @@
 		<if test="brandGroupNo != null and brandGroupNo !=''">
 			AND    BRAND_GROUP_NO  = #{brandGroupNo}
 		</if>
-		AND 	CONTENTS_LOC IN ('SMM001','SMM002','SMM005','SMM008','SBM004','SBM005','SBM006','SBM007','SBM008','SBM009','SBM010','SBM013')
 		ORDER BY DISP_ORD, COL_NO
 	</select>
 

+ 17 - 20
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -1090,23 +1090,19 @@
 		)
 		, TAB_GOODS_IMG AS (
 		    /* 상품의 이미지 */
-		    SELECT G.BRAND_GROUP_NM
-		         , G.GOODS_CD
-		         , G.GOODS_NM
-		         , G.GOODS_GB
-		         , G.FOREIGN_BUY_YN
-		         , G.PARALLEL_IMPORT_YN
-		         , G.ORDER_MADE_YN
-		         , G.GOODS_TNM
-		         , G.MAIN_COLOR_CD
-		         , G.LIST_PRICE
-		         , G.CURR_PRICE
-		         , CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END   AS SYS_IMG_NM
-		         , CASE WHEN GI.MOUSEOVER_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END AS SYS_IMG_NM2
-		    FROM   TAB_GOODS G
-		         , TB_GOODS_IMG GI
-		    WHERE  G.GOODS_CD = GI.GOODS_CD
-		    AND    G.MAIN_COLOR_CD = GI.COLOR_CD
+		    SELECT GOODS_CD
+		          ,MAX(SYS_IMG_NM) AS SYS_IMG_NM
+		          ,MAX(SYS_IMG_NM2) AS SYS_IMG_NM2
+		    FROM (
+		          SELECT G.GOODS_CD
+		               , CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END   AS SYS_IMG_NM
+		               , CASE WHEN GI.MOUSEOVER_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END AS SYS_IMG_NM2
+		          FROM   TAB_GOODS G
+		               , TB_GOODS_IMG GI
+		          WHERE  G.GOODS_CD = GI.GOODS_CD
+		          AND    G.MAIN_COLOR_CD = GI.COLOR_CD
+		          ) Z
+		     GROUP BY GOODS_CD
 		)
 		, TAB_GOODS_VIDEO AS (
 		    /* 상품의 동영상 목록 */
@@ -1139,8 +1135,8 @@
 		     , G.MAIN_COLOR_CD
 		     , G.LIST_PRICE
 		     , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD,G.CURR_PRICE,#{custGb})                           AS CURR_PRICE    /*현재판매가*/
-		     , G.SYS_IMG_NM
-		     , G.SYS_IMG_NM2
+		     , GI.SYS_IMG_NM
+		     , GI.SYS_IMG_NM2
 		     , GV.VIDEO_GB_M
 		     , GV.VIDEO_VAL_M
 		     , GV.VIDEO_GB_S
@@ -1153,7 +1149,8 @@
 		     , ''                                                                                           AS LIKE_IT       /*위시리스트담긴상품*/
 		         </otherwise>
 		     </choose>
-		FROM   TAB_GOODS_IMG G
+		FROM   TAB_GOODS G
+		LEFT OUTER JOIN TAB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
 		LEFT OUTER JOIN TAB_GOODS_VIDEO GV ON G.GOODS_CD = GV.GOODS_CD
 		<if test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
 		LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD

+ 244 - 247
src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml

@@ -14,21 +14,35 @@
 		WHERE  NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
 	</sql>
 	
-	<select id="getPlanCate1" resultType="Cate4Srch" parameterType="Cate4Srch">
-		/* TsfPlanning.getPlanCate1 */
-		SELECT CATE1_NO 
-      		  ,CATE1_NM 
-		      ,CATE_GB 
-		      ,CATE_TYPE 
-		      ,CONTENTS_LOC 
-		      ,FORMAL_GB 
-		      ,DISP_ORD 
-		      ,DISP_YN 
-	   FROM TB_CATE1
-	   WHERE 1=1
-	   	<if test="cate1No != null and cate1No != ''">
-	   	AND CATE1_NO = #{cate1No}
-	   	</if>
+	<!-- 기획전 카테고리 목록 -->
+	<select id="getPlanningCategoryList" parameterType="Plan" resultType="Plan">
+		/* TsfPlanning.getPlanningCategoryList */
+		SELECT PL.CATE_NO             /*카테고리번호*/
+		     , C1.CATE1_NM AS CATE_NM /*카테고리명*/
+		FROM   TB_PLAN P
+		     , TB_PLAN_CATE PL
+		     , TB_CATE1 C1
+		WHERE  P.PLAN_SQ = PL.PLAN_SQ
+		AND    PL.CATE_NO = C1.CATE1_NO
+		AND    P.PLAN_GB = 'P' /*기획전*/
+		AND    P.SITE_CD = #{siteCd}
+		<if test="frontGb != null and frontGb != ''">
+		    <if test='frontGb == "P"'> <!-- PC웹 -->
+		AND    P.FRONT_GB IN ('A','P')
+		    </if>
+		    <if test='frontGb == "A" or frontGb == "M"'> <!-- 모바일 -->
+		AND    P.FRONT_GB IN ('A','M')
+		    </if>
+		</if>
+		AND    NOW() BETWEEN P.DISP_STDT AND P.DISP_EDDT
+		AND    P.DEL_YN = 'N' /*삭제안된 기획전*/
+		AND    P.OPEN_YN = 'Y' /*오픈된 기획전*/
+		AND    PL.DISP_YN = 'Y' /*전시하는 기획전카테고리*/
+		AND    C1.SITE_CD = #{siteCd}
+		AND    C1.CATE_GB = 'G032_101' /*BYITEM*/
+		AND    C1.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		AND    C1.DISP_YN = 'Y' /*전시하는 카테고리*/
+		ORDER  BY C1.DISP_ORD
 	</select>
 	
 	<select id="getPlanAllCount" resultType="int" parameterType="Plan">
@@ -51,137 +65,177 @@
 	</select>
 	
 	<!-- 기획전 목록 -->
-	<select id="getPlanList" parameterType="Plan" resultType="Plan">
-		/* TsfPlanning.getPlanList */
-		SELECT P1.PLAN_SQ 
-		      ,P1.PLAN_NM 
-		      ,P1.DTL_TITLE1 
-		      ,P1.PLAN_GB 
-		      ,P1.FRONT_GB 
-		      ,P1.MAIN_PIMG 
-		      ,P1.MAIN_MIMG 
-		      ,P1.DISP_ORD
-		      ,P1.NEW_PLAN
-		      ,P1.DISP_STDT
-		      ,P1.DISP_EDDT
-		      ,P1.REG_NO 
-		      ,P2.BRAND
-		      ,P2.CNT
-		FROM 
-		(
-			SELECT P.PLAN_SQ 
-			      ,P.PLAN_NM 
-			      ,P.DTL_TITLE1 
-			      ,P.PLAN_GB 
-			      ,P.FRONT_GB 
-			      ,P.MAIN_PIMG 
-			      ,P.MAIN_MIMG 
-			      ,P.DISP_ORD 
-			      ,P.REG_NO 
-			      ,CASE WHEN DATE(P.REG_DT) BETWEEN DATE_ADD(NOW(),INTERVAL -3 DAY ) AND NOW() THEN 'NEW' END AS 'NEW_PLAN'   /*등록일 기준 3일 */
-			      ,P.DISP_EDDT 
-			      ,P.DISP_STDT 
-			      ,P.DEL_YN 
-			      ,P.OPEN_YN 
-			FROM TB_PLAN P
-			GROUP BY  P.PLAN_SQ 
-			      ,P.PLAN_NM 
-			      ,P.DTL_TITLE1 
-			      ,P.PLAN_GB 
-			      ,P.FRONT_GB 
-			      ,P.MAIN_PIMG 
-			      ,P.MAIN_MIMG 
-			      ,P.DISP_ORD 
-			      ,P.REG_NO
-		)P1 LEFT JOIN (
-						SELECT  PB.PLAN_SQ 
-						      , COUNT(PLAN_SQ) AS CNT
-						      ,CASE WHEN COUNT(PLAN_SQ) = 1 THEN MAX(TBG.BRAND_GROUP_KNM) ELSE MAX(TBG.BRAND_GROUP_KNM)END AS BRAND
-						FROM TB_PLAN_BRAND PB INNER JOIN TB_BRAND_GROUP TBG  ON PB.BRAND_GROUP_NO = TBG.BRAND_GROUP_NO
-						GROUP BY PB.PLAN_SQ
-						)P2 ON P1.PLAN_SQ = P2.PLAN_SQ
-		WHERE 1=1
-		  AND P1.DEL_YN = 'N'
-		  AND P1.PLAN_GB = 'P'
-		  AND P1.OPEN_YN = 'Y'
-		  AND NOW() BETWEEN P1.DISP_STDT AND P1.DISP_EDDT
-	   	<if test="planSq != null and planSq != ''">
-			AND P1.PLAN_SQ != #{planSq}
-		</if>
-		 <!--  AND P1.FRONT_GB IN (#{frontGb}, 'A') -->
-		  <if test="cateNo != null and cateNo != ''">
-		  AND P1.PLAN_SQ IN (
-				   						SELECT PLAN_SQ 
-				   						FROM TB_PLAN_CATE 
-				   						
-				   						WHERE CATE_NO = #{cateNo}
-				   						
-				   					)
-		 </if>
-		ORDER BY P1.NEW_PLAN DESC, ABS(DATEDIFF(P1.DISP_EDDT,NOW())) 
+	<select id="getPlanningList" parameterType="Plan" resultType="Plan">
+		/* TsfPlanning.getPlanningList */
+		SELECT PLAN_SQ
+		     , PLAN_NM
+		     , DTL_TITLE1
+		     , MAIN_IMG
+		     , NEW_YN
+		     , END_DAYS
+		FROM   (
+		        SELECT P.PLAN_SQ                                        /*기획전번호*/
+		             , P.PLAN_NM                                        /*기획전명*/
+		             , P.DTL_TITLE1                                     /*상세제목1*/
+		             , CASE WHEN #{frontGb} IN ('A','M') THEN P.MAIN_MIMG
+		                    ELSE P.MAIN_PIMG
+		               END                                  AS MAIN_IMG /*메인이미지*/
+		             , CASE WHEN TIMESTAMPDIFF(DAY,P.REG_DT,NOW()) <![CDATA[<=]]> 3 THEN
+		                        'Y'
+		                    ELSE
+		                        'N'
+		               END                                  AS NEW_YN   /*신규여부(등록일기준3일)*/
+		             , TIMESTAMPDIFF(DAY,NOW(),P.DISP_EDDT) AS END_DAYS /*종료임박일수*/
+		        FROM   TB_PLAN P
+		        WHERE  P.PLAN_GB = 'P' /*기획전*/
+		        AND    P.SITE_CD = #{siteCd}
+		        <if test="frontGb != null and frontGb != ''">
+		            <if test='frontGb == "P"'> <!-- PC웹 -->
+		        AND    P.FRONT_GB IN ('A','P')
+		            </if>
+		            <if test='frontGb == "A" or frontGb == "M"'> <!-- 모바일 -->
+		        AND    P.FRONT_GB IN ('A','M')
+		            </if>
+		        </if>
+		        AND    NOW() BETWEEN P.DISP_STDT AND P.DISP_EDDT
+		        AND    P.DEL_YN = 'N' /*삭제안된 기획전*/
+		        AND    P.OPEN_YN = 'Y' /*오픈된 기획전*/
+		        <if test="cateNo != null and cateNo != ''">
+		        AND    P.PLAN_SQ IN (SELECT PLAN_SQ
+		                             FROM   TB_PLAN_CATE
+		                             WHERE  CATE_NO = #{cateNo}
+		                             AND    DISP_YN = 'Y' /*전시하는 기획전카테고리*/
+		                            )
+		        </if>
+		        <if test="brandGroupNo != null and brandGroupNo != ''"> <!-- 브랜드메인에서 사용 -->
+		        AND    P.PLAN_SQ IN (SELECT PLAN_SQ
+		                             FROM   TB_PLAN_BRAND
+		                             WHERE  BRAND_GROUP_NO = #{brandGroupNo}
+		                             AND    DISP_YN = 'Y' /*전시하는브랜드기획전*/
+		                            )
+		        </if>
+		       ) Z
+		ORDER  BY NEW_YN DESC, END_DAYS
 	</select>
 	
-		<!-- 기획전 상품 목록 -->
-	<select id="getPlanGoodsList" parameterType="Plan" resultType="Plan">
-			SELECT F.*
-			FROM
-			(
-				SELECT Z.* 
-				     , (CASE WHEN Z.GOODS_TYPE = 'G056_N' THEN (SELECT IFNULL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK WHERE GOODS_CD = Z.GOODS_CD) 
-							ELSE (SELECT IFNULL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK_COMPOSE WHERE GOODS_CD = Z.GOODS_CD) 
-							END) AS STOCK_QTY_SUM
-				     , ROW_NUMBER() OVER(PARTITION BY Z.PLAN_SQ ORDER BY Z.PLAN_SQ) AS RNUM
-				     , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG  WHERE GOODS_CD = Z.GOODS_CD AND DEFAULT_IMG_YN = 'Y' ) AS SYS_IMG_NM
-				FROM
-				(	
-					SELECT P.PLAN_SQ 
-					      ,P.PLAN_NM 
-					      ,PD.CORNER_NM 
-					      ,PD.DISP_STDT 
-					      ,PD.DISP_EDDT 
-					      ,PD.DISP_YN 
-					      ,PD.PLAN_DTL_SQ 
-					      ,PD.DISP_ORD 
-					      ,PG.GOODS_CD 
-					      ,PG.DEL_YN 
-					      ,TG.GOODS_TYPE 
-					      ,TG.GOODS_NM 
-					      ,TG.LIST_PRICE 
-					      ,TG.CURR_PRICE                                                                 
-					      ,TG.DC_RATE
-					      ,CASE TG.FORMAL_GB WHEN 'G009_20' THEN '이월' ELSE '정상' END AS FORMAL_GB                                                                 
-						  ,TG.SEASON_CD       
-						  , (SELECT SUPPLY_COMP_NM
-						 	 FROM   TB_SUPPLY_COMPANY
-						     WHERE  SUPPLY_COMP_CD = TG.SUPPLY_COMP_CD
-							) AS SUPPLY_COMP_NM                                                           
-						  ,TG.ERP_STOCK_LINK_YN                                                          
-						  ,TG.ERP_PRICE_LINK_YN                                                                                                                  
-						  ,TG.NEW_CUST_ORD_YN                                                            
-						  ,TG.DELV_FEE_CD                                                                
-						  ,TG.FRST_CFRM_DT                  
-						  ,TG.PRICE_UPD_DT             
-					FROM TB_PLAN P INNER JOIN TB_PLAN_DETAIL PD ON P.PLAN_SQ = PD.PLAN_SQ 
-					               INNER JOIN TB_PLAN_GOODS PG ON PD.PLAN_DTL_SQ = PG.PLAN_DTL_SQ 
-					               INNER JOIN TB_GOODS TG  ON PG.GOODS_CD = TG.GOODS_CD 
-					WHERE 1=1
-					 AND NOW() BETWEEN PD.DISP_STDT AND PD.DISP_EDDT 
-					 AND PD.DISP_YN = 'Y'
-					 AND PG.DEL_YN = 'N'
-					 AND P.PLAN_GB = 'P'
-					 <if test="cateNo != null and cateNo != ''">
-				     AND P.PLAN_SQ IN (
-				   						SELECT PLAN_SQ 
-				   						FROM TB_PLAN_CATE 
-				   						 
-				   						WHERE CATE_NO = #{cateNo}
-				   						
-				   	 					)
-				   	 </if>
-				)Z
-				ORDER BY Z.DISP_ORD ASC, STOCK_QTY_SUM DESC
-			)F
-			WHERE F.RNUM IN (1,2)
+	<!-- 기획전 상품 목록 -->
+	<select id="getPlanningGoodsList" parameterType="Plan" resultType="Plan">
+		/* TsfPlanning.getPlanningGoodsList */
+		WITH TAB_PLAN_GOODS AS (
+		    SELECT P.PLAN_SQ                                                /*기획전번호*/
+		         , PD.CORNER_NM                                             /*코너명*/
+		         , PG.DISP_ORD                                              /*상품노출순서*/
+		         , CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
+		                    BG.BRAND_GROUP_ENM
+		                ELSE
+		                    BG.BRAND_GROUP_KNM
+		           END                                    AS BRAND_GROUP_NM /*브랜드그룹명*/
+		         , G.GOODS_CD                                               /*상품코드*/
+		         , G.GOODS_NM                                               /*상품명*/
+		         , G.GOODS_GB                                               /*상품구분*/
+		         , G.FOREIGN_BUY_YN                                         /*해외구매대행여부*/
+		         , G.PARALLEL_IMPORT_YN                                     /*병행수입여부*/
+		         , G.ORDER_MADE_YN                                          /*주문제작여부*/
+		         , G.GOODS_TNM                                              /*상품타이틀명*/
+		         , G.MAIN_COLOR_CD                                          /*대표색상코드*/
+		         , G.LIST_PRICE                                             /*정상가(최초판매가)*/
+		         , G.CURR_PRICE                                             /*현재판매가*/
+		         , RANK() OVER(PARTITION BY P.PLAN_SQ
+		                       ORDER BY PG.DISP_ORD
+		                              , PG.GOODS_CD)      AS NUMB
+		    FROM   TB_PLAN P
+		         , TB_PLAN_DETAIL PD
+		         , TB_PLAN_GOODS PG
+		         , TB_GOODS G
+		         , TB_GOODS_STOCK GS
+		         , TB_BRAND B
+		         , TB_BRAND_GROUP BG
+		    WHERE  P.PLAN_SQ = PD.PLAN_SQ
+		    AND    PD.PLAN_DTL_SQ = PG.PLAN_DTL_SQ
+		    AND    PG.GOODS_CD = G.GOODS_CD
+		    AND    G.GOODS_CD = GS.GOODS_CD
+		    AND    G.BRAND_CD = B.BRAND_CD
+		    AND    B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		    AND    P.PLAN_SQ = #{planSq}
+		    AND    P.PLAN_GB = 'P' /*기획전*/
+		    AND    P.SITE_CD = #{siteCd}
+		    <if test="frontGb != null and frontGb != ''">
+		        <if test='frontGb == "P"'> <!-- PC웹 -->
+		    AND    P.FRONT_GB IN ('A','P')
+		        </if>
+		        <if test='frontGb == "A" or frontGb == "M"'> <!-- 모바일 -->
+		    AND    P.FRONT_GB IN ('A','M')
+		        </if>
+		    </if>
+		    AND    NOW() BETWEEN P.DISP_STDT AND P.DISP_EDDT
+		    AND    P.DEL_YN = 'N' /*삭제안된 기획전*/
+		    AND    P.OPEN_YN = 'Y' /*오픈된 기획전*/
+		    <if test="cateNo != null and cateNo != ''">
+		    AND    P.PLAN_SQ IN (SELECT PLAN_SQ
+		                         FROM   TB_PLAN_CATE
+		                         WHERE  CATE_NO = #{cateNo}
+		                         AND    DISP_YN = 'Y' /*전시하는 기획전카테고리*/
+		                        )
+		    </if>
+		    <if test="brandGroupNo != null and brandGroupNo != ''"> <!-- 브랜드메인에서 사용 -->
+		    AND    P.PLAN_SQ IN (SELECT PLAN_SQ
+		                         FROM   TB_PLAN_BRAND
+		                         WHERE  BRAND_GROUP_NO = #{brandGroupNo}
+		                         AND    DISP_YN = 'Y' /*전시하는브랜드기획전*/
+		                        )
+		    </if>
+		    AND    NOW() BETWEEN PD.DISP_STDT AND PD.DISP_EDDT
+		    AND    PD.DISP_YN = 'Y' /*전시하는코너*/
+		    AND    PG.DEL_YN = 'N' /*삭제안된상품*/
+		    AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		    AND    G.SELF_MALL_YN = 'Y'   /*몰노출상품*/
+		    AND    GS.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
+		    AND    B.USE_YN = 'Y'
+		    AND    BG.USE_YN = 'Y'
+		)
+		, TAB_GOODS_IMG AS (
+		    /* 상품의 이미지 */
+		    SELECT PG.GOODS_CD
+		         , MAX(CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END)   AS SYS_IMG_NM
+		         , MAX(CASE WHEN GI.MOUSEOVER_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END) AS SYS_IMG_NM2
+		    FROM   TAB_PLAN_GOODS PG
+		         , TB_GOODS_IMG GI
+		    WHERE  PG.GOODS_CD = GI.GOODS_CD
+		    AND    PG.MAIN_COLOR_CD = GI.COLOR_CD
+		    AND    (GI.DEFAULT_IMG_YN = 'Y' OR GI.MOUSEOVER_IMG_YN = 'Y')
+		    GROUP  BY PG.GOODS_CD
+		)
+		SELECT PG.PLAN_SQ
+		     , PG.CORNER_NM
+		     , PG.DISP_ORD
+		     , PG.BRAND_GROUP_NM
+		     , PG.GOODS_CD
+		     , FN_GET_GOODS_NM(PG.GOODS_NM,PG.GOODS_GB,PG.FOREIGN_BUY_YN,PG.PARALLEL_IMPORT_YN,PG.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
+		     , PG.GOODS_NM
+		     , PG.GOODS_TNM
+		     , PG.MAIN_COLOR_CD
+		     , PG.LIST_PRICE
+		     , FN_GET_BENEFIT_PRICE(#{frontGb},PG.GOODS_CD,PG.CURR_PRICE,#{custGb})                              AS CURR_PRICE    /*현재판매가*/
+		     , GI.SYS_IMG_NM
+		     , GI.SYS_IMG_NM2
+		     <choose>
+		         <when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+		     , IF(W.GOODS_CD,'','','likeit')                                                                     AS LIKE_IT       /*위시리스트담긴상품*/
+		         </when>
+		         <otherwise>
+		     , ''                                                                                                AS LIKE_IT       /*위시리스트담긴상품*/
+		         </otherwise>
+		     </choose>
+		     
+		FROM   TAB_PLAN_GOODS PG
+		INNER JOIN TAB_GOODS_IMG GI ON PG.GOODS_CD = GI.GOODS_CD
+		<if test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+		LEFT OUTER JOIN TB_WISHLIST W ON PG.GOODS_CD = W.GOODS_CD
+		                             AND W.CUST_NO = #{custNo}
+		</if>
+		<if test="maxRow != null and maxRow > 0">
+		WHERE  PG.NUMB <![CDATA[<=]]> #{maxRow}
+		</if>
 	</select>
 	
 	<!-- 기획전 상세정보 -->
@@ -246,52 +300,52 @@
 	
 	<select id="getPlanEventList" parameterType="Plan" resultType="Plan">
 		/* TsfPlanning.getPlanEventList*/
-		SELECT P1.*
-		FROM 
-		(
-			 SELECT
-			       P.PLAN_SQ
-			      ,P.PLAN_NM
-			      ,P.PLAN_GB
-			      ,P.SITE_CD
-			      ,P.FRONT_GB
-			      ,SUBSTRING_INDEX(P.DISP_STDT , ' ', +1) AS DISP_STDT
-			      ,SUBSTRING_INDEX(P.DISP_EDDT , ' ', +1) AS DISP_EDDT
-			      ,CASE WHEN DATE(P.REG_DT) BETWEEN DATE_ADD(NOW(),INTERVAL -3 DAY ) AND NOW() THEN 'NEW' END AS 'NEW_PLAN'   /*등록일 기준 3일 */
-			      ,P.MAIN_PIMG
-			      ,P.MAIN_MIMG
-			      ,P.DTL_PIMG
-			      ,P.DTL_MIMG
-			      ,P.DTL_TITLE1
-			      ,P.DTL_TITLE2
-			      ,P.REPLY_YN
-			      ,P.REPLY_LOC
-			      ,P.REPLY_IMG
-			      ,P.REPLY_TITLE1
-			      ,P.REPLY_TITLE2
-			      ,P.CORNER_NM_DISP_YN
-			      ,P.GOODS_LIMIT_YN
-			      ,P.GOODS_LIMIT_QTY
-			      ,P.DEL_YN, OPEN_YN
-			      ,P.DISP_ORD
-			      ,P.READ_CNT
-			      ,P.DEV_URL
-			      ,P.BADGE_NM
-			      ,P.BADGE_FCOLOR
-			      ,P.BADGE_BCOLOR
-			      ,P.POLL_SQ
-			      ,P.REG_NO
-			      ,P.REG_DT
-			      ,P.UPD_NO
-			      ,P.UPD_DT
-			 FROM TB_PLAN P 
-			 WHERE 1=1 
-			 	AND P.PLAN_GB = 'E' /*이벤트 경우*/
-			 	AND NOW() BETWEEN P.DISP_STDT AND P.DISP_EDDT /*진행기간*/
-			 	AND P.DEL_YN = 'N'
-			 	AND P.OPEN_YN = 'Y'
-		)P1
-		ORDER BY P1.NEW_PLAN DESC , ABS(DATEDIFF(P1.DISP_EDDT,NOW()))  
+		SELECT PLAN_SQ
+		     , PLAN_NM
+		     , DTL_TITLE1
+		     , MAIN_IMG
+		     , NEW_YN
+		     , END_DAYS
+		     , DISP_STDT
+		     , DISP_EDDT
+		FROM   (
+		        SELECT P.PLAN_SQ                                        /*기획전번호*/
+		             , P.PLAN_NM                                        /*기획전명*/
+		             , P.DTL_TITLE1                                     /*상세제목1*/
+		             , SUBSTRING_INDEX(P.DISP_STDT , ' ', +1) AS DISP_STDT
+		             , SUBSTRING_INDEX(P.DISP_EDDT , ' ', +1) AS DISP_EDDT
+		             , CASE WHEN #{frontGb} IN ('A','M') THEN P.MAIN_MIMG
+		                    ELSE P.MAIN_PIMG
+		               END                                  AS MAIN_IMG /*메인이미지*/
+		             , CASE WHEN TIMESTAMPDIFF(DAY,P.REG_DT,NOW()) <![CDATA[<=]]> 3 THEN
+		                        'Y'
+		                    ELSE
+		                        'N'
+		               END                                  AS NEW_YN   /*신규여부(등록일기준3일)*/
+		             , TIMESTAMPDIFF(DAY,NOW(),P.DISP_EDDT) AS END_DAYS /*종료임박일수*/
+		        FROM   TB_PLAN P
+		        WHERE  P.PLAN_GB = 'E' /*이벤트*/
+		        AND    P.SITE_CD = #{siteCd}
+		        <if test="frontGb != null and frontGb != ''">
+		            <if test='frontGb == "P"'> <!-- PC웹 -->
+		        AND    P.FRONT_GB IN ('A','P')
+		            </if>
+		            <if test='frontGb == "A" or frontGb == "M"'> <!-- 모바일 -->
+		        AND    P.FRONT_GB IN ('A','M')
+		            </if>
+		        </if>
+		        AND    NOW() BETWEEN P.DISP_STDT AND P.DISP_EDDT
+		        AND    P.DEL_YN = 'N' /*삭제안된 기획전*/
+		        AND    P.OPEN_YN = 'Y' /*오픈된 기획전*/
+		        <if test="brandGroupNo != null and brandGroupNo != ''"> <!-- 브랜드메인에서 사용 -->
+		        AND    P.PLAN_SQ IN (SELECT PLAN_SQ
+		                             FROM   TB_PLAN_BRAND
+		                             WHERE  BRAND_GROUP_NO = #{brandGroupNo}
+		                             AND    DISP_YN = 'Y' /*전시하는브랜드기획전*/
+		                            )
+		        </if>
+		       ) Z
+		ORDER  BY NEW_YN DESC, END_DAYS
 	</select>
 	
 	<select id="accessCustGrade"  parameterType="Plan" resultType="Plan">
@@ -612,61 +666,4 @@
 		 )Z
 	</select>
 
-	<select id="getPlanningList" parameterType="Plan" resultType="Plan">
-		/* TsfPlanning.getPlanningList */
-		SELECT    A.PLAN_SQ
-			 , B.BRAND_GROUP_NO
-			 , A.PLAN_NM
-			 , A.PLAN_GB
-			 , A.FRONT_GB
-			 , A.DISP_STDT
-			 , A.DISP_EDDT
-			 , A.MAIN_PIMG
-			 , A.MAIN_MIMG
-			 , A.DTL_PIMG
-			 , A.DTL_MIMG
-			 , A.DTL_TITLE1
-			 , A.DTL_TITLE2
-			 , A.DEL_YN
-			 , A.OPEN_YN
-		FROM	TB_PLAN A
-		LEFT OUTER JOIN	TB_PLAN_BRAND B
-		ON	A.PLAN_SQ = B.PLAN_SQ
-		WHERE	1=1
-		  AND A.DISP_STDT <![CDATA[<=]]> NOW()
-		  AND A.DISP_EDDT <![CDATA[>=]]> NOW()
-		  AND A.PLAN_GB = 'P'
-		  AND A.DEL_YN = 'N'
-		  AND A.OPEN_YN = 'Y'
-		  AND B.BRAND_GROUP_NO = #{brandGroupNo}
-	</select>
-
-	<select id="getPlanningGoodsList" parameterType="Plan" resultType="Plan">
-		SELECT	B.PLAN_SQ
-			 , B.PLAN_DTL_SQ
-			 , B.CORNER_NM
-			 , B.DISP_ORD
-			 , B.DISP_STDT
-			 , B.DISP_EDDT
-			 , B.DISP_YN
-			 , C.GOODS_CD
-		FROM	TB_PLAN A
-		JOIN	TB_PLAN_DETAIL B
-		  ON	A.PLAN_SQ = B.PLAN_SQ
-		LEFT JOIN TB_PLAN_GOODS C
-		  ON	B.PLAN_DTL_SQ = C.PLAN_DTL_SQ
-		WHERE	1=1
-		  AND	A.PLAN_GB = 'P'
-		  AND	A.FRONT_GB = 'A'
-		  AND	A.DISP_STDT <![CDATA[<=]]> NOW()
-		  AND	A.DISP_EDDT <![CDATA[>=]]> NOW()
-		  AND	A.DEL_YN = 'N'
-		  AND	A.OPEN_YN = 'Y'
-		  AND	B.DISP_STDT <![CDATA[<=]]> NOW()
-		  AND	B.DISP_EDDT <![CDATA[>=]]> NOW()
-		  AND	B.DISP_YN = 'Y'
-		  AND	C.DEL_YN = 'N'
-		ORDER BY B.PLAN_SQ, B.PLAN_DTL_SQ, B.DISP_ORD, C.DISP_ORD
-	</select>
-
 </mapper>

+ 71 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfWishlist.xml

@@ -14,6 +14,77 @@
 		WHERE  NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
 	</sql>
 	
+	<!-- 위시리스트 월 -->
+	<select id="getWishListMonth" resultType="WishList" parameterType="WishList">
+		SELECT COUNT(*) AS COUNT
+		      ,DATE_FORMAT(W.REG_DT,'%Y.%m') AS REG_DT 
+		FROM TB_WISHLIST W
+		WHERE CUST_NO = #{custNo}
+		GROUP BY DATE_FORMAT(W.REG_DT,'%Y-%m') 
+	</select>
+	
+	<!-- 위시리스트 상품목록 (임시 = 수정예정)-->
+	<select id="getWishListGoodsList" parameterType="WishList" resultType="Goods">
+		/**/
+		SELECT Z.*
+		     , (CASE WHEN Z.GOODS_TYPE = 'G056_N' THEN (SELECT IFNULL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK WHERE GOODS_CD = Z.GOODS_CD) 
+		        ELSE (SELECT IFNULL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK_COMPOSE WHERE GOODS_CD = Z.GOODS_CD) 
+		       END) AS STOCK_QTY_SUM
+		FROM 
+		      (
+		       SELECT  G.GOODS_CD
+		              ,G.BRAND_CD
+		              ,G.ITEMKIND_CD
+		              ,G.GOODS_NM
+		              ,G.GOODS_TNM
+		              ,G.GOODS_SNM
+		              ,G.GOODS_SNM1
+		              ,G.MAIN_COLOR_CD
+		              ,G.GOODS_NUM
+		              ,G.GOODS_TYPE
+		              ,G.TAG_PRICE
+		              ,G.LIST_PRICE
+		              ,G.CURR_PRICE
+		              ,G.CURR_BPRICE
+		              ,G.PRICE_UPD_DT
+		              ,G.COST_PRICE
+		              ,G.DC_RATE
+		              ,G.GOODS_STAT
+		              ,G.SELF_MALL_YN
+		              ,G.GOODS_GB
+		              ,G.DISTRIBUTION_GB
+		              ,G.SELF_GOODS_YN
+		              ,G.SUPPLY_COMP_CD
+		              ,G.SUPPLY_GOODS_CD
+		              ,G.PNT_PRATE
+		              ,G.PNT_MRATE
+		              ,W.AF_LINK_CD 
+		              ,W.CONTENTS_LOC 
+		              ,W.CUST_NO 
+		              ,W.ITHR_CD 
+		              ,W.PLAN_DTL_SQ 
+		              ,W.REG_DT 
+		              ,BR.BRAND_GROUP_KNM
+		              ,BR.BRAND_KNM
+		       FROM TB_GOODS G INNER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD 
+								LEFT JOIN (
+								            SELECT B.BRAND_CD 
+								                  ,B.BRAND_ENM
+								                  ,B.BRAND_KNM 
+								                  ,B.BRAND_GRP_NM 
+								                  ,B.USE_YN 
+								                  ,BG.BRAND_GROUP_NO 
+								                  ,BG.BRAND_GROUP_ENM 
+								                  ,BG.BRAND_GROUP_KNM 
+								            FROM TB_BRAND B INNER JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+								             WHERE 1=1
+								               AND B.USE_YN = 'Y'
+								               AND BG.USE_YN = 'Y'
+								         )BR ON G.BRAND_CD = BR.BRAND_CD
+              WHERE 1=1
+	            AND W.CUST_NO = #{custNo}
+           )Z
+	</select>
 	
 
 </mapper>

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

@@ -78,3 +78,9 @@ naverPay:
     payUrl:
         web : test-pay.naver.com
         mob : test-m.pay.naver.com
+
+# ERP (한세드림)
+erp:
+   api:
+       stock.url: http://erp.hansaemk.com:96/api/hsdr/Shop/GoodsInfo
+       goods.url: http://erp.hansaemk.com:96/api/hsdr/Shop

+ 5 - 0
src/main/resources/config/application.yml

@@ -121,3 +121,8 @@ app.down.url:
     ios: https://apps.apple.com/kr/app/WIVISMALL/id1517275108
     aos: https://play.google.com/store/apps/details?id=com.wivis.wivismal
 
+# ERP (한세드림)
+erp:
+   api:
+       stock.url: http://erp.hansaemk.com:96/api/hsdr/Shop/GoodsInfo
+       goods.url: http://erp.hansaemk.com:96/api/hsdr/Shop

Разница между файлами не показана из-за своего большого размера
+ 39 - 0
src/main/webapp/WEB-INF/views/mob/error/500Mob.html


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

@@ -421,7 +421,7 @@
 					<dl>
 						<div>
 							<dt>상품금액</dt>
-							<dd><em class="sumCurrPrice" th:text="${#numbers.formatInteger(order.sumOrdAmt, 1, 'COMMA')}"></em>원</dd>
+							<dd><em class="sumListPrice" th:text="${#numbers.formatInteger(order.sumListPrice, 1, 'COMMA')}"></em>원</dd>
 						</div>
 						<div>
 							<dt>배송비</dt>
@@ -531,7 +531,7 @@
 			}
 
 			// 다다익선 할인 대상(미적용) 리스트
-			notApplyTmtbAreaList();
+			// notApplyTmtbAreaList();
 
 			/* 세트상품 장바구니 */
 			/*let compsList = [];
@@ -1066,7 +1066,7 @@
 			}
 
 			// 결제 총액 영역 수정
-			$("#cartListForm .sumCurrPrice").text(Number(order.sumOrdAmt).toLocaleString());
+			$("#cartListForm .sumListPrice").text(Number(order.sumListPrice).toLocaleString());
 			$("#cartListForm .totDelvFee").text(Number(order.totDelvFee).toLocaleString());
 			sumRealPayAmt = order.sumRealPayAmt + order.totDelvFee;
 			totDcAmt = order.totDcAmt;

+ 0 - 40
src/main/webapp/WEB-INF/views/web/common/error/500Web.html

@@ -1,40 +0,0 @@
-<!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/ErrorLayoutWeb">
-<!--
- *******************************************************************************
- * @source  : 500.html
- * @desc    : 500 Error Page
- *============================================================================
- * STYLE24
- * Copyright(C) 2020 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2021.01.28   gagamel     최초 작성
- *******************************************************************************
- -->
-<head>
-	<title>Error</title>
-</head>
-
-<body>
-
-<th:block th:fragment="content">
-	<div id="wrapper">
-		<ul class="msgWrap">
-			<li class="title">죄송합니다. 서비스 이용이 원활하지 않습니다.</li>
-			<li class="cont" th:if="${message == null}">요청하신 페이지에 에러가 발생하였습니다. 서비스 이용에 불편을 끼쳐드려 죄송합니다.</li>
-			<li class="cont" th:if="${message != null && message != '' && message != 'null'}" th:text="${message}"></li>
-			<li class="button">
-				<button type="button" class="btn big white" onclick="cfnGoToPage(_PAGE_MAIN);">스타일24몰</button>
-				<button type="button" class="btn big black marL10"  onclick="history.back(-1); return false;">이전페이지</button>
-			</li>
-		</ul>
-	</div>
-</th:block>
-
-</body>
-</html>

+ 5 - 4
src/main/webapp/WEB-INF/views/web/common/fragments/HeadWeb.html

@@ -50,7 +50,7 @@
 	<link rel="icon" href="/images/favicon-16x16.png" sizes="16x16" type="image/png"/>
 
 	<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css">
-	<link rel="stylesheet" type="text/css" href="http://ldfront.style24.com/ux/pc/css/slick.css"/>
+	<link rel="stylesheet" type="text/css" href="/ux/pc/css/slick.css"/>
 	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/swiper.min.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/swiper.min.css"/>
 	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/jquery-ui.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/jquery-ui.css"/>
 	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/reset.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/reset.css"/>
@@ -59,13 +59,14 @@
 	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/layout.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/layout.css"/>
 	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/main.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/main.css"/>
 	
-	<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
-	<!--<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>-->
+<!-- 	<script src="http://code.jquery.com/jquery-1.9.1.js"></script> -->
+	<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
 	<script src="https://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
 	<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.0/js/swiper.min.js"></script>
+	<script src="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/js/ion.rangeSlider.min.js"></script>
 	<script src="/ux/pc/js/jquery.modal.min.js"></script>
 	<script src="/ux/pc/js/jquery-ui.js"></script>
-	<script src="/ux/pc/js/jquery.ui.datepicker.monthyearpicker.js"></script>
+<!-- 	<script src="/ux/pc/js/jquery.ui.datepicker.monthyearpicker.js"></script> -->
 	<script src="/ux/plugins/jquery.serializeObject.min.js"></script>
 	<script src="/ux/plugins/mcxdialog/mcxdialog_ui.js"></script>
 	

+ 0 - 27
src/main/webapp/WEB-INF/views/web/common/layout/ErrorLayoutWeb.html

@@ -1,27 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko"
-	xmlns:th="http://www.thymeleaf.org"
-	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
-
-<head th:replace="~{web/common/fragments/HeadWeb :: head}"></head>
-
-<body>
-
-<th:block th:replace="~{web/common/fragments/VariablesWeb :: variables}"></th:block>
-
-<!-- CONTENT AREA -->
-<th:block layout:fragment="content"></th:block>
-<!-- // CONTENT AREA -->
-
-<th:block th:replace="~{web/common/fragments/ScriptsWeb :: scripts}"></th:block>
-
-<script th:inline="javascript">
-/*<![CDATA[*/
-	$(document).ready(function() {
-		
-	});
-/*]]>*/
-</script>
-
-</body>
-</html>

+ 63 - 0
src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html

@@ -266,6 +266,69 @@
 					</div>
 				</th:block>
 
+				<!-- special_shop -->
+				<th:block th:if="${contentsLoc=='011'}">
+					<div class="content wide special_shop">
+						<div class="cont_head">
+							<p class="displayH t_c" th:text="${contentsTitle}"></p>
+						</div>
+						<div class="cont_body" th:if="${brandMainLayoutData.planningList != null}">
+							<div class="spe_thumb">
+								<div class="swiper-container">
+									<div class="swiper-wrapper">
+										<th:block th:each="planningData, planningStat : ${brandMainLayoutData.planningList}">
+										<div class="swiper-slide">
+											<a href="javascript:void(0);" th:onclick="cfnGoToGoodsDetail('','','','SBM011',[[${planningData.planSq}]],'');">
+												<div class="txtWrap">
+													<p th:text="${planningData.planNm}">티.바지.점퍼의 계절!</p>
+													<!--<p>가을 전격 오픈</p>-->
+													<span th:text="${planningData.dtlTitle1}"></span>
+												</div>
+												<img th:src="${@environment.getProperty('domain.image') + '/' + planningData.mainImg}"> alt="">
+											</a>
+										</div>
+										</th:block>
+									</div>
+								</div>
+								<div class="swiper-button-prev white"></div>
+								<div class="swiper-button-next white"></div>
+							</div>
+							<div class="spe_pr_list" >
+								<div class="slide_wrap">
+									<th:block th:each="planningData, planningStat : ${brandMainLayoutData.planningList}">
+										<div class="spe_sl">
+											<div class="swiper-container">
+												<div class="swiper-wrapper">
+													<th:block th:if="${planningData.planningGoodsList != null and !planningData.planningGoodsList.empty}" th:each="planningGoods, status : ${planningData.planningGoodsList}">
+														<div class="swiper-slide view">
+															<div class="item_prod">
+																<div class="item_state">
+																	<a href="javascript:void(0);" class=" itemLink" th:onclick="cfnGoToGoodsDetail([[${planningGoods.goodsCd}]], '', '', 'SBM011');">
+																		<div class="itemPic">
+																			<img alt="BLACK-a" class=" vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + planningGoods.sysImgNm}">
+																		</div>
+																		<div class="itemName" th:text="${planningGoods.goodsNm}">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+																		<p class="itemPrice" th:text="${#numbers.formatInteger(planningGoods.currPrice,1,'COMMA')}">80,100
+																			<span class="itemPrice_original" th:text="${#numbers.formatInteger(planningGoods.listPrice,1,'COMMA')}">89,000</span>
+																			<span class=" itemPercent" th:if="${planningGoods.currPrice != planningGoods.listPrice}" th:text="${(planningGoods.listPrice == 0 ? 0 : #numbers.formatDecimal((planningGoods.listPrice - planningGoods.currPrice) / (planningGoods.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
+																		</p>
+																	</a>
+																</div>
+															</div>
+														</div>
+													</th:block>
+												</div>
+											</div>
+											<div class="swiper-scrollbar"></div>
+										</div>
+									</th:block>
+								</div>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+
 				<!-- brand_product -->
 				<th:block th:if="${contentsLoc=='013'}">
 					<div class="content brand_product">

Разница между файлами не показана из-за своего большого размера
+ 163 - 1892
src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html


Разница между файлами не показана из-за своего большого размера
+ 35 - 4
src/main/webapp/WEB-INF/views/web/error/500Web.html


+ 135 - 76
src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html

@@ -11,14 +11,15 @@
  * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
  *============================================================================
- * VER  DATE		 AUTHOR	     DESCRIPTION
+ * VER  DATE		 AUTHOR		 DESCRIPTION
  * ===  ===========  ==========  =============================================
- * 1.0  2021.03.02   eskim       최초 작성
+ * 1.0  2021.03.02   eskim	   최초 작성
  *******************************************************************************
  -->
 <body>
 <th:block layout:fragment="content">
 <script src="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/js/ion.rangeSlider.min.js"></script>
+<script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script>
 <div id="container" class="container pd deal" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
 	<div class="wrap">
 		<!-- 상품 대표설명 -->
@@ -91,7 +92,10 @@
 							</div>
 							<div class="descript_box">
 								<div class="desc_top">
-									<button type="button" class="itemShare">상품 공유하기</button>
+									<div class="shareSet">
+										<button class="btn_share" data-name="openShare">공유하기</button>
+										<th:block th:include="~{web/goods/GoodsIncludeFormWeb :: goodsSnsForm}"></th:block>
+									</div>
 									<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${params.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=${params.planDtlSq}">관심상품 추가</button>
 								</div>
 								<div class="desc_info">
@@ -286,6 +290,7 @@
 	
 	// 옵션1 조회
 	var fnOption1 = function(flag, goodsCd, currPrice, selfGoodsYn){
+		
 		let data = {goodsCd : goodsCd
 					};
 		let jsonData = JSON.stringify(data);
@@ -309,13 +314,17 @@
 					let tag1 = "";
 					let tag2 = "";
 					if (idx == 0){
-						$objUp = $('.pd_detail .opt_select .select_custom.deal_opt1');
-						//$objUp = $('.form_field .select_custom.deal_opt1');
-						$objUp.html('');
-						$objDown = $('.pd_desc_wrap .opt_select .select_custom.deal_opt1');
-						$objDown.html('');
+						if (flag == "layer"){
+							$objUp = $('.pd_descrp_pop .opt_select .select_custom.deal_opt1');
+							$objUp.html('');
+						}else{
+							$objUp = $('.pd_detail .opt_select .select_custom.deal_opt1');
+							$objUp.html('');
+							$objDown = $('.pd_desc_wrap .opt_select .select_custom.deal_opt1');
+							$objDown.html('');
+							
+						}
 						$('.form_field .select_custom.deal_opt1').attr('disabled', false);
-						
 						//------
 						tag1 += '<div class="combo">\n';
 						tag1 += '<div class="select">선택</div>\n';
@@ -325,8 +334,12 @@
 					}
 					let soldoutYn = ""; 
 					if (item.stockQty <= 0) soldoutYn = "true";
-					tagUp = '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnOption2(this, \'Up\')">\n';
-					tagDown = '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnOption2(this, \'Down\')">\n';
+					if (flag == "layer"){
+						tagUp = '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnOption2(this, \'layer\')">\n';
+					}else{
+						tagUp = '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnOption2(this, \'Up\')">\n';
+						tagDown = '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnOption2(this, \'Down\')">\n';	
+					}
 					tag2 += '<div>'+ item.optCd1+'</div>\n';
 					if (item.addPrice > 0){
 						tag2 += '<div>'+ item.addPrice.addComma() +'원</div>\n';	
@@ -347,27 +360,33 @@
 					//------	
 				}
 				
+				if (flag == "layer"){
+					$objUp.append(tagUpS);
+					var pop_desc_option02 = new sCombo('.pd_descrp_pop .opt_select .select_custom.deal_opt1');
+				}else{
+					$objUp.append(tagUpS);
+					$objDown.append(tagDownS);
+					var detail_deal_option02 = new sCombo('.pd_detail .opt_select .select_custom.deal_opt1');
+					var desc_option02 = new sCombo('.pd_desc_wrap .opt_select .select_custom.deal_opt1');
+				}
 				
-				$objUp.append(tagUpS);
-				$objDown.append(tagDownS);
-				var detail_deal_option02 = new sCombo('.pd_detail .opt_select .select_custom.deal_opt1');
-				var desc_option02 = new sCombo('.pd_desc_wrap .opt_select .select_custom.deal_opt1');
-				//var pop_desc_option02 = new sCombo('.pd_detail .opt_select .select_custom.deal_opt1');
 			}
 			
-			// 상품 선태값 적용
-			let $obj = null;
-			let $taget = null;
-			// 하단 우측 상품선택영역  Up/ Down
-			if (flag  == "Up"){
-				$obj = $('.pd_detail .opt_select .select_custom.deal_opt_item').find('.combo .select'); 
-				$taget = $('.pd_desc_wrap .opt_select .select_custom.deal_opt_item').find('.combo .select');
-			}else{
-				$taget = $('.pd_detail .opt_select .select_custom.deal_opt_item').find('.combo .select');
-				$obj = $('.pd_desc_wrap .opt_select .select_custom.deal_opt_item').find('.combo .select');
+			if (flag != "layer"){
+				// 상품 선태값 적용
+				let $obj = null;
+				let $taget = null;
+				// 하단 우측 상품선택영역  Up/ Down
+				if (flag  == "Up"){
+					$obj = $('.pd_detail .opt_select .select_custom.deal_opt_item').find('.combo .select'); 
+					$taget = $('.pd_desc_wrap .opt_select .select_custom.deal_opt_item').find('.combo .select');
+				}else{
+					$taget = $('.pd_detail .opt_select .select_custom.deal_opt_item').find('.combo .select');
+					$obj = $('.pd_desc_wrap .opt_select .select_custom.deal_opt_item').find('.combo .select');
+				}
+				let goodsDealInfo = $obj.html();
+				$taget.html(goodsDealInfo);
 			}
-			let goodsDealInfo = $obj.html();
-			$taget.html(goodsDealInfo);
 			
 		});
 		
@@ -375,6 +394,7 @@
 	
 	// 옵션2 조회
 	var fnOption2 = function(obj, flag){
+		
 		let $obj = $(obj);
 		let $target = $obj.find('input[name="opt1"]');
 		let goodsCd = $target.val();
@@ -402,12 +422,17 @@
 					let tag1 = "";
 					let tag2 = "";
 					if (idx == 0){
-						//$objUp = $('#goodsDealOptUp2');
-						$objUp = $('.pd_detail .form_field .select_custom.deal_opt2');
-						$objUp.html('');
-						$objDown = $('.pd_desc_wrap .opt_select .select_custom.deal_opt2');
-						$objDown.html('');
-						$('.form_field .select_custom.deal_opt2').attr('disabled', false);
+						if (flag == "layer"){
+							$objUp = $('.pd_descrp_pop .opt_select .select_custom.deal_opt2');
+							$objUp.html('');
+						}else{
+							$objUp = $('.pd_detail .opt_select .select_custom.deal_opt2');
+							$objUp.html('');
+							$objDown = $('.pd_desc_wrap .opt_select .select_custom.deal_opt2');
+							$objDown.html('');
+							
+						}
+						$('.form_field .select_custom.deal_opt2').attr('disabled', false);	
 						//------
 						tag1 += '<div class="combo">\n';
 						tag1 += '<div class="select">선택</div>\n';
@@ -417,8 +442,12 @@
 					}
 					let soldoutYn = ""; 
 					if ("Y" == item.soldoutYn || item.stockQty <= 0)soldoutYn = "true";
-					tagUp = '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnViewStock(this, \'Up\' )">\n';
-					tagDown = '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnViewStock(this, \'Down\' )">\n';
+					if (flag == "layer"){
+						tagUp = '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnViewStock(this, \'layer\' )">\n';
+					}else{
+						tagUp = '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnViewStock(this, \'Up\' )">\n';
+						tagDown = '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnViewStock(this, \'Down\' )">\n';	
+					}
 					tag2 += '<div>'+ item.optCd2+'</div>\n';
 					if (item.addPrice > 0){
 						tag2 += '<div>'+ item.addPrice.addComma() +'원</div>\n';	
@@ -439,29 +468,35 @@
 					//------	
 				}
 				
-				
-				$objUp.append(tagUpS);
-				$objDown.append(tagDownS);
-				var detail_deal_option03 = new sCombo('.pd_detail .opt_select .select_custom.deal_opt2');
-				var desc_option03 = new sCombo('.pd_desc_wrap .opt_select .select_custom.deal_opt2');
-				//var pop_desc_option03 = new sCombo('.pd_detail .opt_select .select_custom.deal_opt2');
-				
+				if (flag == "layer"){
+					$objUp.append(tagUpS);
+					var pop_desc_option02 = new sCombo('.pd_descrp_pop .opt_select .select_custom.deal_opt2');
+				}else{
+					$objUp.append(tagUpS);
+					$objDown.append(tagDownS);
+					var detail_deal_option03 = new sCombo('.pd_detail .opt_select .select_custom.deal_opt2');
+					var desc_option03 = new sCombo('.pd_desc_wrap .opt_select .select_custom.deal_opt2');
+
+				}
 			}
 			
-			// 옵션 1 선태값 적용
-			let $obj2 = null;
-			let $taget2 = null;
-			// 하단 우측 상품선택영역  Up/ Down
-			if (flag  == "Up"){
-				$obj2 = $('.pd_detail .opt_select .select_custom.deal_opt1').find('.combo .select'); 
-				$taget2 = $('.pd_desc_wrap .opt_select .select_custom.deal_opt1').find('.combo .select');
-			}else{
-				$obj2 = $('.pd_desc_wrap .opt_select .select_custom.deal_opt1').find('.combo .select');
-				$taget2 = $('.pd_detail .opt_select .select_custom.deal_opt1').find('.combo .select');
+			if (flag != "layer"){
+				// 옵션 1 선태값 적용
+				let $obj2 = null;
+				let $taget2 = null;
+				// 하단 우측 상품선택영역  Up/ Down
+				if (flag  == "Up"){
+					$obj2 = $('.pd_detail .opt_select .select_custom.deal_opt1').find('.combo .select'); 
+					$taget2 = $('.pd_desc_wrap .opt_select .select_custom.deal_opt1').find('.combo .select');
+				}else{
+					$obj2 = $('.pd_desc_wrap .opt_select .select_custom.deal_opt1').find('.combo .select');
+					$taget2 = $('.pd_detail .opt_select .select_custom.deal_opt1').find('.combo .select');
+				}
+				
+				let goodsDealInfo = $obj2.html();
+				$taget2.html(goodsDealInfo);	
 			}
 			
-			let goodsDealInfo = $obj2.html();
-			$taget2.html(goodsDealInfo);
 			
 		});	
 	}
@@ -511,12 +546,14 @@
 
 			if (minOrdQty > itemCnt) {
 				alert("무슨작업을 해야할가요?");
-				return false; 		//무슨작업을 해야하나?
+				return false;		 //무슨작업을 해야하나?
 			}
 			
 			//상품정보
 			let $selObj = null;
-			if (flag  == "Up"){
+			if (flag  == "layer"){
+				$selObj = $('.pd_descrp_pop .form_field .select_custom.deal_opt_item');
+			}else if (flag  == "Up"){
 				$selObj = $('.pd_detail .opt_select .select_custom.deal_opt_item');
 			}else{
 				$selObj = $('.pd_desc_wrap .opt_select .select_custom.deal_opt_item');
@@ -547,30 +584,40 @@
 			
 			let $objUp = null;
 			let $objDown = null;
-			// 하단 우측 상품선택영역  Up/ Down
-			$objUp = $('.pd_detail .opt_result'); 
-			$objDown = $('.pd_desc_wrap .opt_result');
+			// 하단 우측 상품선택영역  Up/ Down/ layer
+			if (flag  == "layer"){
+				$objLayer = $('.pd_descrp_pop .opt_result'); 
+				$objUp = $('.pd_detail .opt_result'); 
+				$objDown = $('.pd_desc_wrap .opt_result');
+				$objLayer.append(tag);
+			}else{
+				$objUp = $('.pd_detail .opt_result'); 
+				$objDown = $('.pd_desc_wrap .opt_result');
+			}
 			
 			$objUp.append(tag);
 			$objDown.append(tag);
 			
-			// 옵션 2 선태값 적용
-			let $obj2 = null;
-			let $taget2 = null;
-			// 하단 우측 상품선택영역  Up/ Down
-			if (flag  == "Up"){
-				$obj2 = $('.pd_detail .opt_select .select_custom.deal_opt2').find('.combo .select'); 
-				$taget2 = $('.pd_desc_wrap .opt_select .select_custom.deal_opt2').find('.combo .select');
-			}else{
-				$obj2 = $('.pd_desc_wrap .opt_select .select_custom.deal_opt2').find('.combo .select');
-				$taget2 = $('.pd_detail .opt_select .select_custom.deal_opt2').find('.combo .select');
+			if (flag  != "layer"){
+				// 옵션 2 선태값 적용
+				let $obj2 = null;
+				let $taget2 = null;
+				// 하단 우측 상품선택영역  Up/ Down
+				if (flag  == "Up"){
+					$obj2 = $('.pd_detail .opt_select .select_custom.deal_opt2').find('.combo .select'); 
+					$taget2 = $('.pd_desc_wrap .opt_select .select_custom.deal_opt2').find('.combo .select');
+				}else{
+					$obj2 = $('.pd_desc_wrap .opt_select .select_custom.deal_opt2').find('.combo .select');
+					$taget2 = $('.pd_detail .opt_select .select_custom.deal_opt2').find('.combo .select');
+					
+				}
+				
+				let goodsDealInfo = $obj2.html();
+				$taget2.html(goodsDealInfo);
+				
 				
 			}
-			
-			let goodsDealInfo = $obj2.html();
-			$taget2.html(goodsDealInfo);
-			
-			fnSetTotalPrice();
+			fnSetTotalPrice();	
 			
 		}, "text");
 	}
@@ -732,6 +779,19 @@
 		
 		$('.timer_box').css('display', 'none');
 		
+		//공유 버튼 토글 
+		$("button[data-name=openShare]").on("click", function(){
+			$(this).toggleClass("on").next(".shareWrap").toggleClass("on");
+			return false;
+		});
+		//영역밖 클릭으로 공유토글 닫기
+		$("body").on('click', function(e) { 
+			if(!$(".shareWrap.on").parent().has(e.target).length) {
+				$("button[data-name=openShare]").removeClass("on");
+				$(".shareWrap").removeClass("on");
+			};
+		});
+		
 		var params = new Object();
 		params.goodsCd = [[${params.goodsCd}]];
 		params.viewDt = [[${params.viewDt}]];
@@ -949,7 +1009,6 @@
 <!-- 광고 스크립트 -->
 <!-- <th:block th:replace="~{web/common/advertisements/GoodsDetailScriptsWeb :: scripts}"></th:block> -->
 <!-- //광고 스크립트 -->
-
 </th:block>
 
 </body>

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

@@ -19,6 +19,7 @@
 <body>
 <th:block layout:fragment="content">
 <div id="container" class="container pd" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
+<script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script>
 	<th:block th:include="~{web/goods/GoodsIncludeFormWeb :: goodsNaviForm}"></th:block>
 	
 	<div class="wrap">
@@ -93,7 +94,10 @@
 							<div class="descript_box">
 								<div class="desc_top">
 									<a href="javascript:void(0);" class="btn_brand" th:onclick="cfnGoToBrandMain([[${goodsInfo.brandGroupNo}]])" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</a>
-									<button type="button" class="itemShare">상품 공유하기</button>
+									<div class="shareSet">
+										<button class="btn_share" data-name="openShare">공유하기</button>
+										<th:block th:include="~{web/goods/GoodsIncludeFormWeb :: goodsSnsForm}"></th:block>
+									</div>
 									<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${params.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=${params.planDtlSq}">관심상품 추가</button>
 								</div>
 								<div class="desc_info">
@@ -1191,7 +1195,7 @@
 					$obj = $('.form_field .select_custom.item_opt2.item_opt2_1');
 				}	
 				
-				$.each(result.dataList, function(idx, item) {debugger;
+				$.each(result.dataList, function(idx, item) {
 					if (idx == 0){
 						//$obj = $('#goodsOpt2'+item.goodsCd);
 						//$obj = $('.form_field .select_custom.item_opt2.item_opt2_1');
@@ -1255,6 +1259,19 @@
 		
 		$('.timer_box').css('display', 'none');
 		
+		//공유 버튼 토글 
+		$("button[data-name=openShare]").on("click", function(){
+			$(this).toggleClass("on").next(".shareWrap").toggleClass("on");
+			return false;
+		});
+		//영역밖 클릭으로 공유토글 닫기
+		$("body").on('click', function(e) { 
+			if(!$(".shareWrap.on").parent().has(e.target).length) {
+				$("button[data-name=openShare]").removeClass("on");
+				$(".shareWrap").removeClass("on");
+			};
+		});
+		
 		var params = new Object();
 		params.goodsCd = [[${params.goodsCd}]];
 		params.viewDt = [[${params.viewDt}]];
@@ -1367,27 +1384,12 @@
 			return false;
 		});
 
-		//상품 대표설명 > 우측 상품정보 
-		/* 1차 옵션선택 후 2차 옵션 활성화 */
-		//var opt_selecter01 = new sCombo('.opt_select .select_custom.item_opt1');
-		//var opt_selecter02 = new sCombo('.opt_select .select_custom.item_opt2');
-		//$('.opt_select .select_custom .combo .list > li').click(function(e) {
-		//	$(this).parents('.form_field').next('.form_field').find('.select_custom').attr('disabled', false);
-		//	return false;
-		//});
-		
 		var opt_selecter01 = new sCombo('.opt_select .select_custom.item_opt1.item_opt1_1');
-		
 		var opt_selecter01_1 = new sCombo('.opt_set_select .select_custom.item_opt1.item_opt1_1');
-		//var opt_selecter02_1 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_1');
 		var opt_selecter01_2 = new sCombo('.opt_set_select .select_custom.item_opt1.item_opt1_2');
-		//var opt_selecter02_2 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_2');
 		var opt_selecter01_3 = new sCombo('.opt_set_select .select_custom.item_opt1.item_opt1_3');
-		//var opt_selecter02_3 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_3');
 		var opt_selecter01_4 = new sCombo('.opt_set_select .select_custom.item_opt1.item_opt1_4');
-		//var opt_selecter02_4 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_4');
 		var opt_selecter01_5 = new sCombo('.opt_set_select .select_custom.item_opt1.item_opt1_5');
-		//var opt_selecter02_5 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_5');
 
 		if (!gagajf.isNull([[${goodsInfo.socialSq}]])){
 			$('.timer_box').css('display', 'block');
@@ -1533,6 +1535,11 @@
 		$("meta[property='eg:isNew']").attr('content',([[${goodsInfo.formalGb}]] == 'G009_10')? 'True' :'False');
 		$("meta[property='eg:etc1']").attr('content', [[${goodsInfo.selfGoodsYn}]]);
 		
+		
+		$('.btn_copy').bind('click', function() {
+			copyToClipboard();
+		});
+		
 	});
 	
 	// 상품평 레이어 호출후 콜백에서 호출하므로 여기에 있어야함
@@ -1553,8 +1560,6 @@
 		
 	}
 	
-	
-	
 /*]]>*/
 </script>
 

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

@@ -85,7 +85,13 @@
 		if (result.dataList != null && result.dataList.length > 0) {
 			
 			$.each(result.dataList, function(idx, item) {
-				let tag = '<li class="'+ (item.selfGb == 1 ? "my_qna" : "") +'">\n';  // <!-- 내가 쓴 글에 클래스 my_qna 추가 -->
+				let tag = '<li class="';  // <!-- 내가 쓴 글에 클래스 my_qna 추가 -->
+				if (item.selfGb == 1){
+					tag += ' my_qna';	
+				}else if (item.secretYn == "Y"){
+					tag += ' secret_qna';
+				}
+				tag += ' ">\n';  // <!-- 내가 쓴 글에 클래스 my_qna 추가 -->
 				tag += '	<div class="fold_head">\n';
 				tag += '		<a href="javascript:void(0)">\n';
 				tag += '			<div>\n';

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

@@ -39,7 +39,7 @@
 			</dl>
 		</div>
 		<div class="btn_box">
-			<button class="btn btn_dark"><span>지금 리뷰 작성하기</span></button>
+			<button type="button" class="btn btn_dark" onclick="cfnGoToMypageReview();"><span>지금 리뷰 작성하기</span></button>
 		</div>
 	</div>
 	<!-- //등록리뷰 없을 시 -->

+ 55 - 35
src/main/webapp/WEB-INF/views/web/goods/GoodsIncludeFormWeb.html

@@ -62,15 +62,18 @@
 
 <!-- 상품상세 SNS  -->
 <th:block  th:fragment="goodsSnsForm" >
-<div class="sns_list" th:with="pastelUrl=${@environment.getProperty('domain.pastel')}, goodsView=${@environment.getProperty('upload.goods.view')}">
-	<ul>
-		<li><a href="javascript:void(0);" th:attr="onclick=|sendSns('kakaostory', '${pastelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsTnmFull}', '', '');|"></a></li>
-		<li><a href="javascript:void(0);" th:attr="onclick=|sendSns('facebook', '${pastelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsTnmFull}', '', '');|"></a></li>
-		<li><a href="javascript:void(0);" th:attr="onclick=|sendSns('twitter', '${pastelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsTnmFull+ '#파스텔몰'}', '', '');|"></a></li>
-		<li><a href="javascript:void(0);" th:attr="onclick=|sendSns('pinterest', '${pastelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsTnmFull}', '${goodsInfo.imgType == 'A' ? goodsView + goodsInfo.imgPath1 : goodsInfo.imgPath1}', '${goodsInfo.goodsTnmFull}');|"></a></li>
-		<li><a href="javascript:void(0)" class="btn_copy"></a></li>
-	</ul>
+<!-- toggle contents -->
+<div class="shareWrap" th:with="stylelUrl=${@environment.getProperty('domain.front')}, imgGoodsUrl=${@environment.getProperty('upload.goods.view')}">
+	<div id="layerShare" class="setShare open">
+		<span>
+			<button type="button" class="kk" th:attr="onclick=|cfnSendToKakao('${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm}', '${imgGoodsUrl+ '/'+goodsInfo.sysImgNm}');|"><span>카카오톡</span></button>
+			<button type="button" class="fb" th:attr="onclick=|sendSns('facebook', '${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm}', '', '');|"><span>페이스북</span></button>
+			<button type="button" class="tw" th:attr="onclick=|sendSns('twitter', '${stylelUrl+'/goods/detail/form?goodsCd='+goodsInfo.goodsCd}', '${goodsInfo.goodsFullNm+ '#style24몰'}', '', '');|"><span>트위터</span></button>
+			<button type="button" class="url btn_copy"><span>URL</span></button>
+		</span>
+	</div>
 </div>
+
 </th:block>
 
 <!-- 딜 상품 상품소개영역 -->
@@ -152,7 +155,7 @@
 															<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
 														</p>
 													</a>
-													<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}" />
+													<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}"  th:attr="currPrice=${goodsInfo.currPrice}, selfGoodsYn=${goodsInfo.selfGoodsYn}"/>
 												</div>
 											</div>
 										</li> 
@@ -397,9 +400,9 @@
 							</div>
 							<ul class="list" th:if="${goodsDealComposeList  != null and !goodsDealComposeList.empty}">
 								<li class="selected" th:each="goodsInfo, status : ${goodsDealComposeList}" th:attr="aria-disabled=${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'true':''}, data-soldout=${(goodsInfo.stockQty <= 0)? 'true':''}">
-									<div class="item_prod">
+									<div class="item_prod"  th:classappend="${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'soldout':'' }">
 										<div class="item_state">
-											<a href="javascript:void(0);" class="itemLink" th:onclick="fnGoodsDealDesc([[${goodsInfo.compsGoodsCd}]])">
+											<a href="javascript:void(0);" class="itemLink" th:onclick="fnGoodsDealDesc([[${goodsInfo.compsGoodsCd}]], [[${goodsInfo.currPrice}]], [[${goodsInfo.selfGoodsYn}]], [[${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'Y':'N' }]])">
 												<div class="itemPic">
 													<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 												</div>
@@ -410,7 +413,7 @@
 													<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
 												</p>
 											</a>
-											<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}" />
+											<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}" th:attr="goodsNm=${'[상품'+status.count+']' +goodsInfo.goodsFullNm}, currPrice=${goodsInfo.currPrice}, goodsCd=${goodsInfo.compsGoodsCd}, selfGoodsYn=${goodsInfo.selfGoodsYn}"  />
 										</div>
 									</div>
 								</li> 
@@ -427,15 +430,11 @@
 				<div class="option_box">
 					<div class="opt_select">
 						<div class="form_field">
-							<div class="select_custom deal_opt1">
+							<div class="select_custom deal_opt1" disabled>
 								<div class="combo">
 									<div class="select">선택</div>
-									<ul class="list">
-										<li class="selected">선택</li> 
-										<li aria-disabled="true" data-soldout="true">
-											<div>상품옵션07</div>
-											<div>120,000원</div>
-										</li>
+									<ul class="list"  id="goodsDealOptLayer1">
+										<!--  옵션 1 -->
 									</ul>
 								</div>
 							</div>
@@ -444,13 +443,8 @@
 							<div class="select_custom deal_opt2" disabled>
 								<div class="combo">
 									<div class="select">선택</div>
-									<ul class="list">
-										<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" / 품절표기 data-soldout="true" 추가  -->
-										<li class="selected">선택</li> 
-										<li aria-disabled="true" data-soldout="true">
-											<div>상품옵션17</div>
-											<div>120,000원</div>
-										</li>
+									<ul class="list"  id="goodsDealOptLayer2">
+										<!--  옵션 2 -->
 									</ul>
 								</div>
 							</div>
@@ -494,7 +488,6 @@
 <script th:inline="javascript">
 /*<![CDATA[*/
 	
-	
 	// 구성 상품 상세 상품평
 	var fnGoodsDetailReview = function(params) {
 		gagajf.ajaxSubmit("/goods/detail/review/frame", "html", "goodsDealReview", params);
@@ -539,8 +532,14 @@
 		
 		// 탭별 선택시 기본 상품 설정
 		let selIdx = 0;
+		let selfGoodsYn = '';
+		let currPrice = 0;
+		let soldoutYn = "N";
 		$selObj.find('.combo .list li').each(function() { 
 			if ($(this).find('input[name=selectGoods]').val() == compsGoodsCd){
+				selfGoodsYn = $(this).find('input[name=selectGoods]').attr('selfGoodsYn');
+				currPrice = $(this).find('input[name=selectGoods]').attr('currPrice');
+				if ($(this).find('.item_prod').hasClass('soldout')) soldoutYn = "Y";
 				return false;
 			}
 			selIdx ++;
@@ -549,7 +548,19 @@
 		$selObj.find('.combo .list li').eq(selIdx).trigger("click");
 		
 		// 상세노출
-		fnGoodsDealDesc(compsGoodsCd);
+		fnGoodsDealDesc(compsGoodsCd, currPrice, selfGoodsYn, soldoutYn);
+/* 		
+		if (!soldout){
+			// 옵션1 처리
+			fnOption1("layer", compsGoodsCd, currPrice, selfGoodsYn);	
+		}
+ */		
+		
+		let $obj = $('.pd_detail .opt_result'); 
+		let $taget = $('.full_pop_fix_r .opt_result');
+		$taget.html($obj.html());
+		
+		fnSetTotalPrice();
 		
 		$('body').addClass('lock');
 		$("#layer_goods_deal_detail").show(); 
@@ -558,11 +569,16 @@
 	
 	// 상세 레이어 창닫기
 	var fnCloseGoodsDealDetail = function(){
-		$('body').removeClass('lock');
-		$("#layer_goods_deal_detail").hide(); 
+		// 선택값 본창에 넘기기
+		let $obj = $('.full_pop_fix_r .opt_result');
+		let $taget = $('.pd_detail .opt_result');
+		$taget.html($obj.html());
 		
+		fnSetTotalPrice();
 		
-		// 선택값 본창에 넘기기
+		$('body').removeClass('lock');
+		$('#goodsDealDetail').html('');
+		$("#layer_goods_deal_detail").hide();
 	}
 	
 	// 구성 상품 상세 
@@ -570,15 +586,19 @@
 		gagajf.ajaxSubmit("/goods/deal/detail/info/frame", "html", "goodsDealDetail", params);
 	}
 	
-	// 상품선택시
-	var fnGoodsDealDesc = function(goodsCd){
+	// 레이어에서 상품선택시
+	var fnGoodsDealDesc = function(goodsCd, currPrice, selfGoodsYn , soldout){
 		var params = new Object();
 		params.goodsCd = goodsCd;
+		params.adminYn = "Y";
 		fnGoodsDealDetail2(params);  // ajax html
+		if (soldout == "N"){
+			// 옵션1 처리
+			fnOption1("layer", goodsCd, currPrice, selfGoodsYn);
+		}
+		
 	}
 	
-	
-	
 	$(document).ready( function() {
 
 		/* var params = new Object();

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

@@ -182,7 +182,7 @@
 
 	   /* $('.pd_bestreviewdetail_pop .swiper-slide').each(function(index, element){
 		   var $this = $(this);
-		   debugger;
+		   
 		   var thumbCount = $this.find('.thumblist ul li').length;
 		   var thumbUlWidth = $this.find('.thumblist ul li').width() * thumbCount;
 		   var thumbMargin = 8 * thumbCount;

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

@@ -132,7 +132,6 @@
 
 let couponList = ([[${couponList}]]);	
 
-console.log(couponList);
 // 사용안내 모달
 var useInfoCoupon = function (id) {
 	 $.ajax( {

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

@@ -454,12 +454,12 @@
 	var fnSaveCustomerInfoCallback = function (result) {
 		if (result.isSuccess) {
 			mcxDialog.alert("회원정보가 수정되었습니다.");
+			fnGetCustInfo();
 			return;
 		} else {
 			mcxDialog.alert("실패하였습니다.<br/>고객센터에 문의하시 바랍니다.");
 			return;
 		}
-		fnGetCustInfo();
 	}
 
 

+ 298 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypagePointForm2Web.html

@@ -0,0 +1,298 @@
+<!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  : MypagePointForm.html
+ * @desc    : 마이페이지 > STYLE24포인트 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.26   csh9191     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+<div class="content myPoint"> <!-- 페이지특정 클래스 = myPoint -->
+		<div class="cont_body">
+			<!-- CONT-BODY -->
+			<div class="lnb">
+				<div class="lnb_tit">
+				<h2>마이페이지</h2>
+				</div>
+				<div class="lnb_list">
+					<ul id="mypageLnbList"></ul>
+				</div>
+			</div>
+			<div class="cont">
+				<div class="sec_head">
+					<h3 class="subH1">STYLE 포인트</h3>
+				</div>
+				<div class="sec_body">
+					<div class="highlight_area">
+						<div class="have_amount">
+							<div class="total_amount">
+								나의 보유 포인트&nbsp;<span><em th:text="${#numbers.formatDecimal(rmPntAmt, 0, 'COMMA', 0, 'POINT')}"></em>P</span>
+							</div>
+							<dl>
+								<div>
+									<dt>적립 예정 포인트</dt>
+									<dd><em th:text="${#numbers.formatDecimal(expectedPntAmt, 0, 'COMMA', 0, 'POINT')}"></em>P</dd>
+								</div>
+								<div>
+									<dt><span class="tag primary_line">D-<em >30</em></span>한 달 이내 소멸 예정</dt>
+									<dd><em th:text="${#numbers.formatDecimal(expectedExpirePntAmt, 0, 'COMMA', 0, 'POINT')}"></em>P</dd>
+								</div>
+							</dl>
+						</div>
+					</div>
+					<div class="content_area">
+						<div class="taps">
+							<div>
+								<ul>
+									<li id="allPointList"><a href="javascript:void(0);">전체내역</a></li>
+									<li id="accumulatePointList"><a href="javascript:void(0);">적립내역</a></li>
+									<li id="usePointList"><a href="javascript:void(0);">사용내역</a></li>
+								</ul>
+							</div>
+						</div>
+						<div class="select_box">
+							<div class="form_field">
+								<div class="select_custom month">
+									<div class="combo">
+										<input type="hidden" name="pointDate" value="0"/>
+										<div class="select"></div>
+										<ul id="searchDt" class="list">
+											
+										</ul>
+									</div>
+								</div>
+							</div>
+						</div>
+						<!-- 데이터 있을 시 -->
+						<div class="list_box">
+							<div class="tbl type5">
+								<table>
+									<colgroup>
+										<col width="10%">
+										<col width="12%">
+										<col width="42%">
+										<col width="18%">
+										<col width="18%">
+									</colgroup>
+									<thead>
+										<tr>
+											<th scope="col"><span class="sr-only">증감여부</span></th>
+											<th scope="col">사유</th>
+											<th scope="col">내용</th>
+											<th scope="col">포인트</th>
+											<th scope="col">일자</th>
+										</tr>
+									</thead>
+									<tbody id="pointAjaxList">
+															
+									</tbody>
+								</table>
+							</div>
+						</div>
+						<!-- //데이터 있을 시 -->
+						<!-- 데이터 없을 시 -->
+						 <div class="nodata">
+							<div class="txt_box">
+								<p>
+									STYLE 포인트 적립/사용내역이 없습니다.<br>
+	
+								</p>
+							</div>
+						</div> 
+						<!-- //데이터 없을 시 -->	
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+<script th:inline="javascript">
+	let accumulatePointList = [[${accumulatePointList}]];
+	let usePointList = [[${usePointList}]];
+	let allPointList = [[${allPointList}]];
+
+	// select 날짜 생성
+	var date = new Date();
+	var year = date.getFullYear();
+	var month = date.getMonth() +1;
+
+	// TODO - 퍼블확정시
+	var oneYearAgo = year -1;
+	var twoYearAgo = year -2;
+	
+	// 이번년도
+	for(var i = 1;i <= 12; i++){
+		if(i < 10 && i != month){
+			$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + 0 + i +"'>"+ year + "년" + " " + i + "월" +"</li>");
+		}
+		else if(i < 10 && i == month){
+			//셀렉트박스 이번 달 표시설정
+			$('.select').append("<li style='pointer-events: none' onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + 0 + i +"'>" + year + "년" + " " + i + "월" +"</li>");
+			$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + 0 + i +"'>" + year + "년" + " " + i + "월" +"</li>");
+		}
+		else if(i > 9 && i != month){
+			$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + i +"'>"+ year + "년" + " " + i + "월" +"</li>");
+		}
+		else if(i > 9 && i == month){
+			$('.select').append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + ""  + i +"'>" + year + "년" + " " + i + "월" +"</li>");
+			$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + i +"'>"+ year + "년" + " " + i + "월" +"</li>");
+		}
+	}
+
+	// 날짜변경 이벤트
+	var fnChangeDate = function(param) {
+		let url = '/mypage/allpoint/list';
+		
+ 		$(param).parent().parent().find('input[name=pointDate]').val($(param).val());
+ 		var pointData = $(param).parent().parent().find('input[name=pointDate]').val();
+ 		
+ 		if(10 > month){
+ 			month = "0" + month;
+ 		}
+ 		
+ 		// 포인트화면 로딩시 이번달 설정 리스트 표시하기 위함
+ 		if(pointData == null){
+ 			pointData = year + "" + month;
+ 		}
+ 		
+		let data = {};
+		
+		data.searchDt = pointData;
+		
+ 		console.log(data);
+		
+		var jsonData = JSON.stringify(data);
+		
+		gagajf.ajaxJsonSubmit('/mypage/allpoint/list', jsonData, function(result){
+						accumulatePointList = result.accumulatePointList;
+						usePointList = result.usePointList;
+						allPointList = result.allPointList;
+						
+						// 클릭상태 확인
+						if($("#accumulatePointList").hasClass("on")){
+							$("#accumulatePointList").click();
+						}else if($("#usePointList").hasClass("on")){
+							$("#usePointList").click();
+						}else if($("#allPointList").hasClass("on")) {
+							$("#allPointList").click();
+						}
+						// 첫화면 전체내역 조회
+						fnGetPointTableInfo();
+		});
+	}
+	
+	// HTML 그리기
+	var fnGetPointTableInfo = function(param) {
+		$('.nodata').hide();
+		let tag = "";
+		if(param != null && param.length > 0){
+			$.each(param, function(idx,item){
+				tag += '<tr>';
+				tag += '	<td>';
+				if(item.pntAmt > 0){
+					tag += '		<span class="tag primary">적립</span>';
+				}else{
+					tag += '		<span class="tag deepgray">차감</span>';
+				}
+				
+				tag += '	</td>';
+				tag += '	<td>'+item.occurGb+'</td>';
+				tag += '	<td>';
+				tag += '		<div class="txt_content">'+ item.occurDtlDesc + '</div>';
+				tag += '	</td>';
+				tag += '	<td>';
+				if(item.pntAmt > 0){
+					tag += '		<span class="amount_plus">';
+					tag += '			<em>'+item.pntAmt+'</em>P';
+					tag += '		</span>';
+				}else{
+					tag += '		<span class="c_primary">';
+					tag += '			<em>'+item.pntAmt+'</em>P';
+					tag += '		</span>';
+				}
+				
+				tag += '	</td>';
+				tag += '	<td>'+item.pntUploadDt;
+				tag += '	</td>';
+				tag += '</tr>		';
+			});
+		}else{
+			$('.nodata').show();
+			
+		}
+		
+		$("#pointAjaxList").html(tag);
+	}
+	
+	// 전체내역 조회
+	$("#allPointList").click(function(){
+
+ 		$("#accumulatePointList").removeClass("active");
+ 		$("#usePointList").removeClass("active");
+ 		
+ 		$("#allPointList").addClass("active");
+ 		//$("#plusMinus").text("증감/차감");
+ 		
+ 		fnGetPointTableInfo(allPointList);
+	});
+	
+	// 적립내역 조회
+	$("#accumulatePointList").click(function(){
+
+ 		$("#allPointList").removeClass("active");
+ 		$("#usePointList").removeClass("active");
+ 		
+ 		$("#accumulatePointList").addClass("active");
+ 		//$("#plusMinus").text("증감");
+		
+ 		fnGetPointTableInfo(accumulatePointList);
+	});
+	
+	// 사용내역 조회
+	$("#usePointList").click(function(){
+		
+		$("#accumulatePointList").removeClass("active");
+		$("#allPointList").removeClass("active");
+		
+		$("#usePointList").addClass("active");
+		//$("#plusMinus").text("차감");
+		
+		fnGetPointTableInfo(usePointList);
+	});
+	
+	$(document).ready(function() {
+		// 마이페이지 LNB 설정
+		fnSetMypageLnbList(5);
+		
+		// 마이페이지 location 설정
+		fnSetMypageLocation('STYLE24 포인트', '_PAGE_MYPAGE_POINT');
+		
+		// 전체내역 표시
+ 		$("#allPointList").trigger('click');
+
+		// 셀렉트박스 활성화
+		$('.select_custom').each(function(index) {
+			var selecter01 = new sCombo($(this));
+		});
+
+		// 셀렉트박스 데이터 설정
+		fnChangeDate();
+
+	});
+
+</script>
+</th:block>
+
+</body>
+</html>

+ 156 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageWishListFormWeb.html

@@ -0,0 +1,156 @@
+<!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  : MypageWishListFormWeb.html
+ * @desc    : 마이페이지 > 위시리스트 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.03.29   sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+<div class="content myWishlist"> <!-- 페이지특정 클래스 = myWishlist -->
+	<div class="cont_body">
+		<!-- CONT-BODY -->
+		<div class="lnb">
+			<div class="lnb_tit">
+				<h2>마이페이지</h2>
+			</div>
+			<div class="lnb_list">
+				<ul id="mypageLnbList"></ul>
+			</div>
+		</div>
+		<div class="cont">
+			<div class="sec_head">
+				<h3 class="subH1">위시리스트</h3>
+			</div>
+			<div class="lnb_list">
+				<ul id="mypageLnbList"></ul>
+			</div>
+			<div class="sec_body" id="wishList">
+				<!-- 데이터 없을 시 -->
+				 <div class="nodata" style="display:none;">
+					<div class="txt_box">
+						<p>
+							등록된 위시리스트가 없습니다.<br>
+							
+						</p>
+					</div>
+				</div> 
+				<!-- //데이터 없을 시 -->											
+			</div>
+		</div>
+		<!-- // CONT-BODY -->					
+	</div>
+</div>
+
+
+<script th:inline="javascript">
+let wishMonth = [[${wishMonth}]];
+let wishGoods = [[${wishGoods}]];
+let _mall = [[${@environment.getProperty('domain.front')}]];
+// 위시리스트 
+var wishListForm = function() {
+
+	var html = '';
+	$("#wishList").append(html);
+	if(wishMonth.length>0){
+		for (var i = 0; i < wishMonth.length; i++) {
+			html += '<div class="monthly_wish_wrap">                                                                                         ';
+			html += '	<div class="date">                                                                                                   ';
+			html += '		<span>'+wishMonth[i].regDt+'</span>                                                                              ';
+			html += '	</div>                                                                                                               ';
+			html += '	<div class="itemsGrp">                                                                                            ';
+			$.each(wishGoods, function(idx, item) {
+				html += '		<div class="item_prod">                                                                                       ';
+				html += '			<div class="item_state">                                                                                  ';
+				html += '				<button type="button" class="itemLike active" goodsCd="'+item.goodsCd+'" planDtlSq="" onclick="wishlistDelete(this)">관심상품 추가</button>                                               ';
+				html += '				<a onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\');"  class="itemLink" >                                                                     ';
+				html += '					<div class="itemPic">                                                                             ';
+				html += '						<img alt="" class=" vLHTC pd_img" src="/images/pc/thumb/prod5.jpg">                           ';
+				html += '					</div>                                                                                            ';
+				html += '					<p class=" itemBrand">'+item.brandKnm+'</p>                                               ';
+				html += '					<div class=" itemName">'+item.goodsNm+'</div>                                             ';
+				html += '					<p class="itemPrice">' + item.currPrice.addComma();
+				if (item.currPrice != item.listPrice) {
+					html += '						<span class="itemPrice_original">'+item.listPrice.addComma() + '</span>                         ';	
+				}
+				if (item.dcRate>0) {
+					html += '						<span class=" itemPercent">'+item.dcRate+'%</span>                                     ';	
+				}
+				html += '					</p>                                                                                              ';
+				html += '					<div class="itemcolorchip">                                                                       ';
+				html += '						<span class="chip_color35" value="ABM">BEIGE</span>                                           ';
+				html += '						<span class="chip_color54" value="BDS">BLACK</span>                                           ';
+				html += '						<span class="chip_color40" value="YBR">WHITE</span>                                           ';
+				html += '					</div>                                                                                            ';
+				html += '					 <p class="itemBadge">                                                                            ';
+				html += '						<span class="badge13">베스트 </span>                                                             ';
+				html += '					</p>                                                                                              ';
+				html += '					<div class="itemComment">★ [NEW] 20FW 빅웨이브 단독발매!</div>                                            ';
+				html += '				</a>                                                                                                  ';
+				html += '			</div>                                                                                                    ';
+				html += '		</div>	                                                                                                      ';
+			});
+			html += '	</div>  																										 ';
+			html += '</div>                                                                                                                ';
+		}
+	}else{
+		html += '<div class="nodata">';
+		html += '	<div class="txt_box">';
+		html += '		<p>';
+		html += '			등록된 위시리스트가 없습니다.<br>';
+		html += '		</p>';
+		html += '	</div>';
+		html += '</div> ';
+	}
+	
+	$("#wishList").append(html);
+}
+
+// 마이페이지 위시리스트 해제
+var wishlistDelete = function(obj) {
+	mcxDialog.confirm("위시리스트를 해제하시겠습니까?", {
+		cancelBtnText : "취소",
+		sureBtnText : "확인",
+		sureBtnClick : function() {
+			
+			cfnPutWishList(obj);
+			 $.ajax({
+					type		: "GET",
+					url 		: '/mypage/wish/list',
+					dataType 	: 'html',
+					success 	: function(result) {
+						if (result != null) {
+							$("#wishList").html(result);
+						}
+					}
+				});		
+			}
+	});
+
+}
+
+$(document).ready(function() {
+
+	// 마이페이지 LNB 설정
+	fnSetMypageLnbList(9);
+
+	// 마이페이지 location 설정
+	fnSetMypageLocation('위시리스트', '_PAGE_MYPAGE_WISHLIST');
+	wishListForm();
+
+});
+</script>
+</th:block>
+
+</body>
+</html>

+ 57 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageWishListWeb.html

@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	style="overflow-x: hidden !important;"
+>
+<!--
+ *******************************************************************************
+ * @source  : CouponDetailPopWeb.html
+ * @desc    : 쿠폰적용대상 리스트 Page
+ *============================================================================
+ * PastelMall
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.03.17   sowon     최초 작성
+ *******************************************************************************
+ -->
+<!-- 월별 관심상품 -->
+<th:block th:if="${wishMonth != null}" th:each="WishMonth, wishStat : ${wishMonth}">
+<div class="monthly_wish_wrap">
+	<div class="date">
+		<span th:text="${WishMonth.regDt}"></span>
+	</div>
+	<div class="itemsGrp">
+	   <th:block th:each="WishGoods, wishStat : ${wishGoods}">
+		<div class="item_prod">
+			<div class="item_state">
+				<button type="button" class="itemLike active" th:attr="goodsCd=${WishGoods.goodsCd}, ithrCd='', contentsLoc='', planDtlSq=''" onclick="wishlistDelete(this)">관심상품 추가</button>
+				<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${WishGoods.goodsCd}]])">
+					<div class="itemPic">
+						<img alt="" class=" vLHTC pd_img" src="/images/pc/thumb/prod5.jpg">
+					</div>
+					<p class=" itemBrand" th:text="${WishGoods.brandKnm}"></p>
+					<div class=" itemName" th:text="${WishGoods.goodsNm}"></div>
+					<p class="itemPrice">[[${#numbers.formatInteger(WishGoods.currPrice,3,'POINT') + '원'}]]
+						<span class="itemPrice_original"  th:if="${WishGoods.currPrice != WishGoods.listPrice}" th:text="${#numbers.formatInteger(WishGoods.listPrice,3,'POINT') + '원'}"></span>
+						<span class=" itemPercent" th:if="${WishGoods.dcRate > 0}" th:text="|${#numbers.formatDecimal(WishGoods.dcRate,0,0)}%|"></span>
+					</p>
+					<div class="itemcolorchip">
+						<span class="chip_color35" value="ABM">BEIGE</span>
+						<span class="chip_color54" value="BDS">BLACK</span>
+						<span class="chip_color40" value="YBR">WHITE</span>
+					</div>
+					 <p class="itemBadge">
+						<span class="badge13">베스트 </span>
+					</p>
+					<div class="itemComment">★ [NEW] 20FW 빅웨이브 단독발매!</div>
+				</a>
+			</div>
+		</div>
+		</th:block>	
+	</div>
+</div>
+</th:block>
+<!-- //월별 관심상품 -->
+				

+ 9 - 9
src/main/webapp/WEB-INF/views/web/order/OrderCouponApplyPopWeb.html

@@ -8,6 +8,7 @@
 		</div>
 		<div class="modal-body">
 			<div class="pop_cont">
+			
 				<!-- 상품쿠폰적용 -->
 				<th:block th:if="${goodsApplyCpnList.size() > 0}">
 					<h6>상품쿠폰</h6>
@@ -32,11 +33,6 @@
 													<div class="item_coupon"></div>
 												</div>
 												<ul class="list">
-													<input type="hidden" name="cpnType" value="goodsCpn"/>
-													<input type="hidden" name="cpnCartSq" th:value="${goods.cartSq}"/>
-													<input type="hidden" name="custCpnSq" value="0"/>
-													<input type="hidden" name="cpnDcAmt" value="0"/>
-															
 													<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true"추가  -->
 													<th:block th:each="goodsCpn, k : ${goods.goodsCpnList}">
 														<li th:value="${goodsCpn.custCpnSq}" th:data="${goodsCpn.cpnDcAmt}">
@@ -59,6 +55,10 @@
 													<li value="0" data="0">
 														<div class="item_coupon empty"><p class="empty">적용 안함</p></div>
 													</li>
+													<input type="hidden" name="cpnType" value="goodsCpn"/>
+													<input type="hidden" name="cpnCartSq" th:value="${goods.cartSq}"/>
+													<input type="hidden" name="custCpnSq" value="0"/>
+													<input type="hidden" name="cpnDcAmt" value="0"/>
 												</ul>
 											</div>
 										</div>
@@ -75,10 +75,6 @@
 					<h6>장바구니 쿠폰</h6>
 					<div class="area_cart_coupon">
 						<div class="form_field">
-							<input type="hidden" name="cpnType" value="cartCpn"/>
-							<input type="hidden" name="custCpnSq" value="0"/>
-							<input type="hidden" name="cpnDcAmt" value="0"/>
-							
 							<th:block th:each="cartCpn, k : ${cartCpnList}">
 								<div class="cartCpn" th:value="${cartCpn.custCpnSq}">
 									<input type="hidden" name="dcWay" th:value="${cartCpn.dcWay}"/>
@@ -102,8 +98,12 @@
 											<p class="discount"><span th:text="${#numbers.formatInteger(cartCpn.cpnDcAmt, 1, 'COMMA')}"></span>원 할인</p>
 										</div>
 									</label>
+						
 								</div>
 							</th:block>
+							<input type="hidden" name="cpnType" value="cartCpn"/>
+							<input type="hidden" name="custCpnSq" value="0"/>
+							<input type="hidden" name="cpnDcAmt" value="0"/>
 						</div>
 					</div>
 				</th:block>

+ 84 - 90
src/main/webapp/WEB-INF/views/web/order/OrderDelvAddrAddPopWeb.html

@@ -1,105 +1,99 @@
-<div class="modal-dialog" role="document">
-	<div class="modal-content">
-		<div class="modal-header">
-			<h5 class="modal-title" id="adrsAddLabel">배송지 등록</h5>
-		</div>
-		<div class="modal-body">
-			<div class="pop_cont">
-				<form class="form_wrap form_full" name="deliveryAddrForm" id="deliveryAddrForm">
-					<div class="area_adrsinfo">
-						<h6>배송지 정보</h6>
-						<div class="default_addrs">
-							<div class="form_field">
-								<input id="chk-default-addrs" type="checkbox" name="defaultYn" checked="">
-								<label for="chk-default-addrs"><span>기본 배송지로 등록</span></label>
-							</div>
-						</div>
-						<div class="form_field">
-							<label class="input_label sr-only">받는 분</label>
-							<div class="ui_col_12">
-								<div class="input_wrap">
-									<input type="text" name="recipNm" placeholder="받는 분">
-								</div>
-							</div>
+<div class="modal-header">
+	<h5 class="modal-title" id="adrsAddLabel">배송지 등록</h5>
+</div>
+<div class="modal-body">
+	<div class="pop_cont">
+		<form class="form_wrap form_full" name="deliveryAddrForm" id="deliveryAddrForm">
+			<div class="area_adrsinfo">
+				<h6>배송지 정보</h6>
+				<div class="default_addrs">
+					<div class="form_field">
+						<input id="chk-default-addrs" type="checkbox" name="defaultYn" checked="">
+						<label for="chk-default-addrs"><span>기본 배송지로 등록</span></label>
+					</div>
+				</div>
+				<div class="form_field">
+					<label class="input_label sr-only">받는 분</label>
+					<div class="ui_col_12">
+						<div class="input_wrap">
+							<input type="text" class="form_control" name="recipNm" placeholder="받는 분" id="">
 						</div>
-						<div class="form_field">
-							<label class="input_label sr-only">휴대폰 번호</label>
-							<div class="ui_col_12">
-								<div class="input_wrap">
-									<input type="text" name="recipPhnno" placeholder="휴대폰 번호" >
-								</div>
-							</div>
+					</div>
+				</div>
+				<div class="form_field">
+					<label class="input_label sr-only">휴대폰 번호</label>
+					<div class="ui_col_12">
+						<div class="input_wrap"> 
+							<input type="text" class="form_control" name="recipPhnno" placeholder="휴대폰 번호" id="">
 						</div>
-						<div class="form_field">
-							<label class="input_label sr-only">배송주소</label>
-							<div class="ui_col_12">
-								<div class="input_wrap">
-									<input type="text" name="recipZipcode" placeholder="우편번호">
-									<button type="button" class="btn btn_dark btn_sm" onclick="fnOpenDaumAddr();">
-										<span>우편번호 찾기</span>
-									</button>
-								</div>
-							</div>
+					</div>
+				</div>
+				<div class="form_field">
+					<label class="input_label sr-only">배송주소</label>
+					<div class="ui_col_12">
+						<div class="input_wrap"> 
+							<input type="text" class="form_control" name="recipZipcode" placeholder="배송주소" id="">
 						</div>
-						<div class="form_field">
-							<label class="input_label sr-only">기본주소</label>
-							<div class="ui_col_12">
-								<div class="input_wrap">
-									<input type="text" name="recipBaseAddr" placeholder="상세주소">
-								</div>
-							</div>
+						<button type="button" class="btn btn_dark btn_sm">
+							<span>우편번호 찾기</span>
+						</button>
+					</div>
+				</div>
+				<div class="form_field">
+					<label class="input_label sr-only">기본주소</label>
+					<div class="ui_col_12">
+						<div class="input_wrap"> 
+							<input type="text" class="form_control" name="recipBaseAddr" placeholder="상세주소" id="">
 						</div>
-						<div class="form_field">
-							<label class="input_label sr-only">상세주소</label>
-							<div class="ui_col_12">
-								<div class="input_wrap">
-									<input type="text" name="recipDtlAddr" placeholder="상세주소">
-								</div>
-							</div>
+					</div>
+				</div>
+				<div class="form_field">
+					<label class="input_label sr-only">상세주소</label>
+					<div class="ui_col_12">
+						<div class="input_wrap"> 
+							<input type="text" class="form_control" name="recipDtlAddr" placeholder="상세주소" id="">
 						</div>
 					</div>
-					<div class="area_request">
-						<h6>배송요청 사항</h6>
-						<div class="form_field">
-							<div>
-								<input type="radio" name="rdi-request1" id="rdi-request11" value="문앞"> 
-								<label for="rdi-request11"><span>문앞</span></label>
-							</div>
-							<div>
-								<input type="radio" name="rdi-request1" id="rdi-request12" value="직접받고 부재시 문 앞"> 
-								<label for="rdi-request12"><span>직접받고 부재시 문 앞</span></label>
-							</div>
-							<div>
-								<input type="radio" name="rdi-request1" id="rdi-request13" value="경비실"> 
-								<label for="rdi-request13"><span>경비실</span></label>
-							</div>
-							<div>
-								<input type="radio" name="rdi-request1" id="rdi-request14" value="택배함"> 
-								<label for="rdi-request14"><span>택배함</span></label>
-							</div>
-							<div>
-								<input type="radio" name="rdi-request1" id="rdi-request15" value="기타사항"> 
-								<label for="rdi-request15"><span>기타사항</span></label>
-								<div class="info_box">
-									<div class="input_wrap">
-										<input type="text" name="delvMemoText" class="form_control" maxlength="30" placeholder="보관장소만 입력" disabled>
-										<p>보관 장소 외 다른 내용 입력시 통보없이 삭제 될 수 있습니다.</p>
-									</div>
-								</div>
+				</div>
+			</div>
+			<div class="area_request">
+				<h6>배송요청 사항</h6> 
+				<div class="form_field">
+					<div>
+						<input type="radio" name="rdi-request1" id="rdi-request11" value="문앞" checked="">
+						<label for="rdi-request11"><span>문앞</span></label>
+					</div>
+					<div>
+						<input type="radio" name="rdi-request1" id="rdi-request12" value="직접받고 부재시 문 앞" checked="">
+						<label for="rdi-request12"><span>직접받고 부재시 문 앞</span></label>
+					</div>
+					<div>
+						<input type="radio" name="rdi-request1" id="rdi-request13" value="경비실" checked="">
+						<label for="rdi-request13"><span>경비실</span></label>
+					</div>
+					<div>
+						<input type="radio" name="rdi-request1" id="rdi-request14" value="택배함" checked="">
+						<label for="rdi-request14"><span>택배함</span></label>
+					</div>
+					<div>
+						<input type="radio" name="rdi-request1" id="rdi-request15" value="기타사항" checked="">
+						<label for="rdi-request15"><span>기타사항</span></label>
+						<div class="info_box">
+							<div class="input_wrap">
+								<input type="text" class="form_control" maxlength="30" placeholder="보관장소만 입력 (필수)">
+							<p>보관 장소 외 다른 내용 입력시 통보없이 삭제 될 수 있습니다.</p>
 							</div>
 						</div>
 					</div>
-					<div class="btn_group_block">
-						<button type="button" class="btn btn_dark btn_block" id="btn_delivery_addr_save">
-							<span>배송지 등록</span>
-						</button>
-					</div>
-				</form>
+				</div>
 			</div>
-		</div>
+		</form>
 	</div>
 </div>
-<a href="#close-modal" rel="modal:close" id="adrsAddPop_close" class="close-modal">Close</a>
+<div class="modal-footer">
+	<button type="button" class="btn btn_dark" id="btn_delivery_addr_save"><span>배송지 등록</span></button>
+</div>
+
 
 <script th:inline="javascript">
 //컨텐츠 호출

+ 53 - 60
src/main/webapp/WEB-INF/views/web/order/OrderDelvAddrChangePopWeb.html

@@ -1,69 +1,62 @@
 <!-- 배송지변경 팝업 -->
 <form name="delvAddrChangeForm" id="delvAddrChangeForm">
-<div class="modal-dialog" role="document">
-	<div class="modal-content">
-		<div class="modal-header">
-			<h5 class="modal-title" id="adrsChangeLabel">배송지 선택</h5>
-		</div>
-		<div class="modal-body">
-			<div class="pop_cont">
-				<ul>
-					<!-- 배송지목록 -->
-					<th:block th:each="deliveryAddr, index : ${deliveryAddrList}">
-						<li>
-							<div class="adrs_box">
-								<dl>
-									<div>
-										<input type="hidden" name="recipNm" 			th:value="${deliveryAddr.recipNm}"/>
-										<input type="hidden" name="recipPhnno" 			th:value="${deliveryAddr.recipPhnno}"/>
-										<input type="hidden" name="recipZipcode" 		th:value="${deliveryAddr.recipZipcode}"/>
-										<input type="hidden" name="recipBaseAddr" 		th:value="${deliveryAddr.recipBaseAddr}"/>
-										<input type="hidden" name="recipDtlAddr" 		th:value="${deliveryAddr.recipDtlAddr}"/>
-										<input type="hidden" name="delvMemo" 			th:value="${deliveryAddr.delvMemo}"/>
-										
-										<dt><span class="sr-only">배송지명</span></dt>
-										<dd>
-											<th:block th:text="${deliveryAddr.recipNm}"></th:block>
-											<span class="icon_tag">
-												<th:block th:if="${deliveryAddr.defaultYn} == 'Y'">
-													<em class="tag">기본 배송지</em>
-												</th:block>
-												<th:block th:if="${deliveryAddr.shotDelvUseYn} == 'Y'">
-													<em class="tag primary_line">총알배송</em>
-												</th:block>
-											</span>
-										</dd>
-									</div>
-									<div>
-										<dt><span class="sr-only">휴대폰 번호</span></dt>
-										<dd th:text="${deliveryAddr.recipPhnno}"></dd>
-									</div>
-									<div>
-										<dt><span class="sr-only">배송주소</span></dt>
-										<dd th:text="${deliveryAddr.recipBaseAddr} + ' ' + ${deliveryAddr.recipDtlAddr}"></dd>
-									</div>
-									<div>
-										<dt>배송요청 사항</dt>
-										<dd th:text="${deliveryAddr.delvMemo}"></dd>
-									</div>
-									<button type="button" class="btn btn_default btn_sm btn_addrModify_pop" th:value="${deliveryAddr.custDelvAddrSq}"><span>수정</span></button>
-									<button type="button" class="btn btn_dark btn_sm btn_sel_delvAddr" th:value="${deliveryAddr.custDelvAddrSq}"><span>선택</span></button>
-								</dl>
+<div class="modal-header">
+	<h5 class="modal-title" id="adrsChangeLabel">배송지 선택</h5>
+</div>
+<div class="modal-body">
+	<div class="pop_cont">
+		<ul>
+			<!-- 배송지목록 -->
+			<th:block th:each="deliveryAddr, index : ${deliveryAddrList}">
+				<li>
+					<div class="adrs_box">
+						<dl>
+							<div>
+								<dt><span class="sr-only">배송지명</span></dt>
+								<dd>
+									<th:block th:text="${deliveryAddr.recipNm}"></th:block>
+									<span class="icon_tag">
+										<th:block th:if="${deliveryAddr.defaultYn} == 'Y'">
+											<em class="tag">기본 배송지</em>
+										</th:block>
+										<th:block th:if="${deliveryAddr.shotDelvUseYn} == 'Y'">
+											<em class="tag primary_line">총알배송</em>
+										</th:block>
+									</span>
+								</dd>
+							</div>
+							<div>
+								<dt><span class="sr-only">휴대폰 번호</span></dt>
+								<dd th:text="${deliveryAddr.recipPhnno}"></dd>
+							</div>
+							<div>
+								<dt><span class="sr-only">배송주소</span></dt>
+								<dd th:text="${deliveryAddr.recipBaseAddr} + ' ' + ${deliveryAddr.recipDtlAddr}"></dd>
 							</div>
-						</li>
-					</th:block>
-					<!-- //배송지목록 -->
-				</ul>
-			</div>
-		</div>
-		<div class="modal-footer">
-			<button class="btn btn_dark" id="btn_addrAdd_pop"><span>배송지 추가</span></button>
-		</div>
+							<div>
+								<dt>배송요청 사항&nbsp;:&nbsp;</dt>
+								<dd th:text="${deliveryAddr.delvMemo}"></dd>
+							</div>
+						</dl>
+						<button type="button" class="btn btn_default btn_sm btn_addrModify_pop" th:value="${deliveryAddr.custDelvAddrSq}"><span>수정</span></button>
+						<button type="button" class="btn btn_dark btn_sm btn_sel_delvAddr" th:value="${deliveryAddr.custDelvAddrSq}"><span>선택</span></button>
+						
+						<input type="hidden" name="recipNm" 			th:value="${deliveryAddr.recipNm}"/>
+						<input type="hidden" name="recipPhnno" 			th:value="${deliveryAddr.recipPhnno}"/>
+						<input type="hidden" name="recipZipcode" 		th:value="${deliveryAddr.recipZipcode}"/>
+						<input type="hidden" name="recipBaseAddr" 		th:value="${deliveryAddr.recipBaseAddr}"/>
+						<input type="hidden" name="recipDtlAddr" 		th:value="${deliveryAddr.recipDtlAddr}"/>
+						<input type="hidden" name="delvMemo" 			th:value="${deliveryAddr.delvMemo}"/>
+					</div>
+				</li>
+			</th:block>
+		</ul>
 	</div>
 </div>
-<a href="#close-modal" rel="modal:close" id="adrsChangePop_close" class="close-modal">Close</a>
+<div class="modal-footer">
+	<button class="btn btn_dark" id="btn_adrsAdd_pop"><span>배송지 추가</span></button>
+</div>
 </form>
-<!-- //배송지변경 팝업 -->
 
 <script th:inline="javascript">
 //컨텐츠 호출

+ 61 - 14
src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html

@@ -420,23 +420,71 @@
 </div>
 </form>
 
-<!-- 배송지변경 -->
-<div class="modal fade od_pop adrsChange_pop" id="adrsChangePop" tabindex="-1" role="dialog" aria-labelledby="adrsChangeLabel" aria-hidden="true"></div>
+<!-- 배송지변경 팝업 -->
+<div class="modal fade adrsChange_pop" id="adrsChangePop" tabindex="-1" role="dialog" aria-labelledby="adrsChangeLabel" aria-hidden="true">
+	<div class="modal-dialog" role="document">
+		<div class="modal-content">
+			<!-- 배송지변경 팝업 내용 -->
+		</div>
+	</div>
+	<a href="#close-modal" rel="modal:close" id="adrsChangePop_close" class="close-modal">Close</a>
+</div>
+<!-- //배송지변경 팝업 -->
 
 <!-- 배송지추가 팝업 -->
-<div class="modal fade od_pop adrsAdd_pop" id="adrsAddPop" tabindex="-1" role="dialog" aria-labelledby="adrsAddLabel" aria-hidden="true"></div>
+<div class="modal fade adrsAdd_pop" id="adrsAddPop" tabindex="-1" role="dialog" aria-labelledby="adrsAddLabel" aria-hidden="true">
+	<div class="modal-dialog" role="document">
+		<div class="modal-content">
+			<!-- 배송지추가 팝업 내용 -->
+		</div>
+	</div>
+	<a href="#close-modal" rel="modal:close" id="adrsAddPop_close" class="close-modal">Close</a>
+</div>
+<!-- //배송지추가 팝업 -->
 
 <!-- 배송지수정 팝업 -->
-<div class="modal fade od_pop adrsModify_pop" id="adrsModifyPop" tabindex="-1" role="dialog" aria-labelledby="adrsModifyLabel" aria-hidden="true"></div>
+<div class="modal fade adrsModify_pop" id="adrsModifyPop" tabindex="-1" role="dialog" aria-labelledby="adrsModifyLabel" aria-hidden="true">
+	<div class="modal-dialog" role="document">
+		<div class="modal-content">
+			<!-- 배송지수정 팝업 내용 -->
+		</div>
+	</div>
+	<a href="#close-modal" rel="modal:close" id="adrsModifyPop_close" class="close-modal">Close</a>
+</div>
+<!-- //배송지수정 팝업 -->
 
 <!-- 배송요청사항수정 팝업 -->
-<div class="modal fade od_pop rqstModify_pop" id="rqstModifyPop" tabindex="-1" role="dialog" aria-labelledby="rqstModifyLabel" aria-hidden="true"></div>
+<div class="modal fade rqstModify_pop" id="rqstModifyPop" tabindex="-1" role="dialog" aria-labelledby="rqstModifyLabel" aria-hidden="true">
+	<div class="modal-dialog" role="document">
+		<div class="modal-content">
+			<!-- 배송요청사항수정 팝업 내용 -->
+		</div>
+	</div>
+	<a href="#close-modal" rel="modal:close" id="rqstModifyPop_close" class="close-modal">Close</a>
+</div>
+<!-- //배송요청사항수정 팝업 -->
 
 <!-- 사은품지급안내 팝업 -->
-<div class="modal fade od_pop infoGift_pop" id="infoGiftPop" tabindex="-1" role="dialog" aria-labelledby="infoGiftLabel" aria-hidden="true"></div>
+<div class="modal fade infoGift_pop" id="infoGiftPop" tabindex="-1" role="dialog" aria-labelledby="infoGiftLabel" aria-hidden="true">
+	<div class="modal-dialog" role="document">
+		<div class="modal-content">   
+			<!-- 사은품지급안내 팝업 내용 -->
+		</div>
+	</div>
+	<a href="#close-modal" rel="modal:close" id="infoGiftPop_close" class="close-modal">Close</a>
+</div>
+<!-- //사은품지급안내 팝업 -->
 
 <!-- 할인쿠폰 변겅 팝업 -->
-<div class="modal fade od_pop couponModify_pop" id="couponModifyPop" tabindex="-1" role="dialog" aria-labelledby="couponModifyLabel" aria-hidden="true"></div>
+<div class="modal fade couponModify_pop" id="couponModifyPop" tabindex="-1" role="dialog" aria-labelledby="couponModifyLabel" aria-hidden="true">
+	<div class="modal-dialog" role="document">
+		<div class="modal-content">
+			<!-- 할인쿠폰 변겅 팝업 내용 -->
+		</div>
+	</div>
+	<a href="#close-modal" rel="modal:close" id="couponModifyPop_close" class="close-modal">Close</a>
+</div>
+<!-- //할인쿠폰 변겅 팝업 -->
 
 <script th:inline="javascript">
 // 배송관련정보 변수선언
@@ -591,7 +639,7 @@ var deliveryAddrInfoSet = function(temp) {
 						gagajf.showProgressbar(true);
 					},
 					success 	: function(result) {
-						$("#adrsAddPop").html(result);
+						$("#adrsAddPop .modal-dialog .modal-content").html(result);
 						$("#adrsAddPop").modal("show");
 					}
 				});	
@@ -609,7 +657,7 @@ var deliveryAddrInfoSet = function(temp) {
 					dataType 	: "html",
 					success 	: function(result) {
 						if (result != null) {
-							$("#rqstModifyPop").html(result);
+							$("#rqstModifyPop .modal-dialog .modal-content").html(result);
 							$("#rqstModifyPop").modal("show");
 						}
 					}
@@ -655,7 +703,6 @@ var fnGetDailyDeliveryCheck = function (temp) {
 			, function (result) {
 				// 총알배송여부체크
 				var tempShotDelvYn = "N";
-				
 				if (parseInt(result) > 0) {
 					tempShotDelvYn = "Y";
 				}
@@ -1387,7 +1434,7 @@ var custCpnApply = function(obj) {
 					
 					// 할인율일때 할인금액 
 					if (dcWay == "G240_11") {
-						cartCpnDcAmt = (tempAmt * dcVal) / 100;
+						cartCpnDcAmt = parseInt((tempAmt * dcVal) / 100);
 						cartCpnDcSumAmt = cartCpnDcSumAmt + cartCpnDcAmt;
 
 						$(this).parent().find(".cartCpnSq").text(obj.attr("value"));
@@ -1741,9 +1788,9 @@ var custCpnSumAmtCal = function() {
 
 // 2. 버튼기능구현
 // 2.1 배송지변경 팝업열기
-$('#btn_adrsChange_pop').on("click", function(){
-	$("#adrsChangePop").modal("show");
-});
+// $('#btn_adrsChange_pop').on("click", function(){
+	// $("#adrsChangePop").modal("show");
+// });
 
 $(document).ready( function() {
 	//해외배송 입력

+ 50 - 53
src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html

@@ -191,9 +191,9 @@
 								<div class="swiper-wrapper">
 								 <th:block th:each="PlanData, PlanStat : ${planList}">
 									<div class="swiper-slide">
-										<a th:onclick="planDetailSearch([[${PlanData.planSq}]])">
+										<a th:onclick="cfnGoToPlanDetail([[${PlanData.planSq}]])">
 											<div class="thumb">
-												<img th:src="${@environment.getProperty('domain.image')+PlanData.mainPimg}" alt="${PlanData.planNm}">
+												<img th:src="${@environment.getProperty('domain.image')+PlanData.mainImg}" alt="${PlanData.planNm}">
 											</div>
 											<div class="txt">
 												<span class="brand" th:if="${PlanData.cnt > 1}" th:text="${PlanData.brand}+' 외'"></span>
@@ -239,34 +239,34 @@ if(review != null || review != ''){
 	html += '		<div class="review_list">';
 	
 	
-	for (var i = 0; i < review.length; i++) {
+	$.each(review, function(idx, item)  {
 		html += '			<div>';
 		html += '				<div class="best_review">';
-		html += '					<a href="javascript:void();" onclick="fnPlanReviewDetail(\''+review[i].reviewSq+'\');">';
+		html += '					<a href="javascript:void();" onclick="fnPlanReviewDetail(\''+item.reviewSq+'\');">';
 		html += '						<div class="lap">';
 		html += '							<div class="pic">';
-		if (review[i].fileGb == 'M') { 
-			html += '								<span class="thumb mov" style="background-image: url('+ imgUrl +'/'+review[i].reviewSysImg +');"></span>';	
+		if (item.fileGb == 'M') { 
+			html += '								<span class="thumb mov" style="background-image: url('+ imgUrl +'/'+item.reviewSysImg +');"></span>';	
 		}else{
-			html += '								<span class="thumb" style="background-image: url('+ imgUrl +'/'+review[i].reviewSysImg +');"></span>';			
+			html += '								<span class="thumb" style="background-image: url('+ imgUrl +'/'+item.reviewSysImg +');"></span>';			
 		}
 		html += '							</div>';
 		html += '							<div class="info">';
 		html += '								<div>';
 		html += '									<div class="star_score">';
 		html += '										<span class="star"> <em class="progbar"';
-		html += '											style="width:'+(review[i].score*20)+'%;"></em> <!-- 평점 style로 표기 -->';
+		html += '											style="width:'+(item.score*20)+'%;"></em> <!-- 평점 style로 표기 -->';
 		html += '										</span>'; 
-		if(review[i].bestYn == 'Y'){
+		if(item.bestYn == 'Y'){
 			html += '<em class="ico ico_besttag"></em>';	
 		}
 		html += '									</div>';
 		html += '									<div class="txt_best_review">';
-		html += '										<p>'+review[i].reviewContent+'</p>';
+		html += '										<p>'+item.reviewContent+'</p>';
 		html += '									</div>';
 		html += '									<div class="writer">';
-		html += '										<span class="wr_id">'+review[i].maskingCustId+'</span><span';
-		html += '											class="wr_date">'+review[i].regDt+'</span>';
+		html += '										<span class="wr_id">'+item.maskingCustId+'</span><span';
+		html += '											class="wr_date">'+item.regDt+'</span>';
 		html += '									</div>';
 		html += '								</div>';
 		html += '							</div>';
@@ -278,17 +278,16 @@ if(review != null || review != ''){
 		html += '						<div class="item_state">';
 		html += '							<a href="#none" class="itemLink">';
 		html += '								<div class="itemPic">';
-		html += '									<img alt="" class="vLHTC pd_img" src="'+ _imgUrl +'/'+review[i].sysImgNm +'">';
+		html += '									<img alt="" class="vLHTC pd_img" src="'+ _imgUrl +'/'+item.sysImgNm +'">';
 		html += '								</div>';
-		html += '								<div class="itemName">'+review[i].goodsNm+'</div>';
-		html += '								<p class="itemPrice">'+comma(review[i].currPrice)+'원</p>';
+		html += '								<div class="itemName">'+item.goodsNm+'</div>';
+		html += '								<p class="itemPrice">'+comma(item.currPrice)+'원</p>';
 		html += '							</a>';
 		html += '						</div>';
 		html += '					</div>';
 		html += '				</div>';
 		html += '			</div>';
-	}
-	
+	});
 	html += '			</div>';
 	html += '		</div>';
 	html += '	</div>';
@@ -307,29 +306,27 @@ if(coupon != null || coupon != ''){
 	html += '	</div>';
 	html += '	<div class="coupon_list inner">';
 	html += '		<ul class="clear">';
-	for (var i = 0; i < coupon.length; i++) {
+	$.each(coupon, function(idx, item) {
 		html += '			<li>';
 		html += '				<div class="coupon">';
 		html += '					<div>';
-		html += '						<p class="cp_name">'+coupon[i].cpnNm+'</p>';
+		html += '						<p class="cp_name">'+item.cpnNm+'</p>';
 		html += '						<p class="cp_cont">';
-		if (coupon[i].dcWay == '할인율') {
-			html += '							<span> <span><em>'+coupon[i].dcPval+'%</em></span>';
+		if (item.dcWay == '할인율') {
+			html += '							<span> <span><em>'+item.dcPval+'%</em></span>';
 		}else{
-			html += '							<span><em>'+comma(coupon[i].dcPval)+'</em>원</span>'; 
+			html += '							<span><em>'+comma(item.dcPval)+'</em>원</span>'; 
 		}
-		
-		
 		html += '						</p>';
-		html += '						<p class="cp_condition">'+comma(coupon[i].buyLimitAmt)+'원 이상 구매 시 최대 ' +comma(coupon[i].maxDcAmt) +'원 할인';
-		if (coupon[i].custPubLimitQty != 0) {
-			html += '								<span>1인 최대 '+coupon[i].custPubLimitQty+'장</span>';	
+		html += '						<p class="cp_condition">'+comma(item.buyLimitAmt)+'원 이상 구매 시 최대 ' +comma(item.maxDcAmt)+'원 할인';
+		if (item.custPubLimitQty != 0) {
+			html += '								<span>1인 최대 '+item.custPubLimitQty+'장</span>';	
 		}
 		
 		html += '						</p>';
 		html += '					</div>';
-		if (coupon[i].couponStat == '쿠폰받기') {
-			html += '					<button type="button" id="coupon_" class="btn btn_dark btn_block btn_coupon_down" onclick="fnPlanCouponDown('+coupon[i].cpnId+')">';  /* btn_coupon_done */
+		if (item.couponStat == '쿠폰받기') {
+			html += '					<button type="button" id="coupon_" class="btn btn_dark btn_block btn_coupon_down" onclick="fnPlanCouponDown('+item.cpnId+')">';  /* btn_coupon_done */
 			html += '						<span>쿠폰받기</span>';								/* 받기완료  */
 			html += '					</button>';			
 		}else{
@@ -339,11 +336,11 @@ if(coupon != null || coupon != ''){
 			html += '					</button>';			
 		}
 		html += '				</div>';
-		html += '				<button type="button" class="btn_underline"	id="btn_cpinfo_pop" onclick="useInfoCoupon('+coupon[i].cpnId+')">';
+		html += '				<button type="button" class="btn_underline"	id="btn_cpinfo_pop" onclick="useInfoCoupon('+item.cpnId+')">';
 		html += '					<span>사용안내</span>';
 		html += '				</button>';
 		html += '			</li>';
-	}
+	});
 	html += '		</ul>';
 	html += '	</div>';
 	html += '	<div class="announce_txt inner">';
@@ -416,34 +413,34 @@ if(goods1 != null || goods1 != ''){
 			html += '    <div class="dp_listItems_cont">';
 			html += '        <ul>';
 			
-			for (var j = 0; j < goods1.length; j++) {
-				if (goods1[j].planContSq == template[i].planContSq) {
+			$.each(goods1, function(idx, item)  {
+				if (item.planContSq == template[i].planContSq) {
 					html += '            <li>';
 					html += '                <div class="dp_listItems">';
 					html += '                    <div class="dp_listItems_img">';
-					html += '                        <img src="'+ goodsView +'/'+goods1[j].sysImgNm +'" alt="">';
+					html += '                        <img src="'+ goodsView +'/'+item.sysImgNm +'" alt="">';
 					html += '                    </div>';
 					html += '                    <div class="dp_listItems_info">';
-					html += '                        <div class="dp_listItems_brand">'+goods1[j].brandKnm+'</div>';
-					html += '                        <div class="dp_listItems_name">'+goods1[j].goodsNm+'</div>';
+					html += '                        <div class="dp_listItems_brand">'+item.brandKnm+'</div>';
+					html += '                        <div class="dp_listItems_name">'+item.goodsNm+'</div>';
 					html += '                        <div class="dp_listItems_price">';
-					html += '                            <span class="price">'+comma(goods1[j].currPrice)+'</span>';
-					if (goods1[j].currPrice != goods1[j].listPrice) {
-						html += '                            <del>'+comma(goods1[j].listPrice)+'</del>';
-						html += '                            <span class="percent">'+Math.floor(goods1[j].dcRate)+'%</span>';
+					html += '                            <span class="price">'+comma(item.currPrice)+'</span>';
+					if (item.currPrice != item.listPrice) {
+						html += '                            <del>'+comma(item.listPrice)+'</del>';
+						html += '                            <span class="percent">'+Math.floor(item.dcRate)+'%</span>';
 					}
 					
 					html += '                        </div>';
 					//html += '                        <div class="itemComment">#주문 폭주 상품</div>';
 					html += '                        <div class="ui_row">';
-					html += '                            <button type="button" class="btn btn_default" onclick="location.href=\''+_mall+'/goods/detail/form?goodsCd='+goods1[j].goodsCd+'\'"><span>자세히 보기</span></button>';
+					html += '                            <button type="button" class="btn btn_default" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\'"><span>자세히 보기</span></button>';
 					html += '                        </div>';
 					html += '                    </div>';
 					html += '                </div>';
 					html += '            </li>';
 						
 				}
-			}
+			});
 			html += '        </ul>';
 			html += '    </div>';
 			html += '</div>';
@@ -483,21 +480,21 @@ if(goods2 != null || goods2 != ''){
 			html+='        <div class="swiper-container dp_lookbook_case2">';
 			html+='            <div class="swiper-wrapper ">';
 			
-	  	  for (var j = 0; j < goods2.length; j++) {
-				if (goods2[j].planContSq == template[i].planContSq) {
+			$.each(goods2, function(idx, item) {
+				if (item.planContSq == template[i].planContSq) {
 					html+='                <div class="swiper-slide">';
 					html+='                    <div class="item_prod">';
 					html+='                        <div class="item_state">';
-					html+='                            <a href="'+_mall+'/goods/detail/form?goodsCd='+goods2[j].goodsCd+'" class="itemLink">';
+					html+='                            <a onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\'" class="itemLink">';
 					html+='                                <div class="itemPic">';
-					html+='                                    <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ goodsView +'/'+goods2[j].sysImgNm +'">';
+					html+='                                    <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ goodsView +'/'+item.sysImgNm +'">';
 					html+='                                </div>';
-					html+='                                <p class="itemBrand">'+goods2[j].brandKnm+'</p>';
-					html+='                                <div class="itemName">'+goods2[j].goodsNm+'</div>';
-					html+='                               <p class="itemPrice">'+comma(goods2[j].currPrice);
-					if (goods2[j].currPrice != goods2[j].listPrice) {
-						html+='                                    <span class="itemPrice_original">'+comma(goods2[j].listPrice)+'</span>';
-						html+='                                    <span class=" itemPercent">'+Math.floor(goods2[j].dcRate)+'%</span>';
+					html+='                                <p class="itemBrand">'+item.brandKnm+'</p>';
+					html+='                                <div class="itemName">'+item.goodsNm+'</div>';
+					html+='                               <p class="itemPrice">'+comma(item.currPrice);
+					if (item.currPrice != item.listPrice) {
+						html+='                                    <span class="itemPrice_original">'+comma(item.listPrice)+'</span>';
+						html+='                                    <span class=" itemPercent">'+Math.floor(item.dcRate)+'%</span>';
 					}
 					
 					html+='                                </p>';
@@ -507,7 +504,7 @@ if(goods2 != null || goods2 != ''){
 					html+='                    </div>';
 					html+='                </div>                ';
 				}
-			} 
+			});
 		 
 			html+='            </div>';
 			html+='        </div>';

+ 54 - 26
src/main/webapp/WEB-INF/views/web/planning/PlanningEventMainFormWeb.html

@@ -64,38 +64,16 @@
 						</div>
 					</div>
 					<div class="area_top_list_info">
-						<div class="total_count">
-							<span th:text="${cnt}"></span>개의 이벤트
+						<div class="total_count" id="eventTotCnt">
+							<span ></span>개의 이벤트
 						</div>
 						<div class="ui_right">
 							<button class="btn btn_default" th:onclick="cfnGoToPage(_PAGE_NOTICE)"><span>당첨자 발표</span></button>
 						</div>
 					</div>
-					<div class="area_thumb_list">
-						<div  th:if="${cnt > 0}" class="thumb_list nodata">
-							<ul>
-								<th:block th:each="EventData, EventStat : ${evnetList}">
-								<li>
-									<a href="">
-										<th:block th:if="${EventData.newPlan != null}">
-										<div class="rank ranker"><span>NEW</span></div>
-										</th:block>
-										<div class="thumb">
-											<img th:src="${@environment.getProperty('domain.image')+'/planning/'+EventData.mainPimg}">
-										</div>
-										<div class="txt">
-											<p class="title" th:text="${EventData.planNm}"></p>
-											<p class="date">
-												<span th:text="${EventData.dispStdt}"></span> - <span th:text="${EventData.dispEddt}"></span>
-											</p>
-										</div>
-									</a>
-								</li>
-								</th:block>
-							</ul>	
-						</div>
+					<div class="area_thumb_list" id="divEventList" style="display:none;">
 						<!-- 등록된 이벤트가 없을 때 노출 -->
-						<div th:unless="${cnt > 0}" class="nodata">
+						<div class="nodata" id="divEventNoData" style="display:none;">
 							<div class="txt_box">
 								<p>
 									등록된 이벤트가 없습니다.
@@ -115,7 +93,57 @@
 	<!-- // container -->	
 
 <script th:inline="javascript">
+/*<![CDATA[*/
+let fnGetEventList = function() {
+	let actionUrl = '/planning/event/main/list';
+	
+	$.getJSON(actionUrl
+		, function(result, status) {
+			if (status == 'success') {
+				if (result.length > 0) {
+					$('#eventTotCnt').html('<span>' + result.length.addComma() + '</span>개의 이벤트');
+					
+					$('#eventList').html('');
+					let tag = '';
+					tag += '<div  class="thumb_list">';
+					tag += '	<ul>';
+					$.each(result, function(idx, item) {
+						tag += '		<li>';
+						tag += '			<a href="">';
+						if (item.newYn == 'Y') {
+							tag += '				<div class="rank ranker"><span>NEW</span></div>\n';
+						}
+						tag += '				<div class="thumb">';
+						tag += '					<img src="' + _uploadImageUrl + item.mainImg + '" alt="">';
+						tag += '				</div>';
+						tag += '				<div class="txt">';
+						tag += '					<p class="title">'+item.planNm+'</p>';
+						tag += '					<p class="date">';
+						tag += '						<span>'+item.dispStdt+'</span> - <span>'+item.dispEddt+'</span>';
+						tag += '					</p>';
+						tag += '				</div>';
+						tag += '			</a>';
+						tag += '		</li>';
+					});
+					tag += '	</ul>	';
+					tag += '</div>';
+					
+					$('#divEventList').html(tag);
+					
+					$('#divEventNoData').hide();
+					$('#divEventList').show();
+				} else {
+					$('#divEventNoData').show();
+					$('#divEventList').hide();
+				}
+			}
+		});
+}
 
+$(document).ready(function() {
+	fnGetEventList();
+});
+/*]]>*/
 </script>
 
 </th:block>

+ 160 - 100
src/main/webapp/WEB-INF/views/web/planning/PlanningMainFormWeb.html

@@ -17,122 +17,182 @@
  *******************************************************************************
  -->
 <body>
+
 <th:block layout:fragment="content">
-<!--  container -->
+	<!--  container -->
 	<div id="container" class="container dp" th:with="frontUrl=${@environment.getProperty('domain.front')}, goodsView=${@environment.getProperty('upload.goods.view')}">
 		<div class="breadcrumb"> 
 			<ul>
 				<li class="bread_home"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);">홈</a></li>
-				<li class="bread_2depth"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_PLANNING_MAIN);">기획전</a></li>
-				<th:block th:if="${cateNo != null}">
-				<li class="bread_3depth"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_PLANNING_MAIN+'?cateNo='+[[${cateNo}]]);">[[${cateNm}]]</a></li>
-				</th:block>
+				<li class="bread_2depth">기획전</li>
 			</ul> 
 		</div>
 		<div class="wrap">
 			<div class="content dp_Exhibition"> <!-- 페이지특정 클래스 = dp_Exhibition -->
 				<div class="cont_head">
 					<div>
-                        <h3>기획전</h3>
-                    </div>
+						<h3>기획전</h3>
+					</div>
 				</div>
 				<div class="cont_body">
-                    <div class="taps">
-                        <div>
-                            <ul>
-                                 <li th:class="${cateNo == null ? 'active' : ''}"><a href="javascript:;" onclick="cfnGoToPage(_PAGE_PLANNING_MAIN);">전체</a></li>
-                            	 <th:block th:each="CategoryData, CategoryStat : ${categoryList}">
-                            	 <li th:class="${CategoryData.cate1No == cateNo ? 'active' : '' }" ><a href="javascript:;" th:onclick="|cfnGoToPage(_PAGE_PLANNING_MAIN+'?cateNo=*{CategoryData.cate1No}');|">[[${CategoryData.cate1Nm}]]</a></li>
-						    	</th:block>
-                            </ul>
-                        </div>
-                    </div>
-                    <div class="ui_row">
-                        <div class="ui_col_12">
-                            <div class="form_count">
-                                <p><span th:text="${planCount}"></span>개의 기획전</p>
-                            </div>
-                        </div>
-                    </div> 
-                    <div class="exhi_list"> <!-- 데이터 없을시 클래스 nodata 추가 -->
-                    	<th:block th:if="${planCount < 1}">
-                    	 <div class="list_content nodata">
-	                     	 <div class="list_defult">
-	                            <div>
-	                                <img src="/images/pc/ico_content_find.png" alt="">
-	                                <p>등록된 기획전이 없습니다.</p>
-	                            </div>
-	                            <div class="ui_row">
-	                                <button type="button" class="btn btn_default" onclick="cfnGoToPage(_PAGE_PLANNING_MAIN);"><span>홈으로 가기</span></button>
-	                            </div>
-	                        </div>
-                        </div>
-                       </th:block>
-                        <div class="itemsGrp" id="planListDiv">
-                       	  <th:block th:each="PlanData, PlanStat : ${planList}">
-                            <div class="exhi_item">
-                                <div class="exhi_item_img">
-                                    <a th:onclick="planDetailSearch([[${PlanData.planSq}]])">
-                                        <div class="shape ranker" th:if="${PlanData.newPlan != null}"><span>NEW</span></div>
-                                        <img th:src="${@environment.getProperty('domain.image')+'/planning/'+PlanData.mainPimg}"  alt=""> <!-- 430x430 사이즈 최적 -->
-                                        <div class="exhi_detail">
-                                            <p class="brand" th:if="${PlanData.cnt > 1}" th:text="${PlanData.brand}+' 외'"></p>
-                                            <p class="brand" th:unless="${PlanData.cnt > 1}" th:text="${PlanData.brand}"></p>
-                                            <h3 class="tit" th:text="${PlanData.planNm}"></h3>
-                                            <p class="sale" th:text="${PlanData.dtlTitle1}"></p>
-                                        </div>
-                                    </a>
-                                </div>
-                                <div class="exhi_item_pr">
-                                    <ul class="prod_list clear">
-                                     <th:block th:each="goodsList, k : ${goodsList}">
-                                      <th:block th:if="${PlanData.planSq} == ${goodsList.planSq} and ${goodsList.goodsCd} != null">
-                                        <li th:onclick="fnPlanDetailSearch([[${goodsList.goodsCd}]])">
-                                            <div class="item_prod">
-                                                <div class="item_state">
-                                                    <a href="javascript:void(0);" class="itemLink">
-                                                        <div class="itemPic">
-                                                            <img alt="" class="vLHTC pd_img" th:src="${goodsView + '/' + goodsList.sysImgNm}">
-                                                        </div>
-                                                        <div class="itemName" th:text="${goodsList.goodsNm}"></div>
-                                                        <p class="itemPrice" th:text="${#numbers.formatInteger(goodsList.currPrice, 0,'COMMA')} + '원'"></p>
-                                                    </a>
-                                                </div>
-                                            </div>
-                                        </li>
-                                       </th:block>
-                                     </th:block>
-                                   
-                                    </ul>
-                                </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-		    </div>
-        </div>
-    </div>
-	<!-- // container -->	
+					<div class="taps">
+						<div>
+							<ul>
+								<li th:class="${cateNo == null ? 'active' : ''}"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_PLANNING_MAIN);">전체</a></li>
+								<li th:each="oneData, stat : ${cateList}" th:class="${oneData.cateNo == cateNo ? 'active' : '' }" ><a href="javascript:void(0);" th:onclick="|cfnGoToPage(_PAGE_PLANNING_MAIN + '?cateNo=${oneData.cateNo}');|">[[${oneData.cateNm}]]</a></li>
+							</ul>
+						</div>
+					</div>
+					<div class="ui_row">
+						<div class="ui_col_12">
+							<div class="form_count">
+								<p id="planningTotCnt"></p>
+<!-- 								<p><span th:text="${planCount}"></span>개의 기획전</p> -->
+							</div>
+						</div>
+					</div>
+					<div class="list_content nodata" style="display: none;" id="divPlanningNoData"> <!-- 데이터 없을시 클래스 nodata 추가 -->
+						<div class="list_defult">
+							<div>
+								<img src="/images/pc/ico_content_find.png" alt=""/>
+								<p>등록된 기획전이 없습니다.</p>
+							</div>
+							<div class="ui_row">
+								<button type="button" class="btn btn_default" onclick="cfnGoToPage(_PAGE_MAIN);"><span>홈으로 가기</span></button>
+							</div>
+						</div>
+					</div>
+					<div class="exhi_list" style="display: none;" id="divPlanningList">
+						<!-- <div class="itemsGrp">
+							<div class="exhi_item">
+								<div class="exhi_item_img">
+									<a>
+										<div class="shape ranker"><span>NEW</span></div>
+										<img src="/images/pc/thumb/ev_list_img01.jpg" alt="">
+										<div class="exhi_detail">
+											<p class="brand">TBJ 외</p>
+											<h3 class="tit">ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션 ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션</h3>
+											<p class="sale">신상 15%쿠폰할인</p>
+										</div>
+									</a>
+								</div>
+								<div class="exhi_item_pr">
+									<ul class="prod_list clear">
+										<li>
+											<div class="item_prod">
+												<div class="item_state">
+													<a href="javascript:void(0);" class="itemLink">
+														<div class="itemPic">
+															<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/dp_slide_Item01.png">
+														</div>
+														<div class="itemName">남성 로고 자카드 방풍 패딩</div>
+														<p class="itemPrice">80,100</p>
+													</a>
+												</div>
+											</div>
+										</li>
+										<li>
+											<div class="item_prod">
+												<div class="item_state">
+													<a href="#none" class="itemLink">
+														<div class="itemPic">
+															<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg"/>
+														</div>
+														<div class="itemName">남성 로고 자카드 방풍 패딩</div>
+														<p class="itemPrice">80,100</p>
+													</a>
+												</div>
+											</div>
+										</li>
+									</ul>
+								</div>
+							</div>
+						</div> -->
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<!-- // container -->
+
 <script th:inline="javascript">
-function planDetailSearch(obj) {
-	var planSq = obj;
-	let data = {planSq : planSq};
-	var jsonData = JSON.stringify(data);
+/*<![CDATA[*/
+	let fnGetPlanningList = function(cateNo) {
+		let actionUrl = '/planning/main/list';
+		if (!gagajf.isNull(cateNo)) actionUrl += '?cateNo=' + cateNo;
+		
+		$.getJSON(actionUrl
+			, function(result, status) {
+				if (status == 'success') {
+					if (result.length > 0) {
+						$('#planningTotCnt').html('<span>' + result.length.addComma() + '</span>개의 기획전');
+						
+						$('#divPlanningList').html('');
+						
+						let tag = '<div class="itemsGrp">\n';
+						
+						$.each(result, function(idx, item) {
+							tag += '	<div class="exhi_item">\n';
+							tag += '		<div class="exhi_item_img">\n';
+							tag += '			<a>\n';
+							
+							if (item.newYn == 'Y') {
+								tag += '				<div class="shape ranker"><span>NEW</span></div>\n';
+							}
+							
+							tag += '				<img src="' + _uploadImageUrl + item.mainImg + '" alt="">\n';
+							tag += '				<div class="exhi_detail">\n';
+// 							tag += '					<p class="brand">TBJ 외</p>\n'; // 브랜드 검색조건 삭제에 따라 필요 없어 주석 처리
+							tag += '					<h3 class="tit">' + item.planNm + '</h3>\n';
+							tag += '					<p class="sale">' + item.dtlTitle1 + '</p>\n';
+							tag += '				</div>\n';
+							tag += '			</a>\n';
+							tag += '		</div>\n';
+							
+							if (item.planningGoodsList.length > 0) {
+								tag += '			<div class="exhi_item_pr">\n';
+	 							tag += '				<ul class="prod_list clear">\n';
 
-	
-	gagajf.ajaxJsonSubmit(
-			'/planning/access', jsonData,
-			function() {
-				cfnGoToPage(_PAGE_PLANNING_DETAIL + "?planSq=" + planSq);
+	 							$.each(item.planningGoodsList, function(idx2, goods) {
+		 							tag += '				<li>\n';
+		 							tag += '					<div class="item_prod">\n';
+		 							tag += '						<div class="item_state">\n';
+		 							tag += '							<a href="javascript:void(0);" class="itemLink" onclick="cfnGoToGoodsDetail(\'' + goods.goodsCd + '\');">\n';
+		 							tag += '								<div class="itemPic">\n';
+		 							tag += '									<img alt="" class="vLHTC pd_img" src="' + _uploadGoodsUrl + '/' + goods.sysImgNm + '">\n';
+		 							tag += '								</div>\n';
+		 							tag += '								<div class="itemName">' + goods.goodsNm + '</div>\n';
+		 							tag += '								<p class="itemPrice">' + goods.currPrice.addComma() + '</p>\n';
+		 							tag += '							</a>\n';
+		 							tag += '						</div>\n';
+		 							tag += '					</div>\n';
+		 							tag += '				</li>\n';
+								});
+		 						
+								tag += '			</ul>\n';
+		 						tag += '		</div>\n';
+							}
+							
+							tag += '	</div>\n';
+						});
+						
+						tag += '</div>\n';
+						$('#divPlanningList').html(tag);
+						
+						$('#divPlanningNoData').hide();
+						$('#divPlanningList').show();
+					} else {
+						$('#divPlanningNoData').show();
+						$('#divPlanningList').hide();
+					}
+				}
 			});
-
-}
-
-var fnPlanDetailSearch = function(obj) {
-	var goodsCd = obj;
-	cfnGoToPage(_PAGE_GOODS_DETAIL +  goodsCd);
-}
+	}
+	
+	$(document).ready(function() {
+		fnGetPlanningList([[${cateNo}]]);
+	});
+/*]]>*/
 </script>
 
 </th:block>

+ 1 - 1
src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html

@@ -42,7 +42,7 @@
                             <div class="item_prod" th:class="${SocialData.stockQtySum == 0 ? 'item_prod sold_out' : 'item_prod'}" > 
                                 <div class="item_state"> <!-- item_state AD soldout -->
                                     <button type="button" th:class="${SocialData.wishYn == 'Y'}? 'itemLike active' : 'itemLike'" onclick="cfnPutWishList(this);" th:attr="goodsCd=${SocialData.goodsCd}, ithrCd='', contentsLoc='', planDtlSq=''">관심상품 추가</button>
-                                    <a href="#none" class="itemLink">
+                                    <a href="#none" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${SocialData.goodsCd}]])">
                                         <div class="itemPic">
                                             <img alt="BLUE-a" class=" vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + SocialData.sysImgNm}">
                                         </div>

BIN
src/main/webapp/images/ico_inspect_err.png


BIN
src/main/webapp/images/ico_logo_err.png


BIN
src/main/webapp/images/ico_page_err.png


BIN
src/main/webapp/images/mo/arrow_npay.png


BIN
src/main/webapp/images/mo/btn_npay_txt.png


BIN
src/main/webapp/images/mo/goApp.png


BIN
src/main/webapp/images/mo/ico_admin.png


BIN
src/main/webapp/images/mo/ico_besttag.png


BIN
src/main/webapp/images/mo/ico_besttag2.png


BIN
src/main/webapp/images/mo/ico_big_check.png


BIN
src/main/webapp/images/mo/ico_branb_home.png


BIN
src/main/webapp/images/mo/ico_brandhome_arrow.png


BIN
src/main/webapp/images/mo/ico_btn_dealopen.png


BIN
src/main/webapp/images/mo/ico_complete_check.png


BIN
src/main/webapp/images/mo/ico_count.png


BIN
src/main/webapp/images/mo/ico_cp_down.png


BIN
src/main/webapp/images/mo/ico_itemdelete_btn.png


BIN
src/main/webapp/images/mo/ico_mb_arrow2.png


BIN
src/main/webapp/images/mo/ico_plus_white.png


BIN
src/main/webapp/images/mo/ico_point3.png


BIN
src/main/webapp/images/mo/ico_point3_black.png


BIN
src/main/webapp/images/mo/ico_point4.png


BIN
src/main/webapp/images/mo/ico_point4_black.png


BIN
src/main/webapp/images/mo/ico_secret.png


BIN
src/main/webapp/images/mo/ico_share.png


BIN
src/main/webapp/images/mo/ico_timer2.png


BIN
src/main/webapp/images/mo/img_mb_join_done.jpg


BIN
src/main/webapp/images/mo/img_npay_txt.png


BIN
src/main/webapp/images/mo/logo_STYLE24_white.png


BIN
src/main/webapp/images/mo/star_empty.png


BIN
src/main/webapp/images/mo/star_empty_big.png


BIN
src/main/webapp/images/mo/star_empty_big_only.png


BIN
src/main/webapp/images/mo/thumb/bnn_1stage.jpg


BIN
src/main/webapp/images/mo/thumb/bnn_1stage02.jpg


BIN
src/main/webapp/images/mo/thumb/bnn_2stage1.jpg


BIN
src/main/webapp/images/mo/thumb/bnn_2stage2.jpg


BIN
src/main/webapp/images/mo/thumb/br_main03.png


BIN
src/main/webapp/images/mo/thumb/dp_slide_Item01.png


BIN
src/main/webapp/images/mo/thumb/main_itItems01.jpg


BIN
src/main/webapp/images/mo/thumb/main_itItems02.jpg


BIN
src/main/webapp/images/mo/thumb/main_itItems03.jpg


BIN
src/main/webapp/images/mo/thumb/main_itItems04.jpg


BIN
src/main/webapp/images/mo/thumb/main_pickImg01.jpg


BIN
src/main/webapp/images/mo/thumb/main_pickImg02.jpg


BIN
src/main/webapp/images/mo/thumb/main_pickImg03.jpg


Некоторые файлы не были показаны из-за большого количества измененных файлов