Quellcode durchsuchen

전체 반품 배송비 상품권 처리 커밋

card007 vor 4 Jahren
Ursprung
Commit
b08d1a3ea7

+ 154 - 106
src/main/java/com/style24/core/biz/service/TscOrderChangeService.java

@@ -2685,11 +2685,6 @@ public class TscOrderChangeService {
 		int rfGfcdUseAmt				= refundInfo.getGfcdUseAmt();
 		int rfDeliveryFee				= refundInfo.getRfDeliveryFee();
 
-		if (refundInfo.getOrgDelvFee() < 0) {
-			refundAmt += refundInfo.getOrgDelvFee();
-			rfDeliveryFee += refundInfo.getOrgDelvFee();
-		}
-
 		// 4. 주문변경정보, 주문정보, 환불정보 (배송정책코드 별)
 		List<Payment> pgList			= new ArrayList<>();
 		List<GiftCard> cashReceiptsList	= new ArrayList<>();
@@ -2983,14 +2978,23 @@ public class TscOrderChangeService {
 				}
 
 				// 4-5. 추가배송비 처리 (배송비허들무너짐)
+				// 2021.09.11 card007 전체반품 원주문 배송비 차감 추가
 				int delvGfcdUseAmt = refundInfo.getDelvGfcdUseAmt();
 				int realDelvAmt = refundInfo.getRealDelvAmt();
-				if (refundInfo.getSpanTotDeliveryFee() > 0) {
+				if (refundInfo.getSpanTotDeliveryFee() > 0 || refundInfo.getOrgDelvFee() > 0) {
+					int delvFee;
+
+					if (refundInfo.getSpanTotDeliveryFee() > 0) {
+						delvFee = refundInfo.getSpanTotDeliveryFee();
+					} else {
+						delvFee = refundInfo.getOrgDelvFee();
+					}
+
 					Order delvFeeOrder = new Order();
 					delvFeeOrder.setOrdNo(ordNo);
 					delvFeeOrder.setDelvFeeGb(TscConstants.DeliveryFeeGb.ORIGIN_DELIVERY_FEE.value());
 					delvFeeOrder.setDelvFeeCd(obj.getDelvFeeCd());
-					delvFeeOrder.setDelvFee(refundInfo.getSpanTotDeliveryFee());
+					delvFeeOrder.setDelvFee(delvFee);
 					delvFeeOrder.setDelvGfcdUseAmt(delvGfcdUseAmt);
 					delvFeeOrder.setRealDelvAmt(realDelvAmt);
 					delvFeeOrder.setOrdChgSq(ordChgSq);
@@ -3049,25 +3053,6 @@ public class TscOrderChangeService {
 					}
 				}
 
-				// TODO 배송정책 별 전체반품 시 원주문배송비 차감
-				// 배송비 허들쪽에 로직 같이 써도 될듯
-				// 원주문 배송비 환불 로직 추가 필요
-				if (refundInfo.getOrgDelvFee() < 0) {
-					Order delvFeeOrder = new Order();
-					delvFeeOrder.setOrdNo(ordNo);
-					delvFeeOrder.setDelvFeeGb(TscConstants.DeliveryFeeGb.ORIGIN_DELIVERY_FEE.value());
-					delvFeeOrder.setDelvFeeCd(obj.getDelvFeeCd());
-					delvFeeOrder.setDelvFee(refundInfo.getOrgDelvFee() * -1);
-					delvFeeOrder.setDelvGfcdUseAmt(0);
-					delvFeeOrder.setRealDelvAmt(refundInfo.getOrgDelvFee() * -1);
-					delvFeeOrder.setOrdChgSq(ordChgSq);
-					delvFeeOrder.setSupplyCompCd(obj.getSupplyCompCd());
-					delvFeeOrder.setRegNo(userNo);
-					delvFeeOrder.setUpdNo(userNo);
-
-					orderChangeDao.createDeliveryFee(delvFeeOrder);
-				}
-
 				// 4-6. 환불 정보 등록
 				OrderChange chgRefund = new OrderChange();
 				chgRefund.setRefundAmt(refundAmt);
@@ -3763,6 +3748,7 @@ public class TscOrderChangeService {
 	 * @author card007
 	 * @since 2021. 08. 12
 	 */
+	@SuppressWarnings("unchecked")
 	public void allRefund(GagaMap map, Integer userNo) {
 		// 1. 변수 설정
 		Integer ordNo			= map.getInt("ordNo");							// 주문번호
@@ -3817,10 +3803,6 @@ public class TscOrderChangeService {
 		OrderChange refundInfo = this.calculateRefundAmt(map);
 		int refundAmt = refundInfo.getRefundAmt();
 
-		if (refundInfo.getOrgDelvFee() < 0) {
-			refundAmt += refundInfo.getOrgDelvFee();
-		}
-		
 		// 6. 주문 전체취소 상태값 설정
 		String modType;
 		if (TscConstants.PgGb.KCP.value().equals(payment.getPgGb())
@@ -3881,7 +3863,7 @@ public class TscOrderChangeService {
 		}
 
 		// 10. 배송비 사용 상품권 원복
-		if (refundInfo.getOrgDelvFee() > 0) {
+		if (refundInfo.getOrgRefundDelvFee() > 0) {
 			vo.setDelvFeeCd(delvFeeCd);
 			for (Order giftCard : orderChangeDao.getCustGiftCardDelvHst(vo)) {
 				giftCard.setOccurGb(TscConstants.GiftCardOccurGb.USE_GIFTCARD_CANCEL.value());
@@ -3905,18 +3887,18 @@ public class TscOrderChangeService {
 		// orderChangeDao.updateCartCpnRollback(coupon);
 		// orderChangeDao.updateDeliveryCpnRollback(coupon);
 
-		// 12. 추가배송비 수정
-		int delvGfcdUseAmt = refundInfo.getRtnDelvGfcdUseAmt();
-		int realDelvAmt = refundInfo.getRtnRealDelvAmt();
+		// 12. 반품배송비 수정
+		int rtnDelvGfcdUseAmt = refundInfo.getRtnDelvGfcdUseAmt();
+		int rtnRealDelvAmt = refundInfo.getRtnRealDelvAmt();
 
 		OrderChange rtnDelvFee = new OrderChange();
 		rtnDelvFee.setOrdChgSq(ordChgSq);
-		rtnDelvFee.setDelvGfcdUseAmt(delvGfcdUseAmt);
-		rtnDelvFee.setRealDelvAmt(realDelvAmt);
+		rtnDelvFee.setDelvGfcdUseAmt(rtnDelvGfcdUseAmt);
+		rtnDelvFee.setRealDelvAmt(rtnRealDelvAmt);
 		rtnDelvFee.setUpdNo(updNo);
 		orderChangeDao.updateReturnDeliveryFee(rtnDelvFee);
 
-		if (delvGfcdUseAmt > 0) {
+		if (rtnDelvGfcdUseAmt > 0) {
 			int rmGfcdAmt;
 			int usGfcdAmt;
 
@@ -3925,7 +3907,7 @@ public class TscOrderChangeService {
 			Integer delvFeeSq = returnDeliveryFeeInfo.getDelvFeeSq();
 			vo.setDelvFeeSq(delvFeeSq);
 
-			// 추가배송비 상품권 결제 처리
+			// 반품배송비 상품권 결제 처리
 			// 환불컨펌 시점에서 상품권이 만료되어져 있을수 있어서 해당 주문건에 사용 후 취소했던 상품권 정보로 처리
 			// Order 도메인 내 delvFeeSq 존재 여부로 구분 처리 진행
 			for (Order custGiftcardInfo : orderDao.getCustGiftcardInfoList(vo)) {
@@ -3934,12 +3916,12 @@ public class TscOrderChangeService {
 				rmGfcdAmt = custGiftcardInfo.getRmGfcdAmt();
 
 				// 남은상품권금액 > 사용상품권금액보다 크면 실행
-				if (rmGfcdAmt > delvGfcdUseAmt) {
-					rmGfcdAmt = rmGfcdAmt - delvGfcdUseAmt;
-					usGfcdAmt = delvGfcdUseAmt;
-					delvGfcdUseAmt = 0;
+				if (rmGfcdAmt > rtnDelvGfcdUseAmt) {
+					rmGfcdAmt = rmGfcdAmt - rtnDelvGfcdUseAmt;
+					usGfcdAmt = rtnDelvGfcdUseAmt;
+					rtnDelvGfcdUseAmt = 0;
 				} else {
-					delvGfcdUseAmt = delvGfcdUseAmt - rmGfcdAmt;
+					rtnDelvGfcdUseAmt = rtnDelvGfcdUseAmt - rmGfcdAmt;
 					usGfcdAmt = rmGfcdAmt;
 					rmGfcdAmt = 0;
 				}
@@ -3962,8 +3944,76 @@ public class TscOrderChangeService {
 				}
 			}
 		}
+
+		// 13. 원주문 배송비 차감 처리
+		// 2021.09.11 card007 전체반품 원주문 배송비 차감 추가
+		int delvGfcdUseAmt = refundInfo.getDelvGfcdUseAmt();
+		int realDelvAmt = refundInfo.getRealDelvAmt();
+		if (refundInfo.getOrgDelvFee() > 0) {
+			Order delvFeeOrder = new Order();
+			delvFeeOrder.setOrdNo(ordNo);
+			delvFeeOrder.setDelvFeeGb(TscConstants.DeliveryFeeGb.ORIGIN_DELIVERY_FEE.value());
+			delvFeeOrder.setDelvFeeCd(delvFeeCd);
+			delvFeeOrder.setDelvFee(refundInfo.getOrgDelvFee());
+			delvFeeOrder.setDelvGfcdUseAmt(delvGfcdUseAmt);
+			delvFeeOrder.setRealDelvAmt(realDelvAmt);
+			delvFeeOrder.setOrdChgSq(ordChgSq);
+			delvFeeOrder.setSupplyCompCd(supplyCompCd);
+			delvFeeOrder.setRegNo(userNo);
+			delvFeeOrder.setUpdNo(userNo);
+
+			orderChangeDao.createDeliveryFee(delvFeeOrder);
+
+			if (delvGfcdUseAmt > 0) {
+				int rmGfcdAmt;
+				int usGfcdAmt;
+
+				// 원주문 배송비 배송비일련번호 조회 및 설정
+				rtnDelvFee.setDelvFeeGb(TscConstants.DeliveryFeeGb.ORIGIN_DELIVERY_FEE.value());
+				OrderChange orgDeliveryFeeInfo = orderChangeDao.getOrgDeliveryFeeInfo(rtnDelvFee);
+				Integer delvFeeSq = orgDeliveryFeeInfo.getDelvFeeSq();
+				vo.setDelvFeeSq(delvFeeSq);
+
+				// 원주문 배송비 상품권 결제 처리
+				// 환불컨펌 시점에서 상품권이 만료되어져 있을수 있어서 해당 주문건에 사용 후 취소했던 상품권 정보로 처리
+				// Order 도메인 내 delvFeeSq 존재 여부로 구분 처리 진행
+				for (Order custGiftcardInfo : orderDao.getCustGiftcardInfoList(vo)) {
+
+					// 상품권사용금액 있으면 실행
+					rmGfcdAmt = custGiftcardInfo.getRmGfcdAmt();
+
+					// 남은상품권금액 > 사용상품권금액보다 크면 실행
+					if (rmGfcdAmt > delvGfcdUseAmt) {
+						rmGfcdAmt = rmGfcdAmt - delvGfcdUseAmt;
+						usGfcdAmt = delvGfcdUseAmt;
+						delvGfcdUseAmt = 0;
+					} else {
+						delvGfcdUseAmt = delvGfcdUseAmt - rmGfcdAmt;
+						usGfcdAmt = rmGfcdAmt;
+						rmGfcdAmt = 0;
+					}
+
+					if (usGfcdAmt > 0) {
+						// 상품권 정보 수정
+						custGiftcardInfo.setUsGfcdAmt(usGfcdAmt);
+						custGiftcardInfo.setRmGfcdAmt(rmGfcdAmt);
+						custGiftcardInfo.setCustNo(custNo);
+						orderDao.updateCustGiftcard(custGiftcardInfo);
+
+						// 상품권 사용 이력 생성
+						custGiftcardInfo.setOccurGb(TscConstants.GiftCardOccurGb.USE_GIFTCARD.value());
+						custGiftcardInfo.setOccurDtlDesc("상품권사용");
+						custGiftcardInfo.setGfcdAmt(usGfcdAmt * -1);
+						custGiftcardInfo.setOrdNo(ordNo);
+						custGiftcardInfo.setOrdDtlNo(0);
+						custGiftcardInfo.setDelvFeeSq(delvFeeSq);
+						orderDao.createCustGiftcardHst(custGiftcardInfo);
+					}
+				}
+			}
+		}
 		
-		// 13. 주문상세정보 수정 및 이력 등록
+		// 14. 주문상세정보 수정 및 이력 등록
 		OrderChange orderDetail = new OrderChange();
 		orderDetail.setOrdNo(ordNo);
 		orderDetail.setOrdDtlStat(ordDtlStat);
@@ -3974,7 +4024,7 @@ public class TscOrderChangeService {
 		orderChangeDao.updateOrderDetailForAllCancel(orderDetail);
 		orderChangeDao.createOrderDetailHstForAllCancel(orderDetail);
 
-		// 14. 주문상세단품정보 수정 및 이력 등록
+		// 15. 주문상세단품정보 수정 및 이력 등록
 		// 2021.06.25 환불컨펌 (반품완료) (정산구분값추가)
 		// 환불컨펌시 확정후반품 처리 체크 로직 추가 (TB_ORDER_DETAIL_ITEM_HST 배송중 일때 반품완료, 결제완료일때 취소완료) 
 		// 2021.07.07 확정후반품 로직 추가
@@ -3988,7 +4038,7 @@ public class TscOrderChangeService {
 		orderChangeDao.updateOrderDetailItemForAllCancel(orderDetail);
 		orderChangeDao.createOrderDetailItemHstForAllCancel(orderDetail);
 		
-		// 15. 배송비 환불
+		// 16. 배송비 환불
 		// Order refundOrder = orderChangeDao.getRefundInfoForAllCancel(vo);
 		OrderChange chgRefund = new OrderChange();
 		chgRefund.setOrdNo(ordNo);
@@ -3998,11 +4048,11 @@ public class TscOrderChangeService {
 		chgRefund.setRfGfcdUseAmt(refundInfo.getGfcdUseAmt());
 		chgRefund.setRfDelvGfcdUseAmt(refundInfo.getRfDelvGfcdUseAmt());
 
-		if(refundInfo.getOrgDelvFee() > 0 || refundInfo.getRfDeliveryFee() != 0) {
-			int rfDeliveryFee = refundInfo.getOrgDelvFee() + refundInfo.getRfDeliveryFee();
+		if(refundInfo.getOrgRefundDelvFee() > 0 || refundInfo.getRfDeliveryFee() != 0) {
+			int rfDeliveryFee = refundInfo.getOrgRefundDelvFee() + refundInfo.getRfDeliveryFee();
 
-			// 0보다 크면 원주문 배송비 환불
-			if (refundInfo.getOrgDelvFee() > 0) {
+			// 원주문 배송비 환불
+			if (refundInfo.getOrgRefundDelvFee() > 0) {
 				// 배송비
 				OrderChange ordDelvFee = new OrderChange();
 				ordDelvFee.setOrdNo(ordNo);
@@ -4012,24 +4062,8 @@ public class TscOrderChangeService {
 
 				orderChangeDao.insertTbDeliveryFeeMinus(ordDelvFee);
 			}
-			// 0보다 작으면 원주문 배송비 차감
-			else if (refundInfo.getOrgDelvFee() < 0) {
-				Order delvFeeOrder = new Order();
-				delvFeeOrder.setOrdNo(ordNo);
-				delvFeeOrder.setDelvFeeGb(TscConstants.DeliveryFeeGb.ORIGIN_DELIVERY_FEE.value());
-				delvFeeOrder.setDelvFeeCd(delvFeeCd);
-				delvFeeOrder.setDelvFee(refundInfo.getOrgDelvFee() * -1);
-				delvFeeOrder.setDelvGfcdUseAmt(0);
-				delvFeeOrder.setRealDelvAmt(refundInfo.getOrgDelvFee() * -1);
-				delvFeeOrder.setOrdChgSq(ordChgSq);
-				delvFeeOrder.setSupplyCompCd(supplyCompCd);
-				delvFeeOrder.setRegNo(userNo);
-				delvFeeOrder.setUpdNo(userNo);
-
-				orderChangeDao.createDeliveryFee(delvFeeOrder);
-			}
 
-			// 환불 kjc
+			// 환불
 			// chgRefund.setRfDeliveryFee(addDeliveryFee);
 			chgRefund.setRfDeliveryFee(rfDeliveryFee);
 			chgRefund.setRfRealCnclAmt(refundAmt - rfDeliveryFee);
@@ -4037,7 +4071,7 @@ public class TscOrderChangeService {
 			
 		}
 		
-		// 16. 착불비 처리 
+		// 17. 착불비 처리 
 		if("Y".equals(codFeeYn)) {
 			// 착불비  
 			OrderChange ordDelvFee = new OrderChange();
@@ -4054,7 +4088,7 @@ public class TscOrderChangeService {
 			orderChangeDao.updateRefundChange(chgRefund);
 		}
 		
-		// 17. 동봉비 처리 
+		// 18. 동봉비 처리 
 		if("Y".equals(enCloseFeeYn)) {
 			// 배송비  
 			OrderChange ordDelvFee = new OrderChange();
@@ -4071,7 +4105,7 @@ public class TscOrderChangeService {
 			orderChangeDao.updateRefundChange(chgRefund);
 		}
 		
-		// 18. TB_WITHDRAW 정보 수정 (동봉비 착불비)
+		// 19. TB_WITHDRAW 정보 수정 (동봉비 착불비)
 		OrderChange chgFee = new OrderChange();
 		chgFee.setWdInvoiceNo(wdInvoiceNo);
 		chgFee.setOrdChgSq(ordChgSq);
@@ -4080,7 +4114,7 @@ public class TscOrderChangeService {
 		chgFee.setUpdNo(regNo);
 		orderChangeDao.updateWithdrawFee(chgFee);
 		
-		// 19. PG 연동
+		// 20. PG 연동
 		String pgGb = payment.getPgGb();
 		String payMeans = payment.getPayMeans();
 
@@ -4143,14 +4177,14 @@ public class TscOrderChangeService {
 			kakaoPayService.cancelKakaoPayment(pg);
 		}
 
-		// 20. 환불 정보 수정
+		// 21. 환불 정보 수정
 		Order refundUpdate = new Order();
 		refundUpdate.setOrdNo(ordNo);
 		refundUpdate.setPaySq(pg.getPaySq());
 		refundUpdate.setOrdChgSq(ordChgSq);
 		orderChangeDao.updateRefundInfo(refundUpdate);
 
-		// 21. 상품권 현금영수증 취소 처리
+		// 22. 상품권 현금영수증 취소 처리
 		GiftCard giftCardCashReceipts = orderDao.getGiftCardReceiptInfo(ordNo);
 
 		if (giftCardCashReceipts != null && StringUtils.isNotBlank(giftCardCashReceipts.getTradeNo())) {
@@ -5899,6 +5933,7 @@ public class TscOrderChangeService {
 	 * @author card007
 	 * @since 2021. 08. 11
 	 */
+	@SuppressWarnings("unchecked")
 	private OrderChange calculateRefundAmt(GagaMap map) {
 		OrderChange result = new OrderChange();
 		String[] chgReasonCustomer	= {"G686_10", "G688_10"};						// 고객귀책사유 배열
@@ -5922,8 +5957,9 @@ public class TscOrderChangeService {
 		int sumDeliveryFee			= map.getInt("sumDeliveryFee");
 		int spanRefundDelvCpnAmt	= map.getInt("spanRefundDelvCpnAmt");
 		boolean isCustomer			= chgReasonCustomerList.contains(chgReason);	// 고객귀책 여부
-		
-		int orgDelvFee				= 0;											// 환불 원주문 배송비
+
+		int orgRefundDelvFee		= 0;											// 원주문배송비 환불 금액
+		int orgDeductionDelvFee		= 0;											// 원주문배송비 차감 금액 (전체반품 고객사유)
 		int rfDeliveryFee			= 0;											// 환불 배송비
 		int rfDelvGfcdUseAmt		= 0;											// 환불 배송비 상품권
 		int totDeliveryFee			= 0;											// 추가배송비 계산
@@ -5932,9 +5968,10 @@ public class TscOrderChangeService {
 		int addDelvFee				= 0;											// 추가배송비 (배송비 허들 깨짐) - 사유계산
 		
 		// 전체반품 원주문 배송비 처리
-		String allDelvCanYn			= "";
-		int orgRefundDelvFee		= 0;
-		
+		String allDelvCanYn			= "";											// 배송비정책 별 전체반품 여부
+		int orgDelvFee				= 0;											// 원주문배송비 차감 금액
+
+		// 배송비정책 별 전체반품 여부 설정
 		if (map.get("delvCanYn") instanceof GagaMap) {
 			GagaMap delvCanYn = (GagaMap)map.get("delvCanYn");
 			if (delvCanYn != null) {
@@ -5951,7 +5988,7 @@ public class TscOrderChangeService {
 					List<Order> returnOrderInfo = (ArrayList<Order>)map.get("returnOrderInfo");
 
 					if (returnOrderInfo != null && returnOrderInfo.size() > 0 && returnOrderInfo.get(0).getDelvGfcdUseAmt() + returnOrderInfo.get(0).getRealDelvAmt() == 0) {
-						orgRefundDelvFee = returnOrderInfo.get(0).getOrgDelvFee();
+						orgDelvFee = returnOrderInfo.get(0).getOrgDelvFee();
 					}
 				}
 			}
@@ -5965,7 +6002,7 @@ public class TscOrderChangeService {
 				refundAmt = spanRealCnclRtnAmt + spanSumDeliveryFee - spanDelvCpnDcAmt - spanDelvGfcdUseAmt;
 				
 				// 환불 원주문 배송비 = 원주문배송비 - 원주문배송비 쿠폰 사용 금액 - 원주문배송비 상품권 사용 금액
-				orgDelvFee = spanSumDeliveryFee - spanDelvCpnDcAmt - spanDelvGfcdUseAmt;
+				orgRefundDelvFee = spanSumDeliveryFee - spanDelvCpnDcAmt - spanDelvGfcdUseAmt;
 				
 				// 환불 배송비 상품권 = 원주문배송비 상품권 사용 금액
 				rfDelvGfcdUseAmt = spanDelvGfcdUseAmt;
@@ -5987,38 +6024,39 @@ public class TscOrderChangeService {
 						// 환불금액 = 취소/반품 상품 실결제 금액 + 동봉비 + 반품배송비 결제 금액
 						refundAmt = spanRealCnclRtnAmt + enCloseFee + addPayCost;
 
-						// 추가배송비 = 추가배송비(배송비 허들 깨짐)
+						// 반품배송비
 						// 2021.08.12 회수요청시에 착불비가 발생하면 철회 후 직접배송으로 재접수해야 환불금액에 이상이 없을듯 (모니터링 필요)
 						// 2021.09.07 card007 착불비 등록 처리
 						totRtnDelvFee = spanTotRtnDelvFee + codFee;
 						// totRtnDelvFee = spanTotRtnDelvFee;
 
 						// 배송비정책 원주문 배송비 차감 처리
-						orgDelvFee = orgRefundDelvFee * -1;
+						orgDeductionDelvFee = orgDelvFee;
 
-						// 환불 배송비 = -추가배송비(배송비 허들 깨짐)
-						rfDeliveryFee = totRtnDelvFee * -1;
+						// 환불 배송비 = 반품배송비 + 원주문 배송비 차감
+						rfDeliveryFee = (totRtnDelvFee + orgDeductionDelvFee) * -1;
 					}
 					// 직접배송 (취소/반품)
 					else {
-						// 환불금액 = 취소/반품 상품 실결제 금액 + 동봉비 + 반품배송비 결제 금액
 						// 반품
 						if ("G688".equals(chgGb)) {
+							// 환불금액 = 취소/반품 상품 실결제 금액 + 동봉비 + 반품배송비 결제 금액
 							refundAmt = spanRealCnclRtnAmt + enCloseFee + addPayCost;
 
 							// 배송비정책 원주문 배송비 차감 처리
-							orgDelvFee = orgRefundDelvFee * -1;
+							orgDeductionDelvFee = orgDelvFee;
 						}
 						// 취소
 						else {
+							// 환불금액 = 취소/반품 상품 실결제 금액 + (원주문배송비 - 원주문배송비 쿠폰 사용 금액 - 원주문배송비 상품권 사용 금액)
 							refundAmt = spanRealCnclRtnAmt + sumDeliveryFee - spanRefundDelvCpnAmt - spanDelvGfcdUseAmt;
 						}
 						
 						// 반품배송비 = 착불비
 						totRtnDelvFee = codFee;
 
-						// 환불배송비 = -착불비
-						rfDeliveryFee = totRtnDelvFee * -1;
+						// 환불배송비 = 착불비 + 원주문 배송비 차감
+						rfDeliveryFee = (totRtnDelvFee + orgDeductionDelvFee) * -1;
 					}
 				}
 				// 회사귀책사유
@@ -6027,7 +6065,7 @@ public class TscOrderChangeService {
 					refundAmt = spanRealCnclRtnAmt + spanSumDeliveryFee - spanDelvCpnDcAmt - spanDelvGfcdUseAmt;
 
 					// 환불 원주문 배송비 = 원주문배송비 - 원주문배송비 쿠폰 사용 금액 - 원주문배송비 상품권 사용 금액
-					orgDelvFee = spanSumDeliveryFee - spanDelvCpnDcAmt - spanDelvGfcdUseAmt;
+					orgRefundDelvFee = spanSumDeliveryFee - spanDelvCpnDcAmt - spanDelvGfcdUseAmt;
 
 					// 환불 배송비 상품권 = 원주문배송비 상품권 사용 금액
 					rfDelvGfcdUseAmt = spanDelvGfcdUseAmt;
@@ -6043,32 +6081,31 @@ public class TscOrderChangeService {
 						refundAmt = spanRealCnclRtnAmt + enCloseFee + addPayCost;
 
 						// 추가배송비 = 추가배송비(배송비 허들 깨짐)
-						// 2021.08.12 회수요청시에 착불비가 발생하면 철회 후 직접배송으로 재접수해야 환불금액에 이상이 없을듯 (모니터링 필요)
-						// totDeliveryFee = spanTotDeliveryFee + spanTotRtnDelvFee + codFee;
 						totDeliveryFee = spanTotDeliveryFee;
 						addDelvFee = spanTotDeliveryFee;
 
 						// 배송비정책 원주문 배송비 차감 처리
-						orgDelvFee = orgRefundDelvFee * -1;
+						orgDeductionDelvFee = orgDelvFee;
 
-						// 반품배송비 = 반품배송비
-						totRtnDelvFee = spanTotRtnDelvFee;
+						// 반품배송비 = 반품배송비 + 착불비
+						totRtnDelvFee = spanTotRtnDelvFee + codFee;
 						
-						// 환불배송비 = -(추가배송비 + 반품배송비)
-						rfDeliveryFee = (totDeliveryFee + totRtnDelvFee) * -1;
+						// 환불배송비 = 추가배송비 + 반품배송비 + 착불비 + 원주문 배송비 차감
+						rfDeliveryFee = (totDeliveryFee + totRtnDelvFee + orgDeductionDelvFee) * -1;
 					}
 					// 직접배송 (취소/반품)
 					else {
-						// 환불금액 = 취소/반품 상품 실결제 금액 + 동봉비 + 반품배송비 결제 금액
 						// 반품
 						if ("G688".equals(chgGb)) {
+							// 환불금액 = 취소/반품 상품 실결제 금액 + 동봉비 + 반품배송비 결제 금액
 							refundAmt = spanRealCnclRtnAmt + enCloseFee + addPayCost;
 
 							// 배송비정책 원주문 배송비 차감 처리
-							orgDelvFee = orgRefundDelvFee * -1;
+							orgDeductionDelvFee = orgDelvFee;
 						}
 						// 취소
 						else {
+							// 환불금액 = 취소/반품 상품 실결제 금액 + (원주문배송비 - 원주문배송비 쿠폰 사용 금액 - 원주문배송비 상품권 사용 금액)
 							refundAmt = spanRealCnclRtnAmt + sumDeliveryFee - spanRefundDelvCpnAmt - spanDelvGfcdUseAmt;
 						}
 
@@ -6079,8 +6116,8 @@ public class TscOrderChangeService {
 						// 반품배송비 = 착불비
 						totRtnDelvFee = codFee;
 						
-						// 환불배송비 = -(추가배송비 + 착불비)
-						rfDeliveryFee = (totDeliveryFee + totRtnDelvFee) * -1;
+						// 환불배송비 = 추가배송비 + 착불비 + 원주문 배송비 차감
+						rfDeliveryFee = (totDeliveryFee + totRtnDelvFee + orgDeductionDelvFee) * -1;
 					}
 				}
 				// 회사귀책사유
@@ -6096,7 +6133,7 @@ public class TscOrderChangeService {
 						refundAmt = spanRealCnclRtnAmt + sumDeliveryFee - spanRefundDelvCpnAmt - spanDelvGfcdUseAmt;
 
 						// 환불 원주문 배송비 = 원주문배송비 - 원주문배송비 쿠폰 사용 금액 - 원주문배송비 상품권 사용 금액
-						orgDelvFee = sumDeliveryFee - spanRefundDelvCpnAmt - spanDelvGfcdUseAmt;
+						orgRefundDelvFee = sumDeliveryFee - spanRefundDelvCpnAmt - spanDelvGfcdUseAmt;
 
 						// 환불 배송비 상품권 = 원주문배송비 상품권 사용 금액
 						rfDelvGfcdUseAmt = spanDelvGfcdUseAmt;
@@ -6105,9 +6142,21 @@ public class TscOrderChangeService {
 			}
 		}
 
-		// 추가배송비 처리
-		int realDelvAmt = totDeliveryFee;
+		// 원주문 배송비 차감 처리
+		int realDelvAmt = 0;
+
+		// 배송비 허들 깨짐
+		if (totDeliveryFee > 0) {
+			realDelvAmt = totDeliveryFee;
+		}
+		// 전체반품 고객사유로 원주문배송비 차감
+		else if (orgDeductionDelvFee > 0) {
+			realDelvAmt = orgDeductionDelvFee;
+			totDeliveryFee = orgDeductionDelvFee;
+		}
+
 		int delvGfcdUseAmt = 0;
+
 		if (totDeliveryFee > 0) {
 			if (refundAmt < totDeliveryFee) {
 				totDeliveryFee -= refundAmt;
@@ -6144,12 +6193,11 @@ public class TscOrderChangeService {
 				rtnDelvGfcdUseAmt = totRtnDelvFee;
 			}
 		}
-		
-		// TODO원주문배송비 차감 처리(전체반품 고객사유)
 
 		result.setRefundAmt(refundAmt);					// PG 환불 금액
 		result.setGfcdUseAmt(spanGfcdUseAmt);			// 상품권 환불 금액
-		result.setOrgDelvFee(orgDelvFee);				// 원주문 배송비 환불 금액
+		result.setOrgDelvFee(orgDeductionDelvFee);		// 원주문 배송비 차감 금액(전체반품 고객사유)
+		result.setOrgRefundDelvFee(orgRefundDelvFee);	// 원주문 배송비 환불 금액
 		result.setRfDeliveryFee(rfDeliveryFee);			// 배송비 환불 금액
 		result.setRfDelvGfcdUseAmt(rfDelvGfcdUseAmt);	// 배송비 상품권 환불 금액
 		result.setRealDelvAmt(realDelvAmt);				// 추가배송비 실결제 금액

+ 0 - 6
src/main/java/com/style24/core/biz/service/TscOrderRefundService.java

@@ -301,12 +301,9 @@ public class TscOrderRefundService {
 									obj.setAddDelvFeeYn("Y");
 									obj.setAddDelvFee(obj.getOrgDelvFee());
 								}
-
-								log.info("이놈이다2222 >>> {}", obj.getAllDelvCanYn());
 							}
 						} else {
 							// 4.5 추가배송비 발생 (취소신청화면에서 대부분 아래의 조건에 해당)
-							// TODO allDelvCanYn 가지고 와서 배송비 정책 전체 취소면 추가배송비는 0처리
 							if ("Y".equals(obj.getAllDelvCanYn())) {
 								obj.setAddDelvFeeYn("N");
 								obj.setAddDelvFee(0);
@@ -314,8 +311,6 @@ public class TscOrderRefundService {
 								obj.setAddDelvFeeYn("Y");
 								obj.setAddDelvFee(obj.getOrgDelvFee());
 							}
-
-							log.info("이놈이다 >>> {}", leftOrdAmt);
 						}
 					}
 				} else {
@@ -324,7 +319,6 @@ public class TscOrderRefundService {
 				}
 			}
 
-			log.info("getRtnDelvFee >>> {}", obj.getRtnDelvFee());
 			spanDelvCpnDcAmt		+= obj.getDelvCpnDcAmt();
 			spanSumDeliveryFee		+= obj.getDelvFee();
 			spanRtnSumDeliveryFee	+= obj.getRtnDelvFee();