fix : 관리자 결제취소, 환불 원화추가

This commit is contained in:
jazz
2026-03-12 14:28:09 +09:00
parent da578da9e0
commit df09e3911d
8 changed files with 198 additions and 88 deletions

View File

@@ -993,6 +993,12 @@ public interface BOOrdrMapper {
* @return List<DataMap> * @return List<DataMap>
*/ */
public List<DataMap> selectMbrSubsvcOrdrList(BOOrdrDlvyVO ordrDlvyVO); public List<DataMap> selectMbrSubsvcOrdrList(BOOrdrDlvyVO ordrDlvyVO);
/**
* 최종 한화금액이 결제금액보다 많은지 체크하여 환불금액(원화) update
* @param refundVO
*/
public void updateBOWonRefundAmt(BOOrdrRefundVO refundVO);
} }

View File

@@ -2655,9 +2655,10 @@ public class BOOrdrService{
mapper.updateBOFinalReturnDlvyAmtUpdt(refundVO); mapper.updateBOFinalReturnDlvyAmtUpdt(refundVO);
} }
/** ------------------------------------------ 반품 배송비 산정 END ------------------------------------------ */ /** ------------------------------------------ 반품 배송비 산정 END ------------------------------------------ */
/* 한화금액이 결제금액보다 많은지 체크하여 환불금액(원화) update */
mapper.updateBOWonRefundAmt(refundVO);
// 수동환불 처리 세팅 // 수동환불 처리 세팅
@@ -2689,8 +2690,6 @@ public class BOOrdrService{
message.put("adcript", adcriptContent); message.put("adcript", adcriptContent);
BOOrdrRefundVO resultRefundVO = refundMapper.selectBORtngudDtlInqire(refundVO); BOOrdrRefundVO resultRefundVO = refundMapper.selectBORtngudDtlInqire(refundVO);
if (!StringUtils.isEmpty(resultRefundVO.getOrderRefundInnb()) && !StringUtils.isEmpty(resultRefundVO.getRefundCd())) { if (!StringUtils.isEmpty(resultRefundVO.getOrderRefundInnb()) && !StringUtils.isEmpty(resultRefundVO.getRefundCd())) {

View File

@@ -248,7 +248,7 @@ public interface BORtngudrefndMapper {
* @param boRtngudrefndVO * @param boRtngudrefndVO
* @return * @return
*/ */
public Integer selectBOORderRefundAmtSumInqire(BORtngudrefndVO boRtngudrefndVO); public DataMap selectBOORderRefundAmtSumInqire(BORtngudrefndVO boRtngudrefndVO);
/** /**

View File

@@ -31,6 +31,7 @@ import com.wb.domainserver.domain.gcone.setup.site.mapper.BOSiteMapper;
import com.wb.domainserver.domain.gcone.setup.site.vo.BOSetupContentsItemVO; import com.wb.domainserver.domain.gcone.setup.site.vo.BOSetupContentsItemVO;
import com.wb.domainserver.exception.WnbtRestException; import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.util.string.StringUtil; import com.wb.domainserver.util.string.StringUtil;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -249,7 +250,6 @@ public class BORtngudrefndService {
try { try {
if (boRtngudrefndVO.getRefundProcsSttusCd() != null) { if (boRtngudrefndVO.getRefundProcsSttusCd() != null) {
if (boRtngudrefndVO.getReturnCstmrTelnb() != null) { if (boRtngudrefndVO.getReturnCstmrTelnb() != null) {
@@ -278,28 +278,38 @@ public class BORtngudrefndService {
} }
} }
/*한화금액이 결제금액보다 많은지 체크하여 환불금액(원화) update를 위한 파라미터 셋팅*/
BOOrdrRefundVO refundVO = new BOOrdrRefundVO();
refundVO.setSopmalCd(boRtngudrefndVO.getSopmalCd());
refundVO.setOrdrInnb(new BigInteger(boRtngudrefndVO.getOrdrInnb()));
refundVO.setOrderRefundInnb(boRtngudrefndVO.getOrderRefundInnb());
if ( "01".equals(boRtngudrefndVO.getRefundTyCd()) ) { // 결제 취소 if ( "01".equals(boRtngudrefndVO.getRefundTyCd()) ) { // 결제 취소
if ("01".equals(boRtngudrefndVO.getRefundProcsSttusCd())) { if ("01".equals(boRtngudrefndVO.getRefundProcsSttusCd())) { // 환불신청
// TODO : 신청일때 로직 // TODO : 신청일때 로직
mapper.updateBOOrderReSttusUpdt(boRtngudrefndVO); // 반품/환불 상태값 수정 mapper.updateBOOrderReSttusUpdt(boRtngudrefndVO); // 반품/환불 상태값 수정
/* 한화금액이 결제금액보다 많은지 체크하여 환불금액(원화) update */
ordrMapper.updateBOWonRefundAmt(refundVO);
} else if ("02".equals(boRtngudrefndVO.getRefundProcsSttusCd())) { } else if ("02".equals(boRtngudrefndVO.getRefundProcsSttusCd())) { //환불진행중
if ("01".equals(boRtngudrefndVO.getOldRefundProcsSttusCd())) { if ("01".equals(boRtngudrefndVO.getOldRefundProcsSttusCd())) { //이전 환불진행상태 = 환불신청
orderRefundSttusUpdtPorcs(boRtngudrefndVO); // 주문에 환불건 관련 상태 및 수량 업데이트 orderRefundSttusUpdtPorcs(boRtngudrefndVO); // 주문에 환불건 관련 상태 및 수량 업데이트
} }
if ( "02".equals(boRtngudrefndVO.getRefundMthCd()) ) { if ( "02".equals(boRtngudrefndVO.getRefundMthCd()) ) { //환불방법 = 무통장계좌이체
mapper.updateBOOrderReSttusUpdt(boRtngudrefndVO); // 반품/환불 상태값 수정 mapper.updateBOOrderReSttusUpdt(boRtngudrefndVO); // 반품/환불 상태값 수정
/* 한화금액이 결제금액보다 많은지 체크하여 환불금액(원화) update */
ordrMapper.updateBOWonRefundAmt(refundVO);
} else { } else {
// message = updateBORefundProcsProcess(boRtngudrefndVO); // 완료시에만 환불 처리 // message = updateBORefundProcsProcess(boRtngudrefndVO); // 완료시에만 환불 처리
} }
} else if ("03".equals(boRtngudrefndVO.getRefundProcsSttusCd())) { } else if ("03".equals(boRtngudrefndVO.getRefundProcsSttusCd())) { //환불완료
if ("01".equals(boRtngudrefndVO.getOldRefundProcsSttusCd())) { // 신청에서 완료처리시 if ("01".equals(boRtngudrefndVO.getOldRefundProcsSttusCd())) { // 이전 환불진행상태 = 환불신청 => 신청에서 완료처리시
orderRefundSttusUpdtPorcs(boRtngudrefndVO); // 주문에 환불건 관련 상태 및 수량 업데이트 orderRefundSttusUpdtPorcs(boRtngudrefndVO); // 주문에 환불건 관련 상태 및 수량 업데이트
} }
@@ -313,6 +323,8 @@ public class BORtngudrefndService {
log.debug("상태 업데이트 파라미터 확인 : {}", boRtngudrefndVO); log.debug("상태 업데이트 파라미터 확인 : {}", boRtngudrefndVO);
mapper.updateBOOrderReSttusUpdt(boRtngudrefndVO); // 반품/환불 상태값 수정 mapper.updateBOOrderReSttusUpdt(boRtngudrefndVO); // 반품/환불 상태값 수정
/* 한화금액이 결제금액보다 많은지 체크하여 환불금액(원화) update */
ordrMapper.updateBOWonRefundAmt(refundVO);
} else if ( "02".equals(boRtngudrefndVO.getRefundProcsSttusCd()) && "02".equals(boRtngudrefndVO.getReturnProcsSttusCd()) ) { // 상품 받은거 확인하고 돈을 입금하지않았을 경우 } else if ( "02".equals(boRtngudrefndVO.getRefundProcsSttusCd()) && "02".equals(boRtngudrefndVO.getReturnProcsSttusCd()) ) { // 상품 받은거 확인하고 돈을 입금하지않았을 경우
@@ -321,6 +333,8 @@ public class BORtngudrefndService {
} }
mapper.updateBOOrderReSttusUpdt(boRtngudrefndVO); // 반품/환불 상태값 수정 mapper.updateBOOrderReSttusUpdt(boRtngudrefndVO); // 반품/환불 상태값 수정
/* 한화금액이 결제금액보다 많은지 체크하여 환불금액(원화) update */
ordrMapper.updateBOWonRefundAmt(refundVO);
} else if ( "03".equals(boRtngudrefndVO.getRefundProcsSttusCd()) && "02".equals(boRtngudrefndVO.getReturnProcsSttusCd()) ) { // 상품 받은거 확인하고 } else if ( "03".equals(boRtngudrefndVO.getRefundProcsSttusCd()) && "02".equals(boRtngudrefndVO.getReturnProcsSttusCd()) ) { // 상품 받은거 확인하고
@@ -466,21 +480,35 @@ public class BORtngudrefndService {
Long lordrInnb = Long.valueOf(ordrInnb); Long lordrInnb = Long.valueOf(ordrInnb);
BigInteger intOrdrInnb = BigInteger.valueOf(lordrInnb); BigInteger intOrdrInnb = BigInteger.valueOf(lordrInnb);
String sopmalCd = refundVO.getSopmalCd(); String sopmalCd = refundVO.getSopmalCd();
Integer refundAmt = 0; Integer refundAmt = 0; //현재 상품환불금액
Integer wonRefundAmt = 0; //현재 상품환불금액(원화)
if (!CollectionUtils.isEmpty(orderReItemVOList)) { if (!CollectionUtils.isEmpty(orderReItemVOList)) {
refundAmt = orderReItemVOList.stream() refundAmt = orderReItemVOList.stream()
.mapToInt(BOOrderReItemVO::getGoodsRefundAmt) .mapToInt(BOOrderReItemVO::getGoodsRefundAmt)
.sum(); .sum();
} else { } else {
refundAmt = Integer.parseInt(refundVO.getRefundAmt()); // 현재 환불 금액 refundAmt = Integer.parseInt(refundVO.getRefundAmt()); // 현재 상품환불금액
}
wonRefundAmt = Integer.parseInt(refundVO.getWonRefundAmt()); //현재 상품환불금액(원화)
DataMap beforeRefund = mapper.selectBOORderRefundAmtSumInqire(refundVO);
Integer orderRefundAmtSum = 0; // 해당주문의 이전 총환불금액
Integer wonOrderRefundAmtSum = 0; // 해당주문의 이전 총환불금액(원화)
if(!ObjectUtils.isEmpty(beforeRefund)) {
orderRefundAmtSum = ((BigDecimal) beforeRefund.get("orderRefundAmtSum")).intValue(); // 해당주문의 이전 총환불금액
wonOrderRefundAmtSum = ((BigDecimal)beforeRefund.get("wonOrderRefundAmtSum")).intValue(); // 해당주문의 이전 총환불금액(원화)
} }
Integer orderRefundAmtSum = mapper.selectBOORderRefundAmtSumInqire(refundVO); // 해당 주문의 총 환불금액
Integer dlvyAmtRefundAmt = 0; // 최종 배송비 처리 금액 ( 환불 배송비, 반품 배송비 조건에 따라 변동 ) Integer dlvyAmtRefundAmt = 0; // 최종 배송비 처리 금액 ( 환불 배송비, 반품 배송비 조건에 따라 변동 )
Integer wonDlvyAmtRefundAmt = 0; // 최종 배송비 처리 금액 ( 환불 배송비, 반품 배송비 조건에 따라 변동 )
Integer refundDlvyAmt = 0; // 환불 배송비 금액 Integer refundDlvyAmt = 0; // 환불 배송비 금액
Integer wonRefundDlvyAmt = 0; // 환불 배송비 금액
Integer finalRefundAmt = 0; Integer finalRefundAmt = 0;
Integer finalWonRefundAmt = 0;
finalRefundAmt = refundAmt; finalRefundAmt = refundAmt;
finalWonRefundAmt = wonRefundAmt;
try { try {
@@ -506,16 +534,19 @@ public class BORtngudrefndService {
*/ */
refundDlvyAmt = Integer.parseInt(refundVO.getRefundDlvyAmt()); refundDlvyAmt = Integer.parseInt(refundVO.getRefundDlvyAmt());
wonRefundDlvyAmt = Integer.parseInt(refundVO.getWonRefundDlvyAmt());
log.debug("여기 아래부터 배송비랑 환불금액 산정하는데 그전에 refundVO 데이터 확인 : {}", refundVO); log.debug("여기 아래부터 배송비랑 환불금액 산정하는데 그전에 refundVO 데이터 확인 : {}", refundVO);
if ("01".equals(refundVO.getRefundTyCd())) { if ("01".equals(refundVO.getRefundTyCd())) {
refundAmt += refundDlvyAmt; // 환불 배송비 포함 반품 refundAmt += refundDlvyAmt; // 환불 배송비 포함 반품
wonRefundAmt += wonRefundDlvyAmt;
refundVO.setDlvyAmtRefundAmt("0"); refundVO.setDlvyAmtRefundAmt("0");
} else if ("02".equals(refundVO.getRefundTyCd())) { } else if ("02".equals(refundVO.getRefundTyCd())) {
dlvyAmtRefundAmt = Integer.parseInt(refundVO.getReturnDlvyAmt()); dlvyAmtRefundAmt = Integer.parseInt(refundVO.getReturnDlvyAmt());
wonDlvyAmtRefundAmt = Integer.parseInt(refundVO.getWonReturnDlvyAmt());
// 배송비 책임 // 배송비 책임
if ("01".equals(refundVO.getReturnDlvyRspnsblCd())) { // 구매자 책임 if ("01".equals(refundVO.getReturnDlvyRspnsblCd())) { // 구매자 책임
@@ -530,12 +561,14 @@ public class BORtngudrefndService {
if ("02".equals(refundVO.getReturnDlvyPymntTyCd()) && refundVO.getReturnDlvyAmt() != null) { // 환불금액에서 차감 if ("02".equals(refundVO.getReturnDlvyPymntTyCd()) && refundVO.getReturnDlvyAmt() != null) { // 환불금액에서 차감
// refundAmt -= dlvyAmtRefundAmt; // refundAmt -= dlvyAmtRefundAmt;
refundAmt = refundAmt - dlvyAmtRefundAmt > 0 ? refundAmt - dlvyAmtRefundAmt : 0; refundAmt = refundAmt - dlvyAmtRefundAmt > 0 ? refundAmt - dlvyAmtRefundAmt : 0;
wonRefundAmt = wonRefundAmt - wonDlvyAmtRefundAmt > 0 ? wonRefundAmt - wonDlvyAmtRefundAmt : 0;
} }
refundVO.setDlvyAmtRefundAmt(StringUtil.isNullToString(dlvyAmtRefundAmt)); refundVO.setDlvyAmtRefundAmt(StringUtil.isNullToString(dlvyAmtRefundAmt));
} else if ("02".equals(refundVO.getReturnDlvyRspnsblCd())) { // 판매자 } else if ("02".equals(refundVO.getReturnDlvyRspnsblCd())) { // 판매자
refundAmt += refundDlvyAmt; // 환불 배송비 포함 반품 refundAmt += refundDlvyAmt; // 환불 배송비 포함 반품
wonRefundAmt += wonRefundDlvyAmt;
refundVO.setDlvyAmtRefundAmt("0"); refundVO.setDlvyAmtRefundAmt("0");
} }
@@ -568,13 +601,23 @@ public class BORtngudrefndService {
log.info("setle : {}", setle); log.info("setle : {}", setle);
Integer setleAmt = setle.getSetleAmt(); // 결제금액 Integer setleAmt = setle.getSetleAmt(); // 결제금액
Integer wonSetleAmt = setle.getWonSetleAmt(); // 결제금액(원화)
Integer remMnyAmt = setleAmt - orderRefundAmtSum; Integer remMnyAmt = setleAmt - orderRefundAmtSum;
log.info("이번 환불 결제건에서 환불할 금액 확인 remMnyAmt : {}", remMnyAmt); Integer wonRemMnyAmt = wonSetleAmt - wonOrderRefundAmtSum;
log.info("이번 환불 결제건에서 환불할 금액 확인 refundAmt : {}", refundAmt);
log.info("이번 환불 결제건에서 환불할 금액 확인 orderRefundAmtSum : {}", orderRefundAmtSum); log.info("이번 환불 결제건에서 환불할 금액 확인 remMnyAmt : {}, {}", remMnyAmt, wonRemMnyAmt);
log.info("이번 환불 결제건에서 환불할 금액 확인 refundAmt : {}, {}", refundAmt, wonRefundAmt);
log.info("이번 환불 결제건에서 환불할 금액 확인 orderRefundAmtSum : {}, {}", orderRefundAmtSum, wonOrderRefundAmtSum);
Integer cancelAmt = 0; // 취소금액 Integer cancelAmt = 0; // 취소금액
Integer wonCancelAmt = 0; // 취소금액(원화)
// 환불금액, 결제금액 - (이전환불금액 - 환불금액)
cancelAmt = Math.min(refundAmt, setleAmt - (orderRefundAmtSum - refundAmt)); cancelAmt = Math.min(refundAmt, setleAmt - (orderRefundAmtSum - refundAmt));
log.info("이번 환불 결제건에서 환불할 금액 확인 cancelAmt : {}", cancelAmt); wonCancelAmt = Math.min(wonRefundAmt, wonSetleAmt - (wonOrderRefundAmtSum - wonRefundAmt));
log.info("이번 환불 결제건에서 환불할 금액 확인 cancelAmt : {}, {}", cancelAmt, wonCancelAmt);
Integer receiptCancelAmt = cancelAmt; // 현금영수증 취소금액 Integer receiptCancelAmt = cancelAmt; // 현금영수증 취소금액
log.info("이번 환불 결제건에서 환불할 현금영수증 GC 머니 추가 전 금액 확인 receiptCancelAmt : {}", receiptCancelAmt); log.info("이번 환불 결제건에서 환불할 현금영수증 GC 머니 추가 전 금액 확인 receiptCancelAmt : {}", receiptCancelAmt);
@@ -734,6 +777,7 @@ public class BORtngudrefndService {
} }
/************************** KCP 환불 코드 세팅 END *************************/ /************************** KCP 환불 코드 세팅 END *************************/
// 02:무통장계좌이체, 08:마일리지, 13:수동
if ("02".equals(setle.getSetleTyCd()) || "08".equals(setle.getSetleTyCd()) || "13".equals(setle.getSetleTyCd())) { if ("02".equals(setle.getSetleTyCd()) || "08".equals(setle.getSetleTyCd()) || "13".equals(setle.getSetleTyCd())) {
if ("02".equals(setle.getSetleTyCd())) { // 무통장입금 if ("02".equals(setle.getSetleTyCd())) { // 무통장입금
@@ -788,9 +832,7 @@ public class BORtngudrefndService {
// TODO : // TODO :
} else if ("08".equals(setle.getSetleTyCd())) { // 마일리지 } else if ("09".equals(setle.getSetleTyCd())) {
// 마일리지 사용취소로 처리
} else if ("09".equals(setle.getSetleTyCd())) {
// 포스 환불은 포스기계쪽에서 처리됌 GCONE 에서는 데이터 처리만 진행 // 포스 환불은 포스기계쪽에서 처리됌 GCONE 에서는 데이터 처리만 진행
} else if ("11".equals(setle.getSetleTyCd())) { // TODO : 복합 결제 취소 로직 확인 필요 } else if ("11".equals(setle.getSetleTyCd())) { // TODO : 복합 결제 취소 로직 확인 필요
@@ -812,9 +854,9 @@ public class BORtngudrefndService {
payVO.setCancelReason(refundVO.getRefundResnCn()); // 취소사유 payVO.setCancelReason(refundVO.getRefundResnCn()); // 취소사유
if ("01".equals(refundVO.getRefundScopeCd())) { if ("01".equals(refundVO.getRefundScopeCd())) {
payVO.setCancelAmount(String.valueOf(cancelAmt)); // 취소금액 ( 금액이 없으면 전체취소 ) payVO.setCancelAmount(String.valueOf(wonCancelAmt)); // 취소금액 ( 금액이 없으면 전체취소 )
} else if ("02".equals(refundVO.getRefundScopeCd())) { } else if ("02".equals(refundVO.getRefundScopeCd())) {
payVO.setCancelAmount(String.valueOf(cancelAmt)); // 취소금액 ( 금액이 없으면 전체취소 ) payVO.setCancelAmount(String.valueOf(wonCancelAmt)); // 취소금액 ( 금액이 없으면 전체취소 )
} }
payVO.setBank(refundVO.getRefundAcntBnnkCd()); // 환불 은행코드 payVO.setBank(refundVO.getRefundAcntBnnkCd()); // 환불 은행코드
@@ -841,10 +883,12 @@ public class BORtngudrefndService {
payVO.setMId(setle.getSetleMid()); // 결제 MID(상점키) payVO.setMId(setle.getSetleMid()); // 결제 MID(상점키)
payVO.setPaymentKey(setle.getDelngNb()); // 거래번호 payVO.setPaymentKey(setle.getDelngNb()); // 거래번호
log.info("토스 취소 파라미터 확인 : {}", payVO); log.info("토스 취소 파라미터 확인 : {}", payVO);
setleCancelResultMessage = payService.cancelTossPay(payVO); setleCancelResultMessage = payService.cancelTossPay(payVO);
log.info("결제 취소 API 결과 확인 : {}", setleCancelResultMessage); log.info("결제 취소 API 결과 확인 : {}", setleCancelResultMessage);
log.info("결제 취소 API 결과 확인 : {}", setleCancelResultMessage.get("response")); log.info("결제 취소 API 결과 확인 : {}", setleCancelResultMessage.get("response"));
String jsonString = (String) setleCancelResultMessage.get("response"); String jsonString = (String) setleCancelResultMessage.get("response");
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
responseMap = objectMapper.readValue(jsonString, Map.class); responseMap = objectMapper.readValue(jsonString, Map.class);
@@ -984,7 +1028,7 @@ public class BORtngudrefndService {
payVO.setSetleTyCd(setle.getSetleTyCd()); // 결제 유형 코드 payVO.setSetleTyCd(setle.getSetleTyCd()); // 결제 유형 코드
payVO.setCancelReason(refundVO.getRefundResnCn()); // 취소사유 payVO.setCancelReason(refundVO.getRefundResnCn()); // 취소사유
payVO.setCancelAmount(String.valueOf(cancelAmt)); // 취소금액 ( 금액이 없으면 전체취소 ) payVO.setCancelAmount(String.valueOf(wonCancelAmt)); // 취소금액 ( 금액이 없으면 전체취소 )
payVO.setBank(refundVO.getRefundAcntBnnkCd()); // 계좌 입금 후 취소시 환불은행코드? payVO.setBank(refundVO.getRefundAcntBnnkCd()); // 계좌 입금 후 취소시 환불은행코드?
payVO.setAccountNumber(refundVO.getRefundAcntnb()); // 환불 계좌번호 payVO.setAccountNumber(refundVO.getRefundAcntnb()); // 환불 계좌번호
@@ -992,8 +1036,8 @@ public class BORtngudrefndService {
payVO.setTno(setle.getDelngNb()); // 거래번호 payVO.setTno(setle.getDelngNb()); // 거래번호
payVO.setModType(refundModeType); // 전체 취소, 부분 취소 payVO.setModType(refundModeType); // 전체 취소, 부분 취소
payVO.setModMny(String.valueOf(cancelAmt)); // 부분취소 요청 금액 payVO.setModMny(String.valueOf(wonCancelAmt)); // 부분취소 요청 금액
payVO.setRemMny(String.valueOf(remMnyAmt)); // 부분취소 가능 금액 payVO.setRemMny(String.valueOf(wonRemMnyAmt)); // 부분취소 가능 금액
payVO.setSubModType(sub_mod_type); // 전체 취소, 부분 취소 payVO.setSubModType(sub_mod_type); // 전체 취소, 부분 취소
@@ -1202,6 +1246,7 @@ public class BORtngudrefndService {
// ########################################### 최종 반품/환불 상태변경 ########################################### // ########################################### 최종 반품/환불 상태변경 ###########################################
boRtngudrefndVO.setRefundAmt(String.valueOf(finalRefundAmt)); boRtngudrefndVO.setRefundAmt(String.valueOf(finalRefundAmt));
boRtngudrefndVO.setWonRefundAmt(String.valueOf(finalWonRefundAmt));
boRtngudrefndVO.setDlvyAmtRefundAmt(refundVO.getDlvyAmtRefundAmt()); boRtngudrefndVO.setDlvyAmtRefundAmt(refundVO.getDlvyAmtRefundAmt());
boRtngudrefndVO.setRefundProcsSttusCd("03"); boRtngudrefndVO.setRefundProcsSttusCd("03");
log.debug("환불 상태값이랑 정보 수정하기 전 boRtngudrefndVO :: {}", boRtngudrefndVO); log.debug("환불 상태값이랑 정보 수정하기 전 boRtngudrefndVO :: {}", boRtngudrefndVO);

View File

@@ -23,6 +23,8 @@ public class BORefundSetleVO extends AbstractVO {
private Integer setleAmt; private Integer setleAmt;
private Integer wonSetleAmt;
private String pgCmpnyNm; private String pgCmpnyNm;
private String pgInnb; private String pgInnb;

View File

@@ -15,7 +15,7 @@ public class BORtngudrefndVO extends AbstractVO{
private String ordrDlvyInnb; private String ordrDlvyInnb;
private String[] ordrDlvyInnbArr; private String[] ordrDlvyInnbArr;
//쇼핑몰코드 /**쇼핑몰코드*/
private String sopmalCd; private String sopmalCd;
//TODO:: 추후 SESSION에서 처리 사용자,관리자 구분 //TODO:: 추후 SESSION에서 처리 사용자,관리자 구분
private String usrDv; private String usrDv;
@@ -25,69 +25,71 @@ public class BORtngudrefndVO extends AbstractVO{
private String orderReInnb; private String orderReInnb;
private String refundCd; // 환불 코드 번호 private String refundCd; // 환불 코드 번호
private String orderRefundInnb; private String orderRefundInnb;
/*주문고유번호*/ /**주문고유번호*/
private String ordrInnb; private String ordrInnb;
/*환불신청일시*/ /**환불신청일시*/
private String refundReqstDt; private String refundReqstDt;
/*환불완료일시*/ /**환불완료일시*/
private String refundComptDt; private String refundComptDt;
/*신청(request), 처리중(ing), 완료(complete)*/ /**신청(request), 처리중(ing), 완료(complete)*/
private String refundProcsSttusCd; private String refundProcsSttusCd;
/*신청(request), 처리중(ing), 완료(complete) 이전 상태 */ /**신청(request), 처리중(ing), 완료(complete) 이전 상태 */
private String oldRefundProcsSttusCd; private String oldRefundProcsSttusCd;
/*결제취소(cancel_payment),반품환불(return),배송비환불(shipping_price)*/ /**결제취소(cancel_payment),반품환불(return),배송비환불(shipping_price)*/
private String refundTyCd; private String refundTyCd;
/*전체취소(full), 부분취소(partial)*/ /**전체취소(full), 부분취소(partial)*/
private String refundScopeCd; private String refundScopeCd;
/*환불사유내용*/ /**환불사유내용*/
private String refundResnCn; private String refundResnCn;
/*계좌이체(account), 무통장(bank), 신용카드(card), 수동(manual), ?(payco_coupon), 포스기기(pos)*/ /**계좌이체(account), 무통장(bank), 신용카드(card), 수동(manual), ?(payco_coupon), 포스기기(pos)*/
private String refundMthCd; private String refundMthCd;
/** 환불계좌은행코드 */ /** 환불계좌은행코드 */
private String refundAcntBnnkCd; // 환불계좌은행코드 private String refundAcntBnnkCd; // 환불계좌은행코드
/*환불계좌은행명*/ /**환불계좌은행명*/
private String refundAcntBnnkNm; private String refundAcntBnnkNm;
/*환불계좌예금주명*/ /**환불계좌예금주명*/
private String refundAcntDpstrNm; private String refundAcntDpstrNm;
/*환불계좌번호*/ /**환불계좌번호*/
private String refundAcntnb; private String refundAcntnb;
/*환불금액*/ /**환불금액*/
private String refundAmt; private String refundAmt;
/*환불적립금액*/ /**환불금액(원화)*/
private String wonRefundAmt;
/**환불적립금액*/
private Integer refundAccmlmnyAmt; private Integer refundAccmlmnyAmt;
/*배송비환불총금액*/ /**배송비환불총금액*/
private Integer dlvyAmtTotRefundAmt; private Integer dlvyAmtTotRefundAmt;
/*쿠폰할인보정금액*/ /**쿠폰할인보정금액*/
private Integer coupDscntRevisnAmt; private Integer coupDscntRevisnAmt;
/*적립금보정금액*/ /**적립금보정금액*/
private Integer accmlmnyRevisnAmt; private Integer accmlmnyRevisnAmt;
/*에누리보정금액*/ /**에누리보정금액*/
private Integer enuriRevisnAmt; private Integer enuriRevisnAmt;
/*적립금유효일자*/ /**적립금유효일자*/
private String accmlmnyValidDe; private String accmlmnyValidDe;
/*다운로드쿠폰 고유번호*/ /**다운로드쿠폰 고유번호*/
private String dwldCouponInnb; private String dwldCouponInnb;
/*상태메모내용*/ /**상태메모내용*/
private String sttusMemoCn; private String sttusMemoCn;
/*관리자메모내용*/ /**관리자메모내용*/
private String mngrMemoCn; private String mngrMemoCn;
/*관리자 고유번호*/ /**관리자 고유번호*/
private String mngrInnb; private String mngrInnb;
/*스마트쇼핑환불신청일시*/ /**스마트쇼핑환불신청일시*/
private String smrtShopngRefndReqstDt; private String smrtShopngRefndReqstDt;
/*스마트쇼핑환불완료일시*/ /**스마트쇼핑환불완료일시*/
private String smrtShopngRefndComptDt; private String smrtShopngRefndComptDt;
/*cancel_done, refund_request*/ /**cancel_done, refund_request*/
private String smrtShopngRefndProcsSttusCd; private String smrtShopngRefndProcsSttusCd;
/*스마트쇼핑클레임발생금액*/ /**스마트쇼핑클레임발생금액*/
private Integer smrtShopngClaimOccrrncAmt; private Integer smrtShopngClaimOccrrncAmt;
/*스마트쇼핑초도배송비금액*/ /**스마트쇼핑초도배송비금액*/
private Integer smrtShopngFrsttmeDlvyAmtAmt; private Integer smrtShopngFrsttmeDlvyAmtAmt;
/*반품환불보류상품번호내용*/ /**반품환불보류상품번호내용*/
private String returnRefndDferGoodsNbCn; private String returnRefndDferGoodsNbCn;
/*사용여부*/ /**사용여부*/
private String useAt; private String useAt;
/*처리대상자 구분*/ /**처리대상자 구분*/
private String procsTargetDv; private String procsTargetDv;
private String returnCd; // 반품 코드 private String returnCd; // 반품 코드
/**신청(request), 완료(complete), 철회(retraction)*/ /**신청(request), 완료(complete), 철회(retraction)*/
@@ -108,6 +110,8 @@ public class BORtngudrefndVO extends AbstractVO{
private String returnCstmrMbtlnb; private String returnCstmrMbtlnb;
/** 반품배송비금액 */ /** 반품배송비금액 */
private String returnDlvyAmt; private String returnDlvyAmt;
/** 반품배송비금액(원화) */
private String wonReturnDlvyAmt;
/** company,provider */ /** company,provider */
private String returnDlvyAmtRecptTrgetCd; private String returnDlvyAmtRecptTrgetCd;
/**구매자(buyer), 판매자(seller)*/ /**구매자(buyer), 판매자(seller)*/
@@ -144,10 +148,14 @@ public class BORtngudrefndVO extends AbstractVO{
private String smrtShopngReturnProcsSttusCd; private String smrtShopngReturnProcsSttusCd;
/** 배송비환불금액 */ /** 배송비환불금액 */
private String dlvyAmtRefundAmt; private String dlvyAmtRefundAmt;
/** 배송비환불금액(원화) */
private String wonDlvyAmtRefundAmt;
/** 지번 or 도로명 주소 */ /** 지번 or 도로명 주소 */
private String lnbOrRnmAdres; private String lnbOrRnmAdres;
/** 환불배송비총금액 */ /** 환불배송비총금액 */
private String refundDlvyAmt; private String refundDlvyAmt;
/** 환불배송비총금액(원화) */
private String wonRefundDlvyAmt;
/** 반품 환불 상품 옵션 리스트 */ /** 반품 환불 상품 옵션 리스트 */
private List<BOOrderReItemVO> orderReItemVOList; private List<BOOrderReItemVO> orderReItemVOList;
/**상세 내용*/ /**상세 내용*/
@@ -167,11 +175,11 @@ public class BORtngudrefndVO extends AbstractVO{
public String endDt; public String endDt;
//날짜 검색 구분 //날짜 검색 구분
private String srchDtDv; private String srchDtDv;
//** 반품처리상태 */ /** 반품처리상태 */
private String[] srchReturnProcsStuusCd; private String[] srchReturnProcsStuusCd;
//** 환불처리상태 */ /** 환불처리상태 */
private String[] srchRefundProcsSttusCd; private String[] srchRefundProcsSttusCd;
//** 회수방법(반품) */ /** 회수방법(반품) */
private String srchReturnMthCd; private String srchReturnMthCd;
/**검색시작일*/ /**검색시작일*/
public String srchStartDate; public String srchStartDate;
@@ -189,9 +197,9 @@ public class BORtngudrefndVO extends AbstractVO{
private String mbtlnb; private String mbtlnb;
/** 회원타입코드 */ /** 회원타입코드 */
private String mbrTyCd; private String mbrTyCd;
/*시크릿 키*/ /**시크릿 키*/
private String secretKey; private String secretKey;
/*회원 사이트정보 갱신용*/ /**회원 사이트정보 갱신용*/
private String siteMbrInnb; private String siteMbrInnb;
private String siteMbrDvCd; private String siteMbrDvCd;
@@ -200,7 +208,7 @@ public class BORtngudrefndVO extends AbstractVO{
/** 실 환불 GC 머니 금액 */ /** 실 환불 GC 머니 금액 */
private String prosbleCancelCashAmt; private String prosbleCancelCashAmt;
//** 반품처리상태 */ /** 반품처리상태 */
private String[] returnProcsStuusCd; private String[] returnProcsStuusCd;
private String serverDv; private String serverDv;

View File

@@ -3920,6 +3920,7 @@
AND FOS.ORDR_INNB = FO.ORDR_INNB AND FOS.ORDR_INNB = FO.ORDR_INNB
WHERE FO.USE_AT = 'Y' WHERE FO.USE_AT = 'Y'
AND FO.SUBSVC_AT = 'N' /*구독서비스 제외*/ AND FO.SUBSVC_AT = 'N' /*구독서비스 제외*/
AND ( ( FO.ORDR_STTUS_CD BETWEEN '15' AND '75' ) OR FO.ORDR_STTUS_CD = '95' )
AND IFNULL(FOS.ORDR_INNB, '') != '' AND IFNULL(FOS.ORDR_INNB, '') != ''
AND FO.SOPMAL_CD = #{sopmalCd} AND FO.SOPMAL_CD = #{sopmalCd}
AND FO.MBR_DV_CD = #{mbrDvCd} AND FO.MBR_DV_CD = #{mbrDvCd}
@@ -5587,6 +5588,32 @@
) PV ) PV
LIMIT #{recordCountPerPage} OFFSET #{firstIndex} LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select> </select>
<!-- 한화금액이 결제금액보다 많은지 체크하여 환불금액(원화) update -->
<update id="updateBOWonRefundAmt" parameterType="com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrdrRefundVO">
<![CDATA[
WITH BF AS (SELECT MAX(O.WON_RL_SETLE_AMT) - IFNULL(SUM(IFNULL(GOR2.WON_REFUND_AMT,0))+SUM(IFNULL(GOR2.WON_REFUND_DLVY_AMT,0)),0) AS WON_REST_AMT
FROM GC_ORDER O
LEFT OUTER JOIN GC_ORDER_REFUND GOR2
ON GOR2.SOPMAL_CD = O.SOPMAL_CD
AND GOR2.ORDR_INNB = O.ORDR_INNB
AND GOR2.USE_AT = 'Y'
AND GOR2.REFUND_PROCS_STTUS_CD = '03'
AND GOR2.ORDER_REFUND_INNB != #{orderRefundInnb}
WHERE O.SOPMAL_CD = #{sopmalCd}
AND O.ORDR_INNB = #{ordrInnb}
)
UPDATE GC_ORDER_REFUND
SET WON_REFUND_AMT = (CASE
WHEN WON_REFUND_AMT + WON_REFUND_DLVY_AMT > (SELECT WON_REST_AMT FROM BF) THEN (SELECT WON_REST_AMT FROM BF) - WON_REFUND_DLVY_AMT
ELSE WON_REFUND_AMT
END)
, UPDT_DT = NOW()
WHERE SOPMAL_CD = #{sopmalCd}
AND ORDER_REFUND_INNB = #{orderRefundInnb}
]]>
</update>
</mapper> </mapper>

View File

@@ -1144,12 +1144,20 @@
</when> </when>
</choose> </choose>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(dlvyAmtRefundAmt)"> <if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(dlvyAmtRefundAmt)">
<![CDATA[DLVY_AMT_REFUND_AMT = #{dlvyAmtRefundAmt},]]> DLVY_AMT_REFUND_AMT = #{dlvyAmtRefundAmt},
WON_DLVY_AMT_REFUND_AMT = ROUND((SELECT GO2.BUY_RATE FROM GC_ORDER GO2 WHERE GO2.SOPMAL_CD = #{sopmalCd} AND GO2.ORDR_INNB = #{ordrInnb}) * #{dlvyAmtRefundAmt}, 0),
</if> </if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(refundAmt)"> <if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(refundAmt)">
REFUND_AMT = #{refundAmt}, REFUND_AMT = #{refundAmt},
WON_REFUND_AMT = ROUND((SELECT GO2.BUY_RATE FROM GC_ORDER GO2 WHERE GO2.SOPMAL_CD = #{sopmalCd} AND GO2.ORDR_INNB = #{ordrInnb}) * #{refundAmt}, 0) ,
</if> </if>
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(refundAmt) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(wonRefundAmt)">
WON_REFUND_AMT = ROUND((SELECT GO2.BUY_RATE FROM GC_ORDER GO2 WHERE GO2.SOPMAL_CD = #{sopmalCd} AND GO2.ORDR_INNB = #{ordrInnb}) * #{refundAmt}, 0) ,
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(refundAmt) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(wonRefundAmt)">
WON_REFUND_AMT = #{wonRefundAmt},
</when>
</choose>
MNGR_INNB = #{updusr}, MNGR_INNB = #{updusr},
UPDT_DT = SYSDATE() UPDT_DT = SYSDATE()
<![CDATA[ <![CDATA[
@@ -1347,8 +1355,10 @@
RE.REFUND_ACNT_DPSTR_NM, RE.REFUND_ACNT_DPSTR_NM,
RE.REFUND_ACNTNB, RE.REFUND_ACNTNB,
ROUND(RE.REFUND_AMT) AS REFUND_AMT, ROUND(RE.REFUND_AMT) AS REFUND_AMT,
ROUND(RE.WON_REFUND_AMT) AS WON_REFUND_AMT,
RE.REFUND_ACCMLMNY_AMT, RE.REFUND_ACCMLMNY_AMT,
ROUND(RE.REFUND_DLVY_AMT) AS REFUND_DLVY_AMT, ROUND(RE.REFUND_DLVY_AMT) AS REFUND_DLVY_AMT,
ROUND(RE.WON_REFUND_DLVY_AMT) AS WON_REFUND_DLVY_AMT,
RE.MLG_ACCMLMNY_AMT, RE.MLG_ACCMLMNY_AMT,
RE.MLG_ACCMLMNY_VALID_DT, RE.MLG_ACCMLMNY_VALID_DT,
RE.ENURI_REVISN_AMT, RE.ENURI_REVISN_AMT,
@@ -1369,6 +1379,7 @@
REGEXP_REPLACE(CAST(AES_DECRYPT(UNHEX(RE.RETURN_CSTMR_TELNB), '1df5be2f7e90ae36') AS CHAR(50)), '(.{3})(.{4})(.{4})', '$1-$2-$3') AS RETURN_CSTMR_TELNB, REGEXP_REPLACE(CAST(AES_DECRYPT(UNHEX(RE.RETURN_CSTMR_TELNB), '1df5be2f7e90ae36') AS CHAR(50)), '(.{3})(.{4})(.{4})', '$1-$2-$3') AS RETURN_CSTMR_TELNB,
REGEXP_REPLACE(CAST(AES_DECRYPT(UNHEX(RE.RETURN_CSTMR_MBTLNB), '1df5be2f7e90ae36') AS CHAR(50)), '(.{3})(.{4})(.{4})', '$1-$2-$3') AS RETURN_CSTMR_MBTLNB, REGEXP_REPLACE(CAST(AES_DECRYPT(UNHEX(RE.RETURN_CSTMR_MBTLNB), '1df5be2f7e90ae36') AS CHAR(50)), '(.{3})(.{4})(.{4})', '$1-$2-$3') AS RETURN_CSTMR_MBTLNB,
ROUND(RE.RETURN_DLVY_AMT) AS RETURN_DLVY_AMT, ROUND(RE.RETURN_DLVY_AMT) AS RETURN_DLVY_AMT,
ROUND(RE.RETURN_DLVY_AMT * O.BUY_RATE) AS WON_RETURN_DLVY_AMT,
RE.RETURN_DLVY_TRGET_CD, RE.RETURN_DLVY_TRGET_CD,
RE.RETURN_DLVY_RSPNSBL_CD, RE.RETURN_DLVY_RSPNSBL_CD,
RE.RETURN_DLVY_PYMNT_TY_CD, RE.RETURN_DLVY_PYMNT_TY_CD,
@@ -1388,7 +1399,10 @@
RE.REGIST_DT, RE.REGIST_DT,
RE.UPDT_DT, RE.UPDT_DT,
O.MBR_DV_CD, O.MBR_DV_CD,
O.MBR_INNB O.MBR_INNB,
O.BUY_RATE,
ROUND(RE.DLVY_AMT_REFUND_AMT) AS DLVY_AMT_REFUND_AMT,
ROUND(RE.DLVY_AMT_REFUND_AMT * O.BUY_RATE) AS WON_DLVY_AMT_REFUND_AMT
FROM FROM
GC_ORDER_REFUND RE GC_ORDER_REFUND RE
INNER JOIN GC_ORDER O ON RE.SOPMAL_CD = O.SOPMAL_CD INNER JOIN GC_ORDER O ON RE.SOPMAL_CD = O.SOPMAL_CD
@@ -1539,6 +1553,7 @@
,ST.SOPMAL_CD ,ST.SOPMAL_CD
,ST.ORDR_INNB ,ST.ORDR_INNB
,IFNULL(ST.SETLE_AMT, 0) AS SETLE_AMT -- 결제금액 ,IFNULL(ST.SETLE_AMT, 0) AS SETLE_AMT -- 결제금액
,IFNULL(ST.WON_SETLE_AMT, 0) AS WON_SETLE_AMT -- 결제금액
,ST.PG_CMPNY_NM -- pg 회사명 ,ST.PG_CMPNY_NM -- pg 회사명
,ST.PG_INNB -- pg고유번호 ,ST.PG_INNB -- pg고유번호
,ST.SETLE_TY_CD ,ST.SETLE_TY_CD
@@ -1572,28 +1587,36 @@
<!-- 주문 환불 총 금액 --> <!-- 주문 환불 총 금액 -->
<select id="selectBOORderRefundAmtSumInqire" <select id="selectBOORderRefundAmtSumInqire"
parameterType="com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.vo.BORtngudrefndVO" parameterType="com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.vo.BORtngudrefndVO"
resultType="Integer"> resultType="dataMap">
<![CDATA[ <![CDATA[
SELECT SELECT ROUND(
IFNULL(( SUM(
SELECT ROUND( CASE
SUM( WHEN RE.REFUND_TY_CD = '01' THEN RE.REFUND_AMT + RE.REFUND_DLVY_AMT
CASE WHEN RE.REFUND_TY_CD = '02' THEN
WHEN RE.REFUND_TY_CD = '01' THEN RE.REFUND_AMT + RE.REFUND_DLVY_AMT CASE
WHEN RE.REFUND_TY_CD = '02' THEN WHEN RE.RETURN_DLVY_PYMNT_TY_CD = '02' THEN GREATEST(RE.REFUND_AMT - IFNULL(RE.DLVY_AMT_REFUND_AMT, 0), 0)
CASE ELSE RE.REFUND_AMT
WHEN RE.RETURN_DLVY_PYMNT_TY_CD = '02' THEN GREATEST(RE.REFUND_AMT - IFNULL(RE.DLVY_AMT_REFUND_AMT, 0), 0) END
ELSE RE.REFUND_AMT END
END ), 0) AS ORDER_REFUND_AMT_SUM
END , ROUND(
), 0) SUM(
FROM GC_ORDER_REFUND RE CASE
WHERE RE.SOPMAL_CD = #{sopmalCd} WHEN RE.REFUND_TY_CD = '01' THEN RE.WON_REFUND_AMT + RE.WON_REFUND_DLVY_AMT
AND RE.ORDR_INNB = #{ordrInnb} WHEN RE.REFUND_TY_CD = '02' THEN
AND RE.ORDER_REFUND_INNB != #{orderRefundInnb} CASE
AND RE.USE_AT = 'Y' WHEN RE.RETURN_DLVY_PYMNT_TY_CD = '02' THEN GREATEST(RE.WON_REFUND_AMT - IFNULL(RE.WON_DLVY_AMT_REFUND_AMT, 0), 0)
GROUP BY RE.ORDR_INNB, RE.SOPMAL_CD ELSE RE.WON_REFUND_AMT
), 0) AS ORDER_REFUND_AMT_SUM END
END
), 0) AS WON_ORDER_REFUND_AMT_SUM
FROM GC_ORDER_REFUND RE
WHERE RE.SOPMAL_CD = #{sopmalCd}
AND RE.ORDR_INNB = #{ordrInnb}
AND RE.ORDER_REFUND_INNB != #{orderRefundInnb}
AND RE.USE_AT = 'Y'
GROUP BY RE.ORDR_INNB, RE.SOPMAL_CD
]]> ]]>
</select> </select>