Sfoglia il codice sorgente

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

card007 5 anni fa
parent
commit
9bf39b10d0
24 ha cambiato i file con 1082 aggiunte e 40 eliminazioni
  1. 10 0
      src/main/java/com/style24/front/biz/dao/TsfCustomerDao.java
  2. 1 0
      src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java
  3. 9 0
      src/main/java/com/style24/front/biz/dao/TsfReviewDao.java
  4. 6 1
      src/main/java/com/style24/front/biz/service/TsfCustomerService.java
  5. 23 0
      src/main/java/com/style24/front/biz/service/TsfDisplayService.java
  6. 11 1
      src/main/java/com/style24/front/biz/service/TsfReviewService.java
  7. 2 8
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  8. 10 4
      src/main/java/com/style24/front/support/config/TsfRedisSessionConfig.java
  9. 24 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfCustomer.xml
  10. 1 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfGiftcard.xml
  11. 198 4
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  12. 11 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  13. 375 0
      src/main/webapp/WEB-INF/views/mob/display/BestMainFormMob.html
  14. 42 2
      src/main/webapp/WEB-INF/views/mob/display/BrandMainFormMob.html
  15. 171 0
      src/main/webapp/WEB-INF/views/mob/display/CategoryMainFormMob.html
  16. 170 0
      src/main/webapp/WEB-INF/views/mob/display/OutletMainFormMob.html
  17. 4 4
      src/main/webapp/WEB-INF/views/web/display/BestMainFormWeb.html
  18. 2 2
      src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html
  19. 1 1
      src/main/webapp/WEB-INF/views/web/display/OutletMainFormWeb.html
  20. 1 4
      src/main/webapp/WEB-INF/views/web/mypage/MypagePointFormWeb.html
  21. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html
  22. 4 3
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewDetailFormWeb.html
  23. 0 1
      src/main/webapp/WEB-INF/views/web/planning/PlanningEventPollFormWeb.html
  24. 5 3
      src/main/webapp/WEB-INF/views/web/planning/PlanningShotGuideFormWeb.html

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

@@ -169,5 +169,15 @@ public interface TsfCustomerDao {
 	 */
 	CustGrade getExpectedCustGrde(CustGrade custGrade);
 
+	/**
+	 * 고객 생년월일 저장
+	 *
+	 * @param customer - 고객번호, 생년월일
+	 * @return int - 결과
+	 * @author jsshin
+	 * @since 2021. 05. 10
+	 */
+	int saveBatchBirth(Customer customer);
+
 
 }

+ 1 - 0
src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java

@@ -401,4 +401,5 @@ public interface TsfGoodsDao {
 	 */
 	Collection<SearchEngine> getSearchGoodsList(SearchEngine params);
 
+	int getContentsCategoryGoodsCount(Cate4Srch cate4Srch);
 }

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

@@ -225,6 +225,15 @@ public interface TsfReviewDao {
 	 */
 	void createReviewPointHst(Point point);
 	
+	/**
+	 * 마이페이지 CONFIRM_YN 업데이트
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 5. 10
+	 */
+	void updateMypageReviewConfimYn(Review review);
+	
 
 
 	

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

@@ -267,6 +267,7 @@ public class TsfCustomerService {
 		customer.setCustGrade(TscConstants.CustGrade.WELCOME.value());
 
 		int custCnt = customerDao.createCustomer(customer);
+		customerDao.saveBatchBirth(customer);
 
 		if (custCnt > 0) {
 			saveJoinPostProcessing(customer);
@@ -302,6 +303,7 @@ public class TsfCustomerService {
 
 		int custCnt = customerDao.createCustomer(customer);
 		customerDao.createCustomerSns(customer);
+		customerDao.saveBatchBirth(customer);
 
 		if (custCnt > 0) {
 			saveJoinPostProcessing(customer);
@@ -707,6 +709,8 @@ public class TsfCustomerService {
 		coreCustomerService.createCustomerHistory(customer);
 		// 2.CI 업데이트
 		int resultCnt = customerDao.updateCustomerCi(customer);
+		customerDao.saveBatchBirth(customer);
+
 		if (resultCnt > 0) {
 			isSuccess = true;
 		}
@@ -784,8 +788,9 @@ public class TsfCustomerService {
 		// 1. 이력쌓고
 		coreCustomerService.createCustomerHistory(customer);
 
-		// 2. 이름, 휴대전화 번호 저장
+		// 2. 이름, 휴대전화 번호, 생년월일 저장
 		int updateCnt = customerDao.updateCustomerAuth(customer);
+		customerDao.saveBatchBirth(customer);
 
 		boolean isSuccess = updateCnt > 0; // 변경 성공시 true
 

+ 23 - 0
src/main/java/com/style24/front/biz/service/TsfDisplayService.java

@@ -462,6 +462,8 @@ public class TsfDisplayService {
 		cate4Srch.setSiteCd(TscConstants.Site.STYLE24.value());
 		cate4Srch.setCateGb("G032_101");
 
+		log.info("getBestItemCategoryGoodsList cate4Srch:::::::::{}",cate4Srch);
+
 		Collection<Goods> goodsList = goodsDao.getContentsCategoryGoodsList(cate4Srch);
 
 		if (goodsList.size() < 100) {
@@ -651,4 +653,25 @@ public class TsfDisplayService {
 		return cate1List;
 	}
 
+	public int getContentsCategoryGoodsCount(Contents contents) {
+		Cate4Srch cate4Srch = new Cate4Srch();
+		// 로그인 유무 확인 (로그인이 되어 있지 않으면 regNo 를 0으로 장바구니에 저장한다.)
+		Login login = new Login();
+		if (TsfSession.isLogin()) {
+			login = TsfSession.getInfo();
+		} else {
+			login.setCustNo(0);
+		}
+
+		cate4Srch.setCustNo(login.getCustNo());
+		cate4Srch.setPageGb(contents.getPageGb());
+		cate4Srch.setContentsLoc(contents.getContentsLoc());
+		cate4Srch.setMaxRow(100);
+		cate4Srch.setCustNo(TsfSession.isLogin() ? TsfSession.getInfo().getCustNo() : 0);
+		cate4Srch.setCate1No(contents.getCateNo());
+		cate4Srch.setSiteCd(TscConstants.Site.STYLE24.value());
+		cate4Srch.setCateGb("G032_101");
+		return goodsDao.getContentsCategoryGoodsCount(cate4Srch);
+	}
+
 }

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

@@ -172,6 +172,7 @@ public class TsfReviewService {
 	public void saveMypageReview(Review review) {
 		review.setDispYn("Y");
 		review.setDelYn("N");
+		review.setConfirmYn("Y");
 		review.setRegNo(TsfSession.getInfo().getCustNo());
 		review.setUpdNo(TsfSession.getInfo().getCustNo());
 		if (review.getKufKeyArr() == null && review.getOrgFileNmArr() == null) {
@@ -181,10 +182,12 @@ public class TsfReviewService {
 		}else {
 			review.setPntGiveStat("G043_10");
 		}
+		
 		reviewDao.saveMypageReview(review);
 		
 		//이미지등록
 		if(review.getOrgFileNmArr() != null) {
+			review.setConfirmYn("Y");
 			ReviewAttach fileReview = new ReviewAttach();
 			fileReview.setRegNo(TsfSession.getInfo().getCustNo());
 			fileReview.setUpdNo(TsfSession.getInfo().getCustNo());
@@ -220,6 +223,7 @@ public class TsfReviewService {
 		}
 		
 		if(review.getKufKeyArr() != null) {
+			review.setConfirmYn("N");
 			ReviewAttach fileReview = new ReviewAttach();
 			fileReview.setRegNo(TsfSession.getInfo().getCustNo());
 			fileReview.setUpdNo(TsfSession.getInfo().getCustNo());
@@ -255,6 +259,7 @@ public class TsfReviewService {
 				point.setReviewSq(review.getReviewSq());
 				reviewDao.createReviewPointHst(point);
 			}else if(review.getKufKeyArr() == null && review.getOrgFileNmArr() != null) {
+				
 				// 상품평 + 사진
 				point.setCustNo(TsfSession.getInfo().getCustNo());
 				point.setGvPntAmt(photoReviewPnt);
@@ -264,9 +269,14 @@ public class TsfReviewService {
 				point.setReviewSq(review.getReviewSq());
 				reviewDao.createReviewPointHst(point);
 			}
-			
 		}
+		
+		if (review.getConfirmYn()=="Y") {
+			reviewDao.updateMypageReviewConfimYn(review);
+		}
+		
 	}
+		
 	
 	/**
 	 * 마이페이지 리뷰 업데이트

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

@@ -747,20 +747,14 @@ public class TsfDisplayController extends TsfBaseController {
 
 		contents.setContentsLoc("SCM003");
 		contents.setPageGb("BEST");
-		MainLayout mainLayout = new MainLayout();
-		mainLayout.setGoodsList(displayService.getBestItemCategoryGoodsList(contents));
-		int totalCnt = mainLayout.getGoodsList().size();
-		if (totalCnt > 100) {
-			totalCnt = 100;
-		}
+
+		int totalCnt = displayService.getContentsCategoryGoodsCount(contents);
 		pageable.setTotalCount(totalCnt);
 		contents.setPageable(pageable);
 
 		result.set("paging", contents);
 		result.set("totalCnt", totalCnt);
 		result.set("endRow", pageable.getEndRow());
-		contents.setContentsLoc("SCM003");
-		contents.setPageGb("BEST");
 		result.set("dataList", displayService.getBestItemCategoryGoodsList(contents));
 		return result;
 	}

+ 10 - 4
src/main/java/com/style24/front/support/config/TsfRedisSessionConfig.java

@@ -1,8 +1,10 @@
 package com.style24.front.support.config;
 
 import org.springframework.beans.factory.BeanClassLoaderAware;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
 import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
 import org.springframework.data.redis.serializer.RedisSerializer;
 import org.springframework.security.jackson2.SecurityJackson2Modules;
@@ -34,6 +36,9 @@ public class TsfRedisSessionConfig extends AbstractHttpSessionApplicationInitial
 
 	private ClassLoader classLoader;
 
+	@Autowired
+	private Environment env;
+
 	@Override
 	public void setBeanClassLoader(ClassLoader classLoader) {
 		this.classLoader = classLoader;
@@ -86,12 +91,13 @@ public class TsfRedisSessionConfig extends AbstractHttpSessionApplicationInitial
 		DefaultCookieSerializer serializer = new DefaultCookieSerializer();
 		serializer.setCookiePath("/");
 		serializer.setUseBase64Encoding(false);
-//		serializer.setSameSite("NONE");
+		String active = env.getProperty("spring.profiles.active");
 		// TODO : SSL 적용 후 주석 풀고 테스트 해야함 2021-04-13
 		// SSL인증서 적용 시 주석 제거
-//		serializer.setUseSecureCookie(true);
-//		serializer.setSameSite("NONE");
-
+		if ("run".equals(active)) {
+			serializer.setUseSecureCookie(true);
+			serializer.setSameSite("NONE");
+		}
 		return serializer;
 	}
 

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

@@ -631,4 +631,28 @@
 		OR    B.SUM_REAL_ORD_AMT >= #{minBuyAmt}
 	</select>
 
+	<!--배치 생년월일 -->
+	<insert id="saveBatchBirth" parameterType="Customer">
+		/*TsfCustomer.saveBatchBirth*/
+		INSERT INTO TB_BATCH_BIRTH (
+		       CUST_NO
+		     , BIRTH_YMD
+		     , REG_DT
+		     , REG_NO
+		     , UPD_DT
+		     , UPD_NO
+		) VALUES (
+		       #{custNo}
+		     , #{birthYmd}
+		     , NOW()
+		     , #{custNo}
+		     , NOW()
+		     , #{custNo}
+		)
+		ON DUPLICATE KEY UPDATE
+		       BIRTH_YMD = #{birthYmd}
+		    ,  UPD_DT = NOW()
+		    ,  UPD_NO = #{updNo}
+	</insert>
+
 </mapper>

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

@@ -47,6 +47,7 @@
 													ON B.GOODS_CD = D.GOODS_CD 
 		WHERE 1=1
 		 AND A.CUST_NO = #{custNo}
+		 AND A.GFCD_AMT != 0
 		 <choose>
 		 	<when test="monthLength > 1">
 		 		AND DATE_FORMAT(A.REG_DT,'%Y%m') = #{searchDt}

+ 198 - 4
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -1344,9 +1344,16 @@
 	                        AND    C4.SITE_CD = #{siteCd}
 	                        AND    C4.CATE_GB = #{cateGb}
 	                        AND    C4.CATE_TYPE = 'G031_20' /*컨텐츠카테고리*/
-	                        <if test="pageGb == null or pageGb != 'BEST'">
-		                    AND    C4.CATE1_NO = #{cate1No}
-		                    </if>
+		                    <choose>
+		                        <when test="pageGb != null and pageGb == 'BEST'">
+		                            <if test="cate1No != null and cate1No != ''">
+		                            AND    C4.CATE1_NO = #{cate1No}
+		                            </if>
+		                        </when>
+		                        <otherwise>
+		                        AND    C4.CATE1_NO = #{cate1No}
+		                        </otherwise>
+		                    </choose>
 		                    AND    C4.CONTENTS_LOC = #{contentsLoc}
 		              </otherwise>
 		           </choose>
@@ -1362,7 +1369,14 @@
 		           ) G
 		    WHERE  1=1
 		<if test="pageable != null and pageable.endRow != null and pageable.endRow > 0">
-			AND  G.NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
+		    <choose>
+		        <when test="pageGb == 'BEST' and pageable.endRow >= 100">
+		    AND  G.NUMB BETWEEN #{pageable.startRow} AND 100
+		        </when>
+		        <otherwise>
+		    AND  G.NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
+		        </otherwise>
+		    </choose>
 		</if>
 		<if test="maxRow != null and maxRow !=''">
 			AND  G.NUMB <![CDATA[<=]]> #{maxRow}
@@ -1460,6 +1474,186 @@
 		                             AND W.CUST_NO = #{custNo}
 		</if>
 	</select>
+
+	<!-- 컨텐츠카테고리상품 건수 -->
+	<select id="getContentsCategoryGoodsCount"  parameterType="Cate4Srch" resultType="int">
+		/* TsfGoods.getContentsCategoryGoodsCount */
+		WITH TAB_GOODS 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         /*현재판매가*/
+		           , G.REG_DT             /*등록일시*/
+		           , G.NUMB
+		           FROM   (
+		                    SELECT 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                                             /*현재판매가*/
+		                    , G.REG_DT                                                 /*등록일시*/
+		             <choose>
+		             	<when test="contentsLoc == 'SCM002'"> <!-- 베스트 -->
+		             		, ROW_NUMBER() OVER(ORDER BY GS.SELL_WEEK_QTY DESC
+		             		, G.GOODS_CD) AS NUMB
+		             	</when>
+		             	<when test="contentsLoc == 'SMM009' or contentsLoc == 'SMM007' or contentsLoc == 'SMM012'"> <!-- md추천 -->
+		             		, ROW_NUMBER() OVER(ORDER BY CTG.DISP_ORD
+		             		, G.REG_DT DESC
+		             		, G.GOODS_CD) AS NUMB
+		             	</when>
+		             	<when test="contentsLoc == 'SCM002' or (contentsLoc == 'SCM003' and pageGb == null)"> <!-- md추천 -->
+		             		, ROW_NUMBER() OVER(ORDER BY CG.DISP_ORD ,G.UPD_DT DESC, G.CURR_PRICE DESC, G.GOODS_CD ASC) AS NUMB
+		             	</when>
+		             	<when test="contentsLoc == 'SCM003' and pageGb != null and pageGb == 'BEST'">
+		             		, ROW_NUMBER() OVER(ORDER BY C4.CATE1_NO, CG.DISP_ORD ,G.UPD_DT DESC, G.CURR_PRICE DESC, G.GOODS_CD ASC) AS NUMB
+		             	</when>
+		             	<otherwise>
+		             		, ROW_NUMBER() OVER(ORDER BY CG.DISP_ORD
+		             		, G.REG_DT DESC
+		             		, G.GOODS_CD) AS NUMB
+		             	</otherwise>
+		             </choose>
+		<choose>
+		        	<when test="contentsLoc == 'SMM009' or contentsLoc == 'SMM007' or contentsLoc == 'SMM012'"> <!-- md추천 -->
+		        		FROM	TB_CONTENTS CT
+		        		, TMP_CONTENTS_GOODS CTG
+		        		, TB_GOODS G
+		        		, TB_GOODS_STOCK S
+		        		, TB_BRAND B
+		        		, TB_BRAND_GROUP BG
+		        		WHERE	CT.CONTENTS_LOC = CTG.CONTENTS_LOC
+		        		AND 	CT.DISP_ORD = CTG.CONTENTS_SQ
+		        		AND		CTG.GOODS_CD = G.GOODS_CD
+		        		AND		CTG.GOODS_CD = S.GOODS_CD
+		        		AND		G.BRAND_CD = B.BRAND_CD
+		        		AND     B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		        		AND		CT.CONTENTS_LOC = #{contentsLoc}
+		        		AND 	CTG.CONTENTS_SQ = #{dispOrd}
+		        		AND		NOW() BETWEEN CT.DISP_STDT AND CT.DISP_EDDT
+		        	</when>
+		        	<otherwise>
+		        		FROM   TB_CATE_4SRCH C4
+		        		, TB_CATE_GOODS CG
+		        		, TB_GOODS G
+		        		, TB_GOODS_STOCK S
+		        		, TB_BRAND B
+		        		, TB_BRAND_GROUP BG
+		        		<if test="contentsLoc == 'SCM002'"> <!-- 베스트 -->
+		        			, TB_GOODS_SUMMARY GS
+		        		</if>
+		        		WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
+		        		<choose>
+		        			<when test="brandGroupNo != null and brandGroupNo != ''">
+		        				AND    CG.BRAND_GROUP_NO = #{brandGroupNo}</when>
+		        			<otherwise>
+		        				AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
+		        			</otherwise>
+		        		</choose>
+		        		AND    CG.GOODS_CD = G.GOODS_CD
+		        		AND    CG.GOODS_CD = S.GOODS_CD
+		        		AND    G.BRAND_CD = B.BRAND_CD
+		        		AND    B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		        		<if test="contentsLoc == 'SCM002'"> <!-- 베스트 -->
+		        			AND    CG.GOODS_CD = GS.GOODS_CD
+		        		</if>
+		        		AND    C4.SITE_CD = #{siteCd}
+		        		AND    C4.CATE_GB = #{cateGb}
+		        		AND    C4.CATE_TYPE = 'G031_20' /*컨텐츠카테고리*/
+		        		<choose>
+		        			<when test="pageGb != null and pageGb == 'BEST'">
+		        				<if test="cate1No != null and cate1No != ''">
+		        					AND    C4.CATE1_NO = #{cate1No}
+		        				</if>
+		        			</when>
+		        			<otherwise>
+		        				AND    C4.CATE1_NO = #{cate1No}
+		        			</otherwise>
+		        		</choose>
+		        		AND    C4.CONTENTS_LOC = #{contentsLoc}
+		        	</otherwise>
+		        </choose>
+		        AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		        AND    G.SELF_MALL_YN = 'Y'   /*몰노출상품*/
+		        AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT   /*판매기간*/
+		        AND    S.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
+		        AND    B.USE_YN = 'Y'
+		        AND    BG.USE_YN = 'Y'
+		        <if test="pageGb != null and pageGb == 'BEST'">
+		        	ORDER BY C4.CATE1_NO
+		        </if>
+		        ) G
+		    WHERE  1=1
+		    <if test="pageable != null and pageable.endRow != null and pageable.endRow > 0">
+		    	AND  G.NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
+		    </if>
+		    <if test="maxRow != null and maxRow !=''">
+		    	AND  G.NUMB <![CDATA[<=]]> #{maxRow}
+		    </if>
+		    )
+		    , TAB_GOODS_IMG AS (
+		         /* 상품의 이미지 */
+		         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 (
+		        /* 상품의 동영상 목록 */
+		        SELECT GOODS_CD
+		        , MAX(CASE WHEN RNUM = 1 THEN VIDEO_GB END)  AS VIDEO_GB_M
+		        , MAX(CASE WHEN RNUM = 1 THEN KMC_KEY END) AS VIDEO_VAL_M
+		        , MAX(CASE WHEN RNUM = 2 THEN VIDEO_GB END)  AS VIDEO_GB_S
+		        , MAX(CASE WHEN RNUM = 2 THEN KMC_KEY END) AS VIDEO_VAL_S
+		        FROM   (
+		             SELECT G.GOODS_CD
+		             , VD.VIDEO_GB
+		             , VD.KMC_KEY
+		             , VD.REG_DT
+		             , RANK() OVER(PARTITION BY G.GOODS_CD ORDER BY VD.REG_DT) AS RNUM
+		             FROM   TAB_GOODS G
+		             , TB_GOODS_VIDEO VD
+		             WHERE  G.GOODS_CD = VD.GOODS_CD
+		             AND    VD.DISP_YN = 'Y'
+		             AND    VD.KMC_KEY IS NOT NULL
+		        ) Z
+		    GROUP  BY GOODS_CD
+		)
+		SELECT COUNT(1) AS CNT
+		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
+			AND W.CUST_NO = #{custNo}
+		</if>
+	</select>
 	
 	<!-- 컨텐츠카테고리 신규상품 목록 -->
 	<select id="getContentsCategoryNewGoodsList"  parameterType="Cate4Srch" resultType="Goods">

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

@@ -840,6 +840,14 @@
 		AND   GOODS_CD   = #{goodsCd}
 	</update>
 	
+	<update id="updateMypageReviewConfimYn" parameterType="Review">
+		/* TsfReivew.updateMypageReviewConfimYn */
+		UPDATE TB_REVIEW
+		SET CONFIRM_YN = 'N'
+		   ,CONFIRM_DT = NOW()
+		WHERE REVIEW_SQ  = #{reviewSq}
+	</update>
+	
 	
 	
 	
@@ -884,6 +892,7 @@
 				AND O.PAY_DT >  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL -90 DAY), '%Y%M%D%H%I%S')
 				AND O.CUST_NO = #{custNo}
 				AND O.DISP_YN = 'Y'
+				AND R.CONFIRM_YN = 'Y'
  				AND O.SITE_CD = #{siteCd}
 			GROUP BY O.ORD_NO 
 			      ,O.ORD_NM 
@@ -1112,6 +1121,7 @@
 		   AND O.PAY_DT >  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL  #{reviewExpireDay} DAY), '%Y%M%D%H%I%S') 
 		   AND O.CUST_NO =  #{custNo}
 		   AND O.DISP_YN = 'Y'
+		   AND R.CONFIRM_YN = 'Y'
 		   AND O.SITE_CD =  #{siteCd}
 		   	) Z
 		 GROUP BY Z.ORD_NO, Z.ORD_DT, Z.DELV_EDDT, Z.ORD_DTL_NO, Z.ORD_EXCH_GB
@@ -1176,7 +1186,7 @@
 		 AND RA.DEL_YN = 'N'
 		 AND (RA.FILE_GB  = 'I'
 		      OR
-		      RA.FILE_GB = 'M' AND R.CONFIRM_YN = 'Y'  AND  RA.KMC_KEY IS NOT NULL
+		      RA.FILE_GB = 'M' AND R.CONFIRM_YN = 'Y'  AND  NULLIF(RA.KMC_KEY,'') IS NOT NULL
 		     )
 	</select>
 	

+ 375 - 0
src/main/webapp/WEB-INF/views/mob/display/BestMainFormMob.html

@@ -0,0 +1,375 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="mob/common/layout/DefaultLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : BestMainFormMob.html
+ * @desc    : 베스트메인 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.10   bin2107     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<main role="" id="" class="container dp">
+
+		<section class="content dp_best">
+			<div class="inner wide">
+				<div class="category_nav">
+					<ul id="cateListArea">
+						<li><button type="button" class="active" id="li0" onclick="fnBestListSearch(this,'');">전체</button></li>
+						<th:block th:each="item, stat : ${bestCateList}">
+							<li class="" th:id="${'li'+item.cateNo}"><button type="button" th:onclick="fnBestListSearch(this,[[${item.cateNo}]]);" th:text="${item.cateNm}">여성</button></li>
+						</th:block>
+					</ul>
+				</div>
+			</div>
+			<div class="inner bg_gray">
+				<div class="view_item">
+					<div class="count_wrap">
+						<div>
+							<p>지금 많이 <span>보고 있어요</span></p>
+						</div>
+						<div>
+							<ul class="dp_util">
+								<li><a href="#none" class="refresh">17:30 기준</a></li>
+							</ul>
+						</div>
+					</div>
+					<div class="swiper-container item_list">
+						<div class="swiper-wrapper">
+							<div class="swiper-slide">
+								<div class="item_prod">
+									<div class="item_state">
+										<a href="#none" class="itemLink">
+											<div class="itemPic">
+												<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/mo/thumb/prod3.jpg">
+											</div>
+											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+											<div class="viewComment">508명 보는중</div>
+										</a>
+									</div>
+								</div>
+							</div>
+							<div class="swiper-slide">
+								<div class="item_prod">
+									<div class="item_state">
+										<a href="#none" class="itemLink">
+											<div class="itemPic">
+												<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/mo/thumb/prod3.jpg">
+											</div>
+											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+											<div class="viewComment">320명 보는중</div>
+										</a>
+									</div>
+								</div>
+							</div>
+							<div class="swiper-slide">
+								<div class="item_prod">
+									<div class="item_state">
+										<a href="#none" class="itemLink">
+											<div class="itemPic">
+												<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/mo/thumb/prod3.jpg">
+											</div>
+											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+											<div class="viewComment">1500명 보는중</div>
+										</a>
+									</div>
+								</div>
+							</div>
+							<div class="swiper-slide">
+								<div class="item_prod">
+									<div class="item_state">
+										<a href="#none" class="itemLink">
+											<div class="itemPic">
+												<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/mo/thumb/prod3.jpg">
+											</div>
+											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+											<div class="viewComment">508명 보는중</div>
+										</a>
+									</div>
+								</div>
+							</div>
+							<div class="swiper-slide">
+								<div class="item_prod">
+									<div class="item_state">
+										<a href="#none" class="itemLink">
+											<div class="itemPic">
+												<img alt="BLACK-a" class=" vLHTC pd_img" src="/images/mo/thumb/prod3.jpg">
+											</div>
+											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+											<div class="viewComment">508명 보는중</div>
+										</a>
+									</div>
+								</div>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+
+			<div class="inner">
+				<div class="best_item">
+					<h2 class="dp_subtitle">베스트 TOP 100</h2>
+					<div class="item_list">
+						<div class="count_wrap">
+							<ul class="dp_util">
+								<li>
+									<div class="open_categori sex">
+										<a id="filter">구매 성별 전체
+											<!--<option value="hide">구매 성별 전체</option>
+                                            <option value="Test_SELECT_OPTION_1" rel="icon-temperature">구매 성별 전체1</option>
+                                            <option value="Test_SELECT_OPTION_2">구매 성별 전체2</option>
+                                            <option value="Test_SELECT_OPTION_3">구매 성별 전체3</option>-->
+										</a>
+									</div>
+								</li>
+								<li>
+									<div class="open_categori age">
+										<a id="filter">구매 연령 전체
+											<!--<option value="hide">구매 연령전체</option>
+                                            <option value="Test_SELECT_OPTION_1" rel="icon-temperature">구매 연령전체1</option>
+                                            <option value="Test_SELECT_OPTION_2">구매 연령전체2</option>
+                                            <option value="Test_SELECT_OPTION_3">구매 연령전체3</option>-->
+										</a>
+									</div>
+								</li>
+							</ul>
+						</div>
+
+						<div id="infiniteContainer">
+							<div id="listBoxOuter" class="itemsGrp">
+								<ul class="productlist quarter" >
+								</ul>
+							</div>
+						</div>
+
+						<div class="list_content">
+							<div class="itemsGrp" id="listBox">
+							</div>
+						</div>
+
+
+						<div class="list_last" id="divLastPage" style="display: none;">마지막페이지 입니다.</div>
+					</div>
+				</div>
+			</div>
+		</section>
+
+		<!-- 카테고리 -->
+		<div class="category_box">
+			<div class="lap">
+				<div class="category_close">카테고리닫기</div>
+				<div class="category_list">
+					<!-- 카테고리 선택 -->
+					<div class="selcet_list">
+						<ul>
+							<li class="active"><a href="javascript:void(0)">구매성별 전체</a></li>
+							<li><a href="javascript:void(0)">구매성별1</a></li>
+							<li><a href="javascript:void(0)">구매성별2</a></li>
+							<li><a href="javascript:void(0)">구매성별3</a></li>
+							<li><a href="javascript:void(0)">구매성별4</a></li>
+						</ul>
+					</div>
+					<!-- //카테고리 선택 -->
+				</div>
+			</div>
+		</div>
+		<!-- //카테고리 -->
+
+		<!-- 210415_최신상품순 리스트 팝업 추가 -->
+		<div id="odDatePop1" class="popup_box odDatePop">
+			<div class="lap">
+				<div class="popup_close">카테고리닫기</div>
+				<div class="popup_head sr-only">
+					<h2 class="">기간 선택 팝업</h2>
+				</div>
+				<div class="popup_con">
+					<div class="button_list clear">
+						<button type="button" class="on"><span>구매성별 전체</span></button>
+						<button type="button"><span>구매성별1</span></button>
+						<button type="button"><span>구매성별2</span></button>
+						<button type="button"><span>구매성별3</span></button>
+						<button type="button"><span>구매성별4</span></button>
+					</div>
+				</div>
+			</div>
+		</div>
+		<div id="odDatePop2" class="popup_box odDatePop">
+			<div class="lap">
+				<div class="popup_close">카테고리닫기</div>
+				<div class="popup_head sr-only">
+					<h2 class="">기간 선택 팝업</h2>
+				</div>
+				<div class="popup_con">
+					<div class="button_list clear">
+						<button type="button" class="on"><span>구매연령 전체</span></button>
+						<button type="button"><span>구매연령1</span></button>
+						<button type="button"><span>구매연령2</span></button>
+						<button type="button"><span>구매연령3</span></button>
+						<button type="button"><span>구매연령4</span></button>
+					</div>
+				</div>
+			</div>
+		</div>
+	</main>
+
+	<form id="bestGoodsForm" name="bestGoodsForm">
+		<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+		<input type="hidden" name="pageSize" value ="30"/>
+		<input type="hidden" name="cateNo" value=""/>
+		<input type="hidden" name="sortGb"/>
+	</form>
+
+	<script src="/ux/plugins/gaga/gaga.infinite.scrollSession.js"></script>
+	<script src="/ux/plugins/jquery/jquery.history.min.js"></script>
+	<script th:src="@{'/biz/goods.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/goods.js"></script>
+
+
+	<script th:inline="javascript">
+		/*<![CDATA[*/
+		var bestCateList = [[${bestCateList}]];
+		$(document).ready(function(){
+			$(document).on('click','.sub_category .more_btn',function(){
+				$(this).toggleClass('on');
+				$('.sub_category .cate_wrap').toggleClass('on');
+				if($(this).hasClass('on')){
+					$(this).find('span').text('접기');
+				}else{
+					$(this).find('span').text('더보기');
+				}
+			});
+
+			//카테고리
+			function category(){
+				var categoryOpen=$(".open_categori .select_dress");
+				var categoryClose=$(".category_box .category_close");
+				var categoryPop=$(".category_box");
+
+				categoryOpen.on("click",function(){
+					categoryPop.show();
+					categoryPop.addClass("active");
+					$("body").css({"overflow":"hidden"});
+				});
+
+				categoryClose.on("click",function(){
+					categoryPop.hide();
+					$("body").css({"overflow":"visible"});
+				});
+			}
+			category();
+
+			var dp_viewitem_slide = new Swiper('.view_item .swiper-container', {
+				slidesPerView: 'auto',
+				slidesPerView: 3,
+				spaceBetween: 8,
+				centerMode: true,
+			});
+
+			// 210415_팝업관련 추가
+			//기간 선택 팝업
+			$(document).on("click", ".open_categori.sex", function(){
+				$('#odDatePop1').show().addClass("active");
+				$("body").css({"overflow":"hidden"});
+			});
+			$(document).on("click", ".open_categori.age", function(){
+				$('#odDatePop2').show().addClass("active");
+				$("body").css({"overflow":"hidden"});
+			});
+			//팝업_닫기
+			$('.popup_close').on("click",function(){
+				$('.popup_box').hide().removeClass('active');
+				$("body").css({"overflow":"visible"});
+			});
+
+			//210510_수정 : 토스트 팝업 버튼 on 클래스 제어.
+			$(document).on('click','.popup_box .button_list button',function(){
+				$(this).siblings('.button_list button').removeClass('on');
+				$(this).addClass('on');
+			})
+
+			//210510_추가 : 토스트 팝업 button 클릭 시 팝업 닫기.
+			$(document).on('click','.popup_box.odDatePop .button_list button',function(){
+				$(this).parents('.popup_box.odDatePop').hide().removeClass('active');
+				$("body").css({"overflow":"visible"});
+			})
+
+			$(document).on('click','.popup_box.odDatePop .button_list button',function(){
+				$(this).parents('.popup_box.odDatePop').hide().removeClass('active');
+				$("body").css({"overflow":"visible"});
+			})
+		});
+
+		var fnBestListSearch = function (obj, cateNo){
+			// if(gagajf.isNull(cateNo)){
+			// 	cateNo = 0;
+			// }
+
+			$.each($("#cateListArea").find('li'), function() {
+				$(this).removeClass();
+			});
+			$("#li"+cateNo).addClass('active');
+			$("#bestGoodsForm input[name=cateNo]").val(cateNo);
+			fnCategoryGoodsInfiniteScrollInit();
+			gagaInfiniteScroll.getHistory();
+		}
+
+		// 상품 검색
+		var fnGetInfiniteScrollDataList = function (pageNum){
+			$("#bestGoodsForm input[name=pageNo]").val(pageNum+1);
+			gagajf.ajaxFormSubmit("/display/best/main/goods/list", document.bestGoodsForm,  gagaInfiniteScroll.jsonToHtml);
+		}
+
+		var fnDrawInfiniteScrollData = function (result){
+			let totalCnt = result.totalCnt;
+			gagaInfiniteScroll.pageStatus.totalCount = result.totalCnt;
+			var ithrCd = '';
+			var contentLoc = '';
+
+			if (result.dataList != null && result.dataList.length > 0) {
+				var goodsUrl = [[${@environment.getProperty('upload.goods.view')}]];;
+				let lastPage = result.paging.pageable.pageNo;
+				let endRow = result.endRow - result.paging.pageable.pageSize;
+				var htm = fnCreateGoodsList(result, ithrCd, contentLoc, goodsUrl, lastPage, endRow);
+				gagaInfiniteScroll.draw(htm);
+			}else{
+				if($("#bestGoodsForm input[name=pageNo]").val()==1){
+					$('#listBox').html('<li class="none">상품정보가 존재하지 않습니다.</li>');
+				}
+				$("#divLastPage").show();
+				gagaInfiniteScroll.draw('not');
+			}
+		}
+
+		// 사파리 - event.persisted || 크롬 - window.performance.navigation.type 이 1이면 새로고침, 2면 페이지 이동을 통한 캐쉬페이징
+		$(window).on("pageshow", function(event) {
+			if ( (event.originalEvent && event.originalEvent.persisted) || (window.performance && window.performance.navigation.type == 2)) {
+				var historyData = sessionStorage.getItem(document.location.href);
+				if(historyData!=null){
+					historyData = JSON.parse(historyData);
+				}else{
+					historyData = {};
+				}
+				fnBestListSearch();
+			}else{
+				fnCategoryGoodsInfiniteScrollInit();
+
+				fnBestListSearch();
+			}
+		});
+
+		/*]]>*/
+	</script>
+
+</th:block>
+
+</body>
+</html>

+ 42 - 2
src/main/webapp/WEB-INF/views/mob/display/BrandMainFormMob.html

@@ -118,7 +118,7 @@
 					</div>
 				</th:block>
 
-				<th:block th:if="${contentsLoc=='006'}">
+				<th:block th:if="${contentsLoc=='006' || contentsLoc=='014'||contentsLoc=='015'||contentsLoc=='016'}">
 					<!-- 배너 슬라이드 -->
 					<div class="inner wide" th:if="${brandMainLayoutData.ContentsList!=null}">
 						<div class="swiper-container br_second_slide">
@@ -395,11 +395,51 @@
 		</th:block>
 	</section>
 </main>
+	<!-- 픽커모달 -->
+	<div class="modal fade" id="reco_pop" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
+
+		<a href="#close-modal" rel="modal:close" class="close-modal ">Close</a>
+	</div>
+	<!-- //픽커모달 -->
 	<script th:inline="javascript">
+		var goodsImgUrl = [[${@environment.getProperty('upload.goods.view')}]];
+
 		// 픽커모달
+		var fnGoodsPopup = function(obj1,obj2,obj3,obj4,obj5,obj6,obj7){
+			$("#reco_pop .modal-dialog").remove();
+			var tag = '';
+
+			tag += '<div class="modal-dialog" role="document">\n';
+			tag += '	<div class="modal-content">\n';
+			tag += '		<div class="modal-header">\n';
+			tag += '			<h5 class="modal-title"><span class="sr_only">제품정보</span></h5>\n';
+			tag += '		</div>\n';
+			tag += '		<div class="modal-body">\n';
+			tag += '			<div class="itemsGrp rowtype">\n';
+			tag += '				<div class="item_prod">\n';
+			tag += '					<div class="item_state">\n';
+			tag += '						<a href="javascript:void(0);" class="itemLink" onclick="cfnGoToGoodsDetail(\''+obj7+'\',\'\',\'\')">\n';
+			tag += '							<div class="itemPic">\n';
+			tag += '								<img class="vLHTC pd_img" src="'+goodsImgUrl+'/'+obj1+'?RS=260" alt="">\n';
+			tag += '							</div>\n';
+			tag += '							<p class="itemBrand">'+obj2+'</p>\n';
+			tag += '							<div class="itemName">'+obj3+'</div>\n';
+			tag += '							<p class="itemPrice">'+obj5.addComma()+'</p>\n';
+			tag += '						</a>\n';
+			tag += '					</div>\n';
+			tag += '				</div>\n';
+			tag += '			</div>\n';
+			tag += '		</div>\n';
+			tag += '	</div>\n';
+			tag += '</div>\n';
+
+			$("#reco_pop").append(tag);
+			$('#reco_pop').modal("show");
+		}
+
 		$(document).ready(function () {
 			$(document).on('click','.item_picker',function(e){
-				$("#reco_pop").modal("show");
+				//$("#reco_pop").modal("show");
 				$("body").addClass("recoPop");
 				return false;
 			});

+ 171 - 0
src/main/webapp/WEB-INF/views/mob/display/CategoryMainFormMob.html

@@ -0,0 +1,171 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="mob/common/layout/DefaultLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : CategoryMainFormMob.html
+ * @desc    : 카테고리메인 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.10   bin2107     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<main role="" id="" class="container dp">
+		<section class="content dp_submain">
+			<th:block th:if="${cateMainLayoutList}" th:each="mainLayoutData, mainStat : ${cateMainLayoutList}" th:with="contentsLoc=${#strings.replace(mainLayoutData.contentsLoc,'SCM','')},contentsTitle=${mainLayoutData.contentsTitle}">
+				<th:block th:if="${contentsLoc=='001'}">
+					<div class="inner wide" th:if="${planningList != null and !planningList.empty}">
+						<div class="submain_visual">
+							<div class="swiper-container">
+								<div class="swiper-wrapper">
+									<div class="swiper-slide" th:each="item, status : ${planningList}">
+										<div class="img">
+											<img th:src="${@environment.getProperty('domain.image') + '/' + item.imgPath1}" alt="">
+										</div>
+										<div class="txtWrap">
+											<p th:text="${item.strTitle1}">겨울정기 가격제안전<br>겨울정기 가격</p>
+											<p class="txt_xs" th:text="${item.subText1}">나만의 겨울 스타일 찾기</p>
+										</div>
+									</div>
+								</div>
+								<div class="swiper-pagination"></div>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+				<th:block th:if="${contentsLoc=='004'}">
+					<div class="inner bg_gray">
+						<div class="sub_category">
+							<div class="cate_wrap">
+							</div>
+							<!-- 카테고리 3줄 이상일 경우 노출 -->
+							<div class="more_btn">
+								<button type="button" class="btn"><span>더보기</span></button>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+				<th:block th:if="${contentsLoc=='002'}">
+					<div class="inner wide" th:if="${newGoodsList != null}">
+						<div class="new_item">
+							<h2 class="dp_subtitle" th:text="${contentsTitle}">신상품</h2>
+							<div class="swiper-container item_list">
+								<div class="swiper-wrapper">
+									<div class="swiper-slide" th:each="item, status : ${newGoodsList}">
+										<div class="item_prod" th:if="${status.count<21}">
+											<div class="item_state">
+												<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${item.goodsCd}]], '', '', 'SCM001');">
+													<div class="itemPic">
+														<img alt="BLACK-a" class=" vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + item.sysImgNm}" >
+														<button type="button" class="itemLike" th:classappend="${item.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${item.goodsCd}, ithrCd='', contentsLoc='SCM001', planDtlSq=''">관심상품 추가</button>
+													</div>
+													<p class="itemBrand" th:text="${item.brandGroupNm}">BRAND NAME</p>
+													<div class="itemName" th:text="${item.goodsFullNm}">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+													<p class="itemPrice" th:text="${#numbers.formatInteger(item.currPrice,3,'POINT')}">80,100</p>
+													<div class="itemComment" th:if="${not #strings.isEmpty(item.goodsTnm)}" th:text="${item.goodsTnm}">#주문 폭주 상품</div>
+												</a>
+											</div>
+										</div>
+									</div>
+								</div>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+				<th:block th:if="${contentsLoc=='003'}">
+					<div class="inner" th:if="${bestGoodsList != null}">
+						<div class="best_item">
+							<h2 class="dp_subtitle" th:text="${contentsTitle}">베스트 상품</h2>
+							<div class="item_list">
+								<div class="itemsGrp">
+									<div class=" item_prod" th:each="item, status : ${bestGoodsList}">
+										<div class="item_state">
+											<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${item.goodsCd}]], '', '', 'SCM002');">
+												<div class="shape" th:classappend="${status.count==1}?'ranker'"><span th:text="${status.index+1}"></span></div>
+												<div class=" itemPic">
+													<img alt="BLUE-a" class=" vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + item.sysImgNm}" >
+													<button type="button" class="itemLike" th:classappend="${item.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${item.goodsCd}, ithrCd='', contentsLoc='SCM002', planDtlSq=''">관심상품 추가</button>
+												</div>
+												<p class="itemBrand" th:text="${item.brandGroupNm}">BRAND NAME</p>
+												<div class=" itemName" th:text="${item.goodsFullNm}">여성 체인 프린트 큐롯 스커트 프린트 큐롯 스커트</div>
+												<p class="itemPrice_original" th:if="${item.currPrice != item.listPrice}" th:text="${#numbers.formatInteger(item.listPrice,3,'POINT')}">89,000</p>
+												<p class="itemPrice">[[${#numbers.formatInteger(item.currPrice,1,'COMMA')}]]
+													<span class=" itemPercent" th:if="${item.currPrice != item.listPrice}" th:text="${(item.listPrice == 0 ? 0 : #numbers.formatDecimal((item.listPrice - item.currPrice) / (item.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
+												</p>
+												<div class="itemComment" th:if="${not #strings.isEmpty(item.goodsTnm)}" th:text="${item.goodsTnm}">#주문 폭주 상품</div>
+											</a>
+										</div>
+									</div>
+								</div>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+		</th:block>
+		</section>
+	</main>
+
+	<script th:inline="javascript">
+		$(document).ready(function () {
+			fnSetCategory1Depts();
+
+			var swiper = new Swiper('.submain_visual .swiper-container', {
+				observer: true,
+				observeParents: true,
+				pagination: {
+					el: '.submain_visual .swiper-pagination',
+					type: 'fraction',
+				},
+			});
+
+			$(document).on('click','.sub_category .more_btn',function(){
+				$(this).toggleClass('on');
+				$('.sub_category .cate_wrap').toggleClass('on');
+				if($(this).hasClass('on')){
+					$(this).find('span').text('접기');
+				}else{
+					$(this).find('span').text('더보기');
+				}
+			});
+
+			var dp_newitem_slide = new Swiper('.new_item .swiper-container', {
+				slidesPerView: 'auto',
+				spaceBetween: 8,
+				centerMode: true,
+			});
+		});
+
+		// 카테고리1Depts 설정
+		var fnSetCategory1Depts = function() {
+			let allCate = [[${allCateList}]];
+			$.each(allCate, function(idx1, cate1) {
+				if ([[${params.cate1No}]] == cate1.cate1No) {
+					let tag = '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate1.cateGb + '\', ' + cate1.cate1No + ');">전체</a>\n';
+					if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
+						$.each(cate1.cate2List, function(idx2, cate2) {
+							tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
+						});
+					}
+					$('.cate_wrap').html(tag);
+				}
+			});
+		}
+	</script>
+
+</th:block>
+
+</body>
+</html>

+ 170 - 0
src/main/webapp/WEB-INF/views/mob/display/OutletMainFormMob.html

@@ -0,0 +1,170 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="mob/common/layout/DefaultLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : OutletMainFormMob.html
+ * @desc    : 아울렛메인 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.10   bin2107     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<main role="" id="" class="container dp">
+		<section class="content dp_outlets">
+			<th:block th:if="${outletMainLayoutList}" th:each="mainLayoutData, mainStat : ${outletMainLayoutList}" th:with="contentsLoc=${#strings.replace(mainLayoutData.contentsLoc,'SOM','')},contentsTitle=${mainLayoutData.contentsTitle}">
+				<th:block th:if="${contentsLoc=='001'}">
+					<div class="inner wide" th:if="${planningList != null and !planningList.empty}">
+						<div class="outlets_visual">
+							<div class="swiper-container">
+								<div class="swiper-wrapper">
+									<div class="swiper-slide" th:each="item, status : ${planningList}">
+										<div class="img">
+											<img th:src="${@environment.getProperty('domain.image') + item.imgPath1}" alt="">
+										</div>
+										<div class="txtWrap">
+											<p th:text="${item.strTitle1}">오랫동안 기다려온<br>겨울세일 시작</p>
+											<p class="txt_xs" th:text="${item.subText1}">재고있을 때 미리 득템</p>
+										</div>
+									</div>
+								</div>
+								<div class="swiper-pagination"></div>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+				<th:block th:if="${contentsLoc=='004'}">
+					<div class="inner wide bg_gray">
+						<div class="dp_cate_list">
+						</div>
+					</div>
+				</th:block>
+
+				<th:block th:if="${contentsLoc=='002'}">
+					<div class="inner wide" th:if="${mdPickGoodsList != null}">
+						<div class="md_item">
+							<h2 class="dp_subtitle" th:text="${contentsTitle}">MD가 추천하는 아울렛 아이템</h2>
+							<div class="swiper-container item_list">
+								<div class="swiper-wrapper">
+									<div class="swiper-slide" th:each="item, status : ${mdPickGoodsList}">
+										<div class="item_prod">
+											<div class="item_state">
+												<button type="button" class="itemLike" th:classappend="${item.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${item.goodsCd}, ithrCd='', contentsLoc='SOM002', planDtlSq=''">관심상품 추가</button>
+												<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${item.goodsCd}]], '', '', 'SOM002');">
+													<div class="itemPic">
+														<img class="vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + item.sysImgNm}" alt="">
+													</div>
+													<p class="itemBrand" th:text="${item.brandGroupNm}">BRAND NAME</p>
+													<div class="itemName" th:text="${item.goodsFullNm}">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
+													<p class="itemPrice">
+														<span class="itemPrice_original" th:if="${item.currPrice != item.listPrice}" th:text="${#numbers.formatInteger(item.listPrice,3,'COMMA')}">89,000</span>
+														[[${#numbers.formatInteger(item.currPrice,0,'COMMA')}]]
+														<span class="itemPercent" th:if="${item.currPrice != item.listPrice}" th:text="${(item.listPrice == 0 ? 0 : #numbers.formatDecimal((item.listPrice - item.currPrice) / (item.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
+													</p>
+													<div class="itemComment" th:text="${item.goodsTnm}">#주문 폭주 상품</div>
+												</a>
+											</div>
+										</div>
+									</div>
+								</div>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+				<th:block th:if="${contentsLoc=='003'}">
+					<div class="inner" th:if="${bestGoodsList != null}">
+						<div class="best_item">
+							<h2 class="dp_subtitle" th:text="${contentsTitle}">베스트 상품</h2>
+							<div class="item_list">
+								<div class="itemsGrp">
+									<div class="item_prod" th:each="item, status : ${bestGoodsList}">
+										<div class="item_state">
+											<button type="button" class="itemLike" th:classappend="${item.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${item.goodsCd}, ithrCd='', contentsLoc='SOM003', planDtlSq=''">관심상품 추가</button>
+											<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${item.goodsCd}]], '', '', 'SOM003');">
+												<div class="shape" th:classappend="${status.count==1}?'ranker'"><span th:text="${status.index+1}">1</span></div>
+												<div class="itemPic">
+													<img class="vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + item.sysImgNm}" alt="">
+												</div>
+												<p class="itemBrand" th:text="${item.brandGroupNm}">BRAND NAME</p>
+												<div class="itemName" th:text="${item.goodsFullNm}">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
+												<p class="itemPrice">
+													<span class="itemPrice_original" th:if="${item.currPrice != item.listPrice}" th:text="${#numbers.formatInteger(item.listPrice,3,'COMMA')}">89,000</span>
+													[[${#numbers.formatInteger(item.currPrice,0,'COMMA')}]]
+													<span class="itemPercent" th:if="${item.currPrice != item.listPrice}" th:text="${(item.listPrice == 0 ? 0 : #numbers.formatDecimal((item.listPrice - item.currPrice) / (item.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
+												</p>
+												<div class="itemComment" th:text="${item.goodsTnm}">#주문 폭주 상품</div>
+											</a>
+										</div>
+									</div>
+								</div>
+							</div>
+						</div>
+					</div>
+				</th:block>
+
+			</th:block>
+		</section>
+	</main>
+
+	<script th:inline="javascript">
+		$(document).ready(function(){
+			fnSetCategory1Depts();
+
+			$(document).on('click','.sub_category .more_btn',function(){
+				$(this).toggleClass('on');
+				$('.sub_category .cate_wrap').toggleClass('on');
+				if($(this).hasClass('on')){
+					$(this).find('span').text('접기');
+				}else{
+					$(this).find('span').text('더보기');
+				}
+			});
+
+			var swiper = new Swiper('.outlets_visual .swiper-container', {
+				observer: true,
+				observeParents: true,
+				pagination: {
+					el: '.outlets_visual .swiper-pagination',
+					type: 'fraction',
+				},
+				autoplay : {
+					delay : 5000,   // 시간 설정
+				},
+			});
+
+			var dp_mditem_slide = new Swiper('.md_item .swiper-container', {
+				slidesPerView: 2,
+				spaceBetween: 8,
+				centerMode: true,
+			});
+		});
+
+		// 카테고리1Depts 설정
+		var fnSetCategory1Depts = function() {
+			let allCate = [[${allCateList}]];
+			let cateGb = 'G032_101';
+			let formalGb = 'G009_20';
+			let tag = '';
+			tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cateGb + '\',\'\',\'\',\'\',\'\',\'\',\'' + formalGb + '\');">전체</a>\n';
+			$.each(allCate, function(allCateIdx, allCateItem) {
+				tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + allCateItem.cateGb + '\',' + allCateItem.cate1No + ',\'\',\'\',\'\',\'\',\'' + formalGb + '\');">' + allCateItem.cate1Nm + '</a>\n';
+			});
+			$('.dp_cate_list').html(tag);
+		}
+	</script>
+
+</th:block>
+
+</body>
+</html>

+ 4 - 4
src/main/webapp/WEB-INF/views/web/display/BestMainFormWeb.html

@@ -37,7 +37,7 @@
 					<div class="taps">
 						<div>
 							<ul id="cateListArea">
-								<li class="active" id="li0"><a href="javascript:void(0);" onclick="fnBestListSearch(this,0);">전체</a></li>
+								<li class="active" id="li0"><a href="javascript:void(0);" onclick="fnBestListSearch(this,'');">전체</a></li>
 								<th:block th:each="item, stat : ${bestCateList}">
 									<li class="" th:id="${'li'+item.cateNo}"><a href="javascript:void(0);" th:onclick="fnBestListSearch(this,[[${item.cateNo}]]);" th:text="${item.cateNm}"></a></li>
 								</th:block>
@@ -296,9 +296,9 @@
 	});
 
 	var fnBestListSearch = function (obj, cateNo){
-		if(gagajf.isNull(cateNo)){
-			cateNo = 0;
-		}
+		// if(gagajf.isNull(cateNo)){
+		// 	cateNo = 0;
+		// }
 
 		$.each($("#cateListArea").find('li'), function() {
 			$(this).removeClass();

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

@@ -127,7 +127,7 @@
 
 				<!-- 가로 긴 배너 슬라이드 -->
 				<!-- 브랜드 배너 -->
-				<th:block th:if="${contentsLoc=='006'}">
+				<th:block th:if="${contentsLoc=='006' || contentsLoc=='014'||contentsLoc=='015'||contentsLoc=='016}">
 					<div class="content wide main_1stage">
 						<div class="cont_head dpnone">
 							<p class="t_c">배너 슬라이드</p>
@@ -454,7 +454,7 @@ var brandMainLayoutList = [[${brandMainLayoutList}]];
 var goodsImgUrl = [[${@environment.getProperty('upload.goods.view')}]];
 var fnGoodsPopup = function(obj1,obj2,obj3,obj4,obj5,obj6,obj7){
 	$("#brLookbookPopup .modal-dialog").remove();
-	tag = '';
+	var tag = '';
 
 	tag += '	<div class="modal-dialog" role="document">\n';
 	tag += '		<div class="modal-content">\n';

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

@@ -133,7 +133,7 @@
 								<div class="item_state">
 									<button type="button" class="itemLike" th:classappend="${item.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${item.goodsCd}, ithrCd='', contentsLoc='SOM003', planDtlSq=''">관심상품 추가</button>
 									<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${item.goodsCd}]], '', '', 'SOM003');">
-										<div class="rank" th:classappend="${status.count==1}?'ranker'"><span th:text="${status.index+1}">1</span></div>
+										<div class="shape" th:classappend="${status.count==1}?'ranker'"><span th:text="${status.index+1}">1</span></div>
 										<div class="itemPic">
 											<img alt="BLUE-a" class=" vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + item.sysImgNm}">
 										</div>

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

@@ -132,7 +132,7 @@
 		for (var i = 0; i < date.length; i++) {
 			$("#searchDt").append(	"<li onclick='fnChangeDate(this.value)' value='"+ date[i].year + "" + date[i].month + "'>" + date[i].year	+ "년" +  "  " + date[i].month + "월 </li>")
 		}
-		$(".select").append("<li class='selected' value='"+date[0].year+""+date[0].month+"'>"+ date[0].year + "년"  +  "  " + date[0].month + "월 </li>"); // 현재년도 선택 */ 
+		$(".select").append("<li onclick='fnChangeDate(this.value)' value='"+date[0].year+""+date[0].month+"'>"+ date[0].year + "년"  +  "  " + date[0].month + "월 </li>"); // 현재년도 선택 */ 
 	}
 	appendYear($("#searchDt"));
 
@@ -261,14 +261,11 @@
 		
 		// 마이페이지 location 설정
 		fnSetMypageLocation('STYLE24 포인트', '_PAGE_MYPAGE_POINT');
-		
-		
 
 		// 셀렉트박스 활성화
 		$('.select_custom').each(function(index) {
 			var selecter01 = new sCombo($(this));
 		});
-
 		// 셀렉트박스 데이터 설정
 		fnChangeDate();
 

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

@@ -481,7 +481,7 @@ var reviewCreate = function () {
 	}
 	
 	
-	mcxDialog.confirm('리뷰를 등록하시겠습니까"?', {
+	mcxDialog.confirm('리뷰를 등록하시겠습니까?', {
         cancelBtnText: "취소",
         sureBtnText: "확인",
         sureBtnClick: function(){

+ 4 - 3
src/main/webapp/WEB-INF/views/web/mypage/MypageReviewDetailFormWeb.html

@@ -68,9 +68,10 @@
 						if (reviewAttach.fileGb == "M") fileGbClass = "mov";
 				tag +='		<span class="thumb" class="'+fileGbClass+'">\n';<!-- 동영상의 썸네일일 경우 mov 클래스 추가-->
 						if (reviewAttach.fileGb == "M") {
-				tag +='			<video poster="http://cdn.011st.com/11dims/resize/1999x1999/quality/75/11src/review/10201202/3121412332/2e66698576d64c5c9977a6fe6606008d.jpg" muted="muted" preload="metadata" controls="controls">\n';
-				tag +='				<source src="'+_kollusMediaUrl+'/'+reviewAttach.kmcKey + 'player_version=html5" type="video/mp4">\n';
-				tag +='			</video>\n';
+			    tag +='<iframe width="100%" height="100%" src="'+_kollusMediaUrl+'/'+reviewAttach.kmcKey + '/player_version=html5" frameborder="0" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe>';
+				//tag +='			<video poster="'+_kollusMediaUrl+'/'+reviewAttach.kmcKey + '/player_version=html5" muted="muted" preload="metadata" controls="controls">\n';
+				//tag +='				<source src="'+_kollusMediaUrl+'/'+reviewAttach.kmcKey + '/player_version=html5" type="video/mp4">\n';
+				//tag +='			</video>\n';
 						}else{
 				tag +='			<img src="'+ _imgUrl + reviewAttach.sysFileNm +'" alt="">\n';	
 						}

+ 0 - 1
src/main/webapp/WEB-INF/views/web/planning/PlanningEventPollFormWeb.html

@@ -335,7 +335,6 @@ $(document).ready( function() {
 		var content = $(this).val();
 		$('#ans_cnt').html("(<em class='c_primary'>"+content.length+"</em>/1000자)");  
 		if (content.length > 1000){
-			alert("최대 1000자까지 입력 가능합니다.");
 			$(this).val(content.substring(0, 1000));
 			$('#ans_cnt').html("(<em class='c_primary'>1000</em>/1000자)");
 		}

+ 5 - 3
src/main/webapp/WEB-INF/views/web/planning/PlanningShotGuideFormWeb.html

@@ -35,7 +35,8 @@
 				</div>
 				<div class="cont_body">
 				    <div class="bulletship">
-						<div class="bulletship_head" th:utext="${#strings.replace(#strings.replace(shotHtmlTop.fsrcPc,'&amplt;','<'),'&ampgt;','>')}">
+						<!-- <div class="bulletship_head" th:utext="${#strings.replace(#strings.replace(shotHtmlTop.fsrcPc,'&amplt;','<'),'&ampgt;','>')}"> -->
+						<div class="bulletship_head">
                             <img src="/images/pc/thumb/bullet_bg1.png" alt="10시까지 주문하면 당일도착">
                         </div>
                         <div class="bulletship_body" id="shotHtml">
@@ -55,8 +56,9 @@
                         </div>
                         <div class="bulletship_foot"><br>
                         </div>
-                        <div class="bulletship_foot" th:utext="${#strings.replace(#strings.replace(shotHtmlBtm.fsrcPc,'&amplt;','<'),'&ampgt;','>')}">
-                           <!--  <img src="/images/pc/thumb/bullet_bg2.png" alt="주문/도착, 배송일, 대상상품"> -->
+                        <!-- <div class="bulletship_foot" th:utext="${#strings.replace(#strings.replace(shotHtmlBtm.fsrcPc,'&amplt;','<'),'&ampgt;','>')}"> -->
+                        <div class="bulletship_foot">
+                            <img src="/images/pc/thumb/bullet_bg2.png" alt="주문/도착, 배송일, 대상상품">
                         </div>
                     </div> 
                 </div>