Przeglądaj źródła

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

card007 4 lat temu
rodzic
commit
0ccdf5e372
38 zmienionych plików z 912 dodań i 765 usunięć
  1. 11 0
      src/main/java/com/style24/front/biz/dao/TsfWishlistDao.java
  2. 19 0
      src/main/java/com/style24/front/biz/service/TsfWishlistService.java
  3. 445 259
      src/main/java/com/style24/front/biz/thirdparty/EigeneaiApi.java
  4. 15 1
      src/main/java/com/style24/front/biz/thirdparty/Yes24Login.java
  5. 3 3
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  6. 13 285
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  7. 25 4
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  8. 5 2
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  9. 1 1
      src/main/java/com/style24/persistence/domain/Social.java
  10. 21 2
      src/main/java/com/style24/persistence/domain/eigene/Eigeneai.java
  11. 2 2
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  12. 3 5
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  13. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  14. 4 11
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  15. 10 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfWishlist.xml
  16. 1 1
      src/main/webapp/WEB-INF/views/mob/callcenter/FaqFormMob.html
  17. 5 3
      src/main/webapp/WEB-INF/views/mob/common/fragments/FooterMob.html
  18. 46 17
      src/main/webapp/WEB-INF/views/mob/display/BrandMainFormMob.html
  19. 1 1
      src/main/webapp/WEB-INF/views/mob/display/LookbookDetailFormMob.html
  20. 31 27
      src/main/webapp/WEB-INF/views/mob/display/MallMainFormMob.html
  21. 3 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDescFormMob.html
  22. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDetailFormMob.html
  23. 8 6
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  24. 38 10
      src/main/webapp/WEB-INF/views/mob/goods/GoodsOtherFormMob.html
  25. 5 5
      src/main/webapp/WEB-INF/views/mob/planning/PlanningShotGuideFormMob.html
  26. 1 1
      src/main/webapp/WEB-INF/views/mob/social/SocialMainFormMob.html
  27. 1 1
      src/main/webapp/WEB-INF/views/web/callcenter/FaqFormWeb.html
  28. 5 2
      src/main/webapp/WEB-INF/views/web/common/fragments/FooterWeb.html
  29. 13 2
      src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html
  30. 50 24
      src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html
  31. 4 4
      src/main/webapp/WEB-INF/views/web/display/LookbookDetailFormWeb.html
  32. 56 30
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  33. 3 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDescFormWeb.html
  34. 12 10
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html
  35. 38 30
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  36. 11 11
      src/main/webapp/WEB-INF/views/web/goods/GoodsOtherFormWeb.html
  37. 1 1
      src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html
  38. BIN
      src/main/webapp/images/mo/ico_btn_narrow.png

+ 11 - 0
src/main/java/com/style24/front/biz/dao/TsfWishlistDao.java

@@ -43,4 +43,15 @@ public interface TsfWishlistDao {
 	 * @date 2021. 5. 13
 	 */
 	Collection<Goods> getQuickWishList(WishList wishList);
+	
+	/**
+	 * 위시리스트 상품여부용
+	 *
+	 * @param 
+	 * @return
+	 * @author eskim
+	 * @date 2021. 6. 30
+	 */
+	int getWishListGoodsCount(WishList wishList);
+	
 }

+ 19 - 0
src/main/java/com/style24/front/biz/service/TsfWishlistService.java

@@ -67,4 +67,23 @@ public class TsfWishlistService {
 		wishList.setCustNo(login.getCustNo());
 		return wishListDao.getQuickWishList(wishList);
 	}
+	
+	/**
+	 * 위시리스트 상품여부용 
+	 *
+	 * @param 
+	 * @return
+	 * @author eskim
+	 * @date 2021. 6. 30
+	 */
+	public int getWishListGoodsCount(String goodsCd){
+		WishList wishList = new WishList();
+		Login login = TsfSession.getInfo();
+		wishList.setCustNo(login.getCustNo());
+		wishList.setGoodsCd(goodsCd);
+		return wishListDao.getWishListGoodsCount(wishList);
+	}
+	
+	
+	
 }

+ 445 - 259
src/main/java/com/style24/front/biz/thirdparty/EigeneaiApi.java

@@ -1,260 +1,446 @@
-package com.style24.front.biz.thirdparty;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URI;
-import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.Collection;
-
-import javax.annotation.PostConstruct;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Component;
-import org.springframework.web.client.RestTemplate;
-
-import com.google.gson.Gson;
-import com.style24.persistence.domain.eigene.Eigeneai;
-import com.style24.persistence.domain.eigene.Eigeneai.Result;
-
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * 추천솔루션 - Eigene.ai
- *
- * @author gagamel
- * @since 2021. 5. 14
- */
-@Component
-@Slf4j
-public class EigeneaiApi {
-
-	private String apiUrl = "https://api.eigene.io/rec";
-	private String rtsApiUrl = "https://rts-api.eigene.io/api";
-	private String cuid = "1252aed4-78dc-46e8-b784-94ac42e86dd4";
-
-	@Autowired
-	private RestTemplate restTemplate;
-
-	@PostConstruct
-	public void init() {
-		log.debug("\n\n---- Eigene.ai initialization started ----");
-		log.debug("apiUrl: [{}]", apiUrl);
-		log.debug("cuid: [{}]", cuid);
-		log.debug("\n--- Eigene.ai initialization completed ----\n");
-	}
-
-	/**
-	 * 주간베스트추천상품 목록
-	 * @param size - 결과에 포함할 상품수
-	 * @param cate1No - 카테고리1번호
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 5. 14
-	 */
-	public Eigeneai getWeeklyBestGoodsList(int size, Integer cate1No) {
-		String requestUrl = apiUrl + "/m060?cuid=" + cuid + "&size=" + size + "&incids=" + cate1No;
-		return this.getRecommendationGoodsList(requestUrl);
-	}
-
-	/**
-	 * 카테고리별 주간베스트추천상품 목록
-	 * @param size - 결과에 포함할 상품수
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 5. 14
-	 */
-	public Eigeneai getCategoryWeeklyBestGoodsList(int size) {
-		// TODO: 카테고리ID는 어떻게 조회? 아이겐 미개발
-		String requestUrl = apiUrl + "/m008?cuid=" + cuid + "&cids=" + "" + "&size=" + size;
-		return this.getRecommendationGoodsList(requestUrl);
-	}
-
-	/**
-	 * 월간클릭베스트추천상품 목록
-	 * @param size - 결과에 포함할 상품수
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 5. 14
-	 */
-	public Collection<Result> getMonthlyClickBestGoodsList(int size, Integer brandGroupNo) {
-		String requestUrl = apiUrl + "/m062?cuid=" + cuid + "&cids=" + "" + "&size=" + size + "&bids=" + brandGroupNo;
-
-		Eigeneai eigeneai = this.getRecommendationGoodsList(requestUrl);
-		if (eigeneai.getResults() != null && !eigeneai.getResults().isEmpty()) {
-			return eigeneai.getResults();
-		}
-
-		return new ArrayList<Result>();
-	}
-
-	/**
-	 * 실시간베스트상품 목록
-	 * @param size - 결과에 포함할 상품수
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 5. 14
-	 */
-	public Eigeneai getRealtimeBestGoodsList(int size) {
-		String requestUrl = apiUrl + "/stats-transition?cuid=" + cuid + "&size=" + size;
-		return this.getRecommendationGoodsList(requestUrl);
-	}
-
-	/**
-	 * 매출급상승 카테고리별 상품 목록
-	 * @param size - 결과에 포함할 상품수
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 5. 14
-	 */
-	public Eigeneai getSalesSoaringGoodsList() {
-		// TODO: 매출급상승 카테고리 5개 조회 후 카테고리별 상품 7개 조회
-		String requestUrl = apiUrl + "/m010?cuid=" + cuid + "&size=5";
-		return this.getRecommendationGoodsList(requestUrl);
-	}
-
-	/**
-	 * 고객의 최근검색어별 상품 목록
-	 * @param size - 결과에 포함할 상품수
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 5. 14
-	 */
-	public Collection<Eigeneai> getCustomerKeywordGoodsList() {
-		Collection<Eigeneai> dataList = new ArrayList<>();
-
-		// 고객별 최근검색어 목록. TODO: 아이겐에서 미개발
-		String requestUrl = apiUrl + "/m010?cuid=" + cuid + "&size=5";
-		Eigeneai eigeneai = this.getRecommendationGoodsList(requestUrl);
-
-		Collection<Eigeneai.Result> resultList = eigeneai.getResults();
-		if (resultList == null || resultList.isEmpty()) {
-			return dataList;
-		}
-
-		// 고객별 최근검색어 기준 검색어연관상품 목록 조회
-		for (Eigeneai.Result result : resultList) {
-			dataList.add(this.getKeywordGoodsList(result.getCategoryId(), 10));
-		}
-
-		return dataList;
-	}
-
-	/**
-	 * 검색어연관상품 목록
-	 * @param keyword - 키워드
-	 * @param size - 결과에 포함할 상품수
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 5. 14
-	 */
-	public Eigeneai getKeywordGoodsList(String keyword, int size) {
-		String requestUrl = apiUrl + "/s001?cuid=" + cuid + "&size=" + size;
-		try {
-			requestUrl += "&st=" + URLEncoder.encode(keyword, "UTF-8");
-		} catch (UnsupportedEncodingException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		return this.getRecommendationGoodsList(requestUrl);
-	}
-
-	/**
-	 * 실시간 많이 조회되고 있는 상품 목록
-	 * @param size - 결과에 포함할 상품수
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 5. 14
-	 */
-	public Collection<Result> getRealtimeGoodsList(int size) {
-		String requestUrl = rtsApiUrl + "/stream?cuid=" + cuid + "&size=" + size + "&type=view";
-
-		Eigeneai eigeneai = this.getRecommendationGoodsList(requestUrl);
-		if (eigeneai.getResults() != null && !eigeneai.getResults().isEmpty()) {
-			return eigeneai.getResults();
-		}
-
-		return new ArrayList<Result>();
-	}
-
-	/**
-	 * 연관상품 목록
-	 * @param goodsCd - 상품코드
-	 * @param size - 결과에 포함할 상품수
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 5. 14
-	 */
-	public Eigeneai getRelatedGoodsList(String goodsCd, int size) {
-		String requestUrl = apiUrl + "/a003?cuid=" + cuid + "&iids=" + goodsCd + "&size=" + size;
-		return this.getRecommendationGoodsList(requestUrl);
-	}
-
-	/**
-	 * 브랜드 연관상품 목록
-	 * @param size - 결과에 포함할 상품수
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 5. 14
-	 */
-	public Eigeneai getBrandRelatedGoodsList(int size) {
-		// TODO: 아이겐 미개발 (a004&cids=category3 or a002&inbids=brandId)
-		String requestUrl = apiUrl + "/a004?cuid=" + cuid + "&cids=" + "" + "&size=" + size;
-		return this.getRecommendationGoodsList(requestUrl);
-	}
-
-	/**
-	 * 동일 카테고리 연관상품 목록
-	 * @param goodsCd - 상품코드
-	 * @param size - 결과에 포함할 상품수
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 5. 14
-	 */
-	public Eigeneai getSameCategoryRelatedGoodsList(String goodsCd, int size) {
-		String requestUrl = apiUrl + "/a002?cuid=" + cuid + "&iids=" + goodsCd + "&size=" + size;
-		return this.getRecommendationGoodsList(requestUrl);
-	}
-
-	/**
-	 * 상품의 실시간 조회수
-	 * @param goodsCd - 상품코드
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 5. 14
-	 */
-	public Eigeneai getRealtimeViewCount(String goodsCd) {
-		// TODO: 아이겐 미개발 (건수를 가져오는 걸로 해야하지 않을까?)
-		String requestUrl = apiUrl + "/stat?cuid=" + cuid + "&cids=" + goodsCd;
-		Eigeneai eigeneai = this.getRecommendationGoodsList(requestUrl);
-		return eigeneai;
-	}
-
-	/**
-	 * 추천상품 목록
-	 * @param requestUrl - Reqeust URL
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 5. 14
-	 */
-	private Eigeneai getRecommendationGoodsList(String requestUrl) {
-		log.info("requestUrl: {}", requestUrl);
-		URI url = URI.create(requestUrl);
-
-		// GET방식으로 호출
-		ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class);
-		log.info("responseEntity.getStatusCode(): {} ", responseEntity.getStatusCode());
-
-		String responseJson = responseEntity.getBody();
-		log.info("responseEntity.getBody(): {}", responseJson);
-
-		if (!responseEntity.getStatusCode().equals(HttpStatus.OK)) {
-			return null;
-		}
-
-		Gson gson = new Gson();
-		return gson.fromJson(responseJson, Eigeneai.class);
-	}
-
+package com.style24.front.biz.thirdparty;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URI;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import javax.annotation.PostConstruct;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import com.google.gson.Gson;
+import com.style24.persistence.domain.eigene.Eigeneai;
+import com.style24.persistence.domain.eigene.Eigeneai.Item;
+import com.style24.persistence.domain.eigene.Eigeneai.Result;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 추천솔루션 - Eigene.ai
+ *
+ * @author gagamel
+ * @since 2021. 5. 14
+ */
+@Component
+@Slf4j
+public class EigeneaiApi {
+
+	private String apiUrl = "https://api.eigene.io/rec";
+	private String rtsApiUrl = "https://rts-api.eigene.io/api";
+	private String cuid = "1252aed4-78dc-46e8-b784-94ac42e86dd4";
+
+	@Autowired
+	private RestTemplate restTemplate;
+
+	@PostConstruct
+	public void init() {
+		log.debug("\n\n---- Eigene.ai initialization started ----");
+		log.debug("apiUrl: [{}]", apiUrl);
+		log.debug("cuid: [{}]", cuid);
+		log.debug("\n--- Eigene.ai initialization completed ----\n");
+	}
+
+	/**
+	 * 카테고리별 주간판매베스트추천상품 목록
+	 * 사용되는 화면 영역)
+	 * 		메인 > 베스트 영역
+	 * 		카테고리메인 > 베스트 상품
+	 * 		베스트 > 카테고리별 베스트
+	 * @param size - 결과에 포함할 상품수
+	 * @param cate1No - 카테고리번호1
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	public Collection<Result> getCategoryWeeklySellBestGoodsList(int size, Integer cate1No) {
+		String requestUrl = apiUrl + "/m060?cuid=" + cuid + "&size=" + size + "&incids=" + cate1No;
+
+		Eigeneai eigeneai = this.getEigeneaiInfo(requestUrl);
+		if (eigeneai.getResults() != null && !eigeneai.getResults().isEmpty()) {
+			return eigeneai.getResults();
+		}
+
+		return new ArrayList<Result>();
+	}
+
+//	/**
+//	 * 매출급상승 카테고리 목록
+//	 * 사용되는 화면 영역)
+//	 * 		메인 > MD추천상품
+//	 * @return
+//	 * @author gagamel
+//	 * @since 2021. 6. 30
+//	 */
+//	public Collection<Result> getSoaringSalesCategoryList() {
+//		String requestUrl = apiUrl + "/m063?cuid=" + cuid;
+//
+//		Eigeneai eigeneai = this.getEigeneaiInfo(requestUrl);
+//		if (eigeneai.getResults() != null && !eigeneai.getResults().isEmpty()) {
+//			return eigeneai.getResults();
+//		}
+//
+//		return new ArrayList<Result>();
+//	}
+//
+//	/**
+//	 * MD추천상품 목록. 매출급상승 카테고리별 상품 목록
+//	 * 사용되는 화면 영역)
+//	 * 		메인 > MD추천상품
+//	 * @param size - 결과에 포함할 상품수
+//	 * @param cateId - 카테고리ID
+//	 * @return
+//	 * @author gagamel
+//	 * @since 2021. 6. 30
+//	 */
+//	public Collection<GagaMap> getMdRecommendGoodsList(int size, String cateId) {
+//		// 1.매출급상승 카테고리 목록
+//		String requestUrl = apiUrl + "/m063?cuid=" + cuid;
+//		Eigeneai eigeneai = this.getEigeneaiInfo(requestUrl);
+//		if (eigeneai.getResults() != null && !eigeneai.getResults().isEmpty()) {
+//			Collection<Result> cateList = eigeneai.getResults();
+//
+//			if (cateList != null && !cateList.isEmpty()) {
+//				for (Result cateInfo : cateList) {
+//					if (StringUtils.isNotBlank(cateInfo.getCategoryId())) {
+//						GagaMap dataMap = new GagaMap();
+//						dataMap.setString("styleNm", cateInfo.getCategoryId());
+//
+//						// 2.카테고리별 상품 목록
+//						requestUrl = apiUrl + "/c001?cuid=" + cuid + "&size=" + size + "&cids=" + cateInfo.getCategoryId();
+//						eigeneai = this.getEigeneaiInfo(requestUrl);
+//						if (eigeneai.getResults() != null && !eigeneai.getResults().isEmpty()) {
+//							dataMap.set("", eigeneai.getResults());
+//						}
+//					}
+//				}
+//			}
+//		}
+//
+//		return new ArrayList<GagaMap>();
+//	}
+
+	/**
+	 * 주간판매베스트추천상품 목록
+	 * 사용되는 화면 영역)
+	 * 		베스트 > 전체 베스트
+	 * @param size - 결과에 포함할 상품수
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	public Collection<Result> getWeeklySellBestGoodsList(int size) {
+		String requestUrl = apiUrl + "/m061?cuid=" + cuid + "&size=" + size;
+
+		Eigeneai eigeneai = this.getEigeneaiInfo(requestUrl);
+		if (eigeneai.getResults() != null && !eigeneai.getResults().isEmpty()) {
+			return eigeneai.getResults();
+		}
+
+		return new ArrayList<Result>();
+	}
+
+	/**
+	 * 브랜드 주간판매베스트추천상품 목록
+	 * 사용되는 화면 영역)
+	 * 		브랜드메인 > 베스트 상품
+	 * @param size - 결과에 포함할 상품수
+	 * @param brandGroupNo - 브랜드그룹번호
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 6. 30
+	 */
+	public Collection<Result> getBrandWeeklySellBestGoodsList(int size, Integer brandGroupNo) {
+		String requestUrl = apiUrl + "/m061?cuid=" + cuid + "&size=" + size + "&bids=" + brandGroupNo;
+
+		Eigeneai eigeneai = this.getEigeneaiInfo(requestUrl);
+		if (eigeneai.getResults() != null && !eigeneai.getResults().isEmpty()) {
+			return eigeneai.getResults();
+		}
+
+		return new ArrayList<Result>();
+	}
+
+	/**
+	 * 아울렛 주간판매베스트추천상품 목록
+	 * 사용되는 화면 영역)
+	 * 		아울렛메인 > 베스트
+	 * @param size - 결과에 포함할 상품수
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 6. 30
+	 */
+	public Collection<Result> getOutletWeeklySellBestGoodsList(int size) {
+		String requestUrl = apiUrl + "/m064?cuid=" + cuid + "&size=" + size;
+
+		Eigeneai eigeneai = this.getEigeneaiInfo(requestUrl);
+		if (eigeneai.getResults() != null && !eigeneai.getResults().isEmpty()) {
+			return eigeneai.getResults();
+		}
+
+		return new ArrayList<Result>();
+	}
+
+	/**
+	 * 브랜드 월간클릭베스트추천상품 목록
+	 * 사용되는 화면 영역)
+	 * 		브랜드메인 > MD Pick
+	 * @param size - 결과에 포함할 상품수
+	 * @param brandGroupNo - 브랜드그룹번호
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 6. 30
+	 */
+	public Collection<Result> getBrandMonthlyClickBestGoodsList(int size, Integer brandGroupNo) {
+		String requestUrl = apiUrl + "/m062?cuid=" + cuid + "&size=" + size + "&bids=" + brandGroupNo;
+
+		Eigeneai eigeneai = this.getEigeneaiInfo(requestUrl);
+		if (eigeneai.getResults() != null && !eigeneai.getResults().isEmpty()) {
+			return eigeneai.getResults();
+		}
+
+		return new ArrayList<Result>();
+	}
+
+	/**
+	 * 아울렛 월간클릭베스트추천상품 목록
+	 * 사용되는 화면 영역)
+	 * 		아울렛메인 > MD Pick
+	 * @param size - 결과에 포함할 상품수
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 6. 30
+	 */
+	public Collection<Result> getOutletMonthlyClickBestGoodsList(int size) {
+		String requestUrl = apiUrl + "/m065?cuid=" + cuid + "&cids=" + "" + "&size=" + size;
+
+		Eigeneai eigeneai = this.getEigeneaiInfo(requestUrl);
+		if (eigeneai.getResults() != null && !eigeneai.getResults().isEmpty()) {
+			return eigeneai.getResults();
+		}
+
+		return new ArrayList<Result>();
+	}
+
+	/**
+	 * 실시간 많이 조회되고 있는 상품 목록
+	 * 사용되는 화면 영역)
+	 * 		퀵메뉴 > 쇼핑백 (담은 상품 없는 경우)
+	 * 		쇼핑백 > 추천상품 (담은 상품 없는 경우)
+	 * 		검색 > 검색 시작화면
+	 * @param size - 결과에 포함할 상품수
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 6. 30
+	 */
+	public Collection<Item> getRealtimeViewGoodsList(int size) {
+		String requestUrl = rtsApiUrl + "/stream?cuid=" + cuid + "&size=" + size + "&type=view";
+
+		Eigeneai eigeneai = this.getEigeneaiInfo(requestUrl);
+		if (eigeneai.getItems() != null && !eigeneai.getItems().isEmpty()) {
+			return eigeneai.getItems();
+		}
+
+		return new ArrayList<Item>();
+	}
+
+	/**
+	 * 실시간 많이 조회되고 있는 베스트 상품 목록
+	 * 사용되는 화면 영역)
+	 * 		베스트 > 베스트상품_실시간 베스트
+	 * @param size - 결과에 포함할 상품수
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 6. 30
+	 */
+	public Collection<Item> getRealtimeViewBestGoodsList(int size) {
+		String requestUrl = rtsApiUrl + "/stats-transition?cuid=" + cuid + "&size=" + size + "&type=view&interval=30&span=30";
+
+		Eigeneai eigeneai = this.getEigeneaiInfo(requestUrl);
+		if (eigeneai.getItems() != null && !eigeneai.getItems().isEmpty()) {
+			return eigeneai.getItems();
+		}
+
+		return new ArrayList<Item>();
+	}
+
+	/**
+	 * 매출급상승 카테고리별 상품 목록
+	 * @param size - 결과에 포함할 상품수
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	public Eigeneai getSalesSoaringGoodsList() {
+		// TODO: 매출급상승 카테고리 5개 조회 후 카테고리별 상품 7개 조회
+		String requestUrl = apiUrl + "/m010?cuid=" + cuid + "&size=5";
+		return this.getEigeneaiInfo(requestUrl);
+	}
+
+	/**
+	 * 고객의 최근검색어별 상품 목록
+	 * 사용되는 화면 영역)
+	 * 		검색 > 검색결과 추천상품
+	 * 		메인 > 당신을 위한 제안 > 검색어 연관상품 추천
+	 * @param size - 결과에 포함할 상품수
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	public Collection<Eigeneai> getCustomerKeywordGoodsList() {
+		Collection<Eigeneai> dataList = new ArrayList<>();
+
+		// 고객별 최근검색어 목록. TODO: 아이겐에서 미개발
+		String requestUrl = apiUrl + "/m010?cuid=" + cuid + "&size=5";
+		Eigeneai eigeneai = this.getEigeneaiInfo(requestUrl);
+
+		Collection<Eigeneai.Result> resultList = eigeneai.getResults();
+		if (resultList == null || resultList.isEmpty()) {
+			return dataList;
+		}
+
+		try {
+			// 고객별 최근검색어 기준 검색어연관상품 목록 조회
+			for (Eigeneai.Result result : resultList) {
+				dataList.add(this.getKeywordGoodsList(10, result.getCategoryId()));
+			}
+		} catch (UnsupportedEncodingException e) {
+			// Do nothing
+		}
+
+		return dataList;
+	}
+
+	/**
+	 * 검색어 연관상품 목록
+	 * 사용되는 화면 영역)
+	 * 		검색 > 검색결과 추천상품
+	 * @param size - 결과에 포함할 상품수
+	 * @param keyword - 키워드
+	 * @exception UnsupportedEncodingException
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	private Eigeneai getKeywordGoodsList(int size, String keyword) throws UnsupportedEncodingException {
+		String requestUrl = apiUrl + "/s003?cuid=" + cuid + "&size=" + size + "&st=" + URLEncoder.encode(keyword, "UTF-8") + "&cps=true&cpt=m004";
+		return this.getEigeneaiInfo(requestUrl);
+	}
+
+	/**
+	 * 연관상품 목록
+	 * 사용되는 화면 영역)
+	 * 		쇼핑백 > 추천상품 (담은 상품이 있는 경우)
+	 * 		상품상세 > 함께 본 상품
+	 * @param goodsCd - 상품코드
+	 * @param size - 결과에 포함할 상품수
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	public Collection<Result> getRelatedGoodsList(String goodsCd, int size) {
+		String requestUrl = apiUrl + "/a037?cuid=" + cuid + "&size=" + size + "&iids=" + goodsCd + "&cps=true&cpt=m001";
+
+		Eigeneai eigeneai = this.getEigeneaiInfo(requestUrl);
+		if (eigeneai.getResults() != null && !eigeneai.getResults().isEmpty()) {
+			return eigeneai.getResults();
+		}
+
+		return new ArrayList<Result>();
+	}
+
+	/**
+	 * 브랜드 연관상품 목록
+	 * 사용되는 화면 영역)
+	 * 		상품상세 > 브랜드연관상품
+	 * @param size - 결과에 포함할 상품수
+	 * @param goodsCd - 상품코드
+	 * @param brandGroupNo - 브랜드그룹번호
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	public Collection<Result> getBrandRelatedGoodsList(int size, String goodsCd, Integer brandGroupNo) {
+		String requestUrl = apiUrl + "/a038?cuid=" + cuid + "&size=" + size + "&iids=" + goodsCd + "&cps=true&cpt=c001&cpcids=" + brandGroupNo;
+
+		Eigeneai eigeneai = this.getEigeneaiInfo(requestUrl);
+		if (eigeneai.getResults() != null && !eigeneai.getResults().isEmpty()) {
+			return eigeneai.getResults();
+		}
+
+		return new ArrayList<Result>();
+	}
+
+	/**
+	 * 동일 카테고리 연관상품 목록
+	 * 사용되는 화면 영역)
+	 * 		상품상세 > 비슷한 상품
+	 * @param size - 결과에 포함할 상품수
+	 * @param goodsCd - 상품코드
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	public Collection<Result> getSameCategoryRelatedGoodsList(int size, String goodsCd) {
+		String requestUrl = apiUrl + "/a039?cuid=" + cuid + "&size=" + size + "&iids=" + goodsCd + "&cps=true&cpt=m002";
+
+		Eigeneai eigeneai = this.getEigeneaiInfo(requestUrl);
+		if (eigeneai.getResults() != null && !eigeneai.getResults().isEmpty()) {
+			return eigeneai.getResults();
+		}
+
+		return new ArrayList<Result>();
+	}
+
+	/**
+	 * 상품의 실시간 조회수
+	 * 사용되는 화면 영역)
+	 * 		상품상세 > 실시간 뷰
+	 * @param goodsCd - 상품코드
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	public int getRealtimeViewCount(String goodsCd) {
+		String requestUrl = rtsApiUrl + "/stat?cuid=" + cuid + "&itemid=" + goodsCd + "&type=view";
+
+		Eigeneai eigeneai = this.getEigeneaiInfo(requestUrl);
+		if (eigeneai.getItem() != null) {
+			return eigeneai.getItem().getCount();
+		}
+
+		return 0;
+	}
+
+	/**
+	 * 아이겐 정보 조회
+	 * @param requestUrl - Reqeust URL
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 14
+	 */
+	private Eigeneai getEigeneaiInfo(String requestUrl) {
+		log.info("requestUrl: {}", requestUrl);
+		URI url = URI.create(requestUrl);
+
+		// GET방식으로 호출
+		ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class);
+		log.info("responseEntity.getStatusCode(): {} ", responseEntity.getStatusCode());
+
+		String responseJson = responseEntity.getBody();
+		log.info("responseEntity.getBody(): {}", responseJson);
+
+		if (!responseEntity.getStatusCode().equals(HttpStatus.OK)) {
+			return null;
+		}
+
+		Gson gson = new Gson();
+		return gson.fromJson(responseJson, Eigeneai.class);
+	}
+
 }

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

@@ -188,7 +188,8 @@ 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");
+		String telNo = nodeMap.getString("str_ADDR_TEL_NO");     // YES24 회원정보가 - 필수전화
+		String mobNo = nodeMap.getString("str_ADDR_MOB_NO"); // YES24 회원정보가 - 휴대전화 
 		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");
@@ -196,6 +197,8 @@ public class Yes24Login {
 		String homeBaseAddr = nodeMap.getString("str_ADDR_ADDR1");
 		String homeDtlAddr = nodeMap.getString("str_ADDR_ADDR2");
 
+		String cellphnno = getValidationCellphone(telNo,mobNo);
+		
 		resultMap.setString("memNo", memNo);
 		resultMap.setString("snsId", snsId);
 		resultMap.setString("custNm", custNm);
@@ -291,6 +294,17 @@ public class Yes24Login {
 			log.error(e.getMessage());
 		}
 	}
+	
+	private String getValidationCellphone (String telNo, String mobNo) {
+		String result = "";
+		String regExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$";
+		if(telNo.matches(regExp)) {
+			return telNo;
+		} else if(mobNo.matches(regExp)) {
+			return mobNo;
+		}
+		return result;
+	}
 
 
 

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

@@ -1181,15 +1181,15 @@ public class TsfDisplayController extends TsfBaseController {
 	}
 
 	/**
-	 * 주간베스트추천상품 목록
+	 * 주간판매베스트추천상품 목록
 	 * @return
 	 * @author gagamel
 	 * @since 2021. 6. 29
 	 */
 	@GetMapping("/weekly/best/list")
 	@ResponseBody
-	public Collection<Result> getWeeklyBestGoodsList() {
-		return eigeneaiApi.getWeeklyBestGoodsList(30, 1100).getResults();
+	public Collection<Result> getWeeklySellBestGoodsList() {
+		return eigeneaiApi.getWeeklySellBestGoodsList(30);
 	}
 
 }

+ 13 - 285
src/main/java/com/style24/front/biz/web/TsfGoodsController.java

@@ -51,7 +51,7 @@ import com.style24.persistence.domain.ReinboundInform;
 import com.style24.persistence.domain.Review;
 import com.style24.persistence.domain.SizeInfo;
 import com.style24.persistence.domain.WishList;
-import com.style24.persistence.domain.eigene.Eigeneai;
+import com.style24.persistence.domain.eigene.Eigeneai.Result;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -239,45 +239,7 @@ public class TsfGoodsController extends TsfBaseController {
 			// pc 추천 영역
 			if ("P".equals(paramsGoods.getFrontGb())) {
 				// 이상픔과 함께본 상품
-				paramsGoods.setMaxRownum(15);
-				String[] arrGoodsCd = {
-					"B192DO995P",
-					"L191TJ571P",
-					"L191WB304P",
-					"B192DO996P",
-					"L191WB305P",
-					"B192SH720P",
-					"L191WB703P",
-					"10813858",
-					"10813859",
-					"L171JP121P",
-					"10813860",
-					"L171JP721P",
-					"10813862",
-					"L171TJ501P",
-					"10814432",
-					"10813855",
-					"L171TJ561P",
-					"B172SH710P",
-					"B192SH730P"};
-
-				StringBuilder sql = new StringBuilder();
-				if (arrGoodsCd.length > 0) {
-					int idx = 1;
-					for (String goodsCd : arrGoodsCd) {
-						if (!StringUtils.isBlank(goodsCd)) {
-							if (idx > 1) {
-								sql.append("UNION ALL ");
-							}
-							sql.append("SELECT '").append(goodsCd).append("' AS GOODS_CD, ").append(idx++).append(" AS DISP_ORD FROM DUAL\r\n");
-						}
-					}
-					paramsGoods.setGoodsSql(sql.toString());
-				}
-
-				paramsGoods.setArrGoodsCd(arrGoodsCd);
-				mav.addObject("togetherGoodsList", goodsService.getRecommendGoodsList(paramsGoods));
-
+				mav.addObject("togetherGoodsList", eigeneaiApi.getRelatedGoodsList(goods.getGoodsCd(),15));
 			}
 
 		} else {
@@ -346,124 +308,17 @@ public class TsfGoodsController extends TsfBaseController {
 			// pc 추천 영역
 			if ("P".equals(paramsGoods.getFrontGb())) {
 				// 이상픔과 함께본 상품
-				paramsGoods.setMaxRownum(15);
-				String[] arrGoodsCd = {
-					"B192DO995P",
-					"L191TJ571P",
-					"L191WB304P",
-					"B192DO996P",
-					"L191WB305P",
-					"B192SH720P",
-					"L191WB703P",
-					"10813858",
-					"10813859",
-					"L171JP121P",
-					"10813860",
-					"L171JP721P",
-					"10813862",
-					"L171TJ501P",
-					"10814432",
-					"10813855",
-					"L171TJ561P",
-					"B172SH710P",
-					"B192SH730P"};
-
-				StringBuilder sql = new StringBuilder();
-				if (arrGoodsCd.length > 0) {
-					int idx = 1;
-					for (String goodsCd : arrGoodsCd) {
-						if (!StringUtils.isBlank(goodsCd)) {
-							if (idx > 1) {
-								sql.append("UNION ALL ");
-							}
-							sql.append("SELECT '").append(goodsCd).append("' AS GOODS_CD, ").append(idx++).append(" AS DISP_ORD FROM DUAL\r\n");
-						}
-					}
-					paramsGoods.setGoodsSql(sql.toString());
-				}
-
-				paramsGoods.setArrGoodsCd(arrGoodsCd);
-				mav.addObject("togetherGoodsList", goodsService.getRecommendGoodsList(paramsGoods));
+//				log.info("[상품상세  이상픔과 함께본 상품] =={}", eigeneaiApi.getRelatedGoodsList(goods.getGoodsCd(),15));
+				mav.addObject("togetherGoodsList", eigeneaiApi.getRelatedGoodsList(goods.getGoodsCd(),15));
 
 				// 브랜드 추천 상품
-				paramsGoods.setMaxRownum(15);
-				String[] arrBrandGoodsCd = {
-					"L191WB304P",
-					"B192DO996P",
-					"L191WB305P",
-					"B192DO995P",
-					"L191TJ571P",
-					"B192SH720P",
-					"L191WB703P",
-					"10813858",
-					"10813859",
-					"L171JP121P",
-					"10813860",
-					"L171JP721P",
-					"10813862",
-					"L171TJ501P",
-					"10814432",
-					"10813855",
-					"L171TJ561P",
-					"B172SH710P",
-					"B192SH730P"};
-
-				StringBuilder brandSql = new StringBuilder();
-				if (arrGoodsCd.length > 0) {
-					int idx = 1;
-					for (String goodsCd : arrBrandGoodsCd) {
-						if (!StringUtils.isBlank(goodsCd)) {
-							if (idx > 1) {
-								brandSql.append("UNION ALL ");
-							}
-							brandSql.append("SELECT '").append(goodsCd).append("' AS GOODS_CD, ").append(idx++).append(" AS DISP_ORD FROM DUAL\r\n");
-						}
-					}
-					paramsGoods.setGoodsSql(brandSql.toString());
-				}
-
-				paramsGoods.setArrGoodsCd(arrBrandGoodsCd);
-				mav.addObject("recommendGoodsList", goodsService.getRecommendGoodsList(paramsGoods));
+//				log.info("[상품상세  브랜드 추천 상품] =={}", eigeneaiApi.getBrandRelatedGoodsList(15,goods.getGoodsCd(), goods.getBrandGroupNo()));
+				mav.addObject("recommendGoodsList", eigeneaiApi.getBrandRelatedGoodsList(15,goods.getGoodsCd(), goods.getBrandGroupNo()));
 
 				// 비슷한 상품
-				paramsGoods.setMaxRownum(15);
-				String[] arrLikeGoodsCd = {
-					"B192DO995P",
-					"L191TJ571P",
-					"L191WB304P",
-					"L171TJ561P",
-					"B172SH710P",
-					"B192SH730P",
-					"B192DO996P",
-					"L191WB305P",
-					"B192SH720P",
-					"L191WB703P",
-					"10813858",
-					"10813859",
-					"L171JP121P",
-					"10813860",
-					"L171JP721P",
-					"10813862",
-					"L171TJ501P",
-					"10814432",
-					"10813855"};
-
-				StringBuilder likeSql = new StringBuilder();
-				if (arrGoodsCd.length > 0) {
-					int idx = 1;
-					for (String goodsCd : arrLikeGoodsCd) {
-						if (!StringUtils.isBlank(goodsCd)) {
-							if (idx > 1) {
-								likeSql.append("UNION ALL ");
-							}
-							likeSql.append("SELECT '").append(goodsCd).append("' AS GOODS_CD, ").append(idx++).append(" AS DISP_ORD FROM DUAL\r\n");
-						}
-					}
-					paramsGoods.setGoodsSql(likeSql.toString());
-				}
+//				log.info("[상품상세  비슷한 상품] =={}", eigeneaiApi.getSameCategoryRelatedGoodsList(15,goods.getGoodsCd()));
+				mav.addObject("likeGoodsList", eigeneaiApi.getSameCategoryRelatedGoodsList(15,goods.getGoodsCd()));
 
-				paramsGoods.setArrGoodsCd(arrLikeGoodsCd);
-				mav.addObject("likeGoodsList", goodsService.getRecommendGoodsList(paramsGoods));
 			}
 
 			// 상품 공통 베너
@@ -1148,51 +1003,10 @@ public class TsfGoodsController extends TsfBaseController {
 	 */
 	@PostMapping("/detail/together/frame")
 	public ModelAndView goodsTogetherForm(@RequestBody Goods goods) {
-
 		ModelAndView mav = new ModelAndView();
-		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
-		setGoods(goods);
-		goods.setMaxRownum(15);
-		String[] arrGoodsCd = {"10813855",
-			"L171TJ561P",
-			"B172SH710P",
-			"B192DO995P",
-			"L191TJ571P",
-			"L191WB304P",
-			"B192DO996P",
-			"L191WB305P",
-			"B192SH720P",
-			"L191WB703P",
-			"10813858",
-			"10813859",
-			"L171JP121P",
-			"10813860",
-			"L171JP721P",
-			"10813862",
-			"L171TJ501P",
-			"10814432",
-			"B192SH730P"};
-
-		StringBuilder sql = new StringBuilder();
-		if (arrGoodsCd.length > 0) {
-			int idx = 1;
-			for (String goodsCd : arrGoodsCd) {
-				if (!StringUtils.isBlank(goodsCd)) {
-					if (idx > 1) {
-						sql.append("UNION ALL ");
-					}
-					sql.append("SELECT '").append(goodsCd).append("' AS GOODS_CD, ").append(idx++).append(" AS DISP_ORD FROM DUAL\r\n");
-				}
-			}
-			goods.setGoodsSql(sql.toString());
-		}
-
-		goods.setArrGoodsCd(arrGoodsCd);
-		mav.addObject("goodsList", goodsService.getRecommendGoodsList(goods));
-		//log.info("goodsTogetherForm = goods{}", goods);
+		mav.addObject("goodsList", eigeneaiApi.getRelatedGoodsList(goods.getGoodsCd(),15));
 		goods.setIthrCd("IN15_03");
 		mav.addObject("params", goods);
-
 		mav.setViewName(super.getDeviceViewName("goods/GoodsOtherForm"));
 		return mav;
 	}
@@ -1206,53 +1020,10 @@ public class TsfGoodsController extends TsfBaseController {
 	 */
 	@PostMapping("/detail/recommend/frame")
 	public ModelAndView goodsRecommendForm(@RequestBody Goods goods) {
-
 		ModelAndView mav = new ModelAndView();
-		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
-		setGoods(goods);
-		goods.setMaxRownum(15);
-
-		String[] arrGoodsCd = {"10813855",
-			"L171TJ561P",
-			"B172SH710P",
-			"B192DO995P",
-			"L191TJ571P",
-			"L191WB304P",
-			"B192DO996P",
-			"L191WB305P",
-			"B192SH720P",
-			"L191WB703P",
-			"10813858",
-			"10813859",
-			"L171JP121P",
-			"10813860",
-			"L171JP721P",
-			"10813862",
-			"L171TJ501P",
-			"10814432",
-			"B192SH730P"};
-
-		StringBuilder sql = new StringBuilder();
-		if (arrGoodsCd.length > 0) {
-			int idx = 1;
-			for (String goodsCd : arrGoodsCd) {
-				if (!StringUtils.isBlank(goodsCd)) {
-					if (idx > 1) {
-						sql.append("UNION ALL ");
-					}
-					sql.append("SELECT '").append(goodsCd).append("' AS GOODS_CD, ").append(idx++).append(" AS DISP_ORD FROM DUAL\r\n");
-				}
-			}
-			goods.setGoodsSql(sql.toString());
-		}
-
-		goods.setArrGoodsCd(arrGoodsCd);
-
-		mav.addObject("goodsList", goodsService.getRecommendGoodsList(goods));
-		//log.info("goodsRecommendForm = goods{}", goods);
+		mav.addObject("goodsList", eigeneaiApi.getBrandRelatedGoodsList(15,goods.getGoodsCd(), goods.getBrandGroupNo()));
 		goods.setIthrCd("IN15_04");
 		mav.addObject("params", goods);
-
 		mav.setViewName(super.getDeviceViewName("goods/GoodsOtherForm"));
 		return mav;
 	}
@@ -1266,53 +1037,10 @@ public class TsfGoodsController extends TsfBaseController {
 	 */
 	@PostMapping("/detail/like/frame")
 	public ModelAndView goodsLikeForm(@RequestBody Goods goods) {
-
 		ModelAndView mav = new ModelAndView();
-		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
-		setGoods(goods);
-		goods.setMaxRownum(15);
-
-		String[] arrGoodsCd = {"10813855",
-			"L171TJ561P",
-			"B172SH710P",
-			"B192DO995P",
-			"L191TJ571P",
-			"L191WB304P",
-			"B192DO996P",
-			"L191WB305P",
-			"B192SH720P",
-			"L191WB703P",
-			"10813858",
-			"10813859",
-			"L171JP121P",
-			"10813860",
-			"L171JP721P",
-			"10813862",
-			"L171TJ501P",
-			"10814432",
-			"B192SH730P"};
-
-		StringBuilder sql = new StringBuilder();
-		if (arrGoodsCd.length > 0) {
-			int idx = 1;
-			for (String goodsCd : arrGoodsCd) {
-				if (!StringUtils.isBlank(goodsCd)) {
-					if (idx > 1) {
-						sql.append("UNION ALL ");
-					}
-					sql.append("SELECT '").append(goodsCd).append("' AS GOODS_CD, ").append(idx++).append(" AS DISP_ORD FROM DUAL\r\n");
-				}
-			}
-			goods.setGoodsSql(sql.toString());
-		}
-
-		goods.setArrGoodsCd(arrGoodsCd);
-
-		mav.addObject("goodsList", goodsService.getRecommendGoodsList(goods));
-		//log.info("goodsLikeForm = goods{}", goods);
+		mav.addObject("goodsList", eigeneaiApi.getSameCategoryRelatedGoodsList(15,goods.getGoodsCd()));
 		goods.setIthrCd("IN15_05");
 		mav.addObject("params", goods);
-
 		mav.setViewName(super.getDeviceViewName("goods/GoodsOtherForm"));
 		return mav;
 	}
@@ -1801,8 +1529,8 @@ public class TsfGoodsController extends TsfBaseController {
 	 */
 	@GetMapping("/same/category/goods/list/{goodsCd}")
 	@ResponseBody
-	public Eigeneai getSameCategoryGoodsList(@PathVariable String goodsCd) {
-		return eigeneaiApi.getSameCategoryRelatedGoodsList(goodsCd, 10);
+	public Collection<Result> getSameCategoryGoodsList(@PathVariable String goodsCd) {
+		return eigeneaiApi.getSameCategoryRelatedGoodsList(10, goodsCd);
 	}
 
 }

+ 25 - 4
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -21,10 +21,6 @@ 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.GagaResponse;
-import com.gagaframework.web.rest.server.GagaResponseStatus;
-import com.gagaframework.web.util.GagaCookieUtil;
 import com.style24.core.biz.service.TscCouponService;
 import com.style24.core.biz.service.TscCustomerService;
 import com.style24.core.biz.service.TscEnvsetService;
@@ -74,6 +70,11 @@ import com.style24.persistence.domain.WishList;
 
 import lombok.extern.slf4j.Slf4j;
 
+import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.rest.server.GagaResponse;
+import com.gagaframework.web.rest.server.GagaResponseStatus;
+import com.gagaframework.web.util.GagaCookieUtil;
+
 /**
  * 마이페이지 Controller
  * 
@@ -2659,4 +2660,24 @@ public class TsfMypageController extends TsfBaseController {
 		
 		return super.ok(env.getProperty("SUCC_0005"));
 	}
+	
+	
+	/**
+	 * 위시리스트 상품여부 
+	 * 
+	 * @return
+	 * @author eskim
+	 * @since 2021. 6. 30
+	 */
+	@GetMapping("/wish/list/check/{goodsCd}")
+	@ResponseBody
+	public String getAjaxWishListCheck(@PathVariable(value = "goodsCd") String goodsCd) {
+		String result = "N";
+		if (wishListService.getWishListGoodsCount(goodsCd) > 0) {
+			result = "Y";
+		}
+		return result;
+	}
+	
+	
 }

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

@@ -734,8 +734,9 @@ public class TsfPlanningController extends TsfBaseController {
 				        cal.setTime(new Date());
 				        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
 				        int usableDay = tPlan.getPntUsableDay();
-				       cal.add(Calendar.DATE, +usableDay);
+				        cal.add(Calendar.DATE, +usableDay);
 				        point.setExpBeDt(df.format(cal.getTime()));
+				        point.setSignGb("+");
 						corePointService.saveCustomerPoint(point);
 						String msg =  "축하합니다. " + toNumFormat(pointAmt) + " 포인트가 지급 되었습니다!";
 						result.set("msg", msg);
@@ -773,8 +774,9 @@ public class TsfPlanningController extends TsfBaseController {
 				        cal.setTime(new Date());
 				        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
 				        int usableDay = tPlan.getPntUsableDay();
-				       cal.add(Calendar.DATE, +usableDay);
+				        cal.add(Calendar.DATE, +usableDay);
 				        point.setExpBeDt(df.format(cal.getTime()));
+				        point.setSignGb("+");
 						corePointService.saveCustomerPoint(point);
 						
 						CustCoupon coupon = new CustCoupon();
@@ -790,6 +792,7 @@ public class TsfPlanningController extends TsfBaseController {
 						coreCouponService.saveCouponIssue(coupon);
 						String msg =  "축하합니다. " + toNumFormat(pointAmt) + " 포인트와 " + toNumFormat(coupon.getDcVal()) +coupon.getDcWay() + " 할인쿠폰이 지급 되었습니다!";
 						result.set("msg", msg);
+						break;
 					}
 
 				}else {

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

@@ -93,7 +93,7 @@ public class Social extends TscBaseDomain{
 		// Pagination
 		private TscPageRequest pageable;
 		private int pageNo = 1;
-		private int pageSize = 10;
+		private int pageSize = 50;
 		private int pageUnit = 10;
 		
 }

+ 21 - 2
src/main/java/com/style24/persistence/domain/eigene/Eigeneai.java

@@ -16,8 +16,10 @@ import lombok.Data;
 public class Eigeneai implements Serializable {
 
 	private String recType;					// 추천영역코드
-	private Collection<Product> products;	// 인풋상품정보
-	private Collection<Result> results;		// 결과상품정보
+	private Collection<Product> products;	// 인풋상품정보 목록
+	private Collection<Result> results;		// 결과상품정보 목록
+	private Collection<Item> items;			// 실시간상품정보 목록
+	private Item item;						// 실시간상품정보
 
 	// 인풋상품정보
 	@Data
@@ -31,6 +33,8 @@ public class Eigeneai implements Serializable {
 		private String category3;		// 3레벨카테고리
 		private double originalPrice;	// 정상가
 		private double salePrice;		// 판매가
+		private String brandId;			// 브랜드ID(브랜드그룹번호)
+		private String brandName;		// 브랜드명
 	}
 
 	// 결과상품정보
@@ -43,4 +47,19 @@ public class Eigeneai implements Serializable {
 		private Product product;	// 상품정보
 	}
 
+	// 실시간 상품정보
+	@Data
+	public class Item {
+		private int count;				// view건수
+		private String itemId;			// 상품코드
+		private String imageUrl;		// 상품이미지URL
+		private String itemName;		// 상품명
+		private String itemUrl;			// 상품상세페이지URL
+		private String categoryId;		// 카테고리ID
+		private double originalPrice;	// 정상가
+		private double salePrice;		// 판매가
+		private String brandId;			// 브랜드ID(브랜드그룹번호)
+		private String brandName;		// 브랜드명
+	}
+
 }

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

@@ -1221,8 +1221,8 @@
 		                  , A.MAIN_PIMG AS IMG_PATH1
 		                  , CONCAT('/planning/detail/form?planSq=',A.PLAN_SQ) AS STR_VAR1
 		                  , A.PLAN_NM AS STR_TITLE1
-		                  , A.DTL_TITLE1 AS STR_TITLE2
-		                  , '' AS SUB_TEXT1
+		                  , '' AS STR_TITLE2
+		                  , A.DTL_TITLE1 AS SUB_TEXT1
 		                  , '' AS SUB_TEXT2
 		            FROM  TB_PLAN A
 		            INNER JOIN TB_PLAN_CATE B ON A.PLAN_SQ = B.PLAN_SQ

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

@@ -845,8 +845,7 @@
 		WITH  TAB_MASTER_GOODS AS (
 		SELECT  Z.*
 		FROM (
-		    SELECT @rownum := @rownum + 1 AS RNUM
-		         , B.GOODS_CD
+		    SELECT B.GOODS_CD
 		         , G.GOODS_NM
 		         , G.GOODS_GB
 		         , G.FOREIGN_BUY_YN
@@ -861,7 +860,6 @@
 		         , G.CURR_PRICE
 		         , GS.STOCK_QTY
 		    FROM TB_TMTB A
-		    JOIN ( SELECT @rownum := 0) R
 		    INNER JOIN TB_TMTB_APPLY_GOODS B ON A.TMTB_SQ  = B.TMTB_SQ
 		                                     AND B.DEL_YN = 'N'
 		                                     AND B.GOODS_GB IN ( 'G800_10', 'G800_20')  -- 기본과 적용상품
@@ -899,8 +897,8 @@
 		    AND A.TMTB_SQ = #{tmtbSq}
 		    </otherwise>
 		    </choose>
+		    LIMIT #{maxRownum}
 		    ) Z
-		WHERE RNUM <![CDATA[<= ]]>#{maxRownum}
 		)
 		, TAB_GOODS AS (
 		    SELECT G.GOODS_CD
@@ -1845,7 +1843,7 @@
 		         , G.CURR_PRICE         /*현재판매가*/
 		         , G.REG_DT             /*등록일시*/
 		    FROM   (
-		            SELECT CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
+		            SELECT DISTINCT CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
 		                            BG.BRAND_GROUP_ENM
 		                        ELSE
 		                            BG.BRAND_GROUP_KNM

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

@@ -834,7 +834,7 @@
 		<if test="cpnId != null and cpnId != ''">
 		AND C.CPN_ID  = #{cpnId}
 		</if>
-		AND C.CPN_TYPE IN ('G230_11','G230_30')
+		AND C.CPN_TYPE IN ('G230_11','G230_30','G230_20')
 		AND NOW() BETWEEN C.DOWN_STDT AND C.DOWN_EDDT
 		AND NOW()  <![CDATA[<=]]>  IF (C.PD_GB = 'D', CONCAT(CURRENT_DATE + INTERVAL C.AVAIL_DAYS DAY, ' 23:59:59'), C.AVAIL_EDDT)
 		AND (CASE WHEN 'P' = #{frontGb} THEN C.DC_PVAL

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

@@ -566,8 +566,10 @@
 		               END                                                             AS BRAND_NM
 		             , B.BRAND_ENM
 				     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT)							AS ORD_DTL_STAT_NM
-					 , IFNULL(OCD.ORD_REQ_CHG_QTY, 0) AS ORD_REQ_CHG_QTY
-					 , OD.ORD_QTY - OD.CNCL_RTN_QTY - IFNULL(OCD.ORD_REQ_CHG_QTY, 0)    AS ORD_CAN_CHG_QTY
+					 -- , IFNULL(OCD.ORD_REQ_CHG_QTY, 0) AS ORD_REQ_CHG_QTY
+					 -- , OD.ORD_QTY - OD.CNCL_RTN_QTY - IFNULL(OCD.ORD_REQ_CHG_QTY, 0)    AS ORD_CAN_CHG_QTY
+					 , IFNULL((SELECT SUM(OCD.CHG_QTY) FROM TB_ORDER_CHANGE_DETAIL OCD WHERE OCD.ORD_DTL_NO = OD.ORD_DTL_NO GROUP BY OCD.ORD_DTL_NO), 0) AS ORD_REQ_CHG_QTY
+		             , OD.ORD_QTY - OD.CNCL_RTN_QTY - IFNULL((SELECT SUM(OCD.CHG_QTY) FROM TB_ORDER_CHANGE_DETAIL OCD WHERE OCD.ORD_DTL_NO = OD.ORD_DTL_NO GROUP BY OCD.ORD_DTL_NO), 0) AS ORD_CAN_CHG_QTY
 					 , I.ITEMKIND_NM 
 		   	         , I.ITEMKIND_CD 
 			         , I.SIZE_GB 
@@ -624,15 +626,6 @@
 			                                      AND R.ORD_DTL_NO = OD.ORD_DTL_NO
 			                                      AND R.DEL_YN = 'N'
 			      </if>
-				  LEFT OUTER JOIN (SELECT OD.ORD_DTL_NO
-										, SUM(OCD.CHG_QTY) AS ORD_REQ_CHG_QTY
-									 FROM TB_ORDER_CHANGE_DETAIL OCD
-									INNER JOIN TB_ORDER_DETAIL OD
-									   ON OCD.ORD_DTL_NO = OD.ORD_DTL_NO
-									WHERE OCD.DEL_YN = 'N'
-									GROUP BY OCD.ORD_DTL_NO
-								  ) OCD
-				    ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
 				LEFT OUTER JOIN TB_COLOR C ON ODI.OPT_CD1 = C.COLOR_CD
 		                                   AND C.USE_YN = 'Y'
 				  WHERE 1=1

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

@@ -296,4 +296,14 @@
 		    )Z
 		    ORDER BY FIELD(Z.STOCK_QTY_SUM, 1, 2 ,3 ,4 ,5) DESC ,Z.REG_DT DESC
 	</select>
+	
+	<!-- 위시리스트 상품여부용-->
+	<select id="getWishListGoodsCount" parameterType="WishList" resultType="int">
+		/* TsfWishlist.getWishListGoodsCount*/
+		SELECT COUNT(*)
+		FROM TB_WISHLIST
+		WHERE CUST_NO = #{custNo}
+		AND GOODS_CD = #{goodsCd}
+	</select>
+	
 </mapper>

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/callcenter/FaqFormMob.html

@@ -134,7 +134,7 @@
 				tag += '	</div>\n';
 				tag += '	<div class="fold_cont">\n';
 				tag += '		<div class="fold_answer">\n';
-				tag += '			<div class="answer_body">' + item.answer + '</div>\n';
+				tag += '			<div class="answer_body">' + item.answer.escapeHtml().replace(/\n/g,'<br/>') + '</div>\n';
 				tag += '		</div>\n';
 				tag += '	</div>\n';
 				tag += '</li>\n';

+ 5 - 3
src/main/webapp/WEB-INF/views/mob/common/fragments/FooterMob.html

@@ -202,14 +202,16 @@
 		$("#hstrFull").removeClass('on');
 		return false;
 	}
-	
+
+	// 210521_ 수정 : 현재 선택된 on만 오픈.
 	$(document).on('click','.hasCate a',function(e){
-		$(this).next('.depthCate').slideToggle(300);
 		$(this).toggleClass('on');
+		$(this).next('.depthCate').slideToggle(300);
+		$(this).parents('li').siblings('li').find('a').removeClass('on');
+		$(this).parents('li').siblings('li').find('.depthCate').slideUp(300);
 		return false;
 	});
 	
-	
 	// 퀵메뉴카테고리
 	let fnGetQuickMenuCategory = function(cate1) {
 		let tag = '';

+ 46 - 17
src/main/webapp/WEB-INF/views/mob/display/BrandMainFormMob.html

@@ -142,9 +142,9 @@
 											</a>
 										</div>
 									</th:block>
-									<!-- Add Pagination -->
-									<div class="swiper-pagination"></div>
 								</div>
+								<!-- Add Pagination -->
+								<div class="swiper-pagination"></div>
 							</div>
 						</div>
 					</div>
@@ -214,7 +214,7 @@
 															<th:block th:if="${LookbookData.lookbookGoodsList != null and !LookbookData.lookbookGoodsList.empty}" th:each="lookbookGoods, status : ${LookbookData.lookbookGoodsList}">
 																<div class="item_picker" th:style="${'left:'+lookbookGoods.xlim+'%; top:'+lookbookGoods.ylim+'%;'}">
 																	<div>
-																		<button type="button" th:onclick="fnGoodsPopup([[${lookbookGoods.sysImgNm}]],[[${lookbookGoods.brandGroupNm}]],[[${lookbookGoods.goodsFullNm}]],[[${lookbookGoods.listPrice}]],[[${lookbookGoods.currPrice}]],[[${lookbookGoods.dcRate}]],[[${lookbookGoods.goodsCd}]])"><span class="ico ico_picker"></span></button>
+																		<button type="button" th:onclick="fnGoodsPopup([[${lookbookGoods.sysImgNm}]],[[${lookbookGoods.brandGroupNm}]],[[${lookbookGoods.goodsFullNm}]],[[${lookbookGoods.listPrice}]],[[${lookbookGoods.currPrice}]],[[${lookbookGoods.dcRate}]],[[${lookbookGoods.goodsCd}]],[[${lookbookGoods.stockQty}]],[[${lookbookGoods.soldoutYn}]])"><span class="ico ico_picker"></span></button>
 																		<div class="pick_descr">
 																			<a href="javascript:void(0);"></a>
 																		</div>
@@ -431,7 +431,7 @@
 	var goodsImgUrl = [[${@environment.getProperty('upload.goods.view')}]];
 
 	// 픽커모달
-	var fnGoodsPopup = function(obj1,obj2,obj3,obj4,obj5,obj6,obj7){
+	var fnGoodsPopup = function(obj1,obj2,obj3,obj4,obj5,obj6,obj7,obj8,obj9){
 		$("#reco_pop .modal-dialog").remove();
 		var tag = '';
 
@@ -443,7 +443,11 @@
 		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 += '					<div class="item_state';
+		if(obj8 < 1 || obj9 == 'Y'){
+			tag += ' soldout';
+		}
+		tag += '">\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="" onerror="noneImg(this)">\n';
@@ -504,12 +508,15 @@
 		});
 	});
 
+	//210624_ 추가 : 슬라이드 속성 추가.
 	// 서브비주얼 슬라이드
 	var myArray = ["01", "02", "03"];
 	var submainVisualSwiper = new Swiper('.swiper-container.submain_visual', {
 		//210414_자동롤링 추가
+		speed: 1000,
 		autoplay : {
 			delay : 3000,   // 시간 설정
+			disableOnInteraction: false,
 		},
 		pagination: {
 			el: '.swiper-pagination',
@@ -520,20 +527,36 @@
 		}
 	});
 
-	//  이미지배너 슬라이드
-	var imgBannerSwiper = new Swiper('.swiper-container.br_second_slide', {
-		//210414_자동롤링 추가
-		autoplay : {
-			delay : 3000,   // 시간 설정
-		},
-		pagination: {
-			el: '.swiper-pagination',
-		},
-	});
+	// post-bnnWide (210602_ 교체)
+	// 와이드배너 슬라이드 카운팅
+	var pickbnnWdCont = $('.post-bnnWide .swiper-slide');
+	var pickbnnWdLength = pickbnnWdCont.length;
+	if (pickbnnWdLength < 2) {
+		var post_bnnWide = new Swiper ('.swiper-container.post-bnnWide', {
+			speed: 1000,
+			loop: false,
+			autoplay: false,
+			pagination: false,
+		});
+	} else {
+		var post_bnnWide = new Swiper ('.swiper-container.post-bnnWide', {
+			loop: true,
+			slidesPerView: 1,
+			speed: 1000,
+			autoplay: {
+				delay: 4000,
+				disableOnInteraction: false,
+			},
+			pagination: {
+				el: '.swiper-pagination',
+			},
+		});
+	}
 
 	// 뉴아이템 슬라이드
 	var newItemSwiper = new Swiper('.new_item .area_slider .swiper-container', {
 		slidesPerView: 1,
+		speed: 1000,
 		pagination: {
 			el: '.swiper-pagination',
 		},
@@ -541,19 +564,22 @@
 
 	// 베스트아이템 슬라이드
 	var bestItemSwiper = new Swiper('.best_item .area_slider .swiper-container', {
-		slidesPerView: 2,
+		slidesPerView: 2.22,
+		speed: 1000,
 		spaceBetween: 8,
 	});
 
 	// 엠디픽 슬라이드
 	var mdItemSwiper = new Swiper('.md_item .area_slider .swiper-container', {
-		slidesPerView: 2,
+		slidesPerView: 2.22,
+		speed: 1000,
 		spaceBetween: 8,
 	});
 
 	// 스페셜샵 슬라이드
 	var specialShopSwiper = new Swiper('.special_shop .area_slider .swiper-container', {
 		slidesPerView: 1,
+		speed: 1000,
 		spaceBetween: 10,
 	});
 
@@ -561,6 +587,7 @@
 	var rcmdPicimgSwiper = new Swiper('.recommendedArea .area_slider .swiper-container', {
 		slidesPerView: 1,
 		spaceBetween: 0,
+		speed: 1000,
 		pagination: {
 			el: '.swiper-pagination',
 			type: 'fraction',
@@ -569,8 +596,10 @@
 
 	// 유튜브 슬라이드
 	var swiperYoutu = new Swiper('.swiper-container.br_youtube_slide', {
+		speed: 1000,
 		pagination: {
 			el: '.swiper-pagination',
+			clickable:true,
 		},
 	});
 

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/display/LookbookDetailFormMob.html

@@ -209,7 +209,7 @@
 		tag +='			<div class="itemsGrp rowtype">\n';
 		tag +='				<div class="item_prod">\n';
 		tag +='					<div class="item_state';
-		if(obj9 == 'Y'){
+		if(obj8 < 1 || obj9 == 'Y'){
 			tag += ' soldout';
 		}
 		tag +='">\n';

+ 31 - 27
src/main/webapp/WEB-INF/views/mob/display/MallMainFormMob.html

@@ -58,7 +58,7 @@
 
 					<th:block th:if="${contentsLoc=='002'}">
 						<!-- 2. 스타일리포트 -->
-						<div class="inner bg_gray">
+						<div class="inner bg_gray" th:if="${mainData.ContentsList != null and !mainData.ContentsList.empty}">
 							<div class="main_stylereport">
 								<th:block th:if="${mainData.contentsTitle != null and !mainData.contentsTitle.empty}">
 									<div class="titWrap">
@@ -795,6 +795,8 @@
 		}
 		// 컨텐츠 호출
 		$(document).ready(function() {
+			post_visual.slideTo(2, 0, false); // 접속 시, 슬라이드페이지 이동
+
 			// 몰메인 띠배너 표출
 			$("#divTopbanner").show();
 
@@ -862,10 +864,12 @@
 				$("#pickBtn"+(idx+1)).click();
 			}
 		}
+
 		/*]]>*/
 	</script>
 
 	<script type="text/javascript">
+		//210624_ 추가 : 슬라이드 속성 추가.
 		// post-visual
 		// 비주얼 슬라이드 카운팅
 		var pickvisualCont = $('.post-visual .swiper-slide');
@@ -875,6 +879,7 @@
 			var post_visual = new Swiper('.swiper-container.post-visual', {
 				autoplay: false,
 				loop:false,
+				speed:1000,
 				// pagination: false,
 				pagination: {
 					el: '.swiper-pagination',
@@ -884,8 +889,10 @@
 		} else {
 			var post_visual = new Swiper('.swiper-container.post-visual', {
 				slideTo: 2,
+				speed:1000,
 				autoplay: {
 					delay: 3000,
+					disableOnInteraction: false,
 				},
 				loop:true,
 				pagination: {
@@ -898,6 +905,7 @@
 
 		// post-trendy
 		var post_trendy = new Swiper('.swiper-container.post-trendy', {
+			speed:1000,
 			pagination: {
 				el: '.swiper-pagination',
 			},
@@ -905,7 +913,7 @@
 
 		// post-it
 		var post_it = new Swiper('.swiper-container.post-it', {
-			slidesPerView: 2,
+			slidesPerView: 2.22,
 			spaceBetween: 8,
 			observer: true,
 			observeParents: true,
@@ -924,6 +932,7 @@
 		// post-stylereport
 		var post_stylereport = new Swiper('.swiper-container.post-stylereport', {
 			slidesPerView: 1,
+			speed:1000,
 			pagination: {
 				el: '.swiper-pagination',
 			},
@@ -945,7 +954,7 @@
 		//post-pick-head
 		var Head_pick = new Swiper(".pick-head", {
 			slidesPerView: "auto",
-			spaceBetween: 20,
+			spaceBetween: 0,
 			autoHeight: true,
 			preventClicks: true,
 			preventClicksPropagation: false,
@@ -979,7 +988,7 @@
 			}
 
 			setTimeout(function(){snbwrap.css({
-				"transform": "translate3d("+ (pos*-2) +"px, 0, 0)",
+				"transform": "translate3d("+ (pos*-1) +"px, 0, 0)",
 				"transition-duration": "500ms"
 			})}, 200);
 		}
@@ -995,9 +1004,10 @@
 		var post_pick = new Swiper(".pick-cont .swiper-container", {
 			//slidesPerView: 1,
 			watchOverflow:true, //210520_ 추가 : 슬라이드 1개일 경우 롤링 제거.
+			speed: 1000,
 			//210520_ 추가 : 자동재생 시간 추가.
 			autoplay: {
-				delay: 4000,
+				delay: 3000,
 				disableOnInteraction: false,
 			},
 			observer: true,
@@ -1044,9 +1054,9 @@
 			var post_bnnWide = new Swiper ('.swiper-container.post-bnnWide', {
 				loop: true,
 				slidesPerView: 1,
-				speed : 1500,
+				speed : 1000,
 				autoplay: {
-					delay: 4000,
+					delay: 3000,
 					disableOnInteraction: false,
 				},
 				pagination: {
@@ -1062,6 +1072,7 @@
 		if (pickbnnEvLength < 2) {
 			var post_bnnEvent = new Swiper ('.swiper-container.post-bnnEvent', {
 				loop: false,
+				speed : 1000,
 				autoplay: false,
 				pagination:false,
 			});
@@ -1069,9 +1080,9 @@
 			var post_bnnEvent = new Swiper ('.swiper-container.post-bnnEvent', {
 				loop: true,
 				slidesPerView: 1,
-				speed : 1500,
+				speed : 1000,
 				autoplay: {
-					delay: 4000,
+					delay: 3000,
 					disableOnInteraction: false,
 				},
 				pagination: {
@@ -1086,7 +1097,6 @@
 			pagination: {
 				el: '.swiper-pagination',
 			},
-			//autoHeight: true,
 			autoplay: {
 				delay: 24700,
 				disableOnInteraction: false,
@@ -1180,33 +1190,27 @@
 		}
 		var stopInter = startTimeInterval();
 
+
+		//setTimeout(function () {
+		//		foryouInterval(foryouIndex);
+		//		if (foryouIndex >= 5) foryouIndex = 0;
+		//		foryouIndex++;
+		//}, 2000);
+
+
+
 		var post_sug_items = new Swiper ('.swiper-container.post-sug-items', {
 			slidesPerView: 3,
 			spaceBetween: 10,
-			speed : 800,
-			//autoplay: {
-			//	delay: 3000,
-			//	disableOnInteraction: false,
-			//},
+			speed : 1000,
 		});
 
 		// post-tv
 		var post_tv = new Swiper ('.post-tv', {
 			loop: true,
-			// slidesPerView: 2,
-			// spaceBetween: 20,
 			centeredSlides: true,
-			speed : 800,
-			// effect: 'fade',
+			speed : 1000,
 			autoplay: false,
-			//autoplay: {
-			//	delay: 10000,
-			//	disableOnInteraction: false,
-			//},
-			// navigation: {
-			// 	nextEl: '.main_tv .swiper-button-next',
-			// 	prevEl: '.main_tv .swiper-button-prev',
-			// },
 			pagination: {
 				el: '.main_tv .swiper-pagination',
 				clickable: true,

+ 3 - 1
src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDescFormMob.html

@@ -354,7 +354,9 @@
    $(document).ready( function() {
 	   $(".pd_descrp .cont_body").find('img').each(function() {
 			let tmpImgSrc = $(this).attr('src');
-			if (tmpImgSrc.indexOf('Upload') == 1 ){  // /Upload
+			if (tmpImgSrc.indexOf('/Upload/Local') > 0 ){  // /Upload
+ 				$(this).attr('src' , tmpImgSrc.replace('/Upload/Local', "/Local"));
+ 			}else if (tmpImgSrc.indexOf('Upload') == 1 ){  // /Upload
 				$(this).attr('src' , tmpImgSrc.replace('/Upload', _imgUrl+"/Local"));
 			}
 			

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDetailFormMob.html

@@ -1570,7 +1570,7 @@
 			}
 			// 광고 스크립트용
 			
-			var snsGoodsImg = _uploadGoodsUrl + [[${goodsInfo.sysImgNm}]];
+			var snsGoodsImg = _uploadGoodsUrl + "/"+ [[${goodsInfo.sysImgNm}]];
 			var snsUrl = location.protocol + _PAGE_GOODS_DETAIL + params.goodsCd +'&colorCd =' + params.colorCd  ;
 			var snsGoodsFullNm = [[${goodsInfo.goodsFullNm}]];
 			

+ 8 - 6
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html

@@ -2818,7 +2818,7 @@
 		}
 		// 광고 스크립트용
 		
-		var snsGoodsImg = _uploadGoodsUrl + [[${goodsInfo.sysImgNm}]];
+		var snsGoodsImg = _uploadGoodsUrl + "/" + [[${goodsInfo.sysImgNm}]];
 		var snsUrl = location.protocol + _PAGE_GOODS_DETAIL + params.goodsCd +'&colorCd =' + params.colorCd  ;
 		var snsGoodsFullNm = [[${goodsInfo.goodsFullNm}]];
 		
@@ -2931,7 +2931,9 @@
 	window.onload = function(){
    	 $(".pd_descrp .cont_body").find('img').each(function() {
 			let tmpImgSrc = $(this).attr('src');
-			if (tmpImgSrc.indexOf('Upload') == 1 ){  // /Upload
+			if (tmpImgSrc.indexOf('/Upload/Local') > 0 ){  // /Upload
+ 				$(this).attr('src' , tmpImgSrc.replace('/Upload/Local', "/Local"));
+ 			}else if (tmpImgSrc.indexOf('Upload') == 1 ){  // /Upload
 				$(this).attr('src' , tmpImgSrc.replace('/Upload', _imgUrl+"/Local"));
 			}
 			
@@ -3021,10 +3023,10 @@
         }
     });
    
-    window.onscroll = function() {
-		document.getElementsByClassName('.modal.pd_pop.pd_review_pop .pd_review .area_rv_empty .btn_group_flex').style.top =
-		window.pageYOffset + 'px';
-	};
+    //window.onscroll = function() {
+	//	document.getElementsByClassName('.modal.pd_pop.pd_review_pop .pd_review .area_rv_empty .btn_group_flex').style.top =
+	//	window.pageYOffset + 'px';
+	//};
 /*]]>*/
 </script>
 

+ 38 - 10
src/main/webapp/WEB-INF/views/mob/goods/GoodsOtherFormMob.html

@@ -23,20 +23,20 @@
 	<div class="area_slider">
 		<div class="swiper-container">
 			<div class="swiper-wrapper">
-				<div class="swiper-slide" th:each="goodsInfo, status : ${goodsList}">
+				<div class="swiper-slide" th:each="result, status : ${goodsList}">
 					<div class="item_prod">
 						<div class="item_state">
-							<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'likeit active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsInfo.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc='', planDtlSq=''">관심상품 추가</button>
-							<a href="javascript:void(0);" th:onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], '',[[${params.ithrCd}]],'','','pc_detail');" class="itemLink" >
+							<button type="button" class="itemLike" th:classappend="${result.product.itemId == 'Y'}? 'likeit active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${result.product.itemId}, ithrCd=${params.ithrCd}, contentsLoc='', planDtlSq=''">관심상품 추가</button>
+							<a href="javascript:void(0);" th:onclick="cfnGoToGoodsDetail([[${result.product.itemId}]], '',[[${params.ithrCd}]],'','','pc_detail');" class="itemLink" >
 								<div class="itemPic">
-									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=156'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+									<img alt="" class="vLHTC pd_img" th:src="${result.product.itemImage+'?RS=156'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 								</div>
-								<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
-								<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 로고 자카드 방풍 패딩</div>
+								<p class="itemBrand" th:text="${result.product.brandName}">BRAND NAME1</p>
+								<div class="itemName" th:text="${result.product.itemName}">남성 로고 자카드 방풍 패딩</div>
 								<p class="itemPrice">
-									<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}"  th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">1,000,000</span>
-									<th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"></th:block>
-									<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
+									<span class="itemPrice_original" th:if="${result.product.originalPrice != result.product.salePrice}" th:text="${#numbers.formatInteger(result.product.originalPrice, 0,'COMMA')}">1,000,000</span>
+									<th:block th:text="${#numbers.formatInteger(result.product.salePrice, 0,'COMMA')}"></th:block>
+									<span class="itemPercent" th:if="${result.product.originalPrice != result.product.salePrice}"  th:text="${(result.product.originalPrice == 0 ? 0 : #numbers.formatDecimal((result.product.originalPrice - result.product.salePrice) / (result.product.originalPrice * 1.0) * 100, 1, 0)) + '%'}">0%</span>
 								</p>
 							</a>
 						</div>
@@ -77,9 +77,37 @@
 			slidesPerView: 3,
 			spaceBetween: 8,
 		});	 
-		
 	});
 	
+	window.onload = function(){
+		
+		// 위시처리- 로그인 되어 있을시
+//		if (cfCheckLogin()) {
+//			//이상품과 함께본 상품
+//			let targetT = $('#goodsTogetherbArea').find('.item_state').find('.itemLike');
+//			let targetTSize = targetT.length;
+//			
+//			targetT.each(function(){
+//				let goodsCd = $(this).attr('goodscd');
+//				let url = "/mypage/wish/list/check/"+goodsCd;
+//				var result = '';
+//				$.ajax({
+//					type: 'get'
+//					, async: false
+//					, url: url
+//					, success: function (data) {
+//						//likeit active
+//						if ("Y" == data){
+//							$(this).addClass('likeit').addClass('active');
+//						}
+//					}
+//				});
+//			});
+//			
+//		}
+	};
+	
+	
 /*]]>*/
 </script>	
 

+ 5 - 5
src/main/webapp/WEB-INF/views/mob/planning/PlanningShotGuideFormMob.html

@@ -171,8 +171,8 @@ let shotBrandGoodsList = [[${shotBrandGoodsList}]];
 if(shotBrandList.length>0){
 	var html = '';
 	$.each(shotBrandList, function(idx, item)  {
-		html += '<div class="inner" id="type'+idx+'">';
-		html += '	<div class="dp_listItems_wrap type1">';
+		html += '<div class="inner">';
+		html += '	<div class="dp_listItems_wrap type'+(idx+1)+'">';
 		html += '		<h2 class="dp_subtitle">'+item.brandNm+'</h2>';
 		html += '			<div class="itemsGrp">';
 		$.each(shotBrandGoodsList, function(idx2, item2)  {
@@ -324,12 +324,12 @@ var fnOpenDaumAddr = function() {
 }
 
 var fnCornerClick = function (result1,result2) {
-	var num = result1 - 1;
+	var num = result1;
 	$("#filter").text(result2);
 	//var offset = $('.dp_listItems_cont.type'+(result1)).offset(); //선택한 태그의 위치를 반환
-	var offset = $('#type'+num).offset(); //선택한 태그의 위치를 반환
+	var offset = $('.dp_listItems_wrap.type'+result1).offset(); //선택한 태그의 위치를 반환
 	//animate()메서드를 이용해서 선택한 태그의 스크롤 위치를 지정해서 0.4초 동안 부드럽게 해당 위치로 이동함 
-	$('html').animate({scrollTop : offset.top}, 400);
+	$('html').animate({scrollTop :  offset.top - 60}, 400);
 	
 }
 

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/social/SocialMainFormMob.html

@@ -59,7 +59,7 @@
 		</main>
 <form id="socialForm" name="socialForm" action="#" th:action="@{'/social/list'}">
 	<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
-	<input type="hidden" name="pageSize" value ="10"/>
+	<input type="hidden" name="pageSize" value ="50"/>
 </form>
 <script src="/ux/plugins/gaga/gaga.infinite.scrollSession.js"></script>
 <script src="/ux/plugins/jquery/jquery.history.min.js"></script>

+ 1 - 1
src/main/webapp/WEB-INF/views/web/callcenter/FaqFormWeb.html

@@ -222,7 +222,7 @@
 		let answer = $(obj).data('answer');
 		if (!gagajf.isNull(answer)) {
 			$('#faqTypeNm').html('[' + answer.substring(0, answer.indexOf('|')) + ']');
-			$('#faqAnswer').html('<span>답변 내용은 아래와 같습니다.</span>' + answer.substring(answer.indexOf('|') + 1));
+			$('#faqAnswer').html('<span>답변 내용은 아래와 같습니다.</span>' + answer.substring(answer.indexOf('|') + 1).escapeHtml().replace(/\n/g,'<br/>'));
 		}
 	}
 /*]]>*/

+ 5 - 2
src/main/webapp/WEB-INF/views/web/common/fragments/FooterWeb.html

@@ -1174,6 +1174,7 @@
 				}
 
 				$("#quick_menu .shopingbag.quick_con.quick02 .quick_body").html(quickShoppingBagHtml);
+				$("#quick_menu .shopingbag.quick_con.quick02 .quick_body").show();
 
 				let cartCnt = $("#quick_menu #quick02 .count").text();
 				if(!cartCnt) cartCnt = 0;
@@ -1214,12 +1215,14 @@
 							
 							$.each(result, function (idx, item) {
 								tag += '	<div class="item_prod">';	
-								tag += '		<div class="item_state">';	
 								if (item.stockQtySum>0 && item.stockQtySum<=5) {
+									tag += '		<div class="item_state soldout">';	
 									tag += '			<div class="shape"><span>곧 품절돼요!</span></div>';
 								}
 								if (item.stockQtySum<=0) {
-									tag += '			<div class="shape"><span>품절</span></div>';
+									tag += '		<div class="item_state soldout">';	
+								}else{
+									tag += '		<div class="item_state soldout">';	
 								}
 								tag += '			<button type="button" class="itemLike active" goodsCd="'+item.goodsCd+'" onclick="fnWishDelete(this);">관심상품 추가</button>';
 								tag += '			<a href="javascript:void(0);" onclick="cfnGoToGoodsDetail(\''+item.goodsCd+'\',\'\',\'IN22_02\')" class=" itemLink">';	

+ 13 - 2
src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html

@@ -438,7 +438,7 @@
 									tag +=' 	<button class="btn_toggle_bnr">열기</button>';
 								}
 								tag +='</div>';
-								if(item.strVar8=='Y'){
+								// if(item.strVar8=='Y'){
 									tag+='<div class="close_bnr_area">';
 									tag+=' 	<form class="form_wrap">';
 									tag+=' 		<div class="form_field">';
@@ -447,7 +447,7 @@
 									tag+=' 	</form>';
 									tag+=' 	<button id="btn_close_bnr" class="btn_close" onclick="fnGnbTobBannerClose(1);"><span>닫기</span></button>';
 									tag+='</div>';
-								}
+								// }
 							}else if(item.contentsType == 'IMG'){
 								tag+='<div class="bnrtype_img" style="background-color:#'+item.strVar5+';">';
 								tag+=' 	<a href="'+item.strVar1+'" target="">';
@@ -493,6 +493,14 @@
 							if(bannerYn=="Y"){
 								$('#divTopbanner').html(tag);
 							}
+
+							// if(item.contentsType == 'OPEN'){
+							// 	if(item.strVar7!='IMG'){
+							// 		var countdown = document.getElementById("testOpen");
+							// 		var vvv = ""+item.html+"";
+							// 		countdown.innerHTML = vvv;
+							// 	}
+							// }
 						}
 					});
 				}
@@ -514,6 +522,8 @@
 			if (categoryWidth > 994 ){
 				bdList_index[i].style.display="none";
 				mrList_index[i].style.display="block";
+			}else if(categoryWidth < 993 ){
+				$('.more_category').css('display', 'none');
 			}
 			categoryWidth = $('#divGnbTab').outerWidth();
 		}
@@ -532,6 +542,7 @@
 			$('body').toggleClass('lock');
 			$('.bnrtype_open').toggleClass('fixed');
 			$(this).text($(this).text() == '열기' ? '닫기' : '열기');
+			$(this).text() == '열기' ? $('.close_bnr_area').show() : $('.close_bnr_area').hide();
 		});
 		
 		// GNB toggle

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

@@ -568,10 +568,10 @@ $(document).ready( function() {
 			slidesPerView: 'auto',
 			centeredSlides: true,
 			speed : 1000,
-			//autoplay: {
-			//	delay: 7000, //210422_수정 : delay 시간 늘림.
-			//	disableOnInteraction: false,
-			//},
+			autoplay: {
+				delay: 7000, //210422_수정 : delay 시간 늘림.
+				disableOnInteraction: false,
+			},
 			navigation: {
 				nextEl: '.brand_main .brand_visual .swiper-button-next',
 				prevEl: '.brand_main .brand_visual .swiper-button-prev',
@@ -659,7 +659,7 @@ $(document).ready( function() {
 			loop: false,
 			watchOverflow : true, //210503_추가 : 슬라이드 1개일때 롤링 막는 기능 추가.
 			slidesPerView: 1,
-			speed : 1500,
+			speed : 1000,
 			navigation: {
 				nextEl: '.main_1stage .swiper-button-next',
 				prevEl: '.main_1stage .swiper-button-prev',
@@ -670,7 +670,7 @@ $(document).ready( function() {
 		var br_bn_slide = new Swiper ('.brand_main .main_1stage .post-bnnWide', {
 			loop: true,
 			slidesPerView: 1,
-			speed : 1500,
+			speed : 1000,
 			navigation: {
 				nextEl: '.main_1stage .swiper-button-next',
 				prevEl: '.main_1stage .swiper-button-prev',
@@ -688,6 +688,7 @@ $(document).ready( function() {
 		slidesPerView: 5,
 		slidesPerGroup:5, //210429_추가 : slidesPerGroup 추가.
 		spaceBetween: 22,
+		speed : 1000,
 		pagination: {
 			el: '.best_item .swiper-pagination',
 			clickable: true,
@@ -705,6 +706,7 @@ $(document).ready( function() {
 		slidesPerView: 5,
 		slidesPerGroup:5, //210429_추가 : slidesPerGroup 추가.
 		spaceBetween: 22,
+		speed : 1000,
 		pagination: {
 			el: '.md_item .swiper-pagination',
 			clickable: true,
@@ -743,6 +745,7 @@ $(document).ready( function() {
 			slidesPerView: 'auto',
 			freeMode: true,
 			spaceBetween: 20,
+			speed:1000,
 			scrollbar: {
 				el: $('.spe' + index).siblings('.swiper-scrollbar'),
 				hide: false,
@@ -764,7 +767,7 @@ $(document).ready( function() {
 		loop: true,
 		slidesPerView: 'auto',
 		spaceBetween: 20,
-		speed : 800,
+		speed : 1000,
 		autoWidth: true,
 		autoHeight: true,
 		centeredSlides: true,
@@ -787,23 +790,46 @@ $(document).ready( function() {
 	});
 
 
-	/* SLIDE - BRAND_TV */
-	var main_tv_slide = new Swiper ('.brand_main .main_tv .post-tv', {
-		loop: true,
-		slidesPerView: 'auto',
-		spaceBetween: 170,
-		centeredSlides: true,
-		speed : 800,
-		autoplay: false,
-		navigation: {
-			nextEl: '.brand_main .main_tv .swiper-button-next',
-			prevEl: '.brand_main .main_tv .swiper-button-prev',
-		},
-		pagination: {
-			el: '.brand_main .main_tv .swiper-pagination',
-			clickable: true,
-		},
-	});
+	/* SLIDE - MAIN_TV */
+	//210629_ 수정 : 슬라이드 1개일 때, loop랑 롤링 제거.
+	var mainTvCont = $('.main_tv .swiper-slide');
+	var mainTvLength = mainTvCont.length;
+	if (mainTvLength < 2) {
+		var main_tv_slide = new Swiper ('.main_tv .post-tv', {
+			loop: false,
+			watchOverflow:true,
+			slidesPerView: 'auto',
+			spaceBetween: 170,
+			centeredSlides: true,
+			speed : 1000,
+			autoplay: false,
+			navigation: {
+				nextEl: '.main_tv .swiper-button-next',
+				prevEl: '.main_tv .swiper-button-prev',
+			},
+			pagination: {
+				el: '.main_tv .swiper-pagination',
+				clickable: true,
+			},
+		});
+	}else{
+		var main_tv_slide = new Swiper ('.main_tv .post-tv', {
+			loop: true,
+			slidesPerView: 'auto',
+			spaceBetween: 170,
+			centeredSlides: true,
+			speed : 1000,
+			autoplay: false,
+			navigation: {
+				nextEl: '.main_tv .swiper-button-next',
+				prevEl: '.main_tv .swiper-button-prev',
+			},
+			pagination: {
+				el: '.main_tv .swiper-pagination',
+				clickable: true,
+			},
+		});
+	}
 
 	// 브랜드메인 배너 <br> 처리
 	$('.bMainTitle').each(function (){

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

@@ -211,7 +211,7 @@
 		tag += '			<div class="itemsGrp">\n';
 		tag += '				<div class="item_prod">\n';
 		tag += '					<div class="item_state';
-		if(obj9 == 'Y'){
+		if(obj8 < 1 || obj9 == 'Y'){
 			tag += ' soldout';
 		}
 		tag += '">\n';
@@ -221,10 +221,10 @@
 		tag += '							</div>\n';
 		tag += '							<p class="itemBrand">'+obj2+'</p>\n';
 		tag += '							<div class="itemName">'+obj3+'</div>\n';
-		tag += '							<span class="itemPrice_original">'+obj4.addComma()+'</span>\n';
-		if(obj4 != obj5){
-			tag += '							<p class="itemPrice">'+obj5.addComma()+'\n';
+		if(obj4 != obj5) {
+			tag += '							<span class="itemPrice_original">' + obj4.addComma() + '</span>\n';
 		}
+		tag += '							<p class="itemPrice">'+obj5.addComma()+'\n';
 		if(obj6>0){
 			tag += '								<span class="itemPercent">'+obj6+'%</span>\n';
 		}

+ 56 - 30
src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html

@@ -76,7 +76,7 @@
 
 				<!-- 2. 스타일리포트 -->
 				<th:block th:if="${contentsLoc=='002'}">
-					<div class="content main_stylereport">
+					<div class="content main_stylereport" th:if="${mainLayoutData.ContentsList != null and !mainLayoutData.ContentsList.empty}">
 						<th:block th:if="${mainLayoutData.contentsTitle != null and !mainLayoutData.contentsTitle.empty}">
 						<div class="cont_head">
 							<p class="displayH t_c" th:text="${mainLayoutData.contentsTitle}"></p>
@@ -1031,7 +1031,7 @@ if ( (navigator.appName == 'Netscape' && agent.indexOf('trident') != -1) || (age
 		// Navigation arrows
 		//autoplay: false,
 		autoplay: {
-			delay: 2000,
+			delay: 3000,
 			disableOnInteraction: false,
 		},
 		navigation: {
@@ -1059,7 +1059,7 @@ if ( (navigator.appName == 'Netscape' && agent.indexOf('trident') != -1) || (age
 		speed : 1000,
 		// Navigation arrows
 		autoplay: {
-			delay: 2000,
+			delay: 3000,
 			disableOnInteraction: false,
 		},
 		navigation: {
@@ -1087,16 +1087,17 @@ $(document).on('click','.main_visual .slide-curb-play',function(e){
 	$('.main_visual .slide-curb-pause').show();
 });
 
+//210624_ 수정 : autoplay delay 변경.
 /* SLIDE - MAIN_TRENDY */
 var main_trendy_slide = new Swiper('.main_trendy .post-trendy', {
 	watchSlidesProgress: true,
 	watchSlidesVisibility: true,
 	allowTouchMove: false,
-	loof: false,
+	loop: false,
 	loopAdditionalSlides : 1,
 	speed : 1000,
 	autoplay: {
-		delay: 1500,
+		delay: 3000,
 		disableOnInteraction:false,
 	},
 	navigation: {
@@ -1187,6 +1188,7 @@ var main_deal_slide = new Swiper ('.main_deal .post-deal', {
 	},
 });
 
+//210604_ 수정 : 브랜드 PICK 네비게이션 수정.
 /* 브랜드 PICK 갯수체크 210430_수정 */
 var pickCont = $('.post-pick-nav .swiper-slide');
 var pickLength = pickCont.length;
@@ -1232,9 +1234,9 @@ if (pickLength < 7) { //210614_ 수정 : 슬라이드 갯수 7개 미만일시 
 }
 
 //210622_ 삭제 : 슬라이드 주석 삭제.
-var pickForCont = $('.post-pick-for .swiper-slide');
+var pickForCont = $('.post-pick-for > .swiper-wrapper > .swiper-slide');
 var pickForLength = pickForCont.length;
-if (pickForLength < 2) {
+if (pickForLength < 7) {
 	var main_pick_post = new Swiper('.main_pick .post-pick-for', { //thumbs
 		initialSlide: 0,
 		slidesPerView: 1,
@@ -1265,10 +1267,10 @@ if (pickForLength < 2) {
 var main_pick_lookbook = new Swiper ('.main_pick .post-lookbook', {
 	slidesPerView: 1,
 	speed : 1000,
-	// loop: true,
+	loop: false,
 	watchOverflow: true, //loop와 함께 사용 불가.
 	autoplay: {
-		delay: 2000,
+		delay: 3000,
 		disableOnInteraction: false,
 	},
 	pagination: {
@@ -1284,12 +1286,12 @@ if (pickBnnLength < 2) {
 	/* SLIDE - MAIN_BANNER WIDE */
 	var main_bnnWide_slide = new Swiper ('.main_1stage .post-bnnWide', {
 		slidesPerView: 1,
-		speed : 1500,
+		speed : 1000,
 		initialSlide: 0,
 		loop: false,
 		watchOverflow: true, //loop와 함께 사용 불가.
 		autoplay: {
-			delay: 4000,
+			delay: 3000,
 			disableOnInteraction: false,
 		},
 		navigation: {
@@ -1303,12 +1305,12 @@ if (pickBnnLength < 2) {
 	/* SLIDE - MAIN_BANNER WIDE */
 	var main_bnnWide_slide = new Swiper ('.main_1stage .post-bnnWide', {
 		slidesPerView: 1,
-		speed : 1500,
+		speed : 1000,
 		initialSlide: 0,
 		loop: true,
 		watchOverflow: true, //loop와 함께 사용 불가.
 		autoplay: {
-			delay: 4000,
+			delay: 3000,
 			disableOnInteraction: false,
 		},
 		navigation: {
@@ -1336,7 +1338,7 @@ function init(){
 	var main_recomm_slide = new Swiper ('.main_recomm .post-recomm', {
 		slidesPerView: 5,
 		slidesPerGroup: 5,
-		speed : 1500,
+		speed : 1000,
 		spaceBetween: 20,
 		loop : true,
 		pagination: {
@@ -1434,22 +1436,45 @@ $(".fy_nav ul li").click(function(){
 ti = startTimeInterval();
 
 /* SLIDE - MAIN_TV */
-var main_tv_slide = new Swiper ('.main_tv .post-tv', {
-	loop: true,
-	slidesPerView: 'auto',
-	spaceBetween: 170,
-	centeredSlides: true,
-	speed : 800,
-	autoplay: false,
-	navigation: {
-		nextEl: '.main_tv .swiper-button-next',
-		prevEl: '.main_tv .swiper-button-prev',
-	},
-	pagination: {
-		el: '.main_tv .swiper-pagination',
-		clickable: true,
-	},
-});
+//210629_ 수정 : 슬라이드 1개일 때, loop랑 롤링 제거.
+var mainTvCont = $('.main_tv .swiper-slide');
+var mainTvLength = mainTvCont.length;
+if (mainTvLength < 2) {
+	var main_tv_slide = new Swiper ('.main_tv .post-tv', {
+		loop: false,
+		watchOverflow:true,
+		slidesPerView: 'auto',
+		spaceBetween: 170,
+		centeredSlides: true,
+		speed : 1000,
+		autoplay: false,
+		navigation: {
+			nextEl: '.main_tv .swiper-button-next',
+			prevEl: '.main_tv .swiper-button-prev',
+		},
+		pagination: {
+			el: '.main_tv .swiper-pagination',
+			clickable: true,
+		},
+	});
+}else{
+	var main_tv_slide = new Swiper ('.main_tv .post-tv', {
+		loop: true,
+		slidesPerView: 'auto',
+		spaceBetween: 170,
+		centeredSlides: true,
+		speed : 1000,
+		autoplay: false,
+		navigation: {
+			nextEl: '.main_tv .swiper-button-next',
+			prevEl: '.main_tv .swiper-button-prev',
+		},
+		pagination: {
+			el: '.main_tv .swiper-pagination',
+			clickable: true,
+		},
+	});
+}
 
 $(document).ready(function() {
 	// 몰메인 <br> 태그
@@ -1509,6 +1534,7 @@ $(document).ready(function() {
 			$(this).append(tag);
 		}
 	});
+
 });
 /*]]>*/
 </script>

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

@@ -311,7 +311,9 @@
    $(document).ready( function() {
    	 $(".pd_descrp_pop .cont_body").find('img').each(function() {
 			let tmpImgSrc = $(this).attr('src');
-			if (tmpImgSrc.indexOf('Upload') == 1 ){  // /Upload
+			if (tmpImgSrc.indexOf('/Upload/Local') > 0 ){  // /Upload
+ 				$(this).attr('src' , tmpImgSrc.replace('/Upload/Local', "/Local"));
+ 			}else if (tmpImgSrc.indexOf('Upload') == 1 ){  // /Upload
 				$(this).attr('src' , tmpImgSrc.replace('/Upload', _imgUrl+"/Local"));
 			}
 			

+ 12 - 10
src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html

@@ -365,20 +365,22 @@
 				<div class="area_slider">
 					<div class="swiper-container">
 						<div class="swiper-wrapper">
-							<div class="swiper-slide" th:each="goodsInfo, status : ${togetherGoodsList}">
+							<div class="swiper-slide" th:each="result, status : ${togetherGoodsList}">
 								<div class="item_prod">
 									<div class="item_state">
-										<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsInfo.goodsCd}, ithrCd='IN15_03', contentsLoc='', planDtlSq=''">관심상품 추가</button>
-										<a href="javascript:void(0);" th:onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], '','IN15_03','','','pc_detail');" class="itemLink" >
+										<button type="button" class="itemLike" th:classappend="${result.product.itemId == 'Y'}? 'active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${result.product.itemId}, ithrCd='IN15_03', contentsLoc='', planDtlSq=''">관심상품 추가</button>
+										<a href="javascript:void(0);" th:onclick="cfnGoToGoodsDetail([[${result.product.itemId}]], '','IN15_03','','','pc_detail');" class="itemLink" >
 											<div class="itemPic">
-												<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm +'?RS=300'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+												<img alt="" class="vLHTC pd_img" th:src="${result.product.itemImage +'?RS=300'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 											</div>
-											<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
-											<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 로고 자카드 방풍 패딩</div>
+											<p class="itemBrand" th:text="${result.product.brandName}">BRAND NAME1</p>
+											<div class="itemName" th:text="${result.product.itemName}">남성 로고 자카드 방풍 패딩</div>
 											<p class="itemPrice">
-												<th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"></th:block>
-												<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}"  th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">1,000,000</span>
-												<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
+												<th:block th:text="${#numbers.formatInteger(result.product.salePrice, 0,'COMMA')}"></th:block>
+												<th:block th:if="${result.product.originalPrice != result.product.salePrice}">
+												<span class="itemPrice_original" th:if="${result.product.originalPrice > result.product.salePrice}"  th:text="${#numbers.formatInteger(result.product.originalPrice, 0,'COMMA')}">1,000,000</span>
+												<span class="itemPercent" th:if="${result.product.salePrice != result.product.originalPrice}" th:text="${(result.product.originalPrice == 0 ? 0 : #numbers.formatDecimal((result.product.originalPrice - result.product.salePrice) / (result.product.originalPrice * 1.0) * 100, 1, 0)) + '%'}">0%</span>
+												</th:block>
 											</p>
 										</a>
 									</div>
@@ -1505,7 +1507,7 @@ function buy_nc_req(cartSqArr) {
 	}
 	// 광고 스크립트용
 	
-	var snsGoodsImg = _uploadGoodsUrl + [[${goodsInfo.sysImgNm}]];
+	var snsGoodsImg = _uploadGoodsUrl + "/"+  [[${goodsInfo.sysImgNm}]];
 	var snsUrl = location.protocol + _PAGE_GOODS_DETAIL + params.goodsCd;
 	if (typeof (params.colorCd) != 'undefined') snsUrl += "&colorCd=" + params.colorCd;
 	var snsGoodsFullNm = [[${goodsInfo.goodsFullNm}]];

+ 38 - 30
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html

@@ -1159,20 +1159,22 @@
 				<div class="area_slider">
 					<div class="swiper-container">
 						<div class="swiper-wrapper">
-							<div class="swiper-slide" th:each="goodsInfo, status : ${togetherGoodsList}">
+							<div class="swiper-slide" th:each="result, status : ${togetherGoodsList}">
 								<div class="item_prod">
 									<div class="item_state">
-										<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsInfo.goodsCd}, ithrCd='IN15_03', contentsLoc='', planDtlSq=''">관심상품 추가</button>
-										<a href="javascript:void(0);" th:onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], '','IN15_03','','','pc_detail');" class="itemLink" >
+										<button type="button" class="itemLike" th:classappend="${result.product.itemId == 'Y'}? 'active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${result.product.itemId}, ithrCd='IN15_03', contentsLoc='', planDtlSq=''">관심상품 추가</button>
+										<a href="javascript:void(0);" th:onclick="cfnGoToGoodsDetail([[${result.product.itemId}]], '','IN15_03','','','pc_detail');" class="itemLink" >
 											<div class="itemPic">
-												<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm +'?RS=300'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+												<img alt="" class="vLHTC pd_img" th:src="${result.product.itemImage +'?RS=300'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 											</div>
-											<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
-											<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 로고 자카드 방풍 패딩</div>
+											<p class="itemBrand" th:text="${result.product.brandName}">BRAND NAME1</p>
+											<div class="itemName" th:text="${result.product.itemName}">남성 로고 자카드 방풍 패딩</div>
 											<p class="itemPrice">
-												<th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"></th:block>
-												<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}"  th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">1,000,000</span>
-												<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
+												<th:block th:text="${#numbers.formatInteger(result.product.salePrice, 0,'COMMA')}"></th:block>
+												<th:block th:if="${result.product.originalPrice != result.product.salePrice}">
+												<span class="itemPrice_original" th:if="${result.product.originalPrice > result.product.salePrice}"  th:text="${#numbers.formatInteger(result.product.originalPrice, 0,'COMMA')}">1,000,000</span>
+												<span class="itemPercent" th:if="${result.product.salePrice != result.product.originalPrice}" th:text="${(result.product.originalPrice == 0 ? 0 : #numbers.formatDecimal((result.product.originalPrice - result.product.salePrice) / (result.product.originalPrice * 1.0) * 100, 1, 0)) + '%'}">0%</span>
+												</th:block>
 											</p>
 										</a>
 									</div>
@@ -1284,20 +1286,22 @@
 				<div class="area_slider">
 					<div class="swiper-container">
 						<div class="swiper-wrapper">
-							<div class="swiper-slide" th:each="goodsInfo, status : ${recommendGoodsList}">
+							<div class="swiper-slide" th:each="result, status : ${recommendGoodsList}">
 								<div class="item_prod">
 									<div class="item_state">
-										<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsInfo.goodsCd}, ithrCd='IN15_04', contentsLoc='', planDtlSq=''">관심상품 추가</button>
-										<a href="javascript:void(0);" th:onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], '','IN15_04','','','pc_detail');" class="itemLink" >
+										<button type="button" class="itemLike" th:classappend="${result.product.itemId == 'Y'}? 'active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${result.product.itemId}, ithrCd='IN15_03', contentsLoc='', planDtlSq=''">관심상품 추가</button>
+										<a href="javascript:void(0);" th:onclick="cfnGoToGoodsDetail([[${result.product.itemId}]], '','IN15_03','','','pc_detail');" class="itemLink" >
 											<div class="itemPic">
-												<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm +'?RS=300'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+												<img alt="" class="vLHTC pd_img" th:src="${result.product.itemImage +'?RS=300'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 											</div>
-											<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
-											<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 로고 자카드 방풍 패딩</div>
+											<p class="itemBrand" th:text="${result.product.brandName}">BRAND NAME1</p>
+											<div class="itemName" th:text="${result.product.itemName}">남성 로고 자카드 방풍 패딩</div>
 											<p class="itemPrice">
-												<th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"></th:block>
-												<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}"  th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">1,000,000</span>
-												<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
+												<th:block th:text="${#numbers.formatInteger(result.product.salePrice, 0,'COMMA')}"></th:block>
+												<th:block th:if="${result.product.originalPrice != result.product.salePrice}">
+												<span class="itemPrice_original" th:if="${result.product.originalPrice > result.product.salePrice}"  th:text="${#numbers.formatInteger(result.product.originalPrice, 0,'COMMA')}">1,000,000</span>
+												<span class="itemPercent" th:if="${result.product.salePrice != result.product.originalPrice}" th:text="${(result.product.originalPrice == 0 ? 0 : #numbers.formatDecimal((result.product.originalPrice - result.product.salePrice) / (result.product.originalPrice * 1.0) * 100, 1, 0)) + '%'}">0%</span>
+												</th:block>
 											</p>
 										</a>
 									</div>
@@ -1326,20 +1330,22 @@
 				<div class="area_slider">
 					<div class="swiper-container">
 						<div class="swiper-wrapper">
-							<div class="swiper-slide" th:each="goodsInfo, status : ${likeGoodsList}">
+							<div class="swiper-slide" th:each="result, status : ${likeGoodsList}">
 								<div class="item_prod">
 									<div class="item_state">
-										<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsInfo.goodsCd}, ithrCd='IN15_05', contentsLoc='', planDtlSq=''">관심상품 추가</button>
-										<a href="javascript:void(0);" th:onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], '','IN15_05','','','pc_detail');" class="itemLink" >
+										<button type="button" class="itemLike" th:classappend="${result.product.itemId == 'Y'}? 'active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${result.product.itemId}, ithrCd='IN15_03', contentsLoc='', planDtlSq=''">관심상품 추가</button>
+										<a href="javascript:void(0);" th:onclick="cfnGoToGoodsDetail([[${result.product.itemId}]], '','IN15_03','','','pc_detail');" class="itemLink" >
 											<div class="itemPic">
-												<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm +'?RS=300'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+												<img alt="" class="vLHTC pd_img" th:src="${result.product.itemImage +'?RS=300'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 											</div>
-											<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
-											<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 로고 자카드 방풍 패딩</div>
+											<p class="itemBrand" th:text="${result.product.brandName}">BRAND NAME1</p>
+											<div class="itemName" th:text="${result.product.itemName}">남성 로고 자카드 방풍 패딩</div>
 											<p class="itemPrice">
-												<th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"></th:block>
-												<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}"  th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">1,000,000</span>
-												<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
+												<th:block th:text="${#numbers.formatInteger(result.product.salePrice, 0,'COMMA')}"></th:block>
+												<th:block th:if="${result.product.originalPrice != result.product.salePrice}">
+												<span class="itemPrice_original" th:if="${result.product.originalPrice > result.product.salePrice}"  th:text="${#numbers.formatInteger(result.product.originalPrice, 0,'COMMA')}">1,000,000</span>
+												<span class="itemPercent" th:if="${result.product.salePrice != result.product.originalPrice}" th:text="${(result.product.originalPrice == 0 ? 0 : #numbers.formatDecimal((result.product.originalPrice - result.product.salePrice) / (result.product.originalPrice * 1.0) * 100, 1, 0)) + '%'}">0%</span>
+												</th:block>
 											</p>
 										</a>
 									</div>
@@ -2717,14 +2723,16 @@
      window.onload = function(){
     	 $(".pd_descrp .cont_body").find('img').each(function() {
  			let tmpImgSrc = $(this).attr('src');
- 			if (tmpImgSrc.indexOf('/Upload') == 0 ){  // /Upload
+ 			if (tmpImgSrc.indexOf('/Upload/Local') > 0 ){  // /Upload
+ 				$(this).attr('src' , tmpImgSrc.replace('/Upload/Local', "/Local"));
+ 			}else if (tmpImgSrc.indexOf('Upload') == 1 ){  // /Upload
  				$(this).attr('src' , tmpImgSrc.replace('/Upload', _imgUrl+"/Local"));
  			}
  			
  		});
  	}
      
-
+   
 	// 광고 스크립트용
 	var goodsNavigation = [[${goodsNavigation}]];
 	var cate1Nm = "";
@@ -2759,7 +2767,7 @@
 	// 광고 스크립트용
 	
      
-	var snsGoodsImg = _uploadGoodsUrl + [[${goodsInfo.sysImgNm}]];
+	var snsGoodsImg = _uploadGoodsUrl + "/" + [[${goodsInfo.sysImgNm}]];
 	var snsUrl = location.protocol + _PAGE_GOODS_DETAIL + params.goodsCd;
 	if (typeof (params.colorCd) != 'undefined') snsUrl += "&colorCd=" + params.colorCd;
 	var snsGoodsFullNm = [[${goodsInfo.goodsFullNm}]];

+ 11 - 11
src/main/webapp/WEB-INF/views/web/goods/GoodsOtherFormWeb.html

@@ -17,7 +17,6 @@
  <th:block th:if="${goodsList != null and !goodsList.empty}">
 <div class="cont_head">
 	<h3 class="subH1 t_c mb40">
-		<th:block th:if="${params.goodsOtherGb =='tmtb'}" th:text="${'함께하면 할인되는 다다익선 상품'}"></th:block>
 		<th:block th:if="${params.goodsOtherGb =='together'}" th:text="${'이 상품과 함께 본 상품'}"></th:block>
 		<th:block th:if="${params.goodsOtherGb =='recommend'}" th:text="${params.brandGroupNm +' 추천상품'}"></th:block>
 		<th:block th:if="${params.goodsOtherGb =='like'}" th:text="${'이 상품과 비슷한 상품'}"></th:block>
@@ -28,21 +27,22 @@
 	<div class="area_slider">
 		<div class="swiper-container">
 			<div class="swiper-wrapper">
-				<div class="swiper-slide" th:each="goodsInfo, status : ${goodsList}">
+				<div class="swiper-slide" th:each="result, status : ${goodsList}">
 					<div class="item_prod">
 						<div class="item_state">
-							<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${goodsInfo.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=''">관심상품 추가</button>
-							<a href="javascript:void(0);" th:onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], '',[[${params.ithrCd}]],[[${params.contentsLoc}]],'','pc_detail');" class="itemLink" >
+							<button type="button" class="itemLike" th:classappend="${result.product.itemId == 'Y'}? 'active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${result.product.itemId}, ithrCd='IN15_03', contentsLoc='', planDtlSq=''">관심상품 추가</button>
+							<a href="javascript:void(0);" th:onclick="cfnGoToGoodsDetail([[${result.product.itemId}]], '','IN15_03','','','pc_detail');" class="itemLink" >
 								<div class="itemPic">
-									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm +'?RS=300'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
-									
+									<img alt="" class="vLHTC pd_img" th:src="${result.product.itemImage +'?RS=300'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 								</div>
-								<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
-								<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 로고 자카드 방풍 패딩</div>
+								<p class="itemBrand" th:text="${result.product.brandName}">BRAND NAME1</p>
+								<div class="itemName" th:text="${result.product.itemName}">남성 로고 자카드 방풍 패딩</div>
 								<p class="itemPrice">
-									<th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"></th:block>
-									<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}"  th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">1,000,000</span>
-									<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
+									<th:block th:text="${#numbers.formatInteger(result.product.salePrice, 0,'COMMA')}"></th:block>
+									<th:block th:if="${result.product.originalPrice != result.product.salePrice}">
+									<span class="itemPrice_original" th:text="${#numbers.formatInteger(result.product.originalPrice, 0,'COMMA')}">1,000,000</span>
+									<span class="itemPercent" th:text="${(result.product.originalPrice == 0 ? 0 : #numbers.formatDecimal((result.product.originalPrice - result.product.salePrice) / (result.product.originalPrice * 1.0) * 100, 1, 0)) + '%'}">0%</span>
+									</th:block>
 								</p>
 							</a>
 						</div>

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

@@ -73,7 +73,7 @@
     </div>   
 <form id="socialForm" name="socialForm" action="#" th:action="@{'/social/list'}">
 	<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
-	<input type="hidden" name="pageSize" value ="10"/>
+	<input type="hidden" name="pageSize" value ="50"/>
 </form>
 <script src="/ux/plugins/gaga/gaga.infinite.scrollSession.js"></script>
 <script src="/ux/plugins/jquery/jquery.history.min.js"></script>

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