Compare commits
16 Commits
0c7657ac9c
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ab9efc5edb | ||
|
|
d57e2d91e9 | ||
|
|
aaebd9aed7 | ||
|
|
40f33b7974 | ||
|
|
2a3cd31539 | ||
|
|
303f28b7ed | ||
|
|
8080bffb56 | ||
|
|
8c856a53e5 | ||
|
|
6df5f7d280 | ||
|
|
9f365228bd | ||
|
|
11aa9b0882 | ||
|
|
f45722de4d | ||
|
|
3b350f890c | ||
|
|
101d01ea2c | ||
|
|
f2049bc49d | ||
|
|
28fb6bca61 |
8
Jenkinsfile
vendored
8
Jenkinsfile
vendored
@@ -11,7 +11,7 @@ pipeline {
|
|||||||
|
|
||||||
// 앱 정보
|
// 앱 정보
|
||||||
APP_NAME = 'gcone_batch'
|
APP_NAME = 'gcone_batch'
|
||||||
TOMCAT_HOME = '/usr/local/tomcat_dev'
|
TOMCAT_HOME = '/usr/local/tomcat'
|
||||||
DEPLOY_PATH = "${TOMCAT_HOME}/webapps"
|
DEPLOY_PATH = "${TOMCAT_HOME}/webapps"
|
||||||
BACKUP_PATH = "${TOMCAT_HOME}/backup"
|
BACKUP_PATH = "${TOMCAT_HOME}/backup"
|
||||||
DEPLOY_FILE = "${TOMCAT_HOME}/webapps/${APP_NAME}.war"
|
DEPLOY_FILE = "${TOMCAT_HOME}/webapps/${APP_NAME}.war"
|
||||||
@@ -24,7 +24,7 @@ pipeline {
|
|||||||
stages {
|
stages {
|
||||||
stage('Checkout') {
|
stage('Checkout') {
|
||||||
steps {
|
steps {
|
||||||
git branch: 'dev',
|
git branch: 'master',
|
||||||
credentialsId: 'itfirst',
|
credentialsId: 'itfirst',
|
||||||
url: 'http://115.68.207.90:3000/itfirst/sake_batch.git'
|
url: 'http://115.68.207.90:3000/itfirst/sake_batch.git'
|
||||||
}
|
}
|
||||||
@@ -90,7 +90,7 @@ pipeline {
|
|||||||
|
|
||||||
post {
|
post {
|
||||||
success {
|
success {
|
||||||
echo '✅ sake_batch 개발 배포 완료'
|
echo '✅ sake_batch 운영 배포 완료'
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
script {
|
script {
|
||||||
@@ -112,7 +112,7 @@ pipeline {
|
|||||||
fi
|
fi
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
echo '❌ 게빌 배포 실패 - 롤백 처리됨'
|
echo '❌ 운영 배포 실패 - 롤백 처리됨'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -170,7 +170,8 @@ public class AciDlivyTasklet implements Tasklet {
|
|||||||
headers.set("UserID", userId);
|
headers.set("UserID", userId);
|
||||||
headers.set("ACIKey", aciKeyToken);
|
headers.set("ACIKey", aciKeyToken);
|
||||||
|
|
||||||
String url = aciDlivyApiUrl + "?searchType=1&orderNumber=" + orderVO.getOrdrInnb();
|
String aciOrderNumber = orderVO.getOrdrInnb() + "A" + orderVO.getOrdrDlvyInnb();
|
||||||
|
String url = aciDlivyApiUrl + "?searchType=1&orderNumber=" + aciOrderNumber;
|
||||||
HttpEntity<Void> entity = new HttpEntity<>(headers);
|
HttpEntity<Void> entity = new HttpEntity<>(headers);
|
||||||
|
|
||||||
RestTemplate restTemplate = new RestTemplate();
|
RestTemplate restTemplate = new RestTemplate();
|
||||||
@@ -240,22 +241,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;
|
||||||
@@ -313,6 +320,7 @@ public class AciDlivyTasklet implements Tasklet {
|
|||||||
orderLogMap.put("logDtlCn", "[ACI 배치] 배치 출고처리 완료");
|
orderLogMap.put("logDtlCn", "[ACI 배치] 배치 출고처리 완료");
|
||||||
orderLogMap.put("aditInfoCn", null);
|
orderLogMap.put("aditInfoCn", null);
|
||||||
orderLogMap.put("dlivyInnb", orderVO.getDlivyInnb());
|
orderLogMap.put("dlivyInnb", orderVO.getDlivyInnb());
|
||||||
|
orderLogMap.put("dlivyCdNb", dlivyCdNb);
|
||||||
orderLogMap.put("refundCdNb", null);
|
orderLogMap.put("refundCdNb", null);
|
||||||
orderLogMap.put("logDvCd", "01");
|
orderLogMap.put("logDvCd", "01");
|
||||||
orderLogMap.put("dvCd", "BATCH");
|
orderLogMap.put("dvCd", "BATCH");
|
||||||
|
|||||||
@@ -3,9 +3,10 @@ package com.wb.domainserver.acidlivy.tasklet;
|
|||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.wb.domainserver.acidlivy.vo.AciDlivyOrderVO;
|
import com.wb.domainserver.acidlivy.vo.AciDlivyOrderVO;
|
||||||
|
import com.wb.domainserver.acidlivy.vo.BODlivyUpdtVO;
|
||||||
|
import com.wb.domainserver.exception.WnbtRestException;
|
||||||
import com.wb.domainserver.mapper.gcone.AciDlivyMapper;
|
import com.wb.domainserver.mapper.gcone.AciDlivyMapper;
|
||||||
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
|
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
|
||||||
import com.wb.domainserver.util.communicate.RESRC;
|
|
||||||
import com.wb.domainserver.util.communicate.SendToResrc;
|
import com.wb.domainserver.util.communicate.SendToResrc;
|
||||||
import com.wb.domainserver.util.dataaccess.DataMap;
|
import com.wb.domainserver.util.dataaccess.DataMap;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@@ -20,15 +21,19 @@ import org.springframework.http.*;
|
|||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.transaction.PlatformTransactionManager;
|
import org.springframework.transaction.PlatformTransactionManager;
|
||||||
import org.springframework.transaction.TransactionDefinition;
|
import org.springframework.transaction.TransactionDefinition;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.transaction.support.TransactionTemplate;
|
import org.springframework.transaction.support.TransactionTemplate;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
import org.springframework.web.client.RestTemplate;
|
import org.springframework.web.client.RestTemplate;
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.math.BigInteger;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.time.format.DateTimeParseException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
// ACI 배송자료 조회 및 배송처리 배치 Tasklet
|
// ACI 배송자료 조회 및 배송처리 배치 Tasklet
|
||||||
// 흐름: gc_order_shipping(DLIVY_STTUS_CD=55) 조회 → 토큰 발급 → ACI API 호출 → BLNO 추출 → 배송처리
|
// 흐름: gc_goods_export(DLIVY_STTUS_CD=55,65) 조회 -> 토큰 발급 -> ACI API 호출 -> BLNO 검증 -> 배송처리
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@@ -55,7 +60,10 @@ public class AciPodTasklet implements Tasklet {
|
|||||||
@Value("${acikey.apikey}")
|
@Value("${acikey.apikey}")
|
||||||
private String apiKey;
|
private String apiKey;
|
||||||
|
|
||||||
private static final String DLIVY_STTUS_CD = "55"; // 출고완료 코드
|
private static final String DLIVY_STTUS_CD_EXPORT_COMPLETE = "55"; // 출고완료 코드
|
||||||
|
private static final String DLIVY_STTUS_CD_DELIVERY_IN_PROGRESS = "65"; // 배송중 코드
|
||||||
|
private static final String DLIVY_STTUS_CD_DELIVERY_COMPLETE = "75"; // 배송완료 코드
|
||||||
|
private static final DateTimeFormatter ACI_DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
|
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
|
||||||
@@ -64,8 +72,8 @@ public class AciPodTasklet implements Tasklet {
|
|||||||
// 토큰 발급 (yaml 고정 apikey → ACIKey 토큰 발급, 메모리에만 유지)
|
// 토큰 발급 (yaml 고정 apikey → ACIKey 토큰 발급, 메모리에만 유지)
|
||||||
String aciKeyToken = issueAciKeyToken();
|
String aciKeyToken = issueAciKeyToken();
|
||||||
|
|
||||||
// 대상 주문 목록 조회 (DLIVY_STTUS_CD = '55')
|
// 대상 주문 목록 조회 (DLIVY_STTUS_CD IN ('55', '65'))
|
||||||
List<AciDlivyOrderVO> goodsExportList = AciDlivyMapper.selectGoodsExportList(DLIVY_STTUS_CD);
|
List<AciDlivyOrderVO> goodsExportList = AciDlivyMapper.selectGoodsExportList();
|
||||||
log.info("[AciPodBatch] 대상 출고 건수: {}", goodsExportList.size());
|
log.info("[AciPodBatch] 대상 출고 건수: {}", goodsExportList.size());
|
||||||
|
|
||||||
if (goodsExportList.isEmpty()) {
|
if (goodsExportList.isEmpty()) {
|
||||||
@@ -85,28 +93,52 @@ public class AciPodTasklet implements Tasklet {
|
|||||||
try {
|
try {
|
||||||
// 건별 ACI 출고자료 API 호출
|
// 건별 ACI 출고자료 API 호출
|
||||||
List<DataMap> podInfoList = callAciPodApi(dlivyOrderVO, aciKeyToken);
|
List<DataMap> podInfoList = callAciPodApi(dlivyOrderVO, aciKeyToken);
|
||||||
if (podInfoList.isEmpty()) {
|
if (CollectionUtils.isEmpty(podInfoList)) {
|
||||||
skipCnt++;
|
skipCnt++;
|
||||||
} else {
|
} else {
|
||||||
boolean dlvyInPrg = podInfoList.stream()
|
|
||||||
.anyMatch(podInfo -> !isBlank(podInfo, "dateLocalwhin"));
|
|
||||||
boolean dlvyCompt = podInfoList.stream()
|
boolean dlvyCompt = podInfoList.stream()
|
||||||
.allMatch(podInfo -> !isBlank(podInfo, "dateDelivery"));
|
.anyMatch(podInfo -> !isBlank(podInfo, "dateDelivery"));
|
||||||
|
/*
|
||||||
|
* 배송중(65) 판단은 DATE_LOCALWHIN이 아니라 DATE_LOCALDEPARTURE 기준으로 처리한다.
|
||||||
|
*
|
||||||
|
* ACI POD API의 DATE_LOCALWHIN은 명세상 "현지 창고 입고 시간"이지만,
|
||||||
|
* 운영 확인 결과 실제 미입고/입고예정 건에도 배치 조회 시점과 거의 같은 시간이 채워질 수 있었다.
|
||||||
|
* 이 값만 보거나 현재시간과 비교하면 실제 현지 출발 전 주문이 배송중으로 전환되고,
|
||||||
|
* 주문/배송/옵션 상태와 주문 로그까지 잘못 생성된다.
|
||||||
|
*
|
||||||
|
* 따라서 DATE_LOCALWHIN은 상태 전환 트리거로 사용하지 않는다.
|
||||||
|
* 배송완료는 기존처럼 DATE_DELIVERY 값 존재 여부를 최우선으로 판단하고,
|
||||||
|
* 배송중은 현지 출발 시간인 DATE_LOCALDEPARTURE가 현재 시스템 시간보다 과거/현재인 경우에만 허용한다.
|
||||||
|
* DATE_LOCALDEPARTURE가 비어 있거나 미래 시간이면 아직 현지 출발 전으로 보고 상태 변경을 skip한다.
|
||||||
|
*/
|
||||||
|
boolean dlvyInPrg = podInfoList.stream()
|
||||||
|
.anyMatch(this::isLocalDeparture);
|
||||||
|
|
||||||
// 건별 배송처리
|
// 건별 배송처리
|
||||||
DataMap dataMap = new DataMap();
|
BODlivyUpdtVO boDlivyUpdtVO = new BODlivyUpdtVO();
|
||||||
dataMap.put("dlivyInnb", dlivyOrderVO.getDlivyInnb());
|
boDlivyUpdtVO.setDlivyInnb(dlivyOrderVO.getDlivyInnb());
|
||||||
dataMap.put("dlivySttusCd", dlivyOrderVO.getDlivySttusCd());
|
boDlivyUpdtVO.setDlivySttusCd(dlivyOrderVO.getDlivySttusCd());
|
||||||
dataMap.put("sopmalCd", dlivyOrderVO.getSopmalCd());
|
boDlivyUpdtVO.setSopmalCd(dlivyOrderVO.getSopmalCd());
|
||||||
if(dlvyInPrg) {
|
|
||||||
dataMap.put("dlivySttusCd", "65");
|
String currentDlivySttusCd = dlivyOrderVO.getDlivySttusCd();
|
||||||
processDeliveryPod(dataMap);
|
if (dlvyCompt) {
|
||||||
|
boDlivyUpdtVO.setDlivySttusCd(DLIVY_STTUS_CD_DELIVERY_COMPLETE);
|
||||||
|
processDeliveryPod(boDlivyUpdtVO);
|
||||||
|
successCnt++;
|
||||||
|
} else if (dlvyInPrg && DLIVY_STTUS_CD_EXPORT_COMPLETE.equals(currentDlivySttusCd)) {
|
||||||
|
boDlivyUpdtVO.setDlivySttusCd(DLIVY_STTUS_CD_DELIVERY_IN_PROGRESS);
|
||||||
|
processDeliveryPod(boDlivyUpdtVO);
|
||||||
|
successCnt++;
|
||||||
|
} else {
|
||||||
|
if (dlvyInPrg && DLIVY_STTUS_CD_DELIVERY_IN_PROGRESS.equals(currentDlivySttusCd)) {
|
||||||
|
log.info("[AciPodBatch] 스킵 - 이미 배송중 상태 유지 - DLIVY_INNB={}, INVCNB={}",
|
||||||
|
dlivyOrderVO.getDlivyInnb(), dlivyOrderVO.getInvcnb());
|
||||||
|
} else {
|
||||||
|
log.info("[AciPodBatch] 스킵 - ACI 배송상태 판단 불가 - DLIVY_INNB={}, INVCNB={}",
|
||||||
|
dlivyOrderVO.getDlivyInnb(), dlivyOrderVO.getInvcnb());
|
||||||
|
}
|
||||||
|
skipCnt++;
|
||||||
}
|
}
|
||||||
if(dlvyCompt) {
|
|
||||||
dataMap.put("dlivySttusCd", "75");
|
|
||||||
processDeliveryPod(dataMap);
|
|
||||||
}
|
|
||||||
successCnt++;
|
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("[AciPodBatch] 배송처리 실패 - DLIVY_INNB={}, 오류={}",
|
log.error("[AciPodBatch] 배송처리 실패 - DLIVY_INNB={}, 오류={}",
|
||||||
@@ -186,7 +218,7 @@ public class AciPodTasklet implements Tasklet {
|
|||||||
|
|
||||||
HttpEntity<Map<String, Object>> apiRequest =
|
HttpEntity<Map<String, Object>> apiRequest =
|
||||||
new HttpEntity<>(body, headers);
|
new HttpEntity<>(body, headers);
|
||||||
log.info("[AciPodBatch] API 응답: {}", apiRequest.toString());
|
log.info("[AciPodBatch] API 요청: {}", apiRequest.toString());
|
||||||
|
|
||||||
RestTemplate restTemplate = new RestTemplate();
|
RestTemplate restTemplate = new RestTemplate();
|
||||||
ResponseEntity<String> response = restTemplate.exchange(
|
ResponseEntity<String> response = restTemplate.exchange(
|
||||||
@@ -199,98 +231,261 @@ public class AciPodTasklet implements Tasklet {
|
|||||||
ObjectMapper objectMapper = new ObjectMapper();
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
JsonNode jsonNode = objectMapper.readTree(response.getBody());
|
JsonNode jsonNode = objectMapper.readTree(response.getBody());
|
||||||
|
|
||||||
log.info("[AciPodBatch] API 응답 Status: {}", jsonNode.get("Status").asText());
|
String status = getText(jsonNode, "Status");
|
||||||
log.info("[AciPodBatch] API 응답 RstMsg: {}", jsonNode.get("RstMsg").asText());
|
log.info("[AciPodBatch] API 응답 Status: {}", status);
|
||||||
|
log.info("[AciPodBatch] API 응답 RstMsg: {}", getText(jsonNode, "RstMsg"));
|
||||||
|
|
||||||
|
if (!"success".equals(status)) {
|
||||||
|
log.info("[AciPodBatch] 스킵 - ACI 응답 Status 실패 - DLIVY_INNB={}, Status={}, ErrMsg={}",
|
||||||
|
orderVO.getDlivyInnb(), status, getText(jsonNode, "ErrMsg"));
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
JsonNode podInfoNode = jsonNode.get("PODInfo");
|
JsonNode podInfoNode = jsonNode.get("PODInfo");
|
||||||
if(!podInfoNode.isNull()) {
|
if(podInfoNode != null && podInfoNode.isArray() && podInfoNode.size() > 0) {
|
||||||
List<DataMap> podInfoList = new ArrayList<>();
|
List<DataMap> podInfoList = new ArrayList<>();
|
||||||
for(JsonNode podInfoItem : podInfoNode) {
|
for(JsonNode podInfoItem : podInfoNode) {
|
||||||
|
String blno = getText(podInfoItem, "BLNO");
|
||||||
|
if (!Objects.equals(trimToEmpty(orderVO.getInvcnb()), trimToEmpty(blno))) {
|
||||||
|
log.info("[AciPodBatch] 스킵 - 요청 송장번호와 ACI 응답 BLNO 불일치 - DLIVY_INNB={}, INVCNB={}, BLNO={}",
|
||||||
|
orderVO.getDlivyInnb(), orderVO.getInvcnb(), blno);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
DataMap PODInfo = new DataMap();
|
DataMap PODInfo = new DataMap();
|
||||||
PODInfo.put("blno", podInfoItem.get("BLNO").asText());
|
PODInfo.put("blno", blno);
|
||||||
PODInfo.put("dateLocalwhin", podInfoItem.get("DATE_LOCALWHIN").asText());
|
PODInfo.put("dateLocalwhin", getText(podInfoItem, "DATE_LOCALWHIN"));
|
||||||
PODInfo.put("dateLocaldeparture", podInfoItem.get("DATE_LOCALDEPARTURE").asText());
|
PODInfo.put("dateLocaldeparture", getText(podInfoItem, "DATE_LOCALDEPARTURE"));
|
||||||
PODInfo.put("dateIcnarrival", podInfoItem.get("DATE_ICNARRIVAL").asText());
|
PODInfo.put("dateIcnarrival", getText(podInfoItem, "DATE_ICNARRIVAL"));
|
||||||
PODInfo.put("dateCustomes", podInfoItem.get("DATE_CUSTOMES").asText());
|
PODInfo.put("dateCustomes", getText(podInfoItem, "DATE_CUSTOMES"));
|
||||||
PODInfo.put("dateDelivery", podInfoItem.get("DATE_DELIVERY").asText());
|
PODInfo.put("dateDelivery", getText(podInfoItem, "DATE_DELIVERY"));
|
||||||
PODInfo.put("recipient", podInfoItem.get("RECIPIENT").asText());
|
PODInfo.put("recipient", getText(podInfoItem, "RECIPIENT"));
|
||||||
PODInfo.put("wta", podInfoItem.get("WTA").asText());
|
PODInfo.put("wta", getText(podInfoItem, "WTA"));
|
||||||
PODInfo.put("wtdan", podInfoItem.get("WTDAN").asText());
|
PODInfo.put("wtdan", getText(podInfoItem, "WTDAN"));
|
||||||
|
|
||||||
List<DataMap> volumeList = new ArrayList<>();
|
List<DataMap> volumeList = new ArrayList<>();
|
||||||
for(JsonNode volumeItem : podInfoItem.get("VOLUME")) {
|
JsonNode volumeNode = podInfoItem.get("VOLUME");
|
||||||
DataMap volume = new DataMap();
|
if (volumeNode != null && volumeNode.isArray()) {
|
||||||
volume.put("width", volumeItem.get("WIDTH").asText());
|
for(JsonNode volumeItem : volumeNode) {
|
||||||
volume.put("length", volumeItem.get("LENGTH").asText());
|
DataMap volume = new DataMap();
|
||||||
volume.put("height", volumeItem.get("HEIGHT").asText());
|
volume.put("width", getText(volumeItem, "WIDTH"));
|
||||||
|
volume.put("length", getText(volumeItem, "LENGTH"));
|
||||||
|
volume.put("height", getText(volumeItem, "HEIGHT"));
|
||||||
|
|
||||||
volumeList.add(volume);
|
volumeList.add(volume);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
PODInfo.put("volume", volumeList);
|
PODInfo.put("volume", volumeList);
|
||||||
|
|
||||||
List<List> customsList = new ArrayList<>();
|
List<List> customsList = new ArrayList<>();
|
||||||
for(JsonNode customsItem : podInfoItem.get("CUSTOMS")) {
|
JsonNode customsNode = podInfoItem.get("CUSTOMS");
|
||||||
List<DataMap> customDetail = new ArrayList<>();
|
if (customsNode != null && customsNode.isArray()) {
|
||||||
for(JsonNode customItem : customsItem) {
|
for(JsonNode customsItem : customsNode) {
|
||||||
DataMap Custom = new DataMap();
|
List<DataMap> customDetail = new ArrayList<>();
|
||||||
Custom.put("dateEvent", customItem.get("DATE_EVENT").asText());
|
for(JsonNode customItem : customsItem) {
|
||||||
Custom.put("traceStatus", customItem.get("TRACE_STATUS").asText());
|
DataMap Custom = new DataMap();
|
||||||
|
Custom.put("dateEvent", getText(customItem, "DATE_EVENT"));
|
||||||
|
Custom.put("traceStatus", getText(customItem, "TRACE_STATUS"));
|
||||||
|
|
||||||
customDetail.add(Custom);
|
customDetail.add(Custom);
|
||||||
|
}
|
||||||
|
customsList.add(customDetail);
|
||||||
}
|
}
|
||||||
customsList.add(customDetail);
|
|
||||||
}
|
}
|
||||||
PODInfo.put("customs", customsList);
|
PODInfo.put("customs", customsList);
|
||||||
|
|
||||||
List<DataMap> localPodList = new ArrayList<>();
|
List<DataMap> localPodList = new ArrayList<>();
|
||||||
for(JsonNode localPodItem : podInfoItem.get("LOCAL_POD")) {
|
JsonNode localPodNode = podInfoItem.get("LOCAL_POD");
|
||||||
DataMap localPod = new DataMap();
|
if (localPodNode != null && localPodNode.isArray()) {
|
||||||
localPod.put("traceStatus", localPodItem.get("TRACE_STATUS").asText());
|
for(JsonNode localPodItem : localPodNode) {
|
||||||
localPod.put("dateEvent", localPodItem.get("DATE_EVENT").asText());
|
DataMap localPod = new DataMap();
|
||||||
localPod.put("position", localPodItem.get("POSITION").asText());
|
localPod.put("traceStatus", getText(localPodItem, "TRACE_STATUS"));
|
||||||
|
localPod.put("dateEvent", getText(localPodItem, "DATE_EVENT"));
|
||||||
|
localPod.put("position", getText(localPodItem, "POSITION"));
|
||||||
|
|
||||||
localPodList.add(localPod);
|
localPodList.add(localPod);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
PODInfo.put("localPod", localPodList);
|
PODInfo.put("localPod", localPodList);
|
||||||
|
|
||||||
podInfoList.add(PODInfo);
|
podInfoList.add(PODInfo);
|
||||||
}
|
}
|
||||||
log.info("[AciPodBatch] API 응답 PODInfo: {}", podInfoList);
|
if (podInfoList.isEmpty()) {
|
||||||
|
log.info("[AciPodBatch] 스킵 - 요청 송장번호와 일치하는 ACI PODInfo 없음 - DLIVY_INNB={}, INVCNB={}",
|
||||||
|
orderVO.getDlivyInnb(), orderVO.getInvcnb());
|
||||||
|
} else {
|
||||||
|
log.info("[AciPodBatch] API 응답 PODInfo: {}", podInfoList);
|
||||||
|
}
|
||||||
return podInfoList;
|
return podInfoList;
|
||||||
} else {
|
} else {
|
||||||
log.info("[AciPodBatch] API 응답 ErrMsg: {}", jsonNode.get("ErrMsg").asText());
|
log.info("[AciPodBatch] 스킵 - ACI PODInfo 없음 - DLIVY_INNB={}, ErrMsg={}",
|
||||||
return null;
|
orderVO.getDlivyInnb(), getText(jsonNode, "ErrMsg"));
|
||||||
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("[AciPodBatch] API 호출 오류 - DLIVY_INNB={}, 오류={}", orderVO.getDlivyInnb(), e.getMessage(), e);
|
log.error("[AciPodBatch] API 호출 오류 - DLIVY_INNB={}, 오류={}", orderVO.getDlivyInnb(), e.getMessage(), e);
|
||||||
return null;
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 배송처리
|
* 배송처리
|
||||||
*/
|
*/
|
||||||
private void processDeliveryPod(DataMap dataMap) {
|
private void processDeliveryPod(BODlivyUpdtVO boDlivyUpdtVO) {
|
||||||
dataMap.put("opetrNm", "시스템");
|
boDlivyUpdtVO.setOpetrNm("시스템");
|
||||||
dataMap.put("regusr", 0);
|
boDlivyUpdtVO.setMngrInnb("0");
|
||||||
dataMap.put("updusr", 0);
|
boDlivyUpdtVO.setRegusr(0);
|
||||||
|
boDlivyUpdtVO.setUpdusr(0);
|
||||||
|
|
||||||
Map<String, Object> result = responseHandler.handleResponseAsMap(
|
Map<String, Object> message = new HashMap<>();
|
||||||
sendToResrc.ofPost(RESRC.GCONEBO, "/mngr/ordr/dlivy/updateDlivySttusGetbackBatchUpdt", dataMap)
|
try {
|
||||||
);
|
updateBODlvySttusUpdt(boDlivyUpdtVO);
|
||||||
log.debug("result = {}", result);
|
|
||||||
|
|
||||||
// 메시지전송 ==================================================================
|
// 메시지전송 ==================================================================
|
||||||
/*List<DataMap> smsList = mapper.selectDlivySmsListInqire(tempVO);
|
/*List<DataMap> smsList = mapper.selectDlivySmsListInqire(tempVO);
|
||||||
log.debug("메시지 발송 파라미터 확인 : {}", smsList);
|
log.debug("메시지 발송 파라미터 확인 : {}", smsList);
|
||||||
if (!CollectionUtils.isEmpty(smsList)) {
|
if (!CollectionUtils.isEmpty(smsList)) {
|
||||||
System.out.println("smsList = " + smsList);
|
System.out.println("smsList = " + smsList);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
DataMap result = mssageService.insertBOAtmcsndng(smsList);
|
DataMap result = mssageService.insertBOAtmcsndng(smsList);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.debug("메시지 발송 실패");
|
log.debug("메시지 발송 실패");
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
message.put("dlivyInnb", boDlivyUpdtVO.getDlivyInnb());
|
||||||
|
message.put("result", "success");
|
||||||
|
message.put("status", "0");
|
||||||
|
} catch (WnbtRestException wre){
|
||||||
|
message.put("status", "1");
|
||||||
|
log.error(wre.getMessage(), wre);
|
||||||
|
throw new WnbtRestException(wre.getMessage());
|
||||||
|
} catch (Exception e) {
|
||||||
|
message.put("status", "1");
|
||||||
|
message.put("errorMsg", e.getMessage());
|
||||||
|
log.error(e.getMessage(), e);
|
||||||
|
// throw new WnbtRestException(e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
log.debug("result = {}", message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 출고상태변경 팝업 > 출고 상태변경 ( '배송중', '배송완료' ) > 출고 및 주문 상태 업데이트
|
||||||
|
* @param tempVO
|
||||||
|
*/
|
||||||
|
@Transactional
|
||||||
|
public Map<String, Object> updateBODlvySttusUpdt(BODlivyUpdtVO tempVO) {
|
||||||
|
Map<String, Object> message = new HashMap<>();
|
||||||
|
List<DataMap> orderLogList = new ArrayList<>();
|
||||||
|
String logSj = "";
|
||||||
|
String logDtlCn = "";
|
||||||
|
String dlivyCdNb = "";
|
||||||
|
|
||||||
|
Integer ordrItemResult = 0;
|
||||||
|
String ordrInnb = "";
|
||||||
|
|
||||||
|
try {
|
||||||
|
log.debug("출고 상태 일괄 변경 tempVO : {}", tempVO);
|
||||||
|
ordrItemResult = AciDlivyMapper.updateBODlivySttusGetbackUpdtArr(tempVO);
|
||||||
|
|
||||||
|
List<DataMap> orderItemList = AciDlivyMapper.selectBOExportOrderItemInqire(tempVO);
|
||||||
|
|
||||||
|
Set<String> ordrDlvyInnbSet = new HashSet<>();
|
||||||
|
|
||||||
|
if (ordrItemResult > 0) {
|
||||||
|
if (orderItemList != null && orderItemList.size() > 0) {
|
||||||
|
ordrInnb = String.valueOf(orderItemList.get(0).get("ordrInnb"));
|
||||||
|
|
||||||
|
// 주문 상품 옵션 상태 부분배송중(60), 배송중(65) 처리 및 수량 수정
|
||||||
|
for (DataMap item : orderItemList) {
|
||||||
|
item.put("dlivySttusCd", tempVO.getDlivySttusCd());
|
||||||
|
item.put("updusr", tempVO.getUpdusr());
|
||||||
|
// 해당하는 주문상품옵션 배송중 수량 update 하는데 배송중 수량이 (판매가 - 결제취소 ) 수량보다 작으면 상태 부분배송중으로 업데이트
|
||||||
|
AciDlivyMapper.updateBOOrdrItemStatusUpdt6575(item); // TODO : 배송중 처리하면 개수안맞아도 걍 다 배송중 처리해야하는건지 확인 필요
|
||||||
|
|
||||||
|
dlivyCdNb = String.valueOf(item.get("dlivyCdNb"));
|
||||||
|
ordrDlvyInnbSet.add(item.get("ordrDlvyInnb").toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
String[] ordrDlvyInnbArr = ordrDlvyInnbSet.toArray(new String[0]);
|
||||||
|
log.debug("주문 배송 set : {}", ordrDlvyInnbSet);
|
||||||
|
log.debug("주문 set : {}", ordrInnb);
|
||||||
|
|
||||||
|
// 주문 배송 상태 부분배송중(60), 배송중(65) 처리
|
||||||
|
DataMap dlvyVO = new DataMap();
|
||||||
|
dlvyVO.put("ordrDlvyInnbArr", ordrDlvyInnbArr);
|
||||||
|
dlvyVO.put("sopmalCd", tempVO.getSopmalCd());
|
||||||
|
dlvyVO.put("ordrInnb", ordrInnb);
|
||||||
|
dlvyVO.put("updusr", tempVO.getUpdusr());
|
||||||
|
Integer dlvyResult = 0;
|
||||||
|
|
||||||
|
dlvyResult = AciDlivyMapper.updateBOOrdrDlvyStatusUpdt6575(dlvyVO);
|
||||||
|
|
||||||
|
// 주문 상태 부분배송중(60), 배송중(65) 처리
|
||||||
|
if (dlvyResult > 0) {
|
||||||
|
DataMap ordrVO = new DataMap();
|
||||||
|
ordrVO.put("ordrInnb", ordrInnb);
|
||||||
|
ordrVO.put("sopmalCd", tempVO.getSopmalCd());
|
||||||
|
ordrVO.put("updusr", tempVO.getUpdusr());
|
||||||
|
AciDlivyMapper.updateBOOrdrStatusUpdt6575(ordrVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("65".equals(tempVO.getDlivySttusCd())) {
|
||||||
|
logSj = "배송중(" + dlivyCdNb + ")";
|
||||||
|
} else if ("75".equals(tempVO.getDlivySttusCd())) {
|
||||||
|
logSj = "배송완료(" + dlivyCdNb + ")";
|
||||||
|
}
|
||||||
|
logDtlCn = "[관리자] " + tempVO.getOpetrNm() + "이(가)" + logSj + " 처리를 하였습니다.";
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if ("65".equals(tempVO.getDlivySttusCd())) {
|
||||||
|
logSj = "배송중(ERROR)";
|
||||||
|
} else if ("75".equals(tempVO.getDlivySttusCd())) {
|
||||||
|
logSj = "배송완료(ERROR)";
|
||||||
|
}
|
||||||
|
logDtlCn = "[관리자] " + tempVO.getOpetrNm() + "이(가)" + logSj + " 처리를 실패하였습니다.";
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}*/
|
} catch (WnbtRestException wre){
|
||||||
|
throw new WnbtRestException(wre.getMessage());
|
||||||
|
} catch (Exception e ){
|
||||||
|
log.error(e.getMessage(), e);
|
||||||
|
} finally {
|
||||||
|
DataMap orderLogVO = new DataMap();
|
||||||
|
if (ordrInnb != null && !ordrInnb.equals("")) {
|
||||||
|
orderLogVO.put("ordrInnb", BigInteger.valueOf(Long.valueOf(ordrInnb)));
|
||||||
|
}
|
||||||
|
orderLogVO.put("sopmalCd", tempVO.getSopmalCd());
|
||||||
|
orderLogVO.put("logSj", logSj);
|
||||||
|
orderLogVO.put("logDtlCn", logDtlCn);
|
||||||
|
orderLogVO.put("logDvCd", "05"); // 출고
|
||||||
|
orderLogVO.put("dvCd", "02"); // 관리자
|
||||||
|
orderLogVO.put("opetrNm", tempVO.getOpetrNm());
|
||||||
|
orderLogVO.put("dlivyCdNb", tempVO.getDlivyInnb());
|
||||||
|
orderLogVO.put("qy", 0);
|
||||||
|
|
||||||
|
orderLogList.add(orderLogVO);
|
||||||
|
|
||||||
|
insertBODlivyOrdrLogRegist(orderLogList);
|
||||||
|
}
|
||||||
|
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 출고 관련 주문 로그 등록
|
||||||
|
*/
|
||||||
|
public void insertBODlivyOrdrLogRegist(List<DataMap> logList) {
|
||||||
|
|
||||||
|
if (!CollectionUtils.isEmpty(logList)) {
|
||||||
|
for (DataMap logVO : logList) {
|
||||||
|
AciDlivyMapper.insertOrderLog(logVO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -300,4 +495,34 @@ public class AciPodTasklet implements Tasklet {
|
|||||||
return podInfo.get(key) == null
|
return podInfo.get(key) == null
|
||||||
|| podInfo.get(key).toString().trim().isEmpty();
|
|| podInfo.get(key).toString().trim().isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DATE_LOCALDEPARTURE 값이 현재 시스템 시간 기준으로 배송중 처리 가능한 현지 출발 시간인지 확인한다.
|
||||||
|
*/
|
||||||
|
private boolean isLocalDeparture(DataMap podInfo) {
|
||||||
|
if (isBlank(podInfo, "dateLocaldeparture")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
String dateLocaldeparture = podInfo.get("dateLocaldeparture").toString().trim();
|
||||||
|
try {
|
||||||
|
LocalDateTime localDepartureDateTime = LocalDateTime.parse(dateLocaldeparture, ACI_DATE_TIME_FORMATTER);
|
||||||
|
return !localDepartureDateTime.isAfter(LocalDateTime.now());
|
||||||
|
} catch (DateTimeParseException e) {
|
||||||
|
log.info("[AciPodBatch] 스킵 - DATE_LOCALDEPARTURE 파싱 실패 - DATE_LOCALDEPARTURE={}", dateLocaldeparture);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getText(JsonNode jsonNode, String key) {
|
||||||
|
JsonNode valueNode = jsonNode.get(key);
|
||||||
|
if (valueNode == null || valueNode.isNull()) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return valueNode.asText();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String trimToEmpty(String value) {
|
||||||
|
return value == null ? "" : value.trim();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 형식)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package com.wb.domainserver.acidlivy.vo;
|
||||||
|
|
||||||
|
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)
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package com.wb.domainserver.acidlivy.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class BODlivyUpdtVO {
|
||||||
|
|
||||||
|
/**출고고유번호*/
|
||||||
|
private String dlivyInnb;
|
||||||
|
/**출고준비(45), 출고완료(55), 배송중(65), 배송완료(75)*/
|
||||||
|
private String dlivySttusCd;
|
||||||
|
/**쇼핑몰 코드*/
|
||||||
|
private String sopmalCd;
|
||||||
|
/** 처리자명 */
|
||||||
|
private String opetrNm;
|
||||||
|
/** 관리자 고유번호*/
|
||||||
|
private String mngrInnb;
|
||||||
|
|
||||||
|
/** 등록자*/
|
||||||
|
private int regusr;
|
||||||
|
/** 수정자*/
|
||||||
|
private int updusr;
|
||||||
|
}
|
||||||
@@ -30,7 +30,8 @@ import java.util.List;
|
|||||||
@EnableTransactionManagement
|
@EnableTransactionManagement
|
||||||
@MapperScan(
|
@MapperScan(
|
||||||
basePackages = {
|
basePackages = {
|
||||||
"com.wb.domainserver.mapper.gcone"
|
"com.wb.domainserver.mapper.gcone",
|
||||||
|
"com.wb.domainserver.acidlivy.tasklet"
|
||||||
},
|
},
|
||||||
sqlSessionFactoryRef = "gconeSqlSessionFactory"
|
sqlSessionFactoryRef = "gconeSqlSessionFactory"
|
||||||
)
|
)
|
||||||
@@ -59,6 +60,7 @@ public class GconeSourceConfig {
|
|||||||
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
|
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
|
||||||
List<Resource> mapperLocations = new ArrayList<>();
|
List<Resource> mapperLocations = new ArrayList<>();
|
||||||
mapperLocations.addAll(Arrays.asList(resolver.getResources("classpath*:mybatis/xml/mapper/gcone/**/*.xml")));
|
mapperLocations.addAll(Arrays.asList(resolver.getResources("classpath*:mybatis/xml/mapper/gcone/**/*.xml")));
|
||||||
|
mapperLocations.addAll(Arrays.asList(resolver.getResources("classpath*:mybatis/xml/mapper/acidlivy/**/*.xml")));
|
||||||
sessionFactory.setMapperLocations(mapperLocations.toArray(new Resource[0]));
|
sessionFactory.setMapperLocations(mapperLocations.toArray(new Resource[0]));
|
||||||
|
|
||||||
sessionFactory.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:mybatis/xml/config/mapper-config.xml"));
|
sessionFactory.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:mybatis/xml/config/mapper-config.xml"));
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.wb.domainserver.mapper.gcone;
|
package com.wb.domainserver.mapper.gcone;
|
||||||
|
|
||||||
import com.wb.domainserver.acidlivy.vo.AciDlivyOrderVO;
|
import com.wb.domainserver.acidlivy.vo.AciDlivyOrderVO;
|
||||||
|
import com.wb.domainserver.acidlivy.vo.BODlivyUpdtVO;
|
||||||
import com.wb.domainserver.util.dataaccess.DataMap;
|
import com.wb.domainserver.util.dataaccess.DataMap;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
@@ -20,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 존재 여부 */
|
||||||
@@ -53,6 +57,21 @@ public interface AciDlivyMapper {
|
|||||||
/** GC_ORDER_LOG INSERT */
|
/** GC_ORDER_LOG INSERT */
|
||||||
int insertOrderLog(DataMap logMap);
|
int insertOrderLog(DataMap logMap);
|
||||||
|
|
||||||
/** 배송처리 대상 주문 목록 조회 (gc_goods_export.DLIVY_STTUS_CD = '55') */
|
/** 배송처리 대상 주문 목록 조회 (gc_goods_export.DLIVY_STTUS_CD IN ('55', '65')) */
|
||||||
List<AciDlivyOrderVO> selectGoodsExportList(String dlivySttusCd);
|
List<AciDlivyOrderVO> selectGoodsExportList();
|
||||||
|
|
||||||
|
/** 출고 상태 일괄 변경 다건 */
|
||||||
|
public Integer updateBODlivySttusGetbackUpdtArr(BODlivyUpdtVO dlivyVO);
|
||||||
|
|
||||||
|
/** 출고에 해당하는 주문 상품 옵션 조회 */
|
||||||
|
public List<DataMap> selectBOExportOrderItemInqire(BODlivyUpdtVO dlivyVO);
|
||||||
|
|
||||||
|
/** 출고처리 후 주문 상품 옵션 상태 및 수량 수정 */
|
||||||
|
public void updateBOOrdrItemStatusUpdt6575(DataMap ordrItemVO);
|
||||||
|
|
||||||
|
/** 출고처리 후 주문 배송 상태 수정 */
|
||||||
|
public Integer updateBOOrdrDlvyStatusUpdt6575(DataMap ordrItemVO);
|
||||||
|
|
||||||
|
/** 출고처리 후 주문 상태 수정 */
|
||||||
|
public void updateBOOrdrStatusUpdt6575(DataMap ordrItemVO);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
server:
|
server:
|
||||||
port: 18210
|
port: 18210
|
||||||
|
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
security:
|
|
||||||
oauth2:
|
|
||||||
resourceserver:
|
|
||||||
jwt:
|
|
||||||
issuer-uri: http://172.31.21.12:18320/realms/ADMIN
|
|
||||||
main:
|
main:
|
||||||
allow-bean-definition-overriding: true
|
allow-bean-definition-overriding: true
|
||||||
datasource:
|
datasource:
|
||||||
@@ -21,112 +14,37 @@ spring:
|
|||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
username: sakeone
|
username: sakeone
|
||||||
password: dnlfxjtm13@$
|
password: dnlfxjtm13@$
|
||||||
crmdatasource:
|
|
||||||
jdbc-url: jdbc:mysql://10.2.1.101:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=false&verifyServerCertificate=false
|
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
|
||||||
username: sakeone
|
|
||||||
password: dnlfxjtm13@$
|
|
||||||
mqdatasource:
|
|
||||||
jdbc-url: jdbc:mysql://10.2.1.101:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=false&verifyServerCertificate=false
|
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
|
||||||
username: sakeone
|
|
||||||
password: dnlfxjtm13@$
|
|
||||||
suredatasource:
|
|
||||||
jdbc-url: jdbc:mysql://10.2.1.101:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=false&verifyServerCertificate=false
|
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
|
||||||
username: sakeone
|
|
||||||
password: dnlfxjtm13@$
|
|
||||||
batch:
|
batch:
|
||||||
|
jdbc:
|
||||||
|
initialize-schema: never
|
||||||
job:
|
job:
|
||||||
enabled: true
|
enabled: false
|
||||||
mybatis:
|
mybatis:
|
||||||
mapper-locations: classpath*:mybatis/xml/mapper/**/*.xml
|
mapper-locations: classpath*:mybatis/xml/mapper/**/*.xml
|
||||||
config-location: classpath:/mybatis/xml/config/mapper-config.xml
|
config-location: classpath:/mybatis/xml/config/mapper-config.xml
|
||||||
|
|
||||||
logging:
|
logging:
|
||||||
level:
|
level:
|
||||||
org.springframework.web: debug
|
org.springframework.web: info
|
||||||
org.springframework.security: debug
|
org.springframework.security: info
|
||||||
org.springframework.security.oauth2: debug
|
com.wb.domainserver: info
|
||||||
com.wb.domainserver: debug
|
|
||||||
root: info
|
root: info
|
||||||
|
|
||||||
#Resource-server-url
|
|
||||||
url:
|
url:
|
||||||
resource:
|
resource:
|
||||||
server:
|
server:
|
||||||
gconebo: http://10.2.2.148:18500 #내부망 ip
|
gconebo: http://10.2.2.148:18500
|
||||||
reviewbo: http://127.0.0.1:18220
|
reviewbo: http://127.0.0.1:18220
|
||||||
|
|
||||||
pagination:
|
|
||||||
page-unit: 10
|
|
||||||
page-size: 10
|
|
||||||
|
|
||||||
|
|
||||||
# 스윗트래커 url, api key
|
|
||||||
parcel:
|
|
||||||
trackApiUrl: https://info.sweettracker.co.kr
|
|
||||||
trackApiKey: R0sYxkD9vCxSXPKpStOY2w
|
|
||||||
|
|
||||||
smartstore:
|
|
||||||
sopmal:
|
|
||||||
stores:
|
|
||||||
#참다한홍삼
|
|
||||||
CH:
|
|
||||||
clientId: 48f8YgF04wTnge6taw9bsM
|
|
||||||
clientSecret: $2a$04$9Lfn5as5Vv/ZW5PAoKBBr.
|
|
||||||
|
|
||||||
#스마트 스토어 api url
|
|
||||||
smartstoreurl:
|
|
||||||
tokenurl: https://api.commerce.naver.com/external/v1/oauth2/token
|
|
||||||
orderlisturl: https://api.commerce.naver.com/external/v1/pay-order/seller/product-orders/last-changed-statuses
|
|
||||||
orderdetailurl : https://api.commerce.naver.com/external/v1/pay-order/seller/product-orders/query
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#슈어엠 법인별 정보
|
|
||||||
surem:
|
|
||||||
sopmal:
|
|
||||||
#참다한홍삼
|
|
||||||
CH:
|
|
||||||
code: GC
|
|
||||||
data: (주)지씨바이오
|
|
||||||
erpcode: 01
|
|
||||||
userid: gcbio02
|
|
||||||
deptcode: KT-26E-ZS
|
|
||||||
yellowkey: cd51453ccf40ef714cadd5a7dd0506cd7340a986
|
|
||||||
|
|
||||||
#GC EP 파일 저장 경로
|
|
||||||
ep:
|
|
||||||
common:
|
|
||||||
fileupload:
|
|
||||||
uploaddirs:
|
|
||||||
path: /data/gcone/otrFile
|
|
||||||
naver: naver_third
|
|
||||||
google: googleEpXmlData
|
|
||||||
meta: metaEpXmlData
|
|
||||||
mobion: mobionEpXmlData
|
|
||||||
extensions:
|
|
||||||
xml: .xml
|
|
||||||
txt: .txt
|
|
||||||
cdnurl: https://img.gcone.co.kr
|
|
||||||
|
|
||||||
secret:
|
secret:
|
||||||
key: 1df5be2f7e90ae36
|
key: 1df5be2f7e90ae36
|
||||||
|
|
||||||
mail:
|
mail:
|
||||||
host: 10.2.1.76
|
host: 10.2.1.76
|
||||||
port: 25
|
port: 25
|
||||||
|
|
||||||
# SyncPos 요청경로
|
acikey:
|
||||||
pos:
|
url: https://acieshop.com/api/kr/token/
|
||||||
syncpos:
|
userid: UNIHAN
|
||||||
url: https://smart.easypos.net
|
apikey: DC94F29AFD5399F54AAE7FAA46045B65
|
||||||
uri: /servlet/EasyPosChannelSVL?cmd=TlxSyncHanamCMD
|
aci:
|
||||||
|
dlivy:
|
||||||
#kakao REST-API key (뉴트리코어 키)
|
api-url: https://acieshop.com/api/kr/delivery/v1.5/detail/index.php
|
||||||
kakao:
|
pod:
|
||||||
restApi-key: "2d1fa2155bc36878a45c65e45e23a990"
|
api-url: https://acieshop.com/api/kr/pod/v1.5/
|
||||||
|
|
||||||
#선물하기 URL
|
|
||||||
presenturl : svc.gcone.co.kr
|
|
||||||
@@ -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">
|
||||||
|
|
||||||
@@ -353,24 +367,24 @@
|
|||||||
]]>
|
]]>
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
<!-- 배송처리 대상 주문 목록 조회 (DLIVY_STTUS_CD = '55' 출고완료) -->
|
<!-- 배송처리 대상 주문 목록 조회 (DLIVY_STTUS_CD IN ('55', '65')) -->
|
||||||
<select id="selectGoodsExportList" parameterType="java.lang.String"
|
<select id="selectGoodsExportList" resultType="com.wb.domainserver.acidlivy.vo.AciDlivyOrderVO">
|
||||||
resultType="com.wb.domainserver.acidlivy.vo.AciDlivyOrderVO">
|
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
SELECT
|
SELECT
|
||||||
DLIVY_INNB,
|
DLIVY_INNB,
|
||||||
ORDR_INNB,
|
ORDR_INNB,
|
||||||
ORDR_DLVY_INNB,
|
ORDR_DLVY_INNB,
|
||||||
SOPMAL_CD,
|
SOPMAL_CD,
|
||||||
INVCNB
|
INVCNB,
|
||||||
|
DLIVY_STTUS_CD
|
||||||
FROM GC_GOODS_EXPORT
|
FROM GC_GOODS_EXPORT
|
||||||
WHERE DLIVY_STTUS_CD = #{param}
|
WHERE DLIVY_STTUS_CD IN ('55', '65')
|
||||||
ORDER BY DLIVY_INNB ASC
|
ORDER BY DLIVY_INNB ASC
|
||||||
]]>
|
]]>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 출고 상태 일괄 변경 다건 -->
|
<!-- 출고 상태 일괄 변경 다건 -->
|
||||||
<update id="updateBODlivySttusGetbackUpdtArr" parameterType="dataMap">
|
<update id="updateBODlivySttusGetbackUpdtArr" parameterType="com.wb.domainserver.acidlivy.vo.BODlivyUpdtVO">
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
UPDATE GC_GOODS_EXPORT SET
|
UPDATE GC_GOODS_EXPORT SET
|
||||||
DLIVY_STTUS_CD = #{dlivySttusCd},
|
DLIVY_STTUS_CD = #{dlivySttusCd},
|
||||||
@@ -389,4 +403,244 @@
|
|||||||
]]>
|
]]>
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
<!-- 출고완료상태의 출고상품 목록 조회 -->
|
||||||
|
<select id="selectBOExportOrderItemInqire">
|
||||||
|
<![CDATA[
|
||||||
|
SELECT
|
||||||
|
EXI.ORDR_GOODS_OPTN_INNB
|
||||||
|
,EXI.OPTN_TY
|
||||||
|
,EXI.SOPMAL_CD
|
||||||
|
,(OIOP.STEP45 + OIOP.STEP55 + OIOP.STEP65 + OIOP.STEP75) AS QY
|
||||||
|
,0 AS PYMNT_PREARNGE_QY -- 지급예정수량
|
||||||
|
,IFNULL((EXI.PYMNT_PREARNGE_QY - OIOP.STEP85), 0) AS ACCMLMNY_PYMNT_QY -- 적립금지급수량
|
||||||
|
,IFNULL(OIOP.STEP85, 0) AS PYMNT_PREARNGE_EXTSH_QY -- 지급예정소멸수량
|
||||||
|
,EX.ORDR_INNB
|
||||||
|
,O.MBR_DV_CD
|
||||||
|
,O.MBR_INNB
|
||||||
|
,OIOP.ORDR_DLVY_INNB
|
||||||
|
,IFNULL(EX.DLIVY_CD_NB, '') AS DLIVY_CD_NB
|
||||||
|
,EX.DLIVY_INNB
|
||||||
|
,IFNULL(OIOP.MLG_VALID_PD, 0) AS MLG_VALID_PD
|
||||||
|
,IFNULL(OIOP.MLG_VALID_PD_AT, 'N') AS MLG_VALID_PD_AT
|
||||||
|
,CASE
|
||||||
|
WHEN OIOP.STEP85 = 0 THEN ROUND(OIOP.MLG_ACCML_UNIT * ( OIOP.ORDR_QY - OIOP.STEP85 ) + OIOP.MLG_ACCML_REST)
|
||||||
|
WHEN OIOP.STEP85 > 0 THEN ROUND(OIOP.MLG_ACCML_UNIT * ( OIOP.ORDR_QY - OIOP.STEP85 ))
|
||||||
|
END AS MLG_ACCML_AMT
|
||||||
|
FROM GC_GOODS_EXPORT_ITEM EXI
|
||||||
|
INNER JOIN GC_GOODS_EXPORT EX ON EXI.SOPMAL_CD = EX.SOPMAL_CD
|
||||||
|
AND EXI.DLIVY_INNB = EX.DLIVY_INNB
|
||||||
|
INNER JOIN GC_ORDER_ITEM_OPTION OIOP ON EXI.SOPMAL_CD = OIOP.SOPMAL_CD
|
||||||
|
AND EXI.OPTN_TY = OIOP.OPTN_TY
|
||||||
|
AND EXI.ORDR_GOODS_OPTN_INNB = OIOP.ORDR_GOODS_OPTN_INNB
|
||||||
|
AND OIOP.PURCHS_DCSN_QY < ( OIOP.ORDR_QY - OIOP.STEP85 )
|
||||||
|
INNER JOIN GC_ORDER O ON EX.SOPMAL_CD = O.SOPMAL_CD
|
||||||
|
AND EX.ORDR_INNB = O.ORDR_INNB
|
||||||
|
WHERE 1 = 1
|
||||||
|
AND EX.SOPMAL_CD = #{sopmalCd}
|
||||||
|
]]>
|
||||||
|
<choose>
|
||||||
|
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(dlivyInnb)">
|
||||||
|
<![CDATA[
|
||||||
|
AND EX.DLIVY_INNB = #{dlivyInnb}
|
||||||
|
]]>
|
||||||
|
</when>
|
||||||
|
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ordrGoodsOptnInnb)">
|
||||||
|
<![CDATA[
|
||||||
|
AND EXI.OPTN_TY = #{optnTy}
|
||||||
|
AND EXI.ORDR_GOODS_OPTN_INNB = #{ordrGoodsOptnInnb}
|
||||||
|
]]>
|
||||||
|
</when>
|
||||||
|
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ordrInnb)">
|
||||||
|
<![CDATA[
|
||||||
|
AND EX.ORDR_INNB = #{ordrInnb}
|
||||||
|
]]>
|
||||||
|
</when>
|
||||||
|
</choose>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- 출고 처리 후 주문 상품 옵션 상태 변경 -->
|
||||||
|
<update id="updateBOOrdrItemStatusUpdt6575">
|
||||||
|
<![CDATA[
|
||||||
|
UPDATE GC_ORDER_ITEM_OPTION SET
|
||||||
|
]]>
|
||||||
|
<choose>
|
||||||
|
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(dlivySttusCd, '65')">
|
||||||
|
<![CDATA[
|
||||||
|
ORDR_STTUS_CD =
|
||||||
|
CASE
|
||||||
|
WHEN (ORDR_QY - STEP85) > #{qy} THEN '60'
|
||||||
|
WHEN (ORDR_QY - STEP85) = #{qy} THEN '65'
|
||||||
|
ELSE ORDR_STTUS_CD
|
||||||
|
END
|
||||||
|
,STEP65 = #{qy}
|
||||||
|
,STEP55 = CASE
|
||||||
|
WHEN (STEP55 - #{qy}) < 0 THEN 0
|
||||||
|
ELSE (STEP55 - #{qy})
|
||||||
|
END,
|
||||||
|
]]>
|
||||||
|
</when>
|
||||||
|
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(dlivySttusCd, '75')">
|
||||||
|
<![CDATA[
|
||||||
|
ORDR_STTUS_CD =
|
||||||
|
CASE
|
||||||
|
WHEN (ORDR_QY - STEP85) > #{qy} THEN '70'
|
||||||
|
WHEN (ORDR_QY - STEP85) = #{qy} THEN '75'
|
||||||
|
ELSE ORDR_STTUS_CD
|
||||||
|
END
|
||||||
|
,STEP55 = CASE
|
||||||
|
WHEN (STEP55 - #{qy}) < 0 THEN 0
|
||||||
|
ELSE (STEP55 - #{qy})
|
||||||
|
END
|
||||||
|
,STEP65 = CASE
|
||||||
|
WHEN (STEP65 - #{qy}) < 0 THEN 0
|
||||||
|
ELSE (STEP65 - #{qy})
|
||||||
|
END
|
||||||
|
,STEP75 = #{qy},
|
||||||
|
]]>
|
||||||
|
</when>
|
||||||
|
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(dlivySttusCd, '55')">
|
||||||
|
<![CDATA[
|
||||||
|
ORDR_STTUS_CD =
|
||||||
|
CASE
|
||||||
|
WHEN (ORDR_QY - STEP85) > #{qy} THEN '50'
|
||||||
|
WHEN (ORDR_QY - STEP85) = #{qy} THEN '55'
|
||||||
|
ELSE ORDR_STTUS_CD
|
||||||
|
END
|
||||||
|
,STEP55 = #{qy},
|
||||||
|
]]>
|
||||||
|
</when>
|
||||||
|
</choose>
|
||||||
|
<![CDATA[
|
||||||
|
STEP45 = 0
|
||||||
|
,UPDT_DT = SYSDATE()
|
||||||
|
WHERE SOPMAL_CD = #{sopmalCd}
|
||||||
|
AND OPTN_TY = #{optnTy}
|
||||||
|
AND ORDR_GOODS_OPTN_INNB = #{ordrGoodsOptnInnb}
|
||||||
|
]]>
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<!-- 출고 처리 후 주문 배송 상태 변경
|
||||||
|
SH.ORDR_STTUS_CD =
|
||||||
|
CASE
|
||||||
|
WHEN EXISTS (
|
||||||
|
SELECT
|
||||||
|
1
|
||||||
|
FROM GC_ORDER_ITEM_OPTION OIOP
|
||||||
|
WHERE OIOP.SOPMAL_CD = SH.SOPMAL_CD
|
||||||
|
AND OIOP.ORDR_DLVY_INNB = SH.ORDR_DLVY_INNB
|
||||||
|
AND OIOP.ORDR_STTUS_CD = '60'
|
||||||
|
) THEN '60'
|
||||||
|
WHEN EXISTS (
|
||||||
|
SELECT
|
||||||
|
1
|
||||||
|
FROM GC_ORDER_ITEM_OPTION OIOP
|
||||||
|
WHERE OIOP.SOPMAL_CD = SH.SOPMAL_CD
|
||||||
|
AND OIOP.ORDR_DLVY_INNB = SH.ORDR_DLVY_INNB
|
||||||
|
AND OIOP.ORDR_STTUS_CD = '65'
|
||||||
|
) THEN '65'
|
||||||
|
ELSE ORDR_STTUS_CD
|
||||||
|
END
|
||||||
|
|
||||||
|
-->
|
||||||
|
<update id="updateBOOrdrDlvyStatusUpdt6575">
|
||||||
|
<![CDATA[
|
||||||
|
UPDATE
|
||||||
|
GC_ORDER_SHIPPING SH,
|
||||||
|
(
|
||||||
|
SELECT CASE WHEN MAX(OIOP.ORDR_STTUS_CD) = MIN(OIOP.ORDR_STTUS_CD) THEN MAX(OIOP.ORDR_STTUS_CD)
|
||||||
|
ELSE CAST(MAX(OIOP.ORDR_STTUS_CD) - 5 AS CHAR(2))
|
||||||
|
END ORDR_STTUS_CD
|
||||||
|
, SH.SOPMAL_CD, SH.ORDR_INNB, SH.ORDR_DLVY_INNB
|
||||||
|
FROM GC_ORDER_SHIPPING SH
|
||||||
|
INNER JOIN GC_ORDER_ITEM_OPTION OIOP
|
||||||
|
ON SH.SOPMAL_CD = OIOP.SOPMAL_CD
|
||||||
|
AND SH.ORDR_DLVY_INNB = OIOP.ORDR_DLVY_INNB
|
||||||
|
AND OIOP.ORDR_QY <> OIOP.STEP85
|
||||||
|
WHERE SH.SOPMAL_CD = #{sopmalCd}
|
||||||
|
AND SH.ORDR_INNB = #{ordrInnb}
|
||||||
|
]]>
|
||||||
|
<choose>
|
||||||
|
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ordrDlvyInnb)">
|
||||||
|
AND SH.ORDR_DLVY_INNB = #{ordrDlvyInnb}
|
||||||
|
</when>
|
||||||
|
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ordrDlvyInnbArr)">
|
||||||
|
<![CDATA[
|
||||||
|
AND SH.ORDR_DLVY_INNB IN
|
||||||
|
]]>
|
||||||
|
<foreach collection="ordrDlvyInnbArr" item="ordrDlvyInnbArr" open="(" close=")" separator=",">
|
||||||
|
#{ordrDlvyInnbArr}
|
||||||
|
</foreach>
|
||||||
|
</when>
|
||||||
|
</choose>
|
||||||
|
<![CDATA[
|
||||||
|
AND SH.USE_AT = 'Y'
|
||||||
|
GROUP BY SH.SOPMAL_CD, SH.ORDR_INNB, SH.ORDR_DLVY_INNB
|
||||||
|
]]>
|
||||||
|
<![CDATA[
|
||||||
|
) STEP
|
||||||
|
SET
|
||||||
|
SH.ORDR_STTUS_CD = STEP.ORDR_STTUS_CD
|
||||||
|
,SH.MNGR_INNB = #{updusr}
|
||||||
|
,SH.UPDT_DT = SYSDATE()
|
||||||
|
WHERE 1 = 1
|
||||||
|
AND SH.SOPMAL_CD = STEP.SOPMAL_CD
|
||||||
|
AND SH.ORDR_INNB = STEP.ORDR_INNB
|
||||||
|
AND SH.ORDR_DLVY_INNB = STEP.ORDR_DLVY_INNB
|
||||||
|
]]>
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<!-- 출고 처리 후 주문 상태 변경
|
||||||
|
UPDATE GC_ORDER O SET
|
||||||
|
O.ORDR_STTUS_CD =
|
||||||
|
CASE
|
||||||
|
WHEN EXISTS (
|
||||||
|
SELECT
|
||||||
|
1
|
||||||
|
FROM GC_ORDER_SHIPPING SH
|
||||||
|
WHERE O.SOPMAL_CD = SH.SOPMAL_CD
|
||||||
|
AND O.ORDR_INNB = SH.ORDR_INNB
|
||||||
|
AND SH.ORDR_STTUS_CD = '60'
|
||||||
|
) THEN '60'
|
||||||
|
WHEN EXISTS (
|
||||||
|
SELECT
|
||||||
|
1
|
||||||
|
FROM GC_ORDER_SHIPPING SH
|
||||||
|
WHERE O.SOPMAL_CD = SH.SOPMAL_CD
|
||||||
|
AND O.ORDR_INNB = SH.ORDR_INNB
|
||||||
|
AND SH.ORDR_STTUS_CD = '65'
|
||||||
|
) THEN '65'
|
||||||
|
ELSE ORDR_STTUS_CD
|
||||||
|
END
|
||||||
|
WHERE O.SOPMAL_CD = #{sopmalCd}
|
||||||
|
AND O.ORDR_INNB = #{ordrInnb}
|
||||||
|
AND O.USE_AT = 'Y'
|
||||||
|
-->
|
||||||
|
<update id="updateBOOrdrStatusUpdt6575">
|
||||||
|
<![CDATA[
|
||||||
|
UPDATE
|
||||||
|
GC_ORDER O,
|
||||||
|
(SELECT CASE WHEN MAX(SH.ORDR_STTUS_CD) = MIN(SH.ORDR_STTUS_CD) THEN MAX(SH.ORDR_STTUS_CD)
|
||||||
|
ELSE CAST(MAX(SH.ORDR_STTUS_CD) - 5 AS CHAR(2))
|
||||||
|
END ORDR_STTUS_CD
|
||||||
|
, O.SOPMAL_CD, O.ORDR_INNB
|
||||||
|
FROM GC_ORDER O
|
||||||
|
INNER JOIN GC_ORDER_SHIPPING SH
|
||||||
|
ON O.SOPMAL_CD = SH.SOPMAL_CD
|
||||||
|
AND O.ORDR_INNB = SH.ORDR_INNB
|
||||||
|
AND SH.ORDR_STTUS_CD <> '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.MNGR_INNB = #{updusr}
|
||||||
|
,O.UPDT_DT = SYSDATE()
|
||||||
|
WHERE 1 = 1
|
||||||
|
AND O.SOPMAL_CD = STEP.SOPMAL_CD
|
||||||
|
AND O.ORDR_INNB = STEP.ORDR_INNB
|
||||||
|
AND O.USE_AT = 'Y'
|
||||||
|
]]>
|
||||||
|
</update>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
Reference in New Issue
Block a user