Jelajahi Sumber

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

jsshin 5 tahun lalu
induk
melakukan
f617fd0a33

+ 11 - 1
src/main/java/com/style24/core/biz/dao/TscOrderChangeDao.java

@@ -16,7 +16,7 @@ import com.style24.persistence.domain.OrderChange;
 public interface TscOrderChangeDao {
 	
 	/**
-	 * 취소,반품,교환 대상목록 조회
+	 * 주문변경대상목록 조회(취소, 반품, 교환)
 	 *
 	 * @param Order - 주문 정보
 	 * @return
@@ -25,6 +25,16 @@ public interface TscOrderChangeDao {
 	 */
 	List<Order> getCancelRequestTargetList(Order order);
 	
+	/**
+	 * 주문변경신청목록 조회 (취소, 반품, 교환)
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	List<Order> getOrderChangeDetailList(Order order);
+	
 	/**
 	 * 주문상세단품정보 수정
 	 *

+ 347 - 274
src/main/java/com/style24/core/biz/service/TscOrderChangeService.java

@@ -36,7 +36,7 @@ public class TscOrderChangeService {
 	private TscOrderDao orderDao;
 	
 	/**
-	 * 주문변경정보 (상세번호배열, 취소수량배열) 취소 목록으로 변환
+	 * 주문변경정보 (상세번호배열, 취소수량배열) 취소 목록으로 변환 (사용안함)
 	 * @param Order
 	 * @return Order
 	 * @author jsh77b
@@ -92,7 +92,7 @@ public class TscOrderChangeService {
 	}
 	
 	/**
-	 * 주문변경 대상목록 조회
+	 * 주문변경 대상목록 조회 (취소, 반품, 교환)
 	 * @param Order
 	 * @return Order
 	 * @author jsh77b
@@ -103,166 +103,16 @@ public class TscOrderChangeService {
 	}
 	
 	/**
-	 * 취소신청 (batch(napy), batch(extmall))
+	 * 주문변경신청목록 조회 (취소, 반품, 교환)
 	 * @param Order
 	 * @return Order
 	 * @author jsh77b
-	 * @since 2021. 01. 19
+	 * @since 2021. 01. 27
 	 */
-	@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);
-					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);
-					}
-				}
-				// 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;
+	public List<Order> getOrderChangeDetailList(Order order) {
+		return orderChangeDao.getOrderChangeDetailList(order);
 	}
-	
+
 	/**
 	 * 취소신청철회 (admin)
 	 * @param Order
@@ -279,6 +129,7 @@ public class TscOrderChangeService {
 		order.setOrdDtlStat(TscConstants.OrderChangeStat.CANCEL_CANCEL.value());
 		order.setRegNo(userNo);
 		order.setUpdNo(userNo);
+		order.setDelYn("Y");
 		
 		// 1. 주문변경정보 (TB_ORDER_CHANGE_DTL(수정))
 		orderChangeDao.updateOrderChangeDtlCancel(order);
@@ -286,48 +137,12 @@ public class TscOrderChangeService {
 		// 2. 주문정보 이력 등록 (TB_ORDER_DETAIL_HST(등록))
 		orderChangeDao.createOrderDtlHstCancel(order);
 		
-		// To Do List
+		// TODO
 		// 3. PG 실행 (취소시 추가결제금액 취소처리)
 		
 		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;
-	}
-	
 	/**
 	 * 취소완료 (admin, front, batch(soldout), batch(gift), batch(napy), batch(extmall))
 	 * @param Order
@@ -343,7 +158,7 @@ public class TscOrderChangeService {
 		//userNo = userNo;
 		
 		// 2. 취소요정정보목록
-		List<Order> cancelReqList		 	= (List<Order>) mav.get("cnclRtnList");				// 취소요청 목록
+		//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 단위)
 				
@@ -365,8 +180,8 @@ public class TscOrderChangeService {
 			cancelOrderRefundPo.setUpdNo(userNo);
 			
 			// 2020.01.05 추후 무통장입금전 전체 취소시 분기 로직 추가 예정
-			// 2021.01.26 취소완료일때실행
-			if ("cnclComplete".equals(reqGbn)) {
+			// 2021.01.26 취소완료, 취소신청완료(취소승인) 일때실행
+			if ("cnclComplete".equals(reqGbn) || "cnclReqComplete".equals(reqGbn)) {
 				if ("Y".equals(allCanYn)) {
 					cancelOrderRefundPo.setOrdDtlStat(TscConstants.OrderDetailStat.PAYMENT_BEFORE_CANCEL.value()); 	// 결제전주문취소 (공통코드:G685)
 				} else {
@@ -377,9 +192,9 @@ public class TscOrderChangeService {
 			// 4.1 취소수량이 존재하면 주문상세단품정보 수정 및 주문상세단품이력정보 등록
 			if (cancelOrderRefundPo.getOrdCanChgQty() > 0) {
 				
-				// 2021.01.26 취소완료일때실행
+				// 2021.01.26 취소완료, 취소신청완료(취소승인) 일때실행
 				// 4.2 주문상세단품정보수정 (TB_ORDER_DETAIL_ITEM)
-				if ("cnclComplete".equals(reqGbn)) {
+				if ("cnclComplete".equals(reqGbn) || "cnclReqComplete".equals(reqGbn)) {
 					orderChangeDao.updateOrderDetailItem(cancelOrderRefundPo);
 				
 				
@@ -437,7 +252,10 @@ public class TscOrderChangeService {
 				orderChange.setChgerEmail(chgerEmail);
 				orderChange.setChgerRtnMemo("");
 				
-				orderChangeDao.createOrderChange(orderChange);
+				// 2021.01.26 취소완료, 취소신청 일때실행
+				if ("cnclComplete".equals(reqGbn) || "cnclReq".equals(reqGbn)) {
+					orderChangeDao.createOrderChange(orderChange);
+				}
 				
 				// 5.3 주문상세단위 취소정보
 				for (int j=0 ; j<cancelOrderDetailList.size() ; j++) {
@@ -448,9 +266,9 @@ public class TscOrderChangeService {
 					// 5.3.0 DEVL_FEE_CD 단위로 주문상세 정보 처리
 					if (obj.getDelvFeeCd().equals(vo.getDelvFeeCd())) {
 						
-						// 2021.01.26 취소완료일때실행
+						// 2021.01.26 취소완료, 취소신청완료 일때실행
 						// 2020.01.05 추후 무통장입금전 전체 취소시 분기로직 추가 예정
-						if ("cnclComplete".equals(reqGbn)) {
+						if ("cnclComplete".equals(reqGbn) || "cnclReqComplete".equals(reqGbn)) {
 							if ("Y".equals(allCanYn)) {
 								vo.setOrdDtlStat(TscConstants.OrderDetailStat.PAYMENT_BEFORE_CANCEL.value()); 	// 결제전주문취소
 							} else {
@@ -463,9 +281,9 @@ public class TscOrderChangeService {
 						// 5.3.1 주문변경상세정보 이력등록
 						orderChangeDao.createOrderDetailHstCnclRtn(vo);
 						
-						// 2021.01.26 취소완료일때실행
+						// 2021.01.26 취소완료, 취소신청완료 일때실행
 						// 5.3.2 주문변경상세정보 수정
-						if ("cnclComplete".equals(reqGbn)) {
+						if ("cnclComplete".equals(reqGbn) || "cnclReqComplete".equals(reqGbn)) {
 							orderChangeDao.updateOrderDetail(vo);
 						}
 						
@@ -481,18 +299,35 @@ public class TscOrderChangeService {
 						// 2021.01.26 취소완료일때실행
 						if ("cnclComplete".equals(reqGbn)) {
 							changeDetailPo.setChgStat(TscConstants.OrderChangeStat.CANCEL_COMPLETE.value()); 	// 취소완료
-						} else {
-							changeDetailPo.setChgStat(TscConstants.OrderChangeStat.CANCEL.value()); 	// 취소신청
+							orderChangeDao.createOrderChangeDetail(changeDetailPo);
+						}
+						// 2021.01.26 취소신청완료일때실행
+						else if ("cnclReqComplete".equals(reqGbn)) {
+							Order order = new Order();
+							order.setOrdNo(mav.getInt("ordNo"));
+							order.setOrdChgSq(mav.getInt("ordChgSq"));
+							order.setOrdDtlStat(TscConstants.OrderChangeStat.CANCEL_COMPLETE.value());
+							order.setUpdNo(userNo);
+							order.setDelYn("N");
+							orderChangeDao.updateOrderChangeDtlCancel(order);
+						}
+						// 2021.01.26 취소신청일때실행
+						else {
+							changeDetailPo.setChgStat(TscConstants.OrderChangeStat.CANCEL.value()); 			// 취소신청
+							orderChangeDao.createOrderChangeDetail(changeDetailPo);
 						}
-						
-						orderChangeDao.createOrderChangeDetail(changeDetailPo);
 					}
 				}
 				
-				// 2021.01.26 취소완료일때실행
+				// 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 환불결제정보 등록 (업체별 & 배송정책별) 단위
@@ -520,8 +355,8 @@ public class TscOrderChangeService {
 				paymentOrder.setRegNo(userNo);
 				paymentOrder.setUpdNo(userNo);
 				
-				// 2021.01.26 취소완료일때실행
-				if ("cnclComplete".equals(reqGbn)) {
+				// 2021.01.26 취소완료, 취소신청완료 일때실행
+				if ("cnclComplete".equals(reqGbn) || "cnclReqComplete".equals(reqGbn)) {
 					orderChangeDao.createPayment(paymentOrder);
 				}
 				
@@ -547,7 +382,10 @@ public class TscOrderChangeService {
 				refundOrder.setRaNm(mav.get("accountNm").toString());
 				refundOrder.setRaBank(mav.get("bankCd").toString());
 				
-				orderChangeDao.createRefund(refundOrder);
+				// 2021.01.26 취소완료, 취소신청 일때실행
+				if ("cnclComplete".equals(reqGbn) || "cnclReq".equals(reqGbn)) {
+					orderChangeDao.createRefund(refundOrder);
+				}
 				
 				// 5.6 결제금액이 무료배송금액보다 작으면 배송비 신규 등록
 				if (obj.getAddDelvFee() > 0) {
@@ -564,21 +402,21 @@ public class TscOrderChangeService {
 					delvFeeOrder.setRegNo(userNo);
 					delvFeeOrder.setUpdNo(userNo);
 					
-					// 2021.01.26 취소완료일때실행
-					if ("cnclComplete".equals(reqGbn)) {
+					// 2021.01.26 취소완료, 취소신청완료일때실행
+					if ("cnclComplete".equals(reqGbn) || "cnclReqComplete".equals(reqGbn)) {
 						orderChangeDao.createDeliveryFee(delvFeeOrder);
 					}
 				}
 			}
 		}
 		
-		// To Do List
+		// TODO
 		// 9. 포인트원복 (사용포인트, 주문상세단위)
 		
-		// To Do List
+		// TODO
 		// 10. 쿠폰원복 (상품쿠폰, 주문상세단위) (전체취소시 장바구니쿠폰, 배송비쿠폰)
 		
-		// To Do List
+		// TODO
 		// 11. 상품권원복
 		
 		// 12. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
@@ -587,10 +425,10 @@ public class TscOrderChangeService {
 		//freegiftOrder.setUpdNo(userNo);
 		//orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
 		
-		// To Do List
+		// TODO
 		// 13. PG 연동
 		
-		// To Do List
+		// TODO
 		// 14. 취소 완료 알림톡 발송 에정
 		
 		//int a = 100/0;
@@ -794,32 +632,11 @@ public class TscOrderChangeService {
 		result.set("status", GagaResponseStatus.FAIL.getCode());
 		
 		// 교환 기본 정보
-		int ordNo = excReq.getOrdNo();						// 주문번호
-		String isCustomer = excReq.getIsCustomer();			// 귀책사유
-		String wdGb = excReq.getWdGb();						// 회수구분 (D:직접배송, W:회수요청)
-		String chgMemo = excReq.getChgMemo();				// 교환메모
 		int addPayCost = excReq.getAddPayCost();			// 추가배송비
+		String wdGb = excReq.getWdGb();						// 회수구분
 		Integer regNo = excReq.getRegNo();					// 등록자번호
 		Integer updNo = excReq.getUpdNo();					// 수정자번호
 		
-		// 회수지 정보
-		String chgerNm = excReq.getChgerNm();
-		String chgerTelno = excReq.getChgerTelno();
-		String chgerPhnno = excReq.getChgerPhnno();
-		String chgerEmail = excReq.getChgerEmail();
-		String chgerZipcode = excReq.getChgerZipcode();
-		String chgerBaseAddr = excReq.getChgerBaseAddr();
-		String chgerDtlAddr = excReq.getChgerDtlAddr();
-		
-		// 교환지 정보
-		String recipNm = excReq.getRecipNm();
-		String recipTelno = excReq.getRecipTelno();
-		String recipPhnno = excReq.getRecipPhnno();
-		String recipEmail = excReq.getRecipEmail();
-		String recipZipcode = excReq.getRecipZipcode();
-		String recipBaseAddr = excReq.getRecipBaseAddr();
-		String recipDtlAddr = excReq.getRecipDtlAddr();
-		
 		// 교환신청 목록 설정
 		Collection<Order> excReqList = excReq.getCancelReqList();
 
@@ -844,25 +661,33 @@ public class TscOrderChangeService {
 		deliveryAddr.setRecipBaseAddr(excReq.getRecipBaseAddr());
 		deliveryAddr.setRecipDtlAddr(excReq.getRecipDtlAddr());
 		deliveryAddr.setDelvMemo(excReq.getDelvMemo());
-		deliveryAddr.setRegNo(excReq.getRegNo());
-		deliveryAddr.setUpdNo(excReq.getUpdNo());
+		deliveryAddr.setRegNo(regNo);
+		deliveryAddr.setUpdNo(updNo);
 		
 		orderDao.createDeliveryAddr(deliveryAddr);
 		
+		// 생성된 delvAddrSq 등록
 		int delvAddrSq = deliveryAddr.getDelvAddrSq();
 		
-		// 3. TB_ORDER_CHANGE 등록
+		// 교환대상 정보 등록
 		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.setChgerNm(excReq.getChgerNm());
 				orderChange.setChgerPhnno(excReq.getChgerPhnno());
 				orderChange.setChgerTelno(excReq.getChgerTelno());
@@ -871,10 +696,10 @@ public class TscOrderChangeService {
 				orderChange.setChgerBaseAddr(excReq.getChgerBaseAddr());
 				orderChange.setChgerDtlAddr(excReq.getChgerDtlAddr());
 				orderChange.setChgerRtnMemo(excReq.getChgerRtnMemo());
-				orderChange.setAddPayCost(excReq.getAddPayCost());
+				orderChange.setAddPayCost(addPayCost);
 				orderChange.setAddPayAmt(excReq.getAddPayAmt());
-				orderChange.setRegNo(excReq.getRegNo());
-				orderChange.setUpdNo(excReq.getUpdNo());
+				orderChange.setRegNo(regNo);
+				orderChange.setUpdNo(updNo);
 
 				orderChangeDao.createOrderChange(orderChange);
 				
@@ -882,62 +707,89 @@ public class TscOrderChangeService {
 				
 				// 생성된 ordChgSq 설정
 				ordChgSq = orderChange.getOrdChgSq();
+				
+				log.info("############# ordChgSq >>> {} ##############", ordChgSq);
+
+				// 4. TB_DELIVERY_FEE 추가배송비 등록
+				int delvFee = 0;
 
-				// 3. TB_DELIVERY_FEE 추가배송비 등록
+				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);
 			}
 			
-			// 2. 교환대상 정보 등록
-			int ordDtlNo = order.getOrdDtlNo();
-			int exchangeOrdDtlNo = 0;
-
 			if (preOrdDtlNo != ordDtlNo) {
-				// 2-1. TB_ORDER_DETAIL 등록
+				// 5. TB_ORDER_DETAIL 등록
 				Order ordDtl = new Order();
 				ordDtl.setOrdDtlNo(ordDtlNo);
 				ordDtl.setOrdDtlStat(ordDtlStat);
-				ordDtl.setChgQty(order.getChgQty());
+				ordDtl.setOptCd2(ordChgOpt);
+				ordDtl.setChgQty(chgQty);
 				ordDtl.setDelvAddrSq(delvAddrSq);
-				ordDtl.setRegNo(order.getRegNo());
-				ordDtl.setUpdNo(order.getUpdNo());
+				ordDtl.setRegNo(regNo);
+				ordDtl.setUpdNo(updNo);
+				
 				orderDao.createOrderDetailForExchange(ordDtl);
 
-				// 2-2. TB_ORDER_DETAIL_HST 등록
-				orderDao.createOrderDetailHstForExchange(ordDtl);
-				
-				preOrdDtlNo = ordDtlNo;
+				// 생성된 ordDtlNo 설정
 				exchangeOrdDtlNo = ordDtl.getExchangeOrdDtlNo();
 
-				// 2-3. TB_ORDER_CHANGE_DETAIL 등록
+				log.info("############# exchangeOrdDtlNo >>> {} ##############", exchangeOrdDtlNo);
+
+				// 6. TB_ORDER_DETAIL_HST 등록
+				orderDao.createOrderDetailHstForExchange(ordDtl);
+
+				// 7. TB_ORDER_CHANGE_DETAIL 등록
 				OrderChange orderChangeDetail = new OrderChange();
 				orderChangeDetail.setOrdChgSq(ordChgSq);
 				orderChangeDetail.setOrdDtlNo(ordDtlNo);
-				orderChangeDetail.setChgQty(order.getChgQty());
+				orderChangeDetail.setChgQty(chgQty);
 				orderChangeDetail.setChgStat(orderChangeStat);
 				orderChangeDetail.setChgOrdDtlNo(exchangeOrdDtlNo);
-				orderChangeDetail.setRegNo(order.getRegNo());
-				orderChangeDetail.setUpdNo(order.getUpdNo());
+				orderChangeDetail.setRegNo(regNo);
+				orderChangeDetail.setUpdNo(updNo);
+				
+				orderChangeDao.createOrderChangeDetail(orderChangeDetail);
+
+				preOrdDtlNo = ordDtlNo;
 			}
 
-			// 2-4. TB_ORDER_DETAIL_ITEM 등록
+			// 8. TB_ORDER_DETAIL_ITEM 등록
 			Order ordDtlItem = new Order();
 			ordDtlItem.setOrdDtlItemSq(order.getOrdDtlItemSq());
 			ordDtlItem.setOrdDtlNo(ordDtlNo);
 			ordDtlItem.setOrdDtlStat(ordDtlStat);
-			ordDtlItem.setOrdChgOpt(order.getOrdChgOpt());
-			ordDtlItem.setRegNo(order.getRegNo());
-			ordDtlItem.setUpdNo(order.getUpdNo());
+			ordDtlItem.setOrdChgOpt(ordChgOpt);
+			ordDtlItem.setRegNo(regNo);
+			ordDtlItem.setUpdNo(updNo);
 			
 			orderDao.createOrderDetailItemForExchange(ordDtlItem);
 
-			// 2-5. TB_ORDER_DETAIL_ITEM_HST 등록
+			// 9. TB_ORDER_DETAIL_ITEM_HST 등록
 			orderDao.createOrderDetailItemHstForExchange(ordDtlItem);
-
-			
-			
 		}
 
-		// 4. TB_SELL_QTY 등록
-
+		// 10. TB_SELL_QTY 등록
+		OrderChange sellQty = new OrderChange();
+		sellQty.setSellGb(TscConstants.SellGb.EXCHANGE.value());
+		sellQty.setRegNo(regNo);
+		sellQty.setOrdChgSq(ordChgSq);
+		
+		orderChangeDao.createSellQty(sellQty);
+		
 		result.set("status", GagaResponseStatus.SUCCESS.getCode());
 		
 		return result;
@@ -1016,4 +868,225 @@ public class TscOrderChangeService {
 		
 		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;
+						}
+					}
+				}
+				
+				// 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);
+					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);
+					}
+				}
+				// 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;
+	}
 }

+ 21 - 0
src/main/java/com/style24/core/support/env/TscConstants.java

@@ -329,6 +329,27 @@ public class TscConstants {
 			return value;
 		}
 	}
+	
+	// 판매구분
+	public enum SellGb {
+		ORDER("10"),				// 주문(-)
+		ORDER_CANCEL("11"),			// 주문취소(+)
+		SHIP_CANCEL("12"),			// 미출고(+)
+		EXCHANGE("20"),				// 교환신청(-)
+		EXCHANGE_CANCEL("21"),		// 교환취소(+)
+		SALE("30");					// 판매매출반영(+)
+		
+
+		private String value;
+
+		private SellGb(String value) {
+			this.value = value;
+		}
+
+		public String value() {
+			return value;
+		}
+	}
 //
 //	// 정산구분
 //	public enum UsacGb {

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

@@ -76,4 +76,5 @@ public class OrderChange extends TscBaseDomain {
 	private String delYn;
 	
 	private String reqGbn;
+	private String sellGb;
 }

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

@@ -3,8 +3,12 @@
 <mapper namespace="com.style24.core.biz.dao.TscOrderDao">
 
 	<!-- 주문상세정보 생성 -->
-	<insert id="createOrderDetailForExchange" parameterType="Order" keyProperty="exchangeOrdDtlNo">
+	<insert id="createOrderDetailForExchange" parameterType="Order">
 		/* order.createOrderDetailForExchange */
+		<selectKey keyProperty="exchangeOrdDtlNo" resultType="int" order="AFTER">
+			SELECT LAST_INSERT_ID()
+		</selectKey>
+
 		INSERT INTO TB_ORDER_DETAIL (
 			ORD_NO
 		  , ORD_EXCH_GB
@@ -85,8 +89,8 @@
 			 , ORD_DTL_NO
 			 , SUPPLY_COMP_CD
 			 , GOODS_CD
-			 , PRODUCT_NO
-			 , PRODUCT_CODE
+			 , PRODUCT_NO -- X
+			 , PRODUCT_CODE -- X
 			 , FORMAL_GB
 			 , GOODS_TYPE
 			 , LIST_PRICE
@@ -313,6 +317,10 @@
 	<!-- 주문상세단품정보 생성 -->
 	<insert id="createOrderDetailItemForExchange" parameterType="Order" keyProperty="exchangeOrdDtlItemSq">
 		/* order.createOrderDetailItemForExchange */
+		<selectKey keyProperty="exchangeOrdDtlItemSq" resultType="int" order="AFTER">
+			SELECT LAST_INSERT_ID()
+		</selectKey>
+
 		INSERT INTO TB_ORDER_DETAIL_ITEM (
 			ORD_DTL_NO
 		  , ORD_NO
@@ -346,19 +354,19 @@
 		  , UPD_DT
 		)
 		SELECT #{ordDtlNo}
-			 , ORD_NO
+			 , ODI.ORD_NO
 			 , #{ordDtlStat}
-			 , ITEM_CD
-			 , OPT_CD
-			 , OPT_CD1
-			 , #{ordChgOpt}
-			 , SKU_MODEL_NO
-			 , PRODUCT_NO
-			 , PRODUCT_CODE
-			 , ITEM_QTY
-			 , ITEM_PRICE
-			 , OPT_ADD_PRICE
-			 , DISP_ORD
+			 , ODI.ITEM_CD
+			 , OP.OPT_CD
+			 , OP.OPT_CD1
+			 , OP.OPT_CD2
+			 , OP.SKU_MODEL_NO
+			 , OP.PRODUCT_NO
+			 , OP.PRODUCT_CODE
+			 , ODI.ITEM_QTY
+			 , ODI.ITEM_PRICE
+			 , ODI.OPT_ADD_PRICE
+			 , ODI.DISP_ORD
 			 , 0
 			 , 0
 			 , 0
@@ -375,7 +383,13 @@
 			 , NOW()
 			 , #{updNo}
 			 , NOW()
-		  FROM TB_ORDER_DETAIL_ITEM
+		  FROM TB_ORDER_DETAIL_ITEM ODI
+		 INNER JOIN TB_GOODS G
+		    ON ODI.ITEM_CD = G.GOODS_CD
+		 INNER JOIN TB_OPTION OP
+		    ON G.GOODS_CD = OP.GOODS_CD
+		   AND ODI.OPT_CD1 = OP.OPT_CD1
+		   AND OP.OPT_CD2 = #{ordChgOpt}
 		 WHERE ORD_DTL_ITEM_SQ = #{ordDtlItemSq}
 	</insert>
 

+ 61 - 3
src/main/java/com/style24/persistence/mybatis/shop/TscOrderChange.xml

@@ -51,7 +51,7 @@
 		     , 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
+		     , X.CHG_QTY AS ORD_CAN_CHG_QTY
 		     , VS.OPT_CD2S
 		     , VS.CURR_STOCK_QTYS
 		     , DL.RTN_LOC_NM
@@ -120,6 +120,10 @@
 		) VS
 		ON     ODI.ITEM_CD = VS.GOODS_CD
 		AND    ODI.OPT_CD1 = VS.OPT_CD1
+		LEFT   OUTER JOIN TB_ORDER_CHANGE_DETAIL X
+		ON     OD.ORD_DTL_NO = X.ORD_DTL_NO
+		AND    X.DEL_YN = 'N'
+		AND    X.ORD_CHG_SQ = #{ordChgSq}
 		WHERE  1=1
 		<if test="ordDtlStatArr != null and ordDtlStatArr != ''">
         AND    OD.ORD_DTL_STAT IN
@@ -135,6 +139,60 @@
 	         , OD.ORD_NO
 	         , OD.ORD_DTL_NO
 	</select>
+	
+	<!-- 주문변경신청목록 조회 (취소, 반품, 교환) -->
+	<select id="getOrderChangeDetailList" parameterType="Order" resultType="Order">
+		/* order.getOrderChangeList */
+		SELECT OCD.ORD_CHG_SQ
+		     , OCD.ORD_DTL_NO
+		     , OC.CHG_GB
+		     , FN_GET_CODE_NM('G680', OC.CHG_GB) AS CHG_GB_NM
+		     , OD.GOODS_CD
+		     , ODI.OPT_CD1
+		     , ODI.OPT_CD2
+		     , OCD.CHG_STAT 
+		     , FN_GET_CODE_NM('G685', OCD.CHG_STAT) AS CHG_STAT_NM
+		     , OCD.CHG_QTY
+		     , DATE_FORMAT(OCD.REG_DT,'%Y%m%d%H%i%S') AS REG_DT
+		     , OC.CHG_REASON 
+		     , CASE WHEN OC.CHG_GB = 'G680_20' THEN FN_GET_CODE_NM('G686', OC.CHG_REASON)
+		            WHEN OC.CHG_GB = 'G680_30' THEN FN_GET_CODE_NM('G688', OC.CHG_REASON)
+		            WHEN OC.CHG_GB = 'G680_40' THEN FN_GET_CODE_NM('G689', OC.CHG_REASON)
+		            ELSE '결제전취소'
+		            END  CHG_REASON_NM
+		     , OC.CHG_MEMO
+		     , OC.CHGER_NM
+		     , OC.CHGER_PHNNO 
+		     , OC.CHGER_ZIPCODE
+		     , OC.CHGER_BASE_ADDR
+		     , OC.CHGER_DTL_ADDR
+		     , OC.WD_INVOICE_SEND_YN
+		     , OC.WD_INVOICE_NO
+		FROM   TB_ORDER_CHANGE_DETAIL OCD
+		INNER  JOIN TB_ORDER_CHANGE OC
+		ON     OC.ORD_CHG_SQ = OCD.ORD_CHG_SQ 
+		INNER  JOIN TB_ORDER_DETAIL OD
+		ON     OCD.ORD_DTL_NO = OD.ORD_DTL_NO 
+		INNER  JOIN (
+			SELECT X.ORD_DTL_ITEM_SQ
+			     , X.ORD_DTL_NO
+			     , X.ITEM_CD
+			     , X.OPT_CD
+			     , X.OPT_CD1
+			     , X.OPT_CD2
+			FROM   TB_ORDER_DETAIL_ITEM X
+			WHERE  X.ORD_NO = #{ordNo}
+			LIMIT  1
+		) ODI 
+		WHERE  1=1
+		AND    OD.ORD_NO = #{ordNo}
+		<if test='ordChgSq != null and ordChgSq != ""'>
+		AND    OCD.ORD_CHG_SQ = #{ordChgSq}	
+		</if>
+		AND    OCD.DEL_YN = 'N'
+		ORDER  BY OC.ORD_CHG_SQ
+		     , OCD.ORD_DTL_NO 
+	</select>
 
 	<!-- 주문상세단품정보 수정 -->
 	<update id="updateOrderDetailItem" parameterType="Order">
@@ -256,7 +314,7 @@
 		) 
 		SELECT ODI.ITEM_CD 
 		     , ODI.OPT_CD
-		     , '11'
+		     , #{sellGb}
 		     , ODI.ORD_DTL_NO
 		     , OCD.ORD_CHG_SQ
 		     , OD.AGENT_ORDER_ID 
@@ -808,7 +866,7 @@
 		/* OrderChange.updateOrderChangeDtlCancel */
 		UPDATE TB_ORDER_CHANGE_DETAIL
 		SET    CHG_STAT 	= #{ordDtlStat}
-		     , DEL_YN		= 'Y'
+		     , DEL_YN		= #{delYn}
 		     , UPD_NO 		= #{updNo}
 		     , UPD_DT 		= NOW()
 		WHERE  1=1