From 1d2a3c53c8d8ca150b161baafd2b8de17bbd4f8b Mon Sep 17 00:00:00 2001 From: hyojin kim Date: Wed, 31 Dec 2025 09:59:25 +0900 Subject: [PATCH] :sparkles: Add Compliance History Value Change Manage Step --- .../ComplianceImportRangeJobConfig.java | 48 ++++++++++++++++++- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/snp/batch/jobs/compliance/batch/config/ComplianceImportRangeJobConfig.java b/src/main/java/com/snp/batch/jobs/compliance/batch/config/ComplianceImportRangeJobConfig.java index 8bc27a2..1298b16 100644 --- a/src/main/java/com/snp/batch/jobs/compliance/batch/config/ComplianceImportRangeJobConfig.java +++ b/src/main/java/com/snp/batch/jobs/compliance/batch/config/ComplianceImportRangeJobConfig.java @@ -26,6 +26,12 @@ import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.web.reactive.function.client.WebClient; +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Map; + @Slf4j @Configuration public class ComplianceImportRangeJobConfig extends BaseMultiStepJobConfig { @@ -76,7 +82,8 @@ public class ComplianceImportRangeJobConfig extends BaseMultiStepJobConfig { + log.info(">>>>> Compliance History Value Change Manage 프로시저 호출 시작"); + + // 1. 입력 포맷 및 타겟 포맷 정의 + DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SS'Z'"); + DateTimeFormatter targetFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); + + Map params = batchDateService.getRiskComplianceApiDateParams(getApiKey()); + + // 2. String -> LocalDateTime (또는 OffsetDateTime) -> String 변환 + String rawFromDate = params.get("fromDate"); + String rawToDate = params.get("toDate"); + + String startDt = LocalDateTime.parse(rawFromDate, inputFormatter).format(targetFormatter); + String endDt = LocalDateTime.parse(rawToDate, inputFormatter).format(targetFormatter); + + log.info("Compliance History Value Change Manage 프로시저 변수 : 시작일: {}, 종료일: {}", startDt, endDt); + + // 3. 프로시저 호출 (SQL 인젝션 방지를 위해 Prepared Statement 방식 권장) + jdbcTemplate.execute(String.format("CALL snp.sp_sync_compliance_history('%s', '%s')", startDt, endDt)); + + log.info(">>>>> Compliance History Value Change Manage 프로시저 호출 완료"); + return RepeatStatus.FINISHED; + }; + } + @Bean(name = "ComplianceHistoryValueChangeManageStep") + public Step complianceHistoryValueChangeManageStep() { + return new StepBuilder("ComplianceHistoryValueChangeManageStep", jobRepository) + .tasklet(complianceHistoryValueChangeManageTasklet(), transactionManager) + .build(); + } + + /** + * 4단계: 모든 스텝 성공 시 배치 실행 로그(날짜) 업데이트 */ @Bean public Tasklet complianceLastExecutionUpdateTasklet() {