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

View File

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

View File

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

View File

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