Kaynağa Gözat

상품리스트 쿼리수정(입점상품)

bin2107 5 yıl önce
ebeveyn
işleme
2009f7d60a

+ 389 - 285
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -1858,167 +1858,224 @@
 	<!-- 카테고리별 상품 총건수 -->
 	<select id="getCategoryGoodsCount" parameterType="SearchEngine" resultType="int">
 		/* TsfGoods.getCategoryGoodsCount */
-		WITH TAB_GOODS AS (
-		       SELECT DISTINCT G.BRAND_GROUP_NM     /*브랜드그룹명*/
-		            , G.GOODS_CD           /*상품코드*/
-		            , G.GOODS_NM           /*상품명*/
-		            , G.GOODS_GB           /*상품구분*/
-		            , G.SELF_GOODS_YN      /*자사상품여부*/
-		            , G.FOREIGN_BUY_YN     /*해외구매대행여부*/
-		            , G.PARALLEL_IMPORT_YN /*병행수입여부*/
-		            , G.ORDER_MADE_YN      /*주문제작여부*/
-		            , G.GOODS_TNM          /*상품타이틀명*/
-		            , IFNULL(O.OPT_CD1,G.MAIN_COLOR_CD) AS MAIN_COLOR_CD      /*대표색상코드*/
-		            , G.LIST_PRICE         /*정상가(최초판매가)*/
-		            , G.CURR_PRICE         /*현재판매가*/
-		            , G.FORMAL_GB          /*정상이월구분*/
-		            , G.REG_DT             /*등록일시*/
-		            , G.SELL_WEEK_QTY      /*주간판매수량*/
-		            , G.REVIEW_REG_CNT     /*리뷰등록건수*/
-		       FROM   (
-		               SELECT CASE WHEN BG.DISP_NM_LANG = 'EN' THEN BG.BRAND_GROUP_ENM
-		                      ELSE BG.BRAND_GROUP_KNM
-		                      END                   AS BRAND_GROUP_NM /*브랜드그룹명*/
-		                    , G.GOODS_CD                              /*상품코드*/
-		                    , G.GOODS_NM                              /*상품명*/
-		                    , G.GOODS_GB                              /*상품구분*/
-		                    , G.SELF_GOODS_YN                         /*자사상품여부*/
-		                    , G.FOREIGN_BUY_YN                        /*해외구매대행여부*/
-		                    , G.PARALLEL_IMPORT_YN                    /*병행수입여부*/
-		                    , G.ORDER_MADE_YN                         /*주문제작여부*/
-		                    , G.GOODS_TNM                             /*상품타이틀명*/
-		                    , G.MAIN_COLOR_CD                         /*대표색상코드*/
-		                    , G.LIST_PRICE                            /*정상가(최초판매가)*/
-		                    , CASE WHEN #{frontGb} = 'P' AND #{custGb} = 'G100_20' THEN  IFNULL(GBP.STAFF_PC_CURR_PRICE,G.CURR_PRICE)
-		                           WHEN #{frontGb} = 'M' AND #{custGb} = 'G100_20' THEN  IFNULL(GBP.STAFF_MO_CURR_PRICE,G.CURR_PRICE)
-		                           WHEN #{frontGb} = 'A' AND #{custGb} = 'G100_20' THEN  IFNULL(GBP.STAFF_APP_CURR_PRICE,G.CURR_PRICE)
-		                           WHEN #{frontGb} = 'P' AND #{custGb} != 'G100_20' THEN IFNULL(GBP.PC_CURR_PRICE,G.CURR_PRICE)
-		                           WHEN #{frontGb} = 'M' AND #{custGb} != 'G100_20' THEN IFNULL(GBP.MO_CURR_PRICE,G.CURR_PRICE)
-		                           WHEN #{frontGb} = 'A' AND #{custGb} != 'G100_20' THEN IFNULL(GBP.APP_CURR_PRICE,G.CURR_PRICE)
-		                           ELSE G.CURR_PRICE
-		                           END                   AS CURR_PRICE     /*현재판매가*/
-		                    , G.MIN_ORD_AMT                           /*최소주문금액*/
-		                    , G.FORMAL_GB                             /*정상이월구분*/
-		                    , G.REG_DT                                /*등록일시*/
-		                    , GS.SELL_WEEK_QTY                        /*주간판매수량*/
-		                    , GS.REVIEW_REG_CNT                       /*리뷰등록건수*/
-		               FROM   TB_CATE_4SRCH C4
-		               INNER JOIN TB_CATE_GOODS CG ON C4.LEAF_CATE_NO = CG.CATE_NO
-		               INNER JOIN TB_GOODS G ON CG.GOODS_CD = G.GOODS_CD
-		               INNER JOIN TB_GOODS_STOCK S ON CG.GOODS_CD = S.GOODS_CD
-		               INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
-		               INNER JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
-		               INNER JOIN TB_GOODS_SUMMARY GS ON CG.GOODS_CD = GS.GOODS_CD
-		               LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GBP ON CG.GOODS_CD = GBP.GOODS_CD
-		               WHERE  C4.SITE_CD = #{siteCd}
-		               AND    C4.CATE_GB = #{cateGb}
-		               AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
-		               <if test="cate1No != null and cate1No != ''">
-		                 AND    C4.CATE1_NO = #{cate1No}
-		               </if>
-		               <if test="cate2No != null and cate2No != ''">
-		                 AND    C4.CATE2_NO = #{cate2No}
-		               </if>
-		               <if test="cate3No != null and cate3No != ''">
-		                 AND    C4.CATE3_NO = #{cate3No}
-		               </if>
-		               <if test="cate4No != null and cate4No != ''">
-		                 AND    C4.CATE4_NO = #{cate4No}
-		               </if>
-		               <if test="cate5No != null and cate5No != ''">
-		                 AND    C4.CATE5_NO = #{cate5No}
-		               </if>
-		            <choose>
-		                <when test="brandGroupNo != null and brandGroupNo > 0">
-		                    AND    B.BRAND_GROUP_NO = #{brandGroupNo}
-		                </when>
-		                <otherwise>
-		                    AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
-		                </otherwise>
-		            </choose>
-		            <if test="formalGb != null and formalGb !=''">
-		                AND    G.FORMAL_GB = #{formalGb}
-		            </if>
-		            AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
-		            AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
-		            AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*유효한 판매기간*/
-		            <if test="ageArr != null and ageArr.length > 0"> <!-- 연령대 -->
-		            AND    G.AGE_GRP_CD IN
-		            <foreach collection="ageArr" item="item" index="index"  open="(" close=")" separator=",">
-		                #{item}
-		            </foreach>
-		            </if>
-		            <if test="seasonArr != null and seasonArr.length > 0"> <!-- 시즌 -->
-		                AND    G.SEASON_CD IN
-		                <foreach collection="seasonArr" item="item" index="index"  open="(" close=")" separator=",">
-		                    #{item}
-		                </foreach>
-		            </if>
-		            AND    S.STOCK_QTY > 0 /*재고있는 상품*/
-		            AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
-		            AND    BG.USE_YN = 'Y' /*사용하는 브랜드그룹*/
-		         <if test="brandGroupArr != null and brandGroupArr.length > 0">
-		            AND    BG.BRAND_GROUP_NO IN
-		            <foreach collection="brandGroupArr" item="item" index="index"  open="(" close=")" separator=",">
-		                #{item}
-		            </foreach>
-		         </if>
-		         <if test="unisex != null and unisex != ''">
-		            AND    G.SEX_GB = #{unisex}
-		         </if>
-		         <if test='sizeArr != null and sizeArr.length > 0'>
-		            AND    EXISTS (SELECT 1
-		                           FROM   TB_OPTION
-		                           WHERE  GOODS_CD = CG.GOODS_CD
-		                           AND    OPT_CD2 IN
-		                           <foreach collection="sizeArr" item="item" index="index"  open="(" close=")" separator=",">
-		                              #{item}
-		                           </foreach>
-		                           AND    DISP_YN = 'Y'
-		            )
-		         </if>
-		         <if test="newGoods != null and newGoods != ''">
-		             AND    EXISTS (SELECT 1
-		                            FROM   TB_GOODS_BENEFIT
-		                            WHERE  GOODS_CD = G.GOODS_CD
-		                            AND    BENEFIT_GB = #{newGoods}
-		             )
-		         </if>
-		         <if test='benefitArr != null and benefitArr.length > 0'>
-		            AND    EXISTS (SELECT 1
-		                            FROM   TB_GOODS_BENEFIT
-		                            WHERE  GOODS_CD = G.GOODS_CD
-		                            AND    BENEFIT_GB IN
-		                            <foreach collection="benefitArr" item="item" index="index"  open="(" close=")" separator=",">
-		                                #{item}
-		                            </foreach>
-		            )
-		         </if>
-		        <if test="priceFrom != null and priceFrom != ''">
-		            AND    G.CURR_PRICE <![CDATA[>=]]> #{priceFrom}
-		        </if>
-		        <if test="priceTo != null and priceTo != ''">
-		            AND    G.CURR_PRICE <![CDATA[<=]]> #{priceTo}
-		        </if>
-		        <if test="dcRateFrom != null and dcRateFrom != ''">
-		            AND    ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[>=]]> #{dcRateFrom}
-		        </if>
-		        <if test="dcRateTo != null and dcRateTo != ''">
-		            AND    ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[<=]]> #{dcRateTo}
-		        </if>
-		       ) G
-		        INNER JOIN TB_OPTION O ON G.GOODS_CD = O.GOODS_CD AND    O.DISP_YN = 'Y' <!--AND G.SELF_GOODS_YN = 'Y' /*자사상품만*/-->
-		        <if test="colorArr != null and colorArr.length > 0"> <!-- 색상 -->
-		            AND    O.OPT_CD1 IN (SELECT COLOR_CD
-		            FROM   TB_COLOR
-		            WHERE  1 = 1
-		            AND    COLOR_GRP_CD IN
-		            <foreach collection="colorArr" item="item" index="index"  open="(" close=")" separator=",">
-		                #{item}
-		            </foreach>
-		            AND    USE_YN = 'Y' /*사용하는색상*/
-		            )
-		        </if>
+		WITH BASE_GOODS AS (
+		        SELECT CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
+		               BG.BRAND_GROUP_ENM
+		               ELSE
+		               BG.BRAND_GROUP_KNM
+		               END                   AS BRAND_GROUP_NM /*브랜드그룹명*/
+		             , G.GOODS_CD                              /*상품코드*/
+		             , G.GOODS_NM                              /*상품명*/
+		             , G.GOODS_GB                              /*상품구분*/
+		             , G.SELF_GOODS_YN                         /*자사상품여부*/
+		             , G.FOREIGN_BUY_YN                        /*해외구매대행여부*/
+		             , G.PARALLEL_IMPORT_YN                    /*병행수입여부*/
+		             , G.ORDER_MADE_YN                         /*주문제작여부*/
+		             , G.GOODS_TNM                             /*상품타이틀명*/
+		             , G.MAIN_COLOR_CD                         /*대표색상코드*/
+		             , G.LIST_PRICE                            /*정상가(최초판매가)*/
+		             , CASE WHEN #{frontGb} = 'P' AND #{custGb} = 'G100_20' THEN  IFNULL(GBP.STAFF_PC_CURR_PRICE,G.CURR_PRICE)
+		                    WHEN #{frontGb} = 'M' AND #{custGb} = 'G100_20' THEN  IFNULL(GBP.STAFF_MO_CURR_PRICE,G.CURR_PRICE)
+		                    WHEN #{frontGb} = 'A' AND #{custGb} = 'G100_20' THEN  IFNULL(GBP.STAFF_APP_CURR_PRICE,G.CURR_PRICE)
+		                    WHEN #{frontGb} = 'P' AND #{custGb} != 'G100_20' THEN IFNULL(GBP.PC_CURR_PRICE,G.CURR_PRICE)
+		                    WHEN #{frontGb} = 'M' AND #{custGb} != 'G100_20' THEN IFNULL(GBP.MO_CURR_PRICE,G.CURR_PRICE)
+		                    WHEN #{frontGb} = 'A' AND #{custGb} != 'G100_20' THEN IFNULL(GBP.APP_CURR_PRICE,G.CURR_PRICE)
+		                    ELSE G.CURR_PRICE
+		                    END                   AS CURR_PRICE     /*현재판매가*/
+		             , G.MIN_ORD_AMT                           /*최소주문금액*/
+		             , G.FORMAL_GB                             /*정상이월구분*/
+		             , G.REG_DT                                /*등록일시*/
+		             , GS.SELL_WEEK_QTY                        /*주간판매수량*/
+		             , GS.REVIEW_REG_CNT                       /*리뷰등록건수*/
+		        FROM   TB_CATE_4SRCH C4
+		        INNER JOIN TB_CATE_GOODS CG ON C4.LEAF_CATE_NO = CG.CATE_NO
+		        INNER JOIN TB_GOODS G ON CG.GOODS_CD = G.GOODS_CD
+		        INNER JOIN TB_GOODS_STOCK S ON CG.GOODS_CD = S.GOODS_CD
+		        INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+		        INNER JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		        INNER JOIN TB_GOODS_SUMMARY GS ON CG.GOODS_CD = GS.GOODS_CD
+		        LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GBP ON CG.GOODS_CD = GBP.GOODS_CD
+		        WHERE  C4.SITE_CD = #{siteCd}
+		        AND    C4.CATE_GB = #{cateGb}
+		        AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		    <if test="cate1No != null and cate1No != ''">
+		        AND    C4.CATE1_NO = #{cate1No}
+		    </if>
+		    <if test="cate2No != null and cate2No != ''">
+		        AND    C4.CATE2_NO = #{cate2No}
+		    </if>
+		    <if test="cate3No != null and cate3No != ''">
+		        AND    C4.CATE3_NO = #{cate3No}
+		    </if>
+		    <if test="cate4No != null and cate4No != ''">
+		        AND    C4.CATE4_NO = #{cate4No}
+		    </if>
+		    <if test="cate5No != null and cate5No != ''">
+		        AND    C4.CATE5_NO = #{cate5No}
+		    </if>
+		    <choose>
+		        <when test="brandGroupNo != null and brandGroupNo > 0">
+		        AND    B.BRAND_GROUP_NO = #{brandGroupNo}
+		        </when>
+		        <otherwise>
+		        AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
+		        </otherwise>
+		    </choose>
+		    <if test="formalGb != null and formalGb !=''">
+		    	AND    G.FORMAL_GB = #{formalGb}
+		    </if>
+		        AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		        AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		        AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*유효한 판매기간*/
+		    <if test="ageArr != null and ageArr.length > 0"> <!-- 연령대 -->
+		        AND    G.AGE_GRP_CD IN
+		        <foreach collection="ageArr" item="item" index="index"  open="(" close=")" separator=",">
+		            #{item}
+		        </foreach>
+		    </if>
+		    <if test="seasonArr != null and seasonArr.length > 0"> <!-- 시즌 -->
+		        AND    G.SEASON_CD IN
+		        <foreach collection="seasonArr" item="item" index="index"  open="(" close=")" separator=",">
+		            #{item}
+		        </foreach>
+		    </if>
+		    AND    S.STOCK_QTY > 0 /*재고있는 상품*/
+		    AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
+		    AND    BG.USE_YN = 'Y' /*사용하는 브랜드그룹*/
+		    <if test="brandGroupArr != null and brandGroupArr.length > 0">
+		    AND    BG.BRAND_GROUP_NO IN
+		        <foreach collection="brandGroupArr" item="item" index="index"  open="(" close=")" separator=",">
+		        #{item}
+		        </foreach>
+		    </if>
+		    <if test="unisex != null and unisex != ''">
+		    AND    G.SEX_GB = #{unisex}
+		    </if>
+		    <if test='sizeArr != null and sizeArr.length > 0'>
+		    AND    EXISTS (SELECT 1
+		                    FROM   TB_OPTION
+		                    WHERE  GOODS_CD = CG.GOODS_CD
+		                    AND    OPT_CD2 IN
+		                    <foreach collection="sizeArr" item="item" index="index"  open="(" close=")" separator=",">
+		                        #{item}
+		                    </foreach>
+		                    AND    DISP_YN = 'Y'
+		          )
+		    </if>
+		    <if test="newGoods != null and newGoods != ''">
+		    AND    EXISTS (SELECT 1
+		                   FROM   TB_GOODS_BENEFIT
+		                   WHERE  GOODS_CD = G.GOODS_CD
+		                   AND    BENEFIT_GB = #{newGoods}
+		                   )
+		    </if>
+		    <if test='benefitArr != null and benefitArr.length > 0'>
+		    AND    EXISTS (SELECT 1
+		                    FROM   TB_GOODS_BENEFIT
+		                    WHERE  GOODS_CD = G.GOODS_CD
+		                    AND    BENEFIT_GB IN
+		                    <foreach collection="benefitArr" item="item" index="index"  open="(" close=")" separator=",">
+		                         #{item}
+		                    </foreach>
+		                    )
+		    </if>
+		    <if test="priceFrom != null and priceFrom != ''">
+		     AND    G.CURR_PRICE <![CDATA[>=]]> #{priceFrom}
+		    </if>
+		    <if test="priceTo != null and priceTo != ''">
+		     AND    G.CURR_PRICE <![CDATA[<=]]> #{priceTo}
+		    </if>
+		    <if test="dcRateFrom != null and dcRateFrom != ''">
+		     AND    ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[>=]]> #{dcRateFrom}
+		    </if>
+		    <if test="dcRateTo != null and dcRateTo != ''">
+		     AND    ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[<=]]> #{dcRateTo}
+		    </if>
+		)
+		, TAB_OPT_SIZE AS (
+		    /*옵션 사이즈 목록 조회*/
+		    /*자사상품*/
+		    SELECT G.GOODS_CD
+		         , VS.OPT_CD1
+		         , C.COLOR_CD
+		         , CC.CD_DESC AS COLOR_CHIP /*RGB값*/
+		         , GROUP_CONCAT(DISTINCT CONCAT(VS.OPT_CD2 ,':' ,CASE WHEN VS.SOLDOUT_YN = 'Y' THEN 'Y'
+		            ELSE CASE WHEN VS.CURR_STOCK_QTY - VS.BASE_STOCK_QTY > 0 THEN 'N' ELSE 'Y' END END) ORDER BY VS.DISP_ORD
+		            SEPARATOR ',') AS SIZES
+		    FROM BASE_GOODS G
+		       , VW_STOCK VS
+		       , TB_COLOR C
+		       , TB_COMMON_CODE CC
+		    WHERE G.GOODS_CD = VS.GOODS_CD
+		    AND VS.OPT_CD1 = C.COLOR_CD
+		    AND G.SELF_GOODS_YN = 'Y' /*자사상품*/
+		    AND VS.DISP_YN = 'Y'
+		    AND C.USE_YN = 'Y'
+		    AND C.COLOR_GRP_CD = CC.CD
+		    AND CC.USE_YN = 'Y'
+		    GROUP BY G.GOODS_CD, VS.OPT_CD1, C.COLOR_CD, CC.CD_DESC
+		)
+		, TAB_OPT_SIZE_SELFNO AS (
+		/*옵션 사이즈 목록 조회*/
+		/*입점상품*/
+		    SELECT G.GOODS_CD
+		        , GROUP_CONCAT(DISTINCT CONCAT(VS.OPT_CD2 ,':' ,CASE WHEN VS.SOLDOUT_YN = 'Y' THEN 'Y'
+		        ELSE CASE WHEN VS.CURR_STOCK_QTY - VS.BASE_STOCK_QTY > 0 THEN 'N' ELSE 'Y' END END) ORDER BY VS.DISP_ORD
+		        SEPARATOR ',') AS SIZES
+		    FROM BASE_GOODS G
+		    , VW_STOCK VS
+		    WHERE G.GOODS_CD = VS.GOODS_CD
+		    AND G.SELF_GOODS_YN = 'N' /*자사상품*/
+		    AND VS.DISP_YN = 'Y'
+		    GROUP BY G.GOODS_CD
+		)
+		, TAB_OPT AS (
+		    /*옵션 목록*/
+		    SELECT OS.GOODS_CD
+		        , OS.OPT_CD1
+		        , OS.COLOR_CHIP /*RGB값*/
+		        , GROUP_CONCAT(OS.SIZES ORDER BY OS.SIZES) AS SIZES
+		    FROM TAB_OPT_SIZE OS
+		    GROUP BY OS.GOODS_CD, OS.OPT_CD1, OS.COLOR_CHIP
+		    UNION ALL
+		    SELECT OSS.GOODS_CD
+		        , '' AS OPT_CD1
+		        , '' AS COLOR_CHIP
+		        , OSS.SIZES
+		    FROM TAB_OPT_SIZE_SELFNO OSS
+		)
+		, TAB_GOODS AS (
+		    SELECT G.BRAND_GROUP_NM     /*브랜드그룹명*/
+		         , G.GOODS_CD           /*상품코드*/
+		         , G.GOODS_NM           /*상품명*/
+		         , G.GOODS_GB           /*상품구분*/
+		         , G.SELF_GOODS_YN      /*자사상품여부*/
+		         , G.FOREIGN_BUY_YN     /*해외구매대행여부*/
+		         , G.PARALLEL_IMPORT_YN /*병행수입여부*/
+		         , G.ORDER_MADE_YN      /*주문제작여부*/
+		         , G.GOODS_TNM          /*상품타이틀명*/
+		         , IFNULL(O.OPT_CD1,G.MAIN_COLOR_CD) AS MAIN_COLOR_CD      /*대표색상코드*/
+		         , G.LIST_PRICE         /*정상가(최초판매가)*/
+		         , G.CURR_PRICE         /*현재판매가*/
+		         , G.FORMAL_GB          /*정상이월구분*/
+		         , G.REG_DT             /*등록일시*/
+		         , G.SELL_WEEK_QTY      /*주간판매수량*/
+		         , G.REVIEW_REG_CNT     /*리뷰등록건수*/
+		         , O.SIZES
+		    FROM   BASE_GOODS g
+		    , TAB_OPT O
+		    WHERE G.GOODS_CD = O.GOODS_CD
+		    <if test="colorArr != null and colorArr.length > 0"> <!-- 색상 -->
+		        AND    O.OPT_CD1 IN (SELECT COLOR_CD
+		        FROM   TB_COLOR
+		        WHERE  1 = 1
+		        AND    COLOR_GRP_CD IN
+		        <foreach collection="colorArr" item="item" index="index"  open="(" close=")" separator=",">
+		             #{item}
+		        </foreach>
+		        AND    USE_YN = 'Y' /*사용하는색상*/
+		        )
+		    </if>
 		)
 		SELECT COUNT(*)
 		FROM   TAB_GOODS G
@@ -2028,77 +2085,60 @@
 	<!-- 카테고리별 상품 목록 -->
 	<select id="getCategoryGoodsList" parameterType="SearchEngine" resultType="SearchEngine">
 		/* TsfGoods.getCategoryGoodsList */
-		WITH TAB_GOODS AS (
-		      SELECT DISTINCT G.BRAND_GROUP_NM     /*브랜드그룹명*/
-		           , G.GOODS_CD           /*상품코드*/
-		           , G.GOODS_NM           /*상품명*/
-		           , G.GOODS_GB           /*상품구분*/
-		           , G.SELF_GOODS_YN      /*자사상품여부*/
-		           , G.FOREIGN_BUY_YN     /*해외구매대행여부*/
-		           , G.PARALLEL_IMPORT_YN /*병행수입여부*/
-		           , G.ORDER_MADE_YN      /*주문제작여부*/
-		           , G.GOODS_TNM          /*상품타이틀명*/
-		           , IFNULL(O.OPT_CD1,G.MAIN_COLOR_CD) AS MAIN_COLOR_CD      /*대표색상코드*/
-		           , G.LIST_PRICE         /*정상가(최초판매가)*/
-		           , G.CURR_PRICE         /*현재판매가*/
-		           , G.FORMAL_GB          /*정상이월구분*/
-		           , G.REG_DT             /*등록일시*/
-		           , G.SELL_WEEK_QTY      /*주간판매수량*/
-		           , G.REVIEW_REG_CNT     /*리뷰등록건수*/
-		      FROM   (
-		         SELECT CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
-		               BG.BRAND_GROUP_ENM
-		               ELSE
-		               BG.BRAND_GROUP_KNM
-		               END                   AS BRAND_GROUP_NM /*브랜드그룹명*/
-		               , G.GOODS_CD                              /*상품코드*/
-		               , G.GOODS_NM                              /*상품명*/
-		               , G.GOODS_GB                              /*상품구분*/
-		               , G.SELF_GOODS_YN                         /*자사상품여부*/
-		               , G.FOREIGN_BUY_YN                        /*해외구매대행여부*/
-		               , G.PARALLEL_IMPORT_YN                    /*병행수입여부*/
-		               , G.ORDER_MADE_YN                         /*주문제작여부*/
-		               , G.GOODS_TNM                             /*상품타이틀명*/
-		               , G.MAIN_COLOR_CD                         /*대표색상코드*/
-		               , G.LIST_PRICE                            /*정상가(최초판매가)*/
-		               , CASE WHEN #{frontGb} = 'P' AND #{custGb} = 'G100_20' THEN  IFNULL(GBP.STAFF_PC_CURR_PRICE,G.CURR_PRICE)
-		                      WHEN #{frontGb} = 'M' AND #{custGb} = 'G100_20' THEN  IFNULL(GBP.STAFF_MO_CURR_PRICE,G.CURR_PRICE)
-		                      WHEN #{frontGb} = 'A' AND #{custGb} = 'G100_20' THEN  IFNULL(GBP.STAFF_APP_CURR_PRICE,G.CURR_PRICE)
-		                      WHEN #{frontGb} = 'P' AND #{custGb} != 'G100_20' THEN IFNULL(GBP.PC_CURR_PRICE,G.CURR_PRICE)
-		                      WHEN #{frontGb} = 'M' AND #{custGb} != 'G100_20' THEN IFNULL(GBP.MO_CURR_PRICE,G.CURR_PRICE)
-		                      WHEN #{frontGb} = 'A' AND #{custGb} != 'G100_20' THEN IFNULL(GBP.APP_CURR_PRICE,G.CURR_PRICE)
-		                      ELSE G.CURR_PRICE
-		                END                   AS CURR_PRICE     /*현재판매가*/
-		               , G.MIN_ORD_AMT                           /*최소주문금액*/
-		               , G.FORMAL_GB                             /*정상이월구분*/
-		               , G.REG_DT                                /*등록일시*/
-		               , GS.SELL_WEEK_QTY                        /*주간판매수량*/
-		               , GS.REVIEW_REG_CNT                       /*리뷰등록건수*/
-		         FROM   TB_CATE_4SRCH C4
-		         INNER JOIN TB_CATE_GOODS CG ON C4.LEAF_CATE_NO = CG.CATE_NO
-		         INNER JOIN TB_GOODS G ON CG.GOODS_CD = G.GOODS_CD
-		         INNER JOIN TB_GOODS_STOCK S ON CG.GOODS_CD = S.GOODS_CD
-		         INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
-		         INNER JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
-		         INNER JOIN TB_GOODS_SUMMARY GS ON CG.GOODS_CD = GS.GOODS_CD
-		         LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GBP ON CG.GOODS_CD = GBP.GOODS_CD
-		         WHERE  C4.SITE_CD = #{siteCd}
-		         AND    C4.CATE_GB = #{cateGb}
-		         AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		WITH BASE_GOODS AS (
+		        SELECT CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
+		        BG.BRAND_GROUP_ENM
+		        ELSE
+		        BG.BRAND_GROUP_KNM
+		        END                   AS BRAND_GROUP_NM /*브랜드그룹명*/
+		        , G.GOODS_CD                              /*상품코드*/
+		        , G.GOODS_NM                              /*상품명*/
+		        , G.GOODS_GB                              /*상품구분*/
+		        , G.SELF_GOODS_YN                         /*자사상품여부*/
+		        , G.FOREIGN_BUY_YN                        /*해외구매대행여부*/
+		        , G.PARALLEL_IMPORT_YN                    /*병행수입여부*/
+		        , G.ORDER_MADE_YN                         /*주문제작여부*/
+		        , G.GOODS_TNM                             /*상품타이틀명*/
+		        , G.MAIN_COLOR_CD                         /*대표색상코드*/
+		        , G.LIST_PRICE                            /*정상가(최초판매가)*/
+		        , CASE WHEN #{frontGb} = 'P' AND #{custGb} = 'G100_20' THEN  IFNULL(GBP.STAFF_PC_CURR_PRICE,G.CURR_PRICE)
+		        WHEN #{frontGb} = 'M' AND #{custGb} = 'G100_20' THEN  IFNULL(GBP.STAFF_MO_CURR_PRICE,G.CURR_PRICE)
+		        WHEN #{frontGb} = 'A' AND #{custGb} = 'G100_20' THEN  IFNULL(GBP.STAFF_APP_CURR_PRICE,G.CURR_PRICE)
+		        WHEN #{frontGb} = 'P' AND #{custGb} != 'G100_20' THEN IFNULL(GBP.PC_CURR_PRICE,G.CURR_PRICE)
+		        WHEN #{frontGb} = 'M' AND #{custGb} != 'G100_20' THEN IFNULL(GBP.MO_CURR_PRICE,G.CURR_PRICE)
+		        WHEN #{frontGb} = 'A' AND #{custGb} != 'G100_20' THEN IFNULL(GBP.APP_CURR_PRICE,G.CURR_PRICE)
+		        ELSE G.CURR_PRICE
+		        END                   AS CURR_PRICE     /*현재판매가*/
+		        , G.MIN_ORD_AMT                           /*최소주문금액*/
+		        , G.FORMAL_GB                             /*정상이월구분*/
+		        , G.REG_DT                                /*등록일시*/
+		        , GS.SELL_WEEK_QTY                        /*주간판매수량*/
+		        , GS.REVIEW_REG_CNT                       /*리뷰등록건수*/
+		        FROM   TB_CATE_4SRCH C4
+		        INNER JOIN TB_CATE_GOODS CG ON C4.LEAF_CATE_NO = CG.CATE_NO
+		        INNER JOIN TB_GOODS G ON CG.GOODS_CD = G.GOODS_CD
+		        INNER JOIN TB_GOODS_STOCK S ON CG.GOODS_CD = S.GOODS_CD
+		        INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+		        INNER JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		        INNER JOIN TB_GOODS_SUMMARY GS ON CG.GOODS_CD = GS.GOODS_CD
+		        LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GBP ON CG.GOODS_CD = GBP.GOODS_CD
+		        WHERE  C4.SITE_CD = #{siteCd}
+		        AND    C4.CATE_GB = #{cateGb}
+		        AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
 		        <if test="cate1No != null and cate1No != ''">
-		         AND    C4.CATE1_NO = #{cate1No}
+		        	AND    C4.CATE1_NO = #{cate1No}
 		        </if>
 		        <if test="cate2No != null and cate2No != ''">
-		         AND    C4.CATE2_NO = #{cate2No}
+		        	AND    C4.CATE2_NO = #{cate2No}
 		        </if>
 		        <if test="cate3No != null and cate3No != ''">
-		         AND    C4.CATE3_NO = #{cate3No}
+		        	AND    C4.CATE3_NO = #{cate3No}
 		        </if>
 		        <if test="cate4No != null and cate4No != ''">
-		         AND    C4.CATE4_NO = #{cate4No}
+		        	AND    C4.CATE4_NO = #{cate4No}
 		        </if>
 		        <if test="cate5No != null and cate5No != ''">
-		        AND    C4.CATE5_NO = #{cate5No}
+		        	AND    C4.CATE5_NO = #{cate5No}
 		        </if>
 		        <choose>
 		            <when test="brandGroupNo != null and brandGroupNo > 0">
@@ -2122,7 +2162,7 @@
 		        </if>
 		        <if test="seasonArr != null and seasonArr.length > 0"> <!-- 시즌 -->
 		            AND    G.SEASON_CD IN
-		        <foreach collection="seasonArr" item="item" index="index"  open="(" close=")" separator=",">
+		            <foreach collection="seasonArr" item="item" index="index"  open="(" close=")" separator=",">
 		                #{item}
 		            </foreach>
 		        </if>
@@ -2140,21 +2180,21 @@
 		        </if>
 		        <if test='sizeArr != null and sizeArr.length > 0'>
 		            AND    EXISTS (SELECT 1
-		                           FROM   TB_OPTION
-		                           WHERE  GOODS_CD = CG.GOODS_CD
-		                           AND    OPT_CD2 IN
-		                           <foreach collection="sizeArr" item="item" index="index"  open="(" close=")" separator=",">
-		                               #{item}
-		                           </foreach>
-		                           AND    DISP_YN = 'Y'
-		                        )
+		                   FROM   TB_OPTION
+		                   WHERE  GOODS_CD = CG.GOODS_CD
+		                   AND    OPT_CD2 IN
+		                   <foreach collection="sizeArr" item="item" index="index"  open="(" close=")" separator=",">
+		                        #{item}
+		                   </foreach>
+		                   AND    DISP_YN = 'Y'
+		                   )
 		        </if>
 		        <if test="newGoods != null and newGoods != ''">
 		            AND    EXISTS (SELECT 1
-		                           FROM   TB_GOODS_BENEFIT
-		                           WHERE  GOODS_CD = G.GOODS_CD
-		                           AND    BENEFIT_GB = #{newGoods}
-		                         )
+		                  FROM   TB_GOODS_BENEFIT
+		                  WHERE  GOODS_CD = G.GOODS_CD
+		                  AND    BENEFIT_GB = #{newGoods}
+		                  )
 		        </if>
 		        <if test='benefitArr != null and benefitArr.length > 0'>
 		            AND    EXISTS (SELECT 1
@@ -2164,47 +2204,119 @@
 		                           <foreach collection="benefitArr" item="item" index="index"  open="(" close=")" separator=",">
 		                               #{item}
 		                           </foreach>
-		                        )
+		                           )
+		        </if>
+		        <if test="priceFrom != null and priceFrom != ''">
+		            AND    G.CURR_PRICE <![CDATA[>=]]> #{priceFrom}
+		        </if>
+		        <if test="priceTo != null and priceTo != ''">
+		            AND    G.CURR_PRICE <![CDATA[<=]]> #{priceTo}
+		        </if>
+		        <if test="dcRateFrom != null and dcRateFrom != ''">
+		            AND    ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[>=]]> #{dcRateFrom}
 		        </if>
-				<if test="priceFrom != null and priceFrom != ''">
-					AND    G.CURR_PRICE <![CDATA[>=]]> #{priceFrom}
-				</if>
-				<if test="priceTo != null and priceTo != ''">
-					AND    G.CURR_PRICE <![CDATA[<=]]> #{priceTo}
-				</if>
-				<if test="dcRateFrom != null and dcRateFrom != ''">
-					AND    ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[>=]]> #{dcRateFrom}
-				</if>
-				<if test="dcRateTo != null and dcRateTo != ''">
-					AND    ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[<=]]> #{dcRateTo}
-				</if>
-		      ) G
-			  INNER JOIN TB_OPTION O ON G.GOODS_CD = O.GOODS_CD AND    O.DISP_YN = 'Y' <!--AND G.SELF_GOODS_YN = 'Y' /*자사상품만*/-->
-			  <if test="colorArr != null and colorArr.length > 0"> <!-- 색상 -->
-					AND    O.OPT_CD1 IN (SELECT COLOR_CD
-					FROM   TB_COLOR
-					WHERE  1 = 1
-					AND    COLOR_GRP_CD IN
-					<foreach collection="colorArr" item="item" index="index"  open="(" close=")" separator=",">
-						#{item}
-					</foreach>
-					AND    USE_YN = 'Y' /*사용하는색상*/
-					)
-			  </if>
-			  <choose>
-				  <when test="sortingType == 'BEST'"> <!-- 인기상품순 -->
-					ORDER BY G.SELL_WEEK_QTY DESC, G.GOODS_CD
-				  </when>
-				  <when test="sortingType == 'REVIEW'"> <!-- 리뷰많은순 -->
-					ORDER BY G.REVIEW_REG_CNT DESC, G.GOODS_CD
-				  </when>
-				  <otherwise> <!-- 최신상품순 -->
-					ORDER BY G.REG_DT DESC, G.GOODS_CD
-				  </otherwise>
-			  </choose>
-			  <if test="pageable != null and pageable.endRow != null and pageable.endRow > 0">
-				LIMIT #{pageable.limitStartRow} , #{pageable.pageSize}
-			  </if>
+		        <if test="dcRateTo != null and dcRateTo != ''">
+		            AND    ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[<=]]> #{dcRateTo}
+		        </if>
+		)
+		, TAB_OPT_SIZE AS (
+		    /*옵션 사이즈 목록 조회*/
+		    /*자사상품*/
+		    SELECT G.GOODS_CD
+		        , VS.OPT_CD1
+		        , C.COLOR_CD
+		        , CC.CD_DESC AS COLOR_CHIP /*RGB값*/
+		        , GROUP_CONCAT(DISTINCT CONCAT(VS.OPT_CD2 ,':' ,CASE WHEN VS.SOLDOUT_YN = 'Y' THEN 'Y'
+		        ELSE CASE WHEN VS.CURR_STOCK_QTY - VS.BASE_STOCK_QTY > 0 THEN 'N' ELSE 'Y' END END) ORDER BY VS.DISP_ORD
+		        SEPARATOR ',') AS SIZES
+		    FROM BASE_GOODS G
+		    , VW_STOCK VS
+		    , TB_COLOR C
+		    , TB_COMMON_CODE CC
+		    WHERE G.GOODS_CD = VS.GOODS_CD
+		    AND VS.OPT_CD1 = C.COLOR_CD
+		    AND G.SELF_GOODS_YN = 'Y' /*자사상품*/
+		    AND VS.DISP_YN = 'Y'
+		    AND C.USE_YN = 'Y'
+		    AND C.COLOR_GRP_CD = CC.CD
+		    AND CC.USE_YN = 'Y'
+		    GROUP BY G.GOODS_CD, VS.OPT_CD1, C.COLOR_CD, CC.CD_DESC
+		)
+		, TAB_OPT_SIZE_SELFNO AS (
+		    /*옵션 사이즈 목록 조회*/
+		    /*입점상품*/
+		    SELECT G.GOODS_CD
+		        , GROUP_CONCAT(DISTINCT CONCAT(VS.OPT_CD2 ,':' ,CASE WHEN VS.SOLDOUT_YN = 'Y' THEN 'Y'
+		        ELSE CASE WHEN VS.CURR_STOCK_QTY - VS.BASE_STOCK_QTY > 0 THEN 'N' ELSE 'Y' END END) ORDER BY VS.DISP_ORD
+		        SEPARATOR ',') AS SIZES
+		    FROM BASE_GOODS G
+		    , VW_STOCK VS
+		    WHERE G.GOODS_CD = VS.GOODS_CD
+		    AND G.SELF_GOODS_YN = 'N' /*자사상품*/
+		    AND VS.DISP_YN = 'Y'
+		    GROUP BY G.GOODS_CD
+		)
+		, TAB_OPT AS (
+		    /*옵션 목록*/
+		    SELECT OS.GOODS_CD
+		        , OS.OPT_CD1
+		        , OS.COLOR_CHIP /*RGB값*/
+		        , GROUP_CONCAT(OS.SIZES ORDER BY OS.SIZES) AS SIZES
+		    FROM TAB_OPT_SIZE OS
+		    GROUP BY OS.GOODS_CD, OS.OPT_CD1, OS.COLOR_CHIP
+		    UNION ALL
+		    SELECT OSS.GOODS_CD
+		        , '' AS OPT_CD1
+		        , '' AS COLOR_CHIP
+		        , OSS.SIZES
+		    FROM TAB_OPT_SIZE_SELFNO OSS
+		)
+		, TAB_GOODS AS (
+		SELECT G.BRAND_GROUP_NM     /*브랜드그룹명*/
+		     , G.GOODS_CD           /*상품코드*/
+		     , G.GOODS_NM           /*상품명*/
+		     , G.GOODS_GB           /*상품구분*/
+		     , G.SELF_GOODS_YN      /*자사상품여부*/
+		     , G.FOREIGN_BUY_YN     /*해외구매대행여부*/
+		     , G.PARALLEL_IMPORT_YN /*병행수입여부*/
+		     , G.ORDER_MADE_YN      /*주문제작여부*/
+		     , G.GOODS_TNM          /*상품타이틀명*/
+		     , IFNULL(O.OPT_CD1,G.MAIN_COLOR_CD) AS MAIN_COLOR_CD      /*대표색상코드*/
+		     , G.LIST_PRICE         /*정상가(최초판매가)*/
+		     , G.CURR_PRICE         /*현재판매가*/
+		     , G.FORMAL_GB          /*정상이월구분*/
+		     , G.REG_DT             /*등록일시*/
+		     , G.SELL_WEEK_QTY      /*주간판매수량*/
+		     , G.REVIEW_REG_CNT     /*리뷰등록건수*/
+		     , O.SIZES
+		     FROM   BASE_GOODS g
+		     , TAB_OPT O
+		     WHERE G.GOODS_CD = O.GOODS_CD
+		<if test="colorArr != null and colorArr.length > 0"> <!-- 색상 -->
+		    AND    O.OPT_CD1 IN (SELECT COLOR_CD
+		                        FROM   TB_COLOR
+		                        WHERE  1 = 1
+		                        AND    COLOR_GRP_CD IN
+		                        <foreach collection="colorArr" item="item" index="index"  open="(" close=")" separator=",">
+		                            #{item}
+		                        </foreach>
+		                        AND    USE_YN = 'Y' /*사용하는색상*/
+		                        )
+		</if>
+		<choose>
+		    <when test="sortingType == 'BEST'"> <!-- 인기상품순 -->
+		        ORDER BY G.SELL_WEEK_QTY DESC, G.GOODS_CD
+		    </when>
+		    <when test="sortingType == 'REVIEW'"> <!-- 리뷰많은순 -->
+		        ORDER BY G.REVIEW_REG_CNT DESC, G.GOODS_CD
+		    </when>
+		    <otherwise> <!-- 최신상품순 -->
+		        ORDER BY G.REG_DT DESC, G.GOODS_CD
+		    </otherwise>
+		</choose>
+		<if test="pageable != null and pageable.endRow != null and pageable.endRow > 0">
+		    LIMIT #{pageable.limitStartRow} , #{pageable.pageSize}
+		</if>
 		)
 		SELECT G.BRAND_GROUP_NM
 		      , G.GOODS_CD
@@ -2242,15 +2354,7 @@
 		     AND    C.USE_YN = 'Y'
 		     AND    CC.USE_YN = 'Y'
 		) AS COLOR_CHIPS /*컬러칩*/
-		, (
-		     SELECT GROUP_CONCAT(DISTINCT CONCAT(OPT_CD2 ,':' ,CASE WHEN SOLDOUT_YN = 'Y' THEN 'Y'
-		     ELSE CASE WHEN CURR_STOCK_QTY - BASE_STOCK_QTY > 0 THEN 'N' ELSE 'Y' END
-		     END) ORDER BY DISP_ORD SEPARATOR ',') AS SIZES
-		     FROM   VW_STOCK
-		     WHERE  GOODS_CD = G.GOODS_CD
-		     AND    OPT_CD1 = G.MAIN_COLOR_CD
-		     AND    DISP_YN = 'Y'
-		) AS SIZES /*사이즈*/
+		, G.SIZES /*사이즈*/
 		, (
 		    SELECT GROUP_CONCAT(CONCAT(BENEFIT_GB,':',BENEFIT_NM) ORDER BY NUMB SEPARATOR ',')
 		    FROM   (