Переглянути джерело

마이페이지 부분취소 임시 커밋

card007 5 роки тому
батько
коміт
2b3fe1951b
1 змінених файлів з 1600 додано та 1602 видалено
  1. 1600 1602
      src/main/java/com/style24/core/biz/service/TscOrderChangeService.java

+ 1600 - 1602
src/main/java/com/style24/core/biz/service/TscOrderChangeService.java

@@ -22,7 +22,7 @@ import lombok.extern.slf4j.Slf4j;
 
 /**
  * 취소, 반품, 교환 Service
- * 
+ *
  * @author jsh77b
  * @since 2021. 01. 18
  */
@@ -44,7 +44,7 @@ public class TscOrderChangeService {
 
 	@Autowired
 	private TscNaverPayService naverPayService;
-	
+
 	/**
 	 * 주문변경정보 (상세번호배열, 취소수량배열) 취소 목록으로 변환 (사용안함)
 	 * @param Order
@@ -53,19 +53,19 @@ public class TscOrderChangeService {
 	 * @since 2020. 12. 16
 	 */
 	public List<Order> getCnclReqList(OrderChange cnclReq, String chgGbn) {
-		
+
 		// 1. 주문번호설정
 		Order order = new Order();
 		order.setOrdNo(cnclReq.getOrdNo());
-		
+
 		// 2. 취소가능 주문상세상태값 설정
 		if (chgGbn == null) {
 			chgGbn = "";
 		}
-		
+
 		// 2.1 신청구분으로 
 		String[] ordDtlStatArr;
-			
+
 		// 취소가능 주문상세 상태값 설정
 		if (TscConstants.OrderChangeStat.CANCEL.value().equals(chgGbn)) {
 			ordDtlStatArr = new String[4];
@@ -73,7 +73,7 @@ public class TscOrderChangeService {
 			ordDtlStatArr[1] = TscConstants.OrderDetailStat.PAYMENT_COMPLETE.value();
 			ordDtlStatArr[2] = TscConstants.OrderDetailStat.GOODS_PREPARE.value();
 			ordDtlStatArr[3] = TscConstants.OrderDetailStat.DELIVERY_PREPARE.value();
-		} 
+		}
 		// 반품, 교환가능 주문상세 상태값 설정
 		else {
 			ordDtlStatArr = new String[3];
@@ -81,26 +81,26 @@ public class TscOrderChangeService {
 			ordDtlStatArr[1] = TscConstants.OrderDetailStat.SHIP_COMPLETE.value();
 			ordDtlStatArr[2] = TscConstants.OrderDetailStat.DELIVERY_COMPLETE.value();
 		}
-		
+
 		order.setOrdDtlStatArr(ordDtlStatArr);
-		
+
 		// 3. 취소,교환,반품 가능 주문목록 조회 후 취소/교환/반품 신청수량을 셋팅
 		List<Order> cnclReqList = getCancelRequestTargetList(order);
 		int[] ordDtlNoArr 		= cnclReq.getOrdDtlNoArr();
 		int[] cnclRtnReqQtyArr 	= cnclReq.getCnclRtnReqQtyArr();
-		
+
 		for (int i=0 ; i<cnclReqList.size() ; i++) {
 			Order vo = cnclReqList.get(i);
-			
+
 			if (ordDtlNoArr[i] == vo.getOrdDtlNo()) {
 				vo.setOrdCanChgQty(cnclRtnReqQtyArr[i]);
 			}
 			cnclReqList.add(vo);
 		}
-		
+
 		return cnclReqList;
 	}
-	
+
 	/**
 	 * 주문변경 대상목록 조회 (취소, 반품, 교환)
 	 * @param Order
@@ -111,7 +111,7 @@ public class TscOrderChangeService {
 	public List<Order> getCancelRequestTargetList(Order order) {
 		return orderChangeDao.getCancelRequestTargetList(order);
 	}
-	
+
 	/**
 	 * 주문변경신청목록 조회 (취소, 반품, 교환)
 	 * @param Order
@@ -132,7 +132,7 @@ public class TscOrderChangeService {
 	 */
 	@Transactional("shopTxnManager")
 	public GagaMap cnclReqCancel(GagaMap mav, int userNo) {
-		
+
 		Order order = new Order();
 		order.setOrdNo(mav.getInt("ordNo"));
 		order.setOrdChgSq(mav.getInt("ordChgSq"));
@@ -140,22 +140,22 @@ public class TscOrderChangeService {
 		order.setRegNo(userNo);
 		order.setUpdNo(userNo);
 		order.setDelYn("Y");
-		
+
 		// 1. 주문변경정보 (TB_ORDER_CHANGE_DTL(수정))
 		orderChangeDao.updateOrderChangeDtlCancel(order);
-		
+
 		// 2. 주문정보 이력 등록 (TB_ORDER_DETAIL_HST(등록))
 		orderChangeDao.createOrderDtlHstCancel(order);
-		
+
 		// TODO
 		// 3. PG 실행 (취소시 추가결제금액 취소처리)
-		
+
 		return mav;
 	}
 
 	/**
 	 * 마이페이지 부분취소 처리
-	 * 
+	 *
 	 * @param GagaMap
 	 * @return GagaMap
 	 * @author card007
@@ -184,7 +184,7 @@ public class TscOrderChangeService {
 		String ordDtlStat					= TscConstants.OrderDetailStat.PAYMENT_AFTER_CANCEL.value();	// 주문상세상태
 		String chgStat						= TscConstants.OrderChangeStat.PAYMENT_AFTER_CANCEL.value();	// 주문변경상태
 		int pgCancelAmt						= 0;															// PG취소금액
-		
+
 		// 2. 주문상세단품정보등록, 변경 (단품단위)
 		List<Order> cancelOrderDetailList = new ArrayList<>();
 		List<Integer> ordDtlNoList = new ArrayList<>();
@@ -193,7 +193,7 @@ public class TscOrderChangeService {
 			cancelOrderRefundPo.setOrdDtlStat(ordDtlStat);
 			cancelOrderRefundPo.setRegNo(custNo);
 			cancelOrderRefundPo.setUpdNo(custNo);
-			
+
 			// 2-1. 취소수량이 존재하면 주문상세단품정보 수정 및 주문상세단품 이력 등록
 			if (cancelOrderRefundPo.getOrdCanChgQty() > 0) {
 				// 2-1-1. 주문상세단품정보 수정
@@ -209,7 +209,7 @@ public class TscOrderChangeService {
 				ordDtlNoList.add(ordDtlNo);
 			}
 		}
-		
+
 		// 3. 주문변경정보, 주문정보, 환불정보 (배송정책코드 별)
 		for (Order obj : cancelDelvRefundList) {
 			// 취소금액 있을 시 처리
@@ -226,17 +226,17 @@ public class TscOrderChangeService {
 				orderChange.setUpdNo(custNo);
 
 				orderChangeDao.createOrderChange(orderChange);
-				
+
 				// 3-2. 주문상세정보 수정
 				for (Order vo : cancelOrderDetailList) {
 					// 배송정책코드 별 주문상세 처리
 					if (obj.getDelvFeeCd().equals(vo.getDelvFeeCd())) {
 						// 주문상세 별 전체취소여부 설정
 						int leftQty = vo.getOrdQty() - vo.getCnclRtnQty() - vo.getOrdCanChgQty();
-						
+
 						// 3-2-1. 주문상세 이력 등록
 						orderChangeDao.createOrderDetailHstCnclRtn(vo);
-						
+
 						// 3-2-2. 주문상세정보 수정
 						orderChangeDao.updateOrderDetail(vo);
 
@@ -306,7 +306,7 @@ public class TscOrderChangeService {
 								orderChangeDao.updateCustGiftCardRollback(giftCard);
 							}
 						}
-						
+
 						// 3-2-7. 주문변경상세정보 및 이력 등록
 						OrderChange changeDetailPo = new OrderChange();
 						changeDetailPo.setOrdChgSq(orderChange.getOrdChgSq());
@@ -320,16 +320,16 @@ public class TscOrderChangeService {
 						orderChangeDao.createOrderChangeDetailHst(changeDetailPo);
 					}
 				}
-				
+
 				// 3-3. 상품재고원복
 				orderChange.setSellGb(TscConstants.SellGb.ORDER_CANCEL.value());
 				orderChangeDao.createSellQty(orderChange);
-				
+
 				// 3-4. 환불결제정보 등록 (배송정책 별)
-				int spanRealCnclRtnAmt 		= obj.getRealOrdAmt();		// 취소금액합계
-				int sumDeliveryFee 			= obj.getDelvFee();			// 배송비합계
-				int spanRefundAmt			= spanRealCnclRtnAmt + sumDeliveryFee;
-				
+				int spanRealCnclRtnAmt = obj.getRealOrdAmt();        // 취소금액합계
+				int sumDeliveryFee = obj.getDelvFee();            // 배송비합계
+				int spanRefundAmt = spanRealCnclRtnAmt + sumDeliveryFee;
+
 				Order paymentOrder = new Order();
 				paymentOrder.setOrdNo(ordNo);
 				paymentOrder.setPayAmt(spanRefundAmt * -1);
@@ -339,7 +339,7 @@ public class TscOrderChangeService {
 				paymentOrder.setUpdNo(custNo);
 
 				orderChangeDao.createPayment(paymentOrder);
-				
+
 				// 3-5. 환불정보 등록
 				Order refundOrder = new Order();
 				refundOrder.setOrdNo(ordNo);
@@ -400,8 +400,6 @@ public class TscOrderChangeService {
 				orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
 			}
 
-
-
 			// 5. PG 결제 취소 처리 (상품권으로만 결제 시 PG점프)
 			if (!TscConstants.PgGb.ISTYLE.value().equals(pgGb)) {
 				if (TscConstants.PgGb.KCP.value().equals(pgGb) || TscConstants.PgGb.PAYCO.value().equals(pgGb)) {
@@ -438,1697 +436,1697 @@ public class TscOrderChangeService {
 
 					kakaoPayService.cancelKakaoPayment(kakaoPay);
 				}
+			}
+
+		}
+			return map;
 		}
-		
-		
-		return map;
-	}
 
-	
-	/**
-	 * 취소완료 (admin, front, batch(soldout), batch(gift), batch(napy), batch(extmall))
-	 * @param Order
-	 * @return Order
-	 * @author jsh77b
-	 * @since 2021. 01. 19
-	 */
-	@SuppressWarnings("unchecked")
-	@Transactional("shopTxnManager")
-	public GagaMap cnclComplete(GagaMap mav, int userNo) {
-
-		// 1. 세션회원조회
-		//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 단위)
-
-		// 3. 취소신청정보
-		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<>();
-		
-		for (int i=0 ; i<cancelOrderRefundList.size() ; i++) {
-			Order cancelOrderRefundPo = cancelOrderRefundList.get(i);
-			cancelOrderRefundPo.setRegNo(userNo);
-			cancelOrderRefundPo.setUpdNo(userNo);
-			
-			// 2020.01.05 추후 무통장입금전 전체 취소시 분기 로직 추가 예정
-			// 2021.01.26 취소완료, 취소신청완료(취소승인) 일때실행
-			if ("cnclComplete".equals(reqGbn) || "cnclReqComplete".equals(reqGbn)) {
-				cancelOrderRefundPo.setOrdDtlStat(ordDtlStat);
-			}
 
-			// 4.1 취소수량이 존재하면 주문상세단품정보 수정 및 주문상세단품이력정보 등록
-			if (cancelOrderRefundPo.getOrdCanChgQty() > 0) {
-				
+		/**
+		 * 취소완료 (admin, front, batch(soldout), batch(gift), batch(napy), batch(extmall))
+		 * @param Order
+		 * @return Order
+		 * @author jsh77b
+		 * @since 2021. 01. 19
+		 */
+		@SuppressWarnings("unchecked")
+		@Transactional("shopTxnManager")
+		public GagaMap cnclComplete(GagaMap mav, int userNo) {
+
+			// 1. 세션회원조회
+			//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 단위)
+
+			// 3. 취소신청정보
+			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<>();
+
+			for (int i=0 ; i<cancelOrderRefundList.size() ; i++) {
+				Order cancelOrderRefundPo = cancelOrderRefundList.get(i);
+				cancelOrderRefundPo.setRegNo(userNo);
+				cancelOrderRefundPo.setUpdNo(userNo);
+
+				// 2020.01.05 추후 무통장입금전 전체 취소시 분기 로직 추가 예정
 				// 2021.01.26 취소완료, 취소신청완료(취소승인) 일때실행
-				// 4.2 주문상세단품정보수정 (TB_ORDER_DETAIL_ITEM)
 				if ("cnclComplete".equals(reqGbn) || "cnclReqComplete".equals(reqGbn)) {
-					orderChangeDao.updateOrderDetailItem(cancelOrderRefundPo);
-				
-				
-					// 4.3 주문상세단품정보이력등록 (TB_ORDER_DETAIL_ITEM_HST) 
-					orderChangeDao.createOrderDetailItemHst(cancelOrderRefundPo);
+					cancelOrderRefundPo.setOrdDtlStat(ordDtlStat);
 				}
-				
-				// 4.4 주문변경 상세 단위로 데이타 등록 (ORD_DTL_NO)
-				Boolean temp = false;
-				if (cancelOrderDetailList.size() > 0) {
-					for (int j=0 ; j<cancelOrderDetailList.size() ; j++) {
-						if (cancelOrderRefundPo.getOrdDtlNo() == cancelOrderDetailList.get(j).getOrdDtlNo()) {
-							temp = true;
+
+				// 4.1 취소수량이 존재하면 주문상세단품정보 수정 및 주문상세단품이력정보 등록
+				if (cancelOrderRefundPo.getOrdCanChgQty() > 0) {
+
+					// 2021.01.26 취소완료, 취소신청완료(취소승인) 일때실행
+					// 4.2 주문상세단품정보수정 (TB_ORDER_DETAIL_ITEM)
+					if ("cnclComplete".equals(reqGbn) || "cnclReqComplete".equals(reqGbn)) {
+						orderChangeDao.updateOrderDetailItem(cancelOrderRefundPo);
+
+
+						// 4.3 주문상세단품정보이력등록 (TB_ORDER_DETAIL_ITEM_HST) 
+						orderChangeDao.createOrderDetailItemHst(cancelOrderRefundPo);
+					}
+
+					// 4.4 주문변경 상세 단위로 데이타 등록 (ORD_DTL_NO)
+					Boolean temp = false;
+					if (cancelOrderDetailList.size() > 0) {
+						for (int j=0 ; j<cancelOrderDetailList.size() ; j++) {
+							if (cancelOrderRefundPo.getOrdDtlNo() == cancelOrderDetailList.get(j).getOrdDtlNo()) {
+								temp = true;
+							}
 						}
 					}
-				}
-				
-				// 4.5 주문상세단위 데이타 저장(주문상세 단위)
-				if (!temp) {
-					cancelOrderDetailList.add(cancelOrderRefundPo);
+
+					// 4.5 주문상세단위 데이타 저장(주문상세 단위)
+					if (!temp) {
+						cancelOrderDetailList.add(cancelOrderRefundPo);
+					}
 				}
 			}
-		}
-		
-		
-		// 2021.01.21 DELV_FEE 배송번호 단위로 TB_ORDER_CHANGE 생성
-		// 5. 주문변경정보, 주문정보, 환불정보 (업체코드 & 배송정책코드)
-		for (int i=0 ; i<cancelDelvRefundList.size() ; i++) {
-			
-			Order obj = cancelDelvRefundList.get(i);
-			
-			// 취소금액이 있을때 처리
-			if (obj.getCnclRtnAmt() > 0) {
-			
-				// 5.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);
-				
-				// 5.2 주문변경 추가정보 등록
-				String chgerNm 			= mav.getString("chgerNm");			// 변경자
-				String chgerPhnno 		= mav.getString("chgerPhnno");		// 변경핸드폰번호
-				String chgerTelno 		= mav.getString("chgerTelno");		// 변경전화번호
-				String chgerEmail 		= mav.getString("chgerEmail");		// 변경이메일
-				
-				orderChange.setChgerNm(chgerNm);
-				orderChange.setChgerPhnno(chgerPhnno);
-				orderChange.setChgerTelno(chgerTelno);
-				orderChange.setChgerEmail(chgerEmail);
-				orderChange.setChgerRtnMemo("");
-				
-				// 2021.01.26 취소완료, 취소신청 일때실행
-				if ("cnclComplete".equals(reqGbn) || "cnclReq".equals(reqGbn)) {
-					orderChangeDao.createOrderChange(orderChange);
-				}
-				
-				// 5.3 주문상세단위 취소정보
-				for (int j=0 ; j<cancelOrderDetailList.size() ; j++) {
-					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())) {
-						
-						// 2021.01.26 취소완료, 취소신청완료 일때실행
-						// 2020.01.05 추후 무통장입금전 전체 취소시 분기로직 추가 예정
-						if ("cnclComplete".equals(reqGbn) || "cnclReqComplete".equals(reqGbn)) {
-							vo.setOrdDtlStat(ordDtlStat);
-						} else {
-							vo.setOrdDtlStat(TscConstants.OrderChangeStat.CANCEL.value()); 						// 취소신청
-						}
-						
-						// 5.3.1 주문변경상세정보 이력등록
-						orderChangeDao.createOrderDetailHstCnclRtn(vo);
-						
-						// 2021.01.26 취소완료, 취소신청완료 일때실행
-						// 5.3.2 주문변경상세정보 수정
-						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();
+			// 2021.01.21 DELV_FEE 배송번호 단위로 TB_ORDER_CHANGE 생성
+			// 5. 주문변경정보, 주문정보, 환불정보 (업체코드 & 배송정책코드)
+			for (int i=0 ; i<cancelDelvRefundList.size() ; i++) {
+
+				Order obj = cancelDelvRefundList.get(i);
+
+				// 취소금액이 있을때 처리
+				if (obj.getCnclRtnAmt() > 0) {
+
+					// 5.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);
+
+					// 5.2 주문변경 추가정보 등록
+					String chgerNm 			= mav.getString("chgerNm");			// 변경자
+					String chgerPhnno 		= mav.getString("chgerPhnno");		// 변경핸드폰번호
+					String chgerTelno 		= mav.getString("chgerTelno");		// 변경전화번호
+					String chgerEmail 		= mav.getString("chgerEmail");		// 변경이메일
+
+					orderChange.setChgerNm(chgerNm);
+					orderChange.setChgerPhnno(chgerPhnno);
+					orderChange.setChgerTelno(chgerTelno);
+					orderChange.setChgerEmail(chgerEmail);
+					orderChange.setChgerRtnMemo("");
+
+					// 2021.01.26 취소완료, 취소신청 일때실행
+					if ("cnclComplete".equals(reqGbn) || "cnclReq".equals(reqGbn)) {
+						orderChangeDao.createOrderChange(orderChange);
+					}
+
+					// 5.3 주문상세단위 취소정보
+					for (int j=0 ; j<cancelOrderDetailList.size() ; j++) {
+						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())) {
+
+							// 2021.01.26 취소완료, 취소신청완료 일때실행
+							// 2020.01.05 추후 무통장입금전 전체 취소시 분기로직 추가 예정
+							if ("cnclComplete".equals(reqGbn) || "cnclReqComplete".equals(reqGbn)) {
+								vo.setOrdDtlStat(ordDtlStat);
+							} else {
+								vo.setOrdDtlStat(TscConstants.OrderChangeStat.CANCEL.value()); 						// 취소신청
+							}
+
+							// 5.3.1 주문변경상세정보 이력등록
+							orderChangeDao.createOrderDetailHstCnclRtn(vo);
+
+							// 2021.01.26 취소완료, 취소신청완료 일때실행
+							// 5.3.2 주문변경상세정보 수정
+							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);
 								}
+							}
 
-								point.setOccurGb(TscConstants.PointOccurGb.USE_POINT_CANCEL.value());
-								point.setOccurDtlDesc("포인트사용취소");
+							// 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);
-								orderChangeDao.updateCustPointRollback(point);
 							}
-						}
 
-						// 5.3.4 적립예정포인트 수정
-						int savePntAmt = vo.getSavePntAmt();
-						vo.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT.value());
+							// 5.3.5 상품쿠폰원복
+							if (leftQty == 0) {
+								orderChangeDao.updateGoodsCpnRollback(vo);
+							}
 
-						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);
+							// 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);
+								}
+							}
 
-							// 적립예정포인트 취소 이력 생성
-							orderChangeDao.createCustPointHstRollback(point);
+							// * 주문상세단위가 아닌 주문상세단품단위로 데이타가 처리되고 있었음 주문상세단위로 수정
+							// 5.3 주문변경상세정보 등록
+							OrderChange changeDetailPo = new OrderChange();
+							changeDetailPo.setOrdChgSq(orderChange.getOrdChgSq());
+							changeDetailPo.setOrdDtlNo(vo.getOrdDtlNo());
+							changeDetailPo.setChgQty(vo.getOrdCanChgQty());
+							changeDetailPo.setRegNo(userNo);
+							changeDetailPo.setUpdNo(userNo);
+
+							// 2021.01.26 취소완료일때실행
+							if ("cnclComplete".equals(reqGbn)) {
+								changeDetailPo.setChgStat(chgStat);
+
+								orderChangeDao.createOrderChangeDetail(changeDetailPo);
+								orderChangeDao.createOrderChangeDetailHst(changeDetailPo);
+							}
+							// 2021.01.26 취소신청완료일때실행
+							else if ("cnclReqComplete".equals(reqGbn)) {
+								Order order = new Order();
+								order.setOrdNo(mav.getInt("ordNo"));
+								order.setOrdChgSq(mav.getInt("ordChgSq"));
+								order.setChgStat(chgStat);
+								order.setUpdNo(userNo);
+								order.setDelYn("N");
+
+								orderChangeDao.updateOrderChangeDtlCancel(order);
+								orderChangeDao.createOrderChangeDetailHst(changeDetailPo);
+							}
+							// 2021.01.26 취소신청일때실행
+							else {
+								changeDetailPo.setChgStat(TscConstants.OrderChangeStat.CANCEL.value()); 			// 취소신청
+								orderChangeDao.createOrderChangeDetail(changeDetailPo);
+							}
 						}
+					}
 
-						// 5.3.5 상품쿠폰원복
-						if (leftQty == 0) {
-							orderChangeDao.updateGoodsCpnRollback(vo);
-						}
+					// 2021.01.26 취소완료, 취소신청완료 일때실행
+					// 5.31 상품재고원복 (TB_SELL_QTY 등록(취소,반품))
+					orderChange.setSellGb("11");
+					if ("cnclComplete".equals(reqGbn)) {
+						orderChangeDao.createSellQty(orderChange);
+					} else if ("cnclReqComplete".equals(reqGbn)) {
+						orderChange.setOrdNo(mav.getInt("ordNo"));
+						orderChange.setOrdChgSq(mav.getInt("ordChgSq"));
+						orderChangeDao.createSellQty(orderChange);
+					}
 
-						// 5.3.6 사용상품권 원복
-						int gfcdUseAmt = vo.getGfcdUseAmt();
+					// 5.4 환불결제정보 등록 (업체별 & 배송정책별) 단위
+					// 취소, 반품 사유에 따른 추가배송비, 반품배송비를 환불금액에서 추가, 제외 할 수 있다.
+					//int spanRealCnclRtnAmt 		= obj.getCnclRtnAmt();		// 취소금액합계
+					// 2021.04.12 취소,반품 환불금액 계산 칼럼 오류 수정 jsh77b
+					int spanRealCnclRtnAmt 		= obj.getRealOrdAmt();		// 취소금액합계
+					int sumDeliveryFee 			= obj.getDelvFee();			// 배송비합계
+					int spanTotDeliveryFee 		= obj.getAddDelvFee();		// 추가배송비합계
+					int spanTotRtnDelvFee 		= obj.getRtnDelvFee();		// 반품배송비합계
+					int spanRefundAmt			= 0;
+
+					// 고객사유 : 환불금액계산 = (취소금액 + 배송비) - 추가배송비
+					if ("true".equals(isCustomer)) {
+						spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee) - spanTotDeliveryFee - spanTotRtnDelvFee;
+					}
+					// 회사사유 : 환불금액계산 = (취소금액 + 배송비)
+					else {
+						spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee);
+					}
 
-						for (Order giftCard : orderChangeDao.getCustGiftCardHst(vo)) {
-							while (gfcdUseAmt > 0) {
-								if (gfcdUseAmt < giftCard.getGfcdAmt()) {
-									giftCard.setGfcdAmt(gfcdUseAmt);
-									gfcdUseAmt -= gfcdUseAmt;
-								} else {
-									gfcdUseAmt -= giftCard.getGfcdAmt();
-								}
+					Order paymentOrder = new Order();
+					paymentOrder.setOrdNo(ordNo);
+					paymentOrder.setPayAmt(spanRefundAmt * -1);
+					paymentOrder.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+					paymentOrder.setOrdChgSq(orderChange.getOrdChgSq());
+					paymentOrder.setRegNo(userNo);
+					paymentOrder.setUpdNo(userNo);
 
-								giftCard.setOccurGb(TscConstants.GiftCardOccurGb.USE_GIFTCARD_CANCEL.value());
-								giftCard.setOccurDtlDesc("상품권사용취소");
-								giftCard.setRegNo(userNo);
-								giftCard.setUpdNo(userNo);
+					// 2021.01.26 취소완료, 취소신청완료 일때실행
+					if ("cnclComplete".equals(reqGbn) || "cnclReqComplete".equals(reqGbn)) {
+						orderChangeDao.createPayment(paymentOrder);
+					}
 
-								// 포인트 사용 취소 이력 생성 및 포인트 수정
-								orderChangeDao.createCustGiftCardHstRollback(giftCard);
-								orderChangeDao.updateCustGiftCardRollback(giftCard);
-							}
-						}
-						
-						// * 주문상세단위가 아닌 주문상세단품단위로 데이타가 처리되고 있었음 주문상세단위로 수정
-						// 5.3 주문변경상세정보 등록
-						OrderChange changeDetailPo = new OrderChange();
-						changeDetailPo.setOrdChgSq(orderChange.getOrdChgSq());
-						changeDetailPo.setOrdDtlNo(vo.getOrdDtlNo());
-						changeDetailPo.setChgQty(vo.getOrdCanChgQty());
-						changeDetailPo.setRegNo(userNo);
-						changeDetailPo.setUpdNo(userNo);
-						
-						// 2021.01.26 취소완료일때실행
-						if ("cnclComplete".equals(reqGbn)) {
-							changeDetailPo.setChgStat(chgStat);
+					// 5.5 환불금액 등록
+					Order refundOrder = new Order();
+					refundOrder.setOrdNo(ordNo);
+					refundOrder.setPaySq(paymentOrder.getPaySq());
+					refundOrder.setOrdChgSq(orderChange.getOrdChgSq());
+					refundOrder.setRegNo(userNo);
+
+					// 2021.01.25 TB_REFUND 정보 등록을 위해서 분리 작업
+					refundOrder.setRefundAmt(spanRefundAmt);
+					refundOrder.setRfCpn1Amt(obj.getCpn1DcAmt());
+					refundOrder.setRfTmtb1Amt(obj.getTmtb1DcAmt());
+					refundOrder.setRfTmtb2Amt(obj.getTmtb2DcAmt());
+					refundOrder.setRfGoodsCpnAmt(obj.getGoodsCpnDcAmt());
+					refundOrder.setRfCartCpnAmt(obj.getCartCpnDcAmt());
+					refundOrder.setRfPntAmt(obj.getPntAmt());
+					refundOrder.setRfPrePntAmt(obj.getPrePntDcAmt());
+					refundOrder.setRfGfcdUseAmt(obj.getGfcdUseAmt());
+
+					refundOrder.setRaNo(mav.get("accountNo").toString());
+					refundOrder.setRaNm(mav.get("accountNm").toString());
+					refundOrder.setRaBank(mav.get("bankCd").toString());
+
+					// 2021.01.26 취소완료, 취소신청 일때실행
+					if ("cnclComplete".equals(reqGbn) || "cnclReq".equals(reqGbn)) {
+						orderChangeDao.createRefund(refundOrder);
+					}
 
-							orderChangeDao.createOrderChangeDetail(changeDetailPo);
-							orderChangeDao.createOrderChangeDetailHst(changeDetailPo);
-						}
-						// 2021.01.26 취소신청완료일때실행
-						else if ("cnclReqComplete".equals(reqGbn)) {
-							Order order = new Order();
-							order.setOrdNo(mav.getInt("ordNo"));
-							order.setOrdChgSq(mav.getInt("ordChgSq"));
-							order.setChgStat(chgStat);
-							order.setUpdNo(userNo);
-							order.setDelYn("N");
-
-							orderChangeDao.updateOrderChangeDtlCancel(order);
-							orderChangeDao.createOrderChangeDetailHst(changeDetailPo);
-						}
-						// 2021.01.26 취소신청일때실행
-						else {
-							changeDetailPo.setChgStat(TscConstants.OrderChangeStat.CANCEL.value()); 			// 취소신청
-							orderChangeDao.createOrderChangeDetail(changeDetailPo);
+					// 5.6 결제금액이 무료배송금액보다 작으면 배송비 신규 등록
+					if (obj.getAddDelvFee() > 0) {
+						Order delvFeeOrder = new Order();
+
+						delvFeeOrder.setPaySq(paymentOrder.getPaySq());
+						delvFeeOrder.setOrdNo(ordNo);
+						delvFeeOrder.setDelvFeeGb("G018_10");
+						delvFeeOrder.setDelvFeeCd(obj.getDelvFeeCd());
+						delvFeeOrder.setDelvFee(obj.getAddDelvFee());
+						delvFeeOrder.setRealDelvAmt(obj.getDelvFee());
+						delvFeeOrder.setOrdChgSq(orderChange.getOrdChgSq());
+						delvFeeOrder.setSupplyCompCd(obj.getSupplyCompCd());
+						delvFeeOrder.setRegNo(userNo);
+						delvFeeOrder.setUpdNo(userNo);
+
+						// 2021.01.26 취소완료, 취소신청완료일때실행
+						if ("cnclComplete".equals(reqGbn) || "cnclReqComplete".equals(reqGbn)) {
+							orderChangeDao.createDeliveryFee(delvFeeOrder);
 						}
 					}
+
+					pgCancelAmt += spanRefundAmt;
 				}
-				
-				// 2021.01.26 취소완료, 취소신청완료 일때실행
-				// 5.31 상품재고원복 (TB_SELL_QTY 등록(취소,반품))
-				orderChange.setSellGb("11");
-				if ("cnclComplete".equals(reqGbn)) {
-					orderChangeDao.createSellQty(orderChange);
-				} else if ("cnclReqComplete".equals(reqGbn)) {
-					orderChange.setOrdNo(mav.getInt("ordNo"));
-					orderChange.setOrdChgSq(mav.getInt("ordChgSq"));
-					orderChangeDao.createSellQty(orderChange);
-				}
-				
-				// 5.4 환불결제정보 등록 (업체별 & 배송정책별) 단위
-				// 취소, 반품 사유에 따른 추가배송비, 반품배송비를 환불금액에서 추가, 제외 할 수 있다.
-				//int spanRealCnclRtnAmt 		= obj.getCnclRtnAmt();		// 취소금액합계
-				// 2021.04.12 취소,반품 환불금액 계산 칼럼 오류 수정 jsh77b
-				int spanRealCnclRtnAmt 		= obj.getRealOrdAmt();		// 취소금액합계
-				int sumDeliveryFee 			= obj.getDelvFee();			// 배송비합계
-				int spanTotDeliveryFee 		= obj.getAddDelvFee();		// 추가배송비합계
-				int spanTotRtnDelvFee 		= obj.getRtnDelvFee();		// 반품배송비합계
-				int spanRefundAmt			= 0;
-
-				// 고객사유 : 환불금액계산 = (취소금액 + 배송비) - 추가배송비
-				if ("true".equals(isCustomer)) {
-					spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee) - spanTotDeliveryFee - spanTotRtnDelvFee;
-				}
-				// 회사사유 : 환불금액계산 = (취소금액 + 배송비)
-				else {
-					spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee);
-				}
-				
-				Order paymentOrder = new Order();
-				paymentOrder.setOrdNo(ordNo);
-				paymentOrder.setPayAmt(spanRefundAmt * -1);
-				paymentOrder.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
-				paymentOrder.setOrdChgSq(orderChange.getOrdChgSq());
-				paymentOrder.setRegNo(userNo);
-				paymentOrder.setUpdNo(userNo);
-				
-				// 2021.01.26 취소완료, 취소신청완료 일때실행
-				if ("cnclComplete".equals(reqGbn) || "cnclReqComplete".equals(reqGbn)) {
-					orderChangeDao.createPayment(paymentOrder);
-				}
-				
-				// 5.5 환불금액 등록
-				Order refundOrder = new Order();
-				refundOrder.setOrdNo(ordNo);
-				refundOrder.setPaySq(paymentOrder.getPaySq());
-				refundOrder.setOrdChgSq(orderChange.getOrdChgSq());
-				refundOrder.setRegNo(userNo);
-				
-				// 2021.01.25 TB_REFUND 정보 등록을 위해서 분리 작업
-				refundOrder.setRefundAmt(spanRefundAmt);
-				refundOrder.setRfCpn1Amt(obj.getCpn1DcAmt());
-				refundOrder.setRfTmtb1Amt(obj.getTmtb1DcAmt());
-				refundOrder.setRfTmtb2Amt(obj.getTmtb2DcAmt());
-				refundOrder.setRfGoodsCpnAmt(obj.getGoodsCpnDcAmt());
-				refundOrder.setRfCartCpnAmt(obj.getCartCpnDcAmt());
-				refundOrder.setRfPntAmt(obj.getPntAmt());
-				refundOrder.setRfPrePntAmt(obj.getPrePntDcAmt());
-				refundOrder.setRfGfcdUseAmt(obj.getGfcdUseAmt());
-				
-				refundOrder.setRaNo(mav.get("accountNo").toString());
-				refundOrder.setRaNm(mav.get("accountNm").toString());
-				refundOrder.setRaBank(mav.get("bankCd").toString());
-				
-				// 2021.01.26 취소완료, 취소신청 일때실행
-				if ("cnclComplete".equals(reqGbn) || "cnclReq".equals(reqGbn)) {
-					orderChangeDao.createRefund(refundOrder);
-				}
-				
-				// 5.6 결제금액이 무료배송금액보다 작으면 배송비 신규 등록
-				if (obj.getAddDelvFee() > 0) {
-					Order delvFeeOrder = new Order();
-					
-					delvFeeOrder.setPaySq(paymentOrder.getPaySq());
-					delvFeeOrder.setOrdNo(ordNo);
-					delvFeeOrder.setDelvFeeGb("G018_10");
-					delvFeeOrder.setDelvFeeCd(obj.getDelvFeeCd());
-					delvFeeOrder.setDelvFee(obj.getAddDelvFee());
-					delvFeeOrder.setRealDelvAmt(obj.getDelvFee());
-					delvFeeOrder.setOrdChgSq(orderChange.getOrdChgSq());
-					delvFeeOrder.setSupplyCompCd(obj.getSupplyCompCd());
-					delvFeeOrder.setRegNo(userNo);
-					delvFeeOrder.setUpdNo(userNo);
-					
-					// 2021.01.26 취소완료, 취소신청완료일때실행
-					if ("cnclComplete".equals(reqGbn) || "cnclReqComplete".equals(reqGbn)) {
-						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);
 			}
-		}
 
-		// 마지막 취소 시
-		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);
 
-		// 상품권으로만 결제 시 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);
-			}
+					kakaoPayService.cancelKakaoPayment(kakaoPay);
+				}
+			}
+
+			// TODO
+			// 14. 취소 완료 알림톡 발송 에정
+
+			//int a = 100/0;
+
+
+			return mav;
 		}
-		
-		// TODO
-		// 14. 취소 완료 알림톡 발송 에정
-		
-		//int a = 100/0;
-		
-		
-		return mav;
-	}
-	
-	/**
-	 * 반품신청 (ADMIN, FRONT, NPAY, EXTMALL) 
-	 * @param Order
-	 * @return Order
-	 * @author jsh77b
-	 * @since 2021. 01. 19
-	 */
-	@SuppressWarnings("unchecked")
-	@Transactional("shopTxnManager")
-	public GagaMap rtnReq(GagaMap mav, int userNo) {
-		
-		// 1. 세션회원조회
-		//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 단위)
-				
-		// 3. 변경신청정보
-		int ordNo 			= Integer.parseInt(mav.getString("ordNo"));							// 주문번호
-		int ordChgSq		= Integer.parseInt(mav.getString("ordChgSq"));						// 주문변경번호
-		String chgReason 	= mav.getString("chgReason");										// 변경사유
-		String chgMemo 		= mav.getString("chgMemo");											// 변경메모
-		String allCanYn		= mav.getString("allCanYn");										// 무통장입금전 전체취소 여부
-		String isCustomer	= mav.getString("isCustomer");										// 귀책사유 (고객, 회사)
-		String chgGb		= TscConstants.OrderChangeGb.RETURN.value(); 						// 반품요청
-		String wdGb			= mav.getString("wdGb");											// 회수방법
-		String wdInvoiceNo	= mav.getString("wdInvoiceNo");										// 회수송장번호
-		
-		// 4. 주문상세단품정보등록,변경 (단품단위)
-		List<Order> cancelOrderDetailList = new ArrayList<>();
-		
-		for (int i=0 ; i<cancelOrderRefundList.size() ; i++) {
-			Order cancelOrderRefundPo = cancelOrderRefundList.get(i);
-			cancelOrderRefundPo.setRegNo(userNo);
-			cancelOrderRefundPo.setUpdNo(userNo);
 
-			// 4.1 취소수량이 존재하면 주문상세단품정보 수정 및 주문상세단품이력정보 등록
-			if (cancelOrderRefundPo.getOrdCanChgQty() > 0) {
-				// 4.4 주문변경 상세 단위로 데이타 등록 (ORD_DTL_NO)
-				Boolean temp = false;
-				if (cancelOrderDetailList.size() > 0) {
-					for (int j=0 ; j<cancelOrderDetailList.size() ; j++) {
-						if (cancelOrderRefundPo.getOrdDtlNo() == cancelOrderDetailList.get(j).getOrdDtlNo()) {
-							temp = true;
+		/**
+		 * 반품신청 (ADMIN, FRONT, NPAY, EXTMALL) 
+		 * @param Order
+		 * @return Order
+		 * @author jsh77b
+		 * @since 2021. 01. 19
+		 */
+		@SuppressWarnings("unchecked")
+		@Transactional("shopTxnManager")
+		public GagaMap rtnReq(GagaMap mav, int userNo) {
+
+			// 1. 세션회원조회
+			//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 단위)
+
+			// 3. 변경신청정보
+			int ordNo 			= Integer.parseInt(mav.getString("ordNo"));							// 주문번호
+			int ordChgSq		= Integer.parseInt(mav.getString("ordChgSq"));						// 주문변경번호
+			String chgReason 	= mav.getString("chgReason");										// 변경사유
+			String chgMemo 		= mav.getString("chgMemo");											// 변경메모
+			String allCanYn		= mav.getString("allCanYn");										// 무통장입금전 전체취소 여부
+			String isCustomer	= mav.getString("isCustomer");										// 귀책사유 (고객, 회사)
+			String chgGb		= TscConstants.OrderChangeGb.RETURN.value(); 						// 반품요청
+			String wdGb			= mav.getString("wdGb");											// 회수방법
+			String wdInvoiceNo	= mav.getString("wdInvoiceNo");										// 회수송장번호
+
+			// 4. 주문상세단품정보등록,변경 (단품단위)
+			List<Order> cancelOrderDetailList = new ArrayList<>();
+
+			for (int i=0 ; i<cancelOrderRefundList.size() ; i++) {
+				Order cancelOrderRefundPo = cancelOrderRefundList.get(i);
+				cancelOrderRefundPo.setRegNo(userNo);
+				cancelOrderRefundPo.setUpdNo(userNo);
+
+				// 4.1 취소수량이 존재하면 주문상세단품정보 수정 및 주문상세단품이력정보 등록
+				if (cancelOrderRefundPo.getOrdCanChgQty() > 0) {
+					// 4.4 주문변경 상세 단위로 데이타 등록 (ORD_DTL_NO)
+					Boolean temp = false;
+					if (cancelOrderDetailList.size() > 0) {
+						for (int j=0 ; j<cancelOrderDetailList.size() ; j++) {
+							if (cancelOrderRefundPo.getOrdDtlNo() == cancelOrderDetailList.get(j).getOrdDtlNo()) {
+								temp = true;
+							}
 						}
 					}
-				}
-				
-				// 4.5 주문상세단위 데이타 저장(주문상세 단위)
-				if (!temp) {
-					cancelOrderDetailList.add(cancelOrderRefundPo);
-				}
-			}
-		}
 
-		// 2021.01.21 DELV_FEE 배송번호 단위로 TB_ORDER_CHANGE 생성
-		// 4. 주문변경정보, 주문정보, 환불정보 (업체코드 & 배송정책코드)
-		for (int i=0 ; i<cancelDelvRefundList.size() ; i++) {
-			
-			Order obj = cancelDelvRefundList.get(i);
-			
-			// 취소금액이 있을때 처리
-			if (obj.getCnclRtnAmt() > 0) {
-			
-				// 5.1 주문변경 기본정보 등록 
-				OrderChange orderChange = new OrderChange();
-				orderChange.setOrdNo(ordNo);
-				orderChange.setChgGb(chgGb);
-				orderChange.setChgReason(chgReason);
-				orderChange.setChgMemo(chgMemo);
-				orderChange.setAddPayCost(0);
-				orderChange.setAddPayAmt(0);
-				orderChange.setWdGb(wdGb);
-				orderChange.setWdInvoiceNo(wdInvoiceNo);
-				orderChange.setRegNo(userNo);
-				orderChange.setUpdNo(userNo);
-				
-				// 5.2 주문변경 추가정보 등록
-				String chgerNm 			= mav.getString("chgerNm");						// 변경자
-				String chgerPhnno 		= mav.getString("chgerPhnno");					// 변경핸드폰번호
-				String chgerTelno 		= mav.getString("chgerTelno");					// 변경전화번호
-				String chgerEmail 		= mav.getString("chgerEmail");					// 변경이메일
-				String chgerZipcode 	= mav.getString("chgerZipcode");				// 변경우편번호
-				String chgerBaseAddr 	= mav.getString("chgerBaseAddr");				// 변경기본주소
-				String chgerDtlAddr 	= mav.getString("chgerDtlAddr");				// 변경상세주소
-				String chgerRtnMemo		= mav.getString("chgerRtnMemo");				// 반품메모
-				
-				orderChange.setChgerNm(chgerNm);
-				orderChange.setChgerPhnno(chgerPhnno);
-				orderChange.setChgerTelno(chgerTelno);
-				orderChange.setChgerEmail(chgerEmail);
-				orderChange.setChgerRtnMemo(chgerRtnMemo);
-				orderChange.setChgerZipcode(chgerZipcode);
-				orderChange.setChgerBaseAddr(chgerBaseAddr);
-				orderChange.setChgerDtlAddr(chgerDtlAddr);
-				
-				orderChangeDao.createOrderChange(orderChange);
-				
-				// 5.3 주문상세단위 취소정보
-				for (int j=0 ; j<cancelOrderDetailList.size() ; j++) {
-					Order vo = cancelOrderRefundList.get(j);
-					vo.setRegNo(userNo);
-					vo.setUpdNo(userNo);
-					vo.setOrdDtlStat(TscConstants.OrderChangeStat.RETURN.value()); 					// 반품신청
-					
-					// 5.3.0 DEVL_FEE_CD 단위로 주문상세 정보 처리
-					if (obj.getDelvFeeCd().equals(vo.getDelvFeeCd())) {
-						
-						// 5.3.1 주문변경상세정보 이력등록
-						orderChangeDao.createOrderDetailHstCnclRtn(vo);
-						
-						// * 주문상세단위가 아닌 주문상세단품단위로 데이타가 처리되고 있었음 주문상세단위로 수정
-						// 5.3 주문변경상세정보 등록
-						OrderChange changeDetailPo = new OrderChange();
-						changeDetailPo.setOrdChgSq(orderChange.getOrdChgSq());
-						changeDetailPo.setOrdDtlNo(vo.getOrdDtlNo());
-						changeDetailPo.setChgQty(vo.getOrdCanChgQty());
-						changeDetailPo.setChgStat(TscConstants.OrderChangeStat.RETURN.value()); 	// 반품신청
-						changeDetailPo.setRegNo(userNo);
-						changeDetailPo.setUpdNo(userNo);
-						
-						orderChangeDao.createOrderChangeDetail(changeDetailPo);
+					// 4.5 주문상세단위 데이타 저장(주문상세 단위)
+					if (!temp) {
+						cancelOrderDetailList.add(cancelOrderRefundPo);
 					}
 				}
-				
-				// 5.4 환불결제정보 등록 (업체별 & 배송정책별) 단위
-				// 취소, 반품 사유에 따른 추가배송비, 반품배송비를 환불금액에서 추가, 제외 할 수 있다.
-				int spanRealCnclRtnAmt 		= obj.getCnclRtnAmt();		// 취소금액합계
-				int sumDeliveryFee 			= obj.getDelvFee();			// 배송비합계
-				int spanTotDeliveryFee 		= obj.getAddDelvFee();		// 추가배송비합계
-				int spanTotRtnDelvFee 		= obj.getRtnDelvFee();		// 반품배송비합계
-				int spanRefundAmt			= 0;
-				
-				// 고객사유 : 환불금액계산 = (취소금액 + 배송비) - 추가배송비
-				if ("true".equals(isCustomer)) {
-					spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee) - spanTotDeliveryFee - spanTotRtnDelvFee;
-				}
-				// 회사사유 : 환불금액계산 = (취소금액 + 배송비)
-				else {
-					spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee);
-				}
-				
-				// 5.4 환불금액 등록
-				Order refundOrder = new Order();
-				refundOrder.setOrdNo(ordNo);
-				refundOrder.setPaySq(0);
-				refundOrder.setOrdChgSq(orderChange.getOrdChgSq());
-				refundOrder.setRegNo(userNo);
-				
-				// 2021.01.25 TB_REFUND 정보 등록을 위해서 분리 작업
-				refundOrder.setRefundAmt(spanRefundAmt);
-				refundOrder.setRfCpn1Amt(obj.getCpn1DcAmt());
-				refundOrder.setRfTmtb1Amt(obj.getTmtb1DcAmt());
-				refundOrder.setRfTmtb2Amt(obj.getTmtb2DcAmt());
-				refundOrder.setRfGoodsCpnAmt(obj.getGoodsCpnDcAmt());
-				refundOrder.setRfCartCpnAmt(obj.getCartCpnDcAmt());
-				refundOrder.setRfPntAmt(obj.getPntAmt());
-				refundOrder.setRfPrePntAmt(obj.getPrePntDcAmt());
-				refundOrder.setRfGfcdUseAmt(obj.getGfcdUseAmt());
-				
-				refundOrder.setRaNo(mav.get("accountNo").toString());
-				refundOrder.setRaNm(mav.get("accountNm").toString());
-				refundOrder.setRaBank(mav.get("bankCd").toString());
-				
-				orderChangeDao.createRefund(refundOrder);
 			}
-		}
-		
-		return mav;
-	}
-	
-	/**
-	 * 반품신청철회 (admin)
-	 * @param Order
-	 * @return Order
-	 * @author jsh77b
-	 * @since 2021. 01. 19
-	 */
-	@Transactional("shopTxnManager")
-	public GagaMap rtnReqCancel(GagaMap mav, int userNo) {
-		
-		Order order = new Order();
-		order.setOrdNo(mav.getInt("ordNo"));
-		order.setOrdChgSq(mav.getInt("ordChgSq"));
-		order.setChgStat(TscConstants.OrderChangeStat.RETURN_CANCEL.value());
-		order.setRegNo(userNo);
-		order.setUpdNo(userNo);
-		order.setDelYn("Y");
-		
-		// 1. 주문변경정보 (TB_ORDER_CHANGE_DTL(수정))
-		orderChangeDao.updateOrderChangeDtlCancel(order);
-		
-		// 2. 주문정보 이력 등록 (TB_ORDER_DETAIL_HST(등록))
-		orderChangeDao.createOrderDtlHstCancel(order);
-		
-		// TODO
-		// 3. PG 실행 (취소시 추가결제금액 취소처리)
-		
-		return mav;
-	}
-	
-	/**
-	 * 반품완료
-	 * @param Order
-	 * @return Order
-	 * @author jsh77b
-	 * @since 2021. 01. 19
-	 */
-	public GagaMap rtnComplete(List<Order> cnclRtnList) {
-		GagaMap mav = new GagaMap();
-		
-		
-		return mav;
-	}
-	
-	/**
-	 * 교환신청
-	 * 
-	 * @param Order
-	 * @return Order
-	 * @author jsh77b
-	 * @since 2021. 01. 19
-	 */
-	@Transactional("shopTxnManager")
-	public GagaMap exchReq(OrderChange excReq) {
-		GagaMap result = new GagaMap();
-		result.set("status", GagaResponseStatus.FAIL.getCode());
-		
-		// 교환 기본 정보
-		int addPayCost = excReq.getAddPayCost();			// 추가배송비
-		String wdGb = excReq.getWdGb();						// 회수구분
-		String wdInvoiceNo = excReq.getWdInvoiceNo();		// 회수송장번호
-		Integer regNo = excReq.getRegNo();					// 등록자번호
-		Integer updNo = excReq.getUpdNo();					// 수정자번호
-		
-		// 교환신청 목록 설정
-		Collection<Order> excReqList = excReq.getCancelReqList();
-
-		// 추가배송비 관련 상태값 설정
-		String orderChangeStat = TscConstants.OrderChangeStat.EXCHANGE.value();
-		String ordDtlStat = TscConstants.OrderDetailStat.REFUND_CONFIRM_WAIT.value();
-
-		if (addPayCost > 0) { // 프론트 결제 여부 체크 필요
-			orderChangeStat = TscConstants.OrderChangeStat.EXCHANGE_WAIT.value();
-			ordDtlStat = TscConstants.OrderDetailStat.PAYMENT_WAIT.value();
-		}
-		
-		// 1. 재고 체크 (세트아이템 포함)
-
-
-		// 2. TB_DELIVERY_ADDR 등록
-		Order deliveryAddr = new Order();
-		deliveryAddr.setRecipNm(excReq.getRecipNm());
-		deliveryAddr.setRecipPhnno(excReq.getRecipPhnno());
-		deliveryAddr.setRecipTelno(excReq.getRecipTelno());
-		deliveryAddr.setRecipZipcode(excReq.getRecipZipcode());
-		deliveryAddr.setRecipBaseAddr(excReq.getRecipBaseAddr());
-		deliveryAddr.setRecipDtlAddr(excReq.getRecipDtlAddr());
-		deliveryAddr.setDelvMemo(excReq.getDelvMemo());
-		deliveryAddr.setRegNo(regNo);
-		deliveryAddr.setUpdNo(updNo);
-		
-		orderChangeDao.createDeliveryAddr(deliveryAddr);
-		
-		// 생성된 delvAddrSq 등록
-		int delvAddrSq = deliveryAddr.getDelvAddrSq();
-		
-		// 교환대상 정보 등록
-		int preOrdDtlNo = 0;
-		String preDelvFeeCd = "";
-		int ordChgSq = 0;
-		int exchangeOrdDtlNo = 0;
-		
-		for (Order order : excReqList) {
-			String delvFeeCd = order.getDelvFeeCd();
-			int chgQty = order.getChgQty();
-			String ordChgOpt = order.getOrdChgOpt();
-			int ordDtlNo = order.getOrdDtlNo();
-			
-			if (!preDelvFeeCd.equals(delvFeeCd)) {
-				// 3. TB_ORDER_CHANGE 등록
-				OrderChange orderChange = new OrderChange();
-				orderChange.setChgGb(TscConstants.OrderChangeGb.EXCHANGE.value());
-				orderChange.setChgReason(excReq.getChgReason());
-				orderChange.setChgMemo(excReq.getChgMemo());
-				orderChange.setWdGb(wdGb);
-				orderChange.setWdInvoiceNo(wdInvoiceNo);
-				orderChange.setChgerNm(excReq.getChgerNm());
-				orderChange.setChgerPhnno(excReq.getChgerPhnno());
-				orderChange.setChgerTelno(excReq.getChgerTelno());
-				orderChange.setChgerEmail(excReq.getChgerEmail());
-				orderChange.setChgerZipcode(excReq.getChgerZipcode());
-				orderChange.setChgerBaseAddr(excReq.getChgerBaseAddr());
-				orderChange.setChgerDtlAddr(excReq.getChgerDtlAddr());
-				orderChange.setChgerRtnMemo(excReq.getChgerRtnMemo());
-				orderChange.setAddPayCost(addPayCost);
-				orderChange.setAddPayAmt(excReq.getAddPayAmt());
-				orderChange.setRegNo(regNo);
-				orderChange.setUpdNo(updNo);
 
-				orderChangeDao.createOrderChange(orderChange);
-				
-				preDelvFeeCd = delvFeeCd;
-				
-				// 생성된 ordChgSq 설정
-				ordChgSq = orderChange.getOrdChgSq();
-				
-				log.info("############# ordChgSq >>> {} ##############", ordChgSq);
-
-				// 4. TB_DELIVERY_FEE 추가배송비 등록
-				int delvFee = 0;
-
-				if ("true".equals(excReq.getIsCustomer())) {
-					delvFee = "W".equals(wdGb) ? order.getExcDelvFee() : order.getRtnDelvFee();
-				}
-				
-				Order deliveryFee = new Order();
-				deliveryFee.setOrdNo(excReq.getOrdNo());
-				deliveryFee.setDelvFeeGb(TscConstants.DeliveryFeeGb.EXCHANGE_DELIVERY_FEE.value());
-				deliveryFee.setDelvFeeCd(delvFeeCd);
-				deliveryFee.setDelvFee(delvFee);
-				deliveryFee.setRealDelvAmt(delvFee);
-				deliveryFee.setOrdChgSq(ordChgSq);
-				deliveryFee.setSupplyCompCd(order.getSupplyCompCd());
-				deliveryFee.setRegNo(regNo);
-				deliveryFee.setUpdNo(updNo);
-				
-				orderChangeDao.createDeliveryFee(deliveryFee);
-				
-				// TODO
-				// 추가배송비 결제 여부 확인 후 TB_PAYMENT 생성
-			}
-			
-			if (preOrdDtlNo != ordDtlNo) {
-				// 5. TB_ORDER_DETAIL 등록
-				Order ordDtl = new Order();
-				ordDtl.setOrdDtlNo(ordDtlNo);
-				ordDtl.setOrdDtlStat(ordDtlStat);
-				ordDtl.setOptCd2(ordChgOpt);
-				ordDtl.setChgQty(chgQty);
-				ordDtl.setDelvAddrSq(delvAddrSq);
-				ordDtl.setRegNo(regNo);
-				ordDtl.setUpdNo(updNo);
-
-				orderChangeDao.createOrderDetailForExchange(ordDtl);
-
-				// 생성된 ordDtlNo 설정
-				exchangeOrdDtlNo = ordDtl.getExchangeOrdDtlNo();
-
-				log.info("############# exchangeOrdDtlNo >>> {} ##############", exchangeOrdDtlNo);
-
-				// 6. TB_ORDER_DETAIL_HST 등록
-				orderChangeDao.createOrderDetailHstForExchange(ordDtl);
-
-				// 7. TB_ORDER_CHANGE_DETAIL 등록
-				OrderChange orderChangeDetail = new OrderChange();
-				orderChangeDetail.setOrdChgSq(ordChgSq);
-				orderChangeDetail.setOrdDtlNo(ordDtlNo);
-				orderChangeDetail.setChgQty(chgQty);
-				orderChangeDetail.setChgStat(orderChangeStat);
-				orderChangeDetail.setChgOrdDtlNo(exchangeOrdDtlNo);
-				orderChangeDetail.setRegNo(regNo);
-				orderChangeDetail.setUpdNo(updNo);
-				
-				orderChangeDao.createOrderChangeDetail(orderChangeDetail);
-
-				preOrdDtlNo = ordDtlNo;
-			}
+			// 2021.01.21 DELV_FEE 배송번호 단위로 TB_ORDER_CHANGE 생성
+			// 4. 주문변경정보, 주문정보, 환불정보 (업체코드 & 배송정책코드)
+			for (int i=0 ; i<cancelDelvRefundList.size() ; i++) {
+
+				Order obj = cancelDelvRefundList.get(i);
+
+				// 취소금액이 있을때 처리
+				if (obj.getCnclRtnAmt() > 0) {
+
+					// 5.1 주문변경 기본정보 등록 
+					OrderChange orderChange = new OrderChange();
+					orderChange.setOrdNo(ordNo);
+					orderChange.setChgGb(chgGb);
+					orderChange.setChgReason(chgReason);
+					orderChange.setChgMemo(chgMemo);
+					orderChange.setAddPayCost(0);
+					orderChange.setAddPayAmt(0);
+					orderChange.setWdGb(wdGb);
+					orderChange.setWdInvoiceNo(wdInvoiceNo);
+					orderChange.setRegNo(userNo);
+					orderChange.setUpdNo(userNo);
+
+					// 5.2 주문변경 추가정보 등록
+					String chgerNm 			= mav.getString("chgerNm");						// 변경자
+					String chgerPhnno 		= mav.getString("chgerPhnno");					// 변경핸드폰번호
+					String chgerTelno 		= mav.getString("chgerTelno");					// 변경전화번호
+					String chgerEmail 		= mav.getString("chgerEmail");					// 변경이메일
+					String chgerZipcode 	= mav.getString("chgerZipcode");				// 변경우편번호
+					String chgerBaseAddr 	= mav.getString("chgerBaseAddr");				// 변경기본주소
+					String chgerDtlAddr 	= mav.getString("chgerDtlAddr");				// 변경상세주소
+					String chgerRtnMemo		= mav.getString("chgerRtnMemo");				// 반품메모
+
+					orderChange.setChgerNm(chgerNm);
+					orderChange.setChgerPhnno(chgerPhnno);
+					orderChange.setChgerTelno(chgerTelno);
+					orderChange.setChgerEmail(chgerEmail);
+					orderChange.setChgerRtnMemo(chgerRtnMemo);
+					orderChange.setChgerZipcode(chgerZipcode);
+					orderChange.setChgerBaseAddr(chgerBaseAddr);
+					orderChange.setChgerDtlAddr(chgerDtlAddr);
 
-			// 8. TB_ORDER_DETAIL_ITEM 등록
-			Order ordDtlItem = new Order();
-			ordDtlItem.setOrdDtlItemSq(order.getOrdDtlItemSq());
-			ordDtlItem.setOrdDtlNo(exchangeOrdDtlNo);
-			ordDtlItem.setOrdDtlStat(ordDtlStat);
-			ordDtlItem.setOrdChgOpt(ordChgOpt);
-			ordDtlItem.setRegNo(regNo);
-			ordDtlItem.setUpdNo(updNo);
+					orderChangeDao.createOrderChange(orderChange);
 
-			orderChangeDao.createOrderDetailItemForExchange(ordDtlItem);
+					// 5.3 주문상세단위 취소정보
+					for (int j=0 ; j<cancelOrderDetailList.size() ; j++) {
+						Order vo = cancelOrderRefundList.get(j);
+						vo.setRegNo(userNo);
+						vo.setUpdNo(userNo);
+						vo.setOrdDtlStat(TscConstants.OrderChangeStat.RETURN.value()); 					// 반품신청
 
-			// 9. TB_ORDER_DETAIL_ITEM_HST 등록
-			orderChangeDao.createOrderDetailItemHstForExchange(ordDtlItem);
-		}
+						// 5.3.0 DEVL_FEE_CD 단위로 주문상세 정보 처리
+						if (obj.getDelvFeeCd().equals(vo.getDelvFeeCd())) {
 
-		// 10. TB_SELL_QTY 등록
-		OrderChange sellQty = new OrderChange();
-		sellQty.setSellGb(TscConstants.SellGb.EXCHANGE.value());
-		sellQty.setRegNo(regNo);
-		sellQty.setOrdChgSq(ordChgSq);
-		
-		orderChangeDao.createSellQtyForExchange(sellQty);
-		
-		result.set("status", GagaResponseStatus.SUCCESS.getCode());
-		
-		return result;
-	}
+							// 5.3.1 주문변경상세정보 이력등록
+							orderChangeDao.createOrderDetailHstCnclRtn(vo);
 
-	/**
-	 * 교환 추가배송비 조회
-	 * 
-	 * @param Collection<Order>
-	 * @return Collection<DeliveryFee>
-	 * @author card007
-	 * @since 2021. 01. 26
-	 */
-	public GagaMap getAddDeliveryFeeListForExchange(OrderChange orderChange) {
-		GagaMap result = new GagaMap();
-		Collection<DeliveryFee> deliveryFeeList = new ArrayList<>();
-		List<String> delvFeeCdList = new ArrayList<>();
-		int totalDelvFee = 0;
-
-		String wdGb = orderChange.getWdGb();
-		Collection<Order> excReqList = orderChange.getCancelReqList();
-		
-		for (Order order : excReqList) {
-			String delvFeeCd = order.getDelvFeeCd();
-			
-			if (!delvFeeCdList.contains(delvFeeCd)) {
-				int delvFee = 0;
-				
-				if ("true".equals(orderChange.getIsCustomer())) {
-					delvFee = "W".equals(wdGb) ? order.getExcDelvFee() : order.getRtnDelvFee();
+							// * 주문상세단위가 아닌 주문상세단품단위로 데이타가 처리되고 있었음 주문상세단위로 수정
+							// 5.3 주문변경상세정보 등록
+							OrderChange changeDetailPo = new OrderChange();
+							changeDetailPo.setOrdChgSq(orderChange.getOrdChgSq());
+							changeDetailPo.setOrdDtlNo(vo.getOrdDtlNo());
+							changeDetailPo.setChgQty(vo.getOrdCanChgQty());
+							changeDetailPo.setChgStat(TscConstants.OrderChangeStat.RETURN.value()); 	// 반품신청
+							changeDetailPo.setRegNo(userNo);
+							changeDetailPo.setUpdNo(userNo);
+
+							orderChangeDao.createOrderChangeDetail(changeDetailPo);
+						}
+					}
+
+					// 5.4 환불결제정보 등록 (업체별 & 배송정책별) 단위
+					// 취소, 반품 사유에 따른 추가배송비, 반품배송비를 환불금액에서 추가, 제외 할 수 있다.
+					int spanRealCnclRtnAmt 		= obj.getCnclRtnAmt();		// 취소금액합계
+					int sumDeliveryFee 			= obj.getDelvFee();			// 배송비합계
+					int spanTotDeliveryFee 		= obj.getAddDelvFee();		// 추가배송비합계
+					int spanTotRtnDelvFee 		= obj.getRtnDelvFee();		// 반품배송비합계
+					int spanRefundAmt			= 0;
+
+					// 고객사유 : 환불금액계산 = (취소금액 + 배송비) - 추가배송비
+					if ("true".equals(isCustomer)) {
+						spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee) - spanTotDeliveryFee - spanTotRtnDelvFee;
+					}
+					// 회사사유 : 환불금액계산 = (취소금액 + 배송비)
+					else {
+						spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee);
+					}
+
+					// 5.4 환불금액 등록
+					Order refundOrder = new Order();
+					refundOrder.setOrdNo(ordNo);
+					refundOrder.setPaySq(0);
+					refundOrder.setOrdChgSq(orderChange.getOrdChgSq());
+					refundOrder.setRegNo(userNo);
+
+					// 2021.01.25 TB_REFUND 정보 등록을 위해서 분리 작업
+					refundOrder.setRefundAmt(spanRefundAmt);
+					refundOrder.setRfCpn1Amt(obj.getCpn1DcAmt());
+					refundOrder.setRfTmtb1Amt(obj.getTmtb1DcAmt());
+					refundOrder.setRfTmtb2Amt(obj.getTmtb2DcAmt());
+					refundOrder.setRfGoodsCpnAmt(obj.getGoodsCpnDcAmt());
+					refundOrder.setRfCartCpnAmt(obj.getCartCpnDcAmt());
+					refundOrder.setRfPntAmt(obj.getPntAmt());
+					refundOrder.setRfPrePntAmt(obj.getPrePntDcAmt());
+					refundOrder.setRfGfcdUseAmt(obj.getGfcdUseAmt());
+
+					refundOrder.setRaNo(mav.get("accountNo").toString());
+					refundOrder.setRaNm(mav.get("accountNm").toString());
+					refundOrder.setRaBank(mav.get("bankCd").toString());
+
+					orderChangeDao.createRefund(refundOrder);
 				}
-				
-				DeliveryFee deliveryFee = new DeliveryFee();
-				deliveryFee.setOrdNo(orderChange.getOrdNo());
-				deliveryFee.setDelvFeeGb(TscConstants.DeliveryFeeGb.EXCHANGE_DELIVERY_FEE.value());
-				deliveryFee.setDelvFeeCd(delvFeeCd);
-				deliveryFee.setDelvFee(delvFee);
-				deliveryFee.setRealDelvAmt(delvFee);
-				deliveryFee.setOrdChgSq(orderChange.getOrdChgSq());
-				deliveryFee.setSupplyCompCd(order.getSupplyCompCd());
-				
-				deliveryFeeList.add(deliveryFee);
-				totalDelvFee += delvFee;
 			}
-		}
-		
-		result.set("totalDelvFee", totalDelvFee);
-		result.set("deliveryFeeList", deliveryFeeList);
-		
-		return result;
-	}
-
-	/**
-	 * 교환철회
-	 * 
-	 * @param OrderChange
-	 * @return GagaMap
-	 * @author card007
-	 * @since 2021. 02. 01
-	 */
-	@Transactional("shopTxnManager")
-	public GagaMap exchangeCancel(OrderChange orderChange) {
-		GagaMap result = new GagaMap();
 
-		int ordNo = orderChange.getOrdNo();					// 주문번호
-		int ordChgSq = orderChange.getOrdChgSq();			// 주문변경번호
-		int regNo = orderChange.getRegNo();					// 등록자번호
-		int updNo = orderChange.getUpdNo();					// 수정자번호
+			return mav;
+		}
 
-		// 추가배송비 조회
-		Order payment = orderChangeDao.getAddDeliveryFeePayment(orderChange);
+		/**
+		 * 반품신청철회 (admin)
+		 * @param Order
+		 * @return Order
+		 * @author jsh77b
+		 * @since 2021. 01. 19
+		 */
+		@Transactional("shopTxnManager")
+		public GagaMap rtnReqCancel(GagaMap mav, int userNo) {
+
+			Order order = new Order();
+			order.setOrdNo(mav.getInt("ordNo"));
+			order.setOrdChgSq(mav.getInt("ordChgSq"));
+			order.setChgStat(TscConstants.OrderChangeStat.RETURN_CANCEL.value());
+			order.setRegNo(userNo);
+			order.setUpdNo(userNo);
+			order.setDelYn("Y");
+
+			// 1. 주문변경정보 (TB_ORDER_CHANGE_DTL(수정))
+			orderChangeDao.updateOrderChangeDtlCancel(order);
+
+			// 2. 주문정보 이력 등록 (TB_ORDER_DETAIL_HST(등록))
+			orderChangeDao.createOrderDtlHstCancel(order);
 
-		// 추가배송비 결제취소 처리
-		if (payment != null && payment.getPayAmt() > 0) {
-			payment.setOrdNo(ordNo);
-			payment.setOrdChgSq(ordChgSq);
-			payment.setPayAmt(payment.getPayAmt() * -1);
-			payment.setPayStat(TscConstants.PaymentStat.PAYMENT_WAIT.value());
-			payment.setPayGb(TscConstants.PaymentGb.DELIVERY.value());
-			payment.setRegNo(regNo);
-			payment.setUpdNo(updNo);
-			orderChangeDao.createAddDeliveryFeeCancelPayment(payment);
-			
 			// TODO
-			// PG취소처리
+			// 3. PG 실행 (취소시 추가결제금액 취소처리)
+
+			return mav;
 		}
 
-		// 교환철회 처리
-		Order exchangeCancel = new Order();
-		exchangeCancel.setOrdNo(ordNo);
-		exchangeCancel.setOrdChgSq(ordChgSq);
-		exchangeCancel.setOrdDtlStat(TscConstants.OrderDetailStat.EXCHANGE_CANCEL.value());
-		exchangeCancel.setChgStat(TscConstants.OrderChangeStat.EXCHANGE_CANCEL.value());
-		exchangeCancel.setDelYn("Y");
-		exchangeCancel.setRegNo(regNo);
-		exchangeCancel.setUpdNo(updNo);
+		/**
+		 * 반품완료
+		 * @param Order
+		 * @return Order
+		 * @author jsh77b
+		 * @since 2021. 01. 19
+		 */
+		public GagaMap rtnComplete(List<Order> cnclRtnList) {
+			GagaMap mav = new GagaMap();
 
-		// TB_ORDER_DETAIL 상태값 변경
-		orderChangeDao.updateOrderDetailForExchangeCancel(exchangeCancel);
 
-		// TB_ORDER_DETAIL_HST 생성
-		orderChangeDao.createOrderDtlHstCancel(exchangeCancel);
+			return mav;
+		}
 
-		// TB_ORDER_DETAIL_ITEM 상태값 변경
-		orderChangeDao.updateOrderDetailItemForExchangeCancel(exchangeCancel);
+		/**
+		 * 교환신청
+		 *
+		 * @param Order
+		 * @return Order
+		 * @author jsh77b
+		 * @since 2021. 01. 19
+		 */
+		@Transactional("shopTxnManager")
+		public GagaMap exchReq(OrderChange excReq) {
+			GagaMap result = new GagaMap();
+			result.set("status", GagaResponseStatus.FAIL.getCode());
+
+			// 교환 기본 정보
+			int addPayCost = excReq.getAddPayCost();			// 추가배송비
+			String wdGb = excReq.getWdGb();						// 회수구분
+			String wdInvoiceNo = excReq.getWdInvoiceNo();		// 회수송장번호
+			Integer regNo = excReq.getRegNo();					// 등록자번호
+			Integer updNo = excReq.getUpdNo();					// 수정자번호
+
+			// 교환신청 목록 설정
+			Collection<Order> excReqList = excReq.getCancelReqList();
+
+			// 추가배송비 관련 상태값 설정
+			String orderChangeStat = TscConstants.OrderChangeStat.EXCHANGE.value();
+			String ordDtlStat = TscConstants.OrderDetailStat.REFUND_CONFIRM_WAIT.value();
+
+			if (addPayCost > 0) { // 프론트 결제 여부 체크 필요
+				orderChangeStat = TscConstants.OrderChangeStat.EXCHANGE_WAIT.value();
+				ordDtlStat = TscConstants.OrderDetailStat.PAYMENT_WAIT.value();
+			}
 
-		// TB_ORDER_DETAIL_ITEM_HST 생성
-		orderChangeDao.createOrderDetailItemHstForExchangeCancel(exchangeCancel);
+			// 1. 재고 체크 (세트아이템 포함)
+
+
+			// 2. TB_DELIVERY_ADDR 등록
+			Order deliveryAddr = new Order();
+			deliveryAddr.setRecipNm(excReq.getRecipNm());
+			deliveryAddr.setRecipPhnno(excReq.getRecipPhnno());
+			deliveryAddr.setRecipTelno(excReq.getRecipTelno());
+			deliveryAddr.setRecipZipcode(excReq.getRecipZipcode());
+			deliveryAddr.setRecipBaseAddr(excReq.getRecipBaseAddr());
+			deliveryAddr.setRecipDtlAddr(excReq.getRecipDtlAddr());
+			deliveryAddr.setDelvMemo(excReq.getDelvMemo());
+			deliveryAddr.setRegNo(regNo);
+			deliveryAddr.setUpdNo(updNo);
+
+			orderChangeDao.createDeliveryAddr(deliveryAddr);
+
+			// 생성된 delvAddrSq 등록
+			int delvAddrSq = deliveryAddr.getDelvAddrSq();
+
+			// 교환대상 정보 등록
+			int preOrdDtlNo = 0;
+			String preDelvFeeCd = "";
+			int ordChgSq = 0;
+			int exchangeOrdDtlNo = 0;
+
+			for (Order order : excReqList) {
+				String delvFeeCd = order.getDelvFeeCd();
+				int chgQty = order.getChgQty();
+				String ordChgOpt = order.getOrdChgOpt();
+				int ordDtlNo = order.getOrdDtlNo();
+
+				if (!preDelvFeeCd.equals(delvFeeCd)) {
+					// 3. TB_ORDER_CHANGE 등록
+					OrderChange orderChange = new OrderChange();
+					orderChange.setChgGb(TscConstants.OrderChangeGb.EXCHANGE.value());
+					orderChange.setChgReason(excReq.getChgReason());
+					orderChange.setChgMemo(excReq.getChgMemo());
+					orderChange.setWdGb(wdGb);
+					orderChange.setWdInvoiceNo(wdInvoiceNo);
+					orderChange.setChgerNm(excReq.getChgerNm());
+					orderChange.setChgerPhnno(excReq.getChgerPhnno());
+					orderChange.setChgerTelno(excReq.getChgerTelno());
+					orderChange.setChgerEmail(excReq.getChgerEmail());
+					orderChange.setChgerZipcode(excReq.getChgerZipcode());
+					orderChange.setChgerBaseAddr(excReq.getChgerBaseAddr());
+					orderChange.setChgerDtlAddr(excReq.getChgerDtlAddr());
+					orderChange.setChgerRtnMemo(excReq.getChgerRtnMemo());
+					orderChange.setAddPayCost(addPayCost);
+					orderChange.setAddPayAmt(excReq.getAddPayAmt());
+					orderChange.setRegNo(regNo);
+					orderChange.setUpdNo(updNo);
 
-		// TB_ORDER_CHANGE_DETAIL 상태값 변경 및 DEL_YN Y로 업데이트
-		orderChangeDao.updateOrderChangeDtlCancel(exchangeCancel);
+					orderChangeDao.createOrderChange(orderChange);
 
-		// 결과값 처리
-		result.set("status", GagaResponseStatus.SUCCESS.getCode());
+					preDelvFeeCd = delvFeeCd;
 
-		return result;
-	}
+					// 생성된 ordChgSq 설정
+					ordChgSq = orderChange.getOrdChgSq();
 
-	/**
-	 * 교환회수
-	 * @param Order
-	 * @return Order
-	 * @author jsh77b
-	 * @since 2021. 01. 19
-	 */
-	public GagaMap exchRtn(List<Order> cnclRtnList) {
-		GagaMap mav = new GagaMap();
-		
-		
-		return mav;
-	}
-	
-	/**
-	 * 교환발송완료
-	 * @param Order
-	 * @return Order
-	 * @author jsh77b
-	 * @since 2021. 01. 19
-	 */
-	public GagaMap exchComplete(List<Order> cnclRtnList) {
-		GagaMap mav = new GagaMap();
-		
-		
-		return mav;
-	}
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	/**
-	 * 취소신청 (admin, npay, extmall) (사용안함)
-	 * @param Order
-	 * @return Order
-	 * @author jsh77b
-	 * @since 2021. 01. 19
-	 */
-	@SuppressWarnings("unchecked")
-	@Transactional("shopTxnManager")
-	public GagaMap cnclReq(GagaMap mav, int userNo) {
-		
-		// 1. 세션회원조회
-		//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 단위)
-				
-		// 3. 변경신청정보
-		int ordNo 			= Integer.parseInt(mav.getString("ordNo").toString());				// 주문번호
-		String chgReason 	= mav.getString("chgReason").toString();							// 변경사유
-		String chgMemo 		= mav.getString("chgMemo").toString();								// 변경메모
-		String allCanYn		= mav.getString("allCanYn").toString();								// 무통장입금전 전체취소 여부
-		String isCustomer	= mav.getString("isCustomer").toString();							// 귀책사유 (고객, 회사)
-		String chgGb		= TscConstants.OrderChangeGb.CANCEL.value(); 						// 취소요청
-		String reqGbn		= mav.get("reqGbn").toString();										// 신청구분
-		
-		// 4. 주문상세단품정보등록,변경 (단품단위)
-		List<Order> cancelOrderDetailList = new ArrayList<Order>();
-		
-		for (int i=0 ; i<cancelOrderRefundList.size() ; i++) {
-			Order cancelOrderRefundPo = cancelOrderRefundList.get(i);
-			cancelOrderRefundPo.setRegNo(userNo);
-			cancelOrderRefundPo.setUpdNo(userNo);
-
-			// 4.1 취소수량이 존재하면 주문상세단품정보 수정 및 주문상세단품이력정보 등록
-			if (cancelOrderRefundPo.getOrdCanChgQty() > 0) {				
-				// 4.4 주문변경 상세 단위로 데이타 등록 (ORD_DTL_NO)
-				Boolean temp = false;
-				if (cancelOrderDetailList.size() > 0) {
-					for (int j=0 ; j<cancelOrderDetailList.size() ; j++) {
-						if (cancelOrderRefundPo.getOrdDtlNo() == cancelOrderDetailList.get(j).getOrdDtlNo()) {
-							temp = true;
-						}
+					log.info("############# ordChgSq >>> {} ##############", ordChgSq);
+
+					// 4. TB_DELIVERY_FEE 추가배송비 등록
+					int delvFee = 0;
+
+					if ("true".equals(excReq.getIsCustomer())) {
+						delvFee = "W".equals(wdGb) ? order.getExcDelvFee() : order.getRtnDelvFee();
 					}
+
+					Order deliveryFee = new Order();
+					deliveryFee.setOrdNo(excReq.getOrdNo());
+					deliveryFee.setDelvFeeGb(TscConstants.DeliveryFeeGb.EXCHANGE_DELIVERY_FEE.value());
+					deliveryFee.setDelvFeeCd(delvFeeCd);
+					deliveryFee.setDelvFee(delvFee);
+					deliveryFee.setRealDelvAmt(delvFee);
+					deliveryFee.setOrdChgSq(ordChgSq);
+					deliveryFee.setSupplyCompCd(order.getSupplyCompCd());
+					deliveryFee.setRegNo(regNo);
+					deliveryFee.setUpdNo(updNo);
+
+					orderChangeDao.createDeliveryFee(deliveryFee);
+
+					// TODO
+					// 추가배송비 결제 여부 확인 후 TB_PAYMENT 생성
 				}
-				
-				// 4.5 주문상세단위 데이타 저장(주문상세 단위)
-				if (!temp) {
-					cancelOrderDetailList.add(cancelOrderRefundPo);
+
+				if (preOrdDtlNo != ordDtlNo) {
+					// 5. TB_ORDER_DETAIL 등록
+					Order ordDtl = new Order();
+					ordDtl.setOrdDtlNo(ordDtlNo);
+					ordDtl.setOrdDtlStat(ordDtlStat);
+					ordDtl.setOptCd2(ordChgOpt);
+					ordDtl.setChgQty(chgQty);
+					ordDtl.setDelvAddrSq(delvAddrSq);
+					ordDtl.setRegNo(regNo);
+					ordDtl.setUpdNo(updNo);
+
+					orderChangeDao.createOrderDetailForExchange(ordDtl);
+
+					// 생성된 ordDtlNo 설정
+					exchangeOrdDtlNo = ordDtl.getExchangeOrdDtlNo();
+
+					log.info("############# exchangeOrdDtlNo >>> {} ##############", exchangeOrdDtlNo);
+
+					// 6. TB_ORDER_DETAIL_HST 등록
+					orderChangeDao.createOrderDetailHstForExchange(ordDtl);
+
+					// 7. TB_ORDER_CHANGE_DETAIL 등록
+					OrderChange orderChangeDetail = new OrderChange();
+					orderChangeDetail.setOrdChgSq(ordChgSq);
+					orderChangeDetail.setOrdDtlNo(ordDtlNo);
+					orderChangeDetail.setChgQty(chgQty);
+					orderChangeDetail.setChgStat(orderChangeStat);
+					orderChangeDetail.setChgOrdDtlNo(exchangeOrdDtlNo);
+					orderChangeDetail.setRegNo(regNo);
+					orderChangeDetail.setUpdNo(updNo);
+
+					orderChangeDao.createOrderChangeDetail(orderChangeDetail);
+
+					preOrdDtlNo = ordDtlNo;
 				}
+
+				// 8. TB_ORDER_DETAIL_ITEM 등록
+				Order ordDtlItem = new Order();
+				ordDtlItem.setOrdDtlItemSq(order.getOrdDtlItemSq());
+				ordDtlItem.setOrdDtlNo(exchangeOrdDtlNo);
+				ordDtlItem.setOrdDtlStat(ordDtlStat);
+				ordDtlItem.setOrdChgOpt(ordChgOpt);
+				ordDtlItem.setRegNo(regNo);
+				ordDtlItem.setUpdNo(updNo);
+
+				orderChangeDao.createOrderDetailItemForExchange(ordDtlItem);
+
+				// 9. TB_ORDER_DETAIL_ITEM_HST 등록
+				orderChangeDao.createOrderDetailItemHstForExchange(ordDtlItem);
 			}
+
+			// 10. TB_SELL_QTY 등록
+			OrderChange sellQty = new OrderChange();
+			sellQty.setSellGb(TscConstants.SellGb.EXCHANGE.value());
+			sellQty.setRegNo(regNo);
+			sellQty.setOrdChgSq(ordChgSq);
+
+			orderChangeDao.createSellQtyForExchange(sellQty);
+
+			result.set("status", GagaResponseStatus.SUCCESS.getCode());
+
+			return result;
 		}
-		
-		// 2021.01.21 DELV_FEE 배송번호 단위로 TB_ORDER_CHANGE 생성
-		// 4. 주문변경정보, 주문정보, 환불정보 (업체코드 & 배송정책코드)
-		for (int i=0 ; i<cancelDelvRefundList.size() ; i++) {
-			
-			Order obj = cancelDelvRefundList.get(i);
-			
-			// 취소금액이 있을때 처리
-			if (obj.getCnclRtnAmt() > 0) {
-			
-				// 5.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);
-				
-				// 5.2 주문변경 추가정보 등록
-				String chgerNm 			= mav.getString("chgerNm").toString();		// 변경자
-				String chgerPhnno 		= mav.getString("chgerPhnno").toString();	// 변경핸드폰번호
-				String chgerTelno 		= mav.getString("chgerTelno").toString();	// 변경전화번호
-				String chgerEmail 		= mav.getString("chgerEmail").toString();	// 변경이메일
-				
-				orderChange.setChgerNm(chgerNm);
-				orderChange.setChgerPhnno(chgerPhnno);
-				orderChange.setChgerTelno(chgerTelno);
-				orderChange.setChgerEmail(chgerEmail);
-				orderChange.setChgerRtnMemo("");
-				
-				orderChangeDao.createOrderChange(orderChange);
-				
-				// 5.3 주문상세단위 취소정보
-				for (int j=0 ; j<cancelOrderDetailList.size() ; j++) {
-					Order vo = cancelOrderRefundList.get(j);
-					vo.setRegNo(userNo);
-					vo.setUpdNo(userNo);
-					vo.setOrdDtlStat(TscConstants.OrderChangeStat.CANCEL.value()); 					// 취소신청
-					
-					// 5.3.0 DEVL_FEE_CD 단위로 주문상세 정보 처리
-					if (obj.getDelvFeeCd().equals(vo.getDelvFeeCd())) {
-						
-						// 5.3.1 주문변경상세정보 이력등록
-						orderChangeDao.createOrderDetailHstCnclRtn(vo);
-						
-						// * 주문상세단위가 아닌 주문상세단품단위로 데이타가 처리되고 있었음 주문상세단위로 수정
-						// 5.3 주문변경상세정보 등록
-						OrderChange changeDetailPo = new OrderChange();
-						changeDetailPo.setOrdChgSq(orderChange.getOrdChgSq());
-						changeDetailPo.setOrdDtlNo(vo.getOrdDtlNo());
-						changeDetailPo.setChgQty(vo.getOrdCanChgQty());
-						changeDetailPo.setChgStat(TscConstants.OrderChangeStat.CANCEL.value()); 	// 취소신청
-						changeDetailPo.setRegNo(userNo);
-						changeDetailPo.setUpdNo(userNo);
-						
-						orderChangeDao.createOrderChangeDetail(changeDetailPo);
+
+		/**
+		 * 교환 추가배송비 조회
+		 *
+		 * @param Collection<Order>
+		 * @return Collection<DeliveryFee>
+		 * @author card007
+		 * @since 2021. 01. 26
+		 */
+		public GagaMap getAddDeliveryFeeListForExchange(OrderChange orderChange) {
+			GagaMap result = new GagaMap();
+			Collection<DeliveryFee> deliveryFeeList = new ArrayList<>();
+			List<String> delvFeeCdList = new ArrayList<>();
+			int totalDelvFee = 0;
+
+			String wdGb = orderChange.getWdGb();
+			Collection<Order> excReqList = orderChange.getCancelReqList();
+
+			for (Order order : excReqList) {
+				String delvFeeCd = order.getDelvFeeCd();
+
+				if (!delvFeeCdList.contains(delvFeeCd)) {
+					int delvFee = 0;
+
+					if ("true".equals(orderChange.getIsCustomer())) {
+						delvFee = "W".equals(wdGb) ? order.getExcDelvFee() : order.getRtnDelvFee();
 					}
+
+					DeliveryFee deliveryFee = new DeliveryFee();
+					deliveryFee.setOrdNo(orderChange.getOrdNo());
+					deliveryFee.setDelvFeeGb(TscConstants.DeliveryFeeGb.EXCHANGE_DELIVERY_FEE.value());
+					deliveryFee.setDelvFeeCd(delvFeeCd);
+					deliveryFee.setDelvFee(delvFee);
+					deliveryFee.setRealDelvAmt(delvFee);
+					deliveryFee.setOrdChgSq(orderChange.getOrdChgSq());
+					deliveryFee.setSupplyCompCd(order.getSupplyCompCd());
+
+					deliveryFeeList.add(deliveryFee);
+					totalDelvFee += delvFee;
 				}
-				// 5.4 환불결제정보 등록 (업체별 & 배송정책별) 단위
-				// 취소, 반품 사유에 따른 추가배송비, 반품배송비를 환불금액에서 추가, 제외 할 수 있다.
-				int spanRealCnclRtnAmt 		= obj.getCnclRtnAmt();		// 취소금액합계
-				int sumDeliveryFee 			= obj.getDelvFee();			// 배송비합계
-				int spanTotDeliveryFee 		= obj.getAddDelvFee();		// 추가배송비합계
-				int spanTotRtnDelvFee 		= obj.getRtnDelvFee();		// 반품배송비합계
-				int spanRefundAmt			= 0;
-
-				// 고객사유 : 환불금액계산 = (취소금액 + 배송비) - 추가배송비
-				if ("true".equals(isCustomer)) {
-					spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee) - spanTotDeliveryFee - spanTotRtnDelvFee;
-				}
-				// 회사사유 : 환불금액계산 = (취소금액 + 배송비)
-				else {
-					spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee);
-				}
-				
-				// 5.4 환불금액 등록
-				Order refundOrder = new Order();
-				refundOrder.setOrdNo(ordNo);
-				refundOrder.setPaySq(0);
-				refundOrder.setOrdChgSq(orderChange.getOrdChgSq());
-				refundOrder.setRegNo(userNo);
-				
-				// 2021.01.25 TB_REFUND 정보 등록을 위해서 분리 작업
-				refundOrder.setRefundAmt(spanRefundAmt);
-				refundOrder.setRfCpn1Amt(obj.getCpn1DcAmt());
-				refundOrder.setRfTmtb1Amt(obj.getTmtb1DcAmt());
-				refundOrder.setRfTmtb2Amt(obj.getTmtb2DcAmt());
-				refundOrder.setRfGoodsCpnAmt(obj.getGoodsCpnDcAmt());
-				refundOrder.setRfCartCpnAmt(obj.getCartCpnDcAmt());
-				refundOrder.setRfPntAmt(obj.getPntAmt());
-				refundOrder.setRfPrePntAmt(obj.getPrePntDcAmt());
-				refundOrder.setRfGfcdUseAmt(obj.getGfcdUseAmt());
-				
-				refundOrder.setRaNo(mav.get("accountNo").toString());
-				refundOrder.setRaNm(mav.get("accountNm").toString());
-				refundOrder.setRaBank(mav.get("bankCd").toString());
-				
-				orderChangeDao.createRefund(refundOrder);
 			}
+
+			result.set("totalDelvFee", totalDelvFee);
+			result.set("deliveryFeeList", deliveryFeeList);
+
+			return result;
 		}
-		
-		return mav;
-	}
-	
-	
-	/**
-	 * 취소신청승인 (admin) (사용안함)
-	 * @param Order
-	 * @return Order
-	 * @author jsh77b
-	 * @since 2021. 01. 19
-	 */
-	@Transactional("shopTxnManager")
-	public GagaMap cnclcnclComplete(GagaMap mav, int userNo) {
-		
-		// 1. 환불금액계산
-		
-		// 2. 사용포인트원복 (TB_CUST_POINT(수정), TB_CUST_POINT_HST(등록))
-		
-		// 3. 사용쿠폰원복 (TB_CUST_COUPON(수정))
-		
-		// 4. 상품권금액원복 (TB_CUST_GIFTCARD(수정), TB_CUST_GIFTCARD_HST(등록))
-		
-		// 5. 사은품취소 (TB_ORD_FREEGIFT(수정), TB_ORD_FREEGIFT(등록), TB_ORD_FREEGIFT_VAL(수정))
-		
-		// 6. 주문정보 수정 (TB_ORDER_DETAIL(수정), TB_ORDER_DETAIL_HST(등록), TB_ORDER_DETAIL_ITEM(수정), TB_ORDER_DETAIL_ITEM_HST(등록))
-		
-		// 7. 재고정보 (TB_SELL_QTY(등록))
-		
-		// 8. 주문변경정보 (TB_ORDER_CHANGE(수정), TB_ORDER_CHANGE_DTL(수정), TB_REFUND(수정))
-		
-		// PG 결제 금액 체크
-		// 9. PG 실행
-		
-		// 10. 결제정보 (TB_PAYMENT(등록))
-		
-		// 11. 추가배송비발생 (TB_PAYMENT(등록))
-		
-		return mav;
-	}
 
-	/**
-	 * 주문 환불계좌
-	 *
-	 * @param order - 주문정보
-	 * @return Order
-	 * @author jsh77b
-	 * @since 2021. 01. 04.
-	 */
-	public Collection<Order> getRefundAccount(Order order) {
-		return orderChangeDao.getRefundAccount(order);
-	}
+		/**
+		 * 교환철회
+		 *
+		 * @param OrderChange
+		 * @return GagaMap
+		 * @author card007
+		 * @since 2021. 02. 01
+		 */
+		@Transactional("shopTxnManager")
+		public GagaMap exchangeCancel(OrderChange orderChange) {
+			GagaMap result = new GagaMap();
+
+			int ordNo = orderChange.getOrdNo();					// 주문번호
+			int ordChgSq = orderChange.getOrdChgSq();			// 주문변경번호
+			int regNo = orderChange.getRegNo();					// 등록자번호
+			int updNo = orderChange.getUpdNo();					// 수정자번호
+
+			// 추가배송비 조회
+			Order payment = orderChangeDao.getAddDeliveryFeePayment(orderChange);
+
+			// 추가배송비 결제취소 처리
+			if (payment != null && payment.getPayAmt() > 0) {
+				payment.setOrdNo(ordNo);
+				payment.setOrdChgSq(ordChgSq);
+				payment.setPayAmt(payment.getPayAmt() * -1);
+				payment.setPayStat(TscConstants.PaymentStat.PAYMENT_WAIT.value());
+				payment.setPayGb(TscConstants.PaymentGb.DELIVERY.value());
+				payment.setRegNo(regNo);
+				payment.setUpdNo(updNo);
+				orderChangeDao.createAddDeliveryFeeCancelPayment(payment);
 
-	/**
-	 * 환불계좌 저장
-	 *
-	 * @param order - 주문정보
-	 * @return TsaOrder
-	 * @author jsh77b
-	 * @since 2021. 01. 05.
-	 */
-	public int saveRefundAccount(Order order) {
+				// TODO
+				// PG취소처리
+			}
 
-		// 환불계좌 유무 체크 후 등록
-		if (orderChangeDao.getRefundAccountCheck(order) < 1) {
-			orderChangeDao.saveRefundAccount(order);
-		}
+			// 교환철회 처리
+			Order exchangeCancel = new Order();
+			exchangeCancel.setOrdNo(ordNo);
+			exchangeCancel.setOrdChgSq(ordChgSq);
+			exchangeCancel.setOrdDtlStat(TscConstants.OrderDetailStat.EXCHANGE_CANCEL.value());
+			exchangeCancel.setChgStat(TscConstants.OrderChangeStat.EXCHANGE_CANCEL.value());
+			exchangeCancel.setDelYn("Y");
+			exchangeCancel.setRegNo(regNo);
+			exchangeCancel.setUpdNo(updNo);
 
-		return 1;
-	}
+			// TB_ORDER_DETAIL 상태값 변경
+			orderChangeDao.updateOrderDetailForExchangeCancel(exchangeCancel);
 
-	/**
-	 * 교환 정보 조회
-	 * 
-	 * @param OrderChange - 주문 변경 정보
-	 * @return Collection<OrderChange>
-	 * @author card007
-	 * @since 2021. 02. 01
-	 */
-	public Collection<Order> getExchangeInfo(Order order) {
-		return orderChangeDao.getExchangeInfo(order);
-	}
+			// TB_ORDER_DETAIL_HST 생성
+			orderChangeDao.createOrderDtlHstCancel(exchangeCancel);
 
-	/**
-	 * 전체취소 요청
-	 *
-	 * @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 무통장입금 전체취소
-		}
+			// TB_ORDER_DETAIL_ITEM 상태값 변경
+			orderChangeDao.updateOrderDetailItemForExchangeCancel(exchangeCancel);
 
-		// 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);
-		}
+			// TB_ORDER_DETAIL_ITEM_HST 생성
+			orderChangeDao.createOrderDetailItemHstForExchangeCancel(exchangeCancel);
 
-		// 3. 적립예정포인트 취소
-		vo.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT.value());
+			// TB_ORDER_CHANGE_DETAIL 상태값 변경 및 DEL_YN Y로 업데이트
+			orderChangeDao.updateOrderChangeDtlCancel(exchangeCancel);
 
-		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);
+			// 결과값 처리
+			result.set("status", GagaResponseStatus.SUCCESS.getCode());
 
-			// 적립예정포인트 취소 이력 생성
-			orderChangeDao.createCustPointHstRollback(point);
+			return result;
 		}
 
-		// 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);
-		}
+		/**
+		 * 교환회수
+		 * @param Order
+		 * @return Order
+		 * @author jsh77b
+		 * @since 2021. 01. 19
+		 */
+		public GagaMap exchRtn(List<Order> cnclRtnList) {
+			GagaMap mav = new GagaMap();
 
-		// 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);
-			}
+
+			return mav;
 		}
 
-		// 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);
+		/**
+		 * 교환발송완료
+		 * @param Order
+		 * @return Order
+		 * @author jsh77b
+		 * @since 2021. 01. 19
+		 */
+		public GagaMap exchComplete(List<Order> cnclRtnList) {
+			GagaMap mav = new GagaMap();
 
-		// TODO
-		// 11. 취소 완료 알림톡 발송 에정
-	}
 
-	/**
-	 * 전체취소 요청
-	 * 
-	 * @param GagaMap, int
-	 * @return GagaMap
-	 * @author card007
-	 * @since 2021. 04. 15
-	 */
-	@SuppressWarnings("unchecked")
-	@Transactional("shopTxnManager")
-	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 단위)
-		
-		// 2. 취소신청정보
-		int ordNo 							= Integer.parseInt(map.getString("ordNo"));			// 주문번호
-		String chgReason 					= map.getString("chgReason");						// 변경사유
-		String chgMemo 						= map.getString("chgMemo");							// 변경메모
-		String allCanYnBeforePayment		= map.getString("allCanYnBeforePayment");			// 무통장입금전 전체취소 여부
-		String chgGb						= TscConstants.OrderChangeGb.CANCEL.value(); 		// 취소요청 (공톹코드:G680)
-		String accountNo 					= map.getString("accountNo");						// 환불계좌번호
-		String accountNm 					= map.getString("accountNm");						// 환불계좌주명
-		String bankCd 						= map.getString("bankCd");							// 환불은행
-		String ipAddress					= map.getString("ipAddress");						// IP주소
-		String isCustomer					= map.getString("isCustomer");						// 귀책사유 (고객, 회사)
-		String reqGbn						= map.getString("reqGbn");							// 신청구분
-		// String chgerNm 						= map.getString("chgerNm");							// 변경자
-		// String chgerPhnno 					= map.getString("chgerPhnno");						// 변경핸드폰번호
-		// String chgerTelno 					= map.getString("chgerTelno");						// 변경전화번호
-		// String chgerEmail 					= map.getString("chgerEmail");						// 변경이메일
-		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();
+			return mav;
 		}
 
-		// 3. 주문상세단품정보등록, 변경 (단품단위)
-		OrderChange orderDetailItem = new OrderChange();
-		orderDetailItem.setOrdNo(ordNo);
-		orderDetailItem.setOrdDtlStat(ordDtlStat);
-		orderDetailItem.setRegNo(userNo);
-		orderDetailItem.setUpdNo(userNo);
 
-		orderChangeDao.updateOrderDetailItemForAllCancel(orderDetailItem);
-		orderChangeDao.createOrderDetailItemHstForAllCancel(orderDetailItem);
 
-		// 4. 주문변경정보, 주문정보, 환불정보 (배송정책코드별)
-		int pgCancelAmt = 0;
-		for (Order obj : cancelDelvRefundList) {
-			if (obj.getCnclRtnAmt() > 0) {
-				// 4-1. 주문변경 기본정보 설정
-				OrderChange orderChange = new OrderChange();
-				orderChange.setOrdNo(ordNo);
-				orderChange.setChgGb(chgGb);
-				orderChange.setChgReason(chgReason);
-				orderChange.setChgMemo(chgMemo);
-				orderChange.setAddPayCost(0);
-				orderChange.setAddPayAmt(0);
-				// 취소에 필요한 값인지 확인 필요
-				// orderChange.setChgerNm(chgerNm);
-				// orderChange.setChgerPhnno(chgerPhnno);
-				// orderChange.setChgerTelno(chgerTelno);
-				// orderChange.setChgerEmail(chgerEmail);
-				// orderChange.setChgerRtnMemo("");
-				orderChange.setRegNo(userNo);
-				orderChange.setUpdNo(userNo);
-
-				// 4-2. 주문변경 생성
-				orderChangeDao.createOrderChange(orderChange);
-				
-				// 4-3. 주문상세단위 취소정보
-				for (Order vo : cancelOrderRefundList) {
-					if (obj.getDelvFeeCd().equals(vo.getDelvFeeCd())) {
-						vo.setOrdDtlStat(ordDtlStat);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+		/**
+		 * 취소신청 (admin, npay, extmall) (사용안함)
+		 * @param Order
+		 * @return Order
+		 * @author jsh77b
+		 * @since 2021. 01. 19
+		 */
+		@SuppressWarnings("unchecked")
+		@Transactional("shopTxnManager")
+		public GagaMap cnclReq(GagaMap mav, int userNo) {
+
+			// 1. 세션회원조회
+			//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 단위)
+
+			// 3. 변경신청정보
+			int ordNo 			= Integer.parseInt(mav.getString("ordNo").toString());				// 주문번호
+			String chgReason 	= mav.getString("chgReason").toString();							// 변경사유
+			String chgMemo 		= mav.getString("chgMemo").toString();								// 변경메모
+			String allCanYn		= mav.getString("allCanYn").toString();								// 무통장입금전 전체취소 여부
+			String isCustomer	= mav.getString("isCustomer").toString();							// 귀책사유 (고객, 회사)
+			String chgGb		= TscConstants.OrderChangeGb.CANCEL.value(); 						// 취소요청
+			String reqGbn		= mav.get("reqGbn").toString();										// 신청구분
+
+			// 4. 주문상세단품정보등록,변경 (단품단위)
+			List<Order> cancelOrderDetailList = new ArrayList<Order>();
+
+			for (int i=0 ; i<cancelOrderRefundList.size() ; i++) {
+				Order cancelOrderRefundPo = cancelOrderRefundList.get(i);
+				cancelOrderRefundPo.setRegNo(userNo);
+				cancelOrderRefundPo.setUpdNo(userNo);
+
+				// 4.1 취소수량이 존재하면 주문상세단품정보 수정 및 주문상세단품이력정보 등록
+				if (cancelOrderRefundPo.getOrdCanChgQty() > 0) {
+					// 4.4 주문변경 상세 단위로 데이타 등록 (ORD_DTL_NO)
+					Boolean temp = false;
+					if (cancelOrderDetailList.size() > 0) {
+						for (int j=0 ; j<cancelOrderDetailList.size() ; j++) {
+							if (cancelOrderRefundPo.getOrdDtlNo() == cancelOrderDetailList.get(j).getOrdDtlNo()) {
+								temp = true;
+							}
+						}
+					}
+
+					// 4.5 주문상세단위 데이타 저장(주문상세 단위)
+					if (!temp) {
+						cancelOrderDetailList.add(cancelOrderRefundPo);
+					}
+				}
+			}
+
+			// 2021.01.21 DELV_FEE 배송번호 단위로 TB_ORDER_CHANGE 생성
+			// 4. 주문변경정보, 주문정보, 환불정보 (업체코드 & 배송정책코드)
+			for (int i=0 ; i<cancelDelvRefundList.size() ; i++) {
+
+				Order obj = cancelDelvRefundList.get(i);
+
+				// 취소금액이 있을때 처리
+				if (obj.getCnclRtnAmt() > 0) {
+
+					// 5.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);
+
+					// 5.2 주문변경 추가정보 등록
+					String chgerNm 			= mav.getString("chgerNm").toString();		// 변경자
+					String chgerPhnno 		= mav.getString("chgerPhnno").toString();	// 변경핸드폰번호
+					String chgerTelno 		= mav.getString("chgerTelno").toString();	// 변경전화번호
+					String chgerEmail 		= mav.getString("chgerEmail").toString();	// 변경이메일
+
+					orderChange.setChgerNm(chgerNm);
+					orderChange.setChgerPhnno(chgerPhnno);
+					orderChange.setChgerTelno(chgerTelno);
+					orderChange.setChgerEmail(chgerEmail);
+					orderChange.setChgerRtnMemo("");
+
+					orderChangeDao.createOrderChange(orderChange);
+
+					// 5.3 주문상세단위 취소정보
+					for (int j=0 ; j<cancelOrderDetailList.size() ; j++) {
+						Order vo = cancelOrderRefundList.get(j);
 						vo.setRegNo(userNo);
 						vo.setUpdNo(userNo);
-						
-						// 4-3-1. 주문상세정보 수정 및 주문상세이력정보 등록
-						orderChangeDao.updateOrderDetail(vo);
-						orderChangeDao.createOrderDetailHstCnclRtn(vo);
-						
-						// 4-3-3. 주문변경상세 및 이력정보 등록
-						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);
+						vo.setOrdDtlStat(TscConstants.OrderChangeStat.CANCEL.value()); 					// 취소신청
 
-						orderChangeDao.createOrderChangeDetail(changeDetailPo);
-						orderChangeDao.createOrderChangeDetailHst(changeDetailPo);
+						// 5.3.0 DEVL_FEE_CD 단위로 주문상세 정보 처리
+						if (obj.getDelvFeeCd().equals(vo.getDelvFeeCd())) {
 
-						// 4-3-4. 사용포인트원복
-						int pntDcAmt = vo.getPntDcAmt();
-						vo.setOccurGb(TscConstants.PointOccurGb.USE_POINT.value());
+							// 5.3.1 주문변경상세정보 이력등록
+							orderChangeDao.createOrderDetailHstCnclRtn(vo);
 
-						for (Order point : orderChangeDao.getCustPointHst(vo)) {
-							while (pntDcAmt > 0) {
-								if (pntDcAmt < point.getPntAmt()) {
-									point.setPntAmt(pntDcAmt);
-									pntDcAmt -= pntDcAmt;
-								} else {
-									pntDcAmt -= point.getPntAmt();
+							// * 주문상세단위가 아닌 주문상세단품단위로 데이타가 처리되고 있었음 주문상세단위로 수정
+							// 5.3 주문변경상세정보 등록
+							OrderChange changeDetailPo = new OrderChange();
+							changeDetailPo.setOrdChgSq(orderChange.getOrdChgSq());
+							changeDetailPo.setOrdDtlNo(vo.getOrdDtlNo());
+							changeDetailPo.setChgQty(vo.getOrdCanChgQty());
+							changeDetailPo.setChgStat(TscConstants.OrderChangeStat.CANCEL.value()); 	// 취소신청
+							changeDetailPo.setRegNo(userNo);
+							changeDetailPo.setUpdNo(userNo);
+
+							orderChangeDao.createOrderChangeDetail(changeDetailPo);
+						}
+					}
+					// 5.4 환불결제정보 등록 (업체별 & 배송정책별) 단위
+					// 취소, 반품 사유에 따른 추가배송비, 반품배송비를 환불금액에서 추가, 제외 할 수 있다.
+					int spanRealCnclRtnAmt 		= obj.getCnclRtnAmt();		// 취소금액합계
+					int sumDeliveryFee 			= obj.getDelvFee();			// 배송비합계
+					int spanTotDeliveryFee 		= obj.getAddDelvFee();		// 추가배송비합계
+					int spanTotRtnDelvFee 		= obj.getRtnDelvFee();		// 반품배송비합계
+					int spanRefundAmt			= 0;
+
+					// 고객사유 : 환불금액계산 = (취소금액 + 배송비) - 추가배송비
+					if ("true".equals(isCustomer)) {
+						spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee) - spanTotDeliveryFee - spanTotRtnDelvFee;
+					}
+					// 회사사유 : 환불금액계산 = (취소금액 + 배송비)
+					else {
+						spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee);
+					}
+
+					// 5.4 환불금액 등록
+					Order refundOrder = new Order();
+					refundOrder.setOrdNo(ordNo);
+					refundOrder.setPaySq(0);
+					refundOrder.setOrdChgSq(orderChange.getOrdChgSq());
+					refundOrder.setRegNo(userNo);
+
+					// 2021.01.25 TB_REFUND 정보 등록을 위해서 분리 작업
+					refundOrder.setRefundAmt(spanRefundAmt);
+					refundOrder.setRfCpn1Amt(obj.getCpn1DcAmt());
+					refundOrder.setRfTmtb1Amt(obj.getTmtb1DcAmt());
+					refundOrder.setRfTmtb2Amt(obj.getTmtb2DcAmt());
+					refundOrder.setRfGoodsCpnAmt(obj.getGoodsCpnDcAmt());
+					refundOrder.setRfCartCpnAmt(obj.getCartCpnDcAmt());
+					refundOrder.setRfPntAmt(obj.getPntAmt());
+					refundOrder.setRfPrePntAmt(obj.getPrePntDcAmt());
+					refundOrder.setRfGfcdUseAmt(obj.getGfcdUseAmt());
+
+					refundOrder.setRaNo(mav.get("accountNo").toString());
+					refundOrder.setRaNm(mav.get("accountNm").toString());
+					refundOrder.setRaBank(mav.get("bankCd").toString());
+
+					orderChangeDao.createRefund(refundOrder);
+				}
+			}
+
+			return mav;
+		}
+
+
+		/**
+		 * 취소신청승인 (admin) (사용안함)
+		 * @param Order
+		 * @return Order
+		 * @author jsh77b
+		 * @since 2021. 01. 19
+		 */
+		@Transactional("shopTxnManager")
+		public GagaMap cnclcnclComplete(GagaMap mav, int userNo) {
+
+			// 1. 환불금액계산
+
+			// 2. 사용포인트원복 (TB_CUST_POINT(수정), TB_CUST_POINT_HST(등록))
+
+			// 3. 사용쿠폰원복 (TB_CUST_COUPON(수정))
+
+			// 4. 상품권금액원복 (TB_CUST_GIFTCARD(수정), TB_CUST_GIFTCARD_HST(등록))
+
+			// 5. 사은품취소 (TB_ORD_FREEGIFT(수정), TB_ORD_FREEGIFT(등록), TB_ORD_FREEGIFT_VAL(수정))
+
+			// 6. 주문정보 수정 (TB_ORDER_DETAIL(수정), TB_ORDER_DETAIL_HST(등록), TB_ORDER_DETAIL_ITEM(수정), TB_ORDER_DETAIL_ITEM_HST(등록))
+
+			// 7. 재고정보 (TB_SELL_QTY(등록))
+
+			// 8. 주문변경정보 (TB_ORDER_CHANGE(수정), TB_ORDER_CHANGE_DTL(수정), TB_REFUND(수정))
+
+			// PG 결제 금액 체크
+			// 9. PG 실행
+
+			// 10. 결제정보 (TB_PAYMENT(등록))
+
+			// 11. 추가배송비발생 (TB_PAYMENT(등록))
+
+			return mav;
+		}
+
+		/**
+		 * 주문 환불계좌
+		 *
+		 * @param order - 주문정보
+		 * @return Order
+		 * @author jsh77b
+		 * @since 2021. 01. 04.
+		 */
+		public Collection<Order> getRefundAccount(Order order) {
+			return orderChangeDao.getRefundAccount(order);
+		}
+
+		/**
+		 * 환불계좌 저장
+		 *
+		 * @param order - 주문정보
+		 * @return TsaOrder
+		 * @author jsh77b
+		 * @since 2021. 01. 05.
+		 */
+		public int saveRefundAccount(Order order) {
+
+			// 환불계좌 유무 체크 후 등록
+			if (orderChangeDao.getRefundAccountCheck(order) < 1) {
+				orderChangeDao.saveRefundAccount(order);
+			}
+
+			return 1;
+		}
+
+		/**
+		 * 교환 정보 조회
+		 *
+		 * @param OrderChange - 주문 변경 정보
+		 * @return Collection<OrderChange>
+		 * @author card007
+		 * @since 2021. 02. 01
+		 */
+		public Collection<Order> getExchangeInfo(Order order) {
+			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. 취소 완료 알림톡 발송 에정
+		}
+
+		/**
+		 * 전체취소 요청
+		 *
+		 * @param GagaMap, int
+		 * @return GagaMap
+		 * @author card007
+		 * @since 2021. 04. 15
+		 */
+		@SuppressWarnings("unchecked")
+		@Transactional("shopTxnManager")
+		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 단위)
+
+			// 2. 취소신청정보
+			int ordNo 							= Integer.parseInt(map.getString("ordNo"));			// 주문번호
+			String chgReason 					= map.getString("chgReason");						// 변경사유
+			String chgMemo 						= map.getString("chgMemo");							// 변경메모
+			String allCanYnBeforePayment		= map.getString("allCanYnBeforePayment");			// 무통장입금전 전체취소 여부
+			String chgGb						= TscConstants.OrderChangeGb.CANCEL.value(); 		// 취소요청 (공톹코드:G680)
+			String accountNo 					= map.getString("accountNo");						// 환불계좌번호
+			String accountNm 					= map.getString("accountNm");						// 환불계좌주명
+			String bankCd 						= map.getString("bankCd");							// 환불은행
+			String ipAddress					= map.getString("ipAddress");						// IP주소
+			String isCustomer					= map.getString("isCustomer");						// 귀책사유 (고객, 회사)
+			String reqGbn						= map.getString("reqGbn");							// 신청구분
+			// String chgerNm 						= map.getString("chgerNm");							// 변경자
+			// String chgerPhnno 					= map.getString("chgerPhnno");						// 변경핸드폰번호
+			// String chgerTelno 					= map.getString("chgerTelno");						// 변경전화번호
+			// String chgerEmail 					= map.getString("chgerEmail");						// 변경이메일
+			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();
+			}
+
+			// 3. 주문상세단품정보등록, 변경 (단품단위)
+			OrderChange orderDetailItem = new OrderChange();
+			orderDetailItem.setOrdNo(ordNo);
+			orderDetailItem.setOrdDtlStat(ordDtlStat);
+			orderDetailItem.setRegNo(userNo);
+			orderDetailItem.setUpdNo(userNo);
+
+			orderChangeDao.updateOrderDetailItemForAllCancel(orderDetailItem);
+			orderChangeDao.createOrderDetailItemHstForAllCancel(orderDetailItem);
+
+			// 4. 주문변경정보, 주문정보, 환불정보 (배송정책코드별)
+			int pgCancelAmt = 0;
+			for (Order obj : cancelDelvRefundList) {
+				if (obj.getCnclRtnAmt() > 0) {
+					// 4-1. 주문변경 기본정보 설정
+					OrderChange orderChange = new OrderChange();
+					orderChange.setOrdNo(ordNo);
+					orderChange.setChgGb(chgGb);
+					orderChange.setChgReason(chgReason);
+					orderChange.setChgMemo(chgMemo);
+					orderChange.setAddPayCost(0);
+					orderChange.setAddPayAmt(0);
+					// 취소에 필요한 값인지 확인 필요
+					// orderChange.setChgerNm(chgerNm);
+					// orderChange.setChgerPhnno(chgerPhnno);
+					// orderChange.setChgerTelno(chgerTelno);
+					// orderChange.setChgerEmail(chgerEmail);
+					// orderChange.setChgerRtnMemo("");
+					orderChange.setRegNo(userNo);
+					orderChange.setUpdNo(userNo);
+
+					// 4-2. 주문변경 생성
+					orderChangeDao.createOrderChange(orderChange);
+
+					// 4-3. 주문상세단위 취소정보
+					for (Order vo : cancelOrderRefundList) {
+						if (obj.getDelvFeeCd().equals(vo.getDelvFeeCd())) {
+							vo.setOrdDtlStat(ordDtlStat);
+							vo.setRegNo(userNo);
+							vo.setUpdNo(userNo);
+
+							// 4-3-1. 주문상세정보 수정 및 주문상세이력정보 등록
+							orderChangeDao.updateOrderDetail(vo);
+							orderChangeDao.createOrderDetailHstCnclRtn(vo);
+
+							// 4-3-3. 주문변경상세 및 이력정보 등록
+							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);
+
+							orderChangeDao.createOrderChangeDetail(changeDetailPo);
+							orderChangeDao.createOrderChangeDetailHst(changeDetailPo);
+
+							// 4-3-4. 사용포인트원복
+							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);
 								}
+							}
 
-								point.setOccurGb(TscConstants.PointOccurGb.USE_POINT_CANCEL.value());
-								point.setOccurDtlDesc("포인트사용취소");
+							// 4-3-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.setOccurDtlDesc("예정포인트적립취소");
+								point.setPayAmt(savePntAmt * -1);
 								point.setRegNo(userNo);
 								point.setUpdNo(userNo);
 
-								// 포인트 사용 취소 이력 생성 및 포인트 수정
+								// 적립예정포인트 취소 이력 생성
 								orderChangeDao.createCustPointHstRollback(point);
-								orderChangeDao.updateCustPointRollback(point);
 							}
-						}
-						
-						// 4-3-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.setOccurDtlDesc("예정포인트적립취소");
-							point.setPayAmt(savePntAmt * -1);
-							point.setRegNo(userNo);
-							point.setUpdNo(userNo);
+							// 4-3-6. 상품쿠폰원복
+							orderChangeDao.updateGoodsCpnRollback(vo);
 
-							// 적립예정포인트 취소 이력 생성
-							orderChangeDao.createCustPointHstRollback(point);
+							// 4-3-7. 사용상품권 원복
+							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);
+								}
+							}
 						}
+					}
 
-						// 4-3-6. 상품쿠폰원복
-						orderChangeDao.updateGoodsCpnRollback(vo);
+					// 4-4. 상품재고원복
+					orderChange.setSellGb("11");
+					orderChangeDao.createSellQty(orderChange);
 
-						// 4-3-7. 사용상품권 원복
-						int gfcdUseAmt = vo.getGfcdUseAmt();
+					// 4-5. 환불결제정보 등록 (배송정책별)
+					int spanRefundAmt = obj.getRealOrdAmt() + obj.getDelvFee();
 
-						for (Order giftCard : orderChangeDao.getCustGiftCardHst(vo)) {
-							while (gfcdUseAmt > 0) {
-								if (gfcdUseAmt < giftCard.getGfcdAmt()) {
-									giftCard.setGfcdAmt(gfcdUseAmt);
-									gfcdUseAmt -= gfcdUseAmt;
-								} else {
-									gfcdUseAmt -= giftCard.getGfcdAmt();
-								}
+					Order paymentOrder = new Order();
+					paymentOrder.setOrdNo(ordNo);
+					paymentOrder.setPayAmt(spanRefundAmt * -1);
+					paymentOrder.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+					paymentOrder.setOrdChgSq(orderChange.getOrdChgSq());
+					paymentOrder.setRegNo(userNo);
+					paymentOrder.setUpdNo(userNo);
 
-								giftCard.setOccurGb(TscConstants.GiftCardOccurGb.USE_GIFTCARD_CANCEL.value());
-								giftCard.setOccurDtlDesc("상품권사용취소");
-								giftCard.setRegNo(userNo);
-								giftCard.setUpdNo(userNo);
+					orderChangeDao.createPayment(paymentOrder);
 
-								// 포인트 사용 취소 이력 생성 및 포인트 수정
-								orderChangeDao.createCustGiftCardHstRollback(giftCard);
-								orderChangeDao.updateCustGiftCardRollback(giftCard);
-							}
-						}
-					}
+					// 4-6. 환불금액 등록
+					Order refundOrder = new Order();
+					refundOrder.setOrdNo(ordNo);
+					refundOrder.setPaySq(paymentOrder.getPaySq());
+					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.setRfPntAmt(obj.getPntAmt());
+					refundOrder.setRfPrePntAmt(obj.getPrePntDcAmt());
+					refundOrder.setRfGfcdUseAmt(obj.getGfcdUseAmt());
+					refundOrder.setRfDeliveryFee(obj.getRfDeliveryFee());
+					refundOrder.setRfCnclAmt(obj.getRfCnclAmt());
+					refundOrder.setRfRealCnclAmt(obj.getRfRealCnclAmt());
+					refundOrder.setRaNo(accountNo);
+					refundOrder.setRaNm(accountNm);
+					refundOrder.setRaBank(bankCd);
+					refundOrder.setRegNo(userNo);
+
+					orderChangeDao.createRefund(refundOrder);
+
+					pgCancelAmt += spanRefundAmt;
 				}
-				
-				// 4-4. 상품재고원복
-				orderChange.setSellGb("11");
-				orderChangeDao.createSellQty(orderChange);
-				
-				// 4-5. 환불결제정보 등록 (배송정책별)
-				int spanRefundAmt = obj.getRealOrdAmt() + obj.getDelvFee();
-				
-				Order paymentOrder = new Order();
-				paymentOrder.setOrdNo(ordNo);
-				paymentOrder.setPayAmt(spanRefundAmt * -1);
-				paymentOrder.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
-				paymentOrder.setOrdChgSq(orderChange.getOrdChgSq());
-				paymentOrder.setRegNo(userNo);
-				paymentOrder.setUpdNo(userNo);
+			}
 
-				orderChangeDao.createPayment(paymentOrder);
-				
-				// 4-6. 환불금액 등록
-				Order refundOrder = new Order();
-				refundOrder.setOrdNo(ordNo);
-				refundOrder.setPaySq(paymentOrder.getPaySq());
-				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.setRfPntAmt(obj.getPntAmt());
-				refundOrder.setRfPrePntAmt(obj.getPrePntDcAmt());
-				refundOrder.setRfGfcdUseAmt(obj.getGfcdUseAmt());
-				refundOrder.setRfDeliveryFee(obj.getRfDeliveryFee());
-				refundOrder.setRfCnclAmt(obj.getRfCnclAmt());
-				refundOrder.setRfRealCnclAmt(obj.getRfRealCnclAmt());
-				refundOrder.setRaNo(accountNo);
-				refundOrder.setRaNm(accountNm);
-				refundOrder.setRaBank(bankCd);
-				refundOrder.setRegNo(userNo);
+			// 장바구니, 배송비 쿠폰 원복처리
+			Order coupon = new Order();
+			coupon.setOrdNo(ordNo);
+			coupon.setUpdNo(userNo);
+			orderChangeDao.updateCartCpnRollback(coupon);
+			orderChangeDao.updateDeliveryCpnRollback(coupon);
 
-				orderChangeDao.createRefund(refundOrder);
+			// 12. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
+			Order freegiftOrder = new Order();
+			freegiftOrder.setOrdNo(ordNo);
+			freegiftOrder.setUpdNo(userNo);
+			orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
 
-				pgCancelAmt += spanRefundAmt;
-			}
-		}
+			// TODO
+			// 13. PG 연동
+			// 네이버페이, 카카오페이 취소 시 취소 포인트 금액 TB_PAYMENT에 업데이트 처야함
+			// 상품권 100% 결제 시 PG 점프 해야 됨
 
-		// 장바구니, 배송비 쿠폰 원복처리
-		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);
+			// 원주문 결제 정보 조회
+			Payment payment = new Payment();
+			payment.setOrdNo(ordNo);
+			payment = orderChangeDao.getPaymentInfo(payment);
 
-		// TODO
-		// 13. PG 연동
-		// 네이버페이, 카카오페이 취소 시 취소 포인트 금액 TB_PAYMENT에 업데이트 처야함
-		// 상품권 100% 결제 시 PG 점프 해야 됨
-
-		// 원주문 결제 정보 조회
-		Payment payment = new Payment();
-		payment.setOrdNo(ordNo);
-		payment = orderChangeDao.getPaymentInfo(payment);
-
-		// PG 별 취소 처리
-		String pgGb = payment.getPgGb();
-		
-		// 상품권으로만 결제 시 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);
+			// PG 별 취소 처리
+			String pgGb = payment.getPgGb();
+
+			// 상품권으로만 결제 시 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. 취소 완료 알림톡 발송 에정
-		
-		return map;
+			// TODO
+			// 14. 취소 완료 알림톡 발송 에정
+
+			return map;
+		}
 	}
-}