Переглянути джерело

Merge branch 'develop' into eskim

eskim 5 роки тому
батько
коміт
8bbfb3ec75

+ 40 - 0
style24.batch/src/main/java/com/style24/batch/biz/dao/TsbBatchDao.java

@@ -0,0 +1,40 @@
+package com.style24.batch.biz.dao;
+
+import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.BatchLog;
+
+/**
+ * 배치 Dao
+ *
+ * @author gagamel
+ * @since 2020. 12. 2
+ */
+@ShopDs
+public interface TsbBatchDao {
+
+	/**
+	 * 배치ID로 배치명 조회
+	 * @param batchId - 배치ID
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 2
+	 */
+	String getBatchName(String batchId);
+
+	/**
+	 * 배치로그 생성
+	 * @param batchLog - 배치로그 정보
+	 * @author gagamel
+	 * @since 2020. 12. 2
+	 */
+	void createBatchLog(BatchLog batchLog);
+
+	/**
+	 * 배치로그 종료 처리
+	 * @param batchLogSq - 배치로그일련번호
+	 * @author gagamel
+	 * @since 2020. 12. 2
+	 */
+	void updateBatchLog(Integer batchLogSq);
+
+}

+ 52 - 3
style24.batch/src/main/java/com/style24/batch/biz/job/TsbAbstractJob.java

@@ -3,6 +3,11 @@ package com.style24.batch.biz.job;
 import java.sql.Timestamp;
 import java.util.Collection;
 
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import com.style24.batch.biz.service.TsbBatchService;
+
 import lombok.extern.slf4j.Slf4j;
 
 /**
@@ -17,7 +22,8 @@ public abstract class TsbAbstractJob<I, O, R> {
 	private long startTime = 0L;
 	private long endTime = 0L;
 
-	protected String batchName;
+	private String batchId;
+	private String batchName;
 
 	private I readItem = null;
 	private O convertedItem = null;
@@ -25,10 +31,23 @@ public abstract class TsbAbstractJob<I, O, R> {
 
 	public int totalCount = 0;
 
+	@Autowired
+	private TsbBatchService batchService;
+
+	private Integer batchLogSq;	// 배치로그일련번호
+
 	/**
 	 * Batch Job 시작 로그를 출력한다.
 	 */
 	protected void printStart() {
+		if (StringUtils.isNotBlank(batchId)) {
+			// 배치명 조회
+			batchName = batchService.getBatchName(batchId);
+
+			// 배치로그 생성
+			batchLogSq = batchService.createBatchLog(batchId);
+		}
+
 		startTime = System.currentTimeMillis();
 
 		log.info("################################################################################");
@@ -63,6 +82,11 @@ public abstract class TsbAbstractJob<I, O, R> {
 	 * Batch Job 종료 로그를 출력한다.
 	 */
 	protected void printEnd() {
+		if (StringUtils.isNotBlank(batchId)) {
+			// 배치로그 종료 처리
+			batchService.updateBatchLog(batchLogSq);
+		}
+
 		endTime = System.currentTimeMillis();
 
 		log.info("Start Time: {}", new Timestamp(startTime));
@@ -73,8 +97,33 @@ public abstract class TsbAbstractJob<I, O, R> {
 	}
 
 	/**
-	 * 배치를 실행한다.
-	 * @param batchName - 배치명
+	 * 배치ID로 배치를 실행한다.
+	 * @param batchId - 배치ID
+	 * @throws Exception
+	 */
+	public void runById(String batchId) throws Exception {
+		this.batchId = batchId;
+
+		this.printStart();
+
+		readItem = this.read();
+
+		if (readItem != null) {
+			convertedItem = this.process(readItem);
+
+			resultItem = this.write(convertedItem);
+
+			this.notify(resultItem);
+		} else { // 배치 처리할 대상 데이터가 없으면 종료
+			log.info("처리할 데이터가 없습니다.\n");
+		}
+
+		this.printEnd();
+	}
+
+	/**
+	 * 배치명으로 배치를 실행한다.
+	 * @param batchId - 배치ID
 	 * @throws Exception
 	 */
 	public void run(String batchName) throws Exception {

+ 65 - 0
style24.batch/src/main/java/com/style24/batch/biz/service/TsbBatchService.java

@@ -0,0 +1,65 @@
+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.TsbBatchDao;
+import com.style24.batch.support.env.TsbConstants;
+import com.style24.persistence.domain.BatchLog;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 배치 Service
+ *
+ * @author gagamel
+ * @since 2020. 12. 2
+ */
+@Service
+@Slf4j
+public class TsbBatchService {
+
+	@Autowired
+	private TsbBatchDao batchDao;
+
+	/**
+	 * 배치ID로 배치명 조회
+	 * @param batchId - 배치ID
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 2
+	 */
+	public String getBatchName(String batchId) {
+		return batchDao.getBatchName(batchId);
+	}
+
+	/**
+	 * 배치로그 생성
+	 * @param batchId - 배치ID
+	 * @return 배치로그일련번호
+	 * @author gagamel
+	 * @since 2020. 12. 2
+	 */
+	@Transactional("shopTxnManager")
+	public Integer createBatchLog(String batchId) {
+		BatchLog batchLog = new BatchLog();
+		batchLog.setBatchId(batchId);
+		batchLog.setRegNo(TsbConstants.REG_NO);
+		batchDao.createBatchLog(batchLog);
+
+		return batchLog.getBatchLogSq();
+	}
+
+	/**
+	 * 배치로그 종료 처리
+	 * @param batchLogSq - 배치로그일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 2
+	 */
+	public void updateBatchLog(Integer batchLogSq) {
+		batchDao.updateBatchLog(batchLogSq);
+	}
+
+}

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

@@ -45,8 +45,8 @@ public class TsbGoodsService {
 		// 1.예약기간 만료 상품 타이틀 작업
 		// 1.1 이력쌓기
 		goods.setProcJob("GTE"); // 상품타이틀예약 만료건 변경
-		goods.setRegNo(Integer.parseInt(TsbConstants.REG_ID));
-		goods.setUpdNo(Integer.parseInt(TsbConstants.REG_ID));
+		goods.setRegNo(TsbConstants.REG_NO);
+		goods.setUpdNo(TsbConstants.REG_NO);
 		goodsDao.createGoodsHst(goods);
 		// 1.2 삼품타이틀 초기화
 		goodsDao.updateGoodTnmInit();
@@ -76,8 +76,8 @@ public class TsbGoodsService {
 		// 1.예약기간 만료 상품 가격 작업
 		// 1.1 이력쌓기
 		goods.setProcJob("GPE"); // 상품 가격예약 만료건 변경
-		goods.setRegNo(Integer.parseInt(TsbConstants.REG_ID));
-		goods.setUpdNo(Integer.parseInt(TsbConstants.REG_ID));
+		goods.setRegNo(TsbConstants.REG_NO);
+		goods.setUpdNo(TsbConstants.REG_NO);
 		goodsDao.createGoodsHst(goods);
 		// 1.2 삼품 가격 원복
 		goodsDao.updateGoodPriceInit();

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

@@ -35,7 +35,7 @@ public class TsbMonitoringService {
 	public void createSystemAlarmSms(String alarmId) {
 		Alarm params = new Alarm();
 		params.setAlarmId(alarmId);
-		params.setFuserid(TsbConstants.REG_ID);
+		params.setFuserid(String.valueOf(TsbConstants.REG_NO));
 		params.setFcallback(TscConstants.CALLCENTER_TEL_NO);
 		monitoringDao.createAlarmSms(params);
 	}

+ 2 - 2
style24.batch/src/main/java/com/style24/batch/support/env/TsbConstants.java

@@ -9,8 +9,8 @@ package com.style24.batch.support.env;
  */
 public class TsbConstants {
 
-	// 등록자ID
-	public static final String REG_ID = "0";
+	// 등록자번호
+	public static final Integer REG_NO = 0;
 
 	// 모니터링
 	public enum Monitoring {

+ 45 - 0
style24.batch/src/main/java/com/style24/persistence/mybatis/shop/TsbBatch.xml

@@ -0,0 +1,45 @@
+<?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.TsbBatchDao">
+	
+	<!-- 배치명 조회 -->
+	<select id="getBatchName" parameterType="String" resultType="String">
+		/* TsbBatch.createGoodsHst */
+		SELECT BATCH_NM
+		FROM   TB_BATCH
+		WHERE  BATCH_ID = #{batchId}
+		AND    USE_YN = 'Y' /*사용하는넘만*/
+	</select>
+	
+	<!-- 배치로그 생성 -->
+	<insert id="createBatchLog" parameterType="BatchLog" keyProperty="batchLogSq">
+		/* TsbBatch.createBatchLog */
+		INSERT INTO TB_BATCH (
+		       BATCH_LOG_SQ
+		     , BATCH_ID
+		     , BATCH_STDT
+		     , BATCH_STAT
+		     , REG_NO
+		     , REG_DT
+		)
+		VALUES (
+		       #{batchLogSq}
+		     , #{batchId}
+		     , NOW()
+		     , 'I'
+		     , #{regNo}
+		     , NOW()
+		)
+	</insert>
+	
+	<!-- 배치로그 종료 처리 -->
+	<update id="updateBatchLog" parameterType="Integer">
+		/* TsbBatch.updateBatchLog */
+		UPDATE TB_BATCH
+		SET    BATCH_EDDT = NOW()
+		     , BATCH_STAT = 'F'
+		WHERE  BATCH_LOG_SQ = #{batchLogSq}
+		AND    BATCH_STAT = 'I'
+	</update>
+	
+</mapper>

+ 23 - 0
style24.core/src/main/java/com/style24/persistence/domain/BatchLog.java

@@ -0,0 +1,23 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 배치로그 Domain
+ *
+ * @author gagamel
+ * @since 2020. 12. 2
+ */
+@SuppressWarnings("serial")
+@Data
+public class BatchLog extends TscBaseDomain {
+
+	private Integer batchLogSq;	// 배치로그일련번호
+	private String batchId;		// 배치ID
+	private String batchStdt;	// 배치시작일시
+	private String batchEddt;	// 배치종료일시
+	private String batchStat;	// 배치상태
+
+}