소스 검색

검색엔진 상품리스트 조회 메소드 추가

gagamel 5 년 전
부모
커밋
8bde325a12

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

@@ -62,7 +62,7 @@ public interface TsfCommonDao {
 //	 * @since 2020. 08. 10
 //	 */
 //	void saveMobileDevice(TsfMobileDevice mobileDevice);
-	
+
 	/**
 	 * 주문배송지정보수정
 	 *
@@ -72,7 +72,7 @@ public interface TsfCommonDao {
 	 * @since 2021. 04. 02
 	 */
 	int updateDeliverAddr(Order order);
-	
+
 	/**
 	 * 주문배송지정보수정
 	 *
@@ -83,4 +83,12 @@ public interface TsfCommonDao {
 	 */
 	int updateDeliverAddrDelvMemo(Order order);
 
+	/**
+	 * 검색엔진 연동 여부
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 6. 3
+	 */
+	String getSearchEngineSyncYn();
+
 }

+ 12 - 5
src/main/java/com/style24/front/biz/service/TsfCommonService.java

@@ -84,7 +84,7 @@ public class TsfCommonService {
 //	public void saveMobileDevice(TsfMobileDevice mobileDevice) {
 //		commonDao.saveMobileDevice(mobileDevice);
 //	}
-	
+
 	/**
 	 * 주문배송지정보수정
 	 *
@@ -97,7 +97,7 @@ public class TsfCommonService {
 	public int updateDeliverAddr(Order order) {
 		return commonDao.updateDeliverAddr(order);
 	}
-	
+
 	/**
 	 * 주문배송지정보수정
 	 *
@@ -110,8 +110,15 @@ public class TsfCommonService {
 	public int updateDeliverAddrDelvMemo(Order order) {
 		return commonDao.updateDeliverAddrDelvMemo(order);
 	}
-	
-	
-	
+
+	/**
+	 * 검색엔진 연동 여부
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 6. 3
+	 */
+	public String getSearchEngineSyncYn() {
+		return commonDao.getSearchEngineSyncYn();
+	}
 
 }

+ 11 - 14
src/main/java/com/style24/front/biz/thirdparty/SearchEngineDiquest.java

@@ -16,11 +16,11 @@ import com.diquest.ir.common.exception.IRException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.gson.Gson;
 import com.style24.front.biz.dao.TsfDisplayDao;
-import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Cate1;
 import com.style24.persistence.domain.searchengine.CateResponse;
 import com.style24.persistence.domain.searchengine.Filter;
 import com.style24.persistence.domain.searchengine.FilterResponse;
+import com.style24.persistence.domain.searchengine.GoodsListResponse;
 import com.style24.persistence.domain.searchengine.SearchEngine;
 
 import istyle.AutoSearch;
@@ -102,7 +102,6 @@ public class SearchEngineDiquest {
 		paramMap.put("adminPort", port);
 //		paramMap.put("cate1No", 1300);
 //		paramMap.put("brandGroupNo", 0);
-		paramMap.put("frontGb", TsfSession.getFrontGb());
 //		paramMap.put("keyword", "키즈");
 //		paramMap.put("formalGb", "G009_20");
 
@@ -144,7 +143,6 @@ public class SearchEngineDiquest {
 		Map<String, Object> paramMap = this.convertObjectToMap(params);
 		paramMap.put("adminIp", ipAddr);
 		paramMap.put("adminPort", port);
-		paramMap.put("frontGb", TsfSession.getFrontGb());
 		log.info("///[getFilterList] paramMap: {}", paramMap);
 
 		try {
@@ -172,25 +170,24 @@ public class SearchEngineDiquest {
 	 * @author gagamel
 	 * @since 2021. 5. 31
 	 */
-	@SuppressWarnings("unchecked")
-	public SearchEngine getGoodsList(SearchEngine params) {
-		SearchEngine result = new SearchEngine();
+	public GoodsListResponse getGoodsList(SearchEngine params) {
+		GoodsListResponse result = new GoodsListResponse();
 
 		Map<String, Object> paramMap = this.convertObjectToMap(params);
 		paramMap.put("adminIp", ipAddr);
 		paramMap.put("adminPort", port);
-		log.info("{}", paramMap);
+		paramMap.put("pageNumber", "1");
+		paramMap.put("rowsPerPage", "30");
+		log.info("///[getGoodsList] paramMap: {}", paramMap);
 
 		try {
 			JSONObject jsonObj = SearchService.getGoodsList(paramMap);
-			log.info("jsonObj.toJSONString(): {}", jsonObj.toJSONString());
+			log.info("///[getGoodsList] jsonObj: {}", jsonObj.toJSONString());
 
-			Gson gson = new Gson();
-			Map<String, Object> resMap = gson.fromJson(jsonObj.toJSONString(), Map.class);
-			log.info("{}", resMap);
-
-			if (resMap.get("returnCode").equals("1")) { // 성공
-				result = gson.fromJson(resMap.get("response").toString(), SearchEngine.class);
+			if (jsonObj.get("returnCode").toString().equals("1")) { // 성공
+				Gson gson = new Gson();
+				result = gson.fromJson(jsonObj.toJSONString(), GoodsListResponse.class);
+				log.info("///[getGoodsList] result: {}", result);
 			}
 		} catch (Exception e) {
 			e.printStackTrace();

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

@@ -25,6 +25,7 @@ import com.style24.core.biz.service.TscEnvsetService;
 import com.style24.core.biz.service.TscLookbookService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.front.biz.service.TsfCommonService;
 import com.style24.front.biz.service.TsfDisplayService;
 import com.style24.front.biz.service.TsfGoodsService;
 import com.style24.front.biz.service.TsfPlanningService;
@@ -47,6 +48,7 @@ import com.style24.persistence.domain.Plan;
 import com.style24.persistence.domain.Popup;
 import com.style24.persistence.domain.Social;
 import com.style24.persistence.domain.searchengine.Filter;
+import com.style24.persistence.domain.searchengine.GoodsListResponse;
 import com.style24.persistence.domain.searchengine.SearchEngine;
 
 import lombok.extern.slf4j.Slf4j;
@@ -89,6 +91,9 @@ public class TsfDisplayController extends TsfBaseController {
 	@Autowired
 	private SearchEngineDiquest diquest;
 
+	@Autowired
+	private TsfCommonService commonService;
+
 	/**
 	 * PC보기. 모바일에서 <PC> 형태로 볼 때
 	 * @return
@@ -948,18 +953,29 @@ public class TsfDisplayController extends TsfBaseController {
 		SearchEngine params = new SearchEngine();
 		params.setKeyword(keyword);
 		params.setBrandGroupNo(brandGroupNo == null ? 0 : brandGroupNo);
+		params.setFrontGb(TsfSession.getFrontGb());
 
 		ModelAndView mav = new ModelAndView(super.getDeviceViewName("display/SearchGoodsListForm"));
 
 //		mav.addObject("cateInfo", params);
 
-		// 상품검색키워드 카테고리 목록
-		mav.addObject("cateList", diquest.getCategoryList(params));
-//		mav.addObject("cateList", displayService.getKeywordCategoryList(params.getKeyword()));
+		Collection<Filter> filterList = new ArrayList<Filter>();
 
-		// 상품리스트 카테고리별 필터 목록
-		Collection<Filter> filterList = diquest.getFilterList(params);
-//		Collection<Filter> filterList = displayService.getSearchGoodsListCategoryFilterList(params);
+		// 검색엔진 연동 여부
+		String syncYn = commonService.getSearchEngineSyncYn();
+		if (syncYn.equals("Y")) { // 검색엔진을 통한 상품리스트 조회
+			// 상품검색키워드 카테고리 목록
+			mav.addObject("cateList", diquest.getCategoryList(params));
+
+			// 상품리스트 카테고리별 필터 목록
+			filterList = diquest.getFilterList(params);
+		} else { // DB를 통한 상품리스트 조회
+			// 상품검색키워드 카테고리 목록
+			mav.addObject("cateList", displayService.getKeywordCategoryList(params.getKeyword()));
+
+			// 상품리스트 카테고리별 필터 목록
+			filterList = displayService.getSearchGoodsListCategoryFilterList(params);
+		}
 
 		// 필터 설정
 		mav.addObject("filterBrandList", displayService.getCategoryFilterList(filterList, "BRAND"));
@@ -994,10 +1010,22 @@ public class TsfDisplayController extends TsfBaseController {
 		params.setFrontGb(TsfSession.getFrontGb());
 		params.setCustGb(TsfSession.getCustGb());
 
-		pageable.setTotalCount(goodsService.getSearchGoodsCount(params));
-		params.setPageable(pageable);
+		Collection<SearchEngine> dataList = new ArrayList<SearchEngine>();
+
+		// 검색엔진 연동 여부
+		String syncYn = commonService.getSearchEngineSyncYn();
+		if (syncYn.equals("Y")) { // 검색엔진을 통한 상품리스트 조회
+			GoodsListResponse response = diquest.getGoodsList(params);
+			pageable.setTotalCount(response.getTotalCount());
+			dataList = response.getResponse();
+		} else { // DB를 통한 상품리스트 조회
+			pageable.setTotalCount(goodsService.getSearchGoodsCount(params));
+			params.setPageable(pageable);
+			dataList = goodsService.getSearchGoodsList(params);
+		}
+
 		result.set("paging", pageable);
-		result.set("dataList", goodsService.getSearchGoodsList(params));
+		result.set("dataList", dataList);
 
 		return result;
 	}

+ 22 - 21
src/main/java/com/style24/persistence/domain/searchengine/GoodsListResponse.java

@@ -17,26 +17,27 @@ public class GoodsListResponse implements Serializable {
 
 	private Integer returnCode;				// 응답코드(양수: 정상, 음수: 오류)
 	private int totalCount;					// 상품전체건수
-	private Collection<Goods> response;
-
-	@Data
-	public class Goods {
-		private String brandGroupNm;	// 브랜드그룹명
-		private String goodsCd;			// 상품코드
-		private String goodsFullNm;		// 상품FULL명
-		private String goodsTnm;		// 상품타이틀명
-		private int listPrice;			// 정상가
-		private int currPrice;			// 현재판매가(=혜택가)
-		private String sysImgNm;		// 상품시스템파일명(썸네일 기본 이미지)
-		private String sysImgNm2;		// 상품시스템파일명2(썸네일 마우스오버 이미지)
-		private String videos;			// 동영상들(,로 연결된 문자열. 동영상구분:미디어컨텐츠 또는 유튜브동영상ID, ...)
-		private String colorChips;		// 컬러칩들(,로 연결된 문자열. 색상코드:컬러칩, ...)
-		private String sizes;			// 사이즈들(,로 연결된 문자열. 사이즈코드:품절여부, ...)
-		private String benefits;		// 혜택들(,로 연결된 문자열. 혜택구분:혜택명, ...)
-
-		private String likeIt;			// 좋아요(위시리스트에담긴상품)
-		private String mainColorCd;		// 메인컬러
-		private String selfGoodsYn;		// 자사상품여부
-	}
+	private Collection<SearchEngine> response;
+//	private Collection<Goods> response;
+//
+//	@Data
+//	public class Goods {
+//		private String brandGroupNm;	// 브랜드그룹명
+//		private String goodsCd;			// 상품코드
+//		private String goodsFullNm;		// 상품FULL명
+//		private String goodsTnm;		// 상품타이틀명
+//		private int listPrice;			// 정상가
+//		private int currPrice;			// 현재판매가(=혜택가)
+//		private String sysImgNm;		// 상품시스템파일명(썸네일 기본 이미지)
+//		private String sysImgNm2;		// 상품시스템파일명2(썸네일 마우스오버 이미지)
+//		private String videos;			// 동영상들(,로 연결된 문자열. 동영상구분:미디어컨텐츠 또는 유튜브동영상ID, ...)
+//		private String colorChips;		// 컬러칩들(,로 연결된 문자열. 색상코드:컬러칩, ...)
+//		private String sizes;			// 사이즈들(,로 연결된 문자열. 사이즈코드:품절여부, ...)
+//		private String benefits;		// 혜택들(,로 연결된 문자열. 혜택구분:혜택명, ...)
+//
+//		private String likeIt;			// 좋아요(위시리스트에담긴상품)
+//		private String mainColorCd;		// 메인컬러
+//		private String selfGoodsYn;		// 자사상품여부
+//	}
 
 }

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

@@ -78,5 +78,14 @@
 		WHERE  1=1
 		AND    DELV_ADDR_SQ         = #{delvAddrSq}
 	</update>
+	
+	<!-- 검색엔진 연동 여부 -->
+	<select id="getSearchEngineSyncYn" resultType="String">
+		/* TsfCommon.getSearchEngineSyncYn */
+		SELECT UPPER(IFNULL(USE_YN,'N')) AS SYNC_YN
+		FROM   TB_COMMON_CODE
+		WHERE  CD_GB = 'G085'
+		AND    CD = 'SEARCHSYNCYN'
+	</select>
 
 </mapper>

+ 16 - 0
src/main/webapp/WEB-INF/views/web/display/SearchGoodsListFormWeb.html

@@ -1681,7 +1681,21 @@
 		</div>
 	</div>
 
+	<form id="searchGoodsForm" name="searchGoodsForm">
+		<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+		<input type="hidden" name="pageSize" value ="30"/>
+		<input type="hidden" name="keyword" value ="티셔츠"/>
+	</form>
+	
 	<script th:inline="javascript">
+		// 상품 검색
+		var fnGetInfiniteScrollDataList = function (pageNum) {
+			$("#searchGoodsForm input[name=pageNo]").val(pageNum + 1);
+			gagajf.ajaxFormSubmit("/display/search/goods/list", document.searchGoodsForm, function(result) {
+				console.log(result);
+			}, true);
+		}
+	
 		$(document).ready( function() {
 			fnCreateSearchCategoryList();
 			// fnCreateSearchFilter();
@@ -1748,6 +1762,8 @@
 				$(this).parent('li').siblings('li').find('.sub_cate').hide();
 				$(this).parent('li').children(".sub_cate").toggle();
 			});
+			
+			fnGetInfiniteScrollDataList(1);
 		});
 
 		// 좌측 카테고리 생성