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

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

tsit14 5 лет назад
Родитель
Сommit
fc8dd0fbdf
23 измененных файлов с 277 добавлено и 130 удалено
  1. 10 2
      src/main/java/com/style24/front/biz/dao/TsfCommonDao.java
  2. 13 5
      src/main/java/com/style24/front/biz/service/TsfCartService.java
  3. 12 5
      src/main/java/com/style24/front/biz/service/TsfCommonService.java
  4. 1 0
      src/main/java/com/style24/front/biz/service/TsfDisplayService.java
  5. 11 14
      src/main/java/com/style24/front/biz/thirdparty/SearchEngineDiquest.java
  6. 37 9
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  7. 2 1
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  8. 1 0
      src/main/java/com/style24/persistence/domain/Contents.java
  9. 22 21
      src/main/java/com/style24/persistence/domain/searchengine/GoodsListResponse.java
  10. 9 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfCommon.xml
  11. 75 37
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  12. 1 1
      src/main/resources/config/application-style.yml
  13. 1 2
      src/main/webapp/WEB-INF/views/mob/display/CategoryMainFormMob.html
  14. 1 3
      src/main/webapp/WEB-INF/views/mob/display/OutletMainFormMob.html
  15. 10 0
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDetailFormMob.html
  16. 18 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  17. 8 5
      src/main/webapp/WEB-INF/views/mob/goods/GoodsInstockAlarmFormMob.html
  18. 5 4
      src/main/webapp/WEB-INF/views/mob/goods/GoodsSizeInfoFormMob.html
  19. 4 4
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  20. 16 0
      src/main/webapp/WEB-INF/views/web/display/SearchGoodsListFormWeb.html
  21. 5 3
      src/main/webapp/WEB-INF/views/web/goods/GoodsInstockAlarmFormWeb.html
  22. 7 5
      src/main/webapp/WEB-INF/views/web/goods/GoodsSizeInfoFormWeb.html
  23. 8 8
      src/main/webapp/ux/style24_link.js

+ 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();
+
 }

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

@@ -82,6 +82,8 @@ public class TsfCartService {
 			login.setCustGrade("G110");
 		}
 
+		result.put("custNo", login.getCustNo());
+
 		String goodsType = params.iterator().next().getGoodsType();
 		String cartGb = params.iterator().next().getCartGb();
 		if(StringUtils.isEmpty(goodsType)) {
@@ -281,7 +283,6 @@ public class TsfCartService {
 		result.put("goodsType", goodsType);
 		result.put("cartGb", cartGb);
 		result.put("message", "SUCCESS");
-		result.put("custNo", login.getCustNo());
 
 		return result;
 	}
@@ -319,6 +320,7 @@ public class TsfCartService {
 		}
 
 		cart.setJsessionId(TscSession.getSessionId());
+		boolean chkGoOrderForm = false;
 
 		List<String> sendCartSqList = new ArrayList<String>();
 		for (Cart carts : params) {
@@ -363,7 +365,11 @@ public class TsfCartService {
 				} else {
 					cart.setCartGb(TscConstants.CartGb.MOB_ORDER.value());
 				}
+				if("O".equals(cartInfos.iterator().next().getCartGb())) {
+					chkGoOrderForm = true;
+				}
 			} else if (!StringUtils.isEmpty(cartInfos.iterator().next().getCartGb()) && "G".equals(cartInfos.iterator().next().getCartGb())) {
+				chkGoOrderForm = true;
 				cart.setCartGb(TscConstants.CartGb.GIFT.value());
 			} else {
 				cart.setCartGb(TscConstants.CartGb.CREATE_ORDER.value());
@@ -408,8 +414,9 @@ public class TsfCartService {
 			cartSqComma.append(cartSq);
 			i++;
 		}
-
-		TsfSession.setAttribute("cartSqArr", cartSqComma.toString());
+		if(chkGoOrderForm) {
+			TsfSession.setAttribute("cartSqArr", cartSqComma.toString());
+		}
 	}
 
 	@Transactional("shopTxnManager")
@@ -483,8 +490,9 @@ public class TsfCartService {
 			cartSqComma.append(cartSq);
 			i++;
 		}
-
-		TsfSession.setAttribute("cartSqArr", cartSqComma.toString());
+		if (!StringUtils.isEmpty(params.iterator().next().getCartGb()) && ("O".equals(params.iterator().next().getCartGb()) || "G".equals(params.iterator().next().getCartGb()))) {
+			TsfSession.setAttribute("cartSqArr", cartSqComma.toString());
+		}
 	}
 
 	// 장바구니 상품 리스트 조회 서비스

+ 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();
+	}
 
 }

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

@@ -411,6 +411,7 @@ public class TsfDisplayService {
 			tempContents.setMaxRow(20);
 			tempContents.setCustNo(TsfSession.isLogin() ? TsfSession.getInfo().getCustNo() : 0);
 			if ("SMM007".equals(data.getContentsLoc())) {
+				data.setFrontGb(TsfSession.getFrontGb());
 				data.setBannerList(displayDao.getContentsBannerList(data));
 			}
 			data.setGoodsList(goodsDao.getContentsCategoryGoodsList(tempContents));

+ 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;
 	}

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

@@ -83,7 +83,8 @@ public class TsfOrderController extends TsfBaseController {
 	public ModelAndView orderNoMember(Order order, @RequestParam(value = "sEncData", required = false) String sEncData
 			, @RequestParam(value = "authMethod", required = false) String authMethod) {
 		ModelAndView mav = new ModelAndView();
-		
+		TsfSession.removeAtrribute("cartSqArr");		// 2021.06.03 주문서 접근시 장바구니 등록 세션 제거
+
 		// 비회원 주문시 로직 정리
 		// @ WEB 인 경우에는 고객정보 입력 화면 후 주문서 이동 후 본인인중
 		// @ WEB 의 경우에는 입력한 고객정보와 인증받은 고객정보가 다른경우 고객정보 업데이트

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

@@ -75,6 +75,7 @@ public class Contents extends TscBaseDomain {
 	private String bannerGb;		// admin:수동설정, plan:기획전
 
 	private String pageGb;	// 호출페이지 구분(MALL:몰메인, BEST:베스트메인)
+	private String frontGb; // 몰메인 브랜드픽에서 사용
 
 	//private String contentsTitle;		// 메인 타이틀(md가 설정한)
 

+ 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>

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

@@ -719,44 +719,82 @@
 	<!-- 몰메인 브랜드픽 조회 -->
 	<select id="getContentsBannerList" parameterType="Contents" resultType="Contents">
 		/* TsfDisplay.getContentsBannerList */
-		SELECT   CASE B.M WHEN 1 THEN A.IMG_PATH1
-						  WHEN 2 THEN A.IMG_PATH2
-						  WHEN 3 THEN A.IMG_PATH3
-						  WHEN 4 THEN A.IMG_PATH4
-						  WHEN 5 THEN A.IMG_PATH5 END IMG_PATH1
-			 ,CASE B.M WHEN 1 THEN A.STR_VAR1
-					   WHEN 2 THEN A.STR_VAR2
-					   WHEN 3 THEN A.STR_VAR3
-					   WHEN 4 THEN A.STR_VAR4
-					   WHEN 5 THEN A.STR_VAR5 END STR_VAR1
-			 ,CASE B.M WHEN 1 THEN A.STR_TITLE1
-					   WHEN 2 THEN A.STR_TITLE2
-					   WHEN 3 THEN A.STR_TITLE3
-					   WHEN 4 THEN A.STR_TITLE4
-					   WHEN 5 THEN '' END STR_TITLE1
-			 ,CASE B.M WHEN 1 THEN A.SUB_TEXT1
-					   WHEN 2 THEN A.SUB_TEXT2
-					   WHEN 3 THEN A.SUB_TEXT3
-					   WHEN 4 THEN A.SUB_TEXT4
-					   WHEN 5 THEN '' END SUB_TEXT1
+		SELECT BRAND_GROUP_NO
+			 , IMG_PATH1
+			 , IMG_PATH2
+			 , STR_VAR1
+			 , STR_VAR2
+			 , STR_TITLE1
+			 , STR_TITLE2
+			 , SUB_TEXT1
+			 , SUB_TEXT2
 		FROM (
-			  (SELECT	BRAND_GROUP_NO
-					, IMG_PATH1 , IMG_PATH2 , IMG_PATH3 , IMG_PATH4, IMG_PATH5
-					, STR_VAR1 , STR_VAR2 , STR_VAR3 , STR_VAR4 , STR_VAR5
-					, STR_TITLE1 , STR_TITLE2 , STR_TITLE3 , STR_TITLE4
-					, SUB_TEXT1 , SUB_TEXT2 , SUB_TEXT3 , SUB_TEXT4
-			   FROM	TB_CONTENTS
-			   WHERE	CONTENTS_LOC = #{contentsLoc}
-				 AND		BRAND_GROUP_NO = #{brandGroupNo}
-			  ) A
-				 ,(
-			  SELECT 1 M
-			  UNION ALL SELECT 2
-			  UNION ALL SELECT 3
-			  UNION ALL SELECT 4
-			  UNION ALL SELECT 5
-				 ) B
-				 )
+				 SELECT BRAND_GROUP_NO
+					  , IMG_PATH1
+					  , IMG_PATH2
+					  , STR_VAR1
+					  , STR_VAR2
+					  , STR_TITLE1
+					  , STR_TITLE2
+					  , SUB_TEXT1
+					  , SUB_TEXT2
+				 FROM TB_CONTENTS
+				 WHERE 1 = 1
+				   AND CONTENTS_LOC = #{contentsLoc}
+				   AND NOW() BETWEEN DISP_STDT AND DISP_EDDT
+				   AND USE_YN = 'Y'
+				   AND BRAND_GROUP_NO = #{brandGroupNo}
+				 UNION ALL
+				 SELECT BRAND_GROUP_NO
+					  , IMG_PATH1
+					  , IMG_PATH2
+					  , STR_VAR1
+					  , STR_VAR2
+					  , STR_TITLE1
+					  , STR_TITLE2
+					  , SUB_TEXT1
+					  , SUB_TEXT2
+				 FROM (
+						  SELECT BRAND_CD                      AS BRAND_GROUP_NO
+							   , ORG_TNFILE_NM                 AS IMG_PATH1
+							   , ''                            AS IMG_PATH2
+							   , CONCAT('/display/lookbook/detail/form?lookbookGb=L&amp;lookbookSq=',LOOKBOOK_SQ ,'&amp;brandCd=',BRAND_CD) AS STR_VAR1
+							   , ''                            AS STR_VAR2
+							   , TITLE                         AS STR_TITLE1
+							   , ''                            AS STR_TITLE2
+							   , ''                            AS SUB_TEXT1
+							   , ''                            AS SUB_TEXT2
+						  FROM TB_LOOKBOOK
+						  WHERE 1 = 1
+							AND BRAND_CD = #{brandGroupNo}
+							AND NOW() BETWEEN DISP_STDT AND DISP_EDDT
+							AND DISP_YN = 'Y'
+						  ORDER BY REG_DT DESC
+						  LIMIT 1
+					  ) A
+				 UNION ALL
+				 SELECT PB.BRAND_GROUP_NO
+					  , P.MAIN_PIMG                                        AS IMG_PATH1
+					  , ''                                                 AS IMG_PATH2
+					  , CONCAT('/planning/detail/form?planSq=', P.PLAN_SQ) AS STR_VAR1
+					  , ''                                                 AS STR_VAR2
+					  , P.DTL_TITLE1                                       AS STR_TITLE1
+					  , P.DTL_TITLE2                                       AS STR_TITLE2
+					  , ''                                                 AS SUB_TEXT1
+					  , ''                                                 AS SUB_TEXT2
+				 FROM TB_PLAN P
+						  INNER JOIN TB_PLAN_BRAND PB ON P.PLAN_SQ = PB.PLAN_SQ AND PB.DISP_YN = 'Y'
+				 WHERE 1 = 1
+				   AND BRAND_GROUP_NO = #{brandGroupNo}
+				   AND NOW() BETWEEN DISP_STDT AND DISP_EDDT
+				   AND PLAN_GB = 'P'
+				   AND DEL_YN = 'N'
+				   AND OPEN_YN = 'Y'
+				<if test="frontGb != null and frontGb != ''">
+				   AND FRONT_GB LIKE CONCAT('%',#{frontGb},'%')
+				</if>
+			 ) AS Z
+		LIMIT 5
 	</select>
 
 	<!-- 상품리스트 카테고리별 필터 목록 -->

+ 1 - 1
src/main/resources/config/application-style.yml

@@ -26,7 +26,7 @@ spring:
                 172.30.90.112:6381
                 172.30.90.113:6381
 # SSL Server
-has-ssl: false
+has-ssl: true
 
 logging:
     config: classpath:log/logback-run.xml

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

@@ -112,8 +112,7 @@
 												</div>
 												<p class="itemBrand" th:text="${item.brandGroupNm}">BRAND NAME</p>
 												<div class=" itemName" th:text="${item.goodsFullNm}">여성 체인 프린트 큐롯 스커트 프린트 큐롯 스커트</div>
-												<p class="itemPrice_original" th:if="${item.currPrice != item.listPrice}" th:text="${#numbers.formatInteger(item.listPrice,3,'COMMA')}">89,000</p>
-												<p class="itemPrice">[[${#numbers.formatInteger(item.currPrice,1,'COMMA')}]]
+												<p class="itemPrice"><span class="itemPrice_original" th:if="${item.currPrice != item.listPrice}" th:text="${#numbers.formatInteger(item.listPrice,3,'COMMA')}">89,000</span>[[${#numbers.formatInteger(item.currPrice,1,'COMMA')}]]
 													<span class=" itemPercent" th:if="${item.currPrice != item.listPrice}" th:text="${(item.listPrice == 0 ? 0 : #numbers.formatDecimal((item.listPrice - item.currPrice) / (item.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
 												</p>
 												<div class="itemComment" th:if="${not #strings.isEmpty(item.goodsTnm)}" th:text="${item.goodsTnm}">#주문 폭주 상품</div>

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

@@ -110,9 +110,7 @@
 												</div>
 												<p class="itemBrand" th:text="${item.brandGroupNm}">BRAND NAME</p>
 												<div class="itemName" th:text="${item.goodsFullNm}">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
-												<p class="itemPrice">
-													<span class="itemPrice_original" th:if="${item.currPrice != item.listPrice}" th:text="${#numbers.formatInteger(item.listPrice,3,'COMMA')}">89,000</span>
-													[[${#numbers.formatInteger(item.currPrice,0,'COMMA')}]]
+												<p class="itemPrice"><span class="itemPrice_original" th:if="${item.currPrice != item.listPrice}" th:text="${#numbers.formatInteger(item.listPrice,3,'COMMA')}">89,000</span>[[${#numbers.formatInteger(item.currPrice,0,'COMMA')}]]
 													<span class="itemPercent" th:if="${item.currPrice != item.listPrice}" th:text="${(item.listPrice == 0 ? 0 : #numbers.formatDecimal((item.listPrice - item.currPrice) / (item.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
 												</p>
 												<div class="itemComment" th:text="${item.goodsTnm}">#주문 폭주 상품</div>

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

@@ -947,6 +947,11 @@
 			mcxDialog.alert("옵션을 선택해 주세요.");
 			return false;
 		}
+
+		if (btnType == "G" && targetSize > 1){
+			mcxDialog.alert("선물하기는 1개의 옵션만 선택하실 수 있습니다.");
+			return false;
+		}
 		
 		$target.each(function() {
 			
@@ -1288,6 +1293,11 @@
 		$(document).on('click','.pop_option_select .close',function(e){
 			$(".pop_option_select").hide();
 			$(".option_open").removeClass("on");
+			$('.form_field .select_custom.deal_opt_item').find('.combo .select').html('선택');
+			$('.form_field .select_custom.item_opt1').attr('disabled', true);
+			$('.form_field .select_custom.item_opt1').find('.combo .select').html('선택');
+			$('.form_field .select_custom.item_opt2').attr('disabled', true);
+			$('.form_field .select_custom.item_opt2').find('.combo .select').html('선택');
 			 return false;
 		 })
 //			//팝업 - 딜상세정보 옵션선택 > 옵션셀렉트팝업 ==> fnGoodsDealOptionOpen()대체

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

@@ -2106,6 +2106,12 @@
 			
 			if (goodsType == 'G056_N'){
 				let compsList = [];
+
+				if(btnType == "G" && targetSize > 1) {
+					mcxDialog.alert("선물하기는 1개의 옵션만 선택하실 수 있습니다.");
+					return false;
+				}
+
 				target.each(function() {
 
 					let ea = parseInt($(this).val());
@@ -2133,7 +2139,11 @@
 				cfnAddCart(compsList);
 
 			}else{ // 세트
-				
+				if(btnType == "G" && targetSize > 1) {
+					mcxDialog.alert("선물하기는 1개의 옵션만 선택하실 수 있습니다.");
+					return false;
+				}
+
 				target.each(function() {
 					let compsList = [];
 					let goodsList = {
@@ -2594,6 +2604,13 @@
 		$(document).on('click','.pop_option_select .close',function(e){
             $(".pop_option_select").hide();
 			$('.option_result .option_open').removeClass('on');
+			let target=$('.select_custom.item_opt1');
+			target.each(function(){ 
+				$('.form_field .select_custom.item_opt1.' +$(this).attr('id') ).find('.combo .select').html('선택');
+				$('.form_field .select_custom.item_opt2.' +$(this).attr('id') ).attr('disabled', true);
+				$('.form_field .select_custom.item_opt2.' +$(this).attr('id') ).find('.combo .select').html('선택');
+			});
+			
             return false;
         });
 

+ 8 - 5
src/main/webapp/WEB-INF/views/mob/goods/GoodsInstockAlarmFormMob.html

@@ -35,8 +35,9 @@
 								</div>
 								<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
 								<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>
-								<p class="itemPrice"><th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"> 134,100</th:block>
+								<p class="itemPrice">
 									<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">149,000</span>
+									<th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"> 134,100</th:block>
 									<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
 								</p>
 							</a>
@@ -47,13 +48,15 @@
 				<div class="select_blk" th:if="${goodsOption2List != null and !goodsOption2List.empty}" >
 					<h6>사이즈 선택</h6>
 					<div class="opt_size">
-						<div class="form_field">
-							<div th:each="goodsOption2, status : ${goodsOption2List}">
-								<th:block th:if="${goodsOption2.soldoutYn == 'Y' or goodsOption2.stockQty <= 0}" >
+						<div class="form_field size_select">
+							<th:block  th:each="goodsOption2, status : ${goodsOption2List}">
+							<th:block th:if="${goodsOption2.soldoutYn == 'Y' or goodsOption2.stockQty <= 0}" >
+							<div>
 								<input type="radio" name="opt" th:id="${'alarmSize'+goodsOption2.optCd}" th:value="${goodsOption2.optCd2}" th:attr="optCd=${goodsOption2.optCd}" >
 								<label th:for="${'alarmSize'+goodsOption2.optCd}"><span th:text="${goodsOption2.optCd2}" >90</span></label>
-								</th:block>
 							</div>
+							</th:block>
+							</th:block>
 						</div>
 					</div>
 				</div>

+ 5 - 4
src/main/webapp/WEB-INF/views/mob/goods/GoodsSizeInfoFormMob.html

@@ -51,7 +51,7 @@
 											</thead>
 											<tbody>
 												<th:block th:each="measurement, status : ${measurementList}" th:if="${status.first}">
-												<th:block th:if="${typeCd == '상의'}">
+												<th:block th:if="${measurement.typecd == '상의'}">
 												<tr>
 													<td scope="col">가슴둘레</td>
 												</tr>
@@ -65,8 +65,7 @@
 													<td scope="col">총길이</td>
 												</tr>
 												</th:block>
-												<th:block th:unless="${typeCd == '상의'}">
-												</th:block>
+												<th:block th:unless="${measurement.typecd == '상의'}">
 												<tr>
 													<td scope="col">허리둘레</td>
 												</tr>
@@ -119,7 +118,8 @@
 												</tr>
 											</thead>
 											<tbody>
-												<tr th:each="measurement, status : ${measurementList}" th:if="${not status.first}">
+												<th:block th:each="measurement, status : ${measurementList}" th:with="count=${(measurement.typecd =='상의')? 4: 5}">
+												<tr th:if="${not status.first and status.index <= count}">
 													<td th:if="${measurement.size1}" th:text="${measurement.size1}">95</td>
 													<td th:if="${measurement.size2}" th:text="${measurement.size2}">95</td>
 													<td th:if="${measurement.size3}" th:text="${measurement.size3}">95</td>
@@ -133,6 +133,7 @@
 													<td th:if="${measurement.size11}" th:text="${measurement.size11}">95</td>
 													<td th:if="${measurement.size12}" th:text="${measurement.size12}">95</td>
 												</tr>
+												</th:block>
 											</tbody>
 										</table>
 									</div>

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

@@ -183,7 +183,7 @@
 															</div>
 															<p class=" itemBrand" th:text="${bestItemData.brandGroupNm}">BRAND NAME</p>
 															<div class=" itemName" th:text="${bestItemData.goodsFullNm}">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-															<p class="itemPrice">[[${#numbers.formatInteger(bestItemData.currPrice,0,'COMMA')} + 원]]
+															<p class="itemPrice">[[${#numbers.formatInteger(bestItemData.currPrice,0,'COMMA')}]]
 																<span class="itemPrice_original" th:if="${bestItemData.currPrice != bestItemData.listPrice}" th:text="${#numbers.formatInteger(bestItemData.listPrice,3,'COMMA')}">89,000</span>
 																<span class=" itemPercent" th:if="${bestItemData.currPrice != bestItemData.listPrice}" th:text="${(bestItemData.listPrice == 0 ? 0 : #numbers.formatDecimal((bestItemData.listPrice - bestItemData.currPrice) / (bestItemData.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
 															</p>
@@ -337,7 +337,7 @@
 															<p class="itemBrand" th:text="${goodsData.brandGroupNm}">BRAND NAME</p>
 															<div class="itemName" th:text="${goodsData.goodsNm}">여성 체인 프린트 큐롯 스커트 프린트 큐롯 스커트</div>
 															<p class="itemPrice">
-																[[${#numbers.formatInteger(goodsData.currPrice,0,'COMMA')} + 원]]
+																[[${#numbers.formatInteger(goodsData.currPrice,0,'COMMA')}]]
 																<span class="itemPrice_original" th:if="${goodsData.currPrice != goodsData.listPrice}" th:text="${#numbers.formatInteger(goodsData.listPrice,0,'COMMA')} + '원'"></span>
 																<span class=" itemPercent" th:if="${goodsData.currPrice != goodsData.listPrice}" th:text="${#numbers.formatDecimal(goodsData.dcRate,1,0)} + '%'"></span>
 																<!--<span class="itemPercent" th:if="${planningGoods.currPrice != planningGoods.listPrice}" th:text="${(planningGoods.listPrice == 0 ? 0 : #numbers.formatDecimal((planningGoods.listPrice - planningGoods.currPrice) / (planningGoods.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>-->
@@ -456,7 +456,7 @@
 																<input type="hidden" name="bannerNote" th:value="${ContentsData.strTitle1}"/>
 															</p>
 															<!--<p>아우터 + 이너 단독세일</p>-->	<!-- br 태그 줄바꿈해야함-->
-															<button type="button" class="btn">VIEW MORE</button>
+<!--															<button type="button" class="btn">VIEW MORE</button>-->
 														</div>
 														<img alt="BLUE-a" class=" vLHTC pd_img" th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath1}">
 													</div>
@@ -512,7 +512,7 @@
 																		</div>
 																		<p class="itemBrand" th:text="${goodsData.brandGroupNm}">BRAND NAME</p>
 																		<div class=" itemName" th:text="${goodsData.goodsFullNm}">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-																		<p class="itemPrice">[[${#numbers.formatInteger(goodsData.currPrice,0,'COMMA')} + 원]]
+																		<p class="itemPrice">[[${#numbers.formatInteger(goodsData.currPrice,0,'COMMA')}]]
 																			<span class="itemPrice_original" th:if="${goodsData.currPrice != goodsData.listPrice}" th:text="${#numbers.formatInteger(goodsData.listPrice,1,'COMMA')}">89,000</span>
 																			<span class=" itemPercent" th:if="${goodsData.currPrice != goodsData.listPrice}" th:text="${(goodsData.listPrice == 0 ? 0 : #numbers.formatDecimal((goodsData.listPrice - goodsData.currPrice) / (goodsData.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
 																		</p>

+ 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);
 		});
 
 		// 좌측 카테고리 생성

+ 5 - 3
src/main/webapp/WEB-INF/views/web/goods/GoodsInstockAlarmFormWeb.html

@@ -48,12 +48,14 @@
 					<h6>사이즈 선택</h6>
 					<div class="opt_size">
 						<div class="form_field">
-							<div th:each="goodsOption2, status : ${goodsOption2List}">
-								<th:block th:if="${goodsOption2.soldoutYn == 'Y' or goodsOption2.stockQty <= 0}" >
+							<th:block  th:each="goodsOption2, status : ${goodsOption2List}">
+							<th:block th:if="${goodsOption2.soldoutYn == 'Y' or goodsOption2.stockQty <= 0}" >
+							<div>
 								<input type="radio" name="opt" th:id="${'alarmSize'+goodsOption2.optCd}" th:value="${goodsOption2.optCd2}" th:attr="optCd=${goodsOption2.optCd}" >
 								<label th:for="${'alarmSize'+goodsOption2.optCd}"><span th:text="${goodsOption2.optCd2}" >90</span></label>
-								</th:block>
 							</div>
+							</th:block>
+							</th:block>
 						</div>
 					</div>
 				</div>

+ 7 - 5
src/main/webapp/WEB-INF/views/web/goods/GoodsSizeInfoFormWeb.html

@@ -51,7 +51,7 @@
 											</thead>
 											<tbody>
 												<th:block th:each="measurement, status : ${measurementList}" th:if="${status.first}">
-												<th:block th:if="${typeCd == '상의'}">
+												<th:block th:if="${measurement.typecd == '상의'}">
 												<tr>
 													<td scope="col">가슴둘레</td>
 												</tr>
@@ -65,8 +65,7 @@
 													<td scope="col">총길이</td>
 												</tr>
 												</th:block>
-												<th:block th:unless="${typeCd == '상의'}">
-												</th:block>
+												<th:block th:unless="${measurement.typecd == '상의'}">
 												<tr>
 													<td scope="col">허리둘레</td>
 												</tr>
@@ -83,6 +82,7 @@
 													<td scope="col">총길이</td>
 												</tr>
 												</th:block>
+												</th:block>
 											</tbody>
 										</table>
 									</div>
@@ -103,7 +103,7 @@
 												<col th:if="${measurement.size12}" th:attr="width=${typeWith+'%'}">
 											</colgroup>
 											<thead>
-												<tr th:each="measurement, status : ${measurementList}" th:if="${status.first}" th:with="sizeCount=${measurement.sizeCount}">
+												<tr th:each="measurement, status : ${measurementList}" th:if="${status.first}" >
 													<th scope="col" th:if="${measurement.size1}" th:text="${measurement.size1}">M</th>
 													<th scope="col" th:if="${measurement.size2}" th:text="${measurement.size2}">M</th>
 													<th scope="col" th:if="${measurement.size3}" th:text="${measurement.size3}">M</th>
@@ -119,7 +119,8 @@
 												</tr>
 											</thead>
 											<tbody>
-												<tr th:each="measurement, status : ${measurementList}" th:if="${not status.first}">
+												<th:block th:each="measurement, status : ${measurementList}" th:with="count=${(measurement.typecd =='상의')? 4: 5}">
+												<tr th:if="${not status.first and status.index <= count}">
 													<td th:if="${measurement.size1}" th:text="${measurement.size1}">95</td>
 													<td th:if="${measurement.size2}" th:text="${measurement.size2}">95</td>
 													<td th:if="${measurement.size3}" th:text="${measurement.size3}">95</td>
@@ -133,6 +134,7 @@
 													<td th:if="${measurement.size11}" th:text="${measurement.size11}">95</td>
 													<td th:if="${measurement.size12}" th:text="${measurement.size12}">95</td>
 												</tr>
+												</th:block>
 											</tbody>
 										</table>
 									</div>

+ 8 - 8
src/main/webapp/ux/style24_link.js

@@ -355,16 +355,16 @@ function cfnAddCart(cartList) {
 						$("#directOrderForm").submit();
 					}
 				} else if (result.cartGb == "G") {
-					if(result.custNo == 0) {
+					if(result.custNo != null && result.custNo != 0) {
+						let orderHtml = "";
+						for(let i = 0 ; i < result.cartSqList.length ; i++) {
+							orderHtml += '<input type="hidden" name="cartSqArr" value="' + result.cartSqList[i] + '" />';
+						}
+						$("#directOrderForm").html(orderHtml);
+						$("#directOrderForm").submit();
+					} else {
 						location.href="/signin";
 					}
-					
-					let orderHtml = "";
-					for(let i = 0 ; i < result.cartSqList.length ; i++) {
-						orderHtml += '<input type="hidden" name="cartSqArr" value="' + result.cartSqList[i] + '" />';
-					}
-					$("#directOrderForm").html(orderHtml);
-					$("#directOrderForm").submit();
 				} else if (result.cartGb == "N") {
 					buy_nc_req(result.cartSqList);
 				} else {