Procházet zdrojové kódy

Merge branch 'card007' into order

card007 před 5 roky
rodič
revize
89736d0790

+ 54 - 4
src/main/java/com/style24/core/biz/dao/TscOrderChangeDao.java

@@ -330,22 +330,42 @@ public interface TscOrderChangeDao {
 	/**
 	 * 전체취소 주문상세단품정보 수정
 	 *
-	 * @param Order
+	 * @param OrderChange
 	 * @return int
 	 * @author card007
 	 * @since 2021. 04. 15
 	 */
-	int updateOrderDetailItemForAllCancel(Order order);
+	int updateOrderDetailItemForAllCancel(OrderChange orderChange);
 
 	/**
 	 * 전체취소 주문상세단품이력정보 등록
 	 *
-	 * @param Order
+	 * @param OrderChange
 	 * @return int
 	 * @author card007
 	 * @since 2021. 04. 15
 	 */
-	int createOrderDetailItemHstForAllCancel(Order order);
+	int createOrderDetailItemHstForAllCancel(OrderChange orderChange);
+
+	/**
+	 * 전체취소 주문상세단품정보 수정
+	 *
+	 * @param OrderChange
+	 * @return int
+	 * @author card007
+	 * @since 2021. 04. 16
+	 */
+	int updateOrderDetailForAllCancel(OrderChange orderChange);
+
+	/**
+	 * 전체취소 주문상세단품이력정보 등록
+	 *
+	 * @param OrderChange
+	 * @return int
+	 * @author card007
+	 * @since 2021. 04. 16
+	 */
+	int createOrderDetailHstForAllCancel(OrderChange orderChange);
 
 	/**
 	 * 마이페이지 포인트 원복 사용포인트 조회
@@ -446,4 +466,34 @@ public interface TscOrderChangeDao {
 	 * @since 2021. 04. 15
 	 */
 	Payment getPaymentInfo(Payment payment);
+
+	/**
+	 * 마이페이지 전체취소 주문변경상세 등록
+	 * 
+	 * @param OrderChange
+	 * @return int
+	 * @author card007
+	 * @since 2021. 04. 16
+	 */
+	int createOrderChangeDetailForAllCancel(OrderChange orderChange);
+
+	/**
+	 * 마이페이지 전체취소 주문변경상세 이력 등록
+	 * 
+	 * @param OrderChange
+	 * @return int
+	 * @author card007
+	 * @since 2021. 04. 16
+	 */
+	int createOrderChangeDetailHstForAllCancel(OrderChange orderChange);
+
+	/**
+	 * 마이페이지 전체취소 환불정보 조회
+	 *
+	 * @param Order
+	 * @return Order
+	 * @author card007
+	 * @since 2021. 04. 16
+	 */
+	Order getRefundInfoForAllCancel(Order order);
 }

+ 2 - 3
src/main/java/com/style24/core/biz/service/TscKakaoPayService.java

@@ -220,11 +220,10 @@ public class TscKakaoPayService {
 			payment.setOrdNo(Integer.parseInt(kakaoPay.getPartner_order_id()));
 			payment.setCustNo(Integer.parseInt(kakaoPay.getPartner_user_id()));
 			payment.setKakaoMethodType(kakaoPay.getPayment_method_type());
-			payment.setPayAmt(kakaoPay.getApproved_cancel_amount().getTotal());
-			payment.setNpayPntAmt(kakaoPay.getApproved_cancel_amount().getPoint());
+			payment.setPayAmt(kakaoPay.getApproved_cancel_amount().getTotal() * -1);
+			payment.setNpayPntAmt(kakaoPay.getApproved_cancel_amount().getPoint() * -1);
 			payment.setResCd(String.valueOf(statusCode));
 			payment.setResMsg(message.getMessage("SUCC_0004"));
-			// 
 
 			orderDao.insertPayment(payment);
 		} else {

+ 1 - 0
src/main/java/com/style24/core/biz/service/TscKcpService.java

@@ -323,6 +323,7 @@ public class TscKcpService {
 					payment.setPgTradeNo(c_PayPlus.mf_get_res("tno"));		// 환불 요청건의 KCP 거래번호
 
 					orderDao.insertPaymentCancel(payment);
+					param.setPaySq(payment.getPaySq());
 				}
 			} catch (Exception e) {
 				e.printStackTrace();

+ 4 - 4
src/main/java/com/style24/core/biz/service/TscNaverPayService.java

@@ -213,13 +213,13 @@ public class TscNaverPayService {
 
 		// 승인 성공일때 200
 		if (statusCode == 200) {
-			payment.setPgTradeNo(naverPay.getBody().getPayHistId());
+			payment.setNpayPntAmt(naverPay.getBody().getNpointCancelAmount() * -1);
 			payment.setPgTid(naverPay.getBody().getPaymentId());
-			payment.setOrdNo(payment.getOrdNo());
+			payment.setPgTradeNo(naverPay.getBody().getPayHistId());
 			payment.setCustNo(payment.getCustNo());
 			payment.setNaverMethodType(naverPay.getBody().getPrimaryPayMeans());
-			payment.setPayAmt(naverPay.getBody().getPrimaryPayCancelAmount() + naverPay.getBody().getNpointCancelAmount());
-			payment.setNpayPntAmt(naverPay.getBody().getNpointCancelAmount());
+			
+			
 			payment.setResCd(naverPay.getCode());
 			payment.setResMsg(naverPay.getMessage());
 

+ 378 - 58
src/main/java/com/style24/core/biz/service/TscOrderChangeService.java

@@ -168,28 +168,25 @@ public class TscOrderChangeService {
 		//userNo = userNo;
 		
 		// 2. 취소요정정보목록
-		List<Order> cancelReqList		 	= (List<Order>) mav.get("cnclRtnList");				// 취소요청 목록
-		List<Order> cancelOrderRefundList 	= (List<Order>) mav.get("cancelOrderRefundList");	// 취소환불금액 목록 (주문상세단품 단위)
-		List<Order> cancelDelvRefundList 	= (List<Order>) mav.get("cancelDelvRefundList");	// 취소환불배송금액 목록 (DELV_FEE_CD 단위)
+		List<Order> cancelReqList		 	= (List<Order>) mav.get("cnclRtnList");							// 취소요청 목록
+		List<Order> cancelOrderRefundList 	= (List<Order>) mav.get("cancelOrderRefundList");				// 취소환불금액 목록 (주문상세단품 단위)
+		List<Order> cancelDelvRefundList 	= (List<Order>) mav.get("cancelDelvRefundList");				// 취소환불배송금액 목록 (DELV_FEE_CD 단위)
 				
 		// 3. 취소신청정보
-		int ordNo 							= Integer.parseInt(mav.getString("ordNo"));			// 주문번호
-		String chgReason 					= mav.getString("chgReason");						// 변경사유
-		String chgMemo 						= mav.getString("chgMemo");							// 변경메모
-		String allCanYnBeforePayment		= mav.getString("allCanYnBeforePayment");			// 무통장입금전 전체취소 여부
-		String isCustomer					= mav.getString("isCustomer");						// 귀책사유 (고객, 회사)
-		String chgGb						= TscConstants.OrderChangeGb.CANCEL.value(); 		// 취소요청 (공톹코드:G680)
-		String reqGbn						= mav.get("reqGbn").toString();						// 신청구분
-		String ordDtlStat;																		// 주문상세상태
-		String chgStat;																			// 주문변경상태
-		
-		if ("Y".equals(allCanYnBeforePayment)) {
-			ordDtlStat = TscConstants.OrderDetailStat.PAYMENT_BEFORE_CANCEL.value();
-			chgStat = TscConstants.OrderChangeStat.PAYMENT_BEFORE_CANCEL.value();
-		} else {
-			ordDtlStat = TscConstants.OrderDetailStat.PAYMENT_AFTER_CANCEL.value();
-			chgStat = TscConstants.OrderChangeStat.PAYMENT_AFTER_CANCEL.value();
-		}
+		int ordNo 							= Integer.parseInt(mav.getString("ordNo"));						// 주문번호
+		String chgReason 					= mav.getString("chgReason");									// 변경사유
+		String chgMemo 						= mav.getString("chgMemo");										// 변경메모
+		String allLastCanYn					= mav.getString("allLastCanYn");								// 마지막 취소 여부
+		String isCustomer					= mav.getString("isCustomer");									// 귀책사유 (고객, 회사)
+		String chgGb						= TscConstants.OrderChangeGb.CANCEL.value(); 					// 취소요청 (공톹코드:G680)
+		String reqGbn						= mav.getString("reqGbn");										// 신청구분
+		String ordDtlStat					= TscConstants.OrderDetailStat.PAYMENT_AFTER_CANCEL.value();	// 주문상세상태
+		String chgStat						= TscConstants.OrderChangeStat.PAYMENT_AFTER_CANCEL.value();	// 주문변경상태
+		String ipAddress					= mav.getString("ipAddress");									// IP주소
+		String pgTid						= mav.getString("pgTid");										// PG거래ID
+		String payMeans						= mav.getString("payMeans");									// 결제수단
+		String pgGb							= mav.getString("pgGb");										// PG구분
+		int pgCancelAmt						= 0;															// PG취소금액
 		
 		// 4. 주문상세단품정보등록,변경 (단품단위)
 		List<Order> cancelOrderDetailList = new ArrayList<>();
@@ -278,6 +275,7 @@ public class TscOrderChangeService {
 					Order vo = cancelOrderRefundList.get(j);
 					vo.setRegNo(userNo);
 					vo.setUpdNo(userNo);
+					int leftQty = vo.getOrdQty() - vo.getCnclRtnQty() - vo.getOrdCanChgQty();
 					
 					// 5.3.0 DEVL_FEE_CD 단위로 주문상세 정보 처리
 					if (obj.getDelvFeeCd().equals(vo.getDelvFeeCd())) {
@@ -298,6 +296,73 @@ public class TscOrderChangeService {
 						if ("cnclComplete".equals(reqGbn) || "cnclReqComplete".equals(reqGbn)) {
 							orderChangeDao.updateOrderDetail(vo);
 						}
+
+						// 5.3.3 사용포인트원복
+						int pntDcAmt = vo.getPntDcAmt();
+						vo.setOccurGb(TscConstants.PointOccurGb.USE_POINT.value());
+
+						for (Order point : orderChangeDao.getCustPointHst(vo)) {
+							while (pntDcAmt > 0) {
+								if (pntDcAmt < point.getPntAmt()) {
+									point.setPntAmt(pntDcAmt);
+									pntDcAmt -= pntDcAmt;
+								} else {
+									pntDcAmt -= point.getPntAmt();
+								}
+
+								point.setOccurGb(TscConstants.PointOccurGb.USE_POINT_CANCEL.value());
+								point.setOccurDtlDesc("포인트사용취소");
+								point.setRegNo(userNo);
+								point.setUpdNo(userNo);
+
+								// 포인트 사용 취소 이력 생성 및 포인트 수정
+								orderChangeDao.createCustPointHstRollback(point);
+								orderChangeDao.updateCustPointRollback(point);
+							}
+						}
+
+						// 5.3.4 적립예정포인트 수정
+						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.setOccurDtlDesc("예정포인트적립취소");
+							point.setPayAmt(savePntAmt * -1);
+							point.setRegNo(userNo);
+							point.setUpdNo(userNo);
+
+							// 적립예정포인트 취소 이력 생성
+							orderChangeDao.createCustPointHstRollback(point);
+						}
+
+						// 5.3.5 상품쿠폰원복
+						if (leftQty == 0) {
+							orderChangeDao.updateGoodsCpnRollback(vo);
+						}
+
+						// 5.3.6 사용상품권 원복
+						int gfcdUseAmt = vo.getGfcdUseAmt();
+
+						for (Order giftCard : orderChangeDao.getCustGiftCardHst(vo)) {
+							while (gfcdUseAmt > 0) {
+								if (gfcdUseAmt < giftCard.getGfcdAmt()) {
+									giftCard.setGfcdAmt(gfcdUseAmt);
+									gfcdUseAmt -= gfcdUseAmt;
+								} else {
+									gfcdUseAmt -= giftCard.getGfcdAmt();
+								}
+
+								giftCard.setOccurGb(TscConstants.GiftCardOccurGb.USE_GIFTCARD_CANCEL.value());
+								giftCard.setOccurDtlDesc("상품권사용취소");
+								giftCard.setRegNo(userNo);
+								giftCard.setUpdNo(userNo);
+
+								// 포인트 사용 취소 이력 생성 및 포인트 수정
+								orderChangeDao.createCustGiftCardHstRollback(giftCard);
+								orderChangeDao.updateCustGiftCardRollback(giftCard);
+							}
+						}
 						
 						// * 주문상세단위가 아닌 주문상세단품단위로 데이타가 처리되고 있었음 주문상세단위로 수정
 						// 5.3 주문변경상세정보 등록
@@ -425,28 +490,66 @@ public class TscOrderChangeService {
 						orderChangeDao.createDeliveryFee(delvFeeOrder);
 					}
 				}
+
+				pgCancelAmt += spanRefundAmt;
+			}
+		}
+
+		// 마지막 취소 시
+		if ("Y".equals(allLastCanYn)) {
+			// 장바구니, 배송비 쿠폰 원복처리
+			Order coupon = new Order();
+			coupon.setOrdNo(ordNo);
+			coupon.setUpdNo(userNo);
+			orderChangeDao.updateCartCpnRollback(coupon);
+			orderChangeDao.updateDeliveryCpnRollback(coupon);
+
+			// 12. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
+			Order freegiftOrder = new Order();
+			freegiftOrder.setOrdNo(ordNo);
+			freegiftOrder.setUpdNo(userNo);
+			orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
+		}
+
+
+
+		// 상품권으로만 결제 시 PG점프
+		if (!TscConstants.PgGb.ISTYLE.value().equals(pgGb)) {
+			if (TscConstants.PgGb.KCP.value().equals(pgGb) || TscConstants.PgGb.PAYCO.value().equals(pgGb)) {
+				Payment kcp = new Payment();
+				kcp.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+				kcp.setPayGb("O");
+				kcp.setModType("STSC");
+				kcp.setModDesc("가맹점 취소 - 전체 취소");
+				kcp.setIpAddress(ipAddress);
+				kcp.setPgTid(pgTid);
+				kcp.setPayAmt(pgCancelAmt);
+				kcp.setRegNo(userNo);
+				kcp.setUpdNo(userNo);
+				kcpService.kcpCancel(kcp);
+			} else if (TscConstants.PgGb.NAVER.value().equals(pgGb)) {
+				Payment naverPay = new Payment();
+				naverPay.setOrdNo(ordNo);
+				naverPay.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+				naverPay.setPayGb("O");
+				naverPay.setPayMeans(payMeans);
+				naverPay.setChgReasonNm(chgReason);
+				naverPay.setPgTid(pgTid);
+				naverPay.setPayAmt(pgCancelAmt);
+				naverPay.setRegNo(userNo);
+				naverPay.setUpdNo(userNo);
+
+				naverPayService.cancelNaverPayment(naverPay);
+			} else if (TscConstants.PgGb.KAKAO.value().equals(pgGb)) {
+				Payment kakaoPay = new Payment();
+				kakaoPay.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+				kakaoPay.setPayGb("O");
+				kakaoPay.setPgTid(pgTid);
+				kakaoPay.setPayAmt(pgCancelAmt);
+
+				kakaoPayService.cancelKakaoPayment(kakaoPay);
 			}
 		}
-		
-		// TODO
-		// 9. 포인트원복 (사용포인트, 주문상세단위)
-		// 예정적립포인트 취소처리
-		
-		// TODO
-		// 10. 쿠폰원복 (상품쿠폰, 주문상세단위) (전체취소시 장바구니쿠폰, 배송비쿠폰)
-		
-		// TODO
-		// 11. 상품권원복
-		
-		// 12. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
-		//Order freegiftOrder = new Order();
-		//freegiftOrder.setOrdNo(ordNo);
-		//freegiftOrder.setUpdNo(userNo);
-		//orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
-		
-		// TODO
-		// 13. PG 연동
-		// 네이버페이, 카카오페이 취소 시 취소 포인트 금액 TB_PAYMENT에 업데이트 처야함
 		
 		// TODO
 		// 14. 취소 완료 알림톡 발송 에정
@@ -1260,6 +1363,202 @@ public class TscOrderChangeService {
 		return orderChangeDao.getExchangeInfo(order);
 	}
 
+	/**
+	 * 전체취소 요청
+	 *
+	 * @param GagaMap, int
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 04. 15
+	 */
+	@SuppressWarnings("unchecked")
+	@Transactional("shopTxnManager")
+	public void allCnclComplete(OrderChange orderChange) {
+		int ordNo = orderChange.getOrdNo();
+		String chgReason = orderChange.getChgReason();									// G686_10:고객변심, G686_20:관리자취소, G686_30:품절취소
+		String chgReasonNm = orderChange.getChgReasonNm();								// 고객변심, 관리자취소, 품절취소
+		String chgGb = TscConstants.OrderChangeGb.CANCEL.value();						// 변경구분
+		String accountNo = orderChange.getAccountNo();									// 환불계좌번호
+		String accountNm = orderChange.getAccountNm();									// 환불계좌주명
+		String bankCd = orderChange.getBankCd();										// 환불은행
+		String ipAddress = orderChange.getIpAddress();									// IP주소
+		int regNo = orderChange.getRegNo();												// 등록자번호
+		int updNo = orderChange.getUpdNo();												// 등록자번호
+
+		// 원주문 결제정보 조회
+		Payment payment = new Payment();
+		payment.setOrdNo(ordNo);
+		payment = orderChangeDao.getPaymentInfo(payment);
+
+		// 환불금액 설정
+		int refundAmt = payment.getPayAmt();
+
+		// 상태값 설정
+		String ordDtlStat = TscConstants.OrderDetailStat.PAYMENT_AFTER_CANCEL.value();	// 주문상세상태
+		String chgStat = TscConstants.OrderChangeStat.PAYMENT_AFTER_CANCEL.value();		// 주문변경상태
+		String modType = "STSC";														// KCP 전체취소
+
+		// 무통장입금 결제 주문 전체취소 상태값 처리
+		if (TscConstants.PgGb.KCP.value().equals(payment.getPgGb())
+			&& TscConstants.PayMeans.BANK_DEPOSIT.value().equals(payment.getPayMeans())
+			&& TscConstants.PaymentStat.PAYMENT_WAIT.value().equals(payment.getPayStat())) {
+
+			ordDtlStat = TscConstants.OrderDetailStat.PAYMENT_BEFORE_CANCEL.value();
+			chgStat = TscConstants.OrderChangeStat.PAYMENT_BEFORE_CANCEL.value();
+		} else 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 무통장입금 전체취소
+		}
+
+		// 1. 주문변경 및 변경상세 정보 설정
+		OrderChange orderChangeDetail = new OrderChange();
+		orderChangeDetail.setOrdNo(ordNo);
+		orderChangeDetail.setChgGb(chgGb);
+		orderChangeDetail.setChgReason(chgReason);
+		orderChangeDetail.setChgStat(chgStat);
+		orderChangeDetail.setRegNo(regNo);
+		orderChangeDetail.setUpdNo(updNo);
+
+		// 주문변경정보 등록
+		orderChangeDao.createOrderChange(orderChangeDetail);
+
+		// 주문변경상세 및 이력정보 등록
+		orderChangeDao.createOrderChangeDetailForAllCancel(orderChangeDetail);
+		orderChangeDao.createOrderChangeDetailHstForAllCancel(orderChangeDetail);
+
+		// 2. 사용포인트원복
+		Order vo = new Order();
+		vo.setOrdNo(ordNo);
+		vo.setOccurGb(TscConstants.PointOccurGb.USE_POINT.value());
+		vo.setUpdNo(updNo);
+		
+		for (Order point : orderChangeDao.getCustPointHst(vo)) {
+			point.setOccurGb(TscConstants.PointOccurGb.USE_POINT_CANCEL.value());
+			point.setOccurDtlDesc("포인트사용취소");
+			point.setPayAmt(point.getPayAmt() * -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.setOccurDtlDesc("예정포인트적립취소");
+			point.setPayAmt(point.getPayAmt() * -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(orderChangeDetail.getOrdChgSq());
+		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. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
+		Order freegiftOrder = new Order();
+		freegiftOrder.setOrdNo(ordNo);
+		freegiftOrder.setUpdNo(updNo);
+		orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
+
+		// 8. PG 연동
+		Payment pg = new Payment();
+		pg.setOrdNo(ordNo);
+		pg.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+		pg.setPayGb("O");
+		pg.setPgTid(payment.getPgTid());
+		pg.setPayAmt(refundAmt);
+		pg.setRegNo(regNo);
+		pg.setUpdNo(updNo);
+
+		// 상품권으로만 결제 시 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.setIpAddress(ipAddress);
+				pg.setAccountNm(accountNm);
+				pg.setAccountNo(accountNo);
+				pg.setBankCd(bankCd);
+				
+				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)) {
+				kakaoPayService.cancelKakaoPayment(pg);
+			}
+		}
+
+		// 9. 환불금액 등록
+		Order refundOrder = orderChangeDao.getRefundInfoForAllCancel(vo);
+		refundOrder.setOrdNo(ordNo);
+		refundOrder.setPaySq(pg.getPaySq());
+		refundOrder.setOrdChgSq(orderChangeDetail.getOrdChgSq());
+		refundOrder.setRefundAmt(refundAmt);
+		refundOrder.setRfRealCnclAmt(refundOrder.getRealOrdAmt() - refundOrder.getRfDeliveryFee());
+		refundOrder.setRaNo(accountNo);
+		refundOrder.setRaNm(accountNm);
+		refundOrder.setRaBank(bankCd);
+		refundOrder.setRegNo(regNo);
+
+		orderChangeDao.createRefund(refundOrder);
+
+		// 10. 주문상세 및 주문상세단품 정보 설정
+		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);
+
+		// TODO
+		// 11. 취소 완료 알림톡 발송 에정
+	}
+
 	/**
 	 * 전체취소 요청
 	 * 
@@ -1270,7 +1569,7 @@ public class TscOrderChangeService {
 	 */
 	@SuppressWarnings("unchecked")
 	@Transactional("shopTxnManager")
-	public GagaMap allCnclComplete(GagaMap map, int userNo) {
+	public GagaMap allCnclCompleteBak(GagaMap map, int userNo) {
 		// 1. 취소요청정보목록
 		List<Order> cancelOrderRefundList 	= (List<Order>) map.get("cancelOrderRefundList");	// 취소환불금액 목록 (주문상세단품 단위)
 		List<Order> cancelDelvRefundList 	= (List<Order>) map.get("cancelDelvRefundList");	// 취소환불배송금액 목록 (DELV_FEE_CD 단위)
@@ -1303,7 +1602,7 @@ public class TscOrderChangeService {
 		}
 
 		// 3. 주문상세단품정보등록, 변경 (단품단위)
-		Order orderDetailItem = new Order();
+		OrderChange orderDetailItem = new OrderChange();
 		orderDetailItem.setOrdNo(ordNo);
 		orderDetailItem.setOrdDtlStat(ordDtlStat);
 		orderDetailItem.setRegNo(userNo);
@@ -1496,23 +1795,44 @@ public class TscOrderChangeService {
 
 		// PG 별 취소 처리
 		String pgGb = payment.getPgGb();
-		if (TscConstants.PgGb.KCP.value().equals(pgGb)) {
-			Payment kcp = new Payment();
-			kcp.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
-			kcp.setPayGb("O");
-			kcp.setModType("STSC");
-			kcp.setModDesc("가맹점 취소 - 전체 취소");
-			kcp.setIpAddress(ipAddress);
-			kcp.setPgTid("TODO");
-			kcp.setPayAmt(pgCancelAmt);
-			kcp.setRegNo(userNo);
-			kcp.setUpdNo(userNo);
-			kcpService.kcpCancel(kcp);
-			
-		}
-		
-		
 		
+		// 상품권으로만 결제 시 PG점프
+		if (!TscConstants.PgGb.ISTYLE.value().equals(pgGb)) {
+			if (TscConstants.PgGb.KCP.value().equals(pgGb) || TscConstants.PgGb.PAYCO.value().equals(pgGb)) {
+				Payment kcp = new Payment();
+				kcp.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+				kcp.setPayGb("O");
+				kcp.setModType("STSC");
+				kcp.setModDesc("가맹점 취소 - 전체 취소");
+				kcp.setIpAddress(ipAddress);
+				kcp.setPgTid(payment.getPgTid());
+				kcp.setPayAmt(pgCancelAmt);
+				kcp.setRegNo(userNo);
+				kcp.setUpdNo(userNo);
+				kcpService.kcpCancel(kcp);
+			} else if (TscConstants.PgGb.NAVER.value().equals(pgGb)) {
+				Payment naverPay = new Payment();
+				naverPay.setOrdNo(ordNo);
+				naverPay.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+				naverPay.setPayGb("O");
+				naverPay.setPayMeans(payment.getPayMeans());
+				naverPay.setChgReasonNm(chgReason);
+				naverPay.setPgTid(payment.getPgTid());
+				naverPay.setPayAmt(pgCancelAmt);
+				naverPay.setRegNo(userNo);
+				naverPay.setUpdNo(userNo);
+				
+				naverPayService.cancelNaverPayment(naverPay);
+			} else if (TscConstants.PgGb.KAKAO.value().equals(pgGb)) {
+				Payment kakaoPay = new Payment();
+				kakaoPay.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+				kakaoPay.setPayGb("O");
+				kakaoPay.setPgTid(payment.getPgTid());
+				kakaoPay.setPayAmt(pgCancelAmt);
+				
+				kakaoPayService.cancelKakaoPayment(kakaoPay);
+			}
+		}
 
 		// TODO
 		// 14. 취소 완료 알림톡 발송 에정

+ 3 - 4
src/main/java/com/style24/core/support/env/TscConstants.java

@@ -344,12 +344,11 @@ public class TscConstants {
 
 	// PG 구분
 	public enum PgGb {
-		INICIS("INICIS"),					// 이니시스
-		KAKAO("KAKAO"),						// 카카오페이
 		KCP("KCP"),							// KCP
+		KAKAO("KAKAO"),						// 카카오페이
 		NAVER("NAVER"),						// NAVERPAY
-		NICE("NICE"),						// NICEPAY
-		PAYCO("PAYCO");						// PAYCO
+		PAYCO("PAYCO"),						// PAYCO
+		ISTYLE("ISTYLE");					// 아이스타일 (상품권으로만결제시)
 
 		private String value;
 

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

@@ -320,6 +320,7 @@ public class Order extends TscBaseDomain {
 	private Integer custCpnSq;
 	
 	// 주문포인트
+	private Integer pntHstSq;
 	private int pntPrate;
 	private int pntMrate;
 	private int pntAmt;
@@ -328,6 +329,7 @@ public class Order extends TscBaseDomain {
 	private String occurDtlDesc;
 	
 	// 주문상품권
+	private Integer gfcdHstSq;
 	private Integer custGfcdSq;
 	private String gfcdNm;
 	private String gfcdNo;

+ 4 - 0
src/main/java/com/style24/persistence/domain/OrderChange.java

@@ -25,6 +25,7 @@ public class OrderChange extends TscBaseDomain {
 	private Integer ordChgSq;
 	private String chgGb;
 	private String chgReason;
+	private String chgReasonNm;
 	private String chgMemo;
 	private String chgerNm;
 	private String chgerPhnno;
@@ -103,6 +104,8 @@ public class OrderChange extends TscBaseDomain {
 	private String[] soldoutYnArr;
 	private int[] ordChgSqArr;
 
+	private String ipAddress;
+
 	// 교환 옵션 변경
 	private List<ChgOption> chgOptionList;
 
@@ -160,6 +163,7 @@ public class OrderChange extends TscBaseDomain {
 	private int rfDeliveryFee;						// 환불배송비
 	private int rfRealCnclAmt;						// 환불금액(배송비제외)
 	private String pgGb;							// PG구분
+	private String pgTid;							// PG거래ID
 	private String payStat;							// 결제상태
 	private String payMeans;						// 결제수단
 	private String payMeansNm;						// 결제수단명

+ 2 - 2
src/main/java/com/style24/persistence/mybatis/shop/TscOrder.xml

@@ -2297,7 +2297,7 @@
 	</select>
 
 	<!-- 결제 취소 정보 생성 -->
-	<insert id="insertPaymentCancel" parameterType="Payment">
+	<insert id="insertPaymentCancel" parameterType="Payment" keyProperty="paySq">
 		/* TscOrder.insertPaymentCancel : 결제 취소 정보 생성 */
 		INSERT INTO TB_PAYMENT (
 			  ORD_NO
@@ -2361,7 +2361,7 @@
 	</insert>
 
 	<!-- PAYMENT INSERT -->
-	<insert id="insertPayment" parameterType="Payment">
+	<insert id="insertPayment" parameterType="Payment" keyProperty="paySq">
 		/* TscOrder.insertPayment : PAYMENT INSERT */
 		INSERT INTO TB_PAYMENT (
 			  ORD_NO

+ 298 - 15
src/main/java/com/style24/persistence/mybatis/shop/TscOrderChange.xml

@@ -769,6 +769,9 @@
 			, RF_PNT_AMT
 			, RF_PRE_PNT_AMT
 			, RF_GFCD_USE_AMT
+			, RF_CNCL_AMT
+			, RF_DELIVERY_FEE
+			, RF_REAL_CNCL_AMT
 			, REG_NO
 			, REG_DT
 		) VALUES (
@@ -787,6 +790,9 @@
 			, #{rfPntAmt}
 			, #{rfPrePntAmt}
 			, #{rfGfcdUseAmt}
+			, #{rfCnclAmt}
+			, #{rfDeliveryFee}
+			, #{rfRealCnclAmt}
 			, #{regNo}
 			, NOW()
 		)
@@ -836,22 +842,25 @@
 	<update id="updateOrdFreegiftDel" parameterType="Order">
 		/* OrderChange.updateOrdFreegiftDel */
 		UPDATE TB_ORD_FREEGIFT_VAL
-		   SET DEL_YN= 'N'
+		   SET DEL_YN= 'Y'
 			 , UPD_NO = #{updNo}
 			 , UPD_DT = NOW()
 		 WHERE FREEGIFT_VAL_SQ IN (
-			 SELECT OFRV.FREEGIFT_VAL_SQ
-			   FROM TB_ORD_FREEGIFT OFR
-			   INNER JOIN TB_ORD_FREEGIFT_VAL OFRV
-			   ON OFR.ORD_FREEGIFT_SQ = OFRV.ORD_FREEGIFT_SQ
-			  WHERE 1 = 1
-				AND OFR.ORD_NO = (SELECT CASE WHEN SUM(X.ORD_QTY) > SUM(X.CNCL_RTN_QTY)
-												  THEN 0
-											  ELSE X.ORD_NO
-										 END
-									FROM TB_ORDER_DETAIL X
-								   WHERE 1 = 1
-									 AND X.ORD_NO = #{ordNo})
+			 SELECT Z.FREEGIFT_VAL_SQ
+			   FROM (
+				   SELECT OFRV.FREEGIFT_VAL_SQ
+					 FROM TB_ORD_FREEGIFT OFR
+					 INNER JOIN TB_ORD_FREEGIFT_VAL OFRV
+					 ON OFR.ORD_FREEGIFT_SQ = OFRV.ORD_FREEGIFT_SQ
+					WHERE 1 = 1
+					  AND OFR.ORD_NO = (SELECT CASE WHEN SUM(X.ORD_QTY) > SUM(X.CNCL_RTN_QTY)
+														THEN 0
+													ELSE X.ORD_NO
+											   END
+										  FROM TB_ORDER_DETAIL X
+										 WHERE 1 = 1
+										   AND X.ORD_NO = #{ordNo})
+			   ) Z
 		 )
 	</update>
 
@@ -1742,7 +1751,7 @@
 	<update id="updateOrderDetailItemForExchangeCancel" parameterType="Order">
 		/* OrderChange.updateOrderDetailItemForExchangeCancel */
 		UPDATE TB_ORDER_DETAIL_ITEM ODI
-			INNER JOIN TB_ORDER_CHANGE_DETAIL OCD
+		 INNER JOIN TB_ORDER_CHANGE_DETAIL OCD
 			ON ODI.ORD_DTL_NO = OCD.CHG_ORD_DTL_NO
 		   SET ODI.ORD_DTL_STAT = #{ordDtlStat}
 			 , ODI.UPD_NO = #{updNo}
@@ -1825,6 +1834,182 @@
 		   AND ODI.ORD_NO = #{ordNo}
 	</insert>
 
+	<!-- 전체취소 주문상세단품정보 수정 -->
+	<update id="updateOrderDetailForAllCancel" parameterType="Order">
+		/* TscOrderChange.updateOrderDetailForAllCancel */
+		UPDATE TB_ORDER_DETAIL
+		   SET ORD_DTL_STAT = #{ordDtlStat}
+			 , CNCL_RTN_AMT = ORD_AMT
+			 , CPN1_DC_AMT = 0
+			 , TMTB1_DC_AMT = 0
+			 , TMTB2_DC_AMT = 0
+			 , GOODS_CPN_DC_AMT = 0
+			 , CART_CPN_DC_AMT = 0
+			 , PNT_DC_AMT = 0
+			 , PRE_PNT_DC_AMT = 0
+			 , SAVE_PNT_AMT = 0
+			 , REAL_ORD_AMT = 0
+			 , GFCD_USE_AMT = 0
+			 , UPD_NO = #{updNo}
+			 , UPD_DT = NOW()
+		 WHERE ORD_NO = #{ordNo}
+	</update>
+
+	<!-- 전체취소 주문상세단품이력정보 등록 -->
+	<insert id="createOrderDetailHstForAllCancel" parameterType="Order">
+		/* TscOrderChange.createOrderDetailHstForAllCancel */
+		INSERT INTO TB_ORDER_DETAIL_HST (
+		       ORD_DTL_NO
+		     , ORD_NO
+		     , ORD_EXCH_GB
+		     , ORD_DTL_STAT
+		     , ORG_ORD_DTL_NO
+		     , SUPPLY_COMP_CD
+		     , GOODS_CD
+		     , DEAL_GOODS_CD
+		     , FORMAL_GB
+		     , GOODS_TYPE
+		     , LIST_PRICE
+		     , CURR_PRICE
+		     , DC_RATE
+		     , OPT_ADD_PRICE
+		     , ORD_QTY
+		     , ORD_AMT
+		     , CNCL_RTN_QTY
+		     , CNCL_RTN_AMT
+		     , CPN1_CPN_SQ
+		     , CPN1_DC_AMT
+		     , TMTB1_SQ
+		     , TMTB1_DC_AMT
+		     , TMTB2_SQ
+		     , TMTB2_DC_AMT
+		     , GOODS_CPN_SQ
+		     , GOODS_CPN_DC_AMT
+		     , CART_CPN_SQ
+		     , CART_CPN_DC_AMT
+		     , BURDEN_RATE
+		     , PNT_DC_AMT
+		     , PRE_PNT_DC_AMT
+		     , SAVE_PNT_AMT
+		     , REAL_ORD_AMT
+		     , GFCD_USE_AMT
+		     , VENDOR_ID
+		     , EXTMALL_ID
+		     , AGENT_ORDER_ID
+		     , EXTMALL_ORDER_ID
+		     , CHANGEABLE_YN
+		     , CHANGE_FEE_FREE_YN
+		     , RETURNABLE_YN
+		     , RETURN_FEE_FREE_YN
+		     , SOLDOUT_YN
+		     , SOLDOUT_MEMO
+		     , SOLDOUT_REG_NO
+		     , SOLDOUT_REG_DT
+		     , DELV_ADDR_SQ
+		     , DELV_FEE_CD
+		     , SHOT_DELV_YN
+		     , GIFT_PACK_YN
+		     , GIFT_ADDR_INP_YN
+		     , MAKE_GOODS_YN
+		     , ENTRY_NO
+		     , DELV_LOC_CD
+		     , DELV_ASSIGN_DT
+		     , DELV_ASSIGN_STAT
+		     , DSTRBT_NOTE
+		     , DELV_STDT
+		     , DELV_EDDT
+		     , SHIP_COMP_CD
+		     , INVOICE_NO
+		     , INVOICE_SEND_YN
+		     , SELL_STORE_CD
+		     , SELL_FEE_RATE
+		     , AF_LINK_CD
+		     , ITHR_CD
+		     , CONTENTS_LOC
+		     , PLAN_DTL_SQ
+		     , SOCIAL_SQ
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		SELECT ORD_DTL_NO
+			 , ORD_NO
+			 , ORD_EXCH_GB
+			 , #{ordDtlStat}
+			 , ORG_ORD_DTL_NO
+			 , SUPPLY_COMP_CD
+			 , GOODS_CD
+			 , DEAL_GOODS_CD
+			 , FORMAL_GB
+			 , GOODS_TYPE
+			 , LIST_PRICE
+			 , CURR_PRICE
+			 , DC_RATE
+			 , OPT_ADD_PRICE
+			 , ORD_QTY
+			 , ORD_AMT
+			 , ORD_QTY
+			 , ORD_AMT
+			 , CPN1_CPN_SQ
+			 , 0
+			 , TMTB1_SQ
+			 , 0
+			 , TMTB2_SQ
+			 , 0
+			 , GOODS_CPN_SQ
+			 , 0
+			 , CART_CPN_SQ
+			 , 0
+			 , BURDEN_RATE
+			 , 0
+			 , 0
+			 , 0
+			 , 0
+			 , 0
+			 , VENDOR_ID
+			 , EXTMALL_ID
+			 , AGENT_ORDER_ID
+			 , EXTMALL_ORDER_ID
+			 , CHANGEABLE_YN
+			 , CHANGE_FEE_FREE_YN
+			 , RETURNABLE_YN
+			 , RETURN_FEE_FREE_YN
+			 , SOLDOUT_YN
+			 , SOLDOUT_MEMO
+			 , SOLDOUT_REG_NO
+			 , SOLDOUT_REG_DT
+			 , DELV_ADDR_SQ
+			 , DELV_FEE_CD
+			 , SHOT_DELV_YN
+			 , GIFT_PACK_YN
+			 , GIFT_ADDR_INP_YN
+			 , MAKE_GOODS_YN
+			 , ENTRY_NO
+			 , DELV_LOC_CD
+			 , DELV_ASSIGN_DT
+			 , DELV_ASSIGN_STAT
+			 , DSTRBT_NOTE
+			 , DELV_STDT
+			 , DELV_EDDT
+			 , SHIP_COMP_CD
+			 , INVOICE_NO
+			 , INVOICE_SEND_YN
+			 , SELL_STORE_CD
+			 , SELL_FEE_RATE
+			 , AF_LINK_CD
+			 , ITHR_CD
+			 , CONTENTS_LOC
+			 , PLAN_DTL_SQ
+			 , SOCIAL_SQ
+			 , #{regNo}
+			 , NOW()
+			 , #{updNo}
+			 , NOW()
+		  FROM TB_ORDER_DETAIL
+		 WHERE ORD_NO = #{ordNo}
+	</insert>
+
 	<!-- 전체취소 주문상세단품정보 수정 -->
 	<update id="updateOrderDetailItemForAllCancel" parameterType="Order">
 		/* TscOrderChange.updateOrderDetailItemForAllCancel */
@@ -1938,7 +2123,9 @@
 		     , UPD_DT
 		  FROM TB_CUST_POINT_HST
 		 WHERE ORD_NO = #{ordNo}
+		<if test="ordDtlNo != null and ordDtlNo != ''">
 		   AND ORD_DTL_NO = #{ordDtlNo}
+		</if>
 		   AND OCCUR_GB = #{occurGb}
 		 ORDER BY CUST_PNT_SQ
 	</select>
@@ -1982,7 +2169,7 @@
 		 WHERE PNT_HST_SQ = #{pntHstSq}
 	</insert>
 	
-	<!-- 마이페이지 전체취소 사용포인트 원복 수정  -->
+	<!-- 마이페이지 사용포인트 원복 수정  -->
 	<update id="updateCustPointRollback" parameterType="Order">
 		/* TscOrderChange.createCustPointHstRollback */
 		UPDATE TB_CUST_POINT
@@ -2003,7 +2190,9 @@
 		     , CC.UPD_NO = #{updNo}
 		     , CC.UPD_DT = NOW()
 		 WHERE OD.ORD_NO = #{ordNo}
+		<if test="ordDtlNo != null and ordDtlNo != ''">
 		   AND OD.ORD_DTL_NO = #{ordDtlNo}
+		</if>
 	</update>
 
 	<!-- 마이페이지 장바구니쿠폰 원복 수정 -->
@@ -2054,7 +2243,9 @@
 		     , UPD_DT
 		  FROM TB_CUST_GIFTCARD_HST
 		 WHERE ORD_NO = #{ordNo}
+		<if test="ordDtlNo != null and ordDtlNo != ''">
 		   AND ORD_DTL_NO = #{ordDtlNo}
+		</if>
 		 ORDER BY CUST_GFCD_SQ
 	</select>
 
@@ -2141,6 +2332,98 @@
 		   AND PAY_GB = 'O'
 		   AND PAY_STAT IN ('G016_30', 'G016_00')
 	</select>
+	
+	<!-- 마이페이지 전체취소 주문변경상세 등록 -->
+	<insert id="createOrderChangeDetailForAllCancel" parameterType="OrderChange">
+		/* TscOrder.createOrderChangeDetailForAllCancel */
+		INSERT INTO TB_ORDER_CHANGE_DETAIL (
+		       ORD_CHG_SQ
+		     , ORD_DTL_NO
+		     , CHG_QTY
+		     , CHG_STAT
+		     , CHG_ORD_DTL_NO
+		     , WH_MEMO
+		     , COMPLETE_DT
+		     , DEL_YN
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		SELECT #{ordChgSq}
+		     , ORD_DTL_NO
+		     , ORD_QTY
+		     , #{chgStat}
+		     , NULL
+		     , NULL
+		     , NOW()
+		     , 'N'
+		     , #{regNo}
+		     , NOW()
+		     , #{updNo}
+		     , NOW()
+		  FROM TB_ORDER_DETAIL
+		 WHERE ORD_NO = #{ordNo}
+	</insert>
+
+	<!-- 마이페이지 전체취소 주문변경상세 이력 등록-->
+	<insert id="createOrderChangeDetailHstForAllCancel" parameterType="OrderChange">
+		/* OrderChange.createOrderChangeDetailHstForAllCancel */
+		INSERT INTO TB_ORDER_CHANGE_DETAIL_HST (
+		       ORD_CHG_SQ
+		     , ORD_DTL_NO
+		     , CHG_QTY
+		     , CHG_STAT
+		     , CHG_ORD_DTL_NO
+		     , WH_MEMO
+		     , COMPLETE_DT
+		     , DEL_YN
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		SELECT ORD_CHG_SQ
+			 , ORD_DTL_NO
+			 , CHG_QTY
+			 , #{chgStat}
+			 , CHG_ORD_DTL_NO
+			 , WH_MEMO
+			 , COMPLETE_DT
+			 , DEL_YN
+			 , #{regNo}
+			 , NOW()
+			 , #{updNo}
+			 , NOW()
+		  FROM TB_ORDER_CHANGE_DETAIL
+		 WHERE ORD_CHG_SQ = #{ordChgSq}
+	</insert>
+	
+	<!-- 마이페이지 전체취소 환불정보 조회 -->
+	<select id="getRefundInfoForAllCancel" parameterType="Order" resultType="Order">
+		/* TscOrderChange.getRefundInfoForAllCancel */
+		SELECT OD.ORD_NO
+			 , SUM(OD.ORD_AMT)          AS RF_CNCL_AMT
+			 , SUM(OD.CPN1_DC_AMT)      AS RF_CPN1_AMT
+			 , SUM(OD.TMTB1_DC_AMT)     AS RF_TMTB1_AMT
+			 , SUM(OD.TMTB2_DC_AMT)     AS RF_TMTB2_AMT
+			 , SUM(OD.GOODS_CPN_DC_AMT) AS RF_GOODS_CPN_AMT
+			 , SUM(OD.CART_CPN_DC_AMT)  AS RF_CART_CPN_AMT
+			 , SUM(OD.PNT_DC_AMT)       AS RF_PNT_AMT
+			 , SUM(OD.PRE_PNT_DC_AMT)   AS RF_PRE_PNT_AMT
+			 , SUM(OD.GFCD_USE_AMT)     AS RF_GFCD_USE_AMT
+			 , SUM(DF.DELV_FEE)         AS RF_DELIVERY_FEE
+			 , SUM(OD.REAL_ORD_AMT)     AS REAL_ORD_AMT
+		  FROM TB_ORDER_DETAIL OD
+		 INNER JOIN (SELECT ORD_NO
+		                  , SUM(DELV_FEE) AS DELV_FEE
+		               FROM TB_DELIVERY_FEE
+		              WHERE DELV_FEE_GB = 'G018_10'
+		              GROUP BY ORD_NO) DF
+		    ON OD.ORD_NO = DF.ORD_NO
+		 WHERE OD.ORD_NO = #{ordNo}
+		 GROUP BY OD.ORD_NO
+	</select>
 </mapper>