From 1322a2ffbbb8f2173673e99db686567eceb165bd Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 25 May 2026 03:25:30 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20AciDlivyTasklet=20processDelivery=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20-=200=EA=B1=B4=20=EC=8A=A4=ED=82=B5,=20dli?= =?UTF-8?q?vyCdNb=20Java=20=ED=86=B5=EC=9D=BC,=20orderLogMap=20=EB=88=84?= =?UTF-8?q?=EB=9D=BD=EA=B0=92=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domainserver/acidlivy/AciDlivyMapper.java | 23 +++++---- .../acidlivy/AciDlivyTasklet.java | 28 ++++++++--- .../xml/mapper/acidlivy/AciDlivyMapper.xml | 50 ++++++++++++------- 3 files changed, 65 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/wb/domainserver/acidlivy/AciDlivyMapper.java b/src/main/java/com/wb/domainserver/acidlivy/AciDlivyMapper.java index f7fc9fc..d486f25 100644 --- a/src/main/java/com/wb/domainserver/acidlivy/AciDlivyMapper.java +++ b/src/main/java/com/wb/domainserver/acidlivy/AciDlivyMapper.java @@ -10,37 +10,40 @@ import java.util.List; @Repository public interface AciDlivyMapper { - /** ?? ?? ???? ?? ?? (gc_order_shipping.ORDR_STTUS_CD = '35') */ + /** 출고 대상 주문 목록 조회 (gc_order_shipping.ORDR_STTUS_CD = '35') */ List selectAciDlivyTargetList(); - /** ?? ?? ?????? ?? ?? (gc_order_item_option) */ + /** 출고 대상 주문상품 옵션 조회 (gc_order_item_option) */ List selectAciDlivyTargetItemList(AciDlivyOrderVO vo); - /** gc_goods_export ?? ?? */ + /** gc_goods_export 존재 여부 */ int selectGoodsExportCount(AciDlivyOrderVO vo); /** gc_goods_export INSERT */ int insertGoodsExport(AciDlivyOrderVO vo); - /** gc_goods_export UPDATE (?? ???? ??) */ + /** gc_goods_export UPDATE (기존 레코드 있음) */ int updateGoodsExport(AciDlivyOrderVO vo); - /** gc_goods_export_item ?? ?? */ + /** gc_goods_export DLIVY_CD_NB UPDATE (INSERT 경로에서 dlivyCdNb 생성 후 호출) */ + int updateGoodsExportDlivyCdNb(AciDlivyOrderVO vo); + + /** gc_goods_export_item 존재 여부 */ int selectGoodsExportItemCount(DataMap itemMap); /** gc_goods_export_item INSERT */ int insertGoodsExportItem(DataMap itemMap); - /** gc_goods_export_item UPDATE (?? ???? ??) */ + /** gc_goods_export_item UPDATE (기존 레코드 있음) */ int updateGoodsExportItem(DataMap itemMap); - /** gc_order_item_option ?? UPDATE */ + /** gc_order_item_option 상태 UPDATE */ int updateOrderItemOptionStatus(DataMap itemMap); - /** gc_order_shipping ?? UPDATE (?? item_option ?? ???? ?? ??) */ + /** gc_order_shipping 상태 UPDATE (하위 item_option 상태 기반으로 동적 결정) */ int updateOrderShippingStatus(AciDlivyOrderVO vo); - /** gc_order ?? UPDATE (?? shipping ?? ???? ?? ??) */ + /** gc_order 상태 UPDATE (하위 shipping 상태 기반으로 동적 결정) */ int updateOrderStatus(AciDlivyOrderVO vo); /** GC_GOODS_EXPORT_LOG INSERT */ @@ -48,4 +51,4 @@ public interface AciDlivyMapper { /** GC_ORDER_LOG INSERT */ int insertOrderLog(DataMap logMap); -} +} diff --git a/src/main/java/com/wb/domainserver/acidlivy/AciDlivyTasklet.java b/src/main/java/com/wb/domainserver/acidlivy/AciDlivyTasklet.java index 4eebc26..0cfbedd 100644 --- a/src/main/java/com/wb/domainserver/acidlivy/AciDlivyTasklet.java +++ b/src/main/java/com/wb/domainserver/acidlivy/AciDlivyTasklet.java @@ -230,7 +230,15 @@ public class AciDlivyTasklet implements Tasklet { */ private void processDelivery(AciDlivyOrderVO orderVO) { - // 출고 gc_goods_export 처리 + // ① 주문 상품 옵션 목록 먼저 조회 (0건이면 출고처리 전체 스킵) + List itemList = aciDlivyMapper.selectAciDlivyTargetItemList(orderVO); + if (itemList.isEmpty()) { + log.warn("[AciDlivyBatch] 주문 상품 옵션 없음 - 출고처리 스킵 (ORDR_DLVY_INNB={})", orderVO.getOrdrDlvyInnb()); + return; + } + log.debug("[AciDlivyBatch] 주문 상품 옵션 수={} (ORDR_DLVY_INNB={})", itemList.size(), orderVO.getOrdrDlvyInnb()); + + // ② gc_goods_export 처리 (selectKey로 dlivyInnb 채번) int exportCnt = aciDlivyMapper.selectGoodsExportCount(orderVO); if (exportCnt > 0) { aciDlivyMapper.updateGoodsExport(orderVO); @@ -238,14 +246,16 @@ public class AciDlivyTasklet implements Tasklet { aciDlivyMapper.insertGoodsExport(orderVO); } - // 출고코드 생성 (GC_GOODS_EXPORT의 DLIVY_CD_NB 규칙 따름) + // ③ dlivyCdNb 생성 (insertGoodsExport 실행 후, dlivyInnb 채번 완료 후) String dlivyCdNb = "D" + new SimpleDateFormat("yyMMddHH").format(new Date()) + orderVO.getDlivyInnb(); orderVO.setDlivyCdNb(dlivyCdNb); - // 주문 상품 옵션 목록 조회 및 건별 처리 (gc_order_item_option) - List itemList = aciDlivyMapper.selectAciDlivyTargetItemList(orderVO); - log.debug("[AciDlivyBatch] 주문 상품 옵션 수={} (ORDR_DLVY_INNB={})", itemList.size(), orderVO.getOrdrDlvyInnb()); + // ④ INSERT 경로: DLIVY_CD_NB 업데이트 (INSERT 시 #{dlivyCdNb}가 null이었으므로) + if (exportCnt == 0) { + aciDlivyMapper.updateGoodsExportDlivyCdNb(orderVO); + } + // ⑤ 주문 상품 옵션별 처리 (gc_goods_export_item, gc_order_item_option) for (DataMap itemMap : itemList) { Object qyObj = itemMap.get("qy"); if (qyObj == null) continue; @@ -289,19 +299,21 @@ public class AciDlivyTasklet implements Tasklet { aciDlivyMapper.insertGoodsExportLog(exportLogMap); } - // gc_order_shipping 상태 UPDATE (모든 item_option 처리 완료 후 일괄) + // ⑥ gc_order_shipping 상태 UPDATE (모든 item_option 처리 완료 후 일괄) aciDlivyMapper.updateOrderShippingStatus(orderVO); - // gc_order 상태 UPDATE (모든 shipping 처리 완료 후 일괄) + // ⑦ gc_order 상태 UPDATE (모든 shipping 처리 완료 후 일괄) aciDlivyMapper.updateOrderStatus(orderVO); - // 주문 로그 INSERT + // ⑧ 주문 로그 INSERT DataMap orderLogMap = new DataMap(); orderLogMap.put("ordrInnb", orderVO.getOrdrInnb()); orderLogMap.put("sopmalCd", orderVO.getSopmalCd()); orderLogMap.put("logSj", "출고처리(" + dlivyCdNb + ")"); orderLogMap.put("logDtlCn", "[ACI 배치] 배치 출고처리 완료"); + orderLogMap.put("aditInfoCn", null); orderLogMap.put("dlivyCdNb", dlivyCdNb); + orderLogMap.put("refundCdNb", null); orderLogMap.put("logDvCd", "01"); orderLogMap.put("dvCd", "BATCH"); orderLogMap.put("opetrNm", "ACI 배치"); diff --git a/src/main/resources/mybatis/xml/mapper/acidlivy/AciDlivyMapper.xml b/src/main/resources/mybatis/xml/mapper/acidlivy/AciDlivyMapper.xml index 8a5a638..58d342b 100644 --- a/src/main/resources/mybatis/xml/mapper/acidlivy/AciDlivyMapper.xml +++ b/src/main/resources/mybatis/xml/mapper/acidlivy/AciDlivyMapper.xml @@ -1,8 +1,8 @@ - + - + @@ -39,7 +39,7 @@ - + @@ -179,7 +193,7 @@ - + - - + + - - + + - - + + - +