배치 (노출아이템) 관련 위치 변경
This commit is contained in:
parent
1b456efcc2
commit
f97ab43107
@ -1,8 +1,14 @@
|
|||||||
package com.interplug.qcast.batch.master;
|
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.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.batch.core.Job;
|
import org.springframework.batch.core.Job;
|
||||||
import org.springframework.batch.core.JobExecution;
|
import org.springframework.batch.core.JobExecution;
|
||||||
import org.springframework.batch.core.JobExecutionListener;
|
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.context.annotation.Configuration;
|
||||||
import org.springframework.http.HttpMethod;
|
import org.springframework.http.HttpMethod;
|
||||||
import org.springframework.transaction.PlatformTransactionManager;
|
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
|
@Configuration
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@ -35,51 +33,68 @@ public class SpecialNoteDispItemJobConfiguration implements JobExecutionListener
|
|||||||
private final InterfaceQsp interfaceQsp;
|
private final InterfaceQsp interfaceQsp;
|
||||||
|
|
||||||
private final SpecialNoteService specialNoteService;
|
private final SpecialNoteService specialNoteService;
|
||||||
private final DisplayItemService displayItemService;
|
|
||||||
|
|
||||||
@Value("${qsp.master-special-note-disp-item-batch-url}")
|
@Value("${qsp.master-special-note-disp-item-batch-url}")
|
||||||
private String qspMasterSpecialNoteDispItemBatchUrl;
|
private String qspMasterSpecialNoteDispItemBatchUrl;
|
||||||
|
|
||||||
private SpecialNoteSyncResponse SpecialNoteDispItemSyncResponse;
|
private SpecialNoteSyncResponse SpecialNoteDispItemSyncResponse;
|
||||||
|
|
||||||
public SpecialNoteDispItemJobConfiguration(InterfaceQsp interfaceQsp,
|
public SpecialNoteDispItemJobConfiguration(
|
||||||
SpecialNoteService specialNoteService, DisplayItemService displayItemService) {
|
InterfaceQsp interfaceQsp, SpecialNoteService specialNoteService) {
|
||||||
this.interfaceQsp = interfaceQsp;
|
this.interfaceQsp = interfaceQsp;
|
||||||
this.specialNoteService = specialNoteService;
|
this.specialNoteService = specialNoteService;
|
||||||
this.displayItemService = displayItemService;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void beforeJob(JobExecution jobExecution) {
|
public void beforeJob(JobExecution jobExecution) {
|
||||||
log.info("Job 시작: 초기화 메서드 호출 중...");
|
log.info("Job 시작: 초기화 메서드 호출 중...");
|
||||||
try {
|
try {
|
||||||
this.SpecialNoteDispItemSyncResponse = interfaceQsp.callApiData(HttpMethod.GET,
|
this.SpecialNoteDispItemSyncResponse =
|
||||||
qspMasterSpecialNoteDispItemBatchUrl, null, SpecialNoteSyncResponse.class);
|
interfaceQsp.callApiData(
|
||||||
log.info("API 호출 완료, 항목 수: {}",
|
HttpMethod.GET,
|
||||||
this.SpecialNoteDispItemSyncResponse.getSdOrderSpnList().size());
|
qspMasterSpecialNoteDispItemBatchUrl,
|
||||||
|
null,
|
||||||
|
SpecialNoteSyncResponse.class);
|
||||||
|
log.info(
|
||||||
|
"API 호출 완료, 항목 수: {}", this.SpecialNoteDispItemSyncResponse.getSdOrderSpnList().size());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("specialNoteDispItemSyncResponse 갱신 중 오류: {}", e.getMessage());
|
log.error("specialNoteDispItemSyncResponse 갱신 중 오류: {}", e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public Job specialNoteDispItemAdditionalJob(JobRepository jobRepository, Step specialNoteStep,
|
public Job specialNoteDispItemAdditionalJob(
|
||||||
Step specialNoteItemStep, Step storeDispItemStep) {
|
JobRepository jobRepository, Step specialNoteStep, Step specialNoteItemStep) {
|
||||||
return new JobBuilder("specialNoteDispItemAdditionalJob", jobRepository).start(specialNoteStep)
|
return new JobBuilder("specialNoteDispItemAdditionalJob", jobRepository)
|
||||||
.next(specialNoteItemStep).next(storeDispItemStep).listener(this).build();
|
.start(specialNoteStep)
|
||||||
|
.next(specialNoteItemStep)
|
||||||
|
.listener(this)
|
||||||
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T> Step buildStep(String stepName, JobRepository jobRepository,
|
private <T> Step buildStep(
|
||||||
PlatformTransactionManager transactionManager, ItemReader<T> reader, ItemWriter<T> writer) {
|
String stepName,
|
||||||
return new StepBuilder(stepName, jobRepository).<T, T>chunk(10, transactionManager)
|
JobRepository jobRepository,
|
||||||
.reader(reader).writer(writer).build();
|
PlatformTransactionManager transactionManager,
|
||||||
|
ItemReader<T> reader,
|
||||||
|
ItemWriter<T> writer) {
|
||||||
|
return new StepBuilder(stepName, jobRepository)
|
||||||
|
.<T, T>chunk(10, transactionManager)
|
||||||
|
.reader(reader)
|
||||||
|
.writer(writer)
|
||||||
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public Step specialNoteStep(JobRepository jobRepository,
|
public Step specialNoteStep(
|
||||||
PlatformTransactionManager transactionManager) {
|
JobRepository jobRepository, PlatformTransactionManager transactionManager) {
|
||||||
return buildStep("specialNoteStep", jobRepository, transactionManager, specialNoteListReader(),
|
return buildStep(
|
||||||
createWriter((items) -> {
|
"specialNoteStep",
|
||||||
|
jobRepository,
|
||||||
|
transactionManager,
|
||||||
|
specialNoteListReader(),
|
||||||
|
createWriter(
|
||||||
|
(items) -> {
|
||||||
try {
|
try {
|
||||||
log.debug("Special Note batch processing {} items", items.size());
|
log.debug("Special Note batch processing {} items", items.size());
|
||||||
specialNoteService.setSpecialNoteBatch(items);
|
specialNoteService.setSpecialNoteBatch(items);
|
||||||
@ -88,14 +103,20 @@ public class SpecialNoteDispItemJobConfiguration implements JobExecutionListener
|
|||||||
log.error("Error processing Special Note batch: {}", e.getMessage(), e);
|
log.error("Error processing Special Note batch: {}", e.getMessage(), e);
|
||||||
throw new RuntimeException("Failed to process Special Note batch", e);
|
throw new RuntimeException("Failed to process Special Note batch", e);
|
||||||
}
|
}
|
||||||
}, "specialNote"));
|
},
|
||||||
|
"specialNote"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public Step specialNoteItemStep(JobRepository jobRepository,
|
public Step specialNoteItemStep(
|
||||||
PlatformTransactionManager transactionManager) {
|
JobRepository jobRepository, PlatformTransactionManager transactionManager) {
|
||||||
return buildStep("specialNoteItemStep", jobRepository, transactionManager,
|
return buildStep(
|
||||||
specialNoteItemListReader(), createWriter((items) -> {
|
"specialNoteItemStep",
|
||||||
|
jobRepository,
|
||||||
|
transactionManager,
|
||||||
|
specialNoteItemListReader(),
|
||||||
|
createWriter(
|
||||||
|
(items) -> {
|
||||||
try {
|
try {
|
||||||
log.debug("Special Note Item batch processing {} items", items.size());
|
log.debug("Special Note Item batch processing {} items", items.size());
|
||||||
specialNoteService.setSpecialNoteItemBatch(items);
|
specialNoteService.setSpecialNoteItemBatch(items);
|
||||||
@ -104,23 +125,8 @@ public class SpecialNoteDispItemJobConfiguration implements JobExecutionListener
|
|||||||
log.error("Error processing Special Note Item batch: {}", e.getMessage(), e);
|
log.error("Error processing Special Note Item batch: {}", e.getMessage(), e);
|
||||||
throw new RuntimeException("Failed to process Special Note Item batch", e);
|
throw new RuntimeException("Failed to process Special Note Item batch", e);
|
||||||
}
|
}
|
||||||
}, "specialNoteItem"));
|
},
|
||||||
}
|
"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"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T> ListItemReader<T> createReader(List<T> items, String readerName) {
|
private <T> ListItemReader<T> createReader(List<T> items, String readerName) {
|
||||||
@ -131,25 +137,21 @@ public class SpecialNoteDispItemJobConfiguration implements JobExecutionListener
|
|||||||
@Bean
|
@Bean
|
||||||
@StepScope
|
@StepScope
|
||||||
public ListItemReader<SpecialNoteRequest> specialNoteListReader() {
|
public ListItemReader<SpecialNoteRequest> specialNoteListReader() {
|
||||||
return createReader(SpecialNoteDispItemSyncResponse != null
|
return createReader(
|
||||||
|
SpecialNoteDispItemSyncResponse != null
|
||||||
? SpecialNoteDispItemSyncResponse.getSdOrderSpnList()
|
? SpecialNoteDispItemSyncResponse.getSdOrderSpnList()
|
||||||
: null, "specialNote");
|
: null,
|
||||||
|
"specialNote");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@StepScope
|
@StepScope
|
||||||
public ListItemReader<SpecialNoteItemRequest> specialNoteItemListReader() {
|
public ListItemReader<SpecialNoteItemRequest> specialNoteItemListReader() {
|
||||||
return createReader(SpecialNoteDispItemSyncResponse != null
|
return createReader(
|
||||||
|
SpecialNoteDispItemSyncResponse != null
|
||||||
? SpecialNoteDispItemSyncResponse.getSdOrderSpnItemList()
|
? SpecialNoteDispItemSyncResponse.getSdOrderSpnItemList()
|
||||||
: null, "specialNoteItem");
|
: null,
|
||||||
}
|
"specialNoteItem");
|
||||||
|
|
||||||
@Bean
|
|
||||||
@StepScope
|
|
||||||
public ListItemReader<DisplayItemRequest> storeDispItemListReader() {
|
|
||||||
return createReader(SpecialNoteDispItemSyncResponse != null
|
|
||||||
? SpecialNoteDispItemSyncResponse.getStoreDispItemList()
|
|
||||||
: null, "storeDispItem");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T> ItemWriter<T> createWriter(Consumer<List<T>> processor, String writerName) {
|
private <T> ItemWriter<T> createWriter(Consumer<List<T>> processor, String writerName) {
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
package com.interplug.qcast.batch.master;
|
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.StoreFavoriteService;
|
||||||
import com.interplug.qcast.biz.storeFavorite.dto.StoreFavoriteRequest;
|
import com.interplug.qcast.biz.storeFavorite.dto.StoreFavoriteRequest;
|
||||||
import com.interplug.qcast.biz.user.UserService;
|
import com.interplug.qcast.biz.user.UserService;
|
||||||
@ -32,6 +34,7 @@ public class StoreJobConfiguration implements JobExecutionListener {
|
|||||||
private final InterfaceQsp interfaceQsp;
|
private final InterfaceQsp interfaceQsp;
|
||||||
private final UserService userService;
|
private final UserService userService;
|
||||||
private final StoreFavoriteService storeFavService;
|
private final StoreFavoriteService storeFavService;
|
||||||
|
private final DisplayItemService displayItemService;
|
||||||
|
|
||||||
@Value("${qsp.master-store-batch-url}")
|
@Value("${qsp.master-store-batch-url}")
|
||||||
private String qspMasterStoreBatchUrl;
|
private String qspMasterStoreBatchUrl;
|
||||||
@ -39,10 +42,14 @@ public class StoreJobConfiguration implements JobExecutionListener {
|
|||||||
private StoreSyncResponse storeSyncResponse;
|
private StoreSyncResponse storeSyncResponse;
|
||||||
|
|
||||||
public StoreJobConfiguration(
|
public StoreJobConfiguration(
|
||||||
InterfaceQsp interfaceQsp, UserService userService, StoreFavoriteService storeFavService) {
|
InterfaceQsp interfaceQsp,
|
||||||
|
UserService userService,
|
||||||
|
StoreFavoriteService storeFavService,
|
||||||
|
DisplayItemService displayItemService) {
|
||||||
this.interfaceQsp = interfaceQsp;
|
this.interfaceQsp = interfaceQsp;
|
||||||
this.userService = userService;
|
this.userService = userService;
|
||||||
this.storeFavService = storeFavService;
|
this.storeFavService = storeFavService;
|
||||||
|
this.displayItemService = displayItemService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -60,11 +67,16 @@ public class StoreJobConfiguration implements JobExecutionListener {
|
|||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public Job storeAdditionalJob(
|
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)
|
return new JobBuilder("storeAdditionalJob", jobRepository)
|
||||||
.start(storeStep)
|
.start(storeStep)
|
||||||
.next(userStep)
|
.next(userStep)
|
||||||
.next(favoriteStep)
|
.next(favoriteStep)
|
||||||
|
.next(storeDispItemStep)
|
||||||
.listener(this)
|
.listener(this)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
@ -138,6 +150,28 @@ public class StoreJobConfiguration implements JobExecutionListener {
|
|||||||
"favorite"));
|
"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 <T> ListItemReader<T> createReader(List<T> items, String readerName) {
|
private <T> ListItemReader<T> createReader(List<T> items, String readerName) {
|
||||||
log.info("{}Reader 호출됨...", readerName);
|
log.info("{}Reader 호출됨...", readerName);
|
||||||
return new ListItemReader<>(items != null ? items : Collections.emptyList());
|
return new ListItemReader<>(items != null ? items : Collections.emptyList());
|
||||||
@ -163,6 +197,14 @@ public class StoreJobConfiguration implements JobExecutionListener {
|
|||||||
storeSyncResponse != null ? storeSyncResponse.getStoreFavList() : null, "storeFav");
|
storeSyncResponse != null ? storeSyncResponse.getStoreFavList() : null, "storeFav");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@StepScope
|
||||||
|
public ListItemReader<DisplayItemRequest> storeDispItemListReader() {
|
||||||
|
return createReader(
|
||||||
|
storeSyncResponse != null ? storeSyncResponse.getStoreDispItemList() : null,
|
||||||
|
"storeDispItem");
|
||||||
|
}
|
||||||
|
|
||||||
private <T> ItemWriter<T> createWriter(Consumer<List<T>> processor, String writerName) {
|
private <T> ItemWriter<T> createWriter(Consumer<List<T>> processor, String writerName) {
|
||||||
return items -> {
|
return items -> {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -1,8 +1,7 @@
|
|||||||
package com.interplug.qcast.biz.specialNote.dto;
|
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 io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import java.util.List;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
@ -15,8 +14,4 @@ public class SpecialNoteSyncResponse {
|
|||||||
|
|
||||||
@Schema(description = "견적 특이사항 아이템 목록")
|
@Schema(description = "견적 특이사항 아이템 목록")
|
||||||
private List<SpecialNoteItemRequest> sdOrderSpnItemList;
|
private List<SpecialNoteItemRequest> sdOrderSpnItemList;
|
||||||
|
|
||||||
@Schema(description = "노출 아이템 목록")
|
|
||||||
private List<DisplayItemRequest> storeDispItemList;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package com.interplug.qcast.biz.user.dto;
|
package com.interplug.qcast.biz.user.dto;
|
||||||
|
|
||||||
|
import com.interplug.qcast.biz.displayItem.dto.DisplayItemRequest;
|
||||||
import com.interplug.qcast.biz.storeFavorite.dto.StoreFavoriteRequest;
|
import com.interplug.qcast.biz.storeFavorite.dto.StoreFavoriteRequest;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -18,4 +19,7 @@ public class StoreSyncResponse {
|
|||||||
|
|
||||||
@Schema(description = "즐겨찾기 목록")
|
@Schema(description = "즐겨찾기 목록")
|
||||||
private List<StoreFavoriteRequest> storeFavList;
|
private List<StoreFavoriteRequest> storeFavList;
|
||||||
|
|
||||||
|
@Schema(description = "노출 아이템 목록")
|
||||||
|
private List<DisplayItemRequest> storeDispItemList;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user