feat: AciDlivyTasklet processDelivery 수정 - 0건 스킵, dlivyCdNb Java 통일, orderLogMap 누락값 추가

This commit is contained in:
Claude
2026-05-25 03:25:30 +09:00
parent 4c500550d9
commit 1322a2ffbb
3 changed files with 65 additions and 36 deletions

View File

@@ -10,37 +10,40 @@ import java.util.List;
@Repository @Repository
public interface AciDlivyMapper { public interface AciDlivyMapper {
/** ?? ?? ???? ?? ?? (gc_order_shipping.ORDR_STTUS_CD = '35') */ /** 출고 대상 주문 목록 조회 (gc_order_shipping.ORDR_STTUS_CD = '35') */
List<AciDlivyOrderVO> selectAciDlivyTargetList(); List<AciDlivyOrderVO> selectAciDlivyTargetList();
/** ?? ?? ?????? ?? ?? (gc_order_item_option) */ /** 출고 대상 주문상품 옵션 조회 (gc_order_item_option) */
List<DataMap> selectAciDlivyTargetItemList(AciDlivyOrderVO vo); List<DataMap> selectAciDlivyTargetItemList(AciDlivyOrderVO vo);
/** gc_goods_export ?? ?? */ /** gc_goods_export 존재 여부 */
int selectGoodsExportCount(AciDlivyOrderVO vo); int selectGoodsExportCount(AciDlivyOrderVO vo);
/** gc_goods_export INSERT */ /** gc_goods_export INSERT */
int insertGoodsExport(AciDlivyOrderVO vo); int insertGoodsExport(AciDlivyOrderVO vo);
/** gc_goods_export UPDATE (?? ???? ??) */ /** gc_goods_export UPDATE (기존 레코드 있음) */
int updateGoodsExport(AciDlivyOrderVO vo); 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); int selectGoodsExportItemCount(DataMap itemMap);
/** gc_goods_export_item INSERT */ /** gc_goods_export_item INSERT */
int insertGoodsExportItem(DataMap itemMap); int insertGoodsExportItem(DataMap itemMap);
/** gc_goods_export_item UPDATE (?? ???? ??) */ /** gc_goods_export_item UPDATE (기존 레코드 있음) */
int updateGoodsExportItem(DataMap itemMap); int updateGoodsExportItem(DataMap itemMap);
/** gc_order_item_option ?? UPDATE */ /** gc_order_item_option 상태 UPDATE */
int updateOrderItemOptionStatus(DataMap itemMap); int updateOrderItemOptionStatus(DataMap itemMap);
/** gc_order_shipping ?? UPDATE (?? item_option ?? ???? ?? ??) */ /** gc_order_shipping 상태 UPDATE (하위 item_option 상태 기반으로 동적 결정) */
int updateOrderShippingStatus(AciDlivyOrderVO vo); int updateOrderShippingStatus(AciDlivyOrderVO vo);
/** gc_order ?? UPDATE (?? shipping ?? ???? ?? ??) */ /** gc_order 상태 UPDATE (하위 shipping 상태 기반으로 동적 결정) */
int updateOrderStatus(AciDlivyOrderVO vo); int updateOrderStatus(AciDlivyOrderVO vo);
/** GC_GOODS_EXPORT_LOG INSERT */ /** GC_GOODS_EXPORT_LOG INSERT */

View File

@@ -230,7 +230,15 @@ public class AciDlivyTasklet implements Tasklet {
*/ */
private void processDelivery(AciDlivyOrderVO orderVO) { private void processDelivery(AciDlivyOrderVO orderVO) {
// 출고 gc_goods_export 처리 // ① 주문 상품 옵션 목록 먼저 조회 (0건이면 출고처리 전체 스킵)
List<DataMap> 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); int exportCnt = aciDlivyMapper.selectGoodsExportCount(orderVO);
if (exportCnt > 0) { if (exportCnt > 0) {
aciDlivyMapper.updateGoodsExport(orderVO); aciDlivyMapper.updateGoodsExport(orderVO);
@@ -238,14 +246,16 @@ public class AciDlivyTasklet implements Tasklet {
aciDlivyMapper.insertGoodsExport(orderVO); aciDlivyMapper.insertGoodsExport(orderVO);
} }
// 출고코드 생성 (GC_GOODS_EXPORT의 DLIVY_CD_NB 규칙 따름) // ③ dlivyCdNb 생성 (insertGoodsExport 실행 후, dlivyInnb 채번 완료 후)
String dlivyCdNb = "D" + new SimpleDateFormat("yyMMddHH").format(new Date()) + orderVO.getDlivyInnb(); String dlivyCdNb = "D" + new SimpleDateFormat("yyMMddHH").format(new Date()) + orderVO.getDlivyInnb();
orderVO.setDlivyCdNb(dlivyCdNb); orderVO.setDlivyCdNb(dlivyCdNb);
// 주문 상품 옵션 목록 조회 및 건별 처리 (gc_order_item_option) // ④ INSERT 경로: DLIVY_CD_NB 업데이트 (INSERT 시 #{dlivyCdNb}가 null이었으므로)
List<DataMap> itemList = aciDlivyMapper.selectAciDlivyTargetItemList(orderVO); if (exportCnt == 0) {
log.debug("[AciDlivyBatch] 주문 상품 옵션 수={} (ORDR_DLVY_INNB={})", itemList.size(), orderVO.getOrdrDlvyInnb()); aciDlivyMapper.updateGoodsExportDlivyCdNb(orderVO);
}
// ⑤ 주문 상품 옵션별 처리 (gc_goods_export_item, gc_order_item_option)
for (DataMap itemMap : itemList) { for (DataMap itemMap : itemList) {
Object qyObj = itemMap.get("qy"); Object qyObj = itemMap.get("qy");
if (qyObj == null) continue; if (qyObj == null) continue;
@@ -289,19 +299,21 @@ public class AciDlivyTasklet implements Tasklet {
aciDlivyMapper.insertGoodsExportLog(exportLogMap); aciDlivyMapper.insertGoodsExportLog(exportLogMap);
} }
// gc_order_shipping 상태 UPDATE (모든 item_option 처리 완료 후 일괄) // ⑥ gc_order_shipping 상태 UPDATE (모든 item_option 처리 완료 후 일괄)
aciDlivyMapper.updateOrderShippingStatus(orderVO); aciDlivyMapper.updateOrderShippingStatus(orderVO);
// gc_order 상태 UPDATE (모든 shipping 처리 완료 후 일괄) // ⑦ gc_order 상태 UPDATE (모든 shipping 처리 완료 후 일괄)
aciDlivyMapper.updateOrderStatus(orderVO); aciDlivyMapper.updateOrderStatus(orderVO);
// 주문 로그 INSERT // ⑧ 주문 로그 INSERT
DataMap orderLogMap = new DataMap(); DataMap orderLogMap = new DataMap();
orderLogMap.put("ordrInnb", orderVO.getOrdrInnb()); orderLogMap.put("ordrInnb", orderVO.getOrdrInnb());
orderLogMap.put("sopmalCd", orderVO.getSopmalCd()); orderLogMap.put("sopmalCd", orderVO.getSopmalCd());
orderLogMap.put("logSj", "출고처리(" + dlivyCdNb + ")"); orderLogMap.put("logSj", "출고처리(" + dlivyCdNb + ")");
orderLogMap.put("logDtlCn", "[ACI 배치] 배치 출고처리 완료"); orderLogMap.put("logDtlCn", "[ACI 배치] 배치 출고처리 완료");
orderLogMap.put("aditInfoCn", null);
orderLogMap.put("dlivyCdNb", dlivyCdNb); orderLogMap.put("dlivyCdNb", dlivyCdNb);
orderLogMap.put("refundCdNb", null);
orderLogMap.put("logDvCd", "01"); orderLogMap.put("logDvCd", "01");
orderLogMap.put("dvCd", "BATCH"); orderLogMap.put("dvCd", "BATCH");
orderLogMap.put("opetrNm", "ACI 배치"); orderLogMap.put("opetrNm", "ACI 배치");

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wb.domainserver.acidlivy.AciDlivyMapper"> <mapper namespace="com.wb.domainserver.acidlivy.AciDlivyMapper">
<!-- ?? ?? ???? ?? ?? (ORDR_STTUS_CD = '35' ?????) --> <!-- 출고 대상 주문 목록 조회 (ORDR_STTUS_CD = '35' 상품준비중) -->
<select id="selectAciDlivyTargetList" resultType="com.wb.domainserver.acidlivy.AciDlivyOrderVO"> <select id="selectAciDlivyTargetList" resultType="com.wb.domainserver.acidlivy.AciDlivyOrderVO">
<![CDATA[ <![CDATA[
SELECT SELECT
@@ -17,8 +17,8 @@
</select> </select>
<!-- ?? ?? ?????? ?? ?? --> <!-- 출고 대상 주문상품 옵션 조회 -->
<!-- QY: ????(35)? ?????? ??, ?? ??/????/?? ?? ?? --> <!-- QY: 반품(85)을 제외한 미출고 수량, 출고 아이템/로그/상태 처리 기준 -->
<select id="selectAciDlivyTargetItemList" <select id="selectAciDlivyTargetItemList"
parameterType="com.wb.domainserver.acidlivy.AciDlivyOrderVO" parameterType="com.wb.domainserver.acidlivy.AciDlivyOrderVO"
resultType="dataMap"> resultType="dataMap">
@@ -39,7 +39,7 @@
</select> </select>
<!-- gc_goods_export ?? ?? --> <!-- gc_goods_export 존재 여부 -->
<select id="selectGoodsExportCount" <select id="selectGoodsExportCount"
parameterType="com.wb.domainserver.acidlivy.AciDlivyOrderVO" parameterType="com.wb.domainserver.acidlivy.AciDlivyOrderVO"
resultType="int"> resultType="int">
@@ -55,7 +55,8 @@
<!-- gc_goods_export INSERT --> <!-- gc_goods_export INSERT -->
<!-- DLIVY_CD_NB: 'D' + yyMMddHH + DLIVY_INNB, HDRYCPN_CD: code22 ??, INVCNB: ACI BLNO --> <!-- DLIVY_CD_NB: Java에서 생성한 dlivyCdNb로 받음 (insertGoodsExport 후 updateGoodsExportDlivyCdNb로 SET) -->
<!-- HDRYCPN_CD: code22 고정, INVCNB: ACI BLNO -->
<insert id="insertGoodsExport" <insert id="insertGoodsExport"
parameterType="com.wb.domainserver.acidlivy.AciDlivyOrderVO"> parameterType="com.wb.domainserver.acidlivy.AciDlivyOrderVO">
@@ -84,7 +85,7 @@
#{sopmalCd}, #{sopmalCd},
#{ordrInnb}, #{ordrInnb},
#{ordrDlvyInnb}, #{ordrDlvyInnb},
CONCAT('D', DATE_FORMAT(SYSDATE(), '%y%m%d%H'), #{dlivyInnb}), #{dlivyCdNb},
#{dlivySttusCd}, #{dlivySttusCd},
SYSDATE(), SYSDATE(),
#{hdrycpnCd}, #{hdrycpnCd},
@@ -99,8 +100,21 @@
</insert> </insert>
<!-- gc_goods_export UPDATE (?? ???? ??) --> <!-- gc_goods_export DLIVY_CD_NB UPDATE -->
<!-- selectKey ? ?? DLIVY_INNB ???? dlivyInnb ? ?? --> <!-- INSERT 경로에서 dlivyCdNb 생성 후 호출하여 DLIVY_CD_NB 설정 -->
<update id="updateGoodsExportDlivyCdNb"
parameterType="com.wb.domainserver.acidlivy.AciDlivyOrderVO">
<![CDATA[
UPDATE GC_GOODS_EXPORT SET
DLIVY_CD_NB = #{dlivyCdNb},
UPDT_DT = SYSDATE()
WHERE DLIVY_INNB = #{dlivyInnb}
]]>
</update>
<!-- gc_goods_export UPDATE (기존 레코드 있음) -->
<!-- selectKey로 기존 DLIVY_INNB 조회하여 dlivyInnb 세팅 -->
<update id="updateGoodsExport" <update id="updateGoodsExport"
parameterType="com.wb.domainserver.acidlivy.AciDlivyOrderVO"> parameterType="com.wb.domainserver.acidlivy.AciDlivyOrderVO">
@@ -129,7 +143,7 @@
</update> </update>
<!-- gc_goods_export_item ?? ?? --> <!-- gc_goods_export_item 존재 여부 -->
<select id="selectGoodsExportItemCount" <select id="selectGoodsExportItemCount"
parameterType="dataMap" parameterType="dataMap"
resultType="int"> resultType="int">
@@ -179,7 +193,7 @@
</insert> </insert>
<!-- gc_goods_export_item UPDATE (?? ???? ??) --> <!-- gc_goods_export_item UPDATE (기존 레코드 있음) -->
<update id="updateGoodsExportItem" parameterType="dataMap"> <update id="updateGoodsExportItem" parameterType="dataMap">
<![CDATA[ <![CDATA[
UPDATE GC_GOODS_EXPORT_ITEM SET UPDATE GC_GOODS_EXPORT_ITEM SET
@@ -192,8 +206,8 @@
</update> </update>
<!-- gc_order_item_option ?? UPDATE --> <!-- gc_order_item_option 상태 UPDATE -->
<!-- ORDR_STTUS_CD: ????(50) ?? ????(55), STEP55 = ????, STEP45 = 0 --> <!-- ORDR_STTUS_CD: 부분출고(50) 또는 출고완료(55), STEP55 = 출고수량, STEP45 = 0 -->
<update id="updateOrderItemOptionStatus" parameterType="dataMap"> <update id="updateOrderItemOptionStatus" parameterType="dataMap">
<![CDATA[ <![CDATA[
UPDATE GC_ORDER_ITEM_OPTION SET UPDATE GC_ORDER_ITEM_OPTION SET
@@ -212,8 +226,8 @@
</update> </update>
<!-- gc_order_shipping ?? UPDATE --> <!-- gc_order_shipping 상태 UPDATE -->
<!-- ????? ?? item_option ??/?? ???? ?? ?? (?? updateBOOrdrDlvyStatusUpdt6575 ?? ??) --> <!-- 하위의 모든 item_option 상태/수량 기준으로 동적 결정 (기존 updateBOOrdrDlvyStatusUpdt6575 참고) -->
<update id="updateOrderShippingStatus" <update id="updateOrderShippingStatus"
parameterType="com.wb.domainserver.acidlivy.AciDlivyOrderVO"> parameterType="com.wb.domainserver.acidlivy.AciDlivyOrderVO">
<![CDATA[ <![CDATA[
@@ -248,8 +262,8 @@
</update> </update>
<!-- gc_order ?? UPDATE --> <!-- gc_order 상태 UPDATE -->
<!-- ????? ?? shipping ??/?? ???? ?? ?? (?? updateBOOrdrStatusUpdt6575 ?? ??) --> <!-- 하위의 모든 shipping 상태 기준으로 동적 결정 (기존 updateBOOrdrStatusUpdt6575 참고) -->
<update id="updateOrderStatus" <update id="updateOrderStatus"
parameterType="com.wb.domainserver.acidlivy.AciDlivyOrderVO"> parameterType="com.wb.domainserver.acidlivy.AciDlivyOrderVO">
<![CDATA[ <![CDATA[