|
|
@@ -3064,8 +3064,8 @@ public class TscOrderChangeService {
|
|
|
public GagaMap refundConfirmPreInfo(OrderChange orderChange) {
|
|
|
GagaMap result = new GagaMap();
|
|
|
Integer ordChgSq = orderChange.getOrdChgSq();
|
|
|
- Integer userNo = orderChange.getUserNo();
|
|
|
-
|
|
|
+ Integer userNo = orderChange.getUserNo();
|
|
|
+
|
|
|
// 주문변경상세정보 조회
|
|
|
Collection<OrderChange> orderChangeList = orderChangeDao.getOrderChangeDetailInfo(orderChange);
|
|
|
|
|
|
@@ -3103,10 +3103,704 @@ public class TscOrderChangeService {
|
|
|
// 환불 사전 정보 조회
|
|
|
GagaMap refundPreInfo = getRefundPreInfo2(orderChange);
|
|
|
List<Order> cnclReqList = (List<Order>)refundPreInfo.get("cnclReqList");
|
|
|
-
|
|
|
+
|
|
|
result = orderRefundService.cnclRtnRefundAmt2(cnclReqList);
|
|
|
-
|
|
|
+ result.set("allCanYn", refundPreInfo.get("allCanYn"));
|
|
|
+ result.set("allLastCanYn", refundPreInfo.get("allLastCanYn"));
|
|
|
+ result.set("allCanYnBeforePayment", refundPreInfo.get("allCanYnBeforePayment"));
|
|
|
+ result.set("pgTid", refundPreInfo.get("pgTid"));
|
|
|
+ result.set("payMeans", refundPreInfo.get("payMeans"));
|
|
|
+ result.set("pgGb", refundPreInfo.get("pgGb"));
|
|
|
+ result.set("cashAuthNo", refundPreInfo.get("cashAuthNo"));
|
|
|
+
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 마이페이지 부분취소 처리
|
|
|
+ *
|
|
|
+ * @param GagaMap
|
|
|
+ * @return GagaMap
|
|
|
+ * @author card007
|
|
|
+ * @since 2021. 05. 24
|
|
|
+ */
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ @Transactional("shopTxnManager")
|
|
|
+ public GagaMap partialRefund(GagaMap map, Integer userNo) {
|
|
|
+ // 1. 취소요청목록 및 정보 설정
|
|
|
+ List<Order> cancelOrderRefundList = (List<Order>) map.get("cancelOrderRefundList"); // 취소환불금액 목록 (주문상세단품 단위)
|
|
|
+ List<Order> cancelDelvRefundList = (List<Order>) map.get("cancelDelvRefundList"); // 취소환불배송금액 목록 (DELV_FEE_CD 단위)
|
|
|
+ int ordNo = map.getInt("ordNo"); // 주문번호
|
|
|
+ int ordChgSq = map.getInt("ordChgSq"); // 주문변경일련번호
|
|
|
+ String chgReason = map.getString("chgReason"); // 변경사유
|
|
|
+ String chgReasonNm = map.getString("chgReasonNm"); // 변경사유명
|
|
|
+ String chgMemo = map.getString("chgMemo"); // 변경메모
|
|
|
+ String allLastCanYn = map.getString("allLastCanYn"); // 마지막 취소 여부
|
|
|
+ String ipAddress = map.getString("ipAddress"); // IP주소
|
|
|
+ String pgTid = map.getString("pgTid"); // PG거래ID
|
|
|
+ String payMeans = map.getString("payMeans"); // 결제수단
|
|
|
+ String pgGb = map.getString("pgGb"); // PG구분
|
|
|
+ String cashAuthNo = map.getString("cashAuthNo"); // 현금영수증 승인번호
|
|
|
+ String accountNo = map.getString("accountNo"); // 환불계좌번호
|
|
|
+ String accountNm = map.getString("accountNm"); // 환불계좌주명
|
|
|
+ String bankCd = map.getString("bankCd"); // 환불계좌은행코드
|
|
|
+ String reqGbn = map.getString("reqGbn"); // 신청구분
|
|
|
+ String chgGb = TscConstants.OrderChangeGb.CANCEL.value(); // 취소요청 (공톹코드:G680)
|
|
|
+ String ordDtlStat = TscConstants.OrderDetailStat.PAYMENT_AFTER_CANCEL.value(); // 주문상세상태
|
|
|
+ String chgStat = TscConstants.OrderChangeStat.RETURN_COMPLETE.value(); // 주문변경상태
|
|
|
+ int payAmt = map.getInt("spanPayAmt"); // 부분취소 전 결제금액
|
|
|
+ String modType = "";
|
|
|
+ String batchYn = map.getString("batchYn"); // 배치여부
|
|
|
+ String delvExpnYn = map.getString("delvExpnYn"); // 출고예외여부
|
|
|
+ String mallGb = map.getString("mallGb"); // 몰구분
|
|
|
+ String pgStat = map.getString("pgStat"); // PG 점프
|
|
|
+
|
|
|
+
|
|
|
+ // 무통장입금 결제 주문 전체취소 상태값 처리
|
|
|
+ if (TscConstants.PgGb.KCP.value().equals(pgGb)) {
|
|
|
+ if (TscConstants.PayMeans.BANK_DEPOSIT.value().equals(payMeans)) {
|
|
|
+ modType = "STPD"; // KCP 무통장입금 부분취소
|
|
|
+ } else {
|
|
|
+ modType = "STPC"; // KCP 부분취소
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.info("cancelDelvRefundList {}"+cancelDelvRefundList.iterator().next());
|
|
|
+ log.info("cancelOrderRefundList {}"+cancelOrderRefundList.iterator().next());
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ // 3. 주문변경정보, 주문정보, 환불정보 (배송정책코드 별)
|
|
|
+ List<Payment> pgList = new ArrayList<>();
|
|
|
+ List<GiftCard> cashReceiptsList = new ArrayList<>();
|
|
|
+ for (Order obj : cancelDelvRefundList) {
|
|
|
+ // 취소금액 있을 시 처리
|
|
|
+ if (obj.getCnclRtnAmt() > 0) {
|
|
|
+ // 3-1. 주문변경정보 생성
|
|
|
+ OrderChange orderChange = new OrderChange();
|
|
|
+ orderChange.setOrdNo(ordNo);
|
|
|
+ orderChange.setChgGb(chgGb);
|
|
|
+ orderChange.setChgReason(chgReason);
|
|
|
+ orderChange.setChgMemo(chgMemo);
|
|
|
+ orderChange.setAddPayCost(0);
|
|
|
+ orderChange.setAddPayAmt(0);
|
|
|
+ orderChange.setRegNo(userNo);
|
|
|
+ orderChange.setUpdNo(userNo);
|
|
|
+ orderChange.setOrdChgSq(ordChgSq);
|
|
|
+ // 신청구분 처리
|
|
|
+ // 삭제 ??????
|
|
|
+ /*
|
|
|
+ if ("cnclComplete".equals(reqGbn)) {
|
|
|
+ // 취소 완료 시 생성
|
|
|
+ orderChangeDao.createOrderChange(orderChange);
|
|
|
+ ordChgSq = orderChange.getOrdChgSq();
|
|
|
+ } else {
|
|
|
+ // 취소접수승인 시 ordChgSq 설정
|
|
|
+ orderChange.setOrdChgSq(ordChgSq);
|
|
|
+ }
|
|
|
+ */
|
|
|
+
|
|
|
+ // 3-2. 주문상세정보 수정
|
|
|
+ for (Order vo : cancelOrderRefundList) {
|
|
|
+ vo.setRegNo(userNo);
|
|
|
+ vo.setUpdNo(userNo);
|
|
|
+ vo.setOrdDtlStat(ordDtlStat);
|
|
|
+
|
|
|
+ // 배송정책코드 별 주문상세 처리
|
|
|
+ if (obj.getDelvFeeCd().equals(vo.getDelvFeeCd())) {
|
|
|
+ // 주문상세 별 전체취소여부 설정
|
|
|
+ int leftQty = vo.getOrdQty() - vo.getCnclRtnQty() - vo.getOrdCanChgQty();
|
|
|
+
|
|
|
+ // 3-2-1. 주문상세정보 수정
|
|
|
+ orderChangeDao.updateOrderDetailTemp(vo);
|
|
|
+
|
|
|
+ // 3-2-2. 주문상세 이력 등록
|
|
|
+ orderChangeDao.createOrderDetailHstCnclRtnTemp(vo);
|
|
|
+
|
|
|
+ // 3-2-3. 주문상세단품정보 수정 및 주문상세단품이력 등록
|
|
|
+ // 주문상세단품정보조회
|
|
|
+ Collection<Order> orderDetailItemList = orderChangeDao.getOrderDetailItemForCnclRtn(vo);
|
|
|
+ int ordDtlOrdAmt = orderDetailItemList.iterator().next().getOrdAmt();
|
|
|
+ int ordDtlCnclRtnAmt = orderDetailItemList.iterator().next().getCnclRtnAmt();
|
|
|
+ int ordDtlCpn1DcAmt = orderDetailItemList.iterator().next().getCpn1DcAmt();
|
|
|
+ int ordDtlTmtb1DcAmt = orderDetailItemList.iterator().next().getTmtb1DcAmt();
|
|
|
+ int ordDtlTmtb2DcAmt = orderDetailItemList.iterator().next().getTmtb2DcAmt();
|
|
|
+ int ordDtlGoodsCpnDcAmt = orderDetailItemList.iterator().next().getGoodsCpnDcAmt();
|
|
|
+ int ordDtlCartCpnDcAmt = orderDetailItemList.iterator().next().getCartCpnDcAmt();
|
|
|
+ int ordDtlPntDcAmt = orderDetailItemList.iterator().next().getPntDcAmt();
|
|
|
+ int ordDtlPrePntDcAmt = orderDetailItemList.iterator().next().getPrePntDcAmt();
|
|
|
+ int ordDtlSavePntAmt = orderDetailItemList.iterator().next().getSavePntAmt();
|
|
|
+ int ordDtlRealOrdAmt = orderDetailItemList.iterator().next().getRealOrdAmt();
|
|
|
+ int ordDtlGfcdUseAmt = orderDetailItemList.iterator().next().getGfcdUseAmt();
|
|
|
+
|
|
|
+ // 주문상세단품단위 금액 등록
|
|
|
+ int length = orderDetailItemList.size();
|
|
|
+ int index = 1;
|
|
|
+ int leftOrdAmt = ordDtlOrdAmt;
|
|
|
+ int leftCnclRtnAmt = ordDtlCnclRtnAmt;
|
|
|
+ int leftCpn1DcAmt = ordDtlCpn1DcAmt;
|
|
|
+ int leftTmtb1DcAmt = ordDtlTmtb1DcAmt;
|
|
|
+ int leftTmtb2DcAmt = ordDtlTmtb2DcAmt;
|
|
|
+ int leftGoodsCpnDcAmt = ordDtlGoodsCpnDcAmt;
|
|
|
+ int leftCartCpnDcAmt = ordDtlCartCpnDcAmt;
|
|
|
+ int leftPntDcAmt = ordDtlPntDcAmt;
|
|
|
+ int leftPrePntDcAmt = ordDtlPrePntDcAmt;
|
|
|
+ int leftSavePntAmt = ordDtlSavePntAmt;
|
|
|
+ int leftRealOrdAmt = ordDtlRealOrdAmt;
|
|
|
+ int leftGfcdUseAmt = ordDtlGfcdUseAmt;
|
|
|
+
|
|
|
+ for (Order orderDetailItem : orderDetailItemList) {
|
|
|
+ double dtlOrdAmt = orderDetailItem.getDtlOrdAmt();
|
|
|
+ double dtlItemOrdAmt = orderDetailItem.getDtlItemOrdAmt();
|
|
|
+ double tempDivD = (dtlItemOrdAmt / dtlOrdAmt) * 100;
|
|
|
+
|
|
|
+ int tempDiv = Integer.parseInt(String.valueOf(Math.round(tempDivD)));
|
|
|
+
|
|
|
+ if (index == length) {
|
|
|
+ orderDetailItem.setCnclRtnAmt(leftCnclRtnAmt);
|
|
|
+ orderDetailItem.setCpn1DcAmt(leftCpn1DcAmt);
|
|
|
+ orderDetailItem.setTmtb1DcAmt(leftTmtb1DcAmt);
|
|
|
+ orderDetailItem.setTmtb2DcAmt(leftTmtb2DcAmt);
|
|
|
+ orderDetailItem.setGoodsCpnDcAmt(leftGoodsCpnDcAmt);
|
|
|
+ orderDetailItem.setCartCpnDcAmt(leftCartCpnDcAmt);
|
|
|
+ orderDetailItem.setPrePntDcAmt(leftPrePntDcAmt);
|
|
|
+ orderDetailItem.setPntDcAmt(leftPntDcAmt);
|
|
|
+ orderDetailItem.setGfcdUseAmt(leftGfcdUseAmt);
|
|
|
+ orderDetailItem.setRealOrdAmt(leftRealOrdAmt);
|
|
|
+ orderDetailItem.setSavePntAmt(leftSavePntAmt);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ orderDetailItem.setCnclRtnAmt((ordDtlCnclRtnAmt * tempDiv) / 100);
|
|
|
+ orderDetailItem.setCpn1DcAmt((ordDtlCpn1DcAmt * tempDiv) / 100);
|
|
|
+ orderDetailItem.setTmtb1DcAmt((ordDtlTmtb1DcAmt * tempDiv) / 100);
|
|
|
+ orderDetailItem.setTmtb2DcAmt((ordDtlTmtb2DcAmt * tempDiv) / 100);
|
|
|
+ orderDetailItem.setGoodsCpnDcAmt((ordDtlGoodsCpnDcAmt * tempDiv) / 100);
|
|
|
+ orderDetailItem.setCartCpnDcAmt((ordDtlCartCpnDcAmt * tempDiv) / 100);
|
|
|
+ orderDetailItem.setPrePntDcAmt((ordDtlPrePntDcAmt * tempDiv) / 100);
|
|
|
+ orderDetailItem.setPntDcAmt((ordDtlPntDcAmt * tempDiv) / 100);
|
|
|
+ orderDetailItem.setGfcdUseAmt((ordDtlGfcdUseAmt * tempDiv) / 100);
|
|
|
+ orderDetailItem.setRealOrdAmt((ordDtlRealOrdAmt * tempDiv) / 100);
|
|
|
+ orderDetailItem.setSavePntAmt((ordDtlSavePntAmt * tempDiv) / 100);
|
|
|
+
|
|
|
+ leftCnclRtnAmt -= ((ordDtlCnclRtnAmt * tempDiv) / 100);
|
|
|
+ leftCpn1DcAmt -= ((ordDtlCpn1DcAmt * tempDiv) / 100);
|
|
|
+ leftTmtb1DcAmt -= ((ordDtlTmtb1DcAmt * tempDiv) / 100);
|
|
|
+ leftTmtb2DcAmt -= ((ordDtlTmtb2DcAmt * tempDiv) / 100);
|
|
|
+ leftGoodsCpnDcAmt -= ((ordDtlGoodsCpnDcAmt * tempDiv) / 100);
|
|
|
+ leftCartCpnDcAmt -= ((ordDtlCartCpnDcAmt * tempDiv) / 100);
|
|
|
+ leftPrePntDcAmt -= ((ordDtlPrePntDcAmt * tempDiv) / 100);
|
|
|
+ leftPntDcAmt -= ((ordDtlPntDcAmt * tempDiv) / 100);
|
|
|
+ leftGfcdUseAmt -= ((ordDtlGfcdUseAmt * tempDiv) / 100);
|
|
|
+ leftRealOrdAmt -= ((ordDtlRealOrdAmt * tempDiv) / 100);
|
|
|
+ leftSavePntAmt -= ((ordDtlSavePntAmt * tempDiv) / 100);
|
|
|
+ }
|
|
|
+
|
|
|
+ orderDetailItem.setRegNo(userNo);
|
|
|
+ orderDetailItem.setUpdNo(userNo);
|
|
|
+ orderDetailItem.setOrdDtlStat(ordDtlStat);
|
|
|
+
|
|
|
+ log.info("ordDtlStat ::: {}", ordDtlStat);
|
|
|
+
|
|
|
+ orderChangeDao.updateOrderDetailItemTemp(orderDetailItem);
|
|
|
+ orderChangeDao.createOrderDetailItemHstTemp(orderDetailItem);
|
|
|
+
|
|
|
+ index++;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3-2-4. 사용포인트원복
|
|
|
+ int pntDcAmt = vo.getPntDcAmt();
|
|
|
+ vo.setOccurGb(TscConstants.PointOccurGb.ORD_USE_POINT.value());
|
|
|
+
|
|
|
+ for (Order point : orderChangeDao.getCustPointHst(vo)) {
|
|
|
+ if (pntDcAmt > 0) {
|
|
|
+ int pntAmt = point.getPntAmt() * -1;
|
|
|
+
|
|
|
+ if (pntDcAmt < pntAmt) {
|
|
|
+ point.setPntAmt(pntDcAmt);
|
|
|
+ pntDcAmt -= pntDcAmt;
|
|
|
+ } else {
|
|
|
+ point.setPntAmt(pntAmt);
|
|
|
+ pntDcAmt -= pntAmt;
|
|
|
+ }
|
|
|
+
|
|
|
+ point.setOccurGb(TscConstants.PointOccurGb.ORD_USE_POINT_CANCEL.value());
|
|
|
+ point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_COMPLETE.value());
|
|
|
+ point.setOccurDtlDesc("포인트사용취소");
|
|
|
+ point.setRegNo(userNo);
|
|
|
+ point.setUpdNo(userNo);
|
|
|
+
|
|
|
+ // 포인트 사용 취소 이력 생성 및 포인트 수정
|
|
|
+ orderChangeDao.createCustPointHstRollback(point);
|
|
|
+ orderChangeDao.updateCustPointRollback(point);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3-2-5. 적립예정포인트 수정
|
|
|
+ int savePntAmt = vo.getSavePntAmt();
|
|
|
+ vo.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT.value());
|
|
|
+
|
|
|
+ for (Order point : orderChangeDao.getCustPointHst(vo)) {
|
|
|
+ point.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT_CANCEL.value());
|
|
|
+ point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_EXPECT.value());
|
|
|
+ point.setOccurDtlDesc("예정포인트적립취소");
|
|
|
+ point.setPntAmt(savePntAmt * -1);
|
|
|
+ point.setRegNo(userNo);
|
|
|
+ point.setUpdNo(userNo);
|
|
|
+
|
|
|
+ // 적립예정포인트 취소 이력 생성
|
|
|
+ orderChangeDao.createCustPointHstRollback(point);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3-2-6. 상품쿠폰원복
|
|
|
+ if (leftQty == 0) {
|
|
|
+ orderChangeDao.updateGoodsCpnRollback(vo);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3-2-7. 사용상품권 원복
|
|
|
+ int gfcdUseAmt = vo.getGfcdUseAmt();
|
|
|
+
|
|
|
+ for (Order giftCard : orderChangeDao.getCustGiftCardHst(vo)) {
|
|
|
+ if (gfcdUseAmt > 0) {
|
|
|
+ int gfcdAmt = giftCard.getGfcdAmt() * -1;
|
|
|
+
|
|
|
+ if (gfcdUseAmt < gfcdAmt) {
|
|
|
+ giftCard.setGfcdAmt(gfcdUseAmt);
|
|
|
+ gfcdUseAmt -= gfcdUseAmt;
|
|
|
+ } else {
|
|
|
+ giftCard.setGfcdAmt(gfcdAmt);
|
|
|
+ gfcdUseAmt -= gfcdAmt;
|
|
|
+ }
|
|
|
+
|
|
|
+ giftCard.setOccurGb(TscConstants.GiftCardOccurGb.USE_GIFTCARD_CANCEL.value());
|
|
|
+ giftCard.setOccurDtlDesc("상품권사용취소");
|
|
|
+ giftCard.setRegNo(userNo);
|
|
|
+ giftCard.setUpdNo(userNo);
|
|
|
+
|
|
|
+ // 포인트 사용 취소 이력 생성 및 포인트 수정
|
|
|
+ orderChangeDao.createCustGiftCardHstRollback(giftCard);
|
|
|
+ orderChangeDao.updateCustGiftCardRollback(giftCard);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3-2-8. 상품권 현금영수증 PG 취소 정보 설정
|
|
|
+ GiftCard giftCardCashReceipts = orderDao.getGiftCardReceiptInfo(ordNo);
|
|
|
+
|
|
|
+ if (giftCardCashReceipts != null && StringUtils.isNotBlank(giftCardCashReceipts.getTradeNo())) {
|
|
|
+ giftCardCashReceipts.setModType("STPC");
|
|
|
+ giftCardCashReceipts.setUsGfcdAmt(vo.getGfcdUseAmt());
|
|
|
+
|
|
|
+ cashReceiptsList.add(giftCardCashReceipts);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3-2-9. 주문변경상세정보 및 이력 등록
|
|
|
+ OrderChange changeDetailPo = new OrderChange();
|
|
|
+ changeDetailPo.setOrdChgSq(orderChange.getOrdChgSq());
|
|
|
+ changeDetailPo.setOrdDtlNo(vo.getOrdDtlNo());
|
|
|
+ changeDetailPo.setChgQty(vo.getOrdCanChgQty());
|
|
|
+ changeDetailPo.setChgStat(chgStat);
|
|
|
+ changeDetailPo.setRegNo(userNo);
|
|
|
+ changeDetailPo.setUpdNo(userNo);
|
|
|
+
|
|
|
+ // 신청구분 처리
|
|
|
+
|
|
|
+ // 취소접수승인 시 주문변경상세 정보 수정
|
|
|
+ Order order = new Order();
|
|
|
+ order.setOrdNo(ordNo);
|
|
|
+ order.setOrdChgSq(ordChgSq);
|
|
|
+ order.setChgStat(chgStat);
|
|
|
+ order.setUpdNo(userNo);
|
|
|
+ order.setDelYn("N");
|
|
|
+
|
|
|
+ orderChangeDao.updateOrderChangeDtlCancel(order);
|
|
|
+
|
|
|
+ orderChangeDao.createOrderChangeDetailHst(changeDetailPo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3-3. 상품재고원복
|
|
|
+ /* 삭제 !!!
|
|
|
+ if(!TscConstants.OrderCancelReason.SOLDOUT_CANCEL.value().equals(chgReason)) {
|
|
|
+ orderChange.setSellGb(TscConstants.SellGb.ORDER_CANCEL.value());
|
|
|
+ orderChangeDao.createSellQty(orderChange);
|
|
|
+ }
|
|
|
+ */
|
|
|
+
|
|
|
+ // 3-4. PG 결제 취소 정보 설정 (상품권으로만 결제 시 PG점프)
|
|
|
+ int spanRealCnclRtnAmt = obj.getRealOrdAmt(); // 취소금액합계
|
|
|
+ int sumDeliveryFee = obj.getDelvFee(); // 배송비합계
|
|
|
+ int spanTotDeliveryFee = obj.getAddDelvFee(); // 추가배송비합계
|
|
|
+ int spanRefundAmt = spanRealCnclRtnAmt;
|
|
|
+ int addDelvFee = 0;
|
|
|
+
|
|
|
+ // 마지막 취소일때 배송비 추가
|
|
|
+ if ("Y".equals(obj.getLastCanYn())) {
|
|
|
+ spanRefundAmt += sumDeliveryFee; // 환불금액 계산
|
|
|
+ addDelvFee = sumDeliveryFee; // 추가배송비 계산
|
|
|
+
|
|
|
+ // TB_DELIVERY_FEE 배송비 취소 처리
|
|
|
+ Order cancelDelvFee = new Order();
|
|
|
+ // cancelDelvFee.setPaySq(pg.getPaySq());
|
|
|
+ cancelDelvFee.setOrdNo(ordNo);
|
|
|
+ cancelDelvFee.setDelvFeeGb(TscConstants.DeliveryFeeGb.ORIGIN_DELIVERY_FEE.value());
|
|
|
+ cancelDelvFee.setDelvFeeCd(obj.getDelvFeeCd());
|
|
|
+ cancelDelvFee.setDelvFee(sumDeliveryFee);
|
|
|
+ cancelDelvFee.setOrdChgSq(orderChange.getOrdChgSq());
|
|
|
+ cancelDelvFee.setUpdNo(userNo);
|
|
|
+
|
|
|
+ orderChangeDao.updateDeliveryFee(cancelDelvFee);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 고객사유일때 추가배송비 차감 후 환불처리
|
|
|
+ if ("G686_10".equals(chgReason)) {
|
|
|
+ spanRefundAmt -= spanTotDeliveryFee; // 환불금액 계산
|
|
|
+ addDelvFee -= spanTotDeliveryFee; // 추가배송비 계산
|
|
|
+ }
|
|
|
+
|
|
|
+ // 환불금액이 추가배송비 보다 적을 시
|
|
|
+ if (spanRefundAmt < 0) {
|
|
|
+ throw new IllegalStateException(message.getMessage("CANCEL_0002"));
|
|
|
+ }
|
|
|
+
|
|
|
+ Payment pg = new Payment();
|
|
|
+ pg.setOrdNo(ordNo);
|
|
|
+ pg.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
|
|
|
+ pg.setPayGb("O");
|
|
|
+ pg.setPgTid(pgTid);
|
|
|
+ pg.setPayMeans(payMeans);
|
|
|
+ pg.setPartCancelAmt(spanRefundAmt);
|
|
|
+ // pg.setLeftAmt(orderChangeDao.getLeftAmt(ordNo));
|
|
|
+ pg.setLeftAmt(payAmt);
|
|
|
+ pg.setRegNo(userNo);
|
|
|
+ pg.setUpdNo(userNo);
|
|
|
+ log.info("cancelAmt >>> {}", pg.getPartCancelAmt());
|
|
|
+ log.info("leftAmt >>> {}", pg.getLeftAmt());
|
|
|
+ if (spanRefundAmt > 0) {
|
|
|
+ pgList.add(pg);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3-5. 환불정보 등록
|
|
|
+ // tb_Refund update spanRefundAmt , addDelvFee
|
|
|
+
|
|
|
+ /*
|
|
|
+ Order refundOrder = new Order();
|
|
|
+ refundOrder.setOrdNo(ordNo);
|
|
|
+ refundOrder.setPaySq(0);
|
|
|
+ refundOrder.setOrdChgSq(orderChange.getOrdChgSq());
|
|
|
+ refundOrder.setRefundAmt(spanRefundAmt);
|
|
|
+ refundOrder.setRfCpn1Amt(obj.getCpn1DcAmt());
|
|
|
+ refundOrder.setRfTmtb1Amt(obj.getTmtb1DcAmt());
|
|
|
+ refundOrder.setRfTmtb2Amt(obj.getTmtb2DcAmt());
|
|
|
+ refundOrder.setRfGoodsCpnAmt(obj.getGoodsCpnDcAmt());
|
|
|
+ refundOrder.setRfCartCpnAmt(obj.getCartCpnDcAmt());
|
|
|
+ refundOrder.setRfDelvCpnAmt(obj.getDelvCpnDcAmt());
|
|
|
+ refundOrder.setRfPntAmt(obj.getPntDcAmt());
|
|
|
+ refundOrder.setRfPrePntAmt(obj.getPrePntDcAmt());
|
|
|
+ refundOrder.setRfGfcdUseAmt(obj.getGfcdAmt());
|
|
|
+ refundOrder.setRfCnclAmt(obj.getCnclRtnAmt());
|
|
|
+ refundOrder.setRfDeliveryFee(addDelvFee);
|
|
|
+ refundOrder.setRfRealCnclAmt(spanRefundAmt - addDelvFee);
|
|
|
+ refundOrder.setRaNo(accountNo);
|
|
|
+ refundOrder.setRaNm(accountNm);
|
|
|
+ refundOrder.setRaBank(bankCd);
|
|
|
+ refundOrder.setRegNo(userNo);
|
|
|
+
|
|
|
+ orderChangeDao.createRefund(refundOrder);
|
|
|
+ */
|
|
|
+
|
|
|
+ // 3-6. 결제금액이 무료배송금액보다 작으면 배송비 신규 등록
|
|
|
+ if (spanTotDeliveryFee > 0) {
|
|
|
+ Order delvFeeOrder = new Order();
|
|
|
+ // delvFeeOrder.setPaySq(pg.getPaySq());
|
|
|
+ delvFeeOrder.setOrdNo(ordNo);
|
|
|
+ delvFeeOrder.setDelvFeeGb(TscConstants.DeliveryFeeGb.ORIGIN_DELIVERY_FEE.value());
|
|
|
+ delvFeeOrder.setDelvFeeCd(obj.getDelvFeeCd());
|
|
|
+ delvFeeOrder.setDelvFee(spanTotDeliveryFee);
|
|
|
+ delvFeeOrder.setRealDelvAmt(spanTotDeliveryFee);
|
|
|
+ delvFeeOrder.setOrdChgSq(orderChange.getOrdChgSq());
|
|
|
+ delvFeeOrder.setSupplyCompCd(obj.getSupplyCompCd());
|
|
|
+ delvFeeOrder.setRegNo(userNo);
|
|
|
+ delvFeeOrder.setUpdNo(userNo);
|
|
|
+
|
|
|
+ orderChangeDao.createDeliveryFee(delvFeeOrder);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 4. 장바구니, 배송비 쿠폰 원복 및 사은품 전체 취소 처리 (마지막 취소 시)
|
|
|
+ if ("Y".equals(allLastCanYn)) {
|
|
|
+ // 4-1. 장바구니, 배송비 쿠폰 원복처리
|
|
|
+ Order coupon = new Order();
|
|
|
+ coupon.setOrdNo(ordNo);
|
|
|
+ coupon.setUpdNo(userNo);
|
|
|
+ orderChangeDao.updateCartCpnRollback(coupon);
|
|
|
+ orderChangeDao.updateDeliveryCpnRollback(coupon);
|
|
|
+
|
|
|
+ // 4-2. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Order freegiftOrder = new Order(); freegiftOrder.setOrdNo(ordNo);
|
|
|
+ * freegiftOrder.setUpdNo(userNo);
|
|
|
+ * orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
|
|
|
+ */
|
|
|
+ }
|
|
|
+
|
|
|
+ if("G011_10".equals(mallGb)) {
|
|
|
+ if("N".equals(pgStat)) {
|
|
|
+ // 6. PG 취소 처리
|
|
|
+ for (Payment pg : pgList) {
|
|
|
+ if (TscConstants.PgGb.KCP.value().equals(pgGb) || TscConstants.PgGb.PAYCO.value().equals(pgGb)) {
|
|
|
+ pg.setModType(modType);
|
|
|
+ pg.setModDesc("가맹점 취소 - 부분 취소");
|
|
|
+ pg.setIpAddress(ipAddress);
|
|
|
+ pg.setAccountNm(accountNm);
|
|
|
+ pg.setAccountNo(accountNo);
|
|
|
+ pg.setBankCd(bankCd);
|
|
|
+ pg.setBatchYn(batchYn);
|
|
|
+ kcpService.kcpCancel(pg);
|
|
|
+ } else if (TscConstants.PgGb.NAVER.value().equals(pgGb)) {
|
|
|
+ pg.setPayAmt(pg.getPartCancelAmt());
|
|
|
+ pg.setPayMeans(payMeans);
|
|
|
+ pg.setChgReasonNm(chgReasonNm);
|
|
|
+
|
|
|
+ naverPayService.cancelNaverPayment(pg);
|
|
|
+ } else if (TscConstants.PgGb.KAKAO.value().equals(pgGb)) {
|
|
|
+ pg.setPayAmt(pg.getPartCancelAmt());
|
|
|
+ kakaoPayService.cancelKakaoPayment(pg);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 7. 환불정보 수정
|
|
|
+ Order refundOrder = new Order();
|
|
|
+ refundOrder.setOrdNo(ordNo);
|
|
|
+ refundOrder.setPaySq(pg.getPaySq());
|
|
|
+ refundOrder.setOrdChgSq(ordChgSq);
|
|
|
+ refundOrder.setUpdNo(userNo);
|
|
|
+
|
|
|
+ orderChangeDao.updateRefundInfo(refundOrder);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 8. 현금영수증 취소 처리
|
|
|
+ for (GiftCard cashReceipts : cashReceiptsList) {
|
|
|
+ kcpService.kcpCashReceiptCancel(cashReceipts);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 전체 환불 처리
|
|
|
+ *
|
|
|
+ * @param OrderChange (ordChgSq, userNo)
|
|
|
+ * @author card007
|
|
|
+ * @since 2021. 05. 24
|
|
|
+ */
|
|
|
+ public void allRefund(OrderChange orderChange) {
|
|
|
+ Integer ordNo = orderChange.getOrdNo(); // 주문번호
|
|
|
+ String chgGb = orderChange.getChgGb(); // 변경구분
|
|
|
+ String chgReasonNm = orderChange.getChgReasonNm(); // 변경사유명
|
|
|
+ String accountNo = orderChange.getAccountNo(); // 환불계좌번호
|
|
|
+ String accountNm = orderChange.getAccountNm(); // 환불계좌주명
|
|
|
+ String bankCd = orderChange.getBankCd(); // 환불은행
|
|
|
+ Integer ordChgSq = orderChange.getOrdChgSq(); // 주문변경일련번호
|
|
|
+ int regNo = orderChange.getUserNo(); // 등록자번호
|
|
|
+ int updNo = orderChange.getUserNo(); // 수정자번호
|
|
|
+ Integer delvAddrSq = orderChange.getDelvAddrSq();
|
|
|
+ String addDeliveryFeeYn = orderChange.getAddDeliveryFeeYn(); // 배송비추가 환불여부
|
|
|
+ int addDeliveryFee = orderChange.getAddDeliveryFee(); // 배송비추가 환불금액
|
|
|
+ int spanRefundAmt = orderChange.getSpanRefundAmt();
|
|
|
+ String mallGb = orderChange.getMallGb(); // 몰구분
|
|
|
+ String pgStat = orderChange.getPgStat(); // PG 점프
|
|
|
+
|
|
|
+ // 상태값 설정
|
|
|
+ String ordDtlStat = TscConstants.OrderDetailStat.PAYMENT_AFTER_CANCEL.value();
|
|
|
+ String chgStat = TscConstants.OrderChangeStat.RETURN_COMPLETE.value();
|
|
|
+
|
|
|
+ // 1. 주문변경상세 수정
|
|
|
+ orderChange.setChgStat(chgStat);
|
|
|
+ orderChangeDao.updateOrderChangeDtl(orderChange);
|
|
|
+ orderChangeDao.createOrderChangeDetailHstForAllCancel(orderChange);
|
|
|
+
|
|
|
+ // 반품일때 환불처리
|
|
|
+ // 원주문 결제정보 조회
|
|
|
+ Payment payment = new Payment();
|
|
|
+ payment.setOrdNo(ordNo);
|
|
|
+ payment = orderChangeDao.getPaymentInfo(payment);
|
|
|
+
|
|
|
+ // 환불금액 설정
|
|
|
+ int refundAmt = payment.getPayAmt();
|
|
|
+ refundAmt = spanRefundAmt;
|
|
|
+
|
|
|
+ // 주문 전체취소 상태값 처리
|
|
|
+ String modType;
|
|
|
+ if (TscConstants.PgGb.KCP.value().equals(payment.getPgGb())
|
|
|
+ && TscConstants.PayMeans.BANK_DEPOSIT.value().equals(payment.getPayMeans())
|
|
|
+ && TscConstants.PaymentStat.PAYMENT_COMPLETE.value().equals(payment.getPayStat())) {
|
|
|
+
|
|
|
+ modType = "STHD"; // KCP 무통장입금 전체취소
|
|
|
+ } else {
|
|
|
+ modType = "STSC"; // KCP 전체취소
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 사용포인트원복
|
|
|
+ Order vo = new Order();
|
|
|
+ vo.setOrdNo(ordNo);
|
|
|
+ vo.setOccurGb(TscConstants.PointOccurGb.ORD_USE_POINT.value());
|
|
|
+ vo.setUpdNo(updNo);
|
|
|
+
|
|
|
+ for (Order point : orderChangeDao.getCustPointHst(vo)) {
|
|
|
+ point.setOccurGb(TscConstants.PointOccurGb.ORD_USE_POINT_CANCEL.value());
|
|
|
+ point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_COMPLETE.value());
|
|
|
+ point.setOccurDtlDesc("포인트사용취소");
|
|
|
+ point.setPntAmt(point.getPntAmt() * -1);
|
|
|
+ point.setRegNo(regNo);
|
|
|
+ point.setUpdNo(updNo);
|
|
|
+
|
|
|
+ // 포인트 사용 취소 이력 생성 및 포인트 수정
|
|
|
+ orderChangeDao.createCustPointHstRollback(point);
|
|
|
+ orderChangeDao.updateCustPointRollback(point);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3. 적립예정포인트 취소
|
|
|
+ vo.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT.value());
|
|
|
+
|
|
|
+ for (Order point : orderChangeDao.getCustPointHst(vo)) {
|
|
|
+ point.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT_CANCEL.value());
|
|
|
+ point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_EXPECT.value());
|
|
|
+ point.setOccurDtlDesc("예정포인트적립취소");
|
|
|
+ point.setPntAmt(point.getPntAmt() * -1);
|
|
|
+ point.setRegNo(regNo);
|
|
|
+ point.setUpdNo(updNo);
|
|
|
+
|
|
|
+ // 적립예정포인트 취소 이력 생성
|
|
|
+ orderChangeDao.createCustPointHstRollback(point);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 4. 사용상품권 원복
|
|
|
+ for (Order giftCard : orderChangeDao.getCustGiftCardHst(vo)) {
|
|
|
+ giftCard.setOccurGb(TscConstants.GiftCardOccurGb.USE_GIFTCARD_CANCEL.value());
|
|
|
+ giftCard.setOccurDtlDesc("상품권사용취소");
|
|
|
+ giftCard.setGfcdAmt(giftCard.getGfcdAmt() * -1);
|
|
|
+ giftCard.setRegNo(regNo);
|
|
|
+ giftCard.setUpdNo(updNo);
|
|
|
+
|
|
|
+ // 포인트 사용 취소 이력 생성 및 포인트 수정
|
|
|
+ orderChangeDao.createCustGiftCardHstRollback(giftCard);
|
|
|
+ orderChangeDao.updateCustGiftCardRollback(giftCard);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 5. 상품재고원복 (품절취소가 아닐 경우)
|
|
|
+// OrderChange sellQty = new OrderChange();
|
|
|
+// sellQty.setOrdChgSq(ordChgSq);
|
|
|
+// sellQty.setSellGb("11");
|
|
|
+// sellQty.setRegNo(regNo);
|
|
|
+// orderChangeDao.createSellQty(sellQty);
|
|
|
+
|
|
|
+ // 6. 쿠폰 원복처리
|
|
|
+ Order coupon = new Order();
|
|
|
+ coupon.setOrdNo(ordNo);
|
|
|
+ coupon.setUpdNo(updNo);
|
|
|
+ orderChangeDao.updateGoodsCpnRollback(coupon);
|
|
|
+ orderChangeDao.updateCartCpnRollback(coupon);
|
|
|
+ orderChangeDao.updateDeliveryCpnRollback(coupon);
|
|
|
+
|
|
|
+ // 7. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
|
|
|
+ //TODO: skip
|
|
|
+// Order freegiftOrder = new Order();
|
|
|
+// freegiftOrder.setOrdNo(ordNo);
|
|
|
+// freegiftOrder.setUpdNo(updNo);
|
|
|
+// orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
|
|
|
+//
|
|
|
+
|
|
|
+ // 9. 주문상세 및 주문상세단품 정보 설정
|
|
|
+ OrderChange orderDetail = new OrderChange();
|
|
|
+ orderDetail.setOrdNo(ordNo);
|
|
|
+ orderDetail.setOrdDtlStat(ordDtlStat);
|
|
|
+ orderDetail.setRegNo(regNo);
|
|
|
+ orderDetail.setUpdNo(updNo);
|
|
|
+
|
|
|
+ // 주문상세정보 수정 및 이력 등록
|
|
|
+ orderChangeDao.updateOrderDetailForAllCancel(orderDetail);
|
|
|
+ orderChangeDao.createOrderDetailHstForAllCancel(orderDetail);
|
|
|
+
|
|
|
+ // 주문상세단품정보 수정 및 이력 등록
|
|
|
+ orderChangeDao.updateOrderDetailItemForAllCancel(orderDetail);
|
|
|
+ orderChangeDao.createOrderDetailItemHstForAllCancel(orderDetail);
|
|
|
+
|
|
|
+ if("Y".equals(addDeliveryFeeYn)) {
|
|
|
+ // 10. 배송비
|
|
|
+ OrderChange ordDelvFee = new OrderChange();
|
|
|
+ ordDelvFee.setOrdNo(ordNo);
|
|
|
+ ordDelvFee.setRegNo(regNo);
|
|
|
+ orderChangeDao.insertTbDeliveryFeeMinus(ordDelvFee);
|
|
|
+
|
|
|
+ // 10-1. 환불
|
|
|
+ OrderChange chgRefund = new OrderChange();
|
|
|
+ chgRefund.setRefundAmt(refundAmt);
|
|
|
+ chgRefund.setRfDeliveryFee(addDeliveryFee);
|
|
|
+ chgRefund.setOrdNo(ordNo);
|
|
|
+ chgRefund.setOrdChgSq(ordChgSq);
|
|
|
+ orderChangeDao.updateRefundChange(chgRefund);
|
|
|
+
|
|
|
+ //refundAmt = refundAmt+addDeliveryFee;
|
|
|
+ }
|
|
|
+ // 11. PG 연동
|
|
|
+ Payment pg = new Payment();
|
|
|
+ pg.setOrdNo(ordNo);
|
|
|
+ pg.setPayGb("O");
|
|
|
+ pg.setPgTid(payment.getPgTid());
|
|
|
+ pg.setPayAmt(refundAmt);
|
|
|
+ pg.setLeftAmt(refundAmt);
|
|
|
+ pg.setRegNo(regNo);
|
|
|
+ pg.setUpdNo(updNo);
|
|
|
+ pg.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
|
|
|
+
|
|
|
+ // 상품권으로만 결제 시 PG점프
|
|
|
+ if("G011_10".equals(mallGb)) { // 자사몰일경우
|
|
|
+ if("N".equals(pgStat)) { // PG점프
|
|
|
+ String pgGb = payment.getPgGb();
|
|
|
+ if (!TscConstants.PgGb.ISTYLE.value().equals(pgGb)) {
|
|
|
+
|
|
|
+ if (TscConstants.PgGb.KCP.value().equals(pgGb) || TscConstants.PgGb.PAYCO.value().equals(pgGb)) {
|
|
|
+ pg.setModType(modType);
|
|
|
+ pg.setModDesc("가맹점 취소 - 전체 취소");
|
|
|
+ pg.setAccountNm(accountNm);
|
|
|
+ pg.setAccountNo(accountNo);
|
|
|
+ pg.setBankCd(bankCd);
|
|
|
+ pg.setBatchYn(orderChange.getBatchYn());
|
|
|
+
|
|
|
+ kcpService.kcpCancel(pg);
|
|
|
+ } else if (TscConstants.PgGb.NAVER.value().equals(pgGb)) {
|
|
|
+ pg.setPayMeans(payment.getPayMeans());
|
|
|
+ pg.setChgReasonNm(chgReasonNm);
|
|
|
+
|
|
|
+ naverPayService.cancelNaverPayment(pg);
|
|
|
+ } else if (TscConstants.PgGb.KAKAO.value().equals(pgGb)) {
|
|
|
+ pg.setPayMeans(payment.getPayMeans());
|
|
|
+ kakaoPayService.cancelKakaoPayment(pg);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 11. 환불금액 정보 수정
|
|
|
+ Order refundOrder = new Order();
|
|
|
+ refundOrder.setPaySq(pg.getPaySq());
|
|
|
+ refundOrder.setOrdNo(ordNo);
|
|
|
+ refundOrder.setOrdChgSq(ordChgSq);
|
|
|
+ orderChangeDao.updateRefundInfo(refundOrder);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // 13. 상품권 현금영수증 취소 처리
|
|
|
+ GiftCard giftCardCashReceipts = orderDao.getGiftCardReceiptInfo(ordNo);
|
|
|
+
|
|
|
+ if (giftCardCashReceipts != null && StringUtils.isNotBlank(giftCardCashReceipts.getTradeNo())) {
|
|
|
+ giftCardCashReceipts.setModType("STSC");
|
|
|
+ giftCardCashReceipts.setUsGfcdAmt(giftCardCashReceipts.getAmt());
|
|
|
+
|
|
|
+ kcpService.kcpCashReceiptCancel(giftCardCashReceipts);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|