diff --git a/src/main/java/com/wb/domainserver/acidlivy/tasklet/AciPodTasklet.java b/src/main/java/com/wb/domainserver/acidlivy/tasklet/AciPodTasklet.java index 712c6f7..8a4f007 100644 --- a/src/main/java/com/wb/domainserver/acidlivy/tasklet/AciPodTasklet.java +++ b/src/main/java/com/wb/domainserver/acidlivy/tasklet/AciPodTasklet.java @@ -99,19 +99,20 @@ public class AciPodTasklet implements Tasklet { boolean dlvyCompt = podInfoList.stream() .anyMatch(podInfo -> !isBlank(podInfo, "dateDelivery")); /* - * ACI POD API의 DATE_LOCALWHIN은 "현지 창고 입고 시간"이지만, 실제 응답에는 - * 아직 입고되지 않은 건도 입고 예정 시간이 미래 시각으로 내려올 수 있다. + * 배송중(65) 판단은 DATE_LOCALWHIN이 아니라 DATE_LOCALDEPARTURE 기준으로 처리한다. * - * 기존처럼 DATE_LOCALWHIN 값 존재 여부만으로 배송중(65)을 판단하면, - * 실제 창고 입고 전 주문이 배송중으로 전환되고 주문 로그까지 생성된다. - * 2026-07-10 운영 데이터 원복 건(미래 DATE_LOCALWHIN 응답)에서 이 문제가 확인되었다. + * ACI POD API의 DATE_LOCALWHIN은 명세상 "현지 창고 입고 시간"이지만, + * 운영 확인 결과 실제 미입고/입고예정 건에도 배치 조회 시점과 거의 같은 시간이 채워질 수 있었다. + * 이 값만 보거나 현재시간과 비교하면 실제 현지 출발 전 주문이 배송중으로 전환되고, + * 주문/배송/옵션 상태와 주문 로그까지 잘못 생성된다. * - * 따라서 배송완료(DATE_DELIVERY)는 기존 기준을 유지하되, 배송중 판단은 - * DATE_LOCALWHIN 값이 있고 그 시간이 현재 시스템 시간보다 과거/현재인 경우에만 허용한다. - * DATE_LOCALWHIN이 비어 있거나 미래 시간이면 아직 미입고/입고예정으로 보고 상태 변경을 skip한다. + * 따라서 DATE_LOCALWHIN은 상태 전환 트리거로 사용하지 않는다. + * 배송완료는 기존처럼 DATE_DELIVERY 값 존재 여부를 최우선으로 판단하고, + * 배송중은 현지 출발 시간인 DATE_LOCALDEPARTURE가 현재 시스템 시간보다 과거/현재인 경우에만 허용한다. + * DATE_LOCALDEPARTURE가 비어 있거나 미래 시간이면 아직 현지 출발 전으로 보고 상태 변경을 skip한다. */ boolean dlvyInPrg = podInfoList.stream() - .anyMatch(this::isLocalWarehouseIn); + .anyMatch(this::isLocalDeparture); // 건별 배송처리 BODlivyUpdtVO boDlivyUpdtVO = new BODlivyUpdtVO(); @@ -496,19 +497,19 @@ public class AciPodTasklet implements Tasklet { } /** - * DATE_LOCALWHIN 값이 현재 시스템 시간 기준으로 실제 입고 처리 가능한 시간인지 확인한다. + * DATE_LOCALDEPARTURE 값이 현재 시스템 시간 기준으로 배송중 처리 가능한 현지 출발 시간인지 확인한다. */ - private boolean isLocalWarehouseIn(DataMap podInfo) { - if (isBlank(podInfo, "dateLocalwhin")) { + private boolean isLocalDeparture(DataMap podInfo) { + if (isBlank(podInfo, "dateLocaldeparture")) { return false; } - String dateLocalwhin = podInfo.get("dateLocalwhin").toString().trim(); + String dateLocaldeparture = podInfo.get("dateLocaldeparture").toString().trim(); try { - LocalDateTime localWhInDateTime = LocalDateTime.parse(dateLocalwhin, ACI_DATE_TIME_FORMATTER); - return !localWhInDateTime.isAfter(LocalDateTime.now()); + LocalDateTime localDepartureDateTime = LocalDateTime.parse(dateLocaldeparture, ACI_DATE_TIME_FORMATTER); + return !localDepartureDateTime.isAfter(LocalDateTime.now()); } catch (DateTimeParseException e) { - log.info("[AciPodBatch] 스킵 - DATE_LOCALWHIN 파싱 실패 - DATE_LOCALWHIN={}", dateLocalwhin); + log.info("[AciPodBatch] 스킵 - DATE_LOCALDEPARTURE 파싱 실패 - DATE_LOCALDEPARTURE={}", dateLocaldeparture); return false; } }