瀏覽代碼

배치 - 상품검색어

eskim 5 年之前
父節點
當前提交
1695c2930d

+ 25 - 0
style24.batch/src/main/java/com/style24/batch/biz/dao/TsbGoodsDao.java

@@ -1,5 +1,7 @@
 package com.style24.batch.biz.dao;
 
+import java.util.Collection;
+
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.Goods;
 
@@ -69,4 +71,27 @@ public interface TsbGoodsDao {
 	 */
 	void updateGoodsPrice();
 
+	/**
+	 * 상품 검색어 작업
+	 *
+	 * @author eskim
+	 * @since 2020. 11. 27
+	 */
+	void updateGoodsSnmByGoodsSnm1Null();
+
+	/**
+	 * 상품 자동 검색어 조회
+	 *
+	 * @author eskim
+	 * @since 2020. 11. 27
+	 */
+	Collection<Goods> getGoodsByGooodsSnm1List();
+
+	/**
+	 * 상품 검색어 작업
+	 *
+	 * @author eskim
+	 * @since 2020. 11. 27
+	 */
+	void updateGoodsSnm(Goods goods);
 }

+ 52 - 0
style24.batch/src/main/java/com/style24/batch/biz/job/goods/TsbGoodsSnmJob.java

@@ -0,0 +1,52 @@
+package com.style24.batch.biz.job.goods;
+
+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.TsbGoodsService;
+import com.style24.persistence.domain.Goods;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 상품 검색어 작업 - 시간배치
+ * 
+ * @author eskim
+ * @since 2020. 11. 30
+ */
+@Component
+@Slf4j
+public class TsbGoodsSnmJob extends TsbAbstractJob<Goods, Goods, Goods> {
+
+	@Autowired
+	private TsbGoodsService goodsService;
+
+	private int succCnt = 0;
+	private int failCnt = 0;
+
+	@Override
+	public Goods read() throws Exception {
+
+		Goods goods = new Goods();
+		return goods;
+	}
+
+	@Override
+	public Goods process(Goods goods) throws Exception {
+		return goods;
+	}
+
+	@Override
+	public Goods write(Goods goods) throws Exception {
+
+		goodsService.updateGoodsSnm();
+		return goods;
+	}
+
+	@Override
+	public void notify(Goods goods) throws Exception {
+		super.printResult(succCnt, failCnt);
+	}
+
+}

+ 33 - 1
style24.batch/src/main/java/com/style24/batch/biz/service/TsbGoodsService.java

@@ -1,5 +1,7 @@
 package com.style24.batch.biz.service;
 
+import java.util.Collection;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -23,7 +25,6 @@ public class TsbGoodsService {
 	@Autowired
 	private TsbGoodsDao goodsDao;
 
-
 	/**
 	 * 상품 타이틀예약 작업
 	 *
@@ -86,4 +87,35 @@ public class TsbGoodsService {
 		goodsDao.updateGoodsPrice();
 	}
 
+	/**
+	 * 상품 검색어 작업
+	 *
+	 * @return
+	 * @author eskim
+	 * @since 2020. 11. 30
+	 */
+	@Transactional("shopTxnManager")
+	public void updateGoodsSnm() {
+
+		// 사용자 검색어 없는 상품 일괄 작업
+		goodsDao.updateGoodsSnmByGoodsSnm1Null();
+		// 사용자 검색어 있는 상품 작업
+		Collection<Goods> goodsList = goodsDao.getGoodsByGooodsSnm1List();
+		if (goodsList != null && !goodsList.isEmpty()) {
+			for (Goods goods : goodsList) {
+
+				// 사용자 검색어를 검색어에 적용
+				String goodsSnm = goods.getGoodsSnm();
+				String[] arrGoodsSnm = goods.getGoodsSnm1().split(";");
+				StringBuilder tempGoodsSnm = new StringBuilder();
+				for (String loopGoodsSnm : arrGoodsSnm) {
+					if (goodsSnm.toUpperCase().indexOf(loopGoodsSnm.toUpperCase()) <= -1) {
+						tempGoodsSnm.append(loopGoodsSnm).append(";");
+					}
+				}
+				goods.setGoodsSnm(tempGoodsSnm.toString() + goodsSnm);
+				goodsDao.updateGoodsSnm(goods);
+			}
+		}
+	}
 }

+ 20 - 3
style24.batch/src/main/java/com/style24/batch/biz/task/TsbGoodsTask.java

@@ -6,6 +6,7 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import com.style24.batch.biz.job.goods.TsbGoodsPriceJob;
+import com.style24.batch.biz.job.goods.TsbGoodsSnmJob;
 import com.style24.batch.biz.job.goods.TsbGoodsTnmJob;
 
 import lombok.extern.slf4j.Slf4j;
@@ -25,6 +26,9 @@ public class TsbGoodsTask {
 	@Autowired
 	private TsbGoodsPriceJob goodsPriceJob;
 
+	@Autowired
+	private TsbGoodsSnmJob goodsSnmJob;
+
 	/**
 	 * 초 분 시 일 월 주(년)
 	 * 0 0 12 * * ?" : 아무 요일, 매월, 매일 12:00:00
@@ -56,7 +60,7 @@ public class TsbGoodsTask {
 	//@Scheduled(fixedDelay = 3500000)
 	@Async
 	public void tsbGoodsTnmJob() throws Exception {
-		goodsTnmJob.run("상품 타이틀예약 적용 ");
+		goodsTnmJob.run("상품 타이틀예약 적용");
 	}
 
 	/**
@@ -65,9 +69,22 @@ public class TsbGoodsTask {
 	 * @throws Exception
 	 */
 	@Scheduled(cron = "${cron.goods.goodsPriceJob}")
-	@Scheduled(fixedDelay = 3500000)
+	//@Scheduled(fixedDelay = 3500000)
 	@Async
 	public void tsbGoodsPriceJob() throws Exception {
-		goodsPriceJob.run("상품 가격예약 적용 ");
+		goodsPriceJob.run("상품 가격예약 적용");
 	}
+
+	/**
+	 * 상품 검색어 적용 주기 : 시간배치 - 매시 5분
+	 *
+	 * @throws Exception
+	 */
+	@Scheduled(cron = "${cron.goods.goodsSnmJob}")
+	@Scheduled(fixedDelay = 3500000)
+	@Async
+	public void tsbGoodsSnmJob() throws Exception {
+		goodsSnmJob.run("상품 검색어 적용");
+	}
+
 }

+ 102 - 1
style24.batch/src/main/java/com/style24/persistence/mybatis/shop/TsbGoods.xml

@@ -333,7 +333,7 @@
 		AND A.SELF_GOODS_YN = 'Y'
 	</update>
 	
-	<!-- 상품예약 종료처리 -->
+	<!-- 상품 가격 예약 종료처리 -->
 	<update id="updateGoodsPriceRes">
 		/* TsbGoods.updateGoodsPriceRes */
 		UPDATE TB_GOODS_PRICE_RES
@@ -378,4 +378,105 @@
 		AND A.SELF_GOODS_YN = 'Y'
 	</update>
 	
+	<!--상품 검색어 작업 - 사용자검색어 없는 상품 일괄 -->
+	<update id="updateGoodsSnmByGoodsSnm1Null">
+		/* TsbGoods.updateGoodsSnmByGoodsSnm1Null */
+		UPDATE TB_GOODS A, (
+		                    WITH RECURSIVE TMP_COLOR_GOODS AS (
+		                       SELECT GOODS_CD
+		                            , REPLACE(CONCAT(GROUP_CONCAT(COLOR_GRP_CD),';',GROUP_CONCAT(COLOR_ENM),';',GROUP_CONCAT(CD_NM)),',',';') AS COLOR_INFO
+		                       FROM (
+		                           SELECT DISTINCT G.GOODS_CD, C.COLOR_GRP_CD, C.COLOR_ENM, D.CD_NM
+		                           FROM TB_GOODS G
+		                           LEFT OUTER JOIN TB_OPTION E ON G.GOODS_CD = E.GOODS_CD
+		                           LEFT OUTER JOIN TB_COLOR C ON E.OPT_CD1 = C.COLOR_CD
+		                                                      AND C.USE_YN= 'Y' 
+		                           LEFT OUTER JOIN TB_COMMON_CODE D ON C.COLOR_GRP_CD = D.CD
+		                                                      AND D.USE_YN= 'Y'
+		                           WHERE G.GOODS_SNM1 IS NULL
+		                       ) Z
+		                       GROUP BY GOODS_CD
+		                   )
+		                   SELECT GOODS_CD
+		                        , GOODS_SNM_COMP 
+		                   FROM (
+		                       SELECT DISTINCT Y.GOODS_CD
+		                            , Y.GOODS_SNM_COMP
+		                            , Y.GOODS_SNM
+		                       FROM (
+		                           SELECT G.GOODS_CD
+		                                , G.GOODS_SNM
+		                                , UPPER(CONCAT(
+		                                  G.GOODS_CD,';',
+		                                  REPLACE(G.GOODS_NM,' ',''),';',
+		                                  B.BRAND_ENM,';',
+		                                  B.BRAND_KNM,';',
+		                                  B.BRAND_GRP_NM,';',
+		                                  G.STYLE_YEAR,';',
+		                                  FN_GET_CODE_NM('G006',G.SEASON_CD),';',
+		                                  FN_GET_CODE_NM('G007',G.SEX_GB),';',
+		                                  NVL2(D.COLOR_INFO,CONCAT(D.COLOR_INFO,';'),''),
+		                                  REPLACE(I.ITEMKIND_NM,'>',';')
+		                                  )) AS GOODS_SNM_COMP
+		                           FROM TB_GOODS G
+		                           INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+		                           LEFT OUTER JOIN TB_ITEMKIND I ON G.ITEMKIND_CD = I.ITEMKIND_CD
+		                           LEFT OUTER JOIN TMP_COLOR_GOODS D ON G.GOODS_CD = D.GOODS_CD
+		                           WHERE G.GOODS_SNM1 IS NULL
+		                            ) Y
+		                        )X
+		                        <![CDATA[
+		                        WHERE X.GOODS_SNM_COMP <> NVL(X.GOODS_SNM,'1')
+		                        ]]>
+		                    ) B
+		SET A.GOODS_SNM = B.GOODS_SNM_COMP
+		WHERE A.GOODS_CD = B.GOODS_CD
+	</update>
+	
+	<!-- 사용자검색어가 있는 상품 조회  -->
+	<select id="getGoodsByGooodsSnm1List"  resultType="Goods">
+		WITH RECURSIVE TMP_COLOR_GOODS AS (
+		    SELECT Z.GOODS_CD
+		         , REPLACE(CONCAT(GROUP_CONCAT(COLOR_GRP_CD),';',GROUP_CONCAT(COLOR_ENM),';',GROUP_CONCAT(CD_NM)),',',';') AS COLOR_INFO
+		    FROM (
+		        SELECT DISTINCT G.GOODS_CD, C.COLOR_GRP_CD, C.COLOR_ENM, D.CD_NM
+		        FROM TB_GOODS G
+		        LEFT OUTER JOIN TB_OPTION E ON G.GOODS_CD = E.GOODS_CD
+		        LEFT OUTER JOIN TB_COLOR C ON E.OPT_CD1 = C.COLOR_CD
+		                                   AND C.USE_YN= 'Y' 
+		        LEFT OUTER JOIN TB_COMMON_CODE D ON C.COLOR_GRP_CD = D.CD
+		                                   AND D.USE_YN= 'Y' 
+		        WHERE G.GOODS_SNM1 IS NOT NULL
+		        ) Z
+		        GROUP BY Z.GOODS_CD
+		)
+		SELECT G.GOODS_CD
+		     , G.GOODS_SNM1
+		     , UPPER(CONCAT(
+		       G.GOODS_CD,';',
+		       REPLACE(G.GOODS_NM,' ',''),';',
+		       B.BRAND_ENM,';',
+		       B.BRAND_KNM,';',
+		       B.BRAND_GRP_NM,';',
+		       G.STYLE_YEAR,';',
+		       FN_GET_CODE_NM('G006',G.SEASON_CD),';',
+		       FN_GET_CODE_NM('G007',G.SEX_GB),';',
+		       NVL2(D.COLOR_INFO,CONCAT(D.COLOR_INFO,';'),''),
+		       REPLACE(I.ITEMKIND_NM,'>',';')
+		       )) AS GOODS_SNM
+		FROM TB_GOODS G
+		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+		LEFT OUTER JOIN TB_ITEMKIND I ON G.ITEMKIND_CD = I.ITEMKIND_CD
+		LEFT OUTER JOIN TMP_COLOR_GOODS D ON G.GOODS_CD = D.GOODS_CD
+		WHERE G.GOODS_SNM1 IS NOT NULL
+	</select>
+	
+	<!--상품 검색어 작업-   -->
+	<update id="updateGoodsSnm" parameterType="Goods">
+		/* TsbGoods.updateGoodsSnm */
+		UPDATE TB_GOODS A
+		SET GOODS_SNM = #{goodsSnm}
+		WHERE GOODS_CD = #{goodsCd}
+	</update>
+		
 </mapper>

+ 1 - 0
style24.batch/src/main/resources/config/application-locd.yml

@@ -44,3 +44,4 @@ cron:
     goods:
         goodsTnmJob: 2 22 2 29 2 ?
         goodsPriceJob: 2 22 2 29 2 ?
+        goodsSnmJob: 2 22 2 29 2 ?