Parcourir la source

배치 - 상품 타이틀 예약

eskim il y a 5 ans
Parent
commit
0b9c71ffca

+ 1 - 1
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml

@@ -1909,7 +1909,7 @@
 	<!-- 상품 타이틀 예약조회(기간 체크용) -->
 	<select id="getGoodsTnmDupChkCount" parameterType="GoodsTnmRes" resultType="int">
 		/* TsaGoods.getGoodsTnmDupChkCount */
-		SELECT COUNTS(GOODS_CD)
+		SELECT COUNT(GOODS_CD)
 		FROM TB_GOODS_TNM_RES
 		WHERE 1=1
 		<![CDATA[

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

@@ -0,0 +1,50 @@
+package com.style24.batch.biz.dao;
+
+import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.Goods;
+
+/**
+ * 상품 Dao
+ *
+ * @author eskim
+ * @since 2020. 11. 27
+ */
+@ShopDs
+public interface TsbGoodsDao {
+
+	/**
+	 * 상품 기본정보 이력 생성
+	 *
+	 * @param goods
+	 * @author eskim
+	 * @since 2019. 12. 31
+	 */
+	void createGoodsHst(Goods goods);
+
+	/**
+	 * 상품 타이틀 예약건 초기화
+	 *
+	 * @author eskim
+	 * @since 2020. 02. 07
+	 */
+	void updateGoodTnmInit();
+
+	/**
+	 * 상품 타이틀예약 종료처리
+	 *
+	 * @author eskim
+	 * @since 2020. 02. 07
+	 */
+	void updateGoodsTnmRes();
+
+	/**
+	 * 상품 타이틀예약 작업
+	 *
+	 * @author eskim
+	 * @since 2020. 02. 07
+	 */
+	void updateGoodsTnm();
+
+
+
+}

+ 55 - 0
style24.batch/src/main/java/com/style24/batch/biz/job/goods/TsbGoodsTnmJob.java

@@ -0,0 +1,55 @@
+package com.style24.batch.biz.job.goods;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+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 gagamel
+ * @since 2020. 11. 13
+ */
+@Component
+@Slf4j
+public class TsbGoodsTnmJob extends TsbAbstractJob<Collection<Goods>, Collection<Goods>, Collection<Goods>> {
+
+	@Autowired
+	private TsbGoodsService goodsService;
+
+	private int succCnt = 0;
+	private int failCnt = 0;
+
+	@Override
+	public Collection<Goods> read() throws Exception {
+
+		Collection<Goods> goodsList = new ArrayList<Goods>();
+		return goodsList;
+	}
+
+	@Override
+	public Collection<Goods> process(Collection<Goods> goodsList) throws Exception {
+		return goodsList;
+	}
+
+	@Override
+	public Collection<Goods> write(Collection<Goods> goodsList) throws Exception {
+
+		goodsService.saveGoodsTnmRsvt();
+		return goodsList;
+	}
+
+	@Override
+	public void notify(Collection<Goods> goods) throws Exception {
+		super.printResult(succCnt, failCnt);
+	}
+
+}

+ 59 - 0
style24.batch/src/main/java/com/style24/batch/biz/service/TsbGoodsService.java

@@ -0,0 +1,59 @@
+package com.style24.batch.biz.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.style24.batch.biz.dao.TsbGoodsDao;
+import com.style24.batch.support.env.TsbConstants;
+import com.style24.persistence.domain.Goods;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 상품 Service
+ *
+ * @author eskim
+ * @since 2020. 11. 27
+ */
+@Service
+@Slf4j
+public class TsbGoodsService {
+
+	@Autowired
+	private TsbGoodsDao goodsDao;
+
+
+	/**
+	 * 상품 타이틀예약 작업
+	 *
+	 * @return
+	 * @author eskim
+	 * @since 2020. 11. 27
+	 */
+	@Transactional("shopTxnManager")
+	public void saveGoodsTnmRsvt() {
+		Goods goods = new Goods();
+
+		// 1.예약기간 만료 상품 타이틀 작업
+		// 1.1 이력쌓기
+		goods.setProcJob("TRI"); // 상품타이틀예약 만료건 변경
+		goods.setRegNo(Integer.parseInt(TsbConstants.REG_ID));
+		goods.setUpdNo(Integer.parseInt(TsbConstants.REG_ID));
+		goodsDao.createGoodsHst(goods);
+		// 1.2 삼품타이틀 초기화
+		goodsDao.updateGoodTnmInit();
+
+		// 2.상품예약 종료처리
+		goodsDao.updateGoodsTnmRes();
+
+		// 3.예약도래 상품 타이틀 작업
+		// 3.1 이력쌓기
+		goods.setProcJob("TR"); // 상품타이틀예약 예약 변경
+		goodsDao.createGoodsHst(goods);
+		// 3.2 상품타이틀 변경
+		goodsDao.updateGoodsTnm();
+	}
+
+
+}

+ 35 - 0
style24.batch/src/main/java/com/style24/batch/biz/task/TsbGoodsTask.java

@@ -0,0 +1,35 @@
+package com.style24.batch.biz.task;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import com.style24.batch.biz.job.goods.TsbGoodsTnmJob;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 상품 Task
+ * @author eskim
+ * @since 2020. 11. 27
+ */
+@Component
+@Slf4j
+public class TsbGoodsTask {
+
+	@Autowired
+	private TsbGoodsTnmJob goodsTnmJob;
+
+	/**
+	 * 상품 타이틀예약 적용 주기 : 시간배치 - 매시 1분 (소셜과 시간 중복)
+	 *
+	 * @throws Exception
+	 */
+	@Scheduled(cron = "${cron.goods.goodsTnmJob}")
+	@Scheduled(fixedDelay = 3500000)
+	@Async
+	public void tsbGoodsTnmJob() throws Exception {
+		goodsTnmJob.run("상품 타이틀예약 적용 ");
+	}
+}

+ 160 - 0
style24.batch/src/main/java/com/style24/persistence/domain/Goods.java

@@ -0,0 +1,160 @@
+package com.style24.persistence.domain;
+
+import java.util.Collection;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 상품 Domain
+ *
+ * @author eskim
+ * @since 2020. 10. 20
+ */
+@SuppressWarnings("serial")
+@Data
+public class Goods extends TscBaseDomain {
+
+	private String goodsCd;		//상품코드
+	private String brandCd;		//브랜드코드
+	private String itemkindCd;		//품목코드
+	private String goodsNm;		//상품명
+	private String goodsTnm;		//상품타이틀명
+	private String goodsSnm;		//상품검색명
+	private String goodsSnm1;		//상품검색명1(사용자등록용)
+	private String mainColorCd;		//대표색상코드
+	private String styleYear;		//스타일연도
+	private String seasonCd;		//시즌코드(공통코드G006)
+	private String sexGb;		//성별구분(공통코드G007)
+	private String goodsNum;		//품번(자사상품만 사용)
+	private String goodsType;		//상품타입(공통코드G056)
+	private int listPrice;		//정상가(최초판매가)
+	private int currPrice;		//현재판매가
+	private int currBprice;		//변경전현재판매가
+	private String priceUpdDt;		//가격변경일시
+	private float dcRate;		//할인율
+
+	private String goodsStat;		//상품상태(공통코드G008)
+	private String selfMallYn;		//자사몰노출여부
+	private String goodsGb;		//해외구매대행/병행수입 상품일 경우 주문 시 통관부호 입력 란이 추가되어야 한다
+	private String distributionGb;		//유통구분(공콩코드 G065)
+	private String selfGoodsYn;		//자사상품여부
+	private String supplyCompCd;		//공급업체코드
+	private String supplyGoodsCd;		//공급업체상품코드(원코드)
+	private String ageGrpCd;		//상품연령대(공통코드 G023)
+	private String delvFeeCd;	//배송비정책코드
+	private int delvFee;		//배송비
+	private int minOrdAmt;		//무료배송비최소구매금액
+	private float pntPrate;		//포인트적립율(PC)
+	private float pntMrate;		//포인트적립율(모바일)
+	private float sellFeeRate;		//판매수수료율
+	private String formalGb;		//정상이월구분(공통코드G009)
+	private String changeableYn;		//교환가능여부
+	private String returnableYn;		//반품가능여부
+	private String changeFeeFreeYn;		//교환배송비무료여부
+	private String returnFeeFreeYn;		//반품배송비무료여부
+	private String prePpntUsableYn;		//선포인트사용가능여부(PC)
+	private String preMpntUsableYn;		//선포인트사용가능여부(모바일)
+	private int minOrdQty;		//최소주문수량
+	private int maxOrdQty;		//최대주문수량
+	private int dayMaxOrdQty;		//ID당1일최대구매수량
+	private String giftPackYn;		//선물포장여부
+	private String frstCfrmDt;		//최초승인일시
+	private String originCd;		//제조국(원산지)
+	private String makeYmd;		//제조연월일
+	private String taxGb;		//과세구분(10:과세, 20:비과세)
+	private String erpPriceLinkYn;		//ERP가격연계여부(자사상품만 사용. Y:연계)
+	private String erpStockLinkYn;		//ERP재고연계여부(자사상품만 사용. Y:연계)
+
+	private String brandEnm;		//브랜드영문명
+	private String brandGrpNm;		//브랜드그룹명
+
+	private String goodsDesc;
+	private String goodsPcTopDesc;
+	private String goodsPcDownDesc;
+	private String goodsMobileTopDesc;
+	private String goodsMobileDownDesc;
+	private String chkDescKeep = "N";
+//
+	private String chDataYn = "N";
+	private String chImgYn = "N";
+	private String chNotiYn = "N";
+	private String chStockDataYn = "N";
+	private String chGoodsStatYn = "N";
+	private int stockQtySum;
+	private String goodsImageYn;
+	private String itemkindNm;
+	private String niClsfCd;
+	private String makeNm;
+
+	private int currPriceOrg;
+	private String goodsStatOrg;
+	private String formalGbOrg;
+
+	private String imgType;
+	private String imgPath1;
+	private String imgPath6;
+	private String niClsfNm;
+	private String goodsTypeNm;
+	private String goodTnmInit;
+//
+//	private String goodsRegMsg;
+	private String procJob;
+	private String excelFileNm;
+//	private String searchGb;
+
+	private String blankFlag;
+//
+//	private Integer sizeCurrStockQty;
+//	private Integer sizeBaseStockQty;
+//	private Integer sizeSaleStockQty;
+//	private Integer sizeStockQty;
+//	private String goodsSizeCd;
+//	private String sizeSoldoutYn;
+	private String siteCd;
+	private int sellDay15Qty;
+
+	private int goodsSq;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] arrGoodsCd;
+
+	// 상품옵션/재고
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] compsGoodsCd; // 상품 사이즈
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] optCd; // 상품 사이즈
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] optCd1; // 상품 옵션1
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] optCd2; // 상품 옵션2
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] baseStockQty; // 안전재고
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] currStockQty; // erp가용재고
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] editCurrStockQty; // 수정가용재고
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] soldoutYn; // 품절여부
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] dispOrd; // 우선순위
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] dispYn; // 전시여부
+
+
+	private String notiList; // 고시항목
+
+
+	
+}

+ 261 - 0
style24.batch/src/main/java/com/style24/persistence/mybatis/shop/TsbGoods.xml

@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.style24.batch.biz.dao.TsbGoodsDao">
+	
+	<!-- 상품 기본정보 이력 생성 -->
+	<insert id="createGoodsHst" parameterType="Goods">
+		/* AdmGoods.createGoodsHst */
+		INSERT INTO TB_GOODS_HST 
+		(       GOODS_CD
+		      , BRAND_CD
+		      , ITEMKIND_CD
+		      , GOODS_NM
+		      , GOODS_TNM
+		      , GOODS_SNM
+		      , GOODS_SNM1
+		      , MAIN_COLOR_CD
+		      , STYLE_YEAR
+		      , SEASON_CD
+		      , SEX_GB
+		      , GOODS_NUM
+		      , GOODS_TYPE
+		      , LIST_PRICE
+		      , CURR_PRICE
+		      , CURR_BPRICE
+		      , PRICE_UPD_DT
+		      , DC_RATE
+		      , GOODS_STAT
+		      , SELF_MALL_YN
+		      , GOODS_GB
+		      , DISTRIBUTION_GB
+		      , SELF_GOODS_YN
+		      , SUPPLY_COMP_CD
+		      , SUPPLY_GOODS_CD
+		      , AGE_GRP_CD
+		      , DELV_FEE_CD
+		      , PNT_PRATE
+		      , PNT_MRATE
+		      , SELL_FEE_RATE
+		      , FORMAL_GB
+		      , CHANGEABLE_YN
+		      , RETURNABLE_YN
+		      , CHANGE_FEE_FREE_YN
+		      , RETURN_FEE_FREE_YN
+		      , PRE_PPNT_USABLE_YN
+		      , PRE_MPNT_USABLE_YN
+		      , MIN_ORD_QTY
+		      , MAX_ORD_QTY
+		      , DAY_MAX_ORD_QTY
+		      , GIFT_PACK_YN
+		      , FRST_CFRM_DT
+		      , ORIGIN_CD
+		      , MAKE_YMD
+		      , TAX_GB
+		      , ERP_PRICE_LINK_YN
+		      , ERP_STOCK_LINK_YN
+		      , REG_NO
+		      , REG_DT
+		      , UPD_NO
+		      , UPD_DT
+		)
+		SELECT GOODS_CD            
+		     , BRAND_CD            
+		     , ITEMKIND_CD         
+		     , GOODS_NM            
+		     , GOODS_TNM           
+		     , GOODS_SNM           
+		     , GOODS_SNM1          
+		     , MAIN_COLOR_CD
+		     , STYLE_YEAR          
+		     , SEASON_CD           
+		     , SEX_GB              
+		     , GOODS_NUM           
+		     , GOODS_TYPE          
+		     , LIST_PRICE          
+		     , CURR_PRICE          
+		     , CURR_BPRICE         
+		     , PRICE_UPD_DT        
+		     , DC_RATE             
+		     , GOODS_STAT          
+		     , SELF_MALL_YN             
+		     , GOODS_GB            
+		     , DISTRIBUTION_GB     
+		     , SELF_GOODS_YN       
+		     , SUPPLY_COMP_CD      
+		     , SUPPLY_GOODS_CD     
+		     , AGE_GRP_CD          
+		     , DELV_FEE_CD            
+		     , PNT_PRATE           
+		     , PNT_MRATE           
+		     , SELL_FEE_RATE       
+		     , FORMAL_GB           
+		     , CHANGEABLE_YN       
+		     , RETURNABLE_YN       
+		     , CHANGE_FEE_FREE_YN  
+		     , RETURN_FEE_FREE_YN  
+		     , PRE_PPNT_USABLE_YN  
+		     , PRE_MPNT_USABLE_YN  
+		     , MIN_ORD_QTY         
+		     , MAX_ORD_QTY         
+		     , DAY_MAX_ORD_QTY     
+		     , GIFT_PACK_YN
+		     , FRST_CFRM_DT        
+		     , ORIGIN_CD             
+		     , MAKE_YMD            
+		     , TAX_GB              
+		     , ERP_PRICE_LINK_YN   
+		     , ERP_STOCK_LINK_YN   
+		     , #{regNo}              
+		     , NOW()              
+		     , UPD_NO              
+		     , UPD_DT              
+		FROM TB_GOODS
+		WHERE 1 = 1
+		<choose>
+		      <when test='procJob != null and procJob == "G"'>
+		AND GOODS_CD = #{goodsCd}
+		      </when>
+		      <when test='procJob != null and procJob == "TRI"'>
+		AND GOODS_CD IN (
+		                 SELECT G.GOODS_CD
+		                 FROM TB_GOODS G
+		                     ,(
+		                       SELECT GOODS_CD
+		                            , GOODS_TNM
+		                       FROM (
+		                             SELECT GT.GOODS_CD
+		                                  , GT.GOODS_TNM
+		                                  , RANK() OVER(PARTITION BY GT.GOODS_CD ORDER BY GT.GOODS_TNM_RES_SQ DESC) RANK
+		                             FROM TB_GOODS_TNM_RES GT
+		                             WHERE GT.APPLYC_YN = 'N'
+		                             AND GT.APPLY_EDDT <![CDATA[<]]> NOW()
+		                            ) Z
+		                       WHERE RANK = 1
+		                      ) S
+		                 WHERE G.GOODS_CD = S.GOODS_CD
+		                 AND G.GOODS_TNM = S.GOODS_TNM
+		                )
+		      </when>
+		      <when test='procJob != null and procJob == "TR"'>
+		AND GOODS_CD IN (
+		                 SELECT G.GOODS_CD
+		                 FROM TB_GOODS G
+		                     ,(
+		                       SELECT GOODS_CD
+		                            , GOODS_TNM
+		                       FROM (
+		                             SELECT GT.GOODS_CD
+		                                  , GT.GOODS_TNM
+		                                  , RANK() OVER(PARTITION BY GT.GOODS_CD ORDER BY GT.GOODS_TNM_RES_SQ DESC) RANK
+		                             FROM TB_GOODS_TNM_RES GT
+		                             WHERE GT.APPLYC_YN = 'N'
+		                             AND NOW() BETWEEN GT.APPLY_STDT AND GT.APPLY_EDDT
+		                            ) Z
+		                       WHERE RANK = 1
+		                      ) S
+		                 WHERE G.GOODS_CD = S.GOODS_CD
+		                 AND (G.GOODS_TNM IS NULL OR G.GOODS_TNM <![CDATA[<>]]> S.GOODS_TNM)
+		                )
+		      </when>
+		      <otherwise>
+		AND 1 = 2
+		      </otherwise>
+		    </choose>
+
+	</insert>
+	
+	<!-- 상품 타이틀 예약건 초기화 -->
+	<update id="updateGoodTnmInit">
+		/* TsbGoods.updateGoodTnmInit */
+		UPDATE TB_GOODS A
+		SET A.UPD_NO = 0
+		  , A.UPD_DT = NOW()
+		  , A.GOODS_TNM = (SELECT S.GOODS_TNM
+		                   FROM (
+		                       SELECT GT.GOODS_CD
+		                            , GT.GOODS_TNM
+		                            , RANK() OVER(PARTITION BY GT.GOODS_CD ORDER BY GT.GOODS_TNM_RES_SQ DESC) RANK
+		                       FROM TB_GOODS_TNM_RES GT
+		                       WHERE GT.APPLYC_YN = 'N'
+		                       AND NOW() BETWEEN GT.APPLY_STDT AND GT.APPLY_EDDT
+		                      ) S
+		                   WHERE S.RANK = 1
+		                   AND S.GOODS_CD = A.GOODS_CD
+		                   )
+		WHERE A.GOODS_CD IN (
+		                   SELECT P.GOODS_CD
+		                   FROM TB_GOODS P
+		                       ,(SELECT GOODS_CD
+		                              , GOODS_TNM
+		                         FROM (
+		                              SELECT RS.GOODS_CD
+		                                   , RS.GOODS_TNM
+		                                   , RANK() OVER(PARTITION BY RS.GOODS_CD ORDER BY RS.GOODS_TNM_RES_SQ DESC) RANK
+		                              FROM TB_GOODS_TNM_RES RS
+		                              WHERE RS.APPLY_EDDT <![CDATA[<]]> NOW()
+		                              AND RS.APPLYC_YN = 'N'
+		                              ) Z
+		                         WHERE RANK = 1
+		                        ) TS
+		                   WHERE  P.GOODS_CD = TS.GOODS_CD
+		                  )
+	</update>
+	
+	<!-- 상품예약 종료처리 -->
+	<update id="updateGoodsTnmRes">
+		/* TsbGoods.updateGoodsTnmRes */
+		UPDATE TB_GOODS_TNM_RES
+		   SET APPLYC_YN = 'Y'
+		     , UPD_NO = 0
+		     , UPD_DT = NOW()
+		WHERE APPLY_EDDT <![CDATA[<]]> NOW()
+		AND APPLYC_YN = 'N'
+	</update>
+	
+	<!-- 상품타이틀 변경 -->
+	<update id="updateGoodsTnm">
+		/* TsbGoods.updateGoodsTnm */
+		UPDATE TB_GOODS A
+		SET A.UPD_NO = 0
+		  , A.UPD_DT = NOW()
+		  , A.GOODS_TNM = (
+		                 SELECT S.GOODS_TNM
+		                 FROM TB_GOODS P
+		                    , (
+		                       SELECT GOODS_CD
+		                            , GOODS_TNM
+		                       FROM (
+		                             SELECT RS.GOODS_CD
+		                                  , RS.GOODS_TNM
+		                                  , RANK() OVER(PARTITION BY RS.GOODS_CD ORDER BY RS.GOODS_TNM_RES_SQ DESC) RANK
+		                             FROM TB_GOODS_TNM_RES RS
+		                             WHERE NOW() BETWEEN RS.APPLY_STDT AND RS.APPLY_EDDT
+		                             AND RS.APPLYC_YN = 'N'
+		                             ) Z
+		                       WHERE RANK = 1
+		                      ) S
+		                   WHERE P.GOODS_CD = S.GOODS_CD
+		                   AND  P.GOODS_CD = A.GOODS_CD
+		                   AND (P.GOODS_TNM IS NULL OR P.GOODS_TNM <![CDATA[<>]]> S.GOODS_TNM)
+		                 )
+		WHERE A.GOODS_CD IN (
+		                   SELECT P.GOODS_CD
+		                   FROM TB_GOODS P
+		                       ,(SELECT GOODS_CD
+		                              , GOODS_TNM
+		                         FROM (
+		                              SELECT RS.GOODS_CD
+		                                   , RS.GOODS_TNM
+		                                   , RANK() OVER(PARTITION BY RS.GOODS_CD ORDER BY RS.GOODS_TNM_RES_SQ DESC) RANK
+		                              FROM TB_GOODS_TNM_RES RS
+		                              WHERE NOW() BETWEEN RS.APPLY_STDT AND RS.APPLY_EDDT
+		                              AND RS.APPLYC_YN = 'N'
+		                              ) Z
+		                         WHERE RANK = 1
+		                        ) S
+		                   WHERE  P.GOODS_CD = S.GOODS_CD
+		                   AND (P.GOODS_TNM IS NULL OR P.GOODS_TNM <![CDATA[<>]]> S.GOODS_TNM)
+		                  )
+	</update>
+	
+</mapper>

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

@@ -39,3 +39,7 @@ cron:
     monitoring:
         dayJob: 2 22 2 29 2 ?
         hourJob: 2 22 2 29 2 ?
+        
+    #상품
+    goods:
+        goodsTnmJob: 2 22 2 29 2 ?