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
public interface AciDlivyMapper {
/** ?? ?? ???? ?? ?? (gc_order_shipping.ORDR_STTUS_CD = '35') */
/** 출고 대상 주문 목록 조회 (gc_order_shipping.ORDR_STTUS_CD = '35') */
List<AciDlivyOrderVO> selectAciDlivyTargetList();
/** ?? ?? ?????? ?? ?? (gc_order_item_option) */
/** 출고 대상 주문상품 옵션 조회 (gc_order_item_option) */
List<DataMap> 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);
}
}

View File

@@ -230,7 +230,15 @@ public class AciDlivyTasklet implements Tasklet {
*/
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);
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<DataMap> 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 배치");

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">
<mapper namespace="com.wb.domainserver.acidlivy.AciDlivyMapper">
<!-- ?? ?? ???? ?? ?? (ORDR_STTUS_CD = '35' ?????) -->
<!-- 출고 대상 주문 목록 조회 (ORDR_STTUS_CD = '35' 상품준비중) -->
<select id="selectAciDlivyTargetList" resultType="com.wb.domainserver.acidlivy.AciDlivyOrderVO">
<![CDATA[
SELECT
@@ -17,8 +17,8 @@
</select>
<!-- ?? ?? ?????? ?? ?? -->
<!-- QY: ????(35)? ?????? ??, ?? ??/????/?? ?? ?? -->
<!-- 출고 대상 주문상품 옵션 조회 -->
<!-- QY: 반품(85)을 제외한 미출고 수량, 출고 아이템/로그/상태 처리 기준 -->
<select id="selectAciDlivyTargetItemList"
parameterType="com.wb.domainserver.acidlivy.AciDlivyOrderVO"
resultType="dataMap">
@@ -39,7 +39,7 @@
</select>
<!-- gc_goods_export ?? ?? -->
<!-- gc_goods_export 존재 여부 -->
<select id="selectGoodsExportCount"
parameterType="com.wb.domainserver.acidlivy.AciDlivyOrderVO"
resultType="int">
@@ -55,7 +55,8 @@
<!-- 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"
parameterType="com.wb.domainserver.acidlivy.AciDlivyOrderVO">
@@ -84,7 +85,7 @@
#{sopmalCd},
#{ordrInnb},
#{ordrDlvyInnb},
CONCAT('D', DATE_FORMAT(SYSDATE(), '%y%m%d%H'), #{dlivyInnb}),
#{dlivyCdNb},
#{dlivySttusCd},
SYSDATE(),
#{hdrycpnCd},
@@ -99,8 +100,21 @@
</insert>
<!-- gc_goods_export UPDATE (?? ???? ??) -->
<!-- selectKey ? ?? DLIVY_INNB ???? dlivyInnb ? ?? -->
<!-- gc_goods_export DLIVY_CD_NB UPDATE -->
<!-- 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"
parameterType="com.wb.domainserver.acidlivy.AciDlivyOrderVO">
@@ -129,7 +143,7 @@
</update>
<!-- gc_goods_export_item ?? ?? -->
<!-- gc_goods_export_item 존재 여부 -->
<select id="selectGoodsExportItemCount"
parameterType="dataMap"
resultType="int">
@@ -179,7 +193,7 @@
</insert>
<!-- gc_goods_export_item UPDATE (?? ???? ??) -->
<!-- gc_goods_export_item UPDATE (기존 레코드 있음) -->
<update id="updateGoodsExportItem" parameterType="dataMap">
<![CDATA[
UPDATE GC_GOODS_EXPORT_ITEM SET
@@ -192,8 +206,8 @@
</update>
<!-- gc_order_item_option ?? UPDATE -->
<!-- ORDR_STTUS_CD: ????(50) ?? ????(55), STEP55 = ????, STEP45 = 0 -->
<!-- gc_order_item_option 상태 UPDATE -->
<!-- ORDR_STTUS_CD: 부분출고(50) 또는 출고완료(55), STEP55 = 출고수량, STEP45 = 0 -->
<update id="updateOrderItemOptionStatus" parameterType="dataMap">
<![CDATA[
UPDATE GC_ORDER_ITEM_OPTION SET
@@ -212,8 +226,8 @@
</update>
<!-- gc_order_shipping ?? UPDATE -->
<!-- ????? ?? item_option ??/?? ???? ?? ?? (?? updateBOOrdrDlvyStatusUpdt6575 ?? ??) -->
<!-- gc_order_shipping 상태 UPDATE -->
<!-- 하위의 모든 item_option 상태/수량 기준으로 동적 결정 (기존 updateBOOrdrDlvyStatusUpdt6575 참고) -->
<update id="updateOrderShippingStatus"
parameterType="com.wb.domainserver.acidlivy.AciDlivyOrderVO">
<![CDATA[
@@ -248,8 +262,8 @@
</update>
<!-- gc_order ?? UPDATE -->
<!-- ????? ?? shipping ??/?? ???? ?? ?? (?? updateBOOrdrStatusUpdt6575 ?? ??) -->
<!-- gc_order 상태 UPDATE -->
<!-- 하위의 모든 shipping 상태 기준으로 동적 결정 (기존 updateBOOrdrStatusUpdt6575 참고) -->
<update id="updateOrderStatus"
parameterType="com.wb.domainserver.acidlivy.AciDlivyOrderVO">
<![CDATA[
@@ -353,4 +367,4 @@
]]>
</insert>
</mapper>
</mapper>