diff --git a/src/main/java/com/interplug/qcast/biz/displayItem/DisplayItemService.java b/src/main/java/com/interplug/qcast/biz/displayItem/DisplayItemService.java index 296b2861..7cd19a56 100644 --- a/src/main/java/com/interplug/qcast/biz/displayItem/DisplayItemService.java +++ b/src/main/java/com/interplug/qcast/biz/displayItem/DisplayItemService.java @@ -116,11 +116,18 @@ public class DisplayItemService { */ public int setBomSyncSave(List bomSyncList) throws Exception { int cnt = 0; + // 2026-05-12 같은 키(PACKAGE_ITEM_ID, ITEM_ID)에 A/D 가 함께 오는 케이스 대비, + // 외부 응답 순서와 무관하게 결정적 결과(A 가 이김)를 보장하기 위해 2단계로 처리. + // 1단계: D 먼저 전부 DELETE for (BomSyncResponse bomSyncData : bomSyncList) { if ("D".equals(bomSyncData.getStatCd())) { // Bom 아이템 삭제 처리 cnt += displayItemMapper.deleteBomSync(bomSyncData); - } else { + } + } + // 2단계: D 외 전부 MERGE (upsert) + for (BomSyncResponse bomSyncData : bomSyncList) { + if (!"D".equals(bomSyncData.getStatCd())) { // Bom 아이템 수정/등록 처리 cnt += displayItemMapper.setBomSyncSave(bomSyncData); }