Переглянути джерело

카테고리별 검색필터 생성 배치 추가

gagamel 5 роки тому
батько
коміт
c7136c8551

+ 78 - 0
src/main/java/com/style24/batch/biz/dao/TsbDisplayDao.java

@@ -55,4 +55,82 @@ public interface TsbDisplayDao {
 	 */
 	int createCategoryStock();
 
+	/**
+	 * 임시카테고리별검색필터 테이블 truncate
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	void truncateTemporaryCategoryFilter();
+
+	/**
+	 * 임시카테고리별검색필터 - 브랜드 생성
+	 * @return 생성건수
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	int createTemporaryCategoryFilterBrand();
+
+	/**
+	 * 임시카테고리별검색필터 - 사이즈 생성
+	 * @return 생성건수
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	int createTemporaryCategoryFilterSize();
+
+	/**
+	 * 임시카테고리별검색필터 - 가격 생성
+	 * @return 생성건수
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	int createTemporaryCategoryFilterPrice();
+
+	/**
+	 * 임시카테고리별검색필터 - 연령대 생성
+	 * @return 생성건수
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	int createTemporaryCategoryFilterAge();
+
+	/**
+	 * 임시카테고리별검색필터 - 시즌 생성
+	 * @return 생성건수
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	int createTemporaryCategoryFilterSeason();
+
+	/**
+	 * 임시카테고리별검색필터 - 색상 생성
+	 * @return 생성건수
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	int createTemporaryCategoryFilterColor();
+
+	/**
+	 * 임시카테고리별검색필터 - 혜택 생성
+	 * @return 생성건수
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	int createTemporaryCategoryFilterBenefit();
+
+	/**
+	 * 카테고리별검색필터 삭제
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	void deleteCategoryFilter();
+
+	/**
+	 * 카테고리별검색필터 생성
+	 * @return 생성건수
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	int createCategoryFilter();
+
 }

+ 53 - 0
src/main/java/com/style24/batch/biz/job/display/TsbCategoryFilterJob.java

@@ -0,0 +1,53 @@
+package com.style24.batch.biz.job.display;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.style24.batch.biz.job.TsbAbstractJob;
+import com.style24.batch.biz.service.TsbDisplayService;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 카테고리 검색필터(브랜드, 사이즈, 가격, 연령대, 시즌, 색상, 혜택) 생성
+ * 		상품혜택 생성 배치가 선 실행되어야 한다.
+ *
+ * @author gagamel
+ * @since 2021. 4. 8
+ */
+@Component
+@Slf4j
+public class TsbCategoryFilterJob extends TsbAbstractJob<String, String, String> {
+
+	@Autowired
+	private TsbDisplayService displayService;
+
+	@Override
+	public String read() throws Exception {
+		return "OK";
+	}
+
+	@Override
+	public String process(String result) throws Exception {
+		int cnt = displayService.createTemporaryCategoryFilter();
+		log.info("1.임시 카테고리별 검색필터 생성: 총 {}건", cnt);
+
+		if (cnt > 0) {
+			cnt = displayService.createCategoryFilter();
+			log.info("2.카테고리별 검색필터 생성: {}건", cnt);
+		}
+
+		return result;
+	}
+
+	@Override
+	public String write(String result) throws Exception {
+		return result;
+	}
+
+	@Override
+	public void notify(String result) throws Exception {
+		// Do nothing
+	}
+
+}

+ 55 - 0
src/main/java/com/style24/batch/biz/service/TsbDisplayService.java

@@ -63,4 +63,59 @@ public class TsbDisplayService {
 		}
 	}
 
+	/**
+	 * 임시카테고리별검색필터 생성
+	 * @return 생성건수
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	@Transactional("shopTxnManager")
+	public int createTemporaryCategoryFilter() {
+		// 카테고리별검색필터임시 테이블 truncate
+		displayDao.truncateTemporaryCategoryFilter();
+
+		int totCnt = 0;
+		int cnt = displayDao.createTemporaryCategoryFilterBrand();
+		totCnt += cnt;
+		log.info("1.1.임시카테고리별검색필터-브랜드 생성: {}", cnt);
+
+		cnt = displayDao.createTemporaryCategoryFilterSize();
+		totCnt += cnt;
+		log.info("1.2.임시카테고리별검색필터-사이즈 생성: {}", cnt);
+
+		cnt = displayDao.createTemporaryCategoryFilterPrice();
+		totCnt += cnt;
+		log.info("1.3.임시카테고리별검색필터-가격 생성: {}", cnt);
+
+		cnt = displayDao.createTemporaryCategoryFilterAge();
+		totCnt += cnt;
+		log.info("1.4.임시카테고리별검색필터-연령대 생성: {}", cnt);
+
+		cnt = displayDao.createTemporaryCategoryFilterSeason();
+		totCnt += cnt;
+		log.info("1.5.임시카테고리별검색필터-시즌 생성: {}", cnt);
+
+		cnt = displayDao.createTemporaryCategoryFilterColor();
+		totCnt += cnt;
+		log.info("1.6.임시카테고리별검색필터-색상 생성: {}", cnt);
+
+		cnt = displayDao.createTemporaryCategoryFilterBenefit();
+		totCnt += cnt;
+		log.info("1.7.임시카테고리별검색필터-혜택 생성: {}", cnt);
+
+		return totCnt;
+	}
+
+	/**
+	 * 카테고리별 검색필터 생성
+	 * @return 생성건수
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	@Transactional("shopTxnManager")
+	public int createCategoryFilter() {
+		displayDao.deleteCategoryFilter();
+		return displayDao.createCategoryFilter();
+	}
+
 }

+ 14 - 0
src/main/java/com/style24/batch/biz/task/TsbDisplayTask.java

@@ -6,6 +6,7 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import com.style24.batch.biz.job.display.TsbCategory4SrchJob;
+import com.style24.batch.biz.job.display.TsbCategoryFilterJob;
 import com.style24.batch.biz.job.display.TsbCategoryStockJob;
 
 import lombok.extern.slf4j.Slf4j;
@@ -26,6 +27,9 @@ public class TsbDisplayTask {
 	@Autowired
 	private TsbCategoryStockJob cateStockJob;
 
+	@Autowired
+	private TsbCategoryFilterJob cateFilterJob;
+
 	/**
 	 * 카테고리4SRCH 생성 - 매시 10분마다 0초 기준
 	 * @throws Exception
@@ -46,4 +50,14 @@ public class TsbDisplayTask {
 		cateStockJob.runById("cron.display.category.stock");
 	}
 
+	/**
+	 * 카테고리별 검색 필터 생성
+	 * @throws Exception
+	 */
+	@Scheduled(cron = "${cron.display.category.filter}")
+	@Async
+	public void createCategoryFilter() throws Exception {
+		cateFilterJob.runById("cron.display.category.filter");
+	}
+
 }

+ 1044 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsbDisplay.xml

@@ -222,4 +222,1048 @@
 		FROM   TB_CATE_STOCK_TMP
 	</insert>
 	
+	<!-- 임시카테고리별검색필터 테이블 truncate -->
+	<delete id="truncateTemporaryCategoryFilter">
+		/* TsbDisplay.truncateTemporaryCategoryFilter */
+		TRUNCATE TABLE TB_CATE_FILTER_TMP
+	</delete>
+	
+	<!-- 임시카테고리별검색필터 - 브랜드 생성 -->
+	<insert id="createTemporaryCategoryFilterBrand" timeout="600">
+		/* TsbDisplay.createTemporaryCategoryFilterBrand */
+		INSERT INTO TB_CATE_FILTER_TMP (
+		       SITE_CD
+		     , CATE_GB
+		     , FORMAL_GB
+		     , BRAND_GROUP_NO
+		     , CATE_NO
+		     , FILTER_GB
+		     , FILTER_CD
+		     , FILTER_NM
+		     , DISP_ORD
+		)
+		WITH TAB_FILTER AS (
+		    SELECT C4.SITE_CD
+		         , C4.CATE_GB
+		         , C4.FORMAL_GB
+		         , CG.BRAND_GROUP_NO
+		         , C4.CATE1_NO
+		         , C4.CATE2_NO
+		         , C4.CATE3_NO
+		         , C4.CATE4_NO
+		         , C4.CATE5_NO
+		         , B.BRAND_GROUP_NO  AS FILTER_CD
+		         , CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
+		                BG.BRAND_GROUP_ENM
+		           ELSE
+		                BG.BRAND_GROUP_KNM
+		           END               AS FILTER_NM
+		    FROM   TB_CATE_4SRCH C4
+		         , TB_CATE_GOODS CG
+		         , TB_GOODS G
+		         , TB_GOODS_STOCK GS
+		         , TB_BRAND B
+		         , TB_SITE_BRAND SB
+		         , TB_BRAND_GROUP BG
+		    WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
+		    AND    CG.BRAND_GROUP_NO = 0
+		    AND    CG.GOODS_CD = G.GOODS_CD
+		    AND    G.GOODS_CD = GS.GOODS_CD
+		    AND    G.BRAND_CD = B.BRAND_CD
+		    AND    B.BRAND_CD = SB.BRAND_CD
+		    AND    B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		    AND    C4.SITE_CD = 'G000_10'
+		    AND    C4.CATE_GB = 'G032_101'
+		    AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		    AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		    AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		    AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
+		    AND    GS.STOCK_QTY > 0 /*재고있는상품*/
+		    AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
+		    AND    SB.SITE_CD = 'G000_10'
+		    AND    SB.USE_YN = 'Y' /*사이트에서 사용하는 브랜드*/
+		    AND    BG.USE_YN = 'Y' /*사용하는 브랜드그룹*/
+		)
+		SELECT SITE_CD
+		     , CATE_GB
+		     , FORMAL_GB
+		     , BRAND_GROUP_NO
+		     , CATE_NO
+		     , 'BRAND'        AS FILTER_GB
+		     , FILTER_CD
+		     , FILTER_NM
+		     , RANK() OVER(PARTITION BY SITE_CD, CATE_GB, FORMAL_GB, BRAND_GROUP_NO, CATE_NO
+		                   ORDER BY FILTER_NM
+		                  )   AS DISP_ORD
+		FROM   (
+		        SELECT DISTINCT
+		               SITE_CD
+		             , CATE_GB
+		             , FORMAL_GB
+		             , BRAND_GROUP_NO
+		             , CATE_NO
+		             , FILTER_CD
+		             , FILTER_NM
+		        FROM   (
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE5_NO       AS CATE_NO
+		                     , FILTER_CD
+		                     , FILTER_NM
+		                FROM   TAB_FILTER
+		                WHERE  CATE5_NO IS NOT NULL
+		                UNION ALL
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE4_NO       AS CATE_NO
+		                     , FILTER_CD
+		                     , FILTER_NM
+		                FROM   TAB_FILTER
+		                WHERE  CATE4_NO IS NOT NULL
+		                UNION ALL
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE3_NO       AS CATE_NO
+		                     , FILTER_CD
+		                     , FILTER_NM
+		                FROM   TAB_FILTER
+		                WHERE  CATE3_NO IS NOT NULL
+		                UNION ALL
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE2_NO       AS CATE_NO
+		                     , FILTER_CD
+		                     , FILTER_NM
+		                FROM   TAB_FILTER
+		                WHERE  CATE2_NO IS NOT NULL
+		                UNION ALL
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE1_NO       AS CATE_NO
+		                     , FILTER_CD
+		                     , FILTER_NM
+		                FROM   TAB_FILTER
+		                WHERE  CATE1_NO IS NOT NULL
+		               ) Z
+		        WHERE  CATE_NO IS NOT NULL
+		       ) Z
+	</insert>
+	
+	<!-- 임시카테고리별검색필터 - 사이즈 생성 -->
+	<insert id="createTemporaryCategoryFilterSize" timeout="600">
+		/* TsbDisplay.createTemporaryCategoryFilterSize */
+		INSERT INTO TB_CATE_FILTER_TMP (
+		       SITE_CD
+		     , CATE_GB
+		     , FORMAL_GB
+		     , BRAND_GROUP_NO
+		     , CATE_NO
+		     , FILTER_GB
+		     , FILTER_CD
+		     , FILTER_NM
+		     , DISP_ORD
+		)
+		WITH TAB_FILTER AS (
+		    SELECT C4.SITE_CD
+		         , C4.CATE_GB
+		         , C4.FORMAL_GB
+		         , CG.BRAND_GROUP_NO
+		         , C4.CATE1_NO
+		         , C4.CATE2_NO
+		         , C4.CATE3_NO
+		         , C4.CATE4_NO
+		         , C4.CATE5_NO
+		         , CONCAT(I.SIZE_GB,'|',S.OPT_CD2) AS FILTER_CD
+		         , S.OPT_CD2                       AS FILTER_NM
+		    FROM   TB_CATE_4SRCH C4
+		         , TB_CATE_GOODS CG
+		         , TB_GOODS G
+		         , TB_ITEMKIND I
+		         , VW_STOCK S
+		         , TB_BRAND B
+		         , TB_SITE_BRAND SB
+		    WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
+		    AND    CG.BRAND_GROUP_NO = 0
+		    AND    CG.GOODS_CD = G.GOODS_CD
+		    AND    G.ITEMKIND_CD = I.ITEMKIND_CD
+		    AND    G.GOODS_CD = S.GOODS_CD
+		    AND    G.BRAND_CD = B.BRAND_CD
+		    AND    B.BRAND_CD = SB.BRAND_CD
+		    AND    C4.SITE_CD = 'G000_10'
+		    AND    C4.CATE_GB = 'G032_101'
+		    AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		    AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		    AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		    AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
+		    AND    I.SIZE_GB IS NOT NULL
+		    AND    S.CURR_STOCK_QTY - S.BASE_STOCK_QTY > 0 /*재고있는옵션*/
+		    AND    S.SOLDOUT_YN = 'N' /*품절이 아닌 옵션*/
+		    AND    S.DISP_YN = 'Y' /*노출하는 옵션*/
+		    AND    LENGTH(S.OPT_CD2) > 0
+		    AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
+		    AND    SB.SITE_CD = 'G000_10'
+		    AND    SB.USE_YN = 'Y' /*사이트에서 사용하는 브랜드*/
+		)
+		SELECT SITE_CD
+		     , CATE_GB
+		     , FORMAL_GB
+		     , BRAND_GROUP_NO
+		     , CATE_NO
+		     , 'SIZE'        AS FILTER_GB
+		     , FILTER_CD
+		     , FILTER_NM
+		     , RANK() OVER(PARTITION BY SITE_CD, CATE_GB, FORMAL_GB, BRAND_GROUP_NO, CATE_NO
+		                   ORDER BY CASE WHEN FILTER_CD LIKE 'T%' THEN 1
+		                                 WHEN FILTER_CD LIKE 'B%' THEN 2
+		                                 WHEN FILTER_CD LIKE 'S%' THEN 3
+		                                 ELSE 4
+		                            END, FILTER_NM
+		                  )   AS DISP_ORD
+		FROM   (
+		        SELECT DISTINCT
+		               SITE_CD
+		             , CATE_GB
+		             , FORMAL_GB
+		             , BRAND_GROUP_NO
+		             , CATE_NO
+		             , FILTER_CD
+		             , FILTER_NM
+		        FROM   (
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE5_NO       AS CATE_NO
+		                     , FILTER_CD
+		                     , FILTER_NM
+		                FROM   TAB_FILTER
+		                WHERE  CATE5_NO IS NOT NULL
+		                UNION ALL
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE4_NO       AS CATE_NO
+		                     , FILTER_CD
+		                     , FILTER_NM
+		                FROM   TAB_FILTER
+		                WHERE  CATE4_NO IS NOT NULL
+		                UNION ALL
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE3_NO       AS CATE_NO
+		                     , FILTER_CD
+		                     , FILTER_NM
+		                FROM   TAB_FILTER
+		                WHERE  CATE3_NO IS NOT NULL
+		                UNION ALL
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE2_NO       AS CATE_NO
+		                     , FILTER_CD
+		                     , FILTER_NM
+		                FROM   TAB_FILTER
+		                WHERE  CATE2_NO IS NOT NULL
+		                UNION ALL
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE1_NO       AS CATE_NO
+		                     , FILTER_CD
+		                     , FILTER_NM
+		                FROM   TAB_FILTER
+		                WHERE  CATE1_NO IS NOT NULL
+		               ) Z
+		        WHERE  CATE_NO IS NOT NULL
+		       ) Z
+	</insert>
+	
+	<!-- 임시카테고리별검색필터 - 가격 생성 -->
+	<insert id="createTemporaryCategoryFilterPrice" timeout="600">
+		/* TsbDisplay.createTemporaryCategoryFilterPrice */
+		INSERT INTO TB_CATE_FILTER_TMP (
+		       SITE_CD
+		     , CATE_GB
+		     , FORMAL_GB
+		     , BRAND_GROUP_NO
+		     , CATE_NO
+		     , FILTER_GB
+		     , FILTER_CD
+		     , FILTER_NM
+		     , DISP_ORD
+		)
+		WITH TAB_FILTER AS (
+		    SELECT C4.SITE_CD
+		         , C4.CATE_GB
+		         , C4.FORMAL_GB
+		         , CG.BRAND_GROUP_NO
+		         , C4.CATE1_NO
+		         , C4.CATE2_NO
+		         , C4.CATE3_NO
+		         , C4.CATE4_NO
+		         , C4.CATE5_NO
+		         , FN_GET_BENEFIT_PRICE('P',G.GOODS_CD,G.CURR_PRICE,'G100_10') AS CURR_PRICE
+		    FROM   TB_CATE_4SRCH C4
+		         , TB_CATE_GOODS CG
+		         , TB_GOODS G
+		         , TB_GOODS_STOCK GS
+		         , TB_BRAND B
+		         , TB_SITE_BRAND SB
+		    WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
+		    AND    CG.BRAND_GROUP_NO = 0
+		    AND    CG.GOODS_CD = G.GOODS_CD
+		    AND    CG.GOODS_CD = GS.GOODS_CD
+		    AND    G.BRAND_CD = B.BRAND_CD
+		    AND    B.BRAND_CD = SB.BRAND_CD
+		    AND    C4.SITE_CD = 'G000_10'
+		    AND    C4.CATE_GB = 'G032_101'
+		    AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		    AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		    AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		    AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
+		    AND    GS.STOCK_QTY > 0 /*재고있는옵션*/
+		    AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
+		    AND    SB.SITE_CD = 'G000_10'
+		    AND    SB.USE_YN = 'Y' /*사이트에서 사용하는 브랜드*/
+		)
+		, TAB_PRICE AS (
+		    SELECT SITE_CD
+		         , CATE_GB
+		         , FORMAL_GB
+		         , BRAND_GROUP_NO
+		         , CATE_NO
+		         , FLOOR(MIN_CURR_PRICE / 1000) * 1000                   AS PRICE1
+		         , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 1) / 1000) * 1000 AS PRICE2
+		         , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 2) / 1000) * 1000 AS PRICE3
+		         , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 3) / 1000) * 1000 AS PRICE4
+		         , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 4) / 1000) * 1000 AS PRICE5
+		         , FLOOR(MAX_CURR_PRICE / 1000) * 1000                   AS PRICE6
+		    FROM   (
+		            SELECT SITE_CD
+		                 , CATE_GB
+		                 , FORMAL_GB
+		                 , BRAND_GROUP_NO
+		                 , CATE1_NO        AS CATE_NO
+		                 , MIN(CURR_PRICE) AS MIN_CURR_PRICE                    /*최소현재판매가*/
+		                 , MAX(CURR_PRICE) AS MAX_CURR_PRICE                    /*최대현재판매가*/
+		                 , (MAX(CURR_PRICE) - MIN(CURR_PRICE)) / 5 AS SLICE_VAL /*분할값*/
+		            FROM   TAB_FILTER
+		            WHERE  CATE1_NO IS NOT NULL
+		            GROUP  BY SITE_CD, CATE_GB, FORMAL_GB, BRAND_GROUP_NO, CATE1_NO
+		           ) Z
+		    UNION ALL
+		    SELECT SITE_CD
+		         , CATE_GB
+		         , FORMAL_GB
+		         , BRAND_GROUP_NO
+		         , CATE_NO
+		         , FLOOR(MIN_CURR_PRICE / 1000) * 1000                   AS PRICE1
+		         , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 1) / 1000) * 1000 AS PRICE2
+		         , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 2) / 1000) * 1000 AS PRICE3
+		         , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 3) / 1000) * 1000 AS PRICE4
+		         , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 4) / 1000) * 1000 AS PRICE5
+		         , FLOOR(MAX_CURR_PRICE / 1000) * 1000                   AS PRICE6
+		    FROM   (
+		            SELECT SITE_CD
+		                 , CATE_GB
+		                 , FORMAL_GB
+		                 , BRAND_GROUP_NO
+		                 , CATE2_NO        AS CATE_NO
+		                 , MIN(CURR_PRICE) AS MIN_CURR_PRICE                    /*최소현재판매가*/
+		                 , MAX(CURR_PRICE) AS MAX_CURR_PRICE                    /*최대현재판매가*/
+		                 , (MAX(CURR_PRICE) - MIN(CURR_PRICE)) / 5 AS SLICE_VAL /*분할값*/
+		            FROM   TAB_FILTER
+		            WHERE  CATE2_NO IS NOT NULL
+		            GROUP  BY SITE_CD, CATE_GB, FORMAL_GB, BRAND_GROUP_NO, CATE1_NO
+		           ) Z
+		    UNION ALL
+		    SELECT SITE_CD
+		         , CATE_GB
+		         , FORMAL_GB
+		         , BRAND_GROUP_NO
+		         , CATE_NO
+		         , FLOOR(MIN_CURR_PRICE / 1000) * 1000                   AS PRICE1
+		         , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 1) / 1000) * 1000 AS PRICE2
+		         , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 2) / 1000) * 1000 AS PRICE3
+		         , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 3) / 1000) * 1000 AS PRICE4
+		         , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 4) / 1000) * 1000 AS PRICE5
+		         , FLOOR(MAX_CURR_PRICE / 1000) * 1000                   AS PRICE6
+		    FROM   (
+		            SELECT SITE_CD
+		                 , CATE_GB
+		                 , FORMAL_GB
+		                 , BRAND_GROUP_NO
+		                 , CATE3_NO        AS CATE_NO
+		                 , MIN(CURR_PRICE) AS MIN_CURR_PRICE                    /*최소현재판매가*/
+		                 , MAX(CURR_PRICE) AS MAX_CURR_PRICE                    /*최대현재판매가*/
+		                 , (MAX(CURR_PRICE) - MIN(CURR_PRICE)) / 5 AS SLICE_VAL /*분할값*/
+		            FROM   TAB_FILTER
+		            WHERE  CATE3_NO IS NOT NULL
+		            GROUP  BY SITE_CD, CATE_GB, FORMAL_GB, BRAND_GROUP_NO, CATE1_NO
+		           ) Z
+		    UNION ALL
+		    SELECT SITE_CD
+		         , CATE_GB
+		         , FORMAL_GB
+		         , BRAND_GROUP_NO
+		         , CATE_NO
+		         , FLOOR(MIN_CURR_PRICE / 1000) * 1000                   AS PRICE1
+		         , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 1) / 1000) * 1000 AS PRICE2
+		         , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 2) / 1000) * 1000 AS PRICE3
+		         , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 3) / 1000) * 1000 AS PRICE4
+		         , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 4) / 1000) * 1000 AS PRICE5
+		         , FLOOR(MAX_CURR_PRICE / 1000) * 1000                   AS PRICE6
+		    FROM   (
+		            SELECT SITE_CD
+		                 , CATE_GB
+		                 , FORMAL_GB
+		                 , BRAND_GROUP_NO
+		                 , CATE4_NO        AS CATE_NO
+		                 , MIN(CURR_PRICE) AS MIN_CURR_PRICE                    /*최소현재판매가*/
+		                 , MAX(CURR_PRICE) AS MAX_CURR_PRICE                    /*최대현재판매가*/
+		                 , (MAX(CURR_PRICE) - MIN(CURR_PRICE)) / 5 AS SLICE_VAL /*분할값*/
+		            FROM   TAB_FILTER
+		            WHERE  CATE4_NO IS NOT NULL
+		            GROUP  BY SITE_CD, CATE_GB, FORMAL_GB, BRAND_GROUP_NO, CATE1_NO
+		           ) Z
+		    UNION ALL
+		    SELECT SITE_CD
+		         , CATE_GB
+		         , FORMAL_GB
+		         , BRAND_GROUP_NO
+		         , CATE_NO
+		         , FLOOR(MIN_CURR_PRICE / 1000) * 1000                   AS PRICE1
+		         , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 1) / 1000) * 1000 AS PRICE2
+		         , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 2) / 1000) * 1000 AS PRICE3
+		         , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 3) / 1000) * 1000 AS PRICE4
+		         , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 4) / 1000) * 1000 AS PRICE5
+		         , FLOOR(MAX_CURR_PRICE / 1000) * 1000                   AS PRICE6
+		    FROM   (
+		            SELECT SITE_CD
+		                 , CATE_GB
+		                 , FORMAL_GB
+		                 , BRAND_GROUP_NO
+		                 , CATE5_NO        AS CATE_NO
+		                 , MIN(CURR_PRICE) AS MIN_CURR_PRICE                    /*최소현재판매가*/
+		                 , MAX(CURR_PRICE) AS MAX_CURR_PRICE                    /*최대현재판매가*/
+		                 , (MAX(CURR_PRICE) - MIN(CURR_PRICE)) / 5 AS SLICE_VAL /*분할값*/
+		            FROM   TAB_FILTER
+		            WHERE  CATE5_NO IS NOT NULL
+		            GROUP  BY SITE_CD, CATE_GB, FORMAL_GB, BRAND_GROUP_NO, CATE1_NO
+		           ) Z
+		)
+		SELECT SITE_CD
+		     , CATE_GB
+		     , FORMAL_GB
+		     , BRAND_GROUP_NO
+		     , CATE_NO
+		     , 'PRICE'        AS FILTER_GB
+		     , FILTER_CD
+		     , FILTER_NM
+		     , RANK() OVER(PARTITION BY SITE_CD, CATE_GB, FORMAL_GB, BRAND_GROUP_NO, CATE_NO
+		                   ORDER BY DISP_ORD
+		                   )  AS DISP_ORD
+		FROM   (
+		        SELECT SITE_CD
+		             , CATE_GB
+		             , FORMAL_GB
+		             , BRAND_GROUP_NO
+		             , CATE_NO
+		             , PRICE1         AS FILTER_CD
+		             , PRICE1         AS FILTER_NM
+		             , 1              AS DISP_ORD
+		        FROM   TAB_PRICE
+		        UNION ALL
+		        SELECT SITE_CD
+		             , CATE_GB
+		             , FORMAL_GB
+		             , BRAND_GROUP_NO
+		             , CATE_NO
+		             , PRICE2         AS FILTER_CD
+		             , PRICE2         AS FILTER_NM
+		             , 2              AS DISP_ORD
+		        FROM   TAB_PRICE
+		        UNION ALL
+		        SELECT SITE_CD
+		             , CATE_GB
+		             , FORMAL_GB
+		             , BRAND_GROUP_NO
+		             , CATE_NO
+		             , PRICE3         AS FILTER_CD
+		             , PRICE3         AS FILTER_NM
+		             , 3              AS DISP_ORD
+		        FROM   TAB_PRICE
+		        UNION ALL
+		        SELECT SITE_CD
+		             , CATE_GB
+		             , FORMAL_GB
+		             , BRAND_GROUP_NO
+		             , CATE_NO
+		             , PRICE4         AS FILTER_CD
+		             , PRICE4         AS FILTER_NM
+		             , 4              AS DISP_ORD
+		        FROM   TAB_PRICE
+		        UNION ALL
+		        SELECT SITE_CD
+		             , CATE_GB
+		             , FORMAL_GB
+		             , BRAND_GROUP_NO
+		             , CATE_NO
+		             , PRICE5         AS FILTER_CD
+		             , PRICE5         AS FILTER_NM
+		             , 5              AS DISP_ORD
+		        FROM   TAB_PRICE
+		        UNION ALL
+		        SELECT SITE_CD
+		             , CATE_GB
+		             , FORMAL_GB
+		             , BRAND_GROUP_NO
+		             , CATE_NO
+		             , PRICE6         AS FILTER_CD
+		             , PRICE6         AS FILTER_NM
+		             , 6              AS DISP_ORD
+		        FROM   TAB_PRICE
+		       ) Z
+	</insert>
+	
+	<!-- 임시카테고리별검색필터 - 연령대 생성 -->
+	<insert id="createTemporaryCategoryFilterAge" timeout="600">
+		/* TsbDisplay.createTemporaryCategoryFilterAge */
+		INSERT INTO TB_CATE_FILTER_TMP (
+		       SITE_CD
+		     , CATE_GB
+		     , FORMAL_GB
+		     , BRAND_GROUP_NO
+		     , CATE_NO
+		     , FILTER_GB
+		     , FILTER_CD
+		     , FILTER_NM
+		     , DISP_ORD
+		)
+		WITH TAB_FILTER AS (
+		    SELECT C4.SITE_CD
+		         , C4.CATE_GB
+		         , C4.FORMAL_GB
+		         , CG.BRAND_GROUP_NO
+		         , C4.CATE1_NO
+		         , C4.CATE2_NO
+		         , C4.CATE3_NO
+		         , C4.CATE4_NO
+		         , C4.CATE5_NO
+		         , G.AGE_GRP_CD      AS FILTER_CD
+		    FROM   TB_CATE_4SRCH C4
+		         , TB_CATE_GOODS CG
+		         , TB_GOODS G
+		         , TB_GOODS_STOCK GS
+		         , TB_BRAND B
+		         , TB_SITE_BRAND SB
+		    WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
+		    AND    CG.BRAND_GROUP_NO = 0
+		    AND    CG.GOODS_CD = G.GOODS_CD
+		    AND    CG.GOODS_CD = GS.GOODS_CD
+		    AND    G.BRAND_CD = B.BRAND_CD
+		    AND    B.BRAND_CD = SB.BRAND_CD
+		    AND    C4.SITE_CD = 'G000_10'
+		    AND    C4.CATE_GB = 'G032_101'
+		    AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		    AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		    AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		    AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
+		    AND    G.AGE_GRP_CD IS NOT NULL
+		    AND    GS.STOCK_QTY > 0 /*재고있는상품*/
+		    AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
+		    AND    SB.SITE_CD = 'G000_10'
+		    AND    SB.USE_YN = 'Y' /*사이트에서 사용하는 브랜드*/
+		)
+		SELECT A.SITE_CD
+		     , A.CATE_GB
+		     , A.FORMAL_GB
+		     , A.BRAND_GROUP_NO
+		     , A.CATE_NO
+		     , 'AGE'          AS FILTER_GB
+		     , A.FILTER_CD
+		     , CC.CD_NM       AS FILTER_NM
+		     , RANK() OVER(PARTITION BY A.SITE_CD, A.CATE_GB, A.FORMAL_GB, A.BRAND_GROUP_NO, A.CATE_NO
+		                   ORDER BY CC.DISP_ORD
+		                  )   AS DISP_ORD
+		FROM   (
+		        SELECT DISTINCT
+		               SITE_CD
+		             , CATE_GB
+		             , FORMAL_GB
+		             , BRAND_GROUP_NO
+		             , CATE_NO
+		             , FILTER_CD
+		        FROM   (
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE5_NO       AS CATE_NO
+		                     , FILTER_CD
+		                FROM   TAB_FILTER
+		                WHERE  CATE5_NO IS NOT NULL
+		                UNION ALL
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE4_NO       AS CATE_NO
+		                     , FILTER_CD
+		                FROM   TAB_FILTER
+		                WHERE  CATE4_NO IS NOT NULL
+		                UNION ALL
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE3_NO       AS CATE_NO
+		                     , FILTER_CD
+		                FROM   TAB_FILTER
+		                WHERE  CATE3_NO IS NOT NULL
+		                UNION ALL
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE2_NO       AS CATE_NO
+		                     , FILTER_CD
+		                FROM   TAB_FILTER
+		                WHERE  CATE2_NO IS NOT NULL
+		                UNION ALL
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE1_NO       AS CATE_NO
+		                     , FILTER_CD
+		                FROM   TAB_FILTER
+		                WHERE  CATE1_NO IS NOT NULL
+		               ) Z
+		        WHERE  CATE_NO IS NOT NULL
+		       ) A
+		     , TB_COMMON_CODE CC
+		WHERE  A.FILTER_CD = CC.CD
+		AND    CC.CD_GB = 'G023'
+		AND    CC.USE_YN = 'Y'
+	</insert>
+	
+	<!-- 임시카테고리별검색필터 - 시즌 생성 -->
+	<insert id="createTemporaryCategoryFilterSeason" timeout="600">
+		/* TsbDisplay.createTemporaryCategoryFilterSeason */
+		INSERT INTO TB_CATE_FILTER_TMP (
+		       SITE_CD
+		     , CATE_GB
+		     , FORMAL_GB
+		     , BRAND_GROUP_NO
+		     , CATE_NO
+		     , FILTER_GB
+		     , FILTER_CD
+		     , FILTER_NM
+		     , DISP_ORD
+		)
+		WITH TAB_FILTER AS (
+		    SELECT C4.SITE_CD
+		         , C4.CATE_GB
+		         , C4.FORMAL_GB
+		         , CG.BRAND_GROUP_NO
+		         , C4.CATE1_NO
+		         , C4.CATE2_NO
+		         , C4.CATE3_NO
+		         , C4.CATE4_NO
+		         , C4.CATE5_NO
+		         , G.SEASON_CD       AS FILTER_CD
+		    FROM   TB_CATE_4SRCH C4
+		         , TB_CATE_GOODS CG
+		         , TB_GOODS G
+		         , TB_GOODS_STOCK GS
+		         , TB_BRAND B
+		         , TB_SITE_BRAND SB
+		    WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
+		    AND    CG.BRAND_GROUP_NO = 0
+		    AND    CG.GOODS_CD = G.GOODS_CD
+		    AND    CG.GOODS_CD = GS.GOODS_CD
+		    AND    G.BRAND_CD = B.BRAND_CD
+		    AND    B.BRAND_CD = SB.BRAND_CD
+		    AND    C4.SITE_CD = 'G000_10'
+		    AND    C4.CATE_GB = 'G032_101'
+		    AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		    AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		    AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		    AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
+		    AND    GS.STOCK_QTY > 0 /*재고있는상품*/
+		    AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
+		    AND    SB.SITE_CD = 'G000_10'
+		    AND    SB.USE_YN = 'Y' /*사이트에서 사용하는 브랜드*/
+		)
+		SELECT A.SITE_CD
+		     , A.CATE_GB
+		     , A.FORMAL_GB
+		     , A.BRAND_GROUP_NO
+		     , A.CATE_NO
+		     , 'SEASON'         AS FILTER_GB
+		     , A.FILTER_CD
+		     , CC.CD_NM         AS FILTER_NM
+		     , RANK() OVER(PARTITION BY A.SITE_CD, A.CATE_GB, A.FORMAL_GB, A.BRAND_GROUP_NO, A.CATE_NO
+		                   ORDER BY CC.DISP_ORD
+		                  )   AS DISP_ORD
+		FROM   (
+		        SELECT DISTINCT
+		               SITE_CD
+		             , CATE_GB
+		             , FORMAL_GB
+		             , BRAND_GROUP_NO
+		             , CATE_NO
+		             , FILTER_CD
+		        FROM   (
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE5_NO       AS CATE_NO
+		                     , FILTER_CD
+		                FROM   TAB_FILTER
+		                WHERE  CATE5_NO IS NOT NULL
+		                UNION ALL
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE4_NO       AS CATE_NO
+		                     , FILTER_CD
+		                FROM   TAB_FILTER
+		                WHERE  CATE4_NO IS NOT NULL
+		                UNION ALL
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE3_NO       AS CATE_NO
+		                     , FILTER_CD
+		                FROM   TAB_FILTER
+		                WHERE  CATE3_NO IS NOT NULL
+		                UNION ALL
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE2_NO       AS CATE_NO
+		                     , FILTER_CD
+		                FROM   TAB_FILTER
+		                WHERE  CATE2_NO IS NOT NULL
+		                UNION ALL
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE1_NO       AS CATE_NO
+		                     , FILTER_CD
+		                FROM   TAB_FILTER
+		                WHERE  CATE1_NO IS NOT NULL
+		               ) Z
+		        WHERE  CATE_NO IS NOT NULL
+		       ) A
+		     , TB_COMMON_CODE CC
+		WHERE  A.FILTER_CD = CC.CD
+		AND    CC.CD_GB = 'G006'
+		AND    CC.USE_YN = 'Y'
+	</insert>
+	
+	<!-- 임시카테고리별검색필터 - 색상 생성 -->
+	<insert id="createTemporaryCategoryFilterColor" timeout="600">
+		/* TsbDisplay.createTemporaryCategoryFilterColor */
+		INSERT INTO TB_CATE_FILTER_TMP (
+		       SITE_CD
+		     , CATE_GB
+		     , FORMAL_GB
+		     , BRAND_GROUP_NO
+		     , CATE_NO
+		     , FILTER_GB
+		     , FILTER_CD
+		     , FILTER_NM
+		     , DISP_ORD
+		)
+		WITH TAB_FILTER AS (
+		    SELECT C4.SITE_CD
+		         , C4.CATE_GB
+		         , C4.FORMAL_GB
+		         , CG.BRAND_GROUP_NO
+		         , C4.CATE1_NO
+		         , C4.CATE2_NO
+		         , C4.CATE3_NO
+		         , C4.CATE4_NO
+		         , C4.CATE5_NO
+		         , C.COLOR_GRP_CD    AS FILTER_CD
+		    FROM   TB_CATE_4SRCH C4
+		         , TB_CATE_GOODS CG
+		         , TB_GOODS G
+		         , TB_GOODS_STOCK GS
+		         , TB_OPTION O
+		         , TB_COLOR C
+		         , TB_BRAND B
+		         , TB_SITE_BRAND SB
+		    WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
+		    AND    CG.BRAND_GROUP_NO = 0
+		    AND    CG.GOODS_CD = G.GOODS_CD
+		    AND    CG.GOODS_CD = GS.GOODS_CD
+		    AND    CG.GOODS_CD = O.GOODS_CD
+		    AND    O.OPT_CD1 = C.COLOR_CD
+		    AND    G.BRAND_CD = B.BRAND_CD
+		    AND    B.BRAND_CD = SB.BRAND_CD
+		    AND    C4.SITE_CD = 'G000_10'
+		    AND    C4.CATE_GB = 'G032_101'
+		    AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		    AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		    AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		    AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
+		    AND    GS.STOCK_QTY > 0 /*재고있는상품*/
+		    AND    O.SOLDOUT_YN = 'N' /*품절이 아닌 옵션*/
+		    AND    O.DISP_YN = 'Y' /*노출하는 옵션*/
+		    AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
+		    AND    SB.SITE_CD = 'G000_10'
+		    AND    SB.USE_YN = 'Y' /*사이트에서 사용하는 브랜드*/
+		)
+		SELECT A.SITE_CD
+		     , A.CATE_GB
+		     , A.FORMAL_GB
+		     , A.BRAND_GROUP_NO
+		     , A.CATE_NO
+		     , 'COLOR'          AS FILTER_GB
+		     , A.FILTER_CD
+		     , CC.CD_DESC       AS FILTER_NM
+		     , RANK() OVER(PARTITION BY A.SITE_CD, A.CATE_GB, A.FORMAL_GB, A.BRAND_GROUP_NO, A.CATE_NO
+		                   ORDER BY CC.DISP_ORD
+		                  )   AS DISP_ORD
+		FROM   (
+		        SELECT DISTINCT
+		               SITE_CD
+		             , CATE_GB
+		             , FORMAL_GB
+		             , BRAND_GROUP_NO
+		             , CATE_NO
+		             , FILTER_CD
+		        FROM   (
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE5_NO       AS CATE_NO
+		                     , FILTER_CD
+		                FROM   TAB_FILTER
+		                WHERE  CATE5_NO IS NOT NULL
+		                UNION ALL
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE4_NO       AS CATE_NO
+		                     , FILTER_CD
+		                FROM   TAB_FILTER
+		                WHERE  CATE4_NO IS NOT NULL
+		                UNION ALL
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE3_NO       AS CATE_NO
+		                     , FILTER_CD
+		                FROM   TAB_FILTER
+		                WHERE  CATE3_NO IS NOT NULL
+		                UNION ALL
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE2_NO       AS CATE_NO
+		                     , FILTER_CD
+		                FROM   TAB_FILTER
+		                WHERE  CATE2_NO IS NOT NULL
+		                UNION ALL
+		                SELECT SITE_CD
+		                     , CATE_GB
+		                     , FORMAL_GB
+		                     , BRAND_GROUP_NO
+		                     , CATE1_NO       AS CATE_NO
+		                     , FILTER_CD
+		                FROM   TAB_FILTER
+		                WHERE  CATE1_NO IS NOT NULL
+		               ) Z
+		        WHERE  CATE_NO IS NOT NULL
+		       ) A
+		     , TB_COMMON_CODE CC
+		WHERE  A.FILTER_CD = CC.CD
+		AND    CC.CD_GB = 'G072'
+		AND    CC.USE_YN = 'Y'
+	</insert>
+	
+	<!-- 임시카테고리별검색필터 - 혜택 생성 -->
+	<insert id="createTemporaryCategoryFilterBenefit" timeout="600">
+		/* TsbDisplay.createTemporaryCategoryFilterBenefit */
+		INSERT INTO TB_CATE_FILTER_TMP (
+		       SITE_CD
+		     , CATE_GB
+		     , FORMAL_GB
+		     , BRAND_GROUP_NO
+		     , CATE_NO
+		     , FILTER_GB
+		     , FILTER_CD
+		     , FILTER_NM
+		     , DISP_ORD
+		)
+		WITH TAB_FILTER AS (
+		    SELECT C4.SITE_CD
+		         , C4.CATE_GB
+		         , C4.FORMAL_GB
+		         , CG.BRAND_GROUP_NO
+		         , C4.CATE1_NO
+		         , C4.CATE2_NO
+		         , C4.CATE3_NO
+		         , C4.CATE4_NO
+		         , C4.CATE5_NO
+		         , G.GOODS_CD
+		         , GB.BENEFIT_GB
+		    FROM   TB_CATE_4SRCH C4
+		         , TB_CATE_GOODS CG
+		         , TB_GOODS G
+		         , TB_GOODS_STOCK GS
+		         , TB_GOODS_BENEFIT GB
+		         , TB_BRAND B
+		         , TB_SITE_BRAND SB
+		    WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
+		    AND    CG.BRAND_GROUP_NO = 0
+		    AND    CG.GOODS_CD = G.GOODS_CD
+		    AND    CG.GOODS_CD = GS.GOODS_CD
+		    AND    CG.GOODS_CD = GB.GOODS_CD
+		    AND    G.BRAND_CD = B.BRAND_CD
+		    AND    B.BRAND_CD = SB.BRAND_CD
+		    AND    C4.SITE_CD = 'G000_10'
+		    AND    C4.CATE_GB = 'G032_101'
+		    AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		    AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		    AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		    AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
+		    AND    GS.STOCK_QTY > 0 /*재고있는상품*/
+		    AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
+		    AND    SB.SITE_CD = 'G000_10'
+		    AND    SB.USE_YN = 'Y' /*사이트에서 사용하는 브랜드*/
+		) 
+		SELECT SITE_CD
+		     , CATE_GB
+		     , FORMAL_GB
+		     , BRAND_GROUP_NO
+		     , CATE_NO
+		     , 'BENEFIT'        AS FILTER_GB
+		     , FILTER_CD
+		     , CASE WHEN FILTER_CD = '10' THEN '쿠폰할인'
+		            WHEN FILTER_CD = '20' THEN '무료배송'
+		            WHEN FILTER_CD = '30' THEN '사은품'
+		            WHEN FILTER_CD = '40' THEN '신상'
+		       END              AS FILTER_NM
+		     , RANK() OVER(PARTITION BY SITE_CD, CATE_GB, FORMAL_GB, BRAND_GROUP_NO, CATE_NO
+		                   ORDER BY FILTER_CD
+		                  )   AS DISP_ORD
+		FROM   (
+		        SELECT DISTINCT
+		               SITE_CD
+		             , CATE_GB
+		             , FORMAL_GB
+		             , BRAND_GROUP_NO
+		             , CATE5_NO       AS CATE_NO
+		             , BENEFIT_GB     AS FILTER_CD
+		        FROM   TAB_FILTER
+		        WHERE  CATE5_NO IS NOT NULL
+		        UNION ALL
+		        SELECT DISTINCT
+		               SITE_CD
+		             , CATE_GB
+		             , FORMAL_GB
+		             , BRAND_GROUP_NO
+		             , CATE4_NO       AS CATE_NO
+		             , BENEFIT_GB     AS FILTER_CD
+		        FROM   TAB_FILTER
+		        WHERE  CATE4_NO IS NOT NULL
+		        UNION ALL
+		        SELECT DISTINCT
+		               SITE_CD
+		             , CATE_GB
+		             , FORMAL_GB
+		             , BRAND_GROUP_NO
+		             , CATE3_NO       AS CATE_NO
+		             , BENEFIT_GB     AS FILTER_CD
+		        FROM   TAB_FILTER
+		        WHERE  CATE3_NO IS NOT NULL
+		        UNION ALL
+		        SELECT DISTINCT
+		               SITE_CD
+		             , CATE_GB
+		             , FORMAL_GB
+		             , BRAND_GROUP_NO
+		             , CATE2_NO       AS CATE_NO
+		             , BENEFIT_GB     AS FILTER_CD
+		        FROM   TAB_FILTER
+		        WHERE  CATE2_NO IS NOT NULL
+		        UNION ALL
+		        SELECT DISTINCT
+		               SITE_CD
+		             , CATE_GB
+		             , FORMAL_GB
+		             , BRAND_GROUP_NO
+		             , CATE1_NO       AS CATE_NO
+		             , BENEFIT_GB     AS FILTER_CD
+		        FROM   TAB_FILTER
+		        WHERE  CATE1_NO IS NOT NULL
+		       ) Z
+	</insert>
+	
+	<!-- 카테고리별 검색필터 삭제 -->
+	<delete id="deleteCategoryFilter">
+		/* TsbDisplay.deleteCategoryFilter */
+		DELETE FROM TB_CATE_FILTER
+	</delete>
+	
+	<!-- 카테고리별 검색필터 생성 -->
+	<insert id="createCategoryFilter">
+		/* TsbDisplay.createCategoryFilter */
+		INSERT INTO TB_CATE_FILTER (
+		       SITE_CD
+		     , CATE_GB
+		     , FORMAL_GB
+		     , BRAND_GROUP_NO
+		     , CATE_NO
+		     , FILTER_GB
+		     , FILTER_CD
+		     , FILTER_NM
+		     , DISP_ORD
+		     , REG_NO
+		     , REG_DT
+		)
+		SELECT SITE_CD
+		     , CATE_GB
+		     , FORMAL_GB
+		     , BRAND_GROUP_NO
+		     , CATE_NO
+		     , FILTER_GB
+		     , FILTER_CD
+		     , FILTER_NM
+		     , DISP_ORD
+		     , 0              AS REG_NO
+		     , NOW()          AS REG_DT
+		FROM   TB_CATE_FILTER_TMP
+	</insert>
+	
 </mapper>

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

@@ -2119,7 +2119,7 @@
 	</delete>
 	
 	<!-- 상품혜택임시-쿠폰할인 생성 -->
-	<insert id="createTemporaryGoodsBenefitCouponDiscount">
+	<insert id="createTemporaryGoodsBenefitCouponDiscount" timeout="600">
 		/* TsbGoods.createTemporaryGoodsBenefitCouponDiscount */
 		INSERT INTO TB_GOODS_BENEFIT_TMP (
 		       GOODS_CD
@@ -2254,7 +2254,7 @@
 	</insert>
 	
 	<!-- 상품혜택임시-무료배송 생성 -->
-	<insert id="createTemporaryGoodsBenefitFreeDelivery">
+	<insert id="createTemporaryGoodsBenefitFreeDelivery" timeout="600">
 		/* TsbGoods.createTemporaryGoodsBenefitFreeDelivery */
 		INSERT INTO TB_GOODS_BENEFIT_TMP (
 		       GOODS_CD
@@ -2281,7 +2281,7 @@
 	</insert>
 	
 	<!-- 상품혜택임시-사은품 생성 -->
-	<insert id="createTemporaryGoodsBenefitFreegift">
+	<insert id="createTemporaryGoodsBenefitFreegift" timeout="600">
 		/* TsbGoods.createTemporaryGoodsBenefitFreegift */
 		INSERT INTO TB_GOODS_BENEFIT_TMP (
 		       GOODS_CD
@@ -2347,7 +2347,7 @@
 	</insert>
 	
 	<!-- 상품혜택임시-신상 생성 -->
-	<insert id="createTemporaryGoodsBenefitNew">
+	<insert id="createTemporaryGoodsBenefitNew" timeout="600">
 		/* TsbGoods.createTemporaryGoodsBenefitNew */
 		INSERT INTO TB_GOODS_BENEFIT_TMP (
 		       GOODS_CD

+ 2 - 2
src/main/resources/config/application-locd.yml

@@ -48,7 +48,7 @@ cron:
         
     #상품
     goods:
-        benefit: 30 59 19 * * ? #상품혜택 생성
+        benefit: 2 22 2 29 2 ? #상품혜택 생성
         benefit.price: 2 22 2 29 2 ? #상품 즉시할인가 생성
         ep.naver.goods: 2 22 2 29 2 ? #네이버 EP 생성
         #infants.safe: 2 22 2 29 2 ?
@@ -95,4 +95,4 @@ cron:
     display:
         category.refresh: 2 22 2 29 2 ? #카테고리 갱신
         category.stock : 2 22 2 29 2 ? #카테고리별 재고 생성
-        
+        category.filter: 2 22 2 29 2 ? #카테고리별 검색필터 생성