浏览代码

추천 관련 쿼리 변경

eskim 5 年之前
父节点
当前提交
429146deb5

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

@@ -237,6 +237,16 @@ public interface TsfGoodsDao {
 	 * @date 2021. 3. 8
 	 */
 	Collection<Goods> getTmtbGoodsList(Goods goods);
+	
+	/**
+	 * 상품 추천상품 목록
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 3. 8
+	 */
+	Collection<Goods> getRecommendGoodsList(Goods goods);
 
 	/**
 	 * 재입고 알림 미 알림 조회

+ 12 - 0
src/main/java/com/style24/front/biz/service/TsfGoodsService.java

@@ -547,6 +547,18 @@ public class TsfGoodsService {
 	public Collection<Goods> getTmtbGoodsList(Goods goods) {
 		return goodsDao.getTmtbGoodsList(goods);
 	}
+	
+	/**
+	 * 상품 추천상품 목록
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 3. 8
+	 */
+	public Collection<Goods> getRecommendGoodsList(Goods goods) {
+		return goodsDao.getRecommendGoodsList(goods);
+	}
+	
 
 	/**
 	 * 재입고 알림 미 알림 조회

+ 113 - 4
src/main/java/com/style24/front/biz/web/TsfGoodsController.java

@@ -896,7 +896,42 @@ public class TsfGoodsController extends TsfBaseController {
 		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
 		setGoods(goods);
 		goods.setMaxRownum(15);
-		mav.addObject("goodsList", goodsService.getTmtbGoodsList(goods));
+		String [] arrGoodsCd= {"10813855",
+			"L171TJ561P",
+			"B172SH710P",
+			"B192DO995P",
+			"L191TJ571P",
+			"L191WB304P",
+			"B192DO996P",
+			"L191WB305P",
+			"B192SH720P",
+			"L191WB703P",
+			"10813858",
+			"10813859",
+			"L171JP121P",
+			"10813860",
+			"L171JP721P",
+			"10813862",
+			"L171TJ501P",
+			"10814432",
+			"B192SH730P"};
+		
+		StringBuilder sql = new StringBuilder();
+		if (arrGoodsCd.length > 0) {
+			int idx = 1;
+			for (String goodsCd : arrGoodsCd) {
+				if (!StringUtils.isBlank(goodsCd)) {
+					if (idx > 1) {
+						sql.append("UNION ALL ");
+					}
+					sql.append("SELECT '").append(goodsCd).append("' AS GOODS_CD, ").append(idx++).append(" AS DISP_ORD FROM DUAL\r\n");
+				}
+			}
+			goods.setGoodsSql(sql.toString());
+		}	
+		
+		goods.setArrGoodsCd(arrGoodsCd);
+		mav.addObject("goodsList", goodsService.getRecommendGoodsList(goods));
 		//log.info("goodsTogetherForm = goods{}", goods);
 		mav.addObject("params", goods);
 
@@ -918,7 +953,44 @@ public class TsfGoodsController extends TsfBaseController {
 		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
 		setGoods(goods);
 		goods.setMaxRownum(15);
-		mav.addObject("goodsList", goodsService.getTmtbGoodsList(goods));
+		
+		String [] arrGoodsCd= {"10813855",
+			"L171TJ561P",
+			"B172SH710P",
+			"B192DO995P",
+			"L191TJ571P",
+			"L191WB304P",
+			"B192DO996P",
+			"L191WB305P",
+			"B192SH720P",
+			"L191WB703P",
+			"10813858",
+			"10813859",
+			"L171JP121P",
+			"10813860",
+			"L171JP721P",
+			"10813862",
+			"L171TJ501P",
+			"10814432",
+			"B192SH730P"};
+		
+		StringBuilder sql = new StringBuilder();
+		if (arrGoodsCd.length > 0) {
+			int idx = 1;
+			for (String goodsCd : arrGoodsCd) {
+				if (!StringUtils.isBlank(goodsCd)) {
+					if (idx > 1) {
+						sql.append("UNION ALL ");
+					}
+					sql.append("SELECT '").append(goodsCd).append("' AS GOODS_CD, ").append(idx++).append(" AS DISP_ORD FROM DUAL\r\n");
+				}
+			}
+			goods.setGoodsSql(sql.toString());
+		}	
+		
+		goods.setArrGoodsCd(arrGoodsCd);
+		
+		mav.addObject("goodsList", goodsService.getRecommendGoodsList(goods));
 		//log.info("goodsRecommendForm = goods{}", goods);
 		mav.addObject("params", goods);
 
@@ -940,7 +1012,44 @@ public class TsfGoodsController extends TsfBaseController {
 		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
 		setGoods(goods);
 		goods.setMaxRownum(15);
-		mav.addObject("goodsList", goodsService.getTmtbGoodsList(goods));
+		
+		String [] arrGoodsCd= {"10813855",
+			"L171TJ561P",
+			"B172SH710P",
+			"B192DO995P",
+			"L191TJ571P",
+			"L191WB304P",
+			"B192DO996P",
+			"L191WB305P",
+			"B192SH720P",
+			"L191WB703P",
+			"10813858",
+			"10813859",
+			"L171JP121P",
+			"10813860",
+			"L171JP721P",
+			"10813862",
+			"L171TJ501P",
+			"10814432",
+			"B192SH730P"};
+		
+		StringBuilder sql = new StringBuilder();
+		if (arrGoodsCd.length > 0) {
+			int idx = 1;
+			for (String goodsCd : arrGoodsCd) {
+				if (!StringUtils.isBlank(goodsCd)) {
+					if (idx > 1) {
+						sql.append("UNION ALL ");
+					}
+					sql.append("SELECT '").append(goodsCd).append("' AS GOODS_CD, ").append(idx++).append(" AS DISP_ORD FROM DUAL\r\n");
+				}
+			}
+			goods.setGoodsSql(sql.toString());
+		}	
+		
+		goods.setArrGoodsCd(arrGoodsCd);
+		
+		mav.addObject("goodsList", goodsService.getRecommendGoodsList(goods));
 		//log.info("goodsLikeForm = goods{}", goods);
 		mav.addObject("params", goods);
 
@@ -1057,7 +1166,7 @@ public class TsfGoodsController extends TsfBaseController {
 						sql.append("SELECT '").append(goodsCd).append("' AS GOODS_CD, ").append(idx++).append(" AS DISP_ORD FROM DUAL\r\n");
 					}
 				}
-				goods.setTodayGoodsSql(sql.toString());
+				goods.setGoodsSql(sql.toString());
 				recentlyGoodsList = goodsService.getRecentlyGoodsList(goods);
 			}
 		}

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

@@ -193,7 +193,7 @@ public class Goods extends TscBaseDomain {
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] arrGoodsCd;			// 상품코드
 
-	private String todayGoodsSql;	// 오늘본상품SQL
+	private String goodsSql;	// 오늘본상품SQL
 
 	private String likeIt;			// 위시리스트에담긴상품
 

+ 116 - 37
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -267,7 +267,7 @@
 		      FROM TB_GOODS G
 		      INNER JOIN TB_OPTION O ON G.GOODS_CD = O.GOODS_CD
 		                             AND O.DISP_YN = 'Y'
-		       INNER JOIN VW_STOCK VS ON O.GOODS_CD = VS.GOODS_CD
+		      INNER JOIN VW_STOCK VS ON O.GOODS_CD = VS.GOODS_CD
 		                          AND O.OPT_CD = VS.OPT_CD
 		      WHERE G.GOODS_CD =  #{goodsCd}
 		      AND G.GOODS_TYPE = 'G056_N' -- 일반상품
@@ -711,9 +711,6 @@
 		                            AND G.GOODS_STAT = 'G008_90'
 		                            AND G.SELF_MALL_YN = 'Y'
 		                            AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT
-		                            <if test='adminYn == null or adminYn != "Y"'>
-		                            AND G.GOODS_STAT = 'G008_90'
-		                            </if>
 		                            <![CDATA[
 		                            AND B.GOODS_CD <> #{goodsCd}  -- 자기상품은 제외
 		                            ]]>
@@ -743,20 +740,17 @@
 		) Z
 		LEFT OUTER JOIN (SELECT MAX(GOODS_CD) AS 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 = 1 THEN  KMC_KEY 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
+		                       , MAX(CASE WHEN  RNUM = 2 THEN  KMC_KEY END) AS  VIDEO_VAL_S
 		                 FROM (
-		                       SELECT A.DISPLOC_VAL AS GOODS_CD
-		                            , B.VIDEO_GB 
-		                            , B.VIDEO_VAL 
+		                       SELECT A.GOODS_CD
+		                            , A.VIDEO_GB 
+		                            , A.KMC_KEY 
 		                            , A.REG_DT 
-		                            , RANK() OVER(PARTITION BY A.DISPLOC_VAL ORDER BY A.REG_DT ) RNUM 
-		                       FROM TB_VIDEO_DISPLOC  A
-		                       INNER JOIN  TB_VIDEO B ON A.VIDEO_SQ = B.VIDEO_SQ 
-		                                              AND B.DISP_YN ='Y'
-		                       WHERE A.DISPLOC_GB ='G'
-		                       AND A.DISP_YN = 'Y'
+		                            , RANK() OVER(PARTITION BY A.GOODS_CD ORDER BY A.REG_DT ) RNUM 
+		                       FROM TB_GOODS_VIDEO A
+		                       WHERE A.DISP_YN = 'Y'
 		                      ) V
 		                 ) V ON Z.GOODS_CD = V.GOODS_CD
 		LEFT OUTER JOIN TB_WISHLIST W ON Z.GOODS_CD = W.GOODS_CD
@@ -764,6 +758,99 @@
 		LIMIT #{maxRownum}
 	</select>
 	
+	<!--  추천상품 목록 -->
+	<select id="getRecommendGoodsList" parameterType="Goods" resultType="Goods">
+		/* TsfGoods.getRecommendGoodsList */
+		SELECT Z.*
+		     , 100 - ROUND((CURR_PRICE / LIST_PRICE) * 100 ,0) AS DC_RATE
+		     , FN_GET_GOODS_NM(GOODS_NM,GOODS_GB,FOREIGN_BUY_YN,PARALLEL_IMPORT_YN,ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
+		     , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = Z.GOODS_CD AND COLOR_CD = IFNULL(Z.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
+		     , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = Z.GOODS_CD AND COLOR_CD = IFNULL(Z.MAIN_COLOR_CD,'XX') AND MOUSEOVER_IMG_YN = 'Y') AS SYS_IMG_NM2
+		     , V.VIDEO_GB_M
+		     , V.VIDEO_VAL_M
+		     , V.VIDEO_GB_S
+		     , V.VIDEO_VAL_S
+		     , (CASE WHEN W.GOODS_CD IS NULL THEN 'N' ELSE 'Y' END) AS WISH_YN
+		FROM (
+		      SELECT G.GOODS_CD 
+		           , G.GOODS_NM
+		           , G.GOODS_GB
+		           , G.FOREIGN_BUY_YN
+		           , G.PARALLEL_IMPORT_YN
+		           , G.ORDER_MADE_YN
+		           , G.GOODS_STAT
+		           , G.GOODS_TYPE
+		           , G.MAIN_COLOR_CD
+		           , G.MIN_ORD_QTY 
+		           , (CASE WHEN E.DISP_NM_LANG = 'EN' THEN E.BRAND_GROUP_ENM ELSE E.BRAND_GROUP_KNM END) AS BRAND_GROUP_NM
+		           , G.LIST_PRICE
+		           , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD, G.CURR_PRICE,#{custGb}) AS CURR_PRICE
+		           , GS.STOCK_QTY
+		           , A.DISP_ORD
+		      FROM (
+		             ${goodsSql}
+		           ) A
+		      INNER JOIN TB_GOODS G ON A.GOODS_CD = G.GOODS_CD
+		      INNER JOIN TB_BRAND D ON G.BRAND_CD = D.BRAND_CD
+		                            AND D.USE_YN = 'Y'
+		      INNER JOIN TB_SITE_BRAND SB ON D.BRAND_CD  = SB.BRAND_CD
+		                                  AND SB.USE_YN = 'Y'
+		                                  AND SB.SITE_CD = #{siteCd}
+		      INNER JOIN TB_BRAND_GROUP E ON D.BRAND_GROUP_NO = E.BRAND_GROUP_NO
+		                                  AND E.USE_YN = 'Y'
+		      INNER JOIN TB_GOODS_STOCK GS ON G.GOODS_CD = GS.GOODS_CD
+		                                   AND GS.STOCK_QTY > 0
+		      WHERE 1 = 1
+		      AND G.GOODS_STAT = 'G008_90'
+		      AND G.SELF_MALL_YN = 'Y'
+		      AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT
+		      <![CDATA[
+		      AND G.GOODS_CD <> #{goodsCd}  -- 자기상품은 제외
+		      ]]>
+		      <choose>
+		      <when test="arrGoodsCd != null and arrGoodsCd.length>0">
+		      AND UPPER(G.GOODS_CD) IN
+		          <foreach collection="arrGoodsCd" item="item" index="index"  open="(" close=")" separator=",">
+		           UPPER(#{item})
+		          </foreach>
+		      </when>
+		      <otherwise>
+		      AND 1 = 2   -- 실행안되게
+		      </otherwise>
+		      </choose>
+		) Z
+		LEFT OUTER JOIN (SELECT MAX(GOODS_CD) AS GOODS_CD 
+		                      , MAX(CASE WHEN  RNUM = 1 THEN  VIDEO_GB END) AS  VIDEO_GB_M
+		                      , MAX(CASE WHEN  RNUM = 1 THEN  KMC_KEY END) AS  VIDEO_VAL_M
+		                      , MAX(CASE WHEN  RNUM = 2 THEN  VIDEO_GB END) AS  VIDEO_GB_S
+		                      , MAX(CASE WHEN  RNUM = 2 THEN  KMC_KEY END) AS  VIDEO_VAL_S
+		                 FROM (
+		                       SELECT A.GOODS_CD
+		                            , A.VIDEO_GB 
+		                            , A.KMC_KEY 
+		                            , A.REG_DT 
+		                            , RANK() OVER(PARTITION BY A.GOODS_CD ORDER BY A.REG_DT ) RNUM 
+		                       FROM TB_GOODS_VIDEO A
+		                       WHERE A.DISP_YN = 'Y'
+		                       <choose>
+		                       <when test="arrGoodsCd != null and arrGoodsCd.length>0">
+		                       AND UPPER(A.GOODS_CD) IN
+		                           <foreach collection="arrGoodsCd" item="item" index="index"  open="(" close=")" separator=",">
+		                            UPPER(#{item})
+		                           </foreach>
+		                       </when>
+		                       <otherwise>
+		                       AND 1 = 2   -- 실행안되게
+		                       </otherwise>
+		                       </choose>
+		                      ) V
+		                 ) V ON Z.GOODS_CD = V.GOODS_CD
+		LEFT OUTER JOIN TB_WISHLIST W ON Z.GOODS_CD = W.GOODS_CD
+		                        AND IFNULL(#{custNo}, 0) = W.CUST_NO
+		ORDER BY DISP_ORD
+		LIMIT #{maxRownum}
+	</select>
+	
 	<!-- 재입고 알림 미 알림 조회 -->
 	<select id="getNotReinboundInform" parameterType="ReinboundInform" resultType="ReinboundInform">
 		/* TsfGoods.getNotReinboundInform */
@@ -911,7 +998,7 @@
 		     , G.MAIN_COLOR_CD
 		     , GI.SYS_IMG_NM
 		FROM   (
-		        ${todayGoodsSql}
+		        ${goodsSql}
 		       ) A
 		     , TB_GOODS G
 		     , TB_GOODS_IMG GI
@@ -986,7 +1073,7 @@
 		                                   AND C.DEL_YN = 'N'
 		                                   AND C.LEFT_QTY > 0    -- 사은품 잔여수량
 		      INNER JOIN TB_FREE_GOODS F ON F.PRODUCT_NO = C.PRODUCT_NO
-                           AND F.USE_YN = 'Y'
+		                                 AND F.USE_YN = 'Y'
 		      INNER JOIN TB_FREEGIFT_GOODS D ON A.FREEGIFT_SQ = D.FREEGIFT_SQ
 		                                   AND D.GOODS_GB  IN ( 'G800_10',  'G800_20')
 		                                   AND D.TARGET_GB = 'G260_10'
@@ -1144,23 +1231,19 @@
 		    /* 상품의 동영상 목록 */
 		    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 = 1 THEN KMC_KEY 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
+		         , MAX(CASE WHEN RNUM = 2 THEN KMC_KEY END) AS VIDEO_VAL_S
 		    FROM   (
 		            SELECT G.GOODS_CD
-		                 , V.VIDEO_GB
-		                 , V.VIDEO_VAL
+		                 , VD.VIDEO_GB
+		                 , VD.KMC_KEY
 		                 , 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' /*상품*/
+		                 , TB_GOODS_VIDEO VD
+		            WHERE  G.GOODS_CD = VD.GOODS_CD
 		            AND    VD.DISP_YN = 'Y'
-		            AND    V.DISP_YN ='Y'
 		           ) Z
 		    GROUP  BY GOODS_CD
 		)
@@ -1297,23 +1380,19 @@
 		    /* 상품의 동영상 목록 */
 		    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 = 1 THEN KMC_KEY 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
+		         , MAX(CASE WHEN RNUM = 2 THEN KMC_KEY END) AS VIDEO_VAL_S
 		    FROM   (
 		            SELECT G.GOODS_CD
-		                 , V.VIDEO_GB
-		                 , V.VIDEO_VAL
+		                 , VD.VIDEO_GB
+		                 , VD.KMC_KEY
 		                 , 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' /*상품*/
+		                 , TB_GOODS_VIDEO VD
+		            WHERE  G.GOODS_CD = VD.GOODS_CD
 		            AND    VD.DISP_YN = 'Y'
-		            AND    V.DISP_YN ='Y'
 		           ) Z
 		    GROUP  BY GOODS_CD
 		)