Explorar el Código

컨텐츠카테고리상품 목록, 컨텐츠카테고리신규상품 목록, 카테고리 메인 화면 추가

gagamel hace 5 años
padre
commit
b364cfca47

+ 18 - 0
src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java

@@ -305,4 +305,22 @@ public interface TsfGoodsDao {
 	 */
 	Collection<Goods> getRecentlyGoodsList(Goods goods);
 
+	/**
+	 * 컨텐츠카테고리상품 목록
+	 * @param cate - 카테고리 정보
+	 * @return
+	 * @author gagamel
+	 * @date 2021. 3. 25
+	 */
+	Collection<Goods> getContentsCategoryGoodsList(Cate4Srch cate);
+
+	/**
+	 * 컨텐츠카테고리 신규상품 목록
+	 * @param cate - 카테고리 정보
+	 * @return
+	 * @author gagamel
+	 * @date 2021. 3. 25
+	 */
+	Collection<Goods> getContentsCategoryNewGoodsList(Cate4Srch cate);
+
 }

+ 39 - 3
src/main/java/com/style24/front/biz/service/TsfGoodsService.java

@@ -1,5 +1,6 @@
 package com.style24.front.biz.service;
 
+import java.util.ArrayList;
 import java.util.Collection;
 
 import org.apache.commons.lang3.StringUtils;
@@ -405,8 +406,7 @@ public class TsfGoodsService {
 
 		return result;
 	}
-	
-	
+
 	/**
 	 * 세트 상품 사이즈 선택 시 재고수량 가져오기
 	 *
@@ -458,7 +458,6 @@ public class TsfGoodsService {
 		}
 		result = ableOrderCnt;	//주문 가능 수량
 
-
 		if (returnFlag) {
 			return 0;
 		}
@@ -676,4 +675,41 @@ public class TsfGoodsService {
 		return goodsDao.getRecentlyGoodsList(goods);
 	}
 
+	/**
+	 * 컨텐츠카테고리상품 목록
+	 * @param cate - 카테고리 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 3. 25
+	 */
+	public Collection<Goods> getContentsCategoryGoodsList(Cate4Srch cate) {
+		Collection<Goods> goodsList = new ArrayList<>();
+
+		if (cate.getContentsLoc().equals("SCM001")) { // 신상품인 경우
+			goodsList = goodsDao.getContentsCategoryGoodsList(cate);
+
+			// 조회된 데이터가 없거나 건수가 20개 미만이면 신규상품(=정상상품) 조회
+			if (goodsList == null || goodsList.size() < 20) {
+				if (goodsList != null) {
+					// 제외상품 설정
+					StringBuilder sb = new StringBuilder();
+					for (Goods goods : goodsList) {
+						sb.append(goods.getGoodsCd()).append(",");
+					}
+					if (sb != null && !sb.toString().equals("")) {
+						cate.setExceptGoodsArr(sb.toString().substring(0, sb.toString().length() - 1).split(","));
+					}
+				}
+				goodsList.addAll(goodsDao.getContentsCategoryNewGoodsList(cate));
+			}
+		} else if (cate.getContentsLoc().equals("SCM002")) { // 베스트상품인 경우
+			// TODO: 추천솔루션
+
+			// 추천솔루션 데이터가 없으면 베스트로 등록된 상품 조회
+			goodsList = goodsDao.getContentsCategoryGoodsList(cate);
+		}
+
+		return goodsList;
+	}
+
 }

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

@@ -20,6 +20,7 @@ import org.springframework.web.servlet.ModelAndView;
 import com.style24.core.biz.service.TscEnvsetService;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.front.biz.service.TsfDisplayService;
+import com.style24.front.biz.service.TsfGoodsService;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.BrandGroup;
@@ -51,6 +52,9 @@ public class TsfDisplayController extends TsfBaseController {
 	@Autowired
 	private TscEnvsetService envsetService;
 
+	@Autowired
+	private TsfGoodsService goodsService;
+
 	/**
 	 * 몰 메인
 	 * @return
@@ -244,4 +248,28 @@ public class TsfDisplayController extends TsfBaseController {
 		return displayService.getGnbTabList(gnbTab);
 	}
 
+	/**
+	 * 카테고리 메인
+	 * @param cate - 카테고리 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 3. 25
+	 */
+	@GetMapping("/category/main/form")
+	public ModelAndView categoryMain(Cate4Srch cate) {
+		ModelAndView mav = new ModelAndView(super.getDeviceViewName("display/CategoryMainForm"));
+
+		// 신상품
+		cate.setContentsLoc("SCM001");
+		cate.setMaxRow(20);
+		mav.addObject("newGoodsList", goodsService.getContentsCategoryGoodsList(cate));
+
+		// 베스트품
+		cate.setContentsLoc("SCM002");
+		cate.setMaxRow(20);
+		mav.addObject("bestGoodsList", goodsService.getContentsCategoryGoodsList(cate));
+
+		return mav;
+	}
+
 }

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

@@ -35,8 +35,11 @@ public class Cate4Srch extends TscBaseDomain {
 	private String formalGb;
 	private String contentsLoc;
 
-	private Integer brandGroupNo;	// 브랜드그룹번호
+	private Integer brandGroupNo;		// 브랜드그룹번호
 
 	private String soldoutGoodsDispYn;
 
+	private int maxRow;					// 최대ROW수
+	private String[] exceptGoodsArr;	// 제외상품배열
+
 }

+ 279 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -852,4 +852,283 @@
 		ORDER  BY A.DISP_ORD DESC
 	</select>
 	
+	<!-- 컨텐츠카테고리상품 목록 -->
+	<select id="getContentsCategoryGoodsList"  parameterType="Cate4Srch" resultType="Goods">
+		/* TsfGoods.getContentsCategoryGoodsList */
+		WITH TAB_GOODS AS (
+		    SELECT G.BRAND_GROUP_NM     /*브랜드그룹명*/
+		         , G.GOODS_CD           /*상품코드*/
+		         , G.GOODS_NM           /*상품명*/
+		         , G.GOODS_GB           /*상품구분*/
+		         , G.FOREIGN_BUY_YN     /*해외구매대행여부*/
+		         , G.PARALLEL_IMPORT_YN /*병행수입여부*/
+		         , G.ORDER_MADE_YN      /*주문제작여부*/
+		         , G.GOODS_TNM          /*상품타이틀명*/
+		         , G.MAIN_COLOR_CD      /*대표색상코드*/
+		         , G.LIST_PRICE         /*정상가(최초판매가)*/
+		         , G.CURR_PRICE         /*현재판매가*/
+		         , G.REG_DT             /*등록일시*/
+		         , G.NUMB
+		    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.FOREIGN_BUY_YN                                         /*해외구매대행여부*/
+		                 , G.PARALLEL_IMPORT_YN                                     /*병행수입여부*/
+		                 , G.ORDER_MADE_YN                                          /*주문제작여부*/
+		                 , G.GOODS_TNM                                              /*상품타이틀명*/
+		                 , G.MAIN_COLOR_CD                                          /*대표색상코드*/
+		                 , G.LIST_PRICE                                             /*정상가(최초판매가)*/
+		                 , G.CURR_PRICE                                             /*현재판매가*/
+		                 , G.REG_DT                                                 /*등록일시*/
+		                 <choose>
+		                     <when test="contentsLoc == 'SCM002'"> <!-- 베스트 -->
+		                 , ROW_NUMBER() OVER(ORDER BY GS.SELL_WEEK_QTY DESC
+		                                            , G.GOODS_CD) AS NUMB
+		                     </when>
+		                     <otherwise>
+		                 , ROW_NUMBER() OVER(ORDER BY CG.DISP_ORD
+		                                            , G.REG_DT DESC
+		                                            , G.GOODS_CD) AS NUMB
+		                     </otherwise>
+		                 </choose>
+		            FROM   TB_CATE_4SRCH C4
+		                 , TB_CATE_GOODS CG
+		                 , TB_GOODS G
+		                 , TB_GOODS_STOCK S
+		                 , TB_BRAND B
+		                 , TB_BRAND_GROUP BG
+		            <if test="contentsLoc == 'SCM002'"> <!-- 베스트 -->
+		                 , TB_GOODS_SUMMARY GS
+		            </if> 
+		            WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
+		            <choose>
+		                <when test="brandGroupNo != null and brandGroupNo != ''">
+		            AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
+		                </when>
+		                <otherwise>
+		            AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
+		                </otherwise>
+		            </choose>
+		            AND    CG.GOODS_CD = G.GOODS_CD
+		            AND    CG.GOODS_CD = S.GOODS_CD
+		            AND    G.BRAND_CD = B.BRAND_CD
+		            AND    B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		            <if test="contentsLoc == 'SCM002'"> <!-- 베스트 -->
+		            AND    CG.GOODS_CD = GS.GOODS_CD
+		            </if>
+		            AND    C4.SITE_CD = #{siteCd}
+		            AND    C4.CATE_GB = #{cateGb}
+		            AND    C4.CATE_TYPE = 'G031_20' /*컨텐츠카테고리*/
+		            AND    C4.CATE1_NO = #{cate1No}
+		            AND    C4.CONTENTS_LOC = #{contentsLoc}
+		            AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		            AND    G.FORMAL_GB = 'G009_10' /*정상상품*/
+		            AND    S.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
+		            AND    B.USE_YN = 'Y'
+		            AND    BG.USE_YN = 'Y'
+		           ) G
+		    WHERE  G.NUMB <![CDATA[<=]]> #{maxRow}
+		)
+		, TAB_GOODS_IMG AS (
+		    /* 상품의 이미지 */
+		    SELECT G.BRAND_GROUP_NM
+		         , G.GOODS_CD
+		         , G.GOODS_NM
+		         , G.GOODS_GB
+		         , G.FOREIGN_BUY_YN
+		         , G.PARALLEL_IMPORT_YN
+		         , G.ORDER_MADE_YN
+		         , G.GOODS_TNM
+		         , G.MAIN_COLOR_CD
+		         , G.LIST_PRICE
+		         , G.CURR_PRICE
+		         , G.REG_DT
+		         , CASE WHEN GI.DEFAULT_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END       AS SYS_IMG_NM
+		         , CASE WHEN GI.MOUSEOVER_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END AS SYS_IMG_NM2
+		    FROM   TAB_GOODS G
+		         , TB_GOODS_IMG GI
+		    WHERE  G.GOODS_CD = GI.GOODS_CD
+		    AND    G.MAIN_COLOR_CD = GI.COLOR_CD
+		)
+		, TAB_GOODS_VIDEO AS (
+		    /* 상품의 동영상 목록 */
+		    SELECT GOODS_CD
+		         , MAX(CASE WHEN RNUM = 1 THEN VIDEO_GB END)  AS VIDEO_GB_M
+		         , MAX(CASE WHEN RNUM = 1 THEN VIDEO_VAL END) AS VIDEO_VAL_M
+		         , MAX(CASE WHEN RNUM = 2 THEN VIDEO_GB END)  AS VIDEO_GB_S
+		         , MAX(CASE WHEN RNUM = 2 THEN VIDEO_VAL END) AS VIDEO_VAL_S
+		    FROM   (
+		            SELECT G.GOODS_CD
+		                 , V.VIDEO_GB
+		                 , V.VIDEO_VAL
+		                 , VD.REG_DT
+		                 , RANK() OVER(PARTITION BY G.GOODS_CD ORDER BY VD.REG_DT) AS RNUM
+		            FROM   TAB_GOODS G
+		                 , TB_VIDEO_DISPLOC VD
+		                 , TB_VIDEO V
+		            WHERE  G.GOODS_CD = VD.DISPLOC_VAL
+		            AND    VD.VIDEO_SQ = V.VIDEO_SQ
+		            AND    VD.DISPLOC_GB = 'G' /*상품*/
+		            AND    VD.DISP_YN = 'Y'
+		            AND    V.DISP_YN ='Y'
+		           ) Z
+		    GROUP  BY GOODS_CD
+		)
+		SELECT G.BRAND_GROUP_NM
+		     , G.GOODS_CD
+		     , FN_GET_GOODS_NM(G.GOODS_NM,G.GOODS_GB,G.FOREIGN_BUY_YN,G.PARALLEL_IMPORT_YN,G.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
+		     , G.GOODS_TNM
+		     , G.MAIN_COLOR_CD
+		     , G.LIST_PRICE
+		     , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD,G.CURR_PRICE,#{custGb})                           AS CURR_PRICE    /*현재판매가*/
+		     , G.SYS_IMG_NM
+		     , G.SYS_IMG_NM2
+		     , GV.VIDEO_GB_M
+		     , GV.VIDEO_VAL_M
+		     , GV.VIDEO_GB_S
+		     , GV.VIDEO_VAL_S
+		FROM   TAB_GOODS_IMG G
+		LEFT OUTER JOIN TAB_GOODS_VIDEO GV ON G.GOODS_CD = GV.GOODS_CD
+	</select>
+	
+	<!-- 컨텐츠카테고리 신규상품 목록 -->
+	<select id="getContentsCategoryNewGoodsList"  parameterType="Cate4Srch" resultType="Goods">
+		/* TsfGoods.getContentsCategoryNewGoodsList */
+		WITH TAB_GOODS AS (
+		    SELECT G.BRAND_GROUP_NM     /*브랜드그룹명*/
+		         , G.GOODS_CD           /*상품코드*/
+		         , G.GOODS_NM           /*상품명*/
+		         , G.GOODS_GB           /*상품구분*/
+		         , G.FOREIGN_BUY_YN     /*해외구매대행여부*/
+		         , G.PARALLEL_IMPORT_YN /*병행수입여부*/
+		         , G.ORDER_MADE_YN      /*주문제작여부*/
+		         , G.GOODS_TNM          /*상품타이틀명*/
+		         , G.MAIN_COLOR_CD      /*대표색상코드*/
+		         , G.LIST_PRICE         /*정상가(최초판매가)*/
+		         , G.CURR_PRICE         /*현재판매가*/
+		         , G.REG_DT             /*등록일시*/
+		         , G.NUMB
+		    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.FOREIGN_BUY_YN                                         /*해외구매대행여부*/
+		                 , G.PARALLEL_IMPORT_YN                                     /*병행수입여부*/
+		                 , G.ORDER_MADE_YN                                          /*주문제작여부*/
+		                 , G.GOODS_TNM                                              /*상품타이틀명*/
+		                 , G.MAIN_COLOR_CD                                          /*대표색상코드*/
+		                 , G.LIST_PRICE                                             /*정상가(최초판매가)*/
+		                 , G.CURR_PRICE                                             /*현재판매가*/
+		                 , G.REG_DT                                                 /*등록일시*/
+		                 , ROW_NUMBER() OVER(ORDER BY G.REG_DT DESC
+		                                            , G.GOODS_CD) AS NUMB
+		            FROM   TB_CATE_4SRCH C4
+		                 , TB_CATE_GOODS CG
+		                 , TB_GOODS G
+		                 , TB_GOODS_STOCK GS
+		                 , TB_BRAND B
+		                 , TB_BRAND_GROUP BG
+		            WHERE  C4.LEAF_CATE_NO = CG.CATE_NO
+		            <choose>
+		                <when test="brandGroupNo != null and brandGroupNo != ''">
+		            AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
+		                </when>
+		                <otherwise>
+		            AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
+		                </otherwise>
+		            </choose>
+		            AND    CG.GOODS_CD = G.GOODS_CD
+		            AND    CG.GOODS_CD = GS.GOODS_CD
+		            AND    G.BRAND_CD = B.BRAND_CD
+		            AND    B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		            AND    C4.SITE_CD = #{siteCd}
+		            AND    C4.CATE_GB = #{cateGb}
+		            AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		            AND    C4.CATE1_NO = #{cate1No}
+		            <if test="exceptGoodsArr != null and exceptGoodsArr.length > 0">
+		            AND	   CG.GOODS_CD NOT IN
+		                <foreach collection="exceptGoodsArr" item="item" index="index"  open="(" close=")" separator=",">
+		                #{item}
+		                </foreach>
+		            </if>
+		            AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		            AND    G.FORMAL_GB = 'G009_10' /*정상상품*/
+		            AND    GS.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
+		            AND    B.USE_YN = 'Y'
+		            AND    BG.USE_YN = 'Y'
+		           ) G
+		    WHERE  G.NUMB <![CDATA[<=]]> #{maxRow}
+		)
+		, TAB_GOODS_IMG AS (
+		    /* 상품의 이미지 */
+		    SELECT G.BRAND_GROUP_NM
+		         , G.GOODS_CD
+		         , G.GOODS_NM
+		         , G.GOODS_GB
+		         , G.FOREIGN_BUY_YN
+		         , G.PARALLEL_IMPORT_YN
+		         , G.ORDER_MADE_YN
+		         , G.GOODS_TNM
+		         , G.MAIN_COLOR_CD
+		         , G.LIST_PRICE
+		         , G.CURR_PRICE
+		         , CASE WHEN GI.DEFAULT_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END       AS SYS_IMG_NM
+		         , CASE WHEN GI.MOUSEOVER_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END AS SYS_IMG_NM2
+		    FROM   TAB_GOODS G
+		         , TB_GOODS_IMG GI
+		    WHERE  G.GOODS_CD = GI.GOODS_CD
+		    AND    G.MAIN_COLOR_CD = GI.COLOR_CD
+		)
+		, TAB_GOODS_VIDEO AS (
+		    /* 상품의 동영상 목록 */
+		    SELECT GOODS_CD
+		         , MAX(CASE WHEN RNUM = 1 THEN VIDEO_GB END)  AS VIDEO_GB_M
+		         , MAX(CASE WHEN RNUM = 1 THEN VIDEO_VAL END) AS VIDEO_VAL_M
+		         , MAX(CASE WHEN RNUM = 2 THEN VIDEO_GB END)  AS VIDEO_GB_S
+		         , MAX(CASE WHEN RNUM = 2 THEN VIDEO_VAL END) AS VIDEO_VAL_S
+		    FROM   (
+		            SELECT G.GOODS_CD
+		                 , V.VIDEO_GB
+		                 , V.VIDEO_VAL
+		                 , VD.REG_DT
+		                 , RANK() OVER(PARTITION BY G.GOODS_CD ORDER BY VD.REG_DT) AS RNUM
+		            FROM   TAB_GOODS G
+		                 , TB_VIDEO_DISPLOC VD
+		                 , TB_VIDEO V
+		            WHERE  G.GOODS_CD = VD.DISPLOC_VAL
+		            AND    VD.VIDEO_SQ = V.VIDEO_SQ
+		            AND    VD.DISPLOC_GB = 'G' /*상품*/
+		            AND    VD.DISP_YN = 'Y'
+		            AND    V.DISP_YN ='Y'
+		           ) Z
+		    GROUP  BY GOODS_CD
+		)
+		SELECT G.BRAND_GROUP_NM
+		     , G.GOODS_CD
+		     , FN_GET_GOODS_NM(G.GOODS_NM,G.GOODS_GB,G.FOREIGN_BUY_YN,G.PARALLEL_IMPORT_YN,G.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
+		     , G.GOODS_TNM
+		     , G.MAIN_COLOR_CD
+		     , G.LIST_PRICE
+		     , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD,G.CURR_PRICE,#{custGb})                           AS CURR_PRICE    /*현재판매가*/
+		     , G.SYS_IMG_NM
+		     , G.SYS_IMG_NM2
+		     , GV.VIDEO_GB_M
+		     , GV.VIDEO_VAL_M
+		     , GV.VIDEO_GB_S
+		     , GV.VIDEO_VAL_S
+		FROM   TAB_GOODS_IMG G
+		LEFT OUTER JOIN TAB_GOODS_VIDEO GV ON G.GOODS_CD = GV.GOODS_CD
+	</select>
+	
 </mapper>