From 8ce07e71df9bc635b2210753d1141f787d5e2970 Mon Sep 17 00:00:00 2001 From: ysCha Date: Wed, 20 May 2026 12:07:51 +0900 Subject: [PATCH] =?UTF-8?q?[bomList=EB=B0=B0=EC=B9=98]=20Reader=20?= =?UTF-8?q?=EB=8B=A8=20statCd=3D'D'=20=EC=9A=B0=EC=84=A0=20=EC=A0=84?= =?UTF-8?q?=EC=97=AD=20=EC=A0=95=EB=A0=AC=20=E2=80=94=20=EC=B2=AD=ED=81=AC?= =?UTF-8?q?=20=EA=B2=BD=EA=B3=84=20A+D=20=EB=B6=84=EB=A6=AC=20=EC=8B=9C=20?= =?UTF-8?q?A=20=EA=B0=80=20=EC=9D=B4=EA=B9=80=20=EB=B3=B4=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qcast/batch/master/BomConfiguration.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/interplug/qcast/batch/master/BomConfiguration.java b/src/main/java/com/interplug/qcast/batch/master/BomConfiguration.java index c51147bc..4e3c1ea2 100644 --- a/src/main/java/com/interplug/qcast/batch/master/BomConfiguration.java +++ b/src/main/java/com/interplug/qcast/batch/master/BomConfiguration.java @@ -6,6 +6,7 @@ import com.interplug.qcast.biz.displayItem.dto.BomSyncResponse; import com.interplug.qcast.util.InterfaceQsp; import java.util.ArrayList; import java.util.Collections; +import java.util.Comparator; import java.util.List; import org.springframework.batch.core.Job; import org.springframework.batch.core.JobExecutionListener; @@ -62,9 +63,16 @@ public class BomConfiguration implements JobExecutionListener { this.bomSyncList = interfaceQsp.callApiData( HttpMethod.GET, qspInterfaceUrl, null, new TypeReference>() {}); - return (bomSyncList != null) - ? new ListItemReader<>(bomSyncList) - : new ListItemReader<>(Collections.emptyList()); + if (bomSyncList == null) { + return new ListItemReader<>(Collections.emptyList()); + } + // 2026-05-20 청크 경계에서 같은 키 A/D 가 분리되어 A 가 먼저 MERGE 된 뒤 + // 다음 청크의 D 가 그것을 삭제해버리는 리스크를 차단하기 위해, + // 전체 리스트를 statCd='D' 우선으로 정렬한다. (Spring Batch 는 청크를 순차 처리하므로 + // 모든 D 청크가 끝난 뒤에 A/U 청크가 시작되어 전역적으로 'A 가 이김' 이 보장됨) + bomSyncList.sort( + Comparator.comparingInt((BomSyncResponse b) -> "D".equals(b.getStatCd()) ? 0 : 1)); + return new ListItemReader<>(bomSyncList); } @Bean -- 2.47.2