Ver Fonte

Merge branch 'card007' into develop

card007 há 4 anos atrás
pai
commit
fbc435c8c4

+ 10 - 0
src/main/java/com/style24/core/biz/dao/TscOrderChangeDao.java

@@ -1097,4 +1097,14 @@ public interface TscOrderChangeDao {
 	 * @since 2021. 08. 18
 	 */
 	Collection<OrderChange> getExchangeApprovalTargetList(OrderChange orderChange);
+
+	/**
+	 * 마이페이지 반품 주문 정보 조회
+	 *
+	 * @param Order
+	 * @return Collection<Order>
+	 * @author card007
+	 * @since 2021. 09. 07
+	 */
+	Collection<Order> getReturnOrderInfo(Order order);
 }

+ 173 - 6
src/main/java/com/style24/core/biz/service/TscOrderChangeService.java

@@ -2397,19 +2397,51 @@ public class TscOrderChangeService {
 		Order cnclRtn = cnclRtnList.iterator().next();
 
 		// 전체 및 마지막 취소여부 설정
+		int cnt						= 0;
+		int sumCnclRtnQty			= 0;
+		int totOrdQty				= 0;
 		String delvFeeCd 			= "";
+		String delvFeeCd2			= "";
 		String allCanYn 			= "Y";
 		String allLastCanYn 		= "Y";
+		String allDelvCanYn			= "Y";
 		List<String> delvFeeCdList 	= new ArrayList<>();
+		GagaMap delvCanYn			= new GagaMap();
+		List<String> delvFeeCdCanList = new ArrayList<>();
+		List<String> allDelvCanYnList = new ArrayList<>();
 
 		for (Order order : cnclRtnList) {
 			int index 		= ordDtlNoList.indexOf(order.getOrdDtlNo());
 			int ordQty 		= order.getOrdQty();
 			int cnclRtnQty 	= order.getCnclRtnQty();
 
+			// 전체 주문 수량
+			totOrdQty		= order.getTotOrdQty();
+
+			// 취소 요청 수량 합계
+			if (index >= 0) {
+				sumCnclRtnQty += cnclRtnReqQtyArr[index];
+			}
+
 			// 전체 취소 여부 설정
-			if ("Y".equals(allCanYn) && (index < 0 || cnclRtnReqQtyArr[index] != ordQty)) {
-				allCanYn = "N";
+			// if ("Y".equals(allCanYn) && (index < 0 || cnclRtnReqQtyArr[index] != ordQty)) {
+			// 	allCanYn = "N";
+			// }
+
+			// 배송비 코드 별 전체 취소/반품 여부 처리
+			if (!delvFeeCd2.equals(order.getDelvFeeCd())) {
+				if (cnt > 0) {
+					delvFeeCdCanList.add(delvFeeCd2);
+					allDelvCanYnList.add(allDelvCanYn);
+
+					allDelvCanYn = "Y";
+				}
+
+				delvFeeCd2 = order.getDelvFeeCd();
+			}
+
+			if ("Y".equals(allDelvCanYn) && (index < 0 || cnclRtnReqQtyArr[index] != ordQty)) {
+				allDelvCanYn = "N";
 			}
 
 			// 취소신청
@@ -2441,6 +2473,21 @@ public class TscOrderChangeService {
 					delvFeeCd = order.getDelvFeeCd();
 				}
 			}
+			
+			cnt++;
+		}
+
+		// 배송비 코드 별 전체 취소/반품 여부 설정
+		if (delvFeeCdCanList.size() == 0) {
+			delvFeeCdCanList.add(delvFeeCd2);
+			allDelvCanYnList.add(allDelvCanYn);
+		}
+		delvCanYn.set("delvFeeCdCanList", delvFeeCdCanList);
+		delvCanYn.set("allDelvCanYnList", allDelvCanYnList);
+
+		// 전체 취소 여부 설정
+		if (totOrdQty != sumCnclRtnQty) {
+			allCanYn = "N";
 		}
 
 		// 무통장입금전 전체취소여부 설정
@@ -2461,7 +2508,7 @@ public class TscOrderChangeService {
 			} else {
 				order.setLastCanYn("Y");
 			}
-
+			
 			// 변경 수량 설정
 			if (index >= 0) {
 				order.setOrdCanChgQty(cnclRtnReqQtyArr[index]);
@@ -2471,6 +2518,12 @@ public class TscOrderChangeService {
 				//order.setRtnDelvFee(0);
 			}
 
+			// 배송비 정책 별 전체 취소/반품 여부
+			int idx = delvFeeCdCanList.indexOf(order.getDelvFeeCd());
+			if (idx >= 0) {
+				order.setAllDelvCanYn(allDelvCanYnList.get(idx));
+			}
+
 			cnclReqList.add(order);
 		}
 
@@ -2482,6 +2535,7 @@ public class TscOrderChangeService {
 		result.setString("pgGb"						, cnclRtn.getPgGb());			// PG구분
 		result.setString("cashAuthNo"				, cnclRtn.getCashAuthNo());		// 현금영수증 승인번호
 		result.set("cnclReqList"					, cnclReqList);					// 취소신청목록
+		result.set("delvCanYn"						, delvCanYn);					// 배송비 코드 별 전체 취소/반품 여부
 
 		return result;
 	}
@@ -2538,6 +2592,7 @@ public class TscOrderChangeService {
 			orderChange.setOrdNo(ordNo);
 			orderChange.setChgGb(chgGb);
 			orderChange.setChgStat(chgStat);
+			orderChange.setDelvFeeCdGrp(delvFeeCd);
 			orderChange.setOrdDtlNoArr(ordDtlNoArr);
 			orderChange.setCnclRtnReqQtyArr(cnclRtnReqQtyArr);
 
@@ -2556,6 +2611,7 @@ public class TscOrderChangeService {
 			result.set("cashAuthNo",            refundPreInfo.get("cashAuthNo"));
 			result.set("addPayCost",            addPayCost);
 			result.set("delvFeeCd",             delvFeeCd);
+			result.set("delvCanYn",             refundPreInfo.get("delvCanYn"));
 			
 		}
 		return result;
@@ -2599,6 +2655,7 @@ public class TscOrderChangeService {
 		int enCloseFee 			= map.getInt("enCloseFee");										// 동봉비
 		String enCloseFeeYn 	= map.getString("enCloseFeeYn");								// 동봉비여부
 		String wdInvoiceNo		= map.getString("codFeeYn");									// 회수송장번호
+		String delvFeeCd		= map.getString("delvFeeCd");									// 배송비정책코드
 		int regNo				= userNo;														// 등록자번호
 		int updNo				= userNo;														// 수정자번호
 		
@@ -2614,11 +2671,21 @@ public class TscOrderChangeService {
 		}
 		
 		// 3. 환불정보 설정
+		Order returnOrderInfo = new Order();
+		returnOrderInfo.setOrdNo(ordNo);
+		returnOrderInfo.setDelvFeeCd(delvFeeCd);
+		map.set("returnOrderInfo", this.getReturnOrderInfo(returnOrderInfo));
+
 		OrderChange refundInfo			= this.calculateRefundAmt(map);
 		int refundAmt					= refundInfo.getRefundAmt();
 		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<>();
@@ -2978,6 +3045,22 @@ public class TscOrderChangeService {
 					}
 				}
 
+				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);
@@ -3095,6 +3178,7 @@ public class TscOrderChangeService {
 			}
 			// 네이버페이 결제형 결제 취소 처리
 			else if (TscConstants.PgGb.NAVER.value().equals(pgGb)) {
+				pg.setPayAmt(pg.getPartCancelAmt());
 				pg.setPayMeans(payMeans);
 				pg.setChgReasonNm(chgReasonNm);
 
@@ -3102,6 +3186,7 @@ public class TscOrderChangeService {
 			}
 			// 카카오페이 결제 취소 처리
 			else if (TscConstants.PgGb.KAKAO.value().equals(pgGb)) {
+				pg.setPayAmt(pg.getPartCancelAmt());
 				pg.setPayMeans(payMeans);
 				kakaoPayService.cancelKakaoPayment(pg);
 			}
@@ -3690,6 +3775,12 @@ public class TscOrderChangeService {
 		int enCloseFee			= map.getInt("enCloseFee");						// 동봉비
 		String wdInvoiceNo		= map.getString("wdInvoiceNo");					// 회수송장번호
 		String delvFeeCd		= map.getString("delvFeeCd");					// 배송비정책코드
+		String supplyCompCd		= "";
+
+		List<Order> cancelDelvRefundList 	= (List<Order>) map.get("cancelDelvRefundList");	// 취소환불배송금액 목록 (DELV_FEE_CD 단위)
+		if (cancelDelvRefundList != null && cancelDelvRefundList.size() > 0) {
+			supplyCompCd = cancelDelvRefundList.iterator().next().getSupplyCompCd();
+		}
 
 		// 2. 상태값 설정
 		String ordDtlStat = TscConstants.OrderDetailStat.PAYMENT_AFTER_CANCEL.value();
@@ -3711,8 +3802,16 @@ public class TscOrderChangeService {
 		payment = orderChangeDao.getPaymentInfo(payment);
 
 		// 5. 환불금액 설정
+		Order returnOrderInfo = new Order();
+		returnOrderInfo.setOrdNo(ordNo);
+		returnOrderInfo.setDelvFeeCd(delvFeeCd);
+		map.set("returnOrderInfo", this.getReturnOrderInfo(returnOrderInfo));
 		OrderChange refundInfo = this.calculateRefundAmt(map);
 		int refundAmt = refundInfo.getRefundAmt();
+
+		if (refundInfo.getOrgDelvFee() < 0) {
+			refundAmt += refundInfo.getOrgDelvFee();
+		}
 		
 		// 6. 주문 전체취소 상태값 설정
 		String modType;
@@ -3893,6 +3992,8 @@ public class TscOrderChangeService {
 
 		if(refundInfo.getOrgDelvFee() > 0 || refundInfo.getRfDeliveryFee() != 0) {
 			int rfDeliveryFee = refundInfo.getOrgDelvFee() + refundInfo.getRfDeliveryFee();
+
+			// 0보다 크면 원주문 배송비 환불
 			if (refundInfo.getOrgDelvFee() > 0) {
 				// 배송비
 				OrderChange ordDelvFee = new OrderChange();
@@ -3900,10 +4001,27 @@ public class TscOrderChangeService {
 				ordDelvFee.setOrdChgSq(ordChgSq);
 				ordDelvFee.setRegNo(regNo);
 				ordDelvFee.setUpdNo(updNo);
+
 				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);
@@ -5780,6 +5898,7 @@ public class TscOrderChangeService {
 		String chgReason			= map.getString("chgReason");					// 변경사유코드
 		String chgGb				= chgReason.split("_")[0];						// 취소/반품 구분
 		String wdGb					= map.getString("wdGb");						// 회수구분
+		String delvFeeCd			= map.getString("delvFeeCd");					// 배송비정책코드
 		String allCanYn				= map.getString("allCanYn");					// 전체취소/반품여부
 		String delvExpnYn			= map.getString("delvExpnYn");					// 출고예외여부
 		int enCloseFee				= map.getInt("enCloseFee");						// 동봉비
@@ -5803,6 +5922,29 @@ public class TscOrderChangeService {
 		int totRtnDelvFee			= 0;											// 반품배송비 계산
 		int refundAmt;																// 환불금액
 		int addDelvFee				= 0;											// 추가배송비 (배송비 허들 깨짐) - 사유계산
+		
+		// 전체반품 원주문 배송비 처리
+		GagaMap delvCanYn			= (GagaMap) map.get("delvCanYn");
+		String allDelvCanYn			= "";
+		int orgRefundDelvFee		= 0;
+		if (delvCanYn != null) {
+			List<String> delvFeeCdCanList = (ArrayList<String>) delvCanYn.get("delvFeeCdCanList");
+			List<String> allDelvCanYnList = (ArrayList<String>) delvCanYn.get("allDelvCanYnList");
+			
+			int index = delvFeeCdCanList.indexOf(delvFeeCd);
+			
+			if (index >= 0) {
+				allDelvCanYn = allDelvCanYnList.get(index);
+			}
+			
+			if ("Y".equals(allDelvCanYn)) {
+				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();
+				}
+			}
+		}
 
 		// 출고예외(확정후 품절,불량)일 경우
 		if ("Y".equals(delvExpnYn)) {
@@ -5836,8 +5978,12 @@ public class TscOrderChangeService {
 
 						// 추가배송비 = 추가배송비(배송비 허들 깨짐)
 						// 2021.08.12 회수요청시에 착불비가 발생하면 철회 후 직접배송으로 재접수해야 환불금액에 이상이 없을듯 (모니터링 필요)
-						// totRtnDelvFee = spanTotRtnDelvFee + codFee;
-						totRtnDelvFee = spanTotRtnDelvFee;
+						// 2021.09.07 card007 착불비 등록 처리
+						totRtnDelvFee = spanTotRtnDelvFee + codFee;
+						// totRtnDelvFee = spanTotRtnDelvFee;
+
+						// 배송비정책 원주문 배송비 차감 처리
+						orgDelvFee = orgRefundDelvFee * -1;
 
 						// 환불 배송비 = -추가배송비(배송비 허들 깨짐)
 						rfDeliveryFee = totRtnDelvFee * -1;
@@ -5848,6 +5994,9 @@ public class TscOrderChangeService {
 						// 반품
 						if ("G688".equals(chgGb)) {
 							refundAmt = spanRealCnclRtnAmt + enCloseFee + addPayCost;
+
+							// 배송비정책 원주문 배송비 차감 처리
+							orgDelvFee = orgRefundDelvFee * -1;
 						}
 						// 취소
 						else {
@@ -5888,6 +6037,9 @@ public class TscOrderChangeService {
 						totDeliveryFee = spanTotDeliveryFee;
 						addDelvFee = spanTotDeliveryFee;
 
+						// 배송비정책 원주문 배송비 차감 처리
+						orgDelvFee = orgRefundDelvFee * -1;
+
 						// 반품배송비 = 반품배송비
 						totRtnDelvFee = spanTotRtnDelvFee;
 						
@@ -5900,6 +6052,9 @@ public class TscOrderChangeService {
 						// 반품
 						if ("G688".equals(chgGb)) {
 							refundAmt = spanRealCnclRtnAmt + enCloseFee + addPayCost;
+
+							// 배송비정책 원주문 배송비 차감 처리
+							orgDelvFee = orgRefundDelvFee * -1;
 						}
 						// 취소
 						else {
@@ -5992,4 +6147,16 @@ public class TscOrderChangeService {
 
 		return result;
 	}
+
+	/**
+	 * 마이페이지 반품 주문 정보 조회
+	 *
+	 * @param Order
+	 * @return Collection<Order>
+	 * @author card007
+	 * @since 2021. 09. 07
+	 */
+	public Collection<Order> getReturnOrderInfo(Order order) {
+		return orderChangeDao.getReturnOrderInfo(order);
+	}
 }

+ 34 - 7
src/main/java/com/style24/core/biz/service/TscOrderRefundService.java

@@ -86,6 +86,7 @@ public class TscOrderRefundService {
 		delvObj.setSupplyCompCd(cnclRtnList.get(k).getSupplyCompCd());
 		delvObj.setDelvFeeCd(cnclRtnList.get(k).getDelvFeeCd());
 		delvObj.setLastCanYn(cnclRtnList.get(k).getLastCanYn());
+		delvObj.setAllDelvCanYn(cnclRtnList.get(k).getAllDelvCanYn());
 		cancelDelvRefundList.add(delvObj);
 		
 		// 3. 취소신청수량 정보를 취소 환불 금액 계산
@@ -158,6 +159,7 @@ public class TscOrderRefundService {
 			orderObj.setOrdDtlStat(oneData.getOrdDtlStat());
 			orderObj.setOrdDtlStatNm(oneData.getOrdDtlStatNm());
 			orderObj.setLastCanYn(oneData.getLastCanYn()); // 전체취소 여부 (기존의 취소 또는 출고, 반품, 교환 의 경우에는 전체취소 불가능)
+			orderObj.setAllDelvCanYn(oneData.getAllDelvCanYn());
 			orderObj.setDelvYn(oneData.getDelvYn());
 			
 			cancelOrderRefundList.add(orderObj);
@@ -187,6 +189,10 @@ public class TscOrderRefundService {
 				if ("N".equals(orderObj.getLastCanYn())) {
 					cancelDelvRefundList.get(k).setLastCanYn("N");
 				}
+
+				if ("N".equals(orderObj.getAllDelvCanYn())) {
+					cancelDelvRefundList.get(k).setAllDelvCanYn("N");
+				}
 			} else {
 				k++;
 				
@@ -218,6 +224,7 @@ public class TscOrderRefundService {
 				delvObj.setSupplyCompCd(orderObj.getSupplyCompCd());
 				delvObj.setDelvFeeCd(orderObj.getDelvFeeCd());
 				delvObj.setLastCanYn(orderObj.getLastCanYn());
+				delvObj.setAllDelvCanYn(orderObj.getAllDelvCanYn());
 				delvObj.setDelvYn(orderObj.getDelvYn());
 				
 				cancelDelvRefundList.add(delvObj);
@@ -277,19 +284,38 @@ public class TscOrderRefundService {
 								// 취소는 주문 금액 - 취소 금액이 0이면 취소는 추가배송비 여부가 없음.
 								obj.setAddDelvFee(0);
 							} else {
-								if ("N".equals(obj.getLastCanYn())) {
-									obj.setAddDelvFeeYn("Y");
-									obj.setAddDelvFee(obj.getOrgDelvFee());
-								} else {
-									// 4.4 전체취소의 경우에 해당
+								// if ("N".equals(obj.getLastCanYn())) {
+								// 	obj.setAddDelvFeeYn("Y");
+								// 	obj.setAddDelvFee(obj.getOrgDelvFee());
+								// } else {
+								// 	// 4.4 전체취소의 경우에 해당
+								// 	obj.setAddDelvFeeYn("N");
+								// 	obj.setAddDelvFee(0);
+								// }
+
+								// 2021.09.08 card007 배송비정책 기준 으로 변경
+								if ("Y".equals(obj.getAllDelvCanYn())) {
 									obj.setAddDelvFeeYn("N");
 									obj.setAddDelvFee(0);
+								} else {
+									obj.setAddDelvFeeYn("Y");
+									obj.setAddDelvFee(obj.getOrgDelvFee());
 								}
+
+								log.info("이놈이다2222 >>> {}", obj.getAllDelvCanYn());
 							}
 						} else {
 							// 4.5 추가배송비 발생 (취소신청화면에서 대부분 아래의 조건에 해당)
-							obj.setAddDelvFeeYn("Y");
-							obj.setAddDelvFee(obj.getOrgDelvFee());
+							// TODO allDelvCanYn 가지고 와서 배송비 정책 전체 취소면 추가배송비는 0처리
+							if ("Y".equals(obj.getAllDelvCanYn())) {
+								obj.setAddDelvFeeYn("N");
+								obj.setAddDelvFee(0);
+							} else {
+								obj.setAddDelvFeeYn("Y");
+								obj.setAddDelvFee(obj.getOrgDelvFee());
+							}
+
+							log.info("이놈이다 >>> {}", leftOrdAmt);
 						}
 					}
 				} else {
@@ -298,6 +324,7 @@ public class TscOrderRefundService {
 				}
 			}
 
+			log.info("getRtnDelvFee >>> {}", obj.getRtnDelvFee());
 			spanDelvCpnDcAmt		+= obj.getDelvCpnDcAmt();
 			spanSumDeliveryFee		+= obj.getDelvFee();
 			spanRtnSumDeliveryFee	+= obj.getRtnDelvFee();

+ 2 - 0
src/main/java/com/style24/persistence/domain/Order.java

@@ -393,6 +393,7 @@ public class Order extends TscBaseDomain {
 	private int ordCanChgQty;
 	private String allCanYn;
 	private String lastCanYn;
+	private String allDelvCanYn;
 
 	private String addDelvFeeYn;
 	private int addDelvFee;
@@ -748,6 +749,7 @@ public class Order extends TscBaseDomain {
 	private String whMemo;					// 회수메모
 	private int cancelQty;
 	private int delvQty;
+	private int totOrdQty;
 
 	private int dtlOrdAmt;
 	private int dtlItemOrdAmt;

+ 34 - 0
src/main/java/com/style24/persistence/mybatis/shop/TscOrderChange.xml

@@ -2959,6 +2959,9 @@
 		     , Z.CURR_PRICE
 		     , Z.ORD_QTY
 		     , Z.CNCL_RTN_QTY
+		     , (SELECT SUM(ORD_QTY)
+		          FROM TB_ORDER_DETAIL
+		         WHERE ORD_NO = Z.ORD_NO)                          AS TOT_ORD_QTY
 		     , SUM(OPT_ADD_PRICE)                                  AS OPT_ADD_PRICE
 		     , Z.ORD_AMT
 		     , Z.CNCL_RTN_AMT
@@ -5157,6 +5160,37 @@
 		 ORDER BY OC.ORD_CHG_SQ DESC, OCD.ORD_DTL_NO
 		<include refid="selectForPagingFooter"/>
 	</select>
+
+	<!-- 마이페이지 반품 주문 정보 조회 -->
+	<select id="getReturnOrderInfo" parameterType="Order" resultType="Order">
+		/* TsfOrderChange.getReturnOrderInfo */
+		SELECT OD.ORD_DTL_NO
+			 , OD.ORD_QTY
+			 , DF.DELV_FEE
+			 , DF.DELV_CPN_DC_AMT
+			 , DF.DELV_GFCD_USE_AMT
+			 , DF.REAL_DELV_AMT
+			 , DFP.DELV_FEE                        AS ORG_DELV_FEE
+		  FROM TB_ORDER O
+		  INNER JOIN TB_ORDER_DETAIL OD
+		  ON O.ORD_NO = OD.ORD_NO
+		  INNER JOIN (SELECT ORD_NO
+						   , SUM(DELV_FEE)          AS DELV_FEE
+						   , SUM(DELV_CPN_DC_AMT)   AS DELV_CPN_DC_AMT
+						   , SUM(DELV_GFCD_USE_AMT) AS DELV_GFCD_USE_AMT
+						   , SUM(REAL_DELV_AMT)     AS REAL_DELV_AMT
+						FROM TB_DELIVERY_FEE
+					   WHERE ORD_NO = #{ordNo}
+					     AND DELV_FEE_CD = #{delvFeeCd}
+						 AND DELV_FEE_GB = 'G018_10'
+					   GROUP BY ORD_NO
+		  ) DF
+		  ON O.ORD_NO = DF.ORD_NO
+		  INNER JOIN TB_DELV_FEE_POLICY DFP
+		  ON OD.DELV_FEE_CD = DFP.DELV_FEE_CD
+		 WHERE O.ORD_NO = #{ordNo}
+		   AND OD.DELV_FEE_CD = #{delvFeeCd}
+	</select>
 </mapper>