Browse Source

Merge branch 'develop' of http://112.172.147.34:4936/style24/style24.core into develop

jsshin 5 years ago
parent
commit
2f5dafc481

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

@@ -0,0 +1,151 @@
+package com.style24.core.biz.dao;
+
+import java.util.List;
+
+import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.OrderChange;
+
+/**
+ * 취소관리 Dao
+ *
+ * @author jsh77b
+ * @since 2020. 11. 16
+ */
+@ShopDs
+public interface TscOrderChangeDao {
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문취소,반품,교환 대상목록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	List<Order> getCancelRequestTargetList(Order order);
+		
+	/**
+	 * 주문상세 > 주문취소신청 > 주문변경정보 등록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int createOrderChange(OrderChange orderChange);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문상세단품정보 수정
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int updateOrderDetailItem(Order order);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문상세단품정보 이력 등록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int createOrderDetailItemHst(Order order);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 상품옵션 재고 원복
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2021. 01. 08
+	 */
+	int updateOptionQty(Order order);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문상세정보(취소,반품) 이력 등록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int createOrderDetailHstCnclRtn(Order order);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문상세정보 수정
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int updateOrderDetail(Order order);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문변경정보상세 등록
+	 *
+	 * @param OrderChange - 주문 변경 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int createOrderChangeDetail(OrderChange orderChange);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문환불금액정보 등록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int createPayment(Order order);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문환불정보 등록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int createRefund(Order order);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문추가배송금액 등록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2021. 01. 06
+	 */
+	int createDeliveryFee(Order order);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문사은품전체취소
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int updateOrdFreegiftDel(Order order);
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 933 - 0
src/main/java/com/style24/core/biz/service/TscOrderChangeService.java

@@ -0,0 +1,933 @@
+package com.style24.core.biz.service;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.gagaframework.web.parameter.GagaMap;
+import com.style24.core.biz.dao.TscOrderChangeDao;
+import com.style24.core.support.env.TscConstants;
+import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.OrderChange;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 취소, 반품, 교환 Service
+ * 
+ * @author jsh77b
+ * @since 2021. 01. 18
+ */
+@Service
+@Slf4j
+public class TscOrderChangeService {
+
+	@Autowired
+	private TscOrderChangeDao orderChangeDao;
+	
+	/**
+	 * 주문변경정보 (상세번호배열, 취소수량배열) 취소 목록으로 변환
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	public List<Order> getCnclReqList(OrderChange cnclReq) {
+		
+		// 1. 주문번호설정
+		Order order = new Order();
+		order.setOrdNo(cnclReq.getOrdNo());
+		
+		// 2. 취소가능 주문상세상태값 설정
+		String[] ordDtlStatArr = new String[4];
+		ordDtlStatArr[0] = TscConstants.OrderDetailStat.DEPOSIT_WAIT.value();
+		ordDtlStatArr[1] = TscConstants.OrderDetailStat.PAYMENT_COMPLETE.value();
+		ordDtlStatArr[2] = TscConstants.OrderDetailStat.GOODS_PREPARE.value();
+		ordDtlStatArr[3] = TscConstants.OrderDetailStat.DELIVERY_PREPARE.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
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	public List<Order> getCancelRequestTargetList(Order order) {
+		return orderChangeDao.getCancelRequestTargetList(order);
+	}
+		
+	/**
+	 * 취소,반품 환불금액 계산 (admin, front)
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2021. 01. 19
+	 */
+	public GagaMap cnclRtnRefundAmt(List<Order> cnclRtnList) {
+		GagaMap mav = new GagaMap();
+				
+		// 1. 변수설정
+		int spanPayAmt				= 0; // 총 결제 금액
+		int spanSumRealOrdAmt		= 0; // 상품 실결제 금액
+		int spanSumDeliveryFee		= 0; // 배송금액
+		int spanRtnSumDeliveryFee 	= 0; // 반품배송금액
+		int spanExcSumDeliveryFee 	= 0; // 교환배송금액
+		int spanOrdAmt				= 0; // 주문 상품 금액
+		int spanCnclRtnAmt			= 0; // 취소 상품 금액
+		int spanTotPntDcAmt			= 0; // 취소 사용 포인트
+		int spanPntDcAmt			= 0; // 고객 포인트
+		int spanPrePntDcAmt			= 0; // 상품 선포인트
+		int spanCpnDcAmt			= 0; // 취소 사용 쿠폰금액
+		int spanCpn1DcAmt			= 0; // 즉시할인쿠폰
+		int spanGoodsCpnDcAmt		= 0; // 상품쿠폰
+		int spanCartCpnDcAmt		= 0; // 장바구니쿠폰
+		int spanTmtbDcAmt			= 0; // 취소 다다익선 금액
+		int spanTmtb1DcAmt			= 0; // 수량할인
+		int spanTmtb2DcAmt			= 0; // 금액할인
+		int spanGfcdUseAmt			= 0; // 취소 고객 상품권 금액
+		int spanRealCnclRtnAmt		= 0; // 취소 상품 실결제 금액
+		int spanTotDeliveryFee		= 0; // 환불 배송 금액
+		int spanRefundAmt			= 0; // 환불 금액 합계
+		
+		int sumDeliveryFee			= 0; // 배송금액 (전체 취소시에 배송금액도 같이 환불)
+		
+		List<Order> cancelOrderRefundList 	= new ArrayList<Order>();	// 주문환불금액목록
+		List<Order> cancelDelvRefundList 	= new ArrayList<Order>();	// 주문환불배송금액목록
+		
+		Order orderObj	= new Order();
+		Order delvObj	= new Order();
+		int k 			= 0 ;
+		
+		// 2. 초기 배송정보 설정
+		delvObj.setOrdAmt(0);
+		delvObj.setCnclRtnAmt(0);
+		delvObj.setRealOrdAmt(0);
+		delvObj.setDelvFee(cnclRtnList.get(k).getDelvFee());
+		delvObj.setMinOrdAmt(cnclRtnList.get(k).getMinOrdAmt());
+		delvObj.setOrgDelvFee(cnclRtnList.get(k).getOrgDelvFee());
+		delvObj.setRtnDelvFee(cnclRtnList.get(k).getRtnDelvFee());
+		delvObj.setExcDelvFee(cnclRtnList.get(k).getExcDelvFee());
+		delvObj.setSupplyCompCd(cnclRtnList.get(k).getSupplyCompCd());
+		delvObj.setDelvFeeCd(cnclRtnList.get(k).getDelvFeeCd());
+		delvObj.setAllCanYn(cnclRtnList.get(k).getAllCanYn());
+		cancelDelvRefundList.add(delvObj);
+		
+		// 3. 취소신청수량 정보를 취소 환불 금액 계산
+		for (Order oneData : cnclRtnList) {
+			orderObj	= new Order();
+			
+			// 3.1 주문기본정보 설정
+			orderObj.setItemQty(oneData.getItemQty());
+			orderObj.setOrdQty(oneData.getOrdQty());
+			orderObj.setCnclRtnQty(oneData.getCnclRtnQty());
+			orderObj.setOrdReqChgQty(oneData.getOrdReqChgQty());
+			orderObj.setOrdCanChgQty(oneData.getOrdCanChgQty());
+			orderObj.setItemPrice(oneData.getItemPrice());
+			orderObj.setOptAddPrice	(oneData.getOptAddPrice());
+			orderObj.setOrdAmt(oneData.getOrdAmt());
+			
+			orderObj.setOrdNo(oneData.getOrdNo());
+			orderObj.setOrdDtlNo(oneData.getOrdDtlNo());
+			orderObj.setGoodsCd(oneData.getGoodsCd());
+			orderObj.setGoodsNm(oneData.getGoodsNm());
+			orderObj.setOrdDtlItemSq(oneData.getOrdDtlItemSq());
+			orderObj.setItemCd(oneData.getItemCd());
+			orderObj.setItemNm(oneData.getItemNm());
+			orderObj.setOptCd1(oneData.getOptCd1());
+			orderObj.setOptCd2(oneData.getOptCd2());
+			
+			// 3.2 주문취소수량으로 취소율 정보 설정
+			int ordQty 			= oneData.getOrdQty();
+			int itemQty 		= oneData.getItemQty();
+			int ordCanChgQty 	= oneData.getOrdCanChgQty();
+			
+			float _appQty		= (float)ordCanChgQty / (float)ordQty;
+			
+			// 3.3 주문취소금액 & 취소할인금액 계산
+			orderObj.setCnclRtnAmt(((oneData.getItemPrice() + oneData.getOptAddPrice()) * itemQty) * ordCanChgQty);
+			orderObj.setCpn1DcAmt((int)(oneData.getCpn1DcAmt() 				* _appQty));
+			orderObj.setTmtb1DcAmt((int)(oneData.getTmtb1DcAmt() 			* _appQty));
+			orderObj.setTmtb2DcAmt((int)(oneData.getTmtb2DcAmt() 			* _appQty));
+			orderObj.setGoodsCpnDcAmt((int)(oneData.getGoodsCpnDcAmt() 		* _appQty));
+			orderObj.setCartCpnDcAmt((int)(oneData.getCartCpnDcAmt() 		* _appQty));
+			orderObj.setPntDcAmt((int)(oneData.getPntDcAmt() 				* _appQty));
+			orderObj.setPrePntDcAmt((int)(oneData.getPrePntDcAmt() 			* _appQty));
+			orderObj.setSavePntAmt((int)(oneData.getSavePntAmt() 			* _appQty));
+			orderObj.setGfcdUseAmt((int)(oneData.getGfcdUseAmt() 			* _appQty));
+			
+			// 3.4 취소할인합계금액 적용
+			int dcTotAmt		= 0;
+			dcTotAmt			+= orderObj.getTmtb1DcAmt();
+			dcTotAmt			+= orderObj.getTmtb2DcAmt();
+			dcTotAmt			+= orderObj.getGoodsCpnDcAmt();
+			dcTotAmt			+= orderObj.getCartCpnDcAmt();
+			dcTotAmt			+= orderObj.getPntDcAmt();
+			dcTotAmt			+= orderObj.getPrePntDcAmt();
+			dcTotAmt			+= orderObj.getCpn1DcAmt();
+			dcTotAmt			+= orderObj.getGfcdUseAmt();
+			
+			// 3.5 주문취소환불금액 계산
+			orderObj.setRealOrdAmt(orderObj.getCnclRtnAmt() - dcTotAmt);
+			
+			// 3.6 배송정보 관련 설정		
+			orderObj.setOrdDtlNo(oneData.getOrdDtlNo());
+			orderObj.setGoodsTypeNm(oneData.getGoodsTypeNm());
+			orderObj.setDelvFee(oneData.getDelvFee());
+			orderObj.setSupplyCompCd(oneData.getSupplyCompCd());
+			orderObj.setDelvFeeCd(oneData.getDelvFeeCd());
+			orderObj.setMinOrdAmt(oneData.getMinOrdAmt());
+			orderObj.setOrgDelvFee(oneData.getOrgDelvFee());
+			orderObj.setRtnDelvFee(oneData.getRtnDelvFee());
+			orderObj.setExcDelvFee(oneData.getExcDelvFee());
+			
+			// 3.7 주문상세상태체크
+			orderObj.setOrdDtlStat(oneData.getOrdDtlStat());
+			orderObj.setOrdDtlStatNm(oneData.getOrdDtlStatNm());
+			orderObj.setAllCanYn(oneData.getAllCanYn()); // 전체취소 여부 (기존의 취소 또는 출고, 반품, 교환 의 경우에는 전체취소 불가능)
+			
+			cancelOrderRefundList.add(orderObj);
+			
+			// 3.8 배송업체 & 배송비정책 조건으로 추가 배송비 금액 설정
+			if (cancelDelvRefundList.get(k).getSupplyCompCd().equals(orderObj.getSupplyCompCd()) && cancelDelvRefundList.get(k).getDelvFeeCd().equals(orderObj.getDelvFeeCd())) {
+				// 공급업체 와 배송정책코드가 같으면 주문금액, 취소금액 SUM
+				cancelDelvRefundList.get(k).setOrdAmt(cancelDelvRefundList.get(k).getOrdAmt() + orderObj.getOrdAmt());
+				cancelDelvRefundList.get(k).setCnclRtnAmt(cancelDelvRefundList.get(k).getCnclRtnAmt() + orderObj.getCnclRtnAmt());
+				cancelDelvRefundList.get(k).setRealOrdAmt(cancelDelvRefundList.get(k).getRealOrdAmt() + orderObj.getRealOrdAmt());
+				
+				if ("N".equals(orderObj.getAllCanYn())) {
+					cancelDelvRefundList.get(k).setAllCanYn("N");
+				}
+			} else {			
+				k++;
+				
+				delvObj	= new Order();
+				
+				// 공급업체 와 배송정책코드가 같지안으면 주문금액, 취소금액 RESET
+				delvObj.setOrdAmt(orderObj.getOrdAmt());
+				delvObj.setCnclRtnAmt(orderObj.getCnclRtnAmt());
+				delvObj.setRealOrdAmt(orderObj.getRealOrdAmt());
+				
+				delvObj.setDelvFee(orderObj.getDelvFee());
+				delvObj.setMinOrdAmt(orderObj.getMinOrdAmt());		
+				delvObj.setOrgDelvFee(orderObj.getOrgDelvFee());
+				delvObj.setRtnDelvFee(orderObj.getRtnDelvFee());
+				delvObj.setExcDelvFee(orderObj.getExcDelvFee());
+				delvObj.setSupplyCompCd(orderObj.getSupplyCompCd());
+				delvObj.setDelvFeeCd(orderObj.getDelvFeeCd());
+				delvObj.setAllCanYn(orderObj.getAllCanYn());
+				
+				cancelDelvRefundList.add(delvObj);
+			}
+			
+			// 3.9 FRONT 화면에서 사용 하는 변수 값 설정 & 계산
+			spanSumRealOrdAmt	+= oneData.getRealOrdAmt();
+			spanPntDcAmt		+= orderObj.getPntDcAmt();
+			spanPrePntDcAmt		+= orderObj.getPrePntDcAmt();
+			spanCpn1DcAmt		+= orderObj.getCpn1DcAmt();
+			spanGoodsCpnDcAmt	+= orderObj.getGoodsCpnDcAmt();
+			spanCartCpnDcAmt	+= orderObj.getCartCpnDcAmt();
+			spanTmtb1DcAmt		+= orderObj.getTmtb1DcAmt();
+			spanTmtb2DcAmt		+= orderObj.getTmtb2DcAmt();
+			spanGfcdUseAmt		+= orderObj.getGfcdUseAmt();
+			spanRealCnclRtnAmt	+= orderObj.getRealOrdAmt();
+		}
+		
+		// 4. 추가배송비 발생여부, 추가배송비, 배송비정책단위 전체취소 여부 체크
+		for (int i=0 ; i<cancelDelvRefundList.size() ; i++) {
+			Order obj = cancelDelvRefundList.get(i);
+			
+			// 취소금액이 있을때 처리
+			if (obj.getCnclRtnAmt() > 0) {
+			
+				// 4.1 무료배송비용 > (주문금액 - 취소금액)
+				if (obj.getMinOrdAmt() > (obj.getOrdAmt() - obj.getCnclRtnAmt())) {
+					
+					// 4.2 주문시 배송비가 존재하면 추가 배송비 없음
+					if (obj.getDelvFee() > 0) {
+						obj.setAddDelvFeeYn("N");
+						obj.setAddDelvFee(0);
+						
+						// 4.2.1 전체취소시 배송비 환불
+						if ((obj.getOrdAmt() - obj.getCnclRtnAmt()) == 0) {
+							if ("Y".equals(obj.getAllCanYn())) {
+								sumDeliveryFee += obj.getDelvFee(); // 전체취소시 배송금액도 같이 환불
+							}
+						}
+					} else {
+						// 4.3 주문금액 - 취소금액 == 0 이면 전체취소 이므로 배송비 발생 안함
+						// * 2020.12.28 
+						// * case : 배송정책 기준으로 1,2 상품 주문 후 1번 출고 후 1번반품 2번취소 할 경우 전체 취소 가 아니므로 배송비 부과 있을지 모르겠음 주문업체 단위로 배송되기 때문에 발생하지 않을것 같음
+						if ((obj.getOrdAmt() - obj.getCnclRtnAmt()) == 0) {
+							if ("N".equals(obj.getAllCanYn())) {
+								obj.setAddDelvFeeYn("Y");
+								obj.setAddDelvFee(obj.getOrgDelvFee());
+							} else {
+								// 4.4 전체취소의 경우에 해당
+								obj.setAddDelvFeeYn("N");
+								obj.setAddDelvFee(0);
+							}
+						} else {
+							// 4.5 추가배송비 발생 (취소신청화면에서 대부분 아래의 조건에 해당)
+							obj.setAddDelvFeeYn("Y");
+							obj.setAddDelvFee(obj.getOrgDelvFee());
+						}
+					}
+				} else {
+					obj.setAddDelvFeeYn("N");
+					obj.setAddDelvFee(0);
+				}
+			}
+				
+			spanSumDeliveryFee		+= obj.getDelvFee();
+			spanRtnSumDeliveryFee	+= obj.getRtnDelvFee();
+			spanExcSumDeliveryFee	+= obj.getExcDelvFee();
+			spanOrdAmt				+= obj.getOrdAmt();
+			spanCnclRtnAmt			+= obj.getCnclRtnAmt();
+			spanTotDeliveryFee  	+= obj.getAddDelvFee();
+			
+			cancelDelvRefundList.set(i, obj);
+		}
+		
+		// 5. FRONT 화면엣 필요한 금액 설정
+		// 2020.12.30 프론트에서 필요한 부분 작업 필여
+		// 관리자 화면에서 사용하는 환불 칼럼 정보
+		// 환불금액표시
+		spanPayAmt 			= spanSumRealOrdAmt + spanSumDeliveryFee;
+		spanTotPntDcAmt 	= spanPntDcAmt + spanPrePntDcAmt;
+		spanCpnDcAmt 		= spanCpn1DcAmt + spanGoodsCpnDcAmt + spanCartCpnDcAmt;
+		spanTmtbDcAmt 		= spanTmtb1DcAmt + spanTmtb2DcAmt;
+		spanRefundAmt 		= (spanRealCnclRtnAmt + sumDeliveryFee) - spanTotDeliveryFee;
+
+		mav.set("cnclRtnList"			, cnclRtnList);				//주문 취소 신청 목록
+		mav.set("cancelOrderRefundList"	, cancelOrderRefundList);	//주문 환불 금액 목록
+		mav.set("cancelDelvRefundList"	, cancelDelvRefundList);	//주문 환불 배송 금액 목록
+		mav.set("spanPayAmt"			, spanPayAmt);				//총 결제 금액
+		mav.set("spanSumRealOrdAmt"		, spanSumRealOrdAmt);		//상품 실결제 금액
+		mav.set("spanSumDeliveryFee"	, spanSumDeliveryFee);		//배송금액
+		mav.set("spanOrdAmt"			, spanOrdAmt);				//주문 상품 금액
+		mav.set("spanCnclRtnAmt"		, spanCnclRtnAmt);			//취소 상품 금액
+		mav.set("spanTotPntDcAmt"		, spanTotPntDcAmt);			//취소 사용 포인트
+		mav.set("spanPntDcAmt"			, spanPntDcAmt);			//고객 포인트
+		mav.set("spanPrePntDcAmt"		, spanPrePntDcAmt);			//상품 선포인트
+		mav.set("spanCpnDcAmt"			, spanCpnDcAmt);			//취소 사용 쿠폰금액
+		mav.set("spanCpn1DcAmt"			, spanCpn1DcAmt);			//즉시할인쿠폰
+		mav.set("spanGoodsCpnDcAmt"		, spanGoodsCpnDcAmt);		//상품쿠폰
+		mav.set("spanCartCpnDcAmt"		, spanCartCpnDcAmt);		//장바구니쿠폰
+		mav.set("spanTmtbDcAmt"			, spanTmtbDcAmt);			//취소 다다익선 금액
+		mav.set("spanTmtb1DcAmt"		, spanTmtb1DcAmt);			//수량할인
+		mav.set("spanTmtb2DcAmt"		, spanTmtb2DcAmt);			//금액할인
+		mav.set("spanGfcdUseAmt"		, spanGfcdUseAmt);			//취소 고객 상품권 금액
+		mav.set("spanRealCnclRtnAmt"	, spanRealCnclRtnAmt);		//취소 상품 실결제 금액
+		mav.set("sumDeliveryFee"		, sumDeliveryFee);			//배송비 합계 금액
+		mav.set("spanTotDeliveryFee"	, spanTotDeliveryFee);		//추가 배송 금액
+		mav.set("spanTotRtnDelvFee"		, spanRtnSumDeliveryFee);	//추가 반품 배송 금액
+		mav.set("spanTotExcDelvFee"		, spanExcSumDeliveryFee);	//추가 교환 배송 금액
+		mav.set("spanRefundAmt"			, spanRefundAmt);			//환불 금액 합계
+		
+		return mav;
+	}
+	
+	/**
+	 * 취소신청 (batch(napy), batch(extmall))
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2021. 01. 19
+	 */
+	@Transactional("shopTxnManager")
+	public GagaMap cnclReq(GagaMap mav, int userNo) {
+		
+		// 1. 세션회원조회
+		//userNo = userNo;
+		
+		// 2. 취소요정정보목록
+		//List<Order> cancelReqList		 	= (List<Order>) mav.get("cancelReqList");			//주문 취소 신청 목록
+		List<Order> cancelOrderRefundList 	= (List<Order>) mav.get("cancelOrderRefundList");	//주문 환불 금액 목록
+		List<Order> cancelDelvRefundList 	= (List<Order>) mav.get("cancelDelvRefundList");	//주문 환불 배송 금액 목록
+				
+		// 1. 주문정보등록 (TB_ORDER_DETAIL_HST) (등록)
+		
+		// 2. 주문변경정보등록 (TB_ORDER_CHAGNE) (등록)
+		
+		// 3. 주문변경상세정보등록 (TB_ORDER_CHANGE_DETAIL) (등록)
+		
+		return mav;
+	}
+	
+	/**
+	 * 취소신청완료 (admin)
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2021. 01. 19
+	 */
+	@Transactional("shopTxnManager")
+	public GagaMap cnclReqComplete(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;
+	}
+	
+	/**
+	 * 취소완료 (admin, front, batch(soldout), batch(gift), batch(napy), batch(extmall))
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2021. 01. 19
+	 */
+	@Transactional("shopTxnManager")
+	public GagaMap cnclComplete(GagaMap mav, int userNo) {
+		
+		// 1. 세션회원조회
+		//userNo = userNo;
+		
+		// 2. 취소요정정보목록
+		List<Order> cancelReqList		 	= (List<Order>) mav.get("cancelReqList");			//주문 취소 신청 목록
+		List<Order> cancelOrderRefundList 	= (List<Order>) mav.get("cancelOrderRefundList");	//주문 환불 금액 목록
+		List<Order> cancelDelvRefundList 	= (List<Order>) mav.get("cancelDelvRefundList");	//주문 환불 배송 금액 목록
+				
+		// 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		= "G680_20"; // 취소요청
+		
+		// 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.setRegNo(userNo);
+		orderChange.setUpdNo(userNo);
+		
+		// 4.2 주문변경 추가정조 등록하기
+		// 4.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);
+		
+		List<Order> cancelOrderDetailList = new ArrayList<Order>();
+		
+		// 4.2 주문변경 상세 단품 정보 등록 (단품단위)
+		for (int i=0 ; i<cancelOrderRefundList.size() ; i++) {
+			Order cancelOrderRefundPo = cancelOrderRefundList.get(i);
+			cancelOrderRefundPo.setRegNo(userNo);
+			cancelOrderRefundPo.setUpdNo(userNo);
+			
+			// 2020.01.05 추후 무통장입금전 전체 취소시 분기로직 추가 예정
+			if ("Y".equals(allCanYn)) {
+				cancelOrderRefundPo.setOrdDtlStat("G013_98"); // 결제전주문취소 : 공통코드로관리예정
+			} else {
+				cancelOrderRefundPo.setOrdDtlStat("G013_99"); // 결제후주문취소 : 공통코드로관리예정
+			}
+
+			// 4.2.1 취소수량이 존재하면 주문정보 수정 및 주문변경정보 등록
+			if (cancelOrderRefundPo.getOrdCanChgQty() > 0) {
+				// 4.2.3 주문상세단품정보 수정
+				orderChangeDao.updateOrderDetailItem(cancelOrderRefundPo);
+				
+				// 4.2.4 주문상세단품정보 이력 등록
+				orderChangeDao.createOrderDetailItemHst(cancelOrderRefundPo);
+				
+				// 4.3 주문변경 상세 단위로 데이타 등록 (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.4 주문상세단위 데이타 저장
+				if (!temp) {
+					cancelOrderDetailList.add(cancelOrderRefundPo);
+				}
+				
+				// 4.5 상품옵션 재고 원복
+				orderChangeDao.updateOptionQty(cancelOrderRefundPo);
+			}
+		}
+		
+		// 5. 주문상세단위 취소 데이타 처리
+		for (int i=0 ; i<cancelOrderDetailList.size() ; i++) {			
+			Order vo = cancelOrderRefundList.get(i);
+			vo.setRegNo(userNo);
+			vo.setUpdNo(userNo);
+			
+			// 2020.01.05 추후 무통장입금전 전체 취소시 분기로직 추가 예정
+			if ("Y".equals(allCanYn)) {
+				vo.setOrdDtlStat("G013_98"); // 결제전주문취소 : 공통코드로관리예정
+			} else {
+				vo.setOrdDtlStat("G013_99"); // 결제후주문취소 : 공통코드로관리예정
+			}
+			
+			// 5.1 주문변경상세정보 이력 등록
+			orderChangeDao.createOrderDetailHstCnclRtn(vo);
+			
+			// 4.2 주문변경상세정보 수정
+			orderChangeDao.updateOrderDetail(vo);
+			
+			// * 주문상세단위가 아닌 주문상세단품단위로 데이타가 처리되고 있었음
+			// 5.3 주문변경상세정보 등록
+			OrderChange changeDetailPo = new OrderChange();
+			changeDetailPo.setOrdChgSq(orderChange.getOrdChgSq());
+			changeDetailPo.setOrdDtlNo(vo.getOrdDtlNo());
+			changeDetailPo.setChgQty(vo.getOrdCanChgQty());
+			changeDetailPo.setChgStat("G685_21"); // 취소완료 : 공통코드로관리예정
+			changeDetailPo.setRegNo(userNo);
+			changeDetailPo.setUpdNo(userNo);
+			
+			orderChangeDao.createOrderChangeDetail(changeDetailPo);
+		}
+		
+		// To Do List
+		// 취소, 반품 사유에 따른 추가배송비, 반품배송비를 환불금액에서 추가, 제외 할 수 있다.
+		int spanRealCnclRtnAmt 		= Integer.parseInt(mav.get("spanRealCnclRtnAmt").toString());		// 취소금액합계
+		int sumDeliveryFee 			= Integer.parseInt(mav.get("sumDeliveryFee").toString());			// 배송비합계
+		int spanTotDeliveryFee 		= Integer.parseInt(mav.get("spanTotDeliveryFee").toString());		// 추가배송비합계
+		int spanTotRtnDelvFee 		= Integer.parseInt(mav.get("spanTotRtnDelvFee").toString());		// 반품배송비합계
+		int spanRefundAmt			= 0;
+		
+		// 고객사유 : 환불금액계산 = (취소금액 + 배송비) - 추가배송비
+		if ("true".equals(isCustomer)) {
+			spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee) - spanTotDeliveryFee - spanTotRtnDelvFee;
+			//Integer.parseInt(mav.get("spanRefundAmt").toString());
+		}
+		// 회사사유 : 환불금액계산 = (취소금액 + 배송비)
+		else {
+			spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee);
+		}
+		mav.set("spanRefundAmt", spanRefundAmt);
+		
+		// 6. 환불결제 정보 등록
+		Order paymentOrder = new Order();
+		paymentOrder.setOrdNo(ordNo);
+		paymentOrder.setPayAmt(Integer.parseInt(mav.get("spanRefundAmt").toString()) * -1);
+		paymentOrder.setPayStat("G016_99");
+		paymentOrder.setOrdChgSq(orderChange.getOrdChgSq());
+		paymentOrder.setRegNo(userNo);
+		paymentOrder.setUpdNo(userNo);
+		
+		orderChangeDao.createPayment(paymentOrder);
+		
+		// 7. 환불금액 등록
+		Order refundOrder = new Order();
+		refundOrder.setOrdNo(ordNo);
+		refundOrder.setPaySq(paymentOrder.getPaySq());
+		refundOrder.setOrdChgSq(orderChange.getOrdChgSq());
+		refundOrder.setRegNo(userNo);
+		
+		refundOrder.setRefundAmt(Integer.parseInt(mav.get("spanRefundAmt").toString()));
+		refundOrder.setRfCpn1Amt(Integer.parseInt(mav.get("spanCpn1DcAmt").toString()));
+		refundOrder.setRfTmtb1Amt(Integer.parseInt(mav.get("spanTmtb1DcAmt").toString()));
+		refundOrder.setRfTmtb2Amt(Integer.parseInt(mav.get("spanTmtb2DcAmt").toString()));
+		refundOrder.setRfGoodsCpnAmt(Integer.parseInt(mav.get("spanGoodsCpnDcAmt").toString()));
+		refundOrder.setRfCartCpnAmt(Integer.parseInt(mav.get("spanCartCpnDcAmt").toString()));
+		refundOrder.setRfPntAmt(Integer.parseInt(mav.get("spanPntDcAmt").toString()));
+		refundOrder.setRfPrePntAmt(Integer.parseInt(mav.get("spanPrePntDcAmt").toString()));
+		refundOrder.setRfGfcdUseAmt(Integer.parseInt(mav.get("spanGfcdUseAmt").toString()));
+		
+		refundOrder.setRaNo(mav.get("accountNo").toString());
+		refundOrder.setRaNm(mav.get("accountNm").toString());
+		refundOrder.setRaBank(mav.get("bankCd").toString());
+		
+		orderChangeDao.createRefund(refundOrder);
+		
+		// 8. 결제금액이 무료배송금액보다 작으면 배송비 신규 등록
+		for (int i=0 ; i<cancelDelvRefundList.size() ; i++) {
+			Order vo = cancelDelvRefundList.get(i);
+			
+			if (vo.getAddDelvFee() > 0) {
+				Order delvFeeOrder = new Order();
+				
+				delvFeeOrder.setPaySq(paymentOrder.getPaySq());
+				delvFeeOrder.setOrdNo(ordNo);
+				delvFeeOrder.setDelvFeeGb("G018_10");
+				delvFeeOrder.setDelvFeeCd(vo.getDelvFeeCd());
+				delvFeeOrder.setDelvFee(vo.getAddDelvFee());
+				delvFeeOrder.setRealDelvAmt(vo.getDelvFee());
+				delvFeeOrder.setOrdChgSq(orderChange.getOrdChgSq());
+				delvFeeOrder.setSupplyCompCd(vo.getSupplyCompCd());
+				delvFeeOrder.setRegNo(userNo);
+				delvFeeOrder.setUpdNo(userNo);
+				
+				orderChangeDao.createDeliveryFee(delvFeeOrder);
+			}
+		}
+		
+		// To Do List
+		// 9. 포인트원복 (사용포인트, 주문상세단위)
+		
+		// To Do List
+		// 10. 쿠폰원복 (상품쿠폰, 주문상세단위) (전체취소시 장바구니쿠폰, 배송비쿠폰)
+		
+		// To Do List
+		// 11. 상품권원복
+		
+		// 12. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
+		Order freegiftOrder = new Order();
+		freegiftOrder.setOrdNo(ordNo);
+		freegiftOrder.setUpdNo(userNo);
+		orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
+		
+		// To Do List
+		// 13. PG 연동
+		
+		// To Do List
+		// 14. 취소 완료 알림톡 발송 에정
+		
+		//int a = 100/0;
+		
+		
+		return mav;
+	}
+	
+	/**
+	 * 반품신청 (admin, front, 
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2021. 01. 19
+	 */
+	public GagaMap rtnReq(GagaMap mav, int userNo) {
+		
+		// 1. 세션회원조회
+		//userNo = userNo;
+		
+		// 2. 취소요정정보목록
+		List<Order> cancelReqList		 	= (List<Order>) mav.get("cancelReqList");			//주문 취소 신청 목록
+		List<Order> cancelOrderRefundList 	= (List<Order>) mav.get("cancelOrderRefundList");	//주문 환불 금액 목록
+		List<Order> cancelDelvRefundList 	= (List<Order>) mav.get("cancelDelvRefundList");	//주문 환불 배송 금액 목록
+				
+		// 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		= "G680_30"; //반품요청
+		
+		// 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.setRegNo(userNo);
+		orderChange.setUpdNo(userNo);
+		
+		// 4.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();
+		String chgerZipNo 		= mav.getString("chgerZipNo").toString();
+		String chgerBaseAddr 	= mav.getString("chgerBaseAddr").toString();
+		String chgerDtlAddr 	= mav.getString("chgerDtlAddr").toString();
+		
+		orderChange.setChgerNm(chgerNm);
+		orderChange.setChgerPhnno(chgerPhnno);
+		orderChange.setChgerTelno(chgerTelno);
+		orderChange.setChgerEmail(chgerEmail);
+		orderChange.setChgerZipNo(chgerZipNo);
+		orderChange.setChgerBaseAddr(chgerBaseAddr);
+		orderChange.setChgerDtlAddr(chgerDtlAddr);
+		orderChange.setChgerRtnMemo("");
+		
+		orderChangeDao.createOrderChange(orderChange);
+		
+		List<Order> cancelOrderDetailList = new ArrayList<Order>();
+		
+		// 4.2 주문변경 상세 단품 정보 등록 (단품단위)
+		for (int i=0 ; i<cancelOrderRefundList.size() ; i++) {
+			Order cancelOrderRefundPo = cancelOrderRefundList.get(i);
+			cancelOrderRefundPo.setRegNo(userNo);
+			cancelOrderRefundPo.setUpdNo(userNo);
+			
+			// 2020.01.05 추후 무통장입금전 전체 취소시 분기로직 추가 예정
+			if ("Y".equals(allCanYn)) {
+				cancelOrderRefundPo.setOrdDtlStat("G013_98"); // 결제전주문취소 : 공통코드로관리예정
+			} else {
+				cancelOrderRefundPo.setOrdDtlStat("G013_99"); // 결제후주문취소 : 공통코드로관리예정
+			}
+
+			// 4.2.1 취소수량이 존재하면 주문정보 수정 및 주문변경정보 등록
+			if (cancelOrderRefundPo.getOrdCanChgQty() > 0) {
+				// 4.2.3 주문상세단품정보 수정
+				//orderChangeDao.updateOrderDetailItem(cancelOrderRefundPo);
+				
+				// 4.2.4 주문상세단품정보 이력 등록
+				//orderChangeDao.createOrderDetailItemHst(cancelOrderRefundPo);
+				
+				// 4.3 주문변경 상세 단위로 데이타 등록 (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.4 주문상세단위 데이타 저장
+				if (!temp) {
+					cancelOrderDetailList.add(cancelOrderRefundPo);
+				}
+				
+				// 4.5 상품옵션 재고 원복
+				//orderChangeDao.updateOptionQty(cancelOrderRefundPo);
+			}
+		}
+		
+		// 5. 주문상세단위 취소 데이타 처리
+		for (int i=0 ; i<cancelOrderDetailList.size() ; i++) {			
+			Order vo = cancelOrderRefundList.get(i);
+			vo.setRegNo(userNo);
+			vo.setUpdNo(userNo);
+			
+			// 2020.01.05 추후 무통장입금전 전체 취소시 분기로직 추가 예정
+			if ("Y".equals(allCanYn)) {
+				vo.setOrdDtlStat("G013_98"); // 결제전주문취소 : 공통코드로관리예정
+			} else {
+				vo.setOrdDtlStat("G013_99"); // 결제후주문취소 : 공통코드로관리예정
+			}
+			
+			// 5.1 주문변경상세정보 이력 등록
+			orderChangeDao.createOrderDetailHstCnclRtn(vo);
+			
+			// 4.2 주문변경상세정보 수정
+			//orderChangeDao.updateOrderDetail(vo);
+			
+			// * 주문상세단위가 아닌 주문상세단품단위로 데이타가 처리되고 있었음
+			// 5.3 주문변경상세정보 등록
+			OrderChange changeDetailPo = new OrderChange();
+			changeDetailPo.setOrdChgSq(orderChange.getOrdChgSq());
+			changeDetailPo.setOrdDtlNo(vo.getOrdDtlNo());
+			changeDetailPo.setChgQty(vo.getOrdCanChgQty());
+			changeDetailPo.setChgStat("G685_40"); // 반품요청 : 공통코드로관리예정
+			changeDetailPo.setRegNo(userNo);
+			changeDetailPo.setUpdNo(userNo);
+			
+			orderChangeDao.createOrderChangeDetail(changeDetailPo);
+		}
+		
+		// To Do List
+		// 취소, 반품 사유에 따른 추가배송비, 반품배송비를 환불금액에서 추가, 제외 할 수 있다.
+		int spanRealCnclRtnAmt 		= Integer.parseInt(mav.get("spanRealCnclRtnAmt").toString());		// 취소금액합계
+		int sumDeliveryFee 			= Integer.parseInt(mav.get("sumDeliveryFee").toString());			// 배송비합계
+		int spanTotDeliveryFee 		= Integer.parseInt(mav.get("spanTotDeliveryFee").toString());		// 추가배송비합계
+		int spanTotRtnDelvFee 		= Integer.parseInt(mav.get("spanTotRtnDelvFee").toString());		// 반품배송비합계
+		int spanRefundAmt			= 0;
+		
+		// 고객사유 : 환불금액계산 = (취소금액 + 배송비) - 추가배송비
+		if ("true".equals(isCustomer)) {
+			spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee) - spanTotDeliveryFee - spanTotRtnDelvFee;
+			//Integer.parseInt(mav.get("spanRefundAmt").toString());
+		}
+		// 회사사유 : 환불금액계산 = (취소금액 + 배송비)
+		else {
+			spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee);
+		}
+		mav.set("spanRefundAmt", spanRefundAmt);
+		
+		// 6. 환불결제 정보 등록
+		Order paymentOrder = new Order();
+		paymentOrder.setOrdNo(ordNo);
+		paymentOrder.setPayAmt(Integer.parseInt(mav.get("spanRefundAmt").toString()) * -1);
+		paymentOrder.setPayStat("G016_99");
+		paymentOrder.setOrdChgSq(orderChange.getOrdChgSq());
+		paymentOrder.setRegNo(userNo);
+		paymentOrder.setUpdNo(userNo);
+		
+		//orderChangeDao.createPayment(paymentOrder);
+		
+		// 7. 환불금액 등록
+		Order refundOrder = new Order();
+		refundOrder.setOrdNo(ordNo);
+		refundOrder.setPaySq(paymentOrder.getPaySq());
+		refundOrder.setOrdChgSq(orderChange.getOrdChgSq());
+		refundOrder.setRegNo(userNo);
+		
+		refundOrder.setRefundAmt(Integer.parseInt(mav.get("spanRefundAmt").toString()));
+		refundOrder.setRfCpn1Amt(Integer.parseInt(mav.get("spanCpn1DcAmt").toString()));
+		refundOrder.setRfTmtb1Amt(Integer.parseInt(mav.get("spanTmtb1DcAmt").toString()));
+		refundOrder.setRfTmtb2Amt(Integer.parseInt(mav.get("spanTmtb2DcAmt").toString()));
+		refundOrder.setRfGoodsCpnAmt(Integer.parseInt(mav.get("spanGoodsCpnDcAmt").toString()));
+		refundOrder.setRfCartCpnAmt(Integer.parseInt(mav.get("spanCartCpnDcAmt").toString()));
+		refundOrder.setRfPntAmt(Integer.parseInt(mav.get("spanPntDcAmt").toString()));
+		refundOrder.setRfPrePntAmt(Integer.parseInt(mav.get("spanPrePntDcAmt").toString()));
+		refundOrder.setRfGfcdUseAmt(Integer.parseInt(mav.get("spanGfcdUseAmt").toString()));
+		
+		refundOrder.setRaNo(mav.get("accountNo").toString());
+		refundOrder.setRaNm(mav.get("accountNm").toString());
+		refundOrder.setRaBank(mav.get("bankCd").toString());
+		
+		//orderChangeDao.createRefund(refundOrder);
+		
+		// 8. 결제금액이 무료배송금액보다 작으면 배송비 신규 등록
+		for (int i=0 ; i<cancelDelvRefundList.size() ; i++) {
+			Order vo = cancelDelvRefundList.get(i);
+			
+			if (vo.getAddDelvFee() > 0) {
+				Order delvFeeOrder = new Order();
+				
+				delvFeeOrder.setPaySq(paymentOrder.getPaySq());
+				delvFeeOrder.setOrdNo(ordNo);
+				delvFeeOrder.setDelvFeeGb("G018_10");
+				delvFeeOrder.setDelvFeeCd(vo.getDelvFeeCd());
+				delvFeeOrder.setDelvFee(vo.getAddDelvFee());
+				delvFeeOrder.setRealDelvAmt(vo.getDelvFee());
+				delvFeeOrder.setOrdChgSq(orderChange.getOrdChgSq());
+				delvFeeOrder.setSupplyCompCd(vo.getSupplyCompCd());
+				delvFeeOrder.setRegNo(userNo);
+				delvFeeOrder.setUpdNo(userNo);
+				
+				//orderChangeDao.createDeliveryFee(delvFeeOrder);
+			}
+		}
+		
+		// To Do List
+		// 9. 포인트원복 (사용포인트, 주문상세단위)
+		
+		// To Do List
+		// 10. 쿠폰원복 (상품쿠폰, 주문상세단위) (전체취소시 장바구니쿠폰, 배송비쿠폰)
+		
+		// To Do List
+		// 11. 상품권원복
+		
+		// 12. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
+		Order freegiftOrder = new Order();
+		freegiftOrder.setOrdNo(ordNo);
+		freegiftOrder.setUpdNo(userNo);
+		//orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
+		
+		// To Do List
+		// 13. PG 연동
+		
+		// To Do List
+		// 14. 취소 완료 알림톡 발송 에정
+		
+		//int a = 100/0;
+		
+		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
+	 */
+	public GagaMap exchReq(List<Order> cnclRtnList) {
+		GagaMap mav = new GagaMap();
+		
+		
+		return mav;
+	}
+	
+	/**
+	 * 교환회수
+	 * @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;
+	}
+}

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

@@ -0,0 +1,368 @@
+package com.style24.persistence.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.style24.persistence.TscBaseDomain;
+import com.style24.persistence.TscPageRequest;
+
+import lombok.Data;
+
+/**
+ * 알람 Domain
+ * 
+ * @author jsh77b
+ * @since 2021. 01. 18
+ */
+@SuppressWarnings("serial")
+@Data
+public class Order extends TscBaseDomain {
+	// 주문마스터
+	private int ordNo;
+	private String mallGb;
+	private String mallGbNm;
+	private String ordDt;
+	private String payDt;
+	private int custNo;
+	private String ordNm;
+	private String ordTelno;
+	private String siteCd;
+	private String siteCdNm;
+	private int npayOrdNo;
+	private String frontGb;
+	private String frontGbNm;
+	private String extmallNm;
+
+	// 주문상세
+	private int ordDtlNo;
+	private String ordExchGb;
+	private String ordDtlStat;
+	private int orgOrdDtlNo;
+	private String supplyCompCd;
+	private String goodsCd;
+	private String formalGb;
+	private String formalGbNm;
+	private String goodsType;
+	private int listPrice;
+	private int currPrice;
+	private double dcRate;
+	private int optAddPrice;
+	private int ordQty;
+	private int ordAmt;
+	private int cnclRtnQty;
+	private int cnclRtnAmt;
+	private int cpn1CpnSq;
+	private int cpn1DcAmt;
+	private int tmtb1Sq;
+	private int tmtb1DcAmt;
+	private int tmtb2Sq;
+	private int tmtb2DcAmt;
+	private int goodsCpnSq;
+	private int goodsCpnDcAmt;
+	private int cartCpnSq;
+	private int cartCpnDcAmt;
+	
+	private int pntDcAmt;
+	private int prePntDcAmt;
+	private int savePntAmt;
+	
+	private int realOrdAmt;
+	private String venderId;
+	private String extmallId;
+	private String agentOrderId;
+	private String extmallOrderId;
+	private String changeableYn;
+	private String changeFeeFreeYn;
+	private String returnableYn;
+	private String returnFeeFreeYn;
+	
+	private String soldoutYn;
+	private String soldoutMemo;
+	private String soldoutRegNo;
+	private String soldoutRegDt;
+	private int delvAddrSq;
+	private String shotDelvYn;
+	private String giftPackYn;
+	
+	private String delvLocCd;
+	private String delvAssigngDt;
+	private String delvAddignStat;
+	private String dstrbtMemo;
+	private String delvStdt;
+	private String delvEddt;
+	
+	private String shipCompCd;
+	private String invoiceNo;
+	private String invoiceSendYn;
+	private String sellStoreCd;
+	private double sellFeeRate;
+	
+	private String afLinkCd;
+	private String ithrCd;
+	private String contentsLoc;
+	
+	private int planDtlsq;
+	private int socialSq;
+	
+	private String condition;
+	private String[] conditions = null;
+	
+	private String stDate;
+	private String edDate;
+	private String searchDateGb;
+	private String orderNm;
+	private int custId;
+	private String orderPhnno;
+	private String vendorId;
+	private String sizeCd;
+	private String goodsNm;
+	private String payMeans;
+	private String chgStat;
+	private String recipNm;
+	private String chgGb;
+	private String wdInvoiceSendYn;
+	
+	// 상품정보
+	private String imgPath1;
+	private String sysImgNm;
+	private String brandCd;
+	private String optCd1;
+	private String optCd2;
+	private String goodsTypeNm;
+	private String brandEnm;
+	private String itemCd;
+	private String goodsNum;
+	private String supplyGoodsCd;
+	
+	private int totDcAmt;
+	private String dateGbn;
+	private String mallCd;
+	private String search;
+	
+	/* Multi CheckBox 항목*/
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiBrand;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiOrdStat;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiOrdDtlStat;
+	
+	private int sumOrdAmt;
+	private int sumOrdCnclAmt;
+	private int sumRealPayAmt;
+	private int ordNoCnt;
+	private int sumOrdQty;
+	private int sumOrdCnclQty;
+	
+	private String excelFileNm;
+	
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private int[] ordNoList;
+	
+	private String delYn;
+	private String recipPhnno;
+	private String recipTelno;
+	private String recipZipNo;
+	private String recipBaseAddr;
+	private String recipDtlAddr;
+	private String ordEmail;
+	private String delvMemo;
+	private String delvAddrEditYn;
+	private String exchGbNm;
+	
+	private String escrowYn;
+	private String payMeansNm;
+	private String cardNm;
+	private String vaBank;
+	private String pgTradeNo;
+	private String payStat;
+	private String payStatNm;
+	private int payAmt;
+	private String vaDeadLine;
+	
+	private String delvFeeGb;
+	private String delvFeeGbNm;
+	private int delvFee;
+	private String delvUsacYn;
+	private String delvUsacDt;
+	private int delvFeeSq;
+	
+	private String coundelClsf;
+	private String relGoodsCd;
+	private String questTitle;
+	private String questDt;
+	private String ansDt;
+	private int andNo;
+	
+	private int ordChgSq;
+	private String chgGbNm;
+	private String chgStatNm;
+	private String chgReason;
+	private String chgReasonNm;
+	private String chgMemo;
+	private String chgerNm;
+	private String chgerPhnno;
+	private String chgerZipNo;
+	private String chgerBaseAddr;
+	private String chgerDtlAddr;
+	private String wdInvoiceNo;
+	
+	private String supplyCompNm;
+	private String brandKnm;
+	private String ordDtlStatNm;	
+	private String ordPhnno;
+	
+	private String custGrade;
+	private String custGradeNm;
+	private String custGb;
+	private String custGbNm;
+	private String managedRsn;
+	private String managedRsnNm;
+	
+	private int itemQty;
+	private int itemPrice;
+	private String itemNm;
+	private int gfcdUseAmt;
+	
+	// Pagination
+	private TscPageRequest pageable;
+	private int pageNo = 1;
+	private int pageSize = 50;
+	private int pageUnit = 10;
+	
+	// 주문문의 1:1 응답 칼럼
+	private String counselClsfNm;
+	private String ansNo;
+	private String ansNm;
+	private String regNm;
+	private String updNm;
+	
+	// 주문메모칼럼
+	private int orderMemoSq;
+	private String memo;
+	private String orgFileNm;
+	private String sysFileNm;
+	
+	// 사은품칼럼
+	private int ordFreegiftSq;
+	private int freegiftSq;
+	private String freegiftNm;
+	private int freegiftValSq;
+	private int usePoint;
+	private int seq;
+	private String userNm;
+	
+	// 환불계좌칼럼
+	private String raBank;
+	private String raBankNm;
+	private String raNo;
+	private String raNm;
+	private String defaultYn;
+	
+	// 주문상세변경내역칼럼
+	private String userId;
+	private String updId;
+	private String shipCompNm;
+	private String shipCompId;
+	
+	// 주문쿠폰
+	private int cpnSq;
+	private int cpnId;
+	private int cpnDcAmt;
+	private String cpnType;
+	private String targetCd1;
+	private String targetCd2;
+	private String cpnNm;
+	private String dcWay;
+	private int dcPval;
+	private int dcMval;
+	private int dcAval;
+	
+	// 주문포인트
+	private int pntPrate;
+	private int pntMrate;
+	private int pntAmt;
+	private String occurGb;
+	private String occurGbNm;
+	private String occurDtlDesc;
+	
+	// 주문상품권
+	private String gfcdNm;
+	private String gfcdNo;
+	private int gfcdAmt;
+	private int chgGfcdAmt;
+	private int usGfcdAmt;
+	private int rmGfcdAmt;
+	
+	// 다다익선
+	private int tmtbSq;
+	private String tmtbNm;
+	private int tmtbDcAmt;
+	
+	// 상태변경
+	private String g20;
+	private String g30;
+	private String g40;
+	private String g50;
+	private String g55;
+	private String g60;
+	
+	// 취소요청
+	private String cncWait;
+	private int ordReqChgQty;
+	private int itemReqChgQty;
+	private int itemOrdPrice;
+	private int minOrdAmt;
+	private int orgDelvFee;
+	private String delvFeeCd;
+	private int ordCanChgQty;
+	private String allCanYn;
+	
+	private String addDelvFeeYn;
+	private int addDelvFee;
+	private int ordDtlItemSq;
+	
+	private int paySq;
+	private int refundAmt;
+	private int rfCpn1Amt;
+	private int rfTmtb1Amt;
+	private int rfTmtb2Amt;
+	private int rfGoodsCpnAmt;
+	private int rfCartCpnAmt;
+	private int rfPntAmt;
+	private int rfPrePntAmt;
+	private int rfGfcdUseAmt;
+
+	private int pgCpnAmt;
+	private int npayPntAmt;
+	private String payGb;
+	private String pgGb;
+	private String pgTid;
+	private String cardType;
+	private String cardKind;
+	private String cardBank;
+	private String cardMips;
+	private String cardPcableYn;
+	private String vaNo;
+	private String vaNm;
+	private String vaDeadline;
+	private String telecom;
+
+	private String accountNo;
+	private String accountNm;
+	private String bankCd;
+	private String bankNm;
+
+	private int realDelvAmt;
+	private int delvCpnSq;
+	private int delvCpnDcAmt;
+
+	private int chgQty;
+	private int rtnDelvFee;
+	private int excDelvFee;
+
+	private String[] ordDtlStatArr;
+	
+	private int[] ordDtlNoArr;
+	private int[] cnclRtnReqQtyArr;
+}

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

@@ -0,0 +1,60 @@
+package com.style24.persistence.domain;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.style24.persistence.TscBaseDomain;
+import com.style24.persistence.TscPageRequest;
+
+import lombok.Data;
+
+/**
+ * 알람 Domain
+ * 
+ * @author jsh77b
+ * @since 2021. 01. 18
+ */
+@SuppressWarnings("serial")
+@Data
+public class OrderChange extends TscBaseDomain {
+	List<Order> cancelReqList;
+	private int ordNo;
+	
+	private int ordChgSq;
+	private String chgGb;
+	private String chgReason;
+	private String chgMemo;
+	private String chgerNm;
+	private String chgerPhnno;
+	private String chgerTelno;
+	private String chgerEmail;
+	private String chgerZipNo;
+	private String chgerBaseAddr;
+	private String chgerDtlAddr;
+	private String chgerRtnMemo;
+	private int addPayCost;
+	private int addPayAmt;
+	private String wdInvoiceNo;
+	private String wdInvoiceSendYn;
+	private String wdStdt;
+	private String wdEddt;
+	private String shipCompCd;
+	
+	private int ordDtlNo;
+	private int chgQty;
+	private String chgStat;
+	private String chgStatNm;
+	private String whMemo;
+	
+	private String accountNo;
+	private String accountNm;
+	private String bankCd;
+	private String bankNm;
+
+	private String allCanYn;
+
+	private String isCustomer;
+	
+	private int[] ordDtlNoArr;
+	private int[] cnclRtnReqQtyArr;
+}

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

@@ -0,0 +1,776 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.style24.admin.biz.dao.TscOrderChangeDao">
+
+	<!-- 주문상세 > 주문취소신청 > 주문취소,반품,교환 대상목록 -->
+	<select id="getCancelRequestTargetList" parameterType="Order" resultType="Order">
+		/* order.getCancelRequestTargetList */
+		SELECT OD.ORD_NO
+		     , OD.ORD_DTL_NO
+		     , OD.ORD_DTL_STAT
+		     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT) AS ORD_DTL_STAT_NM
+		     , CASE WHEN OD.ORD_DTL_STAT IN ('G013_20', 'G013_30', 'G013_40')
+		            THEN 'Y'
+		            ELSE 'N'
+		             END ALL_CAN_YN
+		     , G1.GOODS_CD
+		     , G1.GOODS_NM
+		     , G1.GOODS_TYPE
+		     , FN_GET_CODE_NM('G056', G1.GOODS_TYPE) AS GOODS_TYPE_NM
+		     , ODI.ORD_DTL_ITEM_SQ
+		     , G2.GOODS_CD AS ITEM_CD
+		     , G2.GOODS_NM AS ITEM_NM
+		     , ODI.OPT_CD
+		     , ODI.OPT_CD1
+		     , ODI.OPT_CD2
+		     , ODI.ITEM_QTY
+		     , OD.ORD_QTY
+             , OD.CNCL_RTN_QTY 
+		     , CASE WHEN OCD.ORD_REQ_CHG_QTY IS NULL
+		            THEN 0
+		            ELSE OCD.ORD_REQ_CHG_QTY * ODI.ITEM_QTY
+		            END  ORD_REQ_CHG_QTY
+		     , ODI.ITEM_PRICE
+		     , ODI.OPT_ADD_PRICE
+		     , ODI.ORD_AMT
+		     , ODI.CNCL_RTN_AMT
+		     , ODI.CPN1_DC_AMT 
+		     , ODI.TMTB1_DC_AMT 
+		     , ODI.TMTB2_DC_AMT 
+		     , ODI.GOODS_CPN_DC_AMT 
+		     , ODI.CART_CPN_DC_AMT
+		     , ODI.PNT_DC_AMT 
+		     , ODI.PRE_PNT_DC_AMT 
+		     , ODI.GFCD_USE_AMT
+		     , ODI.REAL_ORD_AMT
+		     , DF.DELV_FEE
+		     , DF.SUPPLY_COMP_CD
+		     , DF.DELV_FEE_CD 
+		     , DFP.MIN_ORD_AMT 
+		     , DFP.DELV_FEE AS ORG_DELV_FEE
+		     , DFP.RTN_DELV_FEE
+		     , DFP.DELV_FEE + DFP.RTN_DELV_FEE AS EXC_DELV_FEE
+		     , 0			AS ORD_CAN_CHG_QTY
+		FROM   TB_ORDER_DETAIL OD
+		INNER  JOIN TB_GOODS G1
+		ON     OD.GOODS_CD = G1.GOODS_CD
+		INNER  JOIN TB_ORDER_DETAIL_ITEM ODI
+		ON     OD.ORD_NO = ODI.ORD_NO
+		AND    OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+		INNER  JOIN TB_GOODS G2
+		ON     ODI.ITEM_CD = G2.GOODS_CD
+		LEFT   OUTER JOIN (
+			SELECT OD.ORD_DTL_NO
+			     , SUM(OCD.CHG_QTY) AS ORD_REQ_CHG_QTY
+			FROM   TB_ORDER_CHANGE_DETAIL OCD
+			INNER  JOIN TB_ORDER_DETAIL OD
+			ON     OCD.ORD_DTL_NO = OD.ORD_DTL_NO
+			WHERE  1=1
+			AND    OD.ORD_NO = #{ordNo}
+			AND    OCD.CHG_STAT IN (
+				'G685_20', 'G685_30', 'G685_40'
+			)
+			GROUP  BY OCD.ORD_DTL_NO
+		) OCD
+		ON     OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+		INNER  JOIN (
+			SELECT X.SUPPLY_COMP_CD
+			     , X.DELV_FEE_CD
+			     , SUM(X.DELV_FEE) AS DELV_FEE
+			FROM   TB_DELIVERY_FEE X
+			WHERE  1=1
+			AND    X.ORD_NO = #{ordNo}
+			AND    X.DELV_FEE_GB = 'G018_10'
+			GROUP  BY X.SUPPLY_COMP_CD
+			        , X.DELV_FEE_CD
+		) DF
+		ON     OD.SUPPLY_COMP_CD = DF.SUPPLY_COMP_CD 
+		AND    OD.DELV_FEE_CD = DF.DELV_FEE_CD 
+		INNER  JOIN TB_DELV_FEE_POLICY DFP
+		ON     DF.SUPPLY_COMP_CD  = DFP.SUPPLY_COMP_CD 
+		AND    DF.DELV_FEE_CD = DFP.DELV_FEE_CD 
+		AND    DFP.USE_YN = 'Y'
+		WHERE  1=1
+		<if test="ordDtlStatArr != null and ordDtlStatArr != ''">
+        AND    OD.ORD_DTL_STAT IN
+			<foreach collection="ordDtlStatArr" item="item" index="index"  open="(" close=")" separator=",">
+        		#{item}
+            </foreach>
+        </if> 
+		AND    OD.ORD_NO = #{ordNo}
+		GROUP  BY OD.ORD_NO
+		     , OD.ORD_DTL_NO
+	    ORDER  BY OD.ORD_NO
+	         , OD.ORD_DTL_NO
+	</select>
+	
+	<!-- 주문상세 > 주문취소신청 > 주문변경정보 등록-->
+	<insert id="createOrderChange" parameterType="OrderChange" keyProperty="ordChgSq">
+		/* Order.createOrderChange */
+		INSERT INTO TB_ORDER_CHANGE (
+			CHG_GB
+			, CHG_REASON
+			, CHG_MEMO
+			, CHGER_NM
+			, CHGER_PHNNO
+			, CHGER_TELNO
+			, CHGER_EMAIL
+			, CHGER_ZIP_NO
+			, CHGER_BASE_ADDR
+			, CHGER_DTL_ADDR
+			, CHGER_RTN_MEMO
+			, ADD_PAY_COST
+			, ADD_PAY_AMT
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		) values (
+			#{chgGb}
+			 , #{chgReason}
+			 , #{chgMemo}
+			 , #{chgerNm}
+			 , #{chgerPhnno}
+			 , #{chgerTelno}
+			 , #{chgerEmail}
+			 , #{chgerZipNo}
+			 , #{chgerBaseAddr}
+			 , #{chgerDtlAddr}
+			 , #{chgerRtnMemo}
+			 , #{addPayCost}
+			 , #{addPayAmt}
+			 , #{regNo}
+			 , SYSDATE()
+			 , #{updNo}
+			 , SYSDATE()
+		)
+	</insert>
+
+	<!-- 주문상세 > 주문취소신청 > 주문상세단품정보 수정 -->
+	<update id="updateOrderDetailItem" parameterType="Order">
+		/* Order.updateOrderDetailItem */
+		UPDATE TB_ORDER_DETAIL_ITEM ODI
+		INNER  JOIN TB_ORDER_DETAIL OD
+		ON     OD.ORD_DTL_NO = OD.ORD_DTL_NO
+		SET    ODI.ORD_DTL_STAT		= CASE WHEN OD.ORD_QTY > (OD.CNCL_RTN_QTY + #{ordCanChgQty})
+		                                   THEN ODI.ORD_DTL_STAT
+		                                   ELSE #{ordDtlStat}
+		                                    END
+		     , ODI.CNCL_RTN_AMT 	= ODI.CNCL_RTN_AMT 			+ #{cnclRtnAmt}
+		     , ODI.CPN1_DC_AMT 		= ODI.CPN1_DC_AMT 			- #{cpn1DcAmt}
+		     , ODI.TMTB1_DC_AMT 	= ODI.TMTB1_DC_AMT 			- #{tmtb1DcAmt}
+		     , ODI.TMTB2_DC_AMT 	= ODI.TMTB1_DC_AMT 			- #{tmtb2DcAmt}
+		     , ODI.GOODS_CPN_DC_AMT = ODI.GOODS_CPN_DC_AMT 		- #{goodsCpnDcAmt}
+		     , ODI.CART_CPN_DC_AMT 	= ODI.CART_CPN_DC_AMT 		- #{cartCpnDcAmt}
+		     , ODI.PNT_DC_AMT 		= ODI.PNT_DC_AMT 			- #{pntDcAmt}
+		     , ODI.PRE_PNT_DC_AMT 	= ODI.PRE_PNT_DC_AMT 		- #{prePntDcAmt}
+		     , ODI.SAVE_PNT_AMT 	= ODI.SAVE_PNT_AMT 			- #{savePntAmt}
+		     , ODI.REAL_ORD_AMT 	= ODI.REAL_ORD_AMT 			- #{realOrdAmt}
+		     , ODI.GFCD_USE_AMT 	= ODI.GFCD_USE_AMT 			- #{gfcdUseAmt}
+		     , ODI.UPD_NO 			= #{updNo}
+		     , ODI.UPD_DT 			= SYSDATE()
+		WHERE  1=1
+		AND    ODI.ORD_NO 			= #{ordNo} 
+		AND    ODI.ORD_DTL_NO 		= #{ordDtlNo} 
+		AND    ODI.ORD_DTL_ITEM_SQ 	= #{ordDtlItemSq}
+	</update>
+	
+	<!-- 주문상세 > 주문취소신청 > 주문상세단품정보 이력 등록 -->
+	<insert id="createOrderDetailItemHst" parameterType="Order">
+		/* Order.createOrderDetailItemHst */
+		INSERT INTO TB_ORDER_DETAIL_ITEM_HST (
+			ORD_DTL_ITEM_SQ
+			, ORD_DTL_NO
+			, ORD_NO
+			, ORD_DTL_STAT
+			, ITEM_CD
+			, OPT_CD
+			, OPT_CD1
+			, OPT_CD2
+			, SKU_MODEL_NO
+			, PRODUCT_NO
+			, PRODUCT_CODE
+			, ITEM_QTY
+			, ITEM_PRICE
+			, OPT_ADD_PRICE
+			, DISP_ORD
+			, ORD_AMT
+			, CNCL_RTN_AMT
+			, CPN1_DC_AMT
+			, TMTB1_DC_AMT
+			, TMTB2_DC_AMT
+			, GOODS_CPN_DC_AMT
+			, CART_CPN_DC_AMT
+			, PNT_DC_AMT
+			, PRE_PNT_DC_AMT
+			, SAVE_PNT_AMT
+			, REAL_ORD_AMT
+			, GFCD_USE_AMT
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		) 
+		SELECT ORD_DTL_ITEM_SQ
+			 , ORD_DTL_NO
+			 , ORD_NO
+			 , #{ordDtlStat}
+			 , ITEM_CD
+			 , OPT_CD
+			 , OPT_CD1
+			 , OPT_CD2
+			 , SKU_MODEL_NO
+			 , PRODUCT_NO
+			 , PRODUCT_CODE
+			 , ITEM_QTY
+			 , ITEM_PRICE
+			 , OPT_ADD_PRICE
+			 , DISP_ORD
+			 , ORD_AMT
+			 , #{cnclRtnAmt}
+			 , #{cpn1DcAmt}
+			 , #{tmtb1DcAmt}
+			 , #{tmtb2DcAmt}
+			 , #{goodsCpnDcAmt}
+			 , #{cartCpnDcAmt}
+			 , #{pntDcAmt}
+			 , #{prePntDcAmt}
+			 , #{savePntAmt}
+			 , #{realOrdAmt}
+			 , #{gfcdUseAmt}
+			 , REG_NO
+			 , REG_DT
+			 , UPD_NO
+			 , UPD_DT
+		FROM   TB_ORDER_DETAIL_ITEM
+		WHERE  1=1
+		AND    ORD_NO = #{ordNo} 
+		AND    ORD_DTL_NO = #{ordDtlNo} 
+		AND    ORD_DTL_ITEM_SQ = #{ordDtlItemSq}
+	</insert>
+	
+	<!-- 주문상세 > 주문취소신청 > 주문상세단품정보 수정 (재고수정) -->
+	<update id="updateOptionQty" parameterType="OrderChange">
+		/* Order.updateOptionQty */
+		UPDATE TB_OPTION OP
+		INNER  JOIN TB_ORDER_DETAIL_ITEM ODI
+		ON     OP.GOODS_CD = ODI.ITEM_CD
+		AND    OP.OPT_CD1 = ODI.OPT_CD1
+		AND    OP.OPT_CD2 = ODI.OPT_CD2
+		SET    OP.CURR_STOCK_QTY = OP.CURR_STOCK_QTY + (ODI.ITEM_QTY * #{ordCanChgQty})
+		     , OP.UPD_NO = #{updNo}
+		     , OP.UPD_DT = SYSDATE()
+		WHERE  1=1
+		AND    ODI.ORD_NO 			= #{ordNo} 
+		AND    ODI.ORD_DTL_NO 		= #{ordDtlNo} 
+		AND    ODI.ORD_DTL_ITEM_SQ 	= #{ordDtlItemSq}
+	</update>
+	
+	<!-- 주문상세 > 주문취소 > 주문상세정보(취소,반품) 이력 등록-->
+	<insert id="createOrderDetailHstCnclRtn" parameterType="Order">
+		/* Order.createOrderDetailHstCnclRtn */
+		INSERT INTO TB_ORDER_DETAIL_HST (
+				ORD_DTL_NO
+				, ORD_NO
+				, ORD_EXCH_GB
+				, ORD_DTL_STAT
+				, ORG_ORD_DTL_NO
+				, SUPPLY_COMP_CD
+				, GOODS_CD
+				, PRODUCT_NO
+				, PRODUCT_CODE
+				, FORMAL_GB
+				, GOODS_TYPE
+				, LIST_PRICE
+				, CURR_PRICE
+				, DC_RATE
+				, OPT_ADD_PRICE
+				, ORD_QTY
+				, ORD_AMT
+				, CNCL_RTN_QTY
+				, CNCL_RTN_AMT
+				, CPN1_CPN_SQ
+				, CPN1_DC_AMT
+				, TMTB1_SQ
+				, TMTB1_DC_AMT
+				, TMTB2_SQ
+				, TMTB2_DC_AMT
+				, GOODS_CPN_SQ
+				, GOODS_CPN_DC_AMT
+				, CART_CPN_SQ
+				, CART_CPN_DC_AMT
+				, BURDEN_RATE
+				, PNT_DC_AMT
+				, PRE_PNT_DC_AMT
+				, SAVE_PNT_AMT
+				, REAL_ORD_AMT
+				, GFCD_USE_AMT
+				, VENDOR_ID
+				, EXTMALL_ID
+				, AGENT_ORDER_ID
+				, EXTMALL_ORDER_ID
+				, CHANGABLE_YN
+				, CHANGE_FEE_FREE_YN
+				, RETURNABLE_YN
+				, RETURN_FEE_FREE_YN
+				, SOLDOUT_YN
+				, SOLDOUT_MEMO
+				, SOLDOUT_REG_NO
+				, SOLDOUT_REG_DT
+				, DELV_ADDR_SQ
+				, DELV_FEE_CD
+				, SHOT_DELV_YN
+				, GIFT_PACK_YN
+				, MAKE_GOODS_YN
+				, ENTRY_NO
+				, DELV_LOC_CD
+				, DELV_ASSIGN_DT
+				, DELV_ASSIGN_STAT
+				, DSTRBT_NOTE
+				, DELV_STDT
+				, DELV_EDDT
+				, SHIP_COMP_CD
+				, INVOICE_NO
+				, INVOICE_SEND_YN
+				, SELL_STORE_CD
+				, SELL_FEE_RATE
+				, AF_LINK_CD
+				, ITHR_CD
+				, CONTENTS_LOC
+				, PLAN_DTL_SQ
+				, SOCIAL_SQ
+				, REG_NO
+				, REG_DT
+				, UPD_NO
+				, UPD_DT
+		)
+		SELECT OD.ORD_DTL_NO
+			 , OD.ORD_NO
+			 , OD.ORD_EXCH_GB
+			 , #{ordDtlStat}
+			 , OD.ORG_ORD_DTL_NO
+			 , OD.SUPPLY_COMP_CD
+			 , OD.GOODS_CD
+			 , OD.PRODUCT_NO
+			 , OD.PRODUCT_CODE
+			 , OD.FORMAL_GB
+			 , OD.GOODS_TYPE
+			 , OD.LIST_PRICE
+			 , OD.CURR_PRICE
+			 , OD.DC_RATE
+			 , OD.OPT_ADD_PRICE
+			 , OD.ORD_QTY
+			 , Z.ORD_AMT
+			 , #{ordCanChgQty}
+			 , OD.ORD_AMT
+			 , OD.CPN1_CPN_SQ
+			 , OD.CPN1_DC_AMT - Z.CPN1_DC_AMT
+			 , OD.TMTB1_SQ
+			 , OD.TMTB1_DC_AMT - Z.TMTB1_DC_AMT
+			 , OD.TMTB2_SQ
+			 , OD.TMTB2_DC_AMT - Z.TMTB2_DC_AMT
+			 , OD.GOODS_CPN_SQ
+			 , OD.GOODS_CPN_DC_AMT - Z.GOODS_CPN_DC_AMT
+			 , OD.CART_CPN_SQ
+			 , OD.CART_CPN_DC_AMT - Z.CART_CPN_DC_AMT
+			 , OD.BURDEN_RATE
+			 , OD.PNT_DC_AMT - Z.PNT_DC_AMT
+			 , OD.PRE_PNT_DC_AMT - Z.PRE_PNT_DC_AMT
+			 , OD.SAVE_PNT_AMT - Z.SAVE_PNT_AMT
+			 , Z.REAL_ORD_AMT
+			 , OD.GFCD_USE_AMT - Z.GFCD_USE_AMT
+			 , OD.VENDOR_ID
+			 , OD.EXTMALL_ID
+			 , OD.AGENT_ORDER_ID
+			 , OD.EXTMALL_ORDER_ID
+			 , OD.CHANGABLE_YN
+			 , OD.CHANGE_FEE_FREE_YN
+			 , OD.RETURNABLE_YN
+			 , OD.RETURN_FEE_FREE_YN
+			 , OD.SOLDOUT_YN
+			 , OD.SOLDOUT_MEMO
+			 , OD.SOLDOUT_REG_NO
+			 , OD.SOLDOUT_REG_DT
+			 , OD.DELV_ADDR_SQ
+			 , OD.DELV_FEE_CD
+			 , OD.SHOT_DELV_YN
+			 , OD.GIFT_PACK_YN
+			 , OD.MAKE_GOODS_YN
+			 , OD.ENTRY_NO
+			 , OD.DELV_LOC_CD
+			 , OD.DELV_ASSIGN_DT
+			 , OD.DELV_ASSIGN_STAT
+			 , OD.DSTRBT_NOTE
+			 , OD.DELV_STDT
+			 , OD.DELV_EDDT
+			 , OD.SHIP_COMP_CD
+			 , OD.INVOICE_NO
+			 , OD.INVOICE_SEND_YN
+			 , OD.SELL_STORE_CD
+			 , OD.SELL_FEE_RATE
+			 , OD.AF_LINK_CD
+			 , OD.ITHR_CD
+			 , OD.CONTENTS_LOC
+			 , OD.PLAN_DTL_SQ
+			 , OD.SOCIAL_SQ
+			 , #{regNo} AS REG_ID
+			 , CURRENT_TIMESTAMP() AS REG_DT
+			 , #{regNo} AS REG_ID
+			 , CURRENT_TIMESTAMP() AS UPD_DT
+		FROM   TB_ORDER_DETAIL OD
+		INNER  JOIN (
+		SELECT ODI.ORD_DTL_NO
+		     , SUM(ODI.ORD_AMT) AS ORD_AMT
+		     , SUM(ODI.CNCL_RTN_AMT) AS CNCL_RTN_AMT
+		     , SUM(ODI.CPN1_DC_AMT) AS CPN1_DC_AMT
+		     , SUM(ODI.TMTB1_DC_AMT) AS TMTB1_DC_AMT
+		     , SUM(ODI.TMTB2_DC_AMT) AS TMTB2_DC_AMT
+		     , SUM(ODI.GOODS_CPN_DC_AMT) AS GOODS_CPN_DC_AMT
+		     , SUM(ODI.CART_CPN_DC_AMT) AS CART_CPN_DC_AMT
+		     , SUM(ODI.PNT_DC_AMT) AS PNT_DC_AMT
+		     , SUM(ODI.PRE_PNT_DC_AMT) AS PRE_PNT_DC_AMT
+		     , SUM(ODI.SAVE_PNT_AMT) AS SAVE_PNT_AMT
+		     , SUM(ODI.REAL_ORD_AMT) AS REAL_ORD_AMT
+		     , SUM(ODI.GFCD_USE_AMT) AS GFCD_USE_AMT
+		FROM   TB_ORDER_DETAIL_ITEM ODI
+		WHERE  ODI.ORD_DTL_NO = #{ordDtlNo}
+		GROUP  BY ODI.ORD_DTL_NO
+		) Z
+		ON    OD.ORD_DTL_NO = Z.ORD_DTL_NO
+		AND   OD.ORD_DTL_NO = #{ordDtlNo}
+	</insert>
+	
+	<!-- 주문상세 > 주문취소신청 > 주문상세정보 수정 -->
+	<update id="updateOrderDetail" parameterType="Order">
+		/* Order.updateOrderDetail */
+		UPDATE TB_ORDER_DETAIL OD
+		INNER  JOIN (
+		SELECT ODI.ORD_DTL_NO
+		     , SUM(ODI.CNCL_RTN_AMT) 		AS CNCL_RTN_AMT
+		     , SUM(ODI.CPN1_DC_AMT) 		AS CPN1_DC_AMT
+		     , SUM(ODI.TMTB1_DC_AMT) 		AS TMTB1_DC_AMT
+		     , SUM(ODI.TMTB2_DC_AMT) 		AS TMTB2_DC_AMT 
+		     , SUM(ODI.GOODS_CPN_DC_AMT) 	AS GOODS_CPN_DC_AMT
+		     , SUM(ODI.CART_CPN_DC_AMT) 	AS CART_CPN_DC_AMT 
+		     , SUM(ODI.PNT_DC_AMT) 			AS PNT_DC_AMT 
+		     , SUM(ODI.PRE_PNT_DC_AMT) 		AS PRE_PNT_DC_AMT
+		     , SUM(ODI.SAVE_PNT_AMT) 		AS SAVE_PNT_AMT 
+		     , SUM(ODI.REAL_ORD_AMT) 		AS REAL_ORD_AMT 
+		     , SUM(ODI.GFCD_USE_AMT) 		AS GFCD_USE_AMT 
+		FROM   TB_ORDER_DETAIL_ITEM ODI
+		WHERE  ODI.ORD_NO = #{ordNo} 
+		AND    ODI.ORD_DTL_NO = #{ordDtlNo}
+		GROUP  BY ODI.ORD_DTL_NO
+		) Z
+		ON     OD.ORD_DTL_NO 			= Z.ORD_DTL_NO
+		SET    OD.ORD_DTL_STAT			= CASE WHEN OD.ORD_QTY > (OD.CNCL_RTN_QTY + #{ordCanChgQty})
+		                                       THEN OD.ORD_DTL_STAT
+		                                       ELSE #{ordDtlStat}
+		                                        END
+		     , OD.CNCL_RTN_QTY			= OD.CNCL_RTN_QTY + #{ordCanChgQty}
+		     , OD.CNCL_RTN_AMT  		= Z.CNCL_RTN_AMT
+		     , OD.CPN1_DC_AMT 			= Z.CPN1_DC_AMT
+		     , OD.TMTB1_DC_AMT 			= Z.TMTB1_DC_AMT
+		     , OD.TMTB2_DC_AMT 			= Z.TMTB2_DC_AMT
+		     , OD.GOODS_CPN_DC_AMT 		= Z.GOODS_CPN_DC_AMT
+		     , OD.CART_CPN_DC_AMT 		= Z.CART_CPN_DC_AMT
+		     , OD.PNT_DC_AMT 			= Z.PNT_DC_AMT
+		     , OD.PRE_PNT_DC_AMT 		= Z.PRE_PNT_DC_AMT
+		     , OD.SAVE_PNT_AMT 			= Z.SAVE_PNT_AMT
+		     , OD.REAL_ORD_AMT 			= Z.REAL_ORD_AMT
+		     , OD.GFCD_USE_AMT 			= Z.GFCD_USE_AMT
+		WHERE  1=1
+		AND    OD.ORD_NO = #{ordNo}
+		AND    OD.ORD_DTL_NO = #{ordDtlNo}
+	</update>
+	
+	<!-- 주문상세 > 주문취소신청 > 주문변경정보상세 등록-->
+	<insert id="createOrderChangeDetail" parameterType="OrderChange">
+		/* Order.createOrderChangeDetail */
+		INSERT INTO TB_ORDER_CHANGE_DETAIL (
+			ORD_CHG_SQ
+			, ORD_DTL_NO
+			, CHG_QTY
+			, CHG_STAT
+			, COMPLETE_DT
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		) VALUES (
+			#{ordChgSq}
+			, #{ordDtlNo}
+			, #{chgQty}
+			, #{chgStat}
+			, SYSDATE()
+			, #{regNo}
+			, SYSDATE()
+			, #{updNo}
+			, SYSDATE()
+		)
+	</insert>
+	
+	<!-- 주문상세 > 주문취소신청 > 주문환불금액정보 등록 -->
+	<insert id="createPayment" parameterType="Order" keyProperty="paySq">
+		/* Order.createPayment */
+		INSERT INTO TB_PAYMENT (
+			ORD_NO
+			, PAY_DT
+			, PAY_MEANS
+			, PAY_AMT
+			, PG_CPN_AMT
+			, NPAY_PNT_AMT
+			, PAY_GB
+			, PAY_STAT
+			, PG_GB
+			, PG_TID
+			, PG_TRADE_NO
+			, PG_SHOP_ID
+			, CARD_TYPE
+			, CARD_KIND
+			, CARD_BANK
+			, CARD_NM
+			, CARD_MIPS
+			, CARD_PCABLE_YN
+			, VA_NO
+			, VA_NM
+			, VA_BANK
+			, VA_DEADLINE
+			, TELECOM
+			, ESCROW_YN
+			, ORD_CHG_SQ
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		) 
+		SELECT ORD_NO
+		 	 , SYSDATE()
+			 , PAY_MEANS
+			 , #{payAmt}
+			 , #{pgCpnAmt}
+			 , #{npayPntAmt}
+			 , PAY_GB
+			 , #{payStat}
+			 , PG_GB
+			 , #{pgTid}
+			 , #{pgTradeNo}
+			 , PG_SHOP_ID
+			 , CARD_TYPE
+			 , CARD_KIND
+			 , CARD_BANK
+			 , CARD_NM
+			 , CARD_MIPS
+			 , CARD_PCABLE_YN
+			 , #{vaNo}
+			 , #{vaNm}
+			 , #{vaBank}
+			 , #{vaDeadline}
+			 , TELECOM
+			 , ESCROW_YN
+			 , #{ordChgSq}
+			 , #{regNo}
+			 , SYSDATE()
+			 , #{updNo}
+			 , SYSDATE()
+		FROM   TB_PAYMENT 
+		WHERE  1=1
+		AND    ORD_NO = #{ordNo}
+		AND    PAY_GB = 'O'
+		AND    PAY_STAT = 'G016_30'
+	</insert>
+	
+	<!-- 주문상세 > 주문취소신청 > 주문환불정보 등록 -->
+	<insert id="createRefund" parameterType="Order">
+		/* Order.createRefund */
+		INSERT INTO TB_REFUND (
+			ORD_NO
+			, PAY_SQ
+			, ORD_CHG_SQ
+			, REFUND_AMT
+			, RA_NO
+			, RA_BANK
+			, RA_NM
+			, RF_CPN1_AMT
+			, RF_TMTB1_AMT
+			, RF_TMTB2_AMT
+			, RF_GOODS_CPN_AMT
+			, RF_CART_CPN_AMT
+			, RF_PNT_AMT
+			, RF_PRE_PNT_AMT
+			, RF_GFCD_USE_AMT
+			, REG_NO
+			, REG_DT
+		) VALUES (
+			#{ordNo}
+			, #{paySq}
+			, #{ordChgSq}
+			, #{refundAmt}
+			, #{raNo}
+			, #{raBank}
+			, #{raNm}
+			, #{rfCpn1Amt}
+			, #{rfTmtb1Amt}
+			, #{rfTmtb2Amt}
+			, #{rfGoodsCpnAmt}
+			, #{rfCartCpnAmt}
+			, #{rfPntAmt}
+			, #{rfPrePntAmt}
+			, #{rfGfcdUseAmt}
+			, #{regNo}
+			, SYSDATE()
+		)
+	</insert>
+
+	<!-- 주문상세 > 주문취소신청 > 주문추가배송금액등록-->
+	<insert id="createDeliveryFee" parameterType="Order">
+		/* Order.createDeliveryFee */
+		INSERT INTO TB_DELIVERY_FEE ( 
+			PAY_SQ
+			, ORD_NO
+			, DELV_FEE_GB
+			, DELV_FEE_CD
+			, DELV_FEE
+			, DELV_CPN_SQ
+			, DELV_CPN_DC_AMT
+			, REAL_DELV_AMT
+			, ORD_CHG_SQ
+			, SUPPLY_COMP_CD
+			, DELV_USAC_YN
+			, DELV_USAC_DT
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		) VALUES (
+			#{paySq}
+			, #{ordNo}
+			, #{delvFeeGb}
+			, #{delvFeeCd}
+			, #{delvFee}
+			, #{delvCpnSq}
+			, #{delvCpnDcAmt}
+			, #{realDelvAmt}
+			, #{ordChgSq}
+			, #{supplyCompCd}
+			, 'N'
+			, null
+			, #{regNo}
+			, SYSDATE()
+			, #{updNo}
+			, SYSDATE()
+		)
+	</insert>
+	
+	<!-- 주문상세 > 주문취소신청 > 주문사은품취소 -->
+	<update id="updateOrdFreegiftDel" parameterType="Order">
+		/* Order.updateOrdFreegiftDel */
+		UPDATE TB_ORD_FREEGIFT_VAL
+		SET    DEL_YN= 'N'
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = SYSDATE()
+		WHERE  FREEGIFT_VAL_SQ IN (
+			SELECT OFRV.FREEGIFT_VAL_SQ 
+			FROM   TB_ORD_FREEGIFT OFR
+			INNER  JOIN TB_ORD_FREEGIFT_VAL OFRV
+			ON     OFR.ORD_FREEGIFT_SQ  = OFRV.ORD_FREEGIFT_SQ 
+			WHERE  1=1
+			AND    OFR.ORD_NO = (SELECT CASE WHEN SUM(X.ORD_QTY) > SUM(X.CNCL_RTN_QTY)
+								             THEN 0
+								             ELSE X.ORD_NO
+								             END 
+								 FROM   TB_ORDER_DETAIL X
+								 WHERE  1=1
+								 AND    X.ORD_NO = #{ordNo})
+		)
+	</update>
+	
+	
+	
+	<!-- 주문상세 > 주문취소 > 고객환불계좌정보 조회 -->
+	<select id="getRefundAccount" parameterType="Order" resultType="Order">
+		/* Order.getRefundAccount */
+		SELECT Z.ACCOUNT_NO
+		     , Z.ACCOUNT_NM
+		     , Z.BANK_CD
+		     , FN_GET_CODE_NM('G940', Z.BANK_CD) AS BANK_NM
+		     , Z.DEFAULT_YN
+		     , Z.REG_DT
+		FROM   (
+			SELECT CA.ACCOUNT_NO
+			     , CA.ACCOUNT_NM 
+			     , CA.BANK_CD
+			     , CA.DEFAULT_YN
+			     , CA.REG_DT
+			FROM   TB_ORDER O
+			LEFT   OUTER JOIN TB_CUST_ACCOUNT CA 
+			ON     O.CUST_NO = CA.CUST_NO
+			WHERE  1=1
+			AND    O.CUST_NO = 0
+			GROUP  BY CA.ACCOUNT_NO
+			     , CA.ACCOUNT_NM 
+			     , CA.BANK_CD
+			     , CA.DEFAULT_YN
+			ORDER  BY CA.DEFAULT_YN DESC
+			     , CA.REG_DT DESC
+		) Z
+	</select>
+	
+	<!-- 주문상세 > 주문취소 > 고객환불계좌정보 중복체크 -->
+	<select id="getRefundAccountCheck" parameterType="Order" resultType="int">
+		/* Order.getRefundAccountCheck */
+		SELECT COUNT(1)
+		FROM   TB_CUST_ACCOUNT CA
+		WHERE  1=1
+		AND    CA.ACCOUNT_NO = ${accountNo}
+		AND    CA.ACCOUNT_NM = #{accountNm}
+		AND    CA.BANK_CD = #{bankCd}
+		AND    CA.DEL_YN = 'N'
+	</select>
+	
+	<!-- 주문상세 > 주문취소 > 고객환불계좌정보 등록 -->
+	<insert id="saveRefundAccount" parameterType="Order">
+		/* Order.saveRefundAccount */
+		INSERT INTO TB_CUST_ACCOUNT (
+			CUST_NO
+			, BANK_CD
+			, ACCOUNT_NO
+			, ACCOUNT_NM
+			, DEFAULT_YN
+			, DEL_YN
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		) VALUES (
+			#{custNo}
+			, #{bankCd}
+			, #{accountNo}
+			, #{accountNm}
+			, 'N'
+			, 'N'
+			, #{regNo}
+			, SYSDATE()
+			, #{updNo}
+			, SYSDATE()
+		)
+	</insert>
+	
+	
+	
+</mapper>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+