From c9f2843a10e5616b3ed69a859d4a94d9c196d5b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=A3=BC=EC=9D=BC?= Date: Sun, 24 May 2026 21:17:56 +0900 Subject: [PATCH] =?UTF-8?q?[TASK=5FBATCH=5FACIDLIVY]=20ACI=20=EB=B0=B0?= =?UTF-8?q?=EC=86=A1=EC=9E=90=EB=A3=8C=20=EC=A1=B0=ED=9A=8C=20=EB=B0=8F=20?= =?UTF-8?q?=EC=B6=9C=EA=B3=A0=EC=B2=98=EB=A6=AC=20=EB=B0=B0=EC=B9=98=20?= =?UTF-8?q?=EC=8B=A0=EA=B7=9C=20=EC=83=9D=EC=84=B1=20-=20AciDlivyJobConfig?= =?UTF-8?q?/Tasklet/Mapper/VO=20=EC=83=9D=EC=84=B1,=20application-dev.yaml?= =?UTF-8?q?=20aci.dlivy.api-url=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shell/aciDlivyJob_run.sh | 34 ++ .../acidlivy/AciDlivyJobConfig.java | 35 ++ .../domainserver/acidlivy/AciDlivyMapper.java | 51 +++ .../acidlivy/AciDlivyOrderVO.java | 26 ++ .../acidlivy/AciDlivyTasklet.java | 263 +++++++++++++ .../wb/domainserver/acidlivy/AciDlivyVO.java | 14 + src/main/resources/application-dev.yaml | 5 +- .../xml/mapper/acidlivy/AciDlivyMapper.xml | 356 ++++++++++++++++++ 8 files changed, 783 insertions(+), 1 deletion(-) create mode 100755 shell/aciDlivyJob_run.sh create mode 100644 src/main/java/com/wb/domainserver/acidlivy/AciDlivyJobConfig.java create mode 100644 src/main/java/com/wb/domainserver/acidlivy/AciDlivyMapper.java create mode 100644 src/main/java/com/wb/domainserver/acidlivy/AciDlivyOrderVO.java create mode 100644 src/main/java/com/wb/domainserver/acidlivy/AciDlivyTasklet.java create mode 100644 src/main/java/com/wb/domainserver/acidlivy/AciDlivyVO.java create mode 100644 src/main/resources/mybatis/xml/mapper/acidlivy/AciDlivyMapper.xml diff --git a/shell/aciDlivyJob_run.sh b/shell/aciDlivyJob_run.sh new file mode 100755 index 0000000..de6d7d1 --- /dev/null +++ b/shell/aciDlivyJob_run.sh @@ -0,0 +1,34 @@ +#!/bin/sh + +JOB_NAME="aciDlivyJob" +HOST="10.2.1.76" +PORT="18211" + +LOG_DIR="/home/batch_shell/logs" +LOG_FILE="${LOG_DIR}/${JOB_NAME}_$(date +%Y%m%d).log" + +mkdir -p ${LOG_DIR} + +TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') +echo "[${TIMESTAMP}] ===== ${JOB_NAME} 실행 시작 =====" >> ${LOG_FILE} + +HTTP_CODE=$(curl -s -o /tmp/${JOB_NAME}_resp.tmp -w "%{http_code}" \ + -X POST "http://${HOST}:${PORT}/gcone_batch/batch/run/${JOB_NAME}" \ + -H "Content-Type: application/json") + +BODY=$(cat /tmp/${JOB_NAME}_resp.tmp 2>/dev/null) +rm -f /tmp/${JOB_NAME}_resp.tmp + +TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') +echo "[${TIMESTAMP}] HTTP Status: ${HTTP_CODE}" >> ${LOG_FILE} +echo "[${TIMESTAMP}] Response : ${BODY}" >> ${LOG_FILE} + +if [ "${HTTP_CODE}" = "200" ]; then + echo "[${TIMESTAMP}] ${JOB_NAME} 실행 성공" >> ${LOG_FILE} + echo "Batch job ${JOB_NAME} executed successfully." +else + echo "[${TIMESTAMP}] ${JOB_NAME} 실행 실패 (HTTP ${HTTP_CODE})" >> ${LOG_FILE} + echo "Failed to execute batch job ${JOB_NAME}. HTTP Status: ${HTTP_CODE}" +fi + +echo "[${TIMESTAMP}] ===== ${JOB_NAME} 실행 완료 =====" >> ${LOG_FILE} diff --git a/src/main/java/com/wb/domainserver/acidlivy/AciDlivyJobConfig.java b/src/main/java/com/wb/domainserver/acidlivy/AciDlivyJobConfig.java new file mode 100644 index 0000000..6366d7c --- /dev/null +++ b/src/main/java/com/wb/domainserver/acidlivy/AciDlivyJobConfig.java @@ -0,0 +1,35 @@ +package com.wb.domainserver.acidlivy; + +import org.springframework.batch.core.Job; +import org.springframework.batch.core.Step; +import org.springframework.batch.core.job.builder.JobBuilder; +import org.springframework.batch.core.repository.JobRepository; +import org.springframework.batch.core.step.builder.StepBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.PlatformTransactionManager; +import lombok.RequiredArgsConstructor; + +// ACI ???? ?? ? ???? ?? Job/Step ?? +@Configuration +@RequiredArgsConstructor +public class AciDlivyJobConfig { + + private final JobRepository jobRepository; + private final PlatformTransactionManager transactionManager; + private final AciDlivyTasklet aciDlivyTasklet; + + @Bean + public Job aciDlivyJob() { + return new JobBuilder("aciDlivyJob", jobRepository) + .start(aciDlivyStep()) + .build(); + } + + @Bean + public Step aciDlivyStep() { + return new StepBuilder("aciDlivyStep", jobRepository) + .tasklet(aciDlivyTasklet, transactionManager) + .build(); + } +} diff --git a/src/main/java/com/wb/domainserver/acidlivy/AciDlivyMapper.java b/src/main/java/com/wb/domainserver/acidlivy/AciDlivyMapper.java new file mode 100644 index 0000000..0f37b21 --- /dev/null +++ b/src/main/java/com/wb/domainserver/acidlivy/AciDlivyMapper.java @@ -0,0 +1,51 @@ +package com.wb.domainserver.acidlivy; + +import com.wb.domainserver.util.dataaccess.DataMap; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Mapper +@Repository +public interface AciDlivyMapper { + + /** ?? ?? ???? ?? ?? (gc_order_shipping.ORDR_STTUS_CD = '35') */ + List selectAciDlivyTargetList(); + + /** ?? ?? ?????? ?? ?? (gc_order_item_option) */ + List selectAciDlivyTargetItemList(AciDlivyOrderVO vo); + + /** gc_goods_export ?? ?? */ + int selectGoodsExportCount(AciDlivyOrderVO vo); + + /** gc_goods_export INSERT */ + int insertGoodsExport(AciDlivyOrderVO vo); + + /** gc_goods_export UPDATE (?? ???? ??) */ + int updateGoodsExport(AciDlivyOrderVO vo); + + /** gc_goods_export_item ?? ?? */ + int selectGoodsExportItemCount(DataMap itemMap); + + /** gc_goods_export_item INSERT */ + int insertGoodsExportItem(DataMap itemMap); + + /** gc_goods_export_item UPDATE (?? ???? ??) */ + int updateGoodsExportItem(DataMap itemMap); + + /** gc_order_item_option ?? UPDATE */ + int updateOrderItemOptionStatus(DataMap itemMap); + + /** gc_order_shipping ?? UPDATE (?? item_option ?? ???? ?? ??) */ + int updateOrderShippingStatus(AciDlivyOrderVO vo); + + /** gc_order ?? UPDATE (?? shipping ?? ???? ?? ??) */ + int updateOrderStatus(AciDlivyOrderVO vo); + + /** GC_GOODS_EXPORT_LOG INSERT */ + int insertGoodsExportLog(DataMap logMap); + + /** GC_ORDER_LOG INSERT */ + int insertOrderLog(DataMap logMap); +} diff --git a/src/main/java/com/wb/domainserver/acidlivy/AciDlivyOrderVO.java b/src/main/java/com/wb/domainserver/acidlivy/AciDlivyOrderVO.java new file mode 100644 index 0000000..d40160e --- /dev/null +++ b/src/main/java/com/wb/domainserver/acidlivy/AciDlivyOrderVO.java @@ -0,0 +1,26 @@ +package com.wb.domainserver.acidlivy; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +// DB ?? ?? ?? ???? ?? + ??? ?? +@Getter +@Setter +@ToString +public class AciDlivyOrderVO { + + // DB ?? ?? (gc_order_shipping) + private String ordrDlvyInnb; // ???????? (ACI OverseaSellerNo ???) + private String ordrInnb; // ???? (API orderNumber ????) + private String sopmalCd; // ????? + + // ACI API ?? ? ?? + private String blno; // ACI ????? (BLNO) + + // ???? ? ?? + private String hdrycpnCd; // ????? (???: code22) + private String dlivySttusCd; // ?????? (???: 55) + private String dlivyInnb; // ?????? (insertGoodsExport ? selectKey? ??) + private String dlivyCdNb; // ?????? (dlivyInnb ?? ? Java?? ??) +} diff --git a/src/main/java/com/wb/domainserver/acidlivy/AciDlivyTasklet.java b/src/main/java/com/wb/domainserver/acidlivy/AciDlivyTasklet.java new file mode 100644 index 0000000..98b3fcc --- /dev/null +++ b/src/main/java/com/wb/domainserver/acidlivy/AciDlivyTasklet.java @@ -0,0 +1,263 @@ +package com.wb.domainserver.acidlivy; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.wb.domainserver.util.dataaccess.DataMap; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.batch.core.StepContribution; +import org.springframework.batch.core.scope.context.ChunkContext; +import org.springframework.batch.core.step.tasklet.Tasklet; +import org.springframework.batch.repeat.RepeatStatus; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.*; +import org.springframework.stereotype.Component; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.TransactionDefinition; +import org.springframework.transaction.support.TransactionTemplate; +import org.springframework.web.client.RestTemplate; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; + +// ACI ???? ?? ? ???? ?? Tasklet +// ????: gc_order_shipping(ORDR_STTUS_CD=35) ?? ? ACI API ?? ? BLNO ?? ? ???? +@Slf4j +@Component +@RequiredArgsConstructor +public class AciDlivyTasklet implements Tasklet { + + private final AciDlivyMapper aciDlivyMapper; + private final PlatformTransactionManager transactionManager; + + @Value("${aci.dlivy.api-url}") + private String aciDlivyApiUrl; + + @Value("${acikey.userid}") + private String userId; + + @Value("${acikey.apikey}") + private String apiKey; + + private static final String HDRYCPN_CD = "code22"; // ACI ????? ?? + private static final String DLIVY_STTUS_CD = "55"; // ???? ?? + + @Override + public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) { + log.info("[AciDlivyBatch] ?? ??"); + + // ? ?? ?? ?? (ORDR_STTUS_CD = '35') + List targetList = aciDlivyMapper.selectAciDlivyTargetList(); + log.info("[AciDlivyBatch] ?? ?? ??: {}", targetList.size()); + + if (targetList.isEmpty()) { + log.info("[AciDlivyBatch] ??? ?? ??? ????."); + return RepeatStatus.FINISHED; + } + + int successCnt = 0; + int failCnt = 0; + int skipCnt = 0; + + // ???? ?? ???? (REQUIRES_NEW) ? ? ? ??? ?? ?? ?? ??? + TransactionTemplate txTemplate = new TransactionTemplate(transactionManager); + txTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); + + for (AciDlivyOrderVO orderVO : targetList) { + try { + // ? ACI ???? API ?? ? BLNO ?? + String blno = callAciDlivyApi(orderVO); + + if (blno == null) { + log.info("[AciDlivyBatch] ?? - ORDR_DLVY_INNB={}, ORDR_INNB={} (BLNO ?? ?? ?? ??)", + orderVO.getOrdrDlvyInnb(), orderVO.getOrdrInnb()); + skipCnt++; + } else { + orderVO.setBlno(blno); + orderVO.setHdrycpnCd(HDRYCPN_CD); + orderVO.setDlivySttusCd(DLIVY_STTUS_CD); + + // ? ???? (?? ????) + txTemplate.execute(status -> { + processDelivery(orderVO); + return null; + }); + + successCnt++; + log.info("[AciDlivyBatch] ???? ?? - ORDR_DLVY_INNB={}, BLNO={}", + orderVO.getOrdrDlvyInnb(), blno); + } + + } catch (Exception e) { + log.error("[AciDlivyBatch] ???? ?? - ORDR_DLVY_INNB={}, ??={}", + orderVO.getOrdrDlvyInnb(), e.getMessage(), e); + failCnt++; + } + + // ? API ?? ?? ?? (?? 10? ? 1? ??) + try { + Thread.sleep(1000); + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + break; + } + } + + log.info("[AciDlivyBatch] ?? ?? - ??: {}, ??: {}, ??: {}", successCnt, failCnt, skipCnt); + return RepeatStatus.FINISHED; + } + + /** + * ACI ???? API ?? + * Content-Type? text/html? ?? ??? JSON ? String ?? ? ObjectMapper ?? + * @return BLNO(?????), ??? null + */ + private String callAciDlivyApi(AciDlivyOrderVO orderVO) { + try { + HttpHeaders headers = new HttpHeaders(); + headers.set("UserID", userId); + headers.set("ACIKey", apiKey); + + String url = aciDlivyApiUrl + "?searchType=1&orderNumber=" + orderVO.getOrdrInnb(); + HttpEntity entity = new HttpEntity<>(headers); + + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class); + + log.debug("[AciDlivyBatch] API ?? ?? (ORDR_INNB={}): {}", orderVO.getOrdrInnb(), response.getBody()); + + ObjectMapper objectMapper = new ObjectMapper(); + Map body = objectMapper.readValue(response.getBody(), Map.class); + + String status = (String) body.get("Status"); + log.debug("[AciDlivyBatch] API Status={} (ORDR_INNB={})", status, orderVO.getOrdrInnb()); + + // ??/????? ?? ?? (?? Status?? ??? ?? ? ???? ?? ?? ??) + if (!"A10".equals(status)) { + log.info("[AciDlivyBatch] API ??? ?? - ORDR_INNB={}, Status={}", orderVO.getOrdrInnb(), status); + return null; + } + + // Data ?? (?? Map ?? List ?? ??) + Object dataObj = body.get("Data"); + if (dataObj == null) { + return null; + } + + List> dataList; + if (dataObj instanceof List) { + dataList = (List>) dataObj; + } else if (dataObj instanceof Map) { + dataList = List.of((Map) dataObj); + } else { + return null; + } + + // OverseaSellerNo == ORDR_DLVY_INNB ?? ? BLNO ?? + for (Map item : dataList) { + Object sellerNo = item.get("OverseaSellerNo"); + if (sellerNo != null && orderVO.getOrdrDlvyInnb().equals(String.valueOf(sellerNo).trim())) { + Object blno = item.get("BLNO"); + if (blno != null && !String.valueOf(blno).isBlank()) { + return String.valueOf(blno).trim(); + } + } + } + + log.info("[AciDlivyBatch] OverseaSellerNo ?? ?? - ORDR_DLVY_INNB={}", orderVO.getOrdrDlvyInnb()); + return null; + + } catch (Exception e) { + log.error("[AciDlivyBatch] API ?? ?? - ORDR_INNB={}, ??={}", orderVO.getOrdrInnb(), e.getMessage(), e); + return null; + } + } + + /** + * ???? (??: gc_goods_export ? gc_goods_export_item ? gc_order_item_option + * ? gc_order_shipping ? gc_order ? ???? ? ????) + * gc_order_shipping/gc_order ????? ?? ??? ?? ???? ?? ?? + */ + private void processDelivery(AciDlivyOrderVO orderVO) { + + // ? gc_goods_export ?? + int exportCnt = aciDlivyMapper.selectGoodsExportCount(orderVO); + if (exportCnt > 0) { + aciDlivyMapper.updateGoodsExport(orderVO); // selectKey? dlivyInnb ??? + } else { + aciDlivyMapper.insertGoodsExport(orderVO); // selectKey? dlivyInnb ??? + } + + // dlivyCdNb ?? (GC_GOODS_EXPORT ? DLIVY_CD_NB ??? ?? ??) + 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()); + + for (DataMap itemMap : itemList) { + Object qyObj = itemMap.get("qy"); + if (qyObj == null) continue; + int qy; + try { + qy = Integer.parseInt(String.valueOf(qyObj)); + } catch (NumberFormatException e) { + continue; + } + if (qy <= 0) continue; + + itemMap.put("sopmalCd", orderVO.getSopmalCd()); + itemMap.put("ordrDlvyInnb", orderVO.getOrdrDlvyInnb()); + itemMap.put("dlivyInnb", orderVO.getDlivyInnb()); + itemMap.put("ordrInnb", orderVO.getOrdrInnb()); + itemMap.put("hdrycpnCd", HDRYCPN_CD); + itemMap.put("invcnb", orderVO.getBlno()); + itemMap.put("dlivySttusCd", DLIVY_STTUS_CD); + + // ? gc_goods_export_item ?? + int exportItemCnt = aciDlivyMapper.selectGoodsExportItemCount(itemMap); + if (exportItemCnt > 0) { + aciDlivyMapper.updateGoodsExportItem(itemMap); + } else { + aciDlivyMapper.insertGoodsExportItem(itemMap); + } + + // ? gc_order_item_option ?? UPDATE + aciDlivyMapper.updateOrderItemOptionStatus(itemMap); + + // ? ?? ?? INSERT (???) + DataMap exportLogMap = new DataMap(); + exportLogMap.put("ordrInnb", orderVO.getOrdrInnb()); + exportLogMap.put("ordrDlvyInnb", orderVO.getOrdrDlvyInnb()); + exportLogMap.put("sopmalCd", orderVO.getSopmalCd()); + exportLogMap.put("dlivyInnb", orderVO.getDlivyInnb()); + exportLogMap.put("dlivyGoodsCdNb", itemMap.get("ordrGoodsOptnInnb")); + exportLogMap.put("reqstProcsSttusCd", DLIVY_STTUS_CD); + exportLogMap.put("mssageCn", "[ACI ??] ORDR_INNB:" + orderVO.getOrdrInnb() + " ????"); + exportLogMap.put("regusr", 0); + aciDlivyMapper.insertGoodsExportLog(exportLogMap); + } + + // ? gc_order_shipping ?? UPDATE (?? item_option ?? ???? ?? ??) + aciDlivyMapper.updateOrderShippingStatus(orderVO); + + // ? gc_order ?? UPDATE (?? shipping ?? ???? ?? ??) + aciDlivyMapper.updateOrderStatus(orderVO); + + // ? ?? ?? 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("dlivyCdNb", dlivyCdNb); + orderLogMap.put("logDvCd", "01"); + orderLogMap.put("dvCd", "BATCH"); + orderLogMap.put("opetrNm", "ACI ??"); + orderLogMap.put("qy", 0); + orderLogMap.put("amt", 0); + aciDlivyMapper.insertOrderLog(orderLogMap); + } +} diff --git a/src/main/java/com/wb/domainserver/acidlivy/AciDlivyVO.java b/src/main/java/com/wb/domainserver/acidlivy/AciDlivyVO.java new file mode 100644 index 0000000..6476e7d --- /dev/null +++ b/src/main/java/com/wb/domainserver/acidlivy/AciDlivyVO.java @@ -0,0 +1,14 @@ +package com.wb.domainserver.acidlivy; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +// ACI API ???? ??? Data ?? (BLNO, OverseaSellerNo) +@Getter +@Setter +@ToString +public class AciDlivyVO { + private String blno; // ACI ????? + private String overseaSellerNo; // ????? ???? (= ORDR_DLVY_INNB) +} diff --git a/src/main/resources/application-dev.yaml b/src/main/resources/application-dev.yaml index a1c12ba..9780f90 100644 --- a/src/main/resources/application-dev.yaml +++ b/src/main/resources/application-dev.yaml @@ -42,4 +42,7 @@ mail: acikey: url: https://acieshop.com/api/kr/token/ userid: UNIHAN - apikey: DC94F29AFD5399F54AAE7FAA46045B65 \ No newline at end of file + apikey: DC94F29AFD5399F54AAE7FAA46045B65 +aci: + dlivy: + api-url: https://acieshop.com/api/kr/delivery/v1.5/detail/index.php diff --git a/src/main/resources/mybatis/xml/mapper/acidlivy/AciDlivyMapper.xml b/src/main/resources/mybatis/xml/mapper/acidlivy/AciDlivyMapper.xml new file mode 100644 index 0000000..8a5a638 --- /dev/null +++ b/src/main/resources/mybatis/xml/mapper/acidlivy/AciDlivyMapper.xml @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + SELECT IFNULL(MAX(DLIVY_INNB), 0) + 1 FROM GC_GOODS_EXPORT + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECT IFNULL(MAX(DLIVY_GOODS_INNB), 0) + 1 FROM GC_GOODS_EXPORT_ITEM + + + + + + + + + + + + + + + + #{qy} THEN '50' + WHEN (ORDR_QY - STEP85) = #{qy} THEN '55' + ELSE ORDR_STTUS_CD + END, + STEP55 = #{qy}, + STEP45 = 0, + UPDT_DT = SYSDATE() + WHERE SOPMAL_CD = #{sopmalCd} + AND OPTN_TY = #{optnTy} + AND ORDR_GOODS_OPTN_INNB = #{ordrGoodsOptnInnb} + ]]> + + + + + + + OIOP.STEP85 + WHERE SH.SOPMAL_CD = #{sopmalCd} + AND SH.ORDR_INNB = #{ordrInnb} + AND SH.ORDR_DLVY_INNB = #{ordrDlvyInnb} + AND SH.USE_AT = 'Y' + GROUP BY SH.SOPMAL_CD, SH.ORDR_INNB, SH.ORDR_DLVY_INNB + ) STEP + SET + SH.ORDR_STTUS_CD = STEP.ORDR_STTUS_CD, + SH.UPDT_DT = SYSDATE() + WHERE SH.SOPMAL_CD = STEP.SOPMAL_CD + AND SH.ORDR_INNB = STEP.ORDR_INNB + AND SH.ORDR_DLVY_INNB = STEP.ORDR_DLVY_INNB + ]]> + + + + + + + '85' + WHERE O.SOPMAL_CD = #{sopmalCd} + AND O.ORDR_INNB = #{ordrInnb} + GROUP BY O.SOPMAL_CD, O.ORDR_INNB + ) STEP + SET + O.ORDR_STTUS_CD = STEP.ORDR_STTUS_CD, + O.UPDT_DT = SYSDATE() + WHERE O.SOPMAL_CD = STEP.SOPMAL_CD + AND O.ORDR_INNB = STEP.ORDR_INNB + AND O.USE_AT = 'Y' + ]]> + + + + + + + + SELECT IFNULL(MAX(DLIVY_LOG_INNB), 0) + 1 FROM GC_GOODS_EXPORT_LOG + + + + + + + + + + + +