From f97ab43107d6725fb2e63fc19ab02d076118fc83 Mon Sep 17 00:00:00 2001 From: "DESKTOP-6ARNG1Q\\dlsgk" Date: Wed, 15 Jan 2025 10:59:11 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B0=B0=EC=B9=98=20(=EB=85=B8=EC=B6=9C?= =?UTF-8?q?=EC=95=84=EC=9D=B4=ED=85=9C)=20=EA=B4=80=EB=A0=A8=20=EC=9C=84?= =?UTF-8?q?=EC=B9=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SpecialNoteDispItemJobConfiguration.java | 162 +++++++++--------- .../batch/master/StoreJobConfiguration.java | 46 ++++- .../dto/SpecialNoteSyncResponse.java | 7 +- .../qcast/biz/user/dto/StoreSyncResponse.java | 4 + 4 files changed, 131 insertions(+), 88 deletions(-) diff --git a/src/main/java/com/interplug/qcast/batch/master/SpecialNoteDispItemJobConfiguration.java b/src/main/java/com/interplug/qcast/batch/master/SpecialNoteDispItemJobConfiguration.java index 195004b0..d1448c5e 100644 --- a/src/main/java/com/interplug/qcast/batch/master/SpecialNoteDispItemJobConfiguration.java +++ b/src/main/java/com/interplug/qcast/batch/master/SpecialNoteDispItemJobConfiguration.java @@ -1,8 +1,14 @@ package com.interplug.qcast.batch.master; +import com.interplug.qcast.biz.specialNote.SpecialNoteService; +import com.interplug.qcast.biz.specialNote.dto.SpecialNoteItemRequest; +import com.interplug.qcast.biz.specialNote.dto.SpecialNoteRequest; +import com.interplug.qcast.biz.specialNote.dto.SpecialNoteSyncResponse; +import com.interplug.qcast.util.InterfaceQsp; import java.util.Collections; import java.util.List; import java.util.function.Consumer; +import lombok.extern.slf4j.Slf4j; import org.springframework.batch.core.Job; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.JobExecutionListener; @@ -19,14 +25,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; import org.springframework.transaction.PlatformTransactionManager; -import com.interplug.qcast.biz.displayItem.DisplayItemService; -import com.interplug.qcast.biz.displayItem.dto.DisplayItemRequest; -import com.interplug.qcast.biz.specialNote.SpecialNoteService; -import com.interplug.qcast.biz.specialNote.dto.SpecialNoteItemRequest; -import com.interplug.qcast.biz.specialNote.dto.SpecialNoteRequest; -import com.interplug.qcast.biz.specialNote.dto.SpecialNoteSyncResponse; -import com.interplug.qcast.util.InterfaceQsp; -import lombok.extern.slf4j.Slf4j; @Configuration @Slf4j @@ -35,92 +33,100 @@ public class SpecialNoteDispItemJobConfiguration implements JobExecutionListener private final InterfaceQsp interfaceQsp; private final SpecialNoteService specialNoteService; - private final DisplayItemService displayItemService; @Value("${qsp.master-special-note-disp-item-batch-url}") private String qspMasterSpecialNoteDispItemBatchUrl; private SpecialNoteSyncResponse SpecialNoteDispItemSyncResponse; - public SpecialNoteDispItemJobConfiguration(InterfaceQsp interfaceQsp, - SpecialNoteService specialNoteService, DisplayItemService displayItemService) { + public SpecialNoteDispItemJobConfiguration( + InterfaceQsp interfaceQsp, SpecialNoteService specialNoteService) { this.interfaceQsp = interfaceQsp; this.specialNoteService = specialNoteService; - this.displayItemService = displayItemService; } @Override public void beforeJob(JobExecution jobExecution) { log.info("Job 시작: 초기화 메서드 호출 중..."); try { - this.SpecialNoteDispItemSyncResponse = interfaceQsp.callApiData(HttpMethod.GET, - qspMasterSpecialNoteDispItemBatchUrl, null, SpecialNoteSyncResponse.class); - log.info("API 호출 완료, 항목 수: {}", - this.SpecialNoteDispItemSyncResponse.getSdOrderSpnList().size()); + this.SpecialNoteDispItemSyncResponse = + interfaceQsp.callApiData( + HttpMethod.GET, + qspMasterSpecialNoteDispItemBatchUrl, + null, + SpecialNoteSyncResponse.class); + log.info( + "API 호출 완료, 항목 수: {}", this.SpecialNoteDispItemSyncResponse.getSdOrderSpnList().size()); } catch (Exception e) { log.error("specialNoteDispItemSyncResponse 갱신 중 오류: {}", e.getMessage()); } } @Bean - public Job specialNoteDispItemAdditionalJob(JobRepository jobRepository, Step specialNoteStep, - Step specialNoteItemStep, Step storeDispItemStep) { - return new JobBuilder("specialNoteDispItemAdditionalJob", jobRepository).start(specialNoteStep) - .next(specialNoteItemStep).next(storeDispItemStep).listener(this).build(); + public Job specialNoteDispItemAdditionalJob( + JobRepository jobRepository, Step specialNoteStep, Step specialNoteItemStep) { + return new JobBuilder("specialNoteDispItemAdditionalJob", jobRepository) + .start(specialNoteStep) + .next(specialNoteItemStep) + .listener(this) + .build(); } - private Step buildStep(String stepName, JobRepository jobRepository, - PlatformTransactionManager transactionManager, ItemReader reader, ItemWriter writer) { - return new StepBuilder(stepName, jobRepository).chunk(10, transactionManager) - .reader(reader).writer(writer).build(); + private Step buildStep( + String stepName, + JobRepository jobRepository, + PlatformTransactionManager transactionManager, + ItemReader reader, + ItemWriter writer) { + return new StepBuilder(stepName, jobRepository) + .chunk(10, transactionManager) + .reader(reader) + .writer(writer) + .build(); } @Bean - public Step specialNoteStep(JobRepository jobRepository, - PlatformTransactionManager transactionManager) { - return buildStep("specialNoteStep", jobRepository, transactionManager, specialNoteListReader(), - createWriter((items) -> { - try { - log.debug("Special Note batch processing {} items", items.size()); - specialNoteService.setSpecialNoteBatch(items); - log.debug("Successfully processed Special Note batch"); - } catch (Exception e) { - log.error("Error processing Special Note batch: {}", e.getMessage(), e); - throw new RuntimeException("Failed to process Special Note batch", e); - } - }, "specialNote")); + public Step specialNoteStep( + JobRepository jobRepository, PlatformTransactionManager transactionManager) { + return buildStep( + "specialNoteStep", + jobRepository, + transactionManager, + specialNoteListReader(), + createWriter( + (items) -> { + try { + log.debug("Special Note batch processing {} items", items.size()); + specialNoteService.setSpecialNoteBatch(items); + log.debug("Successfully processed Special Note batch"); + } catch (Exception e) { + log.error("Error processing Special Note batch: {}", e.getMessage(), e); + throw new RuntimeException("Failed to process Special Note batch", e); + } + }, + "specialNote")); } @Bean - public Step specialNoteItemStep(JobRepository jobRepository, - PlatformTransactionManager transactionManager) { - return buildStep("specialNoteItemStep", jobRepository, transactionManager, - specialNoteItemListReader(), createWriter((items) -> { - try { - log.debug("Special Note Item batch processing {} items", items.size()); - specialNoteService.setSpecialNoteItemBatch(items); - log.debug("Successfully processed Special Note Item batch"); - } catch (Exception e) { - log.error("Error processing Special Note Item batch: {}", e.getMessage(), e); - throw new RuntimeException("Failed to process Special Note Item batch", e); - } - }, "specialNoteItem")); - } - - @Bean - public Step storeDispItemStep(JobRepository jobRepository, - PlatformTransactionManager transactionManager) { - return buildStep("storeDispItemStep", jobRepository, transactionManager, - storeDispItemListReader(), createWriter((items) -> { - try { - log.debug("Store Disp Item batch processing {} items", items.size()); - displayItemService.setStoreDispItemBatch(items); - log.debug("Successfully processed Store Disp Item batch"); - } catch (Exception e) { - log.error("Error processing Store Disp Item batch: {}", e.getMessage(), e); - throw new RuntimeException("Failed to process Store Disp Item batch", e); - } - }, "storeDispItem")); + public Step specialNoteItemStep( + JobRepository jobRepository, PlatformTransactionManager transactionManager) { + return buildStep( + "specialNoteItemStep", + jobRepository, + transactionManager, + specialNoteItemListReader(), + createWriter( + (items) -> { + try { + log.debug("Special Note Item batch processing {} items", items.size()); + specialNoteService.setSpecialNoteItemBatch(items); + log.debug("Successfully processed Special Note Item batch"); + } catch (Exception e) { + log.error("Error processing Special Note Item batch: {}", e.getMessage(), e); + throw new RuntimeException("Failed to process Special Note Item batch", e); + } + }, + "specialNoteItem")); } private ListItemReader createReader(List items, String readerName) { @@ -131,25 +137,21 @@ public class SpecialNoteDispItemJobConfiguration implements JobExecutionListener @Bean @StepScope public ListItemReader specialNoteListReader() { - return createReader(SpecialNoteDispItemSyncResponse != null - ? SpecialNoteDispItemSyncResponse.getSdOrderSpnList() - : null, "specialNote"); + return createReader( + SpecialNoteDispItemSyncResponse != null + ? SpecialNoteDispItemSyncResponse.getSdOrderSpnList() + : null, + "specialNote"); } @Bean @StepScope public ListItemReader specialNoteItemListReader() { - return createReader(SpecialNoteDispItemSyncResponse != null - ? SpecialNoteDispItemSyncResponse.getSdOrderSpnItemList() - : null, "specialNoteItem"); - } - - @Bean - @StepScope - public ListItemReader storeDispItemListReader() { - return createReader(SpecialNoteDispItemSyncResponse != null - ? SpecialNoteDispItemSyncResponse.getStoreDispItemList() - : null, "storeDispItem"); + return createReader( + SpecialNoteDispItemSyncResponse != null + ? SpecialNoteDispItemSyncResponse.getSdOrderSpnItemList() + : null, + "specialNoteItem"); } private ItemWriter createWriter(Consumer> processor, String writerName) { diff --git a/src/main/java/com/interplug/qcast/batch/master/StoreJobConfiguration.java b/src/main/java/com/interplug/qcast/batch/master/StoreJobConfiguration.java index 20fb8cf6..ed2443a7 100644 --- a/src/main/java/com/interplug/qcast/batch/master/StoreJobConfiguration.java +++ b/src/main/java/com/interplug/qcast/batch/master/StoreJobConfiguration.java @@ -1,5 +1,7 @@ package com.interplug.qcast.batch.master; +import com.interplug.qcast.biz.displayItem.DisplayItemService; +import com.interplug.qcast.biz.displayItem.dto.DisplayItemRequest; import com.interplug.qcast.biz.storeFavorite.StoreFavoriteService; import com.interplug.qcast.biz.storeFavorite.dto.StoreFavoriteRequest; import com.interplug.qcast.biz.user.UserService; @@ -32,6 +34,7 @@ public class StoreJobConfiguration implements JobExecutionListener { private final InterfaceQsp interfaceQsp; private final UserService userService; private final StoreFavoriteService storeFavService; + private final DisplayItemService displayItemService; @Value("${qsp.master-store-batch-url}") private String qspMasterStoreBatchUrl; @@ -39,10 +42,14 @@ public class StoreJobConfiguration implements JobExecutionListener { private StoreSyncResponse storeSyncResponse; public StoreJobConfiguration( - InterfaceQsp interfaceQsp, UserService userService, StoreFavoriteService storeFavService) { + InterfaceQsp interfaceQsp, + UserService userService, + StoreFavoriteService storeFavService, + DisplayItemService displayItemService) { this.interfaceQsp = interfaceQsp; this.userService = userService; this.storeFavService = storeFavService; + this.displayItemService = displayItemService; } @Override @@ -60,11 +67,16 @@ public class StoreJobConfiguration implements JobExecutionListener { @Bean public Job storeAdditionalJob( - JobRepository jobRepository, Step storeStep, Step userStep, Step favoriteStep) { + JobRepository jobRepository, + Step storeStep, + Step userStep, + Step favoriteStep, + Step storeDispItemStep) { return new JobBuilder("storeAdditionalJob", jobRepository) .start(storeStep) .next(userStep) .next(favoriteStep) + .next(storeDispItemStep) .listener(this) .build(); } @@ -138,6 +150,28 @@ public class StoreJobConfiguration implements JobExecutionListener { "favorite")); } + @Bean + public Step storeDispItemStep( + JobRepository jobRepository, PlatformTransactionManager transactionManager) { + return buildStep( + "storeDispItemStep", + jobRepository, + transactionManager, + storeDispItemListReader(), + createWriter( + (items) -> { + try { + log.debug("Store Disp Item batch processing {} items", items.size()); + displayItemService.setStoreDispItemBatch(items); + log.debug("Successfully processed Store Disp Item batch"); + } catch (Exception e) { + log.error("Error processing Store Disp Item batch: {}", e.getMessage(), e); + throw new RuntimeException("Failed to process Store Disp Item batch", e); + } + }, + "storeDispItem")); + } + private ListItemReader createReader(List items, String readerName) { log.info("{}Reader 호출됨...", readerName); return new ListItemReader<>(items != null ? items : Collections.emptyList()); @@ -163,6 +197,14 @@ public class StoreJobConfiguration implements JobExecutionListener { storeSyncResponse != null ? storeSyncResponse.getStoreFavList() : null, "storeFav"); } + @Bean + @StepScope + public ListItemReader storeDispItemListReader() { + return createReader( + storeSyncResponse != null ? storeSyncResponse.getStoreDispItemList() : null, + "storeDispItem"); + } + private ItemWriter createWriter(Consumer> processor, String writerName) { return items -> { try { diff --git a/src/main/java/com/interplug/qcast/biz/specialNote/dto/SpecialNoteSyncResponse.java b/src/main/java/com/interplug/qcast/biz/specialNote/dto/SpecialNoteSyncResponse.java index 01ee06ad..ecaad88f 100644 --- a/src/main/java/com/interplug/qcast/biz/specialNote/dto/SpecialNoteSyncResponse.java +++ b/src/main/java/com/interplug/qcast/biz/specialNote/dto/SpecialNoteSyncResponse.java @@ -1,8 +1,7 @@ package com.interplug.qcast.biz.specialNote.dto; -import java.util.List; -import com.interplug.qcast.biz.displayItem.dto.DisplayItemRequest; import io.swagger.v3.oas.annotations.media.Schema; +import java.util.List; import lombok.Getter; import lombok.Setter; @@ -15,8 +14,4 @@ public class SpecialNoteSyncResponse { @Schema(description = "견적 특이사항 아이템 목록") private List sdOrderSpnItemList; - - @Schema(description = "노출 아이템 목록") - private List storeDispItemList; - } diff --git a/src/main/java/com/interplug/qcast/biz/user/dto/StoreSyncResponse.java b/src/main/java/com/interplug/qcast/biz/user/dto/StoreSyncResponse.java index 1df9f990..aa3d62b3 100644 --- a/src/main/java/com/interplug/qcast/biz/user/dto/StoreSyncResponse.java +++ b/src/main/java/com/interplug/qcast/biz/user/dto/StoreSyncResponse.java @@ -1,5 +1,6 @@ package com.interplug.qcast.biz.user.dto; +import com.interplug.qcast.biz.displayItem.dto.DisplayItemRequest; import com.interplug.qcast.biz.storeFavorite.dto.StoreFavoriteRequest; import io.swagger.v3.oas.annotations.media.Schema; import java.util.List; @@ -18,4 +19,7 @@ public class StoreSyncResponse { @Schema(description = "즐겨찾기 목록") private List storeFavList; + + @Schema(description = "노출 아이템 목록") + private List storeDispItemList; }