fix: ACI 출고 배치 출고고유번호 채번 오류 수정

This commit is contained in:
이주일
2026-07-09 16:57:04 +09:00
parent 303f28b7ed
commit 2a3cd31539
4 changed files with 43 additions and 20 deletions

View File

@@ -240,22 +240,28 @@ public class AciDlivyTasklet implements Tasklet {
} }
log.debug("[AciDlivyBatch] 주문 상품 옵션 수={} (ORDR_DLVY_INNB={})", itemList.size(), orderVO.getOrdrDlvyInnb()); log.debug("[AciDlivyBatch] 주문 상품 옵션 수={} (ORDR_DLVY_INNB={})", itemList.size(), orderVO.getOrdrDlvyInnb());
// ② DLIVY_INNB = ORDR_DLVY_INNB (gc_order_shipping.ORDR_DLVY_INNB → gc_goods_export.DLIVY_INNB) // ② gc_goods_export INSERT/UPDATE
orderVO.setDlivyInnb(orderVO.getOrdrDlvyInnb());
// ③ dlivyCdNb 생성 (DLIVY_INNB 확정 후, INSERT 전)
String dlivyCdNb = "D" + new SimpleDateFormat("yyMMddHH").format(new Date()) + orderVO.getDlivyInnb();
orderVO.setDlivyCdNb(dlivyCdNb);
// ④ gc_goods_export INSERT/UPDATE (dlivyCdNb 직접 포함)
int exportCnt = aciDlivyMapper.selectGoodsExportCount(orderVO); int exportCnt = aciDlivyMapper.selectGoodsExportCount(orderVO);
boolean newExport = exportCnt == 0;
if (exportCnt > 0) { if (exportCnt > 0) {
String dlivyInnb = aciDlivyMapper.selectGoodsExportDlivyInnb(orderVO);
if (dlivyInnb == null || dlivyInnb.isBlank()) {
throw new IllegalStateException("기존 출고번호 조회 실패 - ORDR_INNB=" + orderVO.getOrdrInnb()
+ ", ORDR_DLVY_INNB=" + orderVO.getOrdrDlvyInnb());
}
orderVO.setDlivyInnb(dlivyInnb);
aciDlivyMapper.updateGoodsExport(orderVO); aciDlivyMapper.updateGoodsExport(orderVO);
} else { } else {
aciDlivyMapper.insertGoodsExport(orderVO); aciDlivyMapper.insertGoodsExport(orderVO);
} }
// ⑤ 주문 상품 옵션별 처리 (gc_goods_export_item, gc_order_item_option) String dlivyCdNb = "D" + new SimpleDateFormat("yyMMddHH").format(new Date()) + orderVO.getDlivyInnb();
orderVO.setDlivyCdNb(dlivyCdNb);
if (newExport) {
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;

View File

@@ -20,6 +20,6 @@ public class AciDlivyOrderVO {
private String blno; // ACI 운송장번호 (BLNO) private String blno; // ACI 운송장번호 (BLNO)
private String hdrycpnCd; // 택배사코드 (고정값: code22) private String hdrycpnCd; // 택배사코드 (고정값: code22)
private String dlivySttusCd; // 출고상태코드 (고정값: 55) private String dlivySttusCd; // 출고상태코드 (고정값: 55)
private String dlivyInnb; // 출고고유번호 (gc_goods_export.DLIVY_INNB = ordrDlvyInnb) private String dlivyInnb; // 출고고유번호 (gc_goods_export.DLIVY_INNB)
private String dlivyCdNb; // 출고코드번호 ('D'+yyMMddHH+dlivyInnb 형식, INSERT 전 Java에서 생성) private String dlivyCdNb; // 출고코드번호 ('D'+yyMMddHH+dlivyInnb 형식)
} }

View File

@@ -21,13 +21,16 @@ public interface AciDlivyMapper {
/** gc_goods_export 존재 여부 */ /** gc_goods_export 존재 여부 */
int selectGoodsExportCount(AciDlivyOrderVO vo); int selectGoodsExportCount(AciDlivyOrderVO vo);
/** 기존 gc_goods_export 출고고유번호 조회 */
String selectGoodsExportDlivyInnb(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 DLIVY_CD_NB UPDATE (미사용 - dlivyCdNb는 INSERT 전 Java에서 생성) */ /** gc_goods_export DLIVY_CD_NB UPDATE (신규 출고 생성키 수신 후 호출) */
int updateGoodsExportDlivyCdNb(AciDlivyOrderVO vo); int updateGoodsExportDlivyCdNb(AciDlivyOrderVO vo);
/** gc_goods_export_item 존재 여부 */ /** gc_goods_export_item 존재 여부 */

View File

@@ -52,22 +52,38 @@
AND HDRYCPN_CD = #{hdrycpnCd} AND HDRYCPN_CD = #{hdrycpnCd}
]]> ]]>
</select> </select>
<!-- 기존 gc_goods_export 출고고유번호 조회 -->
<select id="selectGoodsExportDlivyInnb"
parameterType="com.wb.domainserver.acidlivy.vo.AciDlivyOrderVO"
resultType="java.lang.String">
<![CDATA[
SELECT DLIVY_INNB
FROM GC_GOODS_EXPORT
WHERE SOPMAL_CD = #{sopmalCd}
AND ORDR_INNB = #{ordrInnb}
AND ORDR_DLVY_INNB = #{ordrDlvyInnb}
AND HDRYCPN_CD = #{hdrycpnCd}
LIMIT 1
]]>
</select>
<!-- gc_goods_export INSERT --> <!-- gc_goods_export INSERT -->
<!-- DLIVY_INNB: gc_order_shipping.ORDR_DLVY_INNB 값 사용 (Java에서 dlivyInnb = ordrDlvyInnb 세팅 후 전달) --> <!-- DLIVY_INNB: DB AUTO_INCREMENT 생성키 사용 -->
<!-- DLIVY_CD_NB: Java에서 생성한 dlivyCdNb 직접 포함 (INSERT 전 생성) --> <!-- DLIVY_CD_NB: 생성키 수신 후 updateGoodsExportDlivyCdNb에서 설정 -->
<!-- HDRYCPN_CD: code22 고정, INVCNB: ACI BLNO --> <!-- HDRYCPN_CD: code22 고정, INVCNB: ACI BLNO -->
<insert id="insertGoodsExport" <insert id="insertGoodsExport"
parameterType="com.wb.domainserver.acidlivy.vo.AciDlivyOrderVO"> parameterType="com.wb.domainserver.acidlivy.vo.AciDlivyOrderVO"
useGeneratedKeys="true"
keyProperty="dlivyInnb"
keyColumn="DLIVY_INNB">
<![CDATA[ <![CDATA[
INSERT INTO GC_GOODS_EXPORT ( INSERT INTO GC_GOODS_EXPORT (
DLIVY_INNB,
SOPMAL_CD, SOPMAL_CD,
ORDR_INNB, ORDR_INNB,
ORDR_DLVY_INNB, ORDR_DLVY_INNB,
DLIVY_CD_NB,
DLIVY_STTUS_CD, DLIVY_STTUS_CD,
STTUS_UPDT_DT, STTUS_UPDT_DT,
HDRYCPN_CD, HDRYCPN_CD,
@@ -78,11 +94,9 @@
REGIST_DT, REGIST_DT,
UPDT_DT UPDT_DT
) VALUES ( ) VALUES (
#{dlivyInnb},
#{sopmalCd}, #{sopmalCd},
#{ordrInnb}, #{ordrInnb},
#{ordrDlvyInnb}, #{ordrDlvyInnb},
#{dlivyCdNb},
#{dlivySttusCd}, #{dlivySttusCd},
SYSDATE(), SYSDATE(),
#{hdrycpnCd}, #{hdrycpnCd},
@@ -106,12 +120,12 @@
DLIVY_CD_NB = #{dlivyCdNb}, DLIVY_CD_NB = #{dlivyCdNb},
UPDT_DT = SYSDATE() UPDT_DT = SYSDATE()
WHERE DLIVY_INNB = #{dlivyInnb} WHERE DLIVY_INNB = #{dlivyInnb}
AND SOPMAL_CD = #{sopmalCd}
]]> ]]>
</update> </update>
<!-- gc_goods_export UPDATE (기존 레코드 있음) --> <!-- gc_goods_export UPDATE (기존 레코드 있음) -->
<!-- gc_goods_export UPDATE (기존 레코드 있음, dlivyInnb = ordrDlvyInnb Java 세팅) -->
<update id="updateGoodsExport" <update id="updateGoodsExport"
parameterType="com.wb.domainserver.acidlivy.vo.AciDlivyOrderVO"> parameterType="com.wb.domainserver.acidlivy.vo.AciDlivyOrderVO">